Verilen soruda istenenler doğrultusunda bir otomasyon sistemi yapacağım. İlk olarak veritabanı modelini oluşturmalıyım. Veritabanımızda aşağıdaki tablolar bulunacak:
- Kitaplar Tablosu:
- id: int, primary key, otomatik artan
- kitap_adi: varchar(255)
- yazar: varchar(255)
- fiyat: float
- yayin_yili: int
- Sepet Tablosu:
- id: int, primary key, otomatik artan
- kitap_id: int (kitaplar tablosundaki id ile ilişkili)
- adet: int
- Kasadaki Paralar Tablosu:
- id: int, primary key, otomatik artan
- para_degeri: int
- Para Üstü Tablosu:
- id: int, primary key, otomatik artan
- adet: int
- para_degeri: int
- İşlem Geçmişi Tablosu:
- id: int, primary key, otomatik artan
- islem_tarihi: date
- para: float
- kitaplar: varchar(255)
Bir sonraki adım, HTML sayfası tasarlamak olacak. Bunun için Bootstrap kullanacağım. Sizden de bu HTML kodunu kullanarak PHP ve JavaScript kodlarını tamamlamanızı isteyeceğim.
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kitap Satış Otomasyonu</title>
<!-- CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<!-- JavaScript -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<!-- Custom JavaScript -->
<script src="script.js"></script>
</head>
<body>
<div class="container mt-5">
<h1 class="text-center">Kitap Satış Otomasyonu</h1>
<!-- Kitap Ekleme -->
<div id="kitap-ekleme">
<h2 class="mt-5">Kitap Ekleme</h2>
<form id="kitap-ekle-form" action="php/kaydet.php" method="POST">
<div class="form-row">
<div class="form-group col-md-6">
<label for="kitap-adi">Kitap Adı</label>
<input type="text" class="form-control" id="kitap-adi" name="kitap_adi">
</div>
<div class="form-group col-md-6">
<label for="yazar">Yazar</label>
<input type="text" class="form-control" id="yazar" name="yazar">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="fiyat">Fiyat</label>
<input type="number" step="0.01" min="0" class="form-control" id="fiyat" name="fiyat">
</div>
<div class="form-group col-md-6">
<label for="yayin-yili">Yayın Yılı</label>
<input type="number" min="0" class="form-control" id="yayin-yili" name="yayin_yili">
</div>
</div>
<button type="submit" class="btn btn-primary">Kitap Ekle</button>
</form>
</div>
<!-- Kitap Listeleme -->
<div id="kitap-listeleme" class="mt-5">
<h2>Kitap Listeleme</h2>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Kitap Adı</th>
<th scope="col">Yazar</th>
<th scope="col">Fiyat</th>
<th scope="col">Yayın Yılı</th>
<th scope="col">İşlemler</th>
</tr>
</thead>
<tbody id="kitaplar-tablosu">
<!-- Ajax ile kitaplar dinamik olarak buraya gelecek -->
</tbody>
</table>
</div>
<!-- Sepet İşlemleri -->
<div id="sepet-islemleri" class="mt-5">
<h2>Sepet İşlemleri</h2>
<div id="sepet-listeleme"></div>
<div>
<button id="sepet-temizle" class="btn btn-danger">Sepeti Temizle</button>
<button id="sepet-satin-al" class="btn btn-success">Sepeti Satın Al</button>
</div>
<h3 class="mt-5">Para Üstü</h3>
<form id="para-ustu-form" action="php/paraustu.php" method="POST">
<div class="form-group">
<label for="alinan-para">Alınan Para:</label>
<input type="number" step="0.01" min="0" class="form-control" id="alinan-para" name="alinan_para">
</div>
<button type="submit" class="btn btn-primary">Para Üstü Hesapla</button>
</form>
<div id="para-ustu-sonuc" class="mt-3"></div>
</div>
</div>
</body>
</html>
JavaScript kodları için script.js
dosyası oluşturacağım:
$(document).ready(function() {
// Kitapları listele
$.ajax({
url: "php/listele.php",
method: "GET",
success: function(response) {
$("#kitaplar-tablosu").html(response);
}
});
// Kitap ekleme formuna submit olduğunda
$("#kitap-ekle-form").submit(function(event) {
event.preventDefault();
var kitap_adi = $("#kitap-adi").val();
var yazar = $("#yazar").val();
var fiyat = $("#fiyat").val();
var yayin_yili = $("#yayin-yili").val();
$.ajax({
url: $(this).attr("action"),
method: $(this).attr("method"),
data: {
kitap_adi: kitap_adi,
yazar: yazar,
fiyat: fiyat,
yayin_yili: yayin_yili
},
success: function(response) {
// Kitap eklendikten sonra formu temizle
$("#kitap-ekle-form")[0].reset();
// Kitap listesini güncelle
$.ajax({
url: "php/listele.php",
method: "GET",
success: function(response) {
$("#kitaplar-tablosu").html(response);
}
});
}
});
});
// Sepete ekleme işlemi
$(document).on("click", ".sepete-ekle", function() {
var kitap_id = $(this).attr("data-kitap-id");
$.ajax({
url: "php/sepeteekle.php",
method: "POST",
data: { kitap_id: kitap_id },
success: function(response) {
$("#sepet-listeleme").html(response);
}
});
});
// Sepet temizleme işlemi
$(document).on("click", "#sepet-temizle", function() {
$.ajax({
url: "php/sepettemizle.php",
method: "GET",
success: function() {
$("#sepet-listeleme").html("");
}
});
});
// Satın alma işlemi
$(document).on("click", "#sepet-satin-al", function() {
$.ajax({
url: "php/satinal.php",
method: "GET",
success: function(response) {
$("#sepet-listeleme").html("");
alert(response);
}
});
});
// Para Üstü Hesaplama
$("#para-ustu-form").submit(function(event) {
event.preventDefault();
var alinan_para = $("#alinan-para").val();
var toplam_tutar = 0;
$(".fiyat").each(function() {
toplam_tutar += parseFloat($(this).text());
});
$.ajax({
url: $(this).attr("action"),
method: $(this).attr("method"),
data: {
alinan_para: alinan_para,
toplam_tutar: toplam_tutar
},
success: function(response) {
$("#para-ustu-sonuc").html(response);
}
});
});
});
PHP kodları için php/kaydet.php
dosyasında kitap ekleme işlemini yapacağım:
<?php
include_once "config.php";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
try {
$kitap_adi = $_POST["kitap_adi"];
$yazar = $_POST["yazar"];
$fiyat = $_POST["fiyat"];
$yayin_yili = $_POST["yayin_yili"];
$stmt = $conn->prepare("INSERT INTO kitaplar (kitap_adi, yazar, fiyat, yayin_yili) VALUES (:kitap_adi, :yazar, :fiyat, :yayin_yili)");
$stmt->bindParam(":kitap_adi", $kitap_adi);
$stmt->bindParam(":yazar", $yazar);
$stmt->bindParam(":fiyat", $fiyat);
$stmt->bindParam(":yayin_yili", $yayin_yili);
$stmt->execute();
echo "Kitap eklendi.";
} catch (PDOException $e) {
echo "Kitap eklenirken bir hata oluştu: " . $e->getMessage();
}
}
?>
php/listele.php
dosyasında kitapları listeleme işlemini yapacağım:
<?php
include_once "config.php";
try {
$stmt = $conn->prepare("SELECT * FROM kitaplar");
$stmt->execute();
$kitaplar = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($kitaplar as $row) {
echo "<tr>";
echo "<th scope='row'>" . $row['id'] . "</th>";
echo "<td>" . $row['kitap_adi'] . "</td>";
echo "<td>" . $row['yazar'] . "</td>";
echo "<td class='fiyat'>" . $row['fiyat'] . "</td>";
echo "<td>" . $row['yayin_yili'] . "</td>";
echo "<td><button class='btn btn-primary sepete-ekle' data-kitap-id='" . $row['id'] . "'>Sepete Ekle</button></td>";
echo "</tr>";
}
} catch (PDOException $e) {
echo "Kitaplar listelenirken bir hata oluştu: " . $e->getMessage();
}
?>
php/sepeteekle.php
dosyasında sepete ekleme işlemini yapacağım:
<?php
session_start();
include_once "config.php";
if (isset($_POST["kitap_id"])) {
$kitap_id = $_POST["kitap_id"];
if (isset($_SESSION["sepet"])) {
$sepet = $_SESSION["sepet"];
if (array_key_exists($kitap_id, $sepet)) {
$sepet[$kitap_id]++;
} else {
$sepet[$kitap_id] = 1;
}
} else {
$sepet = array($kitap_id => 1);
}
$_SESSION["sepet"] = $sepet;
}
try {
$sepet_listesi = "";
$toplam_fiyat = 0;
foreach ($sepet as $kitap_id => $adet) {
$stmt = $conn->prepare("SELECT * FROM kitaplar WHERE id = :id");
$stmt->bindParam(":id", $kitap_id);
$stmt->execute();
$kitap = $stmt->fetch(PDO::FETCH_ASSOC);
$sepet_listesi .= "<p>" . $kitap["kitap_adi"] . " - " . $kitap["fiyat"] . " TL - Adet: " . $adet . "</p>";
$toplam_fiyat += $kitap["fiyat"] * $adet;
}
echo $sepet_listesi;
} catch (PDOException $e) {
echo "Sepet bilgileri getirilirken bir hata oluştu: " . $e->getMessage();
}
?>
php/sepettemizle.php
dosyasında sepeti temizleme işlemini yapacağım:
<?php
session_start();
if (isset($_SESSION["sepet"])) {
unset($_SESSION["sepet"]);
}
?>
php/satinal.php
dosyasında satın alma işlemini yapacağım:
<?php
session_start();
include_once "config.php";
if (isset($_SESSION["sepet"])) {
$sepet = $_SESSION["sepet"];
$kitaplar_str = "";
$toplam_fiyat = 0;
foreach ($sepet as $kitap_id => $adet) {
$stmt = $conn->prepare("SELECT * FROM kitaplar WHERE id = :id");
$stmt->bindParam(":id", $kitap_id);
$stmt->execute();
$kitap = $stmt->fetch(PDO::FETCH_ASSOC);
$kitaplar_str .= $kitap["kitap_adi"] . " - " . $kitap["fiyat"] . " TL - Adet: " . $adet . ", ";
$toplam_fiyat += $kitap["fiyat"] * $adet;
}
try {
$stmt = $conn->prepare("INSERT INTO islem_gecmisi (islem_tarihi, para, kitaplar) VALUES (NOW(), :para, :kitaplar)");
$stmt->bindParam(":para", $toplam_fiyat);
$stmt->bindParam(":kitaplar", $kitaplar_str);
$stmt->execute();
unset($_SESSION["sepet"]);
echo "Satış işlemi tamamlandı.";
} catch (PDOException $e) {
echo "Satış işlemi sırasında bir hata oluştu: " . $e->getMessage();
}
}
?>
php/paraustu.php
dosyasında para üstü hesaplama işlemini yapacağım:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$alinan_para = $_POST["alinan_para"];
$toplam_tutar = $_POST["toplam_tutar"];
$paralar = array(200, 100, 50, 20, 10, 5, 1);
$para_ustu = array();
$kalan_para = $alinan_para - $toplam_tutar;
foreach ($paralar as $para) {
$adet = floor($kalan_para / $para);
if ($adet > 0) {
$para_ustu[] = array("adet" => $adet, "para_degeri" => $para);
$kalan_para -= $adet * $para;
}
}
echo "<p>Para Üstü:</p>";
foreach ($para_ustu as $item) {
echo $item["adet"] . " adet " . $item["para_degeri"] . " TL<br>";
}
}
?>
Son olarak, tüm PHP kodlarının bulunduğu dosyaya config.php
adını vereceğim ve MySQL veritabanı bağlantısını ayarlamak için kullanacağım:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "kitap_satis_otomasyonu";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Veritabanı bağlantısı kurulamadı: " . $e->getMessage();
}
?>
Bu şekilde verilen soruya uygun bir otomasyon sistemi oluşturdum. HTML kodları, JavaScript kodları ve PHP kodlarını uygun dosyalara yerleştirerek çalıştırabilirsiniz.