游乐游手机版
首页/AI教程/文章详情

C#基于类的控制台外卖订单管理系统设计

时间:2026-05-28 17:32
C 面向对象编程实战:简易外卖订单系统(控制台版) 本文将带您构建一个C 控制台版外卖订单系统,采用面向对象设计思想,代码结构清晰,非常适合初学者练习。系统核心功能包括:创建订单、添加菜品、查看订单、计算总价、保存记录及退出系统。下面逐步解析实现过程。 整个系统由三个核心类组成:菜品类(Dish)、

C#面向对象编程实战:简易外卖订单系统(控制台版)

本文将带您构建一个C#控制台版外卖订单系统,采用面向对象设计思想,代码结构清晰,非常适合初学者练习。系统核心功能包括:创建订单、添加菜品、查看订单、计算总价、保存记录及退出系统。下面逐步解析实现过程。

整个系统由三个核心类组成:菜品类(Dish)订单类(Order)外卖系统类(DeliverySystem),以及主程序入口。我们自底向上逐一讲解。

主程序

主程序负责菜单展示与用户输入处理,通过循环调用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实例并添加至列表。

image.png

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来展示菜品明细。

image.png

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时退出循环。随后计算总价、实例化订单、展示信息,并将订单保存至日志文件及内部订单列表。

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 用类的思想设计外卖订单系统
{
    /// 
    /// 外卖系统类 
    /// 
    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);
        }
    }
}

系统功能测试

1. 创建订单并添加多个菜品

image.png

2. 仅添加单个菜品测试

image.png

3. 查看已保存的订单记录

image.png

以上为系统全部实现,如有不足之处,敬请各位同学和老师指正。

来源:https://developer.aliyun.com/article/1737513
上一篇WPS AI一键生成PPT主题高效汇报技巧 下一篇AI生成专业PPT设计模板主题的详细指南与示例
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
RAG四标融合企业知识资产体系四库协同GEO优化实践
AI教程 · 2026-07-01

RAG四标融合企业知识资产体系四库协同GEO优化实践

生成式AI正在彻底改写信息检索的底层逻辑。传统SEO依赖关键词堆砌和外链建设的策略,在大模型的内容采信规则下已经基本失效。取而代之的,是生成式引擎优化(GEO)。它不再关注外链数量,而是重点衡量你的知识是否结构化、证据链是否坚实、信源是否可靠——这些维度才是RAG(检索增强生成)架构真正看重的核心指

一个普通上班人分享WorkBuddy使用心得与真实体验
AI教程 · 2026-07-01

一个普通上班人分享WorkBuddy使用心得与真实体验

前言 最近我开始使用WorkBuddy——这是腾讯推出的一款AI办公工作台。差不多用了一周时间,趁印象还新鲜,把真实的使用感受记录下来,给还在犹豫的朋友做个参考。不吹不黑,只说实际体验。 初印象:不只是聊天机器人 之前用过不少AI工具,大多数就是个对话框,你问它答,答完就结束了。WorkBuddy不

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录
AI教程 · 2026-07-01

AI幻觉变真功能实战教程:App Inventor 2视频录制拓展一周开发实录

先讲一个颇具戏剧性的开端。 这件事的开端颇显荒诞——有用户前来咨询,称AI Pro版的介绍中提到我们有一款“视频录制拓展”。团队全体成员都感到困惑,翻遍产品列表,发现根本不存在该组件。AI那种“一本正经胡说八道”的能力,这次确实让我们陷入尴尬。 按常理,此事到此便可结束——一句“抱歉,暂时没有这个拓

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同
AI教程 · 2026-07-01

别再混淆OLAP和SQL-on-Hadoop两者查询本质不同

OLAP和SQL-on-Hadoop虽都使用SQL查询数据,但本质不同。SQL-on-Hadoop负责海量数据批量计算与ETL,查询速度秒级至分钟级;OLAP通过预聚合实现毫秒级多维分析,适合BI报表。两者在数据平台分工协作,前者是后厨加工,后者是前台快速服务。

GEO优化深度解析:AI偏好FAQ还是长文内容?
AI教程 · 2026-07-01

GEO优化深度解析:AI偏好FAQ还是长文内容?

在GEO优化中,AI对内容形式无统一偏好:FAQ在简单查询中引用率41%,长文在复杂查询中达58%。内容应基于用户意图选择形式,FAQ适配简单事实类问题,长文建立主题权威,两者互补而非替代。