Untitled
using System; using System.Collections.Generic; using System.Data.SQLite; namespace PizzeriaAppWithDB { class Pizza { public int Id { get; set; } public string Name { get; set; } public double Price { get; set; } public Pizza(int id, string name, double price) { Id = id; Name = name; Price = price; } public override string ToString() { return $"{Id}. {Name} - {Price:C}"; } } class Database { private const string ConnectionString = "Data Source=pizzeria.db;Version=3;"; public void Initialize() { using (var connection = new SQLiteConnection(ConnectionString)) { connection.Open(); var createPizzaTable = "CREATE TABLE IF NOT EXISTS Pizzas (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Price REAL)"; var createOrdersTable = @" CREATE TABLE IF NOT EXISTS Orders ( Id INTEGER PRIMARY KEY AUTOINCREMENT, PizzaId INTEGER, OrderDate TEXT, FOREIGN KEY(PizzaId) REFERENCES Pizzas(Id) )"; using (var command = new SQLiteCommand(createPizzaTable, connection)) { command.ExecuteNonQuery(); } using (var command = new SQLiteCommand(createOrdersTable, connection)) { command.ExecuteNonQuery(); } // Добавим пиццы в базу данных, если они отсутствуют var insertPizzaQuery = "INSERT INTO Pizzas (Name, Price) SELECT @Name, @Price WHERE NOT EXISTS (SELECT 1 FROM Pizzas WHERE Name = @Name)"; var pizzas = new List<Pizza> { new Pizza(0, "Маргарита", 500), new Pizza(0, "Пепперони", 600), new Pizza(0, "Гавайская", 550) }; foreach (var pizza in pizzas) { using (var command = new SQLiteCommand(insertPizzaQuery, connection)) { command.Parameters.AddWithValue("@Name", pizza.Name); command.Parameters.AddWithValue("@Price", pizza.Price); command.ExecuteNonQuery(); } } } } public List<Pizza> GetPizzas() { var pizzas = new List<Pizza>(); using (var connection = new SQLiteConnection(ConnectionString)) { connection.Open(); var query = "SELECT * FROM Pizzas"; using (var command = new SQLiteCommand(query, connection)) using (var reader = command.ExecuteReader()) { while (reader.Read()) { pizzas.Add(new Pizza(reader.GetInt32(0), reader.GetString(1), reader.GetDouble(2))); } } } return pizzas; } public List<(string PizzaName, string OrderDate)> GetOrderHistory() { var orders = new List<(string PizzaName, string OrderDate)>(); using (var connection = new SQLiteConnection(ConnectionString)) { connection.Open(); var query = @" SELECT Pizzas.Name, Orders.OrderDate FROM Orders JOIN Pizzas ON Orders.PizzaId = Pizzas.Id"; using (var command = new SQLiteCommand(query, connection)) using (var reader = command.ExecuteReader()) { while (reader.Read()) { orders.Add((reader.GetString(0), reader.GetString(1))); } } } return orders; } public void AddOrder(int pizzaId) { using (var connection = new SQLiteConnection(ConnectionString)) { connection.Open(); var query = "INSERT INTO Orders (PizzaId, OrderDate) VALUES (@PizzaId, @OrderDate)"; using (var command = new SQLiteCommand(query, connection)) { command.Parameters.AddWithValue("@PizzaId", pizzaId); command.Parameters.AddWithValue("@OrderDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); command.ExecuteNonQuery(); } } } } class Program { static void MakeOrder(Database db) { var pizzas = db.GetPizzas(); var order = new List<Pizza>(); while (true) { Console.WriteLine("\nМеню пицц:"); foreach (var pizza in pizzas) { Console.WriteLine(pizza); } Console.WriteLine("0. Завершить заказ"); Console.Write("\nВыберите пиццу (номер): "); if (int.TryParse(Console.ReadLine(), out int choice)) { if (choice == 0) { break; } var selectedPizza = pizzas.Find(p => p.Id == choice); if (selectedPizza != null) { order.Add(selectedPizza); db.AddOrder(selectedPizza.Id); Console.WriteLine($"{selectedPizza.Name} добавлена в заказ."); } else { Console.WriteLine("Некорректный выбор."); } } else { Console.WriteLine("Введите номер пиццы."); } } Console.WriteLine("\nВаш заказ:"); double total = 0; foreach (var pizza in order) { Console.WriteLine(pizza); total += pizza.Price; } Console.WriteLine($"Итого: {total:C}"); Console.WriteLine("Спасибо за заказ! Ожидайте доставку."); } static void ShowOrderHistory(Database db) { var history = db.GetOrderHistory(); if (history.Count == 0) { Console.WriteLine("История заказов пуста."); return; } Console.WriteLine("\nИстория заказов:"); foreach (var (pizzaName, orderDate) in history) { Console.WriteLine($"{orderDate}: {pizzaName}"); } } static void Main(string[] args) { var db = new Database(); db.Initialize(); Console.WriteLine("Добро пожаловать в пиццерию!"); while (true) { Console.WriteLine("\nВыберите действие:"); Console.WriteLine("1. Посмотреть меню и сделать заказ"); Console.WriteLine("2. Посмотреть историю заказов"); Console.WriteLine("0. Выход"); Console.Write("\nВаш выбор: "); if (int.TryParse(Console.ReadLine(), out int choice)) { switch (choice) { case 1: MakeOrder(db); break; case 2: ShowOrderHistory(db); break; case 0: Console.WriteLine("До свидания!"); return; default: Console.WriteLine("Некорректный выбор."); break; } } else { Console.WriteLine("Введите номер действия."); } } } } }
Leave a Comment