JAVA项目案例详解带代码

项目案例–吃货联盟

一、项目准备:

1.开发环境:

  • JDK1.8
  • IntelliJ IDEA

2.技术点分析:

  • 能理解程序基本概念 – 程序
  • 会使用变量、数据类型
  • 会使用顺序、选择、循环、跳转语句编写程序
  • 会使用数组

3.任务描述:

只要动动手指,就能送餐上门”,网上定餐深受现代人青睐,现开发一个网上订餐系统,功能如下:

  • 我要订餐
    在这里插入图片描述
    在这里插入图片描述

  • 查看餐袋
    在这里插入图片描述

  • 签收订单

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 删除订单
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 我要点赞

在这里插入图片描述

  • 退出系统

二、需求:

1.需求分析:

买家:

买家订单基本信息-用户名,时间,地址,数量等

卖家:

菜品信息-单价、品种、点赞数

模块划分:

我要订餐–添加–insert -C(create)
查看餐袋–查询–read -R
签收订单–修改–update -U
删除订单–删除–delete -D
基本所有的项目都是在对数据进行增删改查(CRUD)
我要点赞–辅助功能
退出系统–流程控制

2.编写要求:

项目名—Foods
包名–cn.xx.controll
类名–OrderingMsg
项目编写完成需要制作成运行jar及bat文件

3.编写步骤:

定义变量–测试数据–搭建总框:
do…while中嵌套switch,将跳转切换使用数字进行替换
查看订单
查看之前–循环之前先判定是否为空
添加订单
作业:补全是否继续的功能
添加注意打印小票和数组添加数据的分开操作
签收订单:
判定签收的情况:不存在该订单/存在不能签收/签收
删除订单:
将需要删除的数据之后的所有数据全部前移,然后将最后一条废数据清空
我要点赞:
显示菜单,然后将指定的点赞菜品赞加1

三、代码分析:

1.定义变量:

//定义买家变量--数组
String[] names=new String[4];            //订餐人姓名
int[] times=new int[4];                  //订餐时间-整点
String[]  addresses=new String[4];       //订餐地址
String[] dishMegs=new String[4];         //所选菜品信息
double[] sumPrices=new double[4];        //总金额
int[] states=new int[4];                 //订单状态信息
		
//定义卖家菜品变量--数组
String[] dishNames={"大肘子","锅包肉","辣鸭头","麻辣虾"};     //菜品信息
double[] prices={59,58,48,69};						  //菜品单价
int[] praiseNums={4,5};  							  //菜品点赞数

2.框架模块:

do{
	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.println("请选择");
	num=input.nextInt();
	switch (num) {
	case 1:
		System.out.println("我要订餐");
		break;
	case 2:
		System.out.println("查看餐袋");
		break;
	case 3:
		System.out.println("签收订单");
		break;
	case 4:
		System.out.println("删除订单");
		break;
	case 5:
		System.out.println("我要点赞");
		break;
	case 6:
		System.out.println("退出系统");
		isExit=true;
		break;
	default:
		isExit=true;
		break;
	}
	
	//判定是否回退到一级菜单
	if(!isExit){
		System.out.println("输入0返回");
		num=input.nextInt();
	}else{
		break;
	}
}while(num==0);
System.out.println("欢迎下次使用!");	

3.查看餐袋:

for (int i = 0; i <names.length; i++) {
	//判定---如果用户信息为空,该订单不进行打印
	if(names[i]!=null){
		String state=(states[i]==0)?"已预订":"已完成";
		String  sumPrice=sumPrices[i]+"元";
		String time=times[i]+"时";
		System.out.println((i+1)+" \t\t"+names[i]+" \t\t"
                                       +dishMegs[i]+" \t\t"+time
				+" \t\t"+addresses[i]+" \t\t"+sumPrice+" \t\t"+state);
	}
}

4.我要订餐:

for (int i = 0; i < names.length; i++) {
	//往数组添加内容-需要先获取数组空的位置-第一个位置--循环结束掉
	if(names[i]==null){
		//进入判定则标志着可以进行数据添加的空位---将标记进行修改
		isAdd=true;
		//添加订单
		System.out.println("请输入用户名");  //模拟登陆
		String name=input.next();
		//打印菜品信息
		System.out.println("序号  \t菜名 \t单价 \t点赞数");
		for (int j = 0; j < dishNames.length; j++) {
			String  price=prices[j]+"元";
			String  praise=(praiseNums[j]>0)?praiseNums[j]+"赞":"";
			System.out.println((j+1)+" \t"+dishNames[j]+" \t"+price+" \t"+praise);
		}
		System.out.println("请输入你选择的菜品的序号");
		int  chooseDish=input.nextInt();
		System.out.println("请输入房购买的份数");
		int number=input.nextInt();
		//处理订餐信息和订餐总额
		String dishMeg=dishNames[chooseDish-1]+""+number+"份";
		double sumPrice=prices[chooseDish-1]*number;
		//判定是否需要进行配送费:超过50免配送费
		double deliCharge=(sumPrice>=50)?0:5;    //配送费
		//配送时间-如果时间输入不正确需要重复输入直到输入正确为止  10  -20
		System.out.println("请输入配送时间(10-20的整点)送餐");
		int  time=input.nextInt();
		/*while(!(time>=10&&time<=20)){
			System.out.println("您输入的时间不正确,请重新输入");
			time=input.nextInt();
		}*/
		while(time<10 ||time>20){
			System.out.println("您输入的时间不正确,请重新输入");
			time=input.nextInt();
		}
		System.out.println("请输入送餐地址");
		String address=input.next();
		
		//打印小票
		System.out.println("订餐成功!");
		System.out.println("您的订餐是"+dishMeg);
		System.out.println("餐费是"+sumPrice+",配送费是"+deliCharge+",总金额是"+(sumPrice+deliCharge));
		
		//将数据添加到数组中
		names[i]=name;
		dishMegs[i]=dishMeg;
		times[i]=time;
		addresses[i]=address;
		sumPrices[i]=sumPrice+deliCharge;
		//当将当前循环中添加完成以后直接循环结束
		break;
	}
}
//如果整个循环结束都没有找到空位,则表示当前餐袋已满
if(!isAdd){
	System.out.println("对不起,餐袋已满!");
}

5.签收订餐:

for (int i = 0; i <names.length; i++) {
	//判定---如果用户信息为空,该订单不进行打印
	if(names[i]!=null){
		String state=(states[i]==0)?"已预订":"已完成";
		String  sumPrice=sumPrices[i]+"元";
		String time=times[i]+"时";
		System.out.println((i+1)+" \t\t"+names[i]+" \t\t"+dishMegs[i]+" \t\t"+time
				+" \t\t"+addresses[i]+" \t\t"+sumPrice+" \t\t"+state);
	}
}

6.删除订单:

for (int i = 0; i < names.length; i++) {
	if(names[i]!=null&&states[i]==1&&delId==i+1){
		//能找到订单并可以删除
		isDelFind=true;
		//执行删除操作,删除元素以后的所有数据依次移动--后续多个数据
		for (int j = delId-1; j < names.length-1; j++) {
			names[j]=names[j+1];
			dishMegs[j]=dishMegs[j+1];
			times[j]=times[j+1];
			addresses[j]=addresses[j+1];
			states[j]=states[j+1];
		}
		//最后一个数据进行清空还原处理
		names[names.length-1]=null;
		dishMegs[dishMegs.length-1]=null;
		times[times.length-1]=0;
		addresses[addresses.length-1]=null;
		states[states.length-1]=0;
		System.out.println("删除订单成功!");
		break;
	}else if(names[i]!=null&&states[i]==0&&delId==i+1){
		//能找到订单但是不能删除
		isDelFind=true;
		System.out.println("该订单未签收,不能被删除!");
		break;
	}
}

//如果循环结束都没有找到订单则表示不存在
if(!isDelFind){
	System.out.println("您要删除的订单不存在!");
}

7.我要点赞:

for (int i = 0; i < dishNames.length; i++) {
	String price=prices[i]+"元";
	String praiseNum=(praiseNums[i]>0)?praiseNums[i]+"赞":"";
	System.out.println((i+1)+"\t "+dishNames[i]+"\t "+price+"\t "+praiseNum);
}
System.out.println("请输入您需要点赞的菜品序号");
int praiseId=input.nextInt();
//将点赞内容进行自增
praiseNums[praiseId-1]++;
System.out.println("点赞成功!");

注意:

文章为核心代码,如果需要完整代码,可以随时私聊我,也可以加这个企鹅群720994366找管理要。


版权声明:本文为bj_jikejiuye原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。