C# 用类的思想设计简易外卖订单管理系统(控制台)

简介: C# 用类的思想设计简易外卖订单管理系统(控制台)1.菜品类 (这个是最底层的类)在菜品类中实现构造方法,添加菜品,打印菜品列表,计算菜品列表总价2. 订单类(这是中间层的类)实现订单的构造函数,打印订单信息(调用菜品类打印菜品列表)3. 外卖系统类(这是外层类)实现创建订单,保存订单到本地文件,访问本地文件显示订单列表

简易外卖订单系统(C#控制台)

功能:

  1. 创建订单

  2. 添加菜品

  3. 查看订单

  4. 计算总价

  5. 保存订单记录

  6. 退出系统

菜品类:菜品名称 菜品价格

订单类:菜品集合、下单时间、添加菜品、计算总价、显示订单

外卖系统:保存所有订单的集合、创建订单、显示所有订单、保存日志

创建订单时,添加菜品和菜品价格

查看订单时,显示所有的订单和总价

主程序

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("请选择:");
        }
    }
}

菜品类 (这个是最底层的类)

在菜品类中实现构造方法,添加菜品,打印菜品列表,计算菜品列表总价
image.png

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 用类的思想设计外卖订单系统
{
    /// <summary>
    /// 菜品类
    /// </summary>
    internal class Dish
    {
        public string DishName {  get; set; }//菜品名称
        public double DishPrice { get; set; }//菜品价格
        /// <summary>
        /// 菜品的构造函数 
        /// </summary>
        /// <param name="dishname">菜品名称</param>
        /// <param name="dishprice">菜品价格</param>
        public Dish(string dishname,double dishprice)
        {
            DishName = dishname;
            DishPrice = dishprice;
        }
        /// <summary>
        /// 向dishes中添加菜品  
        /// </summary>
        /// <param name="dishlist">菜品列表dishes</param>
        public static void AddDish(List<Dish> 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;
            }
        }
        /// <summary>
        /// 显示菜品名称和价格 
        /// </summary>
        /// <param name="dishes">菜品列表dishes</param>
        public static void ShowList(List<Dish> dishes)
        {
            for (int i = 0; i < dishes.Count; i++)
            {
                Console.WriteLine($"{dishes[i].DishName}------{dishes[i].DishPrice}元");
            }
        }
        /// <summary>
        /// 计算订单总价
        /// </summary>
        /// <param name="dishes">菜品列表dishes</param>
        /// <returns></returns>
        public static double GetTotalPrice(List<Dish> dishes)
        {
            double total = 0;
            for (int i = 0; i < dishes.Count; i++)
            {
                total += dishes[i].DishPrice;
            }
            return total;
        }
    }
}

订单类(这是中间层的类)

实现订单的构造函数,打印订单信息(调用菜品类打印菜品列表)
image.png

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 用类的思想设计外卖订单系统
{
    /// <summary>
    /// 订单类 
    /// </summary>
    internal class Order
    {
        public int OrderId {  get; set; } //下单编号 
        public DateTime OrderingTime { get; set; }//下单的时间
        public double TotalPrice {  get; set; }// 计算总价         
        public List<Dish> Dishes {  get; set; }//菜品列表
        /// <summary>
        /// Order类的构造函数 
        /// </summary>
        /// <param name="orderid"></param>
        /// <param name="totalPrice"></param>
        /// <param name="dishes"></param>
        public Order(int orderid,double totalPrice,List<Dish> dishes)
        { 
            OrderId = orderid;
            OrderingTime = DateTime.Now;
            TotalPrice = totalPrice;
            Dishes = dishes;
        }
        /// <summary>
        /// 打印订单信息(调用菜品类打印菜品信息)
        /// </summary>
        public void ShowMessage()
        {
            Console.WriteLine("-----------------------------------");
            Console.WriteLine($"订单编号:{OrderId}");
            Console.WriteLine($"下单时间:{OrderingTime}");
            Console.WriteLine("订单菜品:");
            Dish.ShowList(Dishes);  //显示菜品全部信息
            Console.WriteLine($"订单总价:{TotalPrice}元");
        }
    }
}

外卖系统类(这是外层类)

实现创建订单,保存订单到本地文件,访问本地文件显示订单列表

image.png


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data.Odbc;
namespace 用类的思想设计外卖订单系统
{
    /// <summary>
    /// 外卖系统类 
    /// </summary>
    internal class DeliverySystem
    {
        List<Order> orderlist = new List<Order>();
        public string path = "OrderLogs.txt";
        /// <summary>
        /// 创建订单 
        /// </summary>
        public void CreateOrder()
        {
            Console.WriteLine("请输入订单编号:");
            int id = int.Parse(Console.ReadLine());
            List<Dish> dishes = new List<Dish>();
            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();  //显示订单全部信息 
            SaveOrderLog(order);  //保存订单日志 
            orderlist.Add(order); //添加订单            
        }
        /// <summary>
        /// 保存订单信息到本地文件 
        /// </summary>
        /// <param name="order"></param>
        public void SaveOrderLog(Order order)
        {
            string result = "";
            result += "[订单编号]:" + order.OrderId;
            result += "\n下单时间" + order.OrderingTime;
            for (int i = 0; i < order.Dishes.Count; i++)
            {
                result += "\n菜品名:" + order.Dishes[i].DishName + "------菜品价格:" + order.Dishes[i].DishPrice;
            }
            result += "\n订单总价:"+order.TotalPrice;
            SaveMessage(result);
        }
        /// <summary>
        ///访问本地文件,显示订单列表
        /// </summary>
        public void ShowLogs()
        {
            string str = File.ReadAllText(path);
            Console.WriteLine(str);
        }
        /// <summary>
        /// 文件操作,写入本地txt文件 
        /// </summary>
        /// <param name="message"></param>
        public void SaveMessage(string message)
        {
            File.AppendAllText(path, message+Environment.NewLine, Encoding.UTF8);
        }
    }
}

程序测试

1.测试创建订单 多个菜品

image.png
2.测试添加1个菜品
image.png
3.查看菜品
image.png

以上不足,请同学、老师批评指正。

相关文章
|
9天前
|
数据安全/隐私保护
一文说清while循环、do-while循环、for循环
一文说清while循环、do-while循环、for循环
|
9天前
|
API
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态。
182 20
|
9天前
|
机器学习/深度学习 数据采集 人工智能
田间杂草检测数据集分享(适用于YOLO系列深度学习分类检测任务)
本数据集含4000张真实农田图像(小麦/玉米/水稻田),YOLO格式标注杂草目标,覆盖多天气、光照与视角,适用于YOLO系列等目标检测模型训练,助力智能除草与精准农业研究。(239字)
280 16
|
1月前
|
JSON JavaScript 前端开发
在TypeScript和JavaScript如何使用MetaMessage?
MetaMessage 是一种跨语言数据交换协议,支持 TypeScript/JavaScript(通过装饰器自动类型转换)、JSONC 文本与紧凑二进制 wire 格式,兼顾可读性、精度(如 bigint 表示 int64)与性能,旨在替代 JSON、Protobuf 等传统序列化方案。
226 125
|
9天前
|
存储 人工智能 算法
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
TrendRadar 是一个轻量级、易部署的热点新闻聚合与推送工具。它能够从知乎、抖音、B站、微博、百度、华尔街见闻等11个主流平台抓取热搜榜单,然后根据你设定的关键词进行智能筛选,最终将你最关心的内容推送到手机或邮箱。
266 13
 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
|
9天前
|
SQL JSON 关系型数据库
企业级多模态分析计算引擎选型:阿里云 AnalyticDB MySQL 统一分析平台方案
阿里云AnalyticDB MySQL版是PB级云原生实时数据仓库,首创多模态统一分析引擎,单SQL原生支持SQL分析、向量检索、全文搜索与JSON分析,替代3–5套独立系统,综合成本降50%+,运维复杂度降80%,适用于AI+数据融合、多源异构统一查询等企业级场景。
172 17
企业级多模态分析计算引擎选型:阿里云 AnalyticDB MySQL 统一分析平台方案
|
9天前
|
人工智能 自然语言处理 API
阿里云海外重磅发布 Qwen Cloud
Qwen Cloud,正是为AI Agent 而生的全新服务方式。
1352 47
|
9天前
|
数据采集 存储 算法
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法
本文探讨视频RAG中的核心挑战——如何为无时间结构的视频转录文本设计有效分块策略。对比传统文本分块,提出基于停顿、重叠窗口、递归切分及LLM驱动的主题分块四层方案,实现细粒度检索与全局理解兼顾,提升视频内容检索准确性与上下文完整性。
155 13
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法
|
9天前
|
监控 API Windows
WGCLOUD v3.6.8 正式更新
WGCLOUD v3.6.8发布:修复CPU/内存等指标偶现为0、大屏离线数据不显示等Bug;新增Windows系统服务列表及开放API;优化告警脚本执行与SNMP设备运行时间兼容性。升级方式详见官方图示。

热门文章

最新文章