昨天老师布置了一个吃货联盟的小项目,功能如下:
这个项目大概写了总共大概写了两个晚自习的时间,算是我写的第一个项目吧,还是蛮有成就感的,代码总共200行, 如下:
package NewDay5;
import java.util.Arrays;
import java.util.Scanner;
public class OrderSystem {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int back = -1;//定义back变量用来跳出循环
//***2将餐袋的数据数组放在循环的外面,不然每一次又重新定义了
String[] orderName = {"张三丰","秦始皇"};
String[] diancaiName = {"红烧肉","鱼香肉丝"};
int[] orderAmount = {3,5};
int[] orderDate = {12,15};
String[] sumAddr = {"武当山北","咸阳大道"};
double[] allPrice = {114.0,212.5};
String[] caiState = {"已完成","已完成"};
//***
//***1.我要订餐的菜名和单价
String[] caiName = {"红烧肉","鱼香肉丝","满汉全席"};
double[] price = {38.0,42.5,88.8};
int[] zanNumber = new int[caiName.length];//定义一个跟菜单长度一样的空点赞数组
do{
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("****************************");
System.out.print("请选择:");
int num = sc.nextInt();
switch(num){
case 1://我要订餐,用控制台接收订餐信息,添加到餐袋数组里面
System.out.println("1.***我要订餐***");
System.out.println("请输入订餐人姓名:");
String name = sc.next();
System.out.println("序号"+"\t"+"菜名"+"\t"+" "+"单价");//输出菜单
for(int i=1;i<=3;i++){//依次输出菜品信息
System.out.print(i+"\t");
System.out.print(caiName[i-1]+"\t"+" ");
System.out.print(price[i-1]+"元"+"\t");
if(zanNumber[i-1]!=0){//如果点赞数组不为空,输出菜品的点赞数
System.out.print(zanNumber[i-1]+"赞");
}
System.out.println();
}
System.out.print("请选择您要点的菜品编号:");
int NO = sc.nextInt();
System.out.print("请选择您需要的份数:");
int amount = sc.nextInt();
int time = -1;
do{
System.out.print("请输入送餐时间(送餐时间是10点至20点整点):");
time = sc.nextInt();
if(time>20||time<10){
System.out.println("您的输入有误,请输入10~20之间的整数!");
continue;
}else{
break;
}
}while(true);
System.out.print("请输入送餐地址:");
String addr = sc.next();
System.out.println("订餐成功!");
//当订餐成功了,在餐袋的数组里面添加新的数据*******2
orderName = Arrays.copyOf(orderName, orderName.length+1);
orderName[orderName.length-1]=name;//添加点餐人信息
diancaiName = Arrays.copyOf(diancaiName, diancaiName.length+1);
diancaiName[diancaiName.length-1]=caiName[NO-1];//添加菜名信息
orderAmount = Arrays.copyOf(orderAmount, orderAmount.length+1);
orderAmount[orderAmount.length-1]=amount;//添加点餐的份数
orderDate = Arrays.copyOf(orderDate, orderDate.length+1);
orderDate[orderDate.length-1]=15;//添加送餐日期,不知道怎么调用当前日期???
sumAddr = Arrays.copyOf(sumAddr, sumAddr.length+1);
sumAddr[sumAddr.length-1]=addr;//添加送餐地址
//****************2
System.out.println("您定的是: "+caiName[NO-1]+amount+"份");
System.out.println("送餐时间: "+time+"点");
double sumPrice = price[NO-1]*amount;//餐费等于单价乘以份数
int sumDidi = -1;
if((int)((price[NO-1]*amount/50))*2<=6){
sumDidi = (6-(int)((price[NO-1]*amount/50))*2);//送餐费最多6块,每多20减2块
}else{
sumDidi = 0;
}
//*****2
allPrice = Arrays.copyOf(allPrice, allPrice.length+1);
allPrice[allPrice.length-1]=sumPrice+sumDidi;//添加总金额
caiState = Arrays.copyOf(caiState, caiState.length+1);
caiState[caiState.length-1]="已预订";//添加送餐状态
//*****2
System.out.println("餐费: "+sumPrice+"元, 送餐费"+sumDidi+"元, "+"总计: "+(sumPrice+sumDidi)+"元.");
System.out.println("输入0返回:");
back = sc.nextInt();
break;
case 2:
System.out.println("2.***查看餐袋***");
System.out.println("序号\t订餐人\t餐品信息\t\t送餐日期\t\t送餐地址\t\t总金额\t\t送餐状态");
for(int i =1;i<=orderName.length;i++){
System.out.print(i+"\t");//序号
System.out.print(orderName[i-1]+"\t");//订餐人
System.out.print(diancaiName[i-1]+orderAmount[i-1]+"份"+"\t");//餐品信息
System.out.print(orderDate[i-1]+"日"+"\t\t");//送餐日期
System.out.print(sumAddr[i-1]+"\t\t");//送餐地址
System.out.print(allPrice[i-1]+"元"+"\t\t");//总金额
System.out.print(caiState[i-1]);//送餐状态
System.out.println();
}
System.out.println("输入0返回:");
back = sc.nextInt();
break;
case 3://签收订单,将输入编号的送餐状态更改为"已完成"
System.out.println("3.***签收订单***");
System.out.print("请选择您要签收的订单序号:");
int numberOrder = sc.nextInt();
caiState[numberOrder-1] = "已完成";
System.out.println("订单签收成功!");
System.out.println("输入0返回:");
back = sc.nextInt();
break;
case 4://删除订单,将要删除的数据跟最后一个数据调换位置,再将数组缩容1
System.out.println("4.***删除订单***");
System.out.println("请输入您要删除的订单编号:");
int delNumber = sc.nextInt();
String temp = orderName[delNumber-1];//删掉订餐人
orderName[delNumber-1] = orderName[orderName.length-1];
orderName[orderName.length-1] = temp;
orderName = Arrays.copyOf(orderName,orderName.length-1 );
String temp1 = diancaiName[delNumber-1];//删掉订餐信息
diancaiName[delNumber-1] = diancaiName[diancaiName.length-1];
diancaiName[diancaiName.length-1] = temp1;
diancaiName = Arrays.copyOf(diancaiName,diancaiName.length-1 );
int temp2 = orderAmount[delNumber-1];//删掉餐品的份数
orderAmount[delNumber-1] = orderAmount[orderAmount.length-1];
orderAmount[orderAmount.length-1] = temp2;
orderAmount = Arrays.copyOf(orderAmount,orderAmount.length-1 );
orderDate = Arrays.copyOf(orderDate,orderDate.length-1 );//删掉订餐日期
String temp3 = sumAddr[delNumber-1];//删掉送餐地址
sumAddr[delNumber-1] = sumAddr[sumAddr.length-1];
sumAddr[sumAddr.length-1] = temp3;
sumAddr = Arrays.copyOf(sumAddr,sumAddr.length-1 );
double temp4 = allPrice[delNumber-1];//删掉总金额
allPrice[delNumber-1] = allPrice[allPrice.length-1];
allPrice[allPrice.length-1] = temp4;
allPrice = Arrays.copyOf(allPrice,allPrice.length-1 );
String temp5 = caiState[delNumber-1];//删掉送餐状态
caiState[delNumber-1] = caiState[caiState.length-1];
caiState[caiState.length-1] = temp5;
caiState = Arrays.copyOf(caiState,caiState.length-1 );
System.out.println("您已经成功删除第"+delNumber+"次订单信息!!");
System.out.println("输入0返回:");
back = sc.nextInt();
break;
case 5://我要点赞,输入要点赞的菜品编号,给点赞数组中的相应菜品点赞数+1
System.out.println("5.***我要点赞***");
System.out.print("请输入您要点赞的订单编号:");
int zan = sc.nextInt();
zanNumber[zan-1]++;
System.out.println("点赞成功!您真是独具慧眼!");
System.out.println("输入0返回:");
back = sc.nextInt();
break;
case 6://退出系统
System.out.println("谢谢使用,欢迎下次光临!");
return;
default:
System.out.println("请重新输入(只能输入1~6之间的整数)!!!");
back =0;
}
}while(back==0);
System.out.println("大侠请重新再来吧!");//没有输入0
sc.close();//不喜欢小黄线
}
}
项目小结:这个项目品信息都存储在数组中,我们要做得就是在控制台输入一些信息,然后将这些信息输出,并且保存到数组中,以便下次输出餐品信息的时候信息已经进行了更改.其中涉及到了数组的扩容和缩容.大的框架就是一些分支结构和循环语句,把大的框架写好,再一点点的添加功能就行了,只要思路清晰,就很流畅的写出来了.这次项目也让我对数据库有了一点期待,因为这个用数组代替数据库的功能不但存储的内容十分的有限,输出的方式也非常笨,数据库中的数据是一条一条的,关于这个餐品的信息都写在一起,可以以表格的形式输出,非常方便.希望以后学了数据库之后能把这个项目的后台用数据库连接起来,前台用前端做一个点餐界面,,这样就是一个真正有实用价值的项目了.
发现一个好用的功能,刚刚写完去看大佬的写的才发现没用驼峰命名法,百度了一下,按ctrl+F就能替换变量名,还是要养成好习惯才行.