Untitled
unknown
plain_text
a year ago
8.9 kB
15
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("Введите номер действия.");
}
}
}
}
}Editor is loading...
Leave a Comment