该项目利用Java基础(数据类型、数据、循环等Java基础知识),非常推荐给新手进行操作。
package com.hubstc.order;
import java.util.Scanner;
public class OrderFoodSys {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 各数组主体通过下标进行关联
// 定义数据主体:菜品
String[] dishNames = { "红烧带鱼", "鱼香肉丝", "时令蔬菜" }; // 菜品名称
double[] prices = { 38.0, 20.0, 10.0 }; // 单价
int[] praiseNums = new int[3]; // 点赞数
// 初始化2个订单信息
// 定义数据主体:订单-订餐人 餐品信息 送餐时间 送餐地址 总金额 订单状态
String[] names = new String[4];
String[] dishMsg = new String[4]; // 菜品名称+订份数
int[] times = new int[4];
String[] address = new String[4];
double[] sumPrices = new double[4];
int[] states = new int[4]; // 0:已预订 1:已完成
names[0] = "张三";
dishMsg[0] = "红烧带鱼 2份";
times[0] = 10;
address[0] = "知春路223号";
sumPrices[0] = 76; // 餐费>50元免配送费,否则配送费6元
states[0] = 1;
names[1] = "李四";
dishMsg[1] = "鱼香肉丝 1份";
times[1] = 14;
address[1] = "江汉路223号";
sumPrices[1] = 26; // 餐费>50元免配送费,否则配送费6元
states[1] = 0;
// 搭建项目整体流程框架
Scanner sc = new Scanner(System.in);
int num = -1; // 用户输入0返回时的输入数字,当num = 0时重复显示菜单
System.out.println("欢迎使用“吃货联盟订餐系统”");
// 记录用户是否退出系统的状态:退出:true 不退出:false
boolean flag = false;
do {
System.out.println("****************************************");
System.out.println("1:订餐 2:查看餐袋 3:签收订单 4:删除订单 5:点赞 6:退出");
System.out.println("****************************************");
System.out.println("请选择:");
int choice = sc.nextInt();
switch (choice) {
case 1:
System.out.println("\n****************订餐*****************");
/*
* 订餐功能实现代码 功能实现: 订餐前判断订单(boolean变量)是否已满,如果已满则不能订餐,否则就可以订餐
*/
boolean isAdd = false;
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
// 订单未满,可以订餐
isAdd = true;
// 开始订餐
System.out.print("请输入订餐人姓名:");
String name = sc.next();
// 循环输出菜品信息
System.out.println("序号\t菜名\t单价");
for (int j = 0; j < dishNames.length; j++) {
String praise = (praiseNums[j] == 0) ? "" : praiseNums[j] + "个赞";
System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + prices[j]+"\t"+praise);
}
// 菜品编号的输入及判断
System.out.print("请输入您要点的菜品编号:");
int no = sc.nextInt();
while (no < 1 || no > dishNames.length) {
System.out.print("本店没有这个菜品,请重新选择:");
no = sc.nextInt();
}
// 点餐份数
System.out.print("请输入你需要的份数:");
int number = sc.nextInt();
// 送餐时间的输入及判断
System.out.print("请输入送餐时间(送餐时间只能在10-20之间的整点):");
int time = sc.nextInt();
while (time < 10 || no > 20) {
System.out.println("不在配送时间内,请输入10-20之间的整点:");
time = sc.nextInt();
}
// 送餐地址
System.out.print("请输入送餐地址:");
String addresses = sc.next();
// 输出订单信息给用户看并将订餐信息添加到订单信息
System.out.println("订单成功!");
// 菜品信息:菜品名称 份数
String dishInfo = dishNames[no - 1] + " " + number + "份";
System.out.println("您订的是:" + dishInfo);
System.out.println("送餐时间:" + time + "点");
// 餐费 配送费 总计
double dishprice = prices[no - 1] * number; // 餐费=单价*份数
double price = (dishprice > 50) ? 0 : 6; // 配送费
double sumPrice = dishprice + price; // 总计
System.out.println("餐费:" + dishprice + "元,配送费:" + price + "元,总计:" + sumPrice + "元");
// 将订餐信息添加到订单信息
names[i] = name;
dishMsg[i] = dishInfo;
times[i] = time;
address[i] = addresses;
sumPrices[i] = sumPrice;
// 结束本次订餐,跳出循环
break;
}
}
if (!isAdd) {
System.out.println("对不起,您的餐袋已满!");
}
break;
case 2:
System.out.println("\n**************查看餐袋****************");
// 查看餐袋(循环遍历、三目运算符、if语句进行非空判断)
System.out.println("序号" + "\t订餐人" + "\t" + "餐品菜品"
+ "\t\t" + "送餐时间" + "\t" + "送餐地点" + "\t\t" + "订餐金额" + "\t订单状态");
// 利用for循环,遍历输出数组菜品信息
for (int i = 0; i < names.length; i++) {
if (names[i] != null) { // 输出非空订单信息
String time = times[i] + "点";
String state = (states[i] == 0) ? "已预订" : "已完成";
System.out.println((i + 1) + "\t" + names[i] + "\t" + dishMsg[i] + "\t" + time + "\t" + address[i]
+ "\t" + sumPrices[i] + "\t" + state);
}
}
break;
case 3:
System.out.println("\n**************签收订单****************");
//签收订单前确认订单是否存在
boolean isSign = false;
System.out.print("请您输入要签收的订单编号:");
int signNo = sc.nextInt();
for(int i = 0;i < names.length;i++){
if(names[i] != null && states[i] == 0 && i == signNo -1){
//有订单信息,且用户输入订单编号可以找到
isSign = true;
//订单状态未已预订
states[i] = 1;
System.out.println("订单签收成功!");
}else if(names[i] != null && states[i] == 1 && i == signNo -1){
//有订单信息,且用户输入订单编号可以找到
isSign = true;
//订单状态未已完成
System.out.println("您的订单已签收,不能再次签收!");
}
}
if(!isSign){
System.out.println("您选择的订单不存在!");
}
break;
case 4:
System.out.println("\n**************删除订单****************");
//删除订单前确认订单是否存在
boolean isDelete = false;
System.out.print("请您输入要删除的订单编号:");
int deleteNo = sc.nextInt();
for(int i = 0;i < names.length;i++){
if(names[i] != null && states[i] == 0 && i == deleteNo-1){
//有订单信息,且用户输入订单编号可以找到
isDelete = true;
//订单状态未已预订,不能删除
System.out.println("您选择的订单未签收,不能删除!");
}else if(names[i] != null && states[i] == 1 && i == deleteNo -1){
//有订单信息,且用户输入订单编号可以找到
isDelete = true;
//订单状态未已完成,能删除
//找到删除订单的位置的下标i,把i后面的元素依次往前移动,最后一个数组元素要置空
//注:移动的过程就是将后一个元素往前一个元素复制的过程
for(int j = i;j < names.length-1;j++){//注意下标越界
names[j] = names[j+1];
dishMsg[j] = dishMsg[j+1];
times[j] = times[j+1];
address[j] = address[j+1];
sumPrices[j] = sumPrices[j+1];
states[j] = states[j+1];
}
//最后一个元素一定要置空,置空后可以进行新订单
names[names.length-1] = null;
dishMsg[names.length-1] = null;
times[names.length-1] = 0;
address[names.length-1] = null;
sumPrices[names.length-1] = 0;
states[names.length-1] = 0;
System.out.println("删除订单成功!");
}
}
if(!isDelete){
System.out.println("您选择的订单不存在!");
}
break;
case 5:
System.out.println("\n****************点赞*****************");
// 循环输出菜品信息
System.out.println("序号\t菜名\t单价");
for (int j = 0; j < dishNames.length; j++) {
String praise = (praiseNums[j] == 0) ? "" : praiseNums[j] + "个赞";
System.out.println((j + 1) + "\t" + dishNames[j] + "\t" + prices[j]+"\t"+praise);
}
//点赞
System.out.println("请输入您要点赞的菜品序号:");
int praiseNo = sc.nextInt();
while(praiseNo < 1 || praiseNo > dishNames.length){
System.out.print("本店没有此菜品,无法点赞!请重新输入一个菜品序号:");
praiseNo = sc.nextInt();
}
//关键点:在何处进行点赞数+1,点赞菜品的位置 = praiseNo -1
praiseNums[praiseNo-1]++;
break;
case 6:
flag = true;
System.out.println("即将退出!");
break; // 退出系统
default:
flag = true;
break; // 退出系统
}
// 退出系统 —— 根据flag的值决定是否退出系统
if (!flag) { // !flag 等同于 flag == false
System.out.print("请输入0返回:");
num = sc.nextInt(); // 接收用户输入的数字
} else {
break;
}
} while (num == 0);
System.out.println("谢谢使用,欢迎下次光临!");
}
}