时隔15天,看这代码很烂,就重新写了一份。–2022/8/8
「订单系统」https://www.aliyundrive.com/s/BKnSC6DTk7k 提取码: je23
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
任务描述
1、我要订餐
2、查看餐袋
3、签收订单
4、删除订单
5、我要点赞
6、退出系统
需求:
步骤一:
·创建项目:OrderingMgr
·创建类:OrderingSet,添加订单的6个属性
·创建类:Food,添加菜品3个属性
·创建类:OrderingUtil,添加方法initial()
·初始化3个菜品信息
·初始化两条订单信息
class OrderingSet
{
/// <summary>
/// 订单类属性
/// </summary>
public string name;//订餐人姓名
public string dishMesg;//菜品名以及份数
public int time;//送餐日期
public string address;//送餐地址
public int state;//订单状态,0:已预订;1:已完成
public double sumPrice;//订单总金额
public OrderingSet()//无参构造
{
}
}
public class Food
{
public string name;//菜名
public double price;//价格
public int num;//点赞数
public Food()//无参构造
{
}
public Food(string name, double price, int num)
{
this.name = name;
this.price = price;
this.num = num;
}
}
初始化之前先创建两个数组保存数据
//订单数组
OrderingSet[] orders = new OrderingSet[4];
//菜品数组
Food[] foods = new Food[3];
public void Initial()
{
//菜品信息
//1.实例化红烧带鱼对象,并为属性赋值
Food food1 = new Food();
food1.name = "红烧带鱼";
food1.price = 38.0;
food1.num = 0;
//2.将红烧带鱼信息存在菜品数组中
foods[0] = food1;
//3.实例化鱼香肉丝对象,并为属性赋值
Food food2 = new Food();
food2.name = "鱼香肉丝";
food2.price = 20.0;
food2.num = 0;
//将红烧带鱼信息存在菜品数组中
foods[1] = food2;
//实例化鱼香肉丝对象,并为属性赋值
Food food3 = new Food();
food3.name = "时令蔬菜";
food3.price = 10.0;
food3.num = 0;
//将红烧带鱼信息存在菜品数组中
foods[2] = food3;
//订单信息
//1.实例化订单对象(订餐人1),并未属性赋值
OrderingSet order1 = new OrderingSet();
order1.name = "张晴";
order1.dishMesg = "红烧带鱼2份";
order1.time = 3;
order1.address = "天城路207号";
order1.state = 1;
order1.sumPrice = 76.0;
//将订单信息放入数组中
orders[0] = order1;
//1.实例化订单对象(订餐人2),并未属性赋值
OrderingSet order2 = new OrderingSet();
order2.name = "张晴";
order2.dishMesg = "鱼香肉丝2份";
order2.time = 10;
order2.address = "天城路207号";
order2.state = 0;
order2.sumPrice = 45.0;
//将订单信息放入数组中
orders[1] = order2;
步骤二:编写程序人口,实现菜单显示和切换
·在类OrderingUtil中创建方法startMenu(),实现菜单切换
·编写类OrderStart,实现程序入口
//输入0返回菜单
void Return0()
{
Console.Write("输入0返回:");
int a = int.Parse(Console.ReadLine());
if (a == 0)
{
StartMenu();//返回开始菜单
}
else
{
Return0();
}
}
//开始菜单界面
public void StartMenu()
{
int choice = 0;
try
{
//这里为了防止输入非整型导致程序失败退出
Console.WriteLine("****************************");
Console.WriteLine("1、我要订餐" + "\n" + "2、查看餐袋" + "\n" + "3、签收订单" + "\n" + "4、删除订单" + "\n" + "5、我要点赞" + "\n" + "6、退出系统");
Console.WriteLine("****************************");
Console.Write("请选择:");
//这里要是用string类型就没必要用try了
choice = int.Parse(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("输入有误!请输入数字!");
StartMenu();
}
switch (choice)
{
case 1:
Console.WriteLine("***我要订餐***");
Add();//添加方法
Return0();//输入0返回菜单
break;
case 2:
Console.WriteLine("***查看餐袋***");
Display();
Return0();
break;
case 3:
Sign();
break;
case 4:
delete();
break;
case 5:
Praise();
break;
case 6:
Console.WriteLine("谢谢使用,欢迎下次光临!");
break;
default:
Console.WriteLine("输入有误!");
StartMenu();
break;
}
}
//OrderingStart类实现程序入口
class OrderingStart
{
static void Main(string[] ages)
{
Console.WriteLine("欢迎使用“吃货联盟订单系统”");
OrderingUtil util = new OrderingUtil();
util.Initial();
util.StartMenu();
}
}
步骤三:遍历系统已有菜单,并显示
·在类OrderingUtil中创建Display()
·根据状态值输出已完成或已预定
//查看餐袋功能
public void Display()
{
int flag = 0;
Console.WriteLine("序号" + "\t" + "订餐人" + "\t" + "餐品信息" + "\t" + "送餐日期" + "\t" + "送餐地址" + "\t" + "总金额" + "\t " + "订单状态");
for (int i = 0; i < orders.Length; i++)
{
if (orders[i] != null)
{
flag = 1;
//如果state为1,显示已完成
if (orders[i].state == 1)
{
Console.WriteLine((i + 1) + "\t" + orders[i].name + "\t" + orders[i].dishMesg + "\t" + orders[i].time + "日\t\t" + orders[i].address + "\t" + orders[i].sumPrice + "元\t " + "已完成");
}
//如果state为0,显示已预定
else if (orders[i].state == 0)
{
Console.WriteLine((i + 1) + "\t" + orders[i].name + "\t" + orders[i].dishMesg + "\t" + orders[i].time + "日\t\t" + orders[i].address + "\t" + orders[i].sumPrice + "元\t " + "已预定");
}
}
}
if (flag == 0)
{
Console.WriteLine("无订单!");
Return0();
}
}
步骤四:增加一条订单信息,实现我要订餐
·接收菜品信息
·订单金额
//接收菜品信息
public void DisplayFoods()
{
Console.WriteLine("序号\t" + "菜名\t\t" + "单价\t" + "点赞数");
for (int i = 0; i < foods.Length; i++)
{
if (foods[i] != null)
{
Console.WriteLine((i + 1) + "\t" + foods[i].name + "\t" + foods[i].price + "\t" + foods[i].num);
}
}
}
//规定送餐时间范围
void IsInTime(int time)
{
if (time < 10 || time > 20)
{
Console.Write("请输入送餐时间(送餐时间是10至20点间整点送餐):");
time = int.Parse(Console.ReadLine());//时间
IsInTime(time);
}
}
//添加订单
void Add()
{
int order_quantity = 0;//订单数组下标0
Console.Write("请输入姓名:");
string name = Console.ReadLine();
DisplayFoods();//显示食物列表
Console.Write("请选择您要点的菜品编号:");
int number = int.Parse(Console.ReadLine());//编号
Console.Write("请选择您需要的份数:");
int quantity = int.Parse(Console.ReadLine());//份数
Console.Write("请输入送餐时间(送餐时间是10至20点间整点送餐):");
int time = int.Parse(Console.ReadLine());//时间
IsInTime(time);
Console.Write("请输入送餐地址:");
string address = Console.ReadLine();//地址
Console.WriteLine("订单成功!");
Console.Write("您订的是:" + foods[number - 1].name + quantity + "份");
Console.Write("送餐时间:" + time + "点");
double meals = foods[number - 1].price * quantity;//餐费
ouble deliveryfee = 0.0;//送餐费
double total;//总费用
if (meals < 50)
{
deliveryfee = 5.0;
}//判断:低于50元,多加配送费5元
total = meals + deliveryfee;//计算总费用
//将订单录入订单数组里面
OrderingSet order3 = new OrderingSet();
order3.name = name;
order3.dishMesg = foods[number - 1].name + quantity + "份";
order3.time = time;
order3.address = address;
order3.state = 0;
order3.sumPrice = total;
//遍历订单数组,找到空位置
//数组开始有两条信息,遍历后order_quantity=2,
//该下标无对应数组,刚好存第一条信息
for (int i = 0; i < orders.Length; i++)
{
if (orders[i] != null)
{
order_quantity++;
}
}
//最终录入数组中,
orders[order_quantity] = order3;
Console.WriteLine("餐费:" + meals + "元," + "送餐费" + deliveryfee + "," + "总计:" + total);
}
步骤五:送餐后,将用户签收订单状态
·类OrderingUtil中创建方法Sign(),接收签收的订单号
//签收功能
void Sign()
{
Display();
Console.WriteLine("请输入要签收的订单的序号:");
int xuhao = int.Parse(Console.ReadLine());
//数组下标是指定订单序号减一
if (xuhao <= 0 || xuhao >= orders.Length)
{
//输入的序号应该在范围内
Console.WriteLine("输入有误");
Sign();
}
for (int i = 0; i < orders.Length; i++)
{
if (xuhao == (i + 1))
{
if (orders[xuhao - 1] == null)
{
Console.WriteLine("无该订单!");
break;
}
if (orders[xuhao - 1].state == 0)
{
Console.WriteLine("签收成功!");
orders[xuhao - 1].state = 1;
break;
}
if (orders[xuhao - 1].state == 1)
{
Console.WriteLine("该订单已签收,无需重复操作");
break;
}
}
}
Return0();
}
步骤六:按照输入的订单号,删除已完成状态的订单
·类OrderingUtil中,创建方法Delete(),接收要删除的订单号
·删除后,该订单后的数据依次往前移一位
void delete()
{
Display();//显示订单
Console.Write("请输入要删除的订单序号:");
int xuhao = int.Parse(Console.ReadLine());
int order_quantity = 0;//订单数量//再次调用又归为0
//遍历订单数组,找到空位置
//(无添加式的值)数组开始有两条信息,遍历后order_quantity=2,
//(添加一次后的值)order_quantity=3,
//(第二次添加)order_quantity=4,
for (int i = 0; i < orders.Length; i++)
{
if (orders[i] != null)
{
order_quantity++;
}
}
if (xuhao > order_quantity || xuhao <= 0)
{
Console.WriteLine("未找到该订单!不执行删除!");
}
else
{
for (int i = 0; i < orders.Length; i++)
{
if (i == (xuhao - 1) && orders[i] != null)
{
if (orders[xuhao - 1].state == 1)
{
orders[xuhao - 1] = null;
Console.WriteLine("订单删除成功");
//删除后,数组信息往前移
for (int j = xuhao - 1; j < orders.Length - 1; j++)
{
orders[j] = orders[j + 1];
orders[j + 1] = null;
}
break;
}
else if (orders[xuhao - 1].state == 0)
{
Console.WriteLine("您选择的订单还未签收,不能删除!");
}
}
}
}
Return0();
}
步骤七:实现点赞功能
·显示菜品信息
·类OrderingUtil中,创建方法Praise()
//判断该是否存在对应该序号的菜品
void isExitFoods(int xuhao)
{
int foods_quantity = 0;//菜品数量
for (int i = 0; i < foods.Length; i++)
{
if (foods[i] != null)
{
foods_quantity++;
}
}
if (xuhao > foods_quantity || xuhao <= 0)
{
Console.WriteLine("未找到该菜品信息!不执行点赞!");
}
}
//点赞功能
void Praise()
{
DisplayFoods();//显示菜品信息
Console.Write("请选择您要点赞的菜品序号:");
int xuhao = int.Parse(Console.ReadLine());
isExitFoods(xuhao);//判断该是否存在对应该序号的菜品
for (int i = 0; i < foods.Length; i++)
{
if (i == (xuhao - 1) && foods[i] != null)
{
foods[xuhao - 1].num++;
Console.WriteLine("点赞成功!");
break;
}
}
Return0();
}
老师布置的这个习题,基本算是对之前所学的一个综合运用吧。