使用c#写一个点餐系统
时间: 2023-08-02 15:42:55 浏览: 54
好的,点餐系统可以分为客户端和服务端两部分。客户端负责展示菜单、接收用户的点餐信息以及向服务端发送请求。服务端负责处理请求,保存订单信息并提供管理订单的功能。以下是一个简单的C#点餐系统示例:
### 客户端
```csharp
using System;
using System.Net.Http;
using System.Text.Json;
using System.Collections.Generic;
namespace OrderClient
{
class Program
{
static HttpClient client = new HttpClient();
static JsonSerializerOptions options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("欢迎使用点餐系统!");
Console.WriteLine("请选择您要点的菜品:");
// 获取菜单信息
var menu = GetMenu();
foreach (var item in menu)
{
Console.WriteLine($"{item.Id}: {item.Name} - {item.Price}元");
}
// 输入订单信息
Console.Write("请输入您要点的菜品编号,多个菜品请用逗号隔开:");
var input = Console.ReadLine();
// 发送订单信息到服务端
var order = new Order { Items = input.Split(',') };
var response = client.PostAsJsonAsync("http://localhost:5000/orders", order).Result;
if (response.IsSuccessStatusCode)
{
Console.WriteLine("订单提交成功!");
}
else
{
Console.WriteLine("订单提交失败,请稍后再试!");
}
Console.WriteLine("按任意键继续点餐,按q退出程序。");
var key = Console.ReadKey();
if (key.KeyChar == 'q')
{
break;
}
}
}
static List<MenuItem> GetMenu()
{
var response = client.GetAsync("http://localhost:5000/menu").Result;
if (response.IsSuccessStatusCode)
{
var content = response.Content.ReadAsStringAsync().Result;
return JsonSerializer.Deserialize<List<MenuItem>>(content, options);
}
else
{
return new List<MenuItem>();
}
}
}
class Order
{
public string[] Items { get; set; }
}
class MenuItem
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
}
```
### 服务端
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace OrderServer.Controllers
{
[ApiController]
[Route("[controller]")]
public class OrdersController : ControllerBase
{
private static readonly List<Order> orders = new List<Order>();
private static readonly List<MenuItem> menu = new List<MenuItem>
{
new MenuItem { Id = 1, Name = "麻婆豆腐", Price = 18.5M },
new MenuItem { Id = 2, Name = "宫保鸡丁", Price = 22M },
new MenuItem { Id = 3, Name = "清蒸鲈鱼", Price = 56M },
new MenuItem { Id = 4, Name = "红烧肉", Price = 38M },
new MenuItem { Id = 5, Name = "酸菜鱼", Price = 48M }
};
private readonly ILogger<OrdersController> _logger;
public OrdersController(ILogger<OrdersController> logger)
{
_logger = logger;
}
[HttpGet]
[Route("menu")]
public List<MenuItem> GetMenu()
{
return menu;
}
[HttpPost]
public IActionResult Post([FromBody] OrderRequest request)
{
var order = new Order
{
Id = Guid.NewGuid().ToString(),
Items = request.Items.Select(GetMenuItemById).ToList(),
TotalPrice = request.Items.Select(GetMenuItemById).Sum(item => item.Price)
};
orders.Add(order);
return Ok();
}
[HttpGet]
public List<Order> Get()
{
return orders;
}
[HttpDelete]
public IActionResult Delete(string id)
{
var order = orders.FirstOrDefault(o => o.Id == id);
if (order != null)
{
orders.Remove(order);
return Ok();
}
else
{
return NotFound();
}
}
private MenuItem GetMenuItemById(string id)
{
if (int.TryParse(id, out var itemId))
{
return menu.FirstOrDefault(item => item.Id == itemId);
}
else
{
throw new ArgumentException("Invalid item id", nameof(id));
}
}
}
public class OrderRequest
{
public string[] Items { get; set; }
}
public class Order
{
public string Id { get; set; }
public List<MenuItem> Items { get; set; }
public decimal TotalPrice { get; set; }
}
public class MenuItem
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
}
```
以上代码仅供参考,实际生产环境中需要考虑更多的安全性、性能等方面。