文章目录
吃货联盟订餐系统
一、需求说明
二、分析需求
根据上述需求,我们可以得知,运行的页面需要先展示出来,然后填入选择内容的数字,对应跳转到对应内容,且可以输入0返回开始的主菜单。根据之前所学内容,可以实现的方法有很多种,个人感觉采用do-while来实现比较合适,输入不同数字跳转不同功能项,可以用switch来实现。
姓名:输入String
餐品信息:序号、餐品名String、价格double、点赞数 int 可以用 3个一维数组来实现
份数:输入int 大于0的整数
时间:输入int 10~20点之间的整数
地址:输入String
订单信息:String 二维数组
序号、姓名、餐品名、份数、价格(总价)、地址、时间、状态
签收订单:改变订单的状态,如果已完成则不能再次签收
删除订单:不能删除未完成的订单,序号要对应变动
我要点赞:对应菜品点赞数++
以上分析完毕,试着开始分步实施
三、具体实施
1、搭建框架
先把最外层的do-while框架和switch搭建起来,并把菜品的名称、价格、点赞数以及存放后期信息的二维数组先初始化,如图所示:
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String caidan[]={"蒸羊羔","蒸熊掌","蒸鹿尾","烧花鸭"};
double jiage[]={800,700,600,500};
int dianzan[]={50,100,150,200};
int xuanze;
String xinxi[][]=new String[1024][];
do {
switch (xuanze){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:
}
if (xuanze>0&&xuanze<6){
System.out.print("请输入0返回:");
xuanze=sc.nextInt();
}else {
break;
}
}while (xuanze==0);
System.out.println("谢谢使用,欢迎下次光临!");
}
}
2、制作导航页
导航页相对比较简单,只是展示所有功能的序号以及名称
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("请选择:");
xuanze=sc.nextInt();
3、制作第一个功能项:我要订餐
考虑好每一次输入数字说,如果不在范围内或者说不在选择项内的数字,需要返回提示,而不是直接结束,所有具体如下:
case 1:
System.out.print("请输入订餐的人数");
int renshu=sc.nextInt();
if (renshu<0){
System.out.print("订餐人数输入错误,请重新输入:");
break;
}//展示菜单
System.out.println("序号\t"+"菜品名称\t"+"价格\t");
for (int i = 0; i < caidan.length; i++) {
System.out.println(i+1+"\t"+caidan[i]+"\t"+jiage[i]);
}
int caihao;
do {
System.out.print("请输入序号选择菜品;");
caihao=sc.nextInt();
if (caihao<1||caihao>caidan.length){
System.out.println("输入错误,请重新输入");
}
}while (caihao<1||caihao>caidan.length);
int shuliang;
do {
System.out.print("请输入菜品份数;");
shuliang=sc.nextInt();
if (shuliang<0){
System.out.println("输入错误,请重新输入");
}
}while (shuliang<0);
int shijian;
do {
System.out.print("请输入送餐时间(10点~20点的整点):");
shijian=sc.nextInt();
if (shijian<10||shijian>21){
System.out.println("输入错误,请重新输入");
}
}while (shijian<10||shijian>21);
String dizhi;
System.out.print("请输入送餐地址:");
dizhi=sc.next();
System.out.println("订餐成功,您的订单信息如下:");
System.out.println("菜名为:"+caidan[caihao-1]+"\t"+"一共"+shuliang+"份");
System.out.println("送餐时间为:"+shijian+"点");
System.out.println("送餐地址为:"+dizhi);
double caiqian=jiage[caihao-1]*shuliang;
double yunfei=caiqian>50?0:6;
double zongjia=caiqian+yunfei;
System.out.println("餐费为:"+caiqian+"元,运费为"+yunfei+"元,总费用一共为:"+zongjia+"元");
for (int i = 0; i < xinxi.length; i++) {
if (xinxi[i]==null){
xinxi[i]=new String[2];
xinxi[i][0]=renshu+"\t"+caidan[caihao-1]+"\t"+shuliang+"份\t"+shijian+"点\t"+dizhi+
"\t"+zongjia+"元";
xinxi[i][1]="已预定";
break;
}
}
break;
4、制作第二项-查看餐袋
该项内容只作为我要订餐内容的展示,所有比较容易就可以实现
case 2:
System.out.println("********查看餐袋");
System.out.println("序号\t订餐人\t餐品名称\t送餐时间\t送餐地址\t总金额\t订单状态");
for (int i = 0; i < xinxi.length; i++) {
if (xinxi[i]!=null){
System.out.println(i+1+"\t"+xinxi[i][0]+xinxi[i][1]);
}else {
break;
}
}
break;
5、制作第三项-签收订单
因为制作第二项时,已经将所有信息填入二维数组,所以签收订单只是修改数组中的,订单状态一栏的值就可以了,需要注意的地方是,订单状态为未签收时才可以签收,如果是已签收状态,则需要提示客户已经是已签收状态,不需要重复签收,如果客户输入的订单序号有错误,也需要反馈相关提示
case 3:
System.out.print("*******签收订单");
System.out.println("序号\t订餐人\t餐品名称\t送餐时间\t送餐地址\t总金额\t订单状态");
for (int i = 0; i < xinxi.length; i++) {
if (xinxi[i]!=null){
System.out.println(i+1+"\t"+xinxi[i][0]+xinxi[i][1]);
}else {
break;
}
}
int shuzi=0;
int jiewei=0;
do {
System.out.print("请输入要签收的订单号:");
for (int i = 0; i < xinxi.length; i++) {
if (xinxi[i]==null){
jiewei=i;
break;
}
}
shuzi=sc.nextInt();
if (shuzi<0||shuzi>jiewei){
System.out.print("输入错误,请重新输入");
}else if(!"已预定".equals(xinxi[shuzi-1][1])){
System.out.println("订单已签收,不能重复签收");
}
else {
xinxi[shuzi-1][1]="已签收";
System.out.println("签收成功!");
break;
}
}while (shuzi<0||shuzi>jiewei||!"已预定".equals(xinxi[shuzi-1][1]));
break;
6、制作第四项删除订单
这个内容其实是有一点难度的,因为不光要考虑输入的订单序号是否正常,还需要考虑,订单删除之后,其他的订单序号都需要依次变化,并且只能删除已签收的订单,如果订单状态是未签收,则需要提示不可以删除。
case 4:
System.out.println("******删除订单");
System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
for (int i = 0; i < xinxi.length; i++) {
if (xinxi[i]!=null){
System.out.println(i+1+"\t"+xinxi[i][0]+xinxi[i][1]);
}else {
break;
}
}
int shanchu=0;
int jieshu=0;
do {System.out.print("请输入要删除的订单号:");
for (int i = 0; i < xinxi.length; i++) {
if (xinxi[i]==null){
jieshu=i;
break;
}
}
shanchu=sc.nextInt();
if (shanchu<0||shanchu>jieshu){
System.out.print("输入有误,请重新输入:");
}else if (!"已签收".equals(xinxi[shanchu-1][1])){
System.out.println("订单不是已签收状态,不能删除!");
}else {
boolean shan=false;
for (int i = 0; i < xinxi.length; i++) {
if (i==xinxi.length-1){
xinxi[i]=null;
shan=true;
break;
}else {
xinxi[i]=xinxi[i+1];
if (xinxi[i]==null){
shan=true;
break;
}
}
}if (shan){
break;
}
}
}while (shanchu<0||shanchu>jieshu||!"已签收".equals(xinxi[shanchu-1][1]));
break;
7、制作第5项我要点赞
该内容相对简单, 只是需要输入对应商品的需要,则该商品的点赞数对应增加就可以了
System.out.println("******我要点赞");
System.out.println("序号\t餐品名称\t点赞数量");
for (int i = 0; i < caidan.length; i++) {
if (caidan[i]!=null){
System.out.println(i+1+"\t"+caidan[i]+"\t"+dianzan[i]);
}else {
break;
}
}
int xuhao;
do{
System.out.print("请选择您要点赞的菜品编号:");
xuhao=sc.nextInt();
if (xuhao<1||xuhao>caidan.length){
System.out.println("对不起,输入有误,请重新输入:");
}
}while (xuhao<1||xuhao>caidan.length);
for (int i = 0; i < dianzan.length; i++) {
if (i==xuhao-1){
dianzan[i]+=1;
System.out.println("序号\t餐品名称\t点赞数");
for (int j = 0; j < caidan.length;j++) {
if (caidan[j]!=null){
System.out.println(j+1+"\t"+caidan[j]+"\t"+dianzan[j]);
}else {
break;
}
}
}
}
break;
结束语
以上内容写完后,该订餐系统就已经完成了,虽然说功能比较简单,页面比较粗糙,但是制作该系统也是对这段时间JAVA基础学习的一次总结和灵活运用。培养自己的逻辑思维和独立思考的能力,在项目前期可以将可能性尽可能多的列出来,然后在实施的过程中用对应的语句进行实现,在最后的测试过程中查漏补缺,尽可能的完善系统功能,精益求精。只有不断的努力,才能不断的进步。让我们一起努力。一起加油!!奥里给!!