目录
1.业务逻辑
1.1 主页面
运行程序在控制台打印出主页面,从键盘输入要进行的操作对应的序号,进入相应的功能
1.2 “我要订餐”功能
在主页面输入1回车进入“我要订餐”功能
第一步,系统会要求你输入订餐人姓名
第二步,输出菜单,并接收你从键盘输入的菜品序号,如果输入的序号不符合规范会提示错误
第三步,接收到输入的菜品后,会询问是否继续添加菜品(y/n)(这里的y/n不区分大小写)输入不规范会重复这个询问
第四步,菜品点完后会要求输入送餐时间,地址和份数
第五步,接收完所有信息存储后返回主页面
1.3 “查看餐袋”功能
打印目前所有的订单
这里的代码初始化是没有订单的,只有“点餐”后才会有订单可以被查询到
要初始就有订单可以在下面所示的方法中添加
注意添加时要相应地让ordersNum这个变量对于数组中的订单数
1.4 “签收订单”功能
(1)先打印全部订单,接收输入的要签收的订单编号
(2)判断是否有这个编号,没有提示签收失败,打印一遍餐袋,并返回主页面
(3)有的话再判断是否已签收,如果已签收则提示不要重复操作,并打印一遍餐袋后返回主页面
(4)如果没有签收,则更改状态,提示签收成功,并打印更改后的餐袋后返回主页面
1.5 “删除订单”功能
(1)先打印全部订单,接收要删除的订单编号
(2)判断是否找得到该订单,找不到则提示无此订单,删除失败并返回主页面
(3)找到的话判断其是否是未完成状态,未完成则提示不能删除返回主页面
(4)已完成则更改状态,打印出更改后的餐袋并提示删除成功后返回主页面
1.6 “我要点赞”功能
(1)先打印所有菜品信息,接收要点赞的菜单编号
(2)如果找不到该菜品,则提示错误并返回主页面
(3)如果找得到,则给该菜品点赞数加一,并打印出更新后的菜单,提示点赞成功后返回主页面
1.7 “退出系统”功能
直接用System.exit(0)退出,如果愿意在结束时加一些话可以在Sysmain.java中的System.exit(0)语句前加。
2 源码
2.1 Sysmain
package mykb.OrderSystem;
import java.util.Scanner;
public class SysMain {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Menm menm = new Menm();
menm.Menmgoods();
menm.Menmorders();
while(true){
menm.MenmOne();
int n = scanner.nextInt();
switch (n) {
case 1:
menm.OrderInsert();
break;
case 2:
menm.MenmOrderPrint();
break;
case 3:
menm.OrderSignFor();
break;
case 4:
menm.OrderDelete();
break;
case 5:
menm.GoodsFavor();
break;
case 6:System.exit(0);
break;
default:System.out.println("请规范输入!");
break;
}
}
}
}
2.2 Menm
package mykb.OrderSystem;
import java.util.Scanner;
public class Menm {
Goods goods[];
int goodsNum;
Order orders[];
int ordersNum;
public void Menmgoods(){
//菜单初始化,最初菜单有六道菜,可以在这里面添加或减少菜品数量
goods = new Goods[6];
this.goods[0] = new Goods(1,"红烧带鱼",35,215);
this.goods[1] = new Goods(2,"鱼香肉丝",20,175);
this.goods[2] = new Goods(3,"时令鲜蔬",10,221);
this.goods[3] = new Goods(4,"麻婆豆腐",15,253);
this.goods[4] = new Goods(5,"肉末茄子",15,125);
this.goods[5] = new Goods(6,"九转大肠",60,441);
goodsNum = 6; //代表菜品数量,应与数组中有效菜品数量同步更新
}
public void Menmorders(){
//订单初始化,与菜品同理
orders = new Order[20];
ordersNum = 0;
}
public void MenmOne(){
//主界面
System.out.println("===========================================");
System.out.println("欢迎使用“吃货联盟订餐系统”");
System.out.println("1、我要订餐");
System.out.println("2、查看餐袋");
System.out.println("3、签收订单");
System.out.println("4、删除订单");
System.out.println("5、我要点赞");
System.out.println("6、退出系统");
System.out.println("请输入你的选择(1-6)");
System.out.println("===========================================");
}
public void MenmGoodPrint(){
//打印所有菜品详情
System.out.println("===========================================");
System.out.println("编号 菜名 单价 获赞数");
for (int i = 0; i < goodsNum; i++) {
goods[i].print();
}
System.out.println("===========================================");
}
public void MenmOrderPrint(){
//打印所有订单详情
System.out.println("================================================");
// System.out.println(order[0].goodOrds[0].gdName+" "+order[0].goodOrds[0].gdId);
System.out.println("订单编号 订餐人 餐品信息 送餐时间 份数 总金额 订单状态");
for (int i = 0;i < ordersNum;i++){
orders[i].print();
}
System.out.println("================================================");
System.out.println();
}
public void OrderInsert(){
//添加订单,开始点餐
Scanner scanner = new Scanner(System.in);
MenmGoodPrint(); //先打印菜单
System.out.println("请输入订餐人姓名:");
String name = scanner.next();
String choice = "Y"; //判断是否继续点菜
int foodid[] = new int[goodsNum]; //存放点的菜品信息
for (int i = 0;i< foodid.length;i++){ //foodid数组初始化
foodid[i] = 0;
}
int sum = 0; //记录点餐总价
do {
System.out.println("请输入你要购买的菜品编号:");
int id = scanner.nextInt();
if (id>goodsNum){
System.out.println("无此编号!重新输入");
continue;
}
foodid[id-1]++;
sum++;
System.out.print("是否继续点餐?(Y/N):");
choice = scanner.next(); //获取关键字判断是否继续点餐(不区分大小写)
//choice不符合规范则继续要求输入
while((!choice.equalsIgnoreCase("Y"))&&(!choice.equalsIgnoreCase("N"))){
System.out.print("是否继续点餐?(Y/N):");
choice = scanner.next();
}
} while(choice.equalsIgnoreCase("Y"));
//接受送餐时间
System.out.println("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
int time = scanner.nextInt();
//判断送餐时间是否规范
while(time<10||time>20){
System.out.print("请输入正确的送餐时间(送餐时间是10点至20点间整点送餐):");
time = scanner.nextInt();
}
//送餐地址和所需份数未作检测输入规范
System.out.println("请输入送餐地址:");
String address = scanner.next();
System.out.println("请选择您需要的份数:");
int number = scanner.nextInt();
float amount = 0;
Goods food[] = new Goods[sum];
int m = 0;
for (int i = 0;i< foodid.length;i++){
if(foodid[i]>0){
for (int j = 0;j<foodid[i];j++){
food[m] = new Goods(i+1,goods);
// System.out.println(food[m].gdName);
amount += food[m].price;
m++;
}
}
}
amount = amount*number;
orders[ordersNum] = new Order(781112+ordersNum,name,food,time,address,number,amount,"已预约");
// System.out.println(order[num].goodOrds[0].gdName);
ordersNum++;
}
public void OrderSignFor(){
Scanner scanner = new Scanner(System.in);
MenmOrderPrint();
System.out.println("请输入你要签收的订单编号:");
int ordid = scanner.nextInt();
boolean isFind = false;
for (int i = 0;i < ordersNum;i++){
if (orders[i] != null){
if(ordid == orders[i].orderNo){
if (orders[i].orderStatus.equals("订单已完成")){
MenmOrderPrint();
System.out.println("订单已签收,请勿重复操作!!!");
}else {
orders[i].orderStatus = "订单已完成";
MenmOrderPrint();
System.out.println("签收成功!!!");
}
isFind = true;
break;
}
}
}
if (!isFind){
MenmOrderPrint();
System.out.println("签收未成功,未找到该订单号!!!");
}
}
public void OrderDelete(){
Scanner scanner = new Scanner(System.in);
MenmOrderPrint();
System.out.println("请输入你要删除的订单编号:");
int oid = scanner.nextInt();
boolean isFind = false;
for (int i = 0;i <ordersNum;i++){
if(oid == orders[i].orderNo){
if (orders[i].orderStatus.equals("订单已完成")){
for(int j = i;j<ordersNum-1;j++){
orders[j] = orders[j+1];
}
orders[ordersNum-1] = null;
ordersNum--;
MenmOrderPrint();
System.out.println("删除成功!!!");
}else{
MenmOrderPrint();
System.out.println("删除未成功,订单未完成不可删除!!!");
}
isFind = true;
break;
}
}
if (!isFind){
MenmOrderPrint();
System.out.println("删除未成功,未找到该订单号!!!");
}
}
public void GoodsFavor(){
Scanner scanner = new Scanner(System.in);
MenmGoodPrint();
System.out.println("请输入你要点赞的菜品编号:");
int fid = scanner.nextInt();
boolean isFind = false;
for (int i = 0;i < goodsNum;i++){
if(goods[i].gdId == fid){
goods[i].favor++;
isFind = true;
MenmGoodPrint();
System.out.println("感谢你的投票");
}
}
if (!isFind){
MenmGoodPrint();
System.out.println("你输入的菜品编号不存在");
}
}
}
2.3 Goods
package mykb.OrderSystem;
public class Goods {
int gdId;
String gdName;
float price;
int favor;
Goods(){}
Goods(int gdId,String gdName,float price,int favor){
this.gdId = gdId;
this.gdName = gdName;
this.price = price;
this.favor = favor;
}
Goods(int gdId, Goods[] goods){
this.gdId = gdId;
this.gdName = goods[gdId-1].gdName;
this.price = goods[gdId-1].price;
this.favor = goods[gdId-1].favor;
}
void print(){
System.out.println(gdId +" "+ gdName +" "+ price +" "+ favor);
}
}
2.4 Order
package mykb.OrderSystem;
import java.util.Arrays;
public class Order {
int orderNo;
String orderOne;
Goods[] goodOrds;
int orderTime;
String orderAddress;
int orderNumber;
float orderAmount;
String orderStatus;
Order(){}
Order(int orderNo, String orderOne, Goods[] goodOrds, int orderTime, String orderAddress, int orderNumber, float orderAmount, String orderStatus){
this.orderNo = orderNo;
this.orderOne = orderOne;
this.goodOrds = goodOrds;
this.orderTime = orderTime;
this.orderAmount = orderAmount;
this.orderAddress = orderAddress;
this.orderNumber = orderNumber;
this.orderStatus = orderStatus;
}
public void print() {
String[] food = new String[20];
int[] foodid = new int [20];
int num = 0;
String st = new String();
for (int i = 0;i < food.length;i++){
food[i] = null;
foodid[i] = 0;
}
for (int i = 0; i < goodOrds.length; i++) {
if(Arrays.asList(food).contains(goodOrds[i].gdName)){
for (int j = 0;j < num;j++){
if (food[j].equals(goodOrds[i].gdName)){
foodid[j]++;
}
}
}else {
food[num] = goodOrds[i].gdName;
foodid[num]++;
num++;
}
}
for (int i = 0;i < num;i++){
if(st.equals("")){
st = food[i]+"*"+foodid[i];
}else{
st = st + "," + food[i]+"*"+foodid[i];
}
}
System.out.println(orderNo+" "+orderOne+" "+st+" "+orderTime+" " +orderNumber+" "+orderAmount+" "+orderStatus);
}
}