Untitled

 avatar
unknown
plain_text
2 months ago
8.9 kB
9
Indexable
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