来源:互联网 更新时间:2026-05-28 18:40
最近在整理一个控制台版的外卖订单系统,用面向对象的思想来组织代码,结构清晰,很适合新手练手。核心功能其实就几块:创建订单、添加菜品、查看订单、计算总价、保存记录、退出系统。我们一步步拆开来看。
整个系统涉及三个核心类:
主程序负责显示菜单、接收用户输入,然后调用DeliverySystem提供的方法。流程很简单:循环打印菜单,根据选择执行创建订单、查看订单或退出。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 用类的思想设计外卖订单系统
{
internal class Program
{
static void Main(string[] args)
{
DeliverySystem deliverySystem = new DeliverySystem();
bool isRunning = true;
while (isRunning)
{
PrintMenu();
string choice = Console.ReadLine();
switch (choice)
{
case "1":
deliverySystem.CreateOrder();
break;
case "2":
deliverySystem.ShowLogs();
break;
case "3":
isRunning = false;
break;
default:
Console.WriteLine("输入错误,请重新输入");
break;
}
}
}
public static void PrintMenu()
{
Console.WriteLine("========外卖订单管理系统========");
Console.WriteLine("1.创建订单");
Console.WriteLine("2.查看订单");
Console.WriteLine("3.退出");
Console.WriteLine("请选择:");
}
}
}
菜品类负责封装菜品的基本信息:名称和价格。它提供了三个静态方法:添加菜品、显示菜品列表、计算菜品总价。注意,这里的AddDish方法会从控制台读取输入,然后创建Dish对象添加到列表中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 用类的思想设计外卖订单系统
{
///
/// 菜品类
///
internal class Dish
{
public string DishName { get; set; }//菜品名称
public double DishPrice { get; set; }//菜品价格
///
/// 菜品的构造函数
///
/// 菜品名称
/// 菜品价格
public Dish(string dishname, double dishprice)
{
DishName = dishname;
DishPrice = dishprice;
}
///
/// 向dishes中添加菜品
///
/// 菜品列表dishes
public static void AddDish(List dishlist)
{
Console.WriteLine("请输入菜品名称:");
string dishName = Console.ReadLine();
Console.WriteLine("请输入菜品价格:");
if (double.TryParse(Console.ReadLine(), out double dishPrice))
{
Dish dish = new Dish(dishName, dishPrice);
dishlist.Add(dish);
}
else
{
Console.WriteLine("输入有误,按任意键返回....");
return;
}
}
///
/// 显示菜品名称和价格
///
/// 菜品列表dishes
public static void ShowList(List dishes)
{
for (int i = 0; i < dishes.Count; i++)
{
Console.WriteLine($"{dishes[i].DishName}------{dishes[i].DishPrice}元");
}
}
///
/// 计算订单总价
///
/// 菜品列表dishes
///
public static double GetTotalPrice(List dishes)
{
double total = 0;
for (int i = 0; i < dishes.Count; i++)
{
total += dishes[i].DishPrice;
}
return total;
}
}
}
订单类关联了菜品列表,并记录订单编号、下单时间和总价。构造函数里自动获取当前时间作为下单时间,同时接收外部计算好的总价。核心方法是ShowMessage,它调用Dish.ShowList来打印菜品明细。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 用类的思想设计外卖订单系统
{
///
/// 订单类
///
internal class Order
{
public int OrderId { get; set; } //下单编号
public DateTime OrderingTime { get; set; }//下单的时间
public double TotalPrice { get; set; }// 计算总价
public List Dishes { get; set; }//菜品列表
///
/// Order类的构造函数
///
///
///
///
public Order(int orderid, double totalPrice, List dishes)
{
OrderId = orderid;
OrderingTime = DateTime.Now;
TotalPrice = totalPrice;
Dishes = dishes;
}
///
/// 打印订单信息(调用菜品类打印菜品信息)
///
public void ShowMessage()
{
Console.WriteLine("-----------------------------------");
Console.WriteLine($"订单编号:{OrderId}");
Console.WriteLine($"下单时间:{OrderingTime}");
Console.WriteLine("订单菜品:");
Dish.ShowList(Dishes);//显示菜品全部信息
Console.WriteLine($"订单总价:{TotalPrice}元");
}
}
}
这个类负责管理订单的整个生命周期:创建订单、保存订单日志到本地文件、从文件读取并显示所有订单。创建订单时,使用一个do-while循环让用户连续添加菜品,输入n时结束。然后计算总价、创建订单对象、显示订单信息,最后将订单保存到日志文件并添加到内部的订单列表。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data.Odbc;
namespace 用类的思想设计外卖订单系统
{
///
/// 外卖系统类
///
internal class DeliverySystem
{
List orderlist = new List();
public string path = "OrderLogs.txt";
///
/// 创建订单
///
public void CreateOrder()
{
Console.WriteLine("请输入订单编号:");
int id = int.Parse(Console.ReadLine());
List dishes = new List();
bool isAdd = true;
//利用 do while循环实现,是否继续添加菜品(至少执行一次)
do
{
Dish.AddDish(dishes);
Console.WriteLine("是继续添加菜品(y/n):");
string choice = Console.ReadLine();
isAdd = (choice == "y") ? true : false;
} while (isAdd);
double totalPrice = Dish.GetTotalPrice(dishes);//调用菜品类封装的方法算总价
Order order = new Order(id, totalPrice, dishes);//调用订单的构造函数
order.ShowMessage();//显示订单全部信息
Sa veOrderLog(order);//保存订单日志
orderlist.Add(order); //添加订单
}
///
/// 保存订单信息到本地文件
///
///
public void Sa veOrderLog(Order order)
{
string result = "";
result += "[订单编号]:" + order.OrderId;
result += "下单时间" + order.OrderingTime;
for (int i = 0; i < order.Dishes.Count; i++)
{
result += "菜品名:" + order.Dishes[i].DishName + "------菜品价格:" + order.Dishes[i].DishPrice;
}
result += "订单总价:" + order.TotalPrice;
Sa veMessage(result);
}
///
///访问本地文件,显示订单列表
///
public void ShowLogs()
{
string str = File.ReadAllText(path);
Console.WriteLine(str);
}
///
/// 文件操作,写入本地txt文件
///
///
public void Sa veMessage(string message)
{
File.AppendAllText(path, message + Environment.NewLine, Encoding.UTF8);
}
}
}



以上不足,请同学、老师批评指正。
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
腾讯ima怎么创建共享知识库?
腾讯ima怎么把微信内容一键导入知识库?
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
区块链OTC交易所有哪几家比较正规?
2026热门直线加速赛车手游推荐:高人气、爽快加速体验的精品榜单
kimi提示词专家使用方法新手指南
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
原神霜月三处月灵龛具体位置汇总
《幻兽帕鲁》不触发通缉捕捉传说商人方法
Windy卫星云图怎么看?云层变化识别技巧
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
为什么推特KOL都在BRC20赚钱 我一冲就亏?
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
一加手机如何设置三指长按屏幕局部截图
合集38个项目筹集5.406亿美元 Figure融资2亿
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc