吃货联盟订餐系统
author:luckyboy!
version:1.0
知识储备:变量、数据类型、选择结构、循环结构和数组
吃货联盟订餐系统概述
现在的互联网时代,足不出户只需要动动手指,就可在点餐并送货上门,这种网上送餐伸手人们的青睐,一起动动手指开发一个网上订餐系统吧!
功能如下:
- 我要订餐
- 查看餐袋
- 签收订单
- 删除订单
- 我要点赞
- 退出系统
阶段划分
- 第一阶段:创建数组用来保存订单信息
- 第二阶段:创建数组保存餐品信息并赋值
- 第三阶段:初始化2条订单信息
- 第四阶段:完成整体框架和退出功能
- 第五阶段:完成我要订餐功能
- 第六阶段:完成查看餐袋功能
- 第七阶段:完成签收订单功能
- 第八阶段:完成删除订单功能
- 第九阶段:完成我要点赞功能
第一阶段:创建数组用来保存订单信息
names(订餐人姓名)、menus(餐品信息)、times(送餐时间)、addresses(送餐地址)、states(订单状态)、sumPrices(订单总金额)
使用数组如何保存订单信息(订单信息:订餐人姓名、餐品信息、送餐时间、送餐地址、订单状态、订单总金额)?
这些用来保存订单信息的数组长度相同,把订单信息保存到每个数组相同的地方即可组成一天订单信息。
//1.创建数组用来保存订单信息
//订餐人姓名
String[] names = new String[4];
//餐品信息
String[] menus = new String[4];
//送餐时间
int[] times = new int[4];
//送餐地址
String[] addresses = new String[4];
//订单状态
int[] states = new int[4];
//订单总金额
double[] sumPrices = new double[4];
第二阶段:创建数组保存餐品信息并赋值
menuNames(菜名)、prices(单价)、praiseNums(点赞数)
//2.创建数组保存餐品信息
//菜名
String[] menuNames = {"红烧带鱼","鱼香肉丝","时令蔬菜"};
//单价
double[] prices = {38.0 , 18.0 , 10.0};
//点赞数
int[] praiseNums = new int[3];
第三阶段:初始化2条订单信息
//3.初始化2条订单信息并赋值
names[0] = "luckyboy!";
menus[0] = "红烧带鱼 ×1份";
times[0] = 12;
addresses[0] = "亳州路100号";
states[0] = 1;
sumPrices[0] = 76.0;
names[1] = "luckyboy!";
menus[1] = "鱼香肉丝 ×1份";
times[1] = 12;
addresses[1] = "亳州路100号";
states[1] = 0;
sumPrices[1] = 23.0;
第四阶段:完成整体框架和退出功能
int num = 0;
do{
System.out.println("******************************");
System.out.println("* 吃货联盟订餐系统 *");
System.out.println("* @author:luckyboy! *");
System.out.println("* version:1.0 *");
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("请选择(序号):");
//使用switch选择结构执行相应的功能,choose(选择)
Scanner in = new Scanner(System.in);
int choose = in.nextInt();
/*
* 如果choose变量赋值为1-6以外的数字怎么办?执行什么功能?
* 可以判断choose变量的值,如果choose变量值大于6小于1,重新给choose变量赋值
*/
while(choose > 6 || choose < 1){
System.out.println("对不起没有此功能,请重新选择:");
choose = in.nextInt();
}
switch(choose){
case 1://我要订餐
System.out.println("* 1-> 我要订餐 *");
break;
case 2://查看餐袋
System.out.println("* 2-> 查看餐袋 *");
break;
case 3://签收订单
System.out.println("* 3-> 签收订单 *");
break;
case 4://删除订单
System.out.println("* 4-> 删除订单 *");
break;
case 5://我要点赞
System.out.println("* 5-> 我要点赞 *");
break;
case 6://退出系统
System.out.println("* 6-> 退出系统 *");
break;
}
//判断choose变量是否等于6,如果choose变量等于6,则跳出do-while循环,程序执行结束。
if(choose == 6){
break;
}
//给num变量赋值,如果num变量赋值为0,则while括号的的条件判断为真,循环继续执行。
//如果num变量赋值为0以外的其他数字,则while括号的的条件判断为加,循环不执行,程序执行结束。
System.out.println("输入0返回");
num = in.nextInt();
if(num != 0){
break;
}
}while(num==0);
System.out.println("程序结束,感谢使用此程序!");
第五阶段:完成我要订餐功能
case 1://我要订餐
/*
* 订餐功能思路分析
*(1)订单信息数组有空位置保存订单
*(2)订单信息数组已满,不能订餐
*/
System.out.println("* 1-> 我要订餐 *");
//设置标志位
boolean flag = false;
//(1)订单信息数组有空位置保存订单
//由于保存订单信息的数组长度都为4,因此可以获取保存订单信息数组中锋的任意一个数组的长度作为循环条件
for (int i = 0; i < names.length; i++) {
flag = true;
//判断菜品信息数组中的数据元素是否为空,数据元素为空则执行循环体
if(names[i] == null){
System.out.println("序号\t菜品\t 单价");
for (int j = 0; j < menuNames.length; j++) {
System.out.println((j+1) + "\t" + menuNames[j] + "\t " + prices[j]);
}
System.out.println("请选择您要点的菜品编号:");
int menuId = in.nextInt();
System.out.println("请选择您需要点的份数:");
int number = in.nextInt();
String menu = menuNames[menuId-1] + " ×" + number + "份";
System.out.println("请输入订餐人姓名:");
String name = in.next();
System.out.println("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
int time = in.nextInt();
while(time < 10 || time > 20){
System.out.println("对不起,10点至20点间整点送餐,请重新输入:");
time = in.nextInt();
}
System.out.println("请输入送餐地址:");
String address = in.next();
//计算订单总金额 = 餐费 + 配送费
double price = prices[menuId] * number;
double shoppingFree = price > 50 ? 0 : 5.0;
double sumPrice = price + shoppingFree;
//输出订单信息
System.out.println("订餐成功!");
System.out.println("您订的是:"+menu);
System.out.println("送餐时间是:"+time+"点");
System.out.println("送餐地址是:"+address);
System.out.println("餐费:"+price + ",配送费:"+shoppingFree);
System.out.println("订单总金额:"+sumPrice);
//保存订单信息
names[i] = name;
menus[i] = menu;
times[i] = time;
addresses[i] = address;
sumPrices[i] = sumPrice;
break;
}
}
if(!flag){
System.out.println("对不起,餐袋已满!");
}
break;
第六阶段:完成查看餐袋功能
case 2://查看餐袋
/*
* 查看餐袋功能思路分析
* 使用循环输出保存订单信息的所有数组,数组元素为空的位置不输出
*/
System.out.println("* 2-> 查看餐袋 *");
System.out.println("序号\t姓名\t餐品\t\t送餐时间\t 送餐地址\t订单状态\t总金额");
for (int i = 0; i < names.length; i++) {
if(names[i] != null){
String time = times[i] + "点";
String stat = states[i] == 0 ? "已预定" : "已签收";
String price = sumPrices[i] + "元";
System.out.println((i+1) + "\t" + names[i] + "\t" +menus[i] + "\t" + time + "\t " + addresses[i] + "\t" + stat + "\t" + price);
}
}
break;
第七阶段:完成签收订单功能
case 3://签收订单
/*
* 签收订单功能思路分析
* 根据用户原则的订单序号,更该此订单的订单状态
* 情况一:订单状态为已完成,不可以签收订单
* 情况二:订单状态为已预定,可以签收订单
* 情况三:没有此订单
*
*/
System.out.println("* 3-> 签收订单 *");
//设置标志位
boolean isflag = false;
System.out.println("请选择需要签收的订单序号:");
int number = in.nextInt();
for (int i = 0; i < names.length; i++) {
//如果订单不为空,订单状态为0(已预定),订单号相同,可以签收订单
if(names[i] != null && states[i] == 0 && number == i+1){
System.out.println("订单签收成功!");
states[number-1] = 1;
isflag = true;
break;
}//如果订单不为空,订单状态为1(已签收),订单号相同,不可以签收订单
else if(names[i] != null && states[i] == 1 && number == i+1){
System.out.println("对不起,此订单已经签收,不可重复签收!");
isflag = true;
break;
}
}
if(!isflag){
System.out.println("对不起,此订单不存在!");
}
break;
第八阶段:完成删除订单功能
case 4://删除订单
/*
* 删除订单功能思路分析
* 找到用户输入的订单序号,删除保存在此订单数组中的订单信息
* 情况一:找到此订单序号,订单状态为已签收,可以删除此订单
* 情况二:找到此订单序号,订单状态为已预定,不可以删除地订单
* 情况三:没有找到此订单序号
*
*/
System.out.println("* 4-> 删除订单 *");
//设置标志位
boolean isDel = false;
//记录序言删除的订单序号下标
int index = -1;
System.out.println("请输入您要签收的订单序号:");
int delId = in.nextInt();
for (int i = 0; i < names.length; i++) {
if(names[i] != null && states[i] == 1 && delId == i+1 ){
System.out.println("订单删除成功!");
index = i;
isDel = true;
break;
}
else if(names[i] != null && states[i] == 0 && delId == i+1 ){
System.out.println("对不起,此订单未签收,不能删除此订单!");
isDel = true;
break;
}
}
if(!isDel){
System.out.println("对不起,此订单不存在!");
}
//删除订单
if(index != -1){
for (int i = delId; i < names.length; i++) {
names[i-1] = names[i];
menus[i-1] = menus[i];
times[i-1] = times[i];
addresses[i-1] = addresses[i];
states[i-1] = states[i];
sumPrices[i-1] = sumPrices[i];
}
//清空最后以为数组
names[names.length-1] = null;
menus[names.length-1] = null;
times[names.length-1] = 0;
addresses[names.length-1] = null;
states[names.length-1] = 0;
sumPrices[names.length-1] = 0.0;
}
break;
第九阶段:完成我要点赞功能
case 5://我要点赞
/*
* 我要点赞功能思路分析
* 根据用户输入的序号,给相应的菜品赞数加1
*/
System.out.println("* 5-> 我要点赞 *");
//输出菜品菜单信息
System.out.println("序号\t菜品\t 单价\t 赞");
for (int j = 0; j < menuNames.length; j++) {
String price = prices[j] + "元";
System.out.println((j+1) + "\t" + menuNames[j] + "\t " + price + "\t " + praiseNums[j]);
}
System.out.println("请输入您要点赞的菜品序号:");
int isNumber = in.nextInt();
praiseNums[isNumber - 1]++;
System.out.println(menuNames[isNumber-1]+"点赞成功");
break;
案例代码如下:
public static void main(String[] args) {
//创建数组用来保存订单信息
//订餐人姓名
String[] names = new String[4];
//餐品信息
String[] menus = new String[4];
//送餐时间
int[] times = new int[4];
//送餐地址
String[] addresses = new String[4];
//订单状态
int[] states = new int[4];
//订单总金额
double[] sumPrices = new double[4];
//创建数组保存餐品信息
//菜名
String[] menuNames = {"红烧带鱼","鱼香肉丝","时令蔬菜"};
//单价
double[] prices = {38.0 , 18.0 , 10.0};
//点赞数
int[] praiseNums = new int[3];
//初始化2条订单信息并赋值
names[0] = "小汪";
menus[0] = "红烧带鱼 ×1份";
times[0] = 12;
addresses[0] = "亳州路100号";
states[0] = 1;
sumPrices[0] = 76.0;
names[1] = "小汪";
menus[1] = "鱼香肉丝 ×1份";
times[1] = 12;
addresses[1] = "亳州路100号";
states[1] = 0;
sumPrices[1] = 23.0;
int num = 0;
do{
System.out.println("******************************");
System.out.println("* 吃货联盟订餐系统 *");
System.out.println("* @author:小汪 *");
System.out.println("* version:1.0 *");
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("请选择(序号):");
//使用switch选择结构执行相应的功能,choose(选择)
Scanner in = new Scanner(System.in);
int choose = in.nextInt();
/*
* 如果choose变量赋值为1-6以外的数字怎么办?执行什么功能?
* 可以判断choose变量的值,如果choose变量值大于6小于1,重新给choose变量赋值
*/
while(choose > 6 || choose < 1){
System.out.println("对不起没有此功能,请重新选择:");
choose = in.nextInt();
}
switch(choose){
case 1://我要订餐
/*
* 订餐功能思路分析
*(1)订单信息数组有空位置保存订单
*(2)订单信息数组已满,不能订餐
*/
System.out.println("* 1-> 我要订餐 *");
//设置标志位
boolean flag = false;
//(1)订单信息数组有空位置保存订单
//由于保存订单信息的数组长度都为4,因此可以获取保存订单信息数组中锋的任意一个数组的长度作为循环条件
for (int i = 0; i < names.length; i++) {
flag = true;
//判断菜品信息数组中的数据元素是否为空,数据元素为空则执行循环体
if(names[i] == null){
System.out.println("序号\t菜品\t 单价");
for (int j = 0; j < menuNames.length; j++) {
System.out.println((j+1) + "\t" + menuNames[j] + "\t " + prices[j]);
}
System.out.println("请选择您要点的菜品编号:");
int menuId = in.nextInt();
System.out.println("请选择您需要点的份数:");
int number = in.nextInt();
String menu = menuNames[menuId-1] + " ×" + number + "份";
System.out.println("请输入订餐人姓名:");
String name = in.next();
System.out.println("请输入送餐时间(送餐时间是10点至20点间整点送餐):");
int time = in.nextInt();
while(time < 10 || time > 20){
System.out.println("对不起,10点至20点间整点送餐,请重新输入:");
time = in.nextInt();
}
System.out.println("请输入送餐地址:");
String address = in.next();
//计算订单总金额 = 餐费 + 配送费
double price = prices[menuId] * number;
double shoppingFree = price > 50 ? 0 : 5.0;
double sumPrice = price + shoppingFree;
//输出订单信息
System.out.println("订餐成功!");
System.out.println("您订的是:"+menu);
System.out.println("送餐时间是:"+time+"点");
System.out.println("送餐地址是:"+address);
System.out.println("餐费:"+price + ",配送费:"+shoppingFree);
System.out.println("订单总金额:"+sumPrice);
//保存订单信息
names[i] = name;
menus[i] = menu;
times[i] = time;
addresses[i] = address;
sumPrices[i] = sumPrice;
break;
}
}
if(!flag){
System.out.println("对不起,餐袋已满!");
}
break;
case 2://查看餐袋
/*
* 查看餐袋功能思路分析
* 使用循环输出保存订单信息的所有数组,数组元素为空的位置不输出
*/
System.out.println("* 2-> 查看餐袋 *");
System.out.println("序号\t姓名\t餐品\t\t送餐时间\t 送餐地址\t订单状态\t总金额");
for (int i = 0; i < names.length; i++) {
if(names[i] != null){
String time = times[i] + "点";
String stat = states[i] == 0 ? "已预定" : "已签收";
String price = sumPrices[i] + "元";
System.out.println((i+1) + "\t" + names[i] + "\t" +menus[i] + "\t" + time + "\t " + addresses[i] + "\t" + stat + "\t" + price);
}
}
break;
case 3://签收订单
/*
* 签收订单功能思路分析
* 根据用户原则的订单序号,更该此订单的订单状态
* 情况一:订单状态为已完成,不可以签收订单
* 情况二:订单状态为已预定,可以签收订单
* 情况三:没有此订单
*
*/
System.out.println("* 3-> 签收订单 *");
//设置标志位
boolean isflag = false;
System.out.println("请选择需要签收的订单序号:");
int number = in.nextInt();
for (int i = 0; i < names.length; i++) {
//如果订单不为空,订单状态为0(已预定),订单号相同,可以签收订单
if(names[i] != null && states[i] == 0 && number == i+1){
System.out.println("订单签收成功!");
states[number-1] = 1;
isflag = true;
break;
}//如果订单不为空,订单状态为1(已签收),订单号相同,不可以签收订单
else if(names[i] != null && states[i] == 1 && number == i+1){
System.out.println("对不起,此订单已经签收,不可重复签收!");
isflag = true;
break;
}
}
if(!isflag){
System.out.println("对不起,此订单不存在!");
}
break;
case 4://删除订单
/*
* 删除订单功能思路分析
* 找到用户输入的订单序号,删除保存在此订单数组中的订单信息
* 情况一:找到此订单序号,订单状态为已签收,可以删除此订单
* 情况二:找到此订单序号,订单状态为已预定,不可以删除地订单
* 情况三:没有找到此订单序号
*
*/
System.out.println("* 4-> 删除订单 *");
//设置标志位
boolean isDel = false;
//记录序言删除的订单序号下标
int index = -1;
System.out.println("请输入您要签收的订单序号:");
int delId = in.nextInt();
for (int i = 0; i < names.length; i++) {
if(names[i] != null && states[i] == 1 && delId == i+1 ){
System.out.println("订单删除成功!");
index = i;
isDel = true;
break;
}
else if(names[i] != null && states[i] == 0 && delId == i+1 ){
System.out.println("对不起,此订单未签收,不能删除此订单!");
isDel = true;
break;
}
}
if(!isDel){
System.out.println("对不起,此订单不存在!");
}
//删除订单
if(index != -1){
for (int i = delId; i < names.length; i++) {
names[i-1] = names[i];
menus[i-1] = menus[i];
times[i-1] = times[i];
addresses[i-1] = addresses[i];
states[i-1] = states[i];
sumPrices[i-1] = sumPrices[i];
}
//清空最后以为数组
names[names.length-1] = null;
menus[names.length-1] = null;
times[names.length-1] = 0;
addresses[names.length-1] = null;
states[names.length-1] = 0;
sumPrices[names.length-1] = 0.0;
}
break;
case 5://我要点赞
/*
* 我要点赞功能思路分析
* 根据用户输入的序号,给相应的菜品赞数加1
*/
System.out.println("* 5-> 我要点赞 *");
//输出菜品菜单信息
System.out.println("序号\t菜品\t 单价\t 赞");
for (int j = 0; j < menuNames.length; j++) {
String price = prices[j] + "元";
System.out.println((j+1) + "\t" + menuNames[j] + "\t " + price + "\t " + praiseNums[j]);
}
System.out.println("请输入您要点赞的菜品序号:");
int isNumber = in.nextInt();
praiseNums[isNumber - 1]++;
System.out.println(menuNames[isNumber-1]+"点赞成功");
break;
//退出系统
case 6:
System.out.println("* 6-> 退出系统 *");
break;
}
//判断choose变量是否等于6,如果choose变量等于6,则跳出do-while循环,程序执行结束。
if(choose == 6){
break;
}
//给num变量赋值,如果num变量赋值为0,则while括号的的条件判断为真,循环继续执行。
//如果num变量赋值为0以外的其他数字,则while括号的的条件判断为加,循环不执行,程序执行结束。
System.out.println("输入0返回");
num = in.nextInt();
if(num != 0){
break;
}
}while(num == 0);
System.out.println("程序执行结束,感谢您的使用!");
}
}