Untitled
unknown
plain_text
10 months ago
12 kB
7
Indexable
using System;
using System.Collections.Generic;
using System.Data.SQLite;
namespace PizzeriaAppWithDB
{
// Базовый класс для меню
abstract class MenuItem
{
private int _id;
private string _name;
private double _price;
public int Id
{
get => _id;
set => _id = value;
}
public string Name
{
get => _name;
set => _name = value;
}
public double Price
{
get => _price;
set => _price = value;
}
protected MenuItem(int id, string name, double price)
{
_id = id;
_name = name;
_price = price;
}
public abstract override string ToString();
}
// Класс для пиццы
class Pizza : MenuItem
{
public Pizza(int id, string name, double price) : base(id, name, price)
{
}
public override string ToString()
{
return $"{Id}. {Name} - {Price} р (Пицца)";
}
}
// Класс для напитков
class Drink : MenuItem
{
public int Volume { get; set; } // в миллилитрах
public Drink(int id, string name, double price, int volume) : base(id, name, price)
{
Volume = volume;
}
public override string ToString()
{
return $"{Id}. {Name} - {Price} р ({Volume} мл, Напиток)";
}
}
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 createDrinkTable = "CREATE TABLE IF NOT EXISTS Drinks (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Price REAL, Volume INTEGER)";
var createOrdersTable = @"CREATE TABLE IF NOT EXISTS Orders (Id INTEGER PRIMARY KEY AUTOINCREMENT, MenuItemId INTEGER, ItemType TEXT, OrderDate TEXT)";
using (var command = new SQLiteCommand(createPizzaTable, connection))
{
command.ExecuteNonQuery();
}
using (var command = new SQLiteCommand(createDrinkTable, 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();
}
}
var insertDrinkQuery = "INSERT INTO Drinks (Name, Price, Volume) SELECT @Name, @Price, @Volume WHERE NOT EXISTS (SELECT 1 FROM Drinks WHERE Name = @Name)";
var drinks = new List<Drink>
{
new Drink(0, "Кола", 150, 500),
new Drink(0, "Сок", 120, 300),
new Drink(0, "Вода", 50, 500)
};
foreach (var drink in drinks)
{
using (var command = new SQLiteCommand(insertDrinkQuery, connection))
{
command.Parameters.AddWithValue("@Name", drink.Name);
command.Parameters.AddWithValue("@Price", drink.Price);
command.Parameters.AddWithValue("@Volume", drink.Volume);
command.ExecuteNonQuery();
}
}
}
}
public List<MenuItem> GetMenuItems()
{
var menuItems = new List<MenuItem>();
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
// Получаем пиццы
var pizzaQuery = "SELECT * FROM Pizzas";
using (var command = new SQLiteCommand(pizzaQuery, connection))
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
menuItems.Add(new Pizza(reader.GetInt32(0), reader.GetString(1), reader.GetDouble(2)));
}
}
// Получаем напитки
var drinkQuery = "SELECT * FROM Drinks";
using (var command = new SQLiteCommand(drinkQuery, connection))
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
menuItems.Add(new Drink(reader.GetInt32(0), reader.GetString(1), reader.GetDouble(2), reader.GetInt32(3)));
}
}
}
return menuItems;
}
public void AddOrder(int itemId, string itemType)
{
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
var query = "INSERT INTO Orders (MenuItemId, ItemType, OrderDate) VALUES (@ItemId, @ItemType, @OrderDate)";
using (var command = new SQLiteCommand(query, connection))
{
command.Parameters.AddWithValue("@ItemId", itemId);
command.Parameters.AddWithValue("@ItemType", itemType);
command.Parameters.AddWithValue("@OrderDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
command.ExecuteNonQuery();
}
}
}
public List<(string ItemName, string ItemType, string OrderDate)> GetOrderHistory()
{
var orders = new List<(string ItemName, string ItemType, string OrderDate)>();
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
var query = @"SELECT
CASE WHEN ItemType = 'Pizza' THEN (SELECT Name FROM Pizzas WHERE Id = Orders.MenuItemId)
WHEN ItemType = 'Drink' THEN (SELECT Name FROM Drinks WHERE Id = Orders.MenuItemId)
END AS ItemName,
ItemType,
OrderDate
FROM Orders";
using (var command = new SQLiteCommand(query, connection))
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
orders.Add((reader.GetString(0), reader.GetString(1), reader.GetString(2)));
}
}
}
return orders;
}
}
class Program
{
static void MakeOrder(Database db)
{
var menuItems = db.GetMenuItems();
var order = new List<MenuItem>();
while (true)
{
Console.WriteLine("\nМеню:");
for (int i = 0; i < menuItems.Count; i++)
{
Console.WriteLine($"{i + 1}. {menuItems[i]}");
}
Console.WriteLine("0. Завершить заказ");
Console.Write("\nВыберите товар (номер): ");
if (int.TryParse(Console.ReadLine(), out int choice))
{
if (choice == 0)
{
break;
}
if (choice > 0 && choice <= menuItems.Count)
{
var selectedItem = menuItems[choice - 1];
order.Add(selectedItem);
db.AddOrder(selectedItem.Id, selectedItem is Pizza ? "Pizza" : "Drink");
Console.WriteLine($"{selectedItem.Name} добавлена в заказ.");
}
else
{
Console.WriteLine("Некорректный выбор.");
}
}
else
{
Console.WriteLine("Введите номер товара.");
}
}
Console.WriteLine("\nВаш заказ:");
double total = 0;
foreach (var item in order)
{
Console.WriteLine(item);
total += item.Price;
}
Console.WriteLine($"Итого: {total} р");
Console.WriteLine("Спасибо за заказ! Ожидайте доставку.");
}
static void ShowOrderHistory(Database db)
{
var history = db.GetOrderHistory();
if (history.Count == 0)
{
Console.WriteLine("История заказов пуста.");
return;
}
Console.WriteLine("\nИстория заказов:");
foreach (var (itemName, itemType, orderDate) in history)
{
Console.WriteLine($"{orderDate}: {itemName} ({itemType})");
}
}
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("Введите номер действия.");
}
}
}
}
}Editor is loading...
Leave a Comment