一生朋友一生情,一生有你才会赢;千山万水总是情,点个关注行不行!

1、系统需求说明

概要:现今已进入网络时代,网上购物、看新闻、交友等人们的日常生活已离不开网络。“只要点点手指,就能送餐上门”,网上定餐越来越受到都市年轻人的青睐    现要求开发一个网上订餐系统,其具体功能如下:

1.1、我要订餐
       完成用户订餐,每条订单包含如下信息:

1.1.1、订餐人姓名:要求用户

1.1.2、输入选择菜品及份数:显示三个菜单序号、名称、单价、点赞数,提示用户输入要选择的菜品序号及份数

1.1.3、送餐时间:要求当天10到20点间整点送餐,要求用户输入10~20的整数,输入错误,重复输入。

1.1.4、送餐地址:要求用户输入

1.1.5、状态:两种状态:0:已预定(默认状态) 1、已完成(订单已签收)

1.1.6、总金额:总金额 = 菜品单价*份数-送餐费

(送餐费:当单笔订单金额达到50元时,免送餐费,否则,需交纳6元送餐费)

1.1.7、订餐成功后,显示订单信息。

1.2、查看订单
        遍历显示已有订单

内容包括:序号、订餐人姓名、订餐信息(菜品名和份数)、送餐时间、送餐地址、状态(已预定或已完成)、总金额

1.3、签收订单
        将订单中状态改为已完成

1.4、删除订单
    用户输入订单序号,如该序号订单为已完成状态,可以删除,其它情况给出相应提示信息

1.5、我要点赞
        显示菜品序号、菜品名、单价、点赞数,提示用户输入要点赞的菜品序号完成对菜品的点赞。

1.6、退出系统
退出整个系统,显示“谢谢使用,欢迎下次光临”。

1.7、菜单切换
用户可根据显示的主菜单,输入功能编号执行相应的功能,当输入1~5时,执行相应功能

3、思路与代码编写

第一阶段:分析数据主体(重难点)

第二阶段:分析并完成整体框架(重难点)

第三阶段:分析并完成退出功能

第四阶段:分析并完成订餐功能

第五阶段:分析并完成查看餐袋功能

第六阶段:分析并完成签收订单功能

第七阶段:分析并完成删除功能(重难点)

第八阶段:分析总完成我要点赞功能

2.1、分析数据主体
我要订餐        查看餐袋        删除订单        签收订单

声明多个数组,用来保存基本信息,包括:订餐人、所定餐品信息、送餐时间、送餐地址、订单状态、总金额等

我要点赞(餐品)

再声明一组固定的数组,用来保存餐品、餐品单价和点赞数等。

// 数据主题:一组订单信息(一条订单需要的内容,用不同的数组装起来)String[] names = new String[4];// 订餐人名称数组:用来存放订餐人的姓名String[] foodInformations = new String[4];// 所选菜品名数组:用来存放订餐人定的餐品信息,通过菜品名拼接份数的形式显示int[] times = new int[4];// 送餐日期数组:存放订单配送时间String[] addresses = new String[4];// 送餐地址数组:存放订单配送地址int[] states = new int[4]; // 订单状态数组: 0:已预定 1:已完成double[] sumPrices = new double[4];// 订单总金额组: 存放每笔订单的总金额// 初始化第一条订单信息names[0] = "陈斌";foodInformations[0] = "红烧带鱼 2份";// "菜品名+份数"的形式显示times[0] = 3;addresses[0] = "北大青鸟";sumPrices[0] = 76.0;states[0] = 1;// 初始化第二条订单信息names[1] = "程少聪";foodInformations[1] = "鱼香肉丝 2份";// "菜品名+份数"的形式显示times[1] = 10;addresses[1] = "北大青鸟";sumPrices[1] = 20.0;states[1] = 0;// 数据主题:菜单信息String[] foodNames = { "红烧带鱼", "鱼香肉丝", "红烧鸡腿" };double[] prices = { 38.0, 6.0, 10.0 };int[] dianZans = new int[3];

2.2、整体框架
使用循环(do-while)作为最外圈的大循环

循环操作:

显示主菜单

提示用户输入功能编号,并且能执行相应功能

提示输入0返回

循环条件:用户输入0

使用switch循环作为内侧的分支循环

可以根据用户输入功能编号,执行相应功能

Scanner sc = new Scanner(System.in);int num = 0;//用来记录用户输入的数字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 serialNumber = sc.nextInt();switch(serialNumber)case 1://我要订餐break;case 2://查看餐带break;case 3://签收订单break;case 4://删除订单break;case 5://我要点赞break;case 6://退出系统default://其他操作break;} while (num == 0);System.out.println("感谢您的使用,欢迎下次光临!!");

2.3、退出系统
 2.3.1、当显示主菜单之后,用户输入6或者1~6之外的数据

2.3.2、执行完相应功能后,提示输入0返回时

if (serialNumber < 1 || serialNumber > 5) {
                break;
            } else {
                System.out.print("输入0返回:");
                num = sc.nextInt();
            }
2.4、我要订餐

2.4.1、查找插入位置

找要插入的位置,循环遍历订餐人第一个为空的位置

如果找到了,则此位置就是要插入的数据位置

如果没找到,则显示餐袋已满。

2.4.2、执行添加数据操作

a、显示所有可供选择的餐品信息

用户结语选择的餐品编号和份数

b、输入订餐人姓名

c、输入送餐时间(10~20点之间整点送餐)

当输入的信息有误时,重复输入

d、输入送餐地址

e、计算总金额

餐品总金额=餐品单价*份数

送餐费:餐品总金额达到50元时,免6元餐费

2.4.3、显示订单信息

所定餐品信息

订餐人

送餐时间

送餐地址

总金额

2.4.4、保存订单信息

// 1.我要订餐System.out.println("*******我要订餐*******");// 需要找到要插入的位置for (int i = 0; i < names.length; i++) {// 如果找到空的位置则记录下来if (names[i] == null) {isAdd = true;// 记录已找到的一个空位置// 执行插入操作// 显示菜单信息System.out.println("菜单信息:");System.out.println("序号\t菜品名\t价格\t点赞数");for (int j = 0; j < 3; j++) {System.out.println((j + 1) + "\t" + foodNames[j]+ "\t" + prices[j] + "\t" + dianZans[j]);}// 点餐信息System.out.print("请输入您需要点的菜品序号:");int foodSerialNum = sc.nextInt();System.out.print("您点该菜品需要点份数为:");int foodNum = sc.nextInt();String foodInformation = foodNames[foodSerialNum - 1]+ " " + foodNum + "份";// 点餐人姓名System.out.print("请输入订餐人的姓名:");String name = sc.next();// 送餐时间int time = 0;while (true) {System.out.print("请选择配送时间(10~20点间的整数):");time = sc.nextInt();if (time > 20 || time < 10) {System.out.println("请输入10~20点间的整数!");} else {break;}}// 送餐地址System.out.print("请输入送餐地址:");String address = sc.next();// 全部信息输出一遍System.out.println("订单成功");System.out.println("您点的菜品是:" + foodInformation);System.out.println("订餐人姓名为:" + name);System.out.println("送餐时间为:" + time + "点");System.out.println("送餐地址为:" + address);double sumPrice = prices[foodSerialNum - 1] * foodNum;if (sumPrice < 50) {System.out.print("菜品价格为:" + sumPrice + " 配送费:6元"+ " 总金额为:" + (sumPrice + 6) + "元");sumPrice += 6;} else {System.out.print("总金额为:" + (sumPrice) + "元");}// 保存数据names[i] = name;foodInformations[i] = foodInformation;times[i] = time;addresses[i] = address;states[i] = 0;sumPrices[i] = sumPrice;break;}}// 如果没有找到为空的位置,则提示信息if (!isAdd) {System.out.println("对不起,您的餐袋已满!");}

2.5、查看餐袋

显示每条订单信息(遍历数组)

序号        所订餐品信息        订餐人姓名        送餐时间        送餐地址        状态(已预订0        已完成1)        总金额

// 2.查看餐袋System.out.println("*******查看餐袋*******");System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t\t送餐地址\t总金额\t订单状态");for (int j = 0; j < names.length; j++) {String state = states[j] == 0 ? "已预定" : "已完成";if (names[j] != null) {System.out.println((j + 1) + "\t" + names[j] + "\t"+ foodInformations[j] + "\t" + times[j]+ "点\t\t" + addresses[j] + "\t" + sumPrices[j]+ "元\t" + state);}}

2.6、签收订单

要求用户输入一个签收的订单序号

查找这条订单(循环遍历)

a、找到,状态是已完成(已经签收完毕):提示不能再次签收

b、找到,状态是已预约(没有完成签收):可以签收

c、没找到:提示信息没有找到

// 3.签收订单// 订单序号System.out.println("*******签收订单*******");System.out.print("请输入您需要签收的订单:");int orderNum = sc.nextInt();if (states[orderNum - 1] == 0) {states[orderNum - 1] = 1;System.out.println("您已签收成功");} else {System.out.println("该订单已签收");}

3.7、删除订单
a、输入要删除的订单序号(从1开始)

b、循环查找这条订单

找到此订单,已签收:执行删除操作

找到此订单,且未签收:提示信息

未找到订单:提示信息

c、删除操作(循环移位)

从要删除的元素后面一个开始,到数组最后一个元素依次向前移动一位,且最后一位清空

 // 4.删除订单System.out.println("*******删除订单*******");System.out.print("请输入您要删除的订单序号");int dalOrder = sc.nextInt();// 判断该订单是否存在以及状态如何if (names[dalOrder - 1] != null && states[dalOrder - 1] == 1) {System.out.println("删除成功");// 执行删除操作for (int j = dalOrder - 1; j < names.length - 1; j++) {names[j] = names[j + 1];foodInformations[j] = foodInformations[j + 1];times[j] = times[j + 1];addresses[j] = addresses[j + 1];sumPrices[j] = sumPrices[j + 1];states[j] = states[j + 1];}// 当第四行存在时,单独删除第四行,清空最后一行if (names[names.length - 1] != null) {names[names.length - 1] = null;foodInformations[names.length - 1] = null;times[names.length - 1] = 0;addresses[names.length - 1] = null;sumPrices[names.length - 1] = 0.0;}} else if (names[dalOrder - 1] != null&& states[dalOrder - 1] == 0) {System.out.println("该订单还未签收,不能删除");} else {System.out.println("未找到该订单");}

3.8、点赞

a、显示供点赞的餐品列表

b、输入要点赞的餐品序号

c、该序号的餐品点赞数加1

d、显示

// 5.我要点赞System.out.println("*******我要点赞*******");// 输出菜品信息System.out.println("菜单信息:");System.out.println("序号\t菜品名\t价格\t点赞数");for (int j = 0; j < 3; j++) {System.out.println((j + 1) + "\t" + foodNames[j] + "\t"+ prices[j] + "\t" + dianZans[j]);}// 点赞的菜品序号(死循环判断)while (true) {System.out.print("请输入您需要点赞的菜品序号:");int serialNum = sc.nextInt();// 判断序号是否存在if (serialNum < 4 & serialNum > 0) {dianZans[serialNum - 1]++;System.out.println("点赞成功");break;} else {System.out.println("您输入的菜品序号不存在,请重新输入1~3之间的整数");}}

3.9、简单总结

本项目为最简单的Java初期项目,可以提升我们对原来知识点的运用,同时累计我们的项目经验

4、完整代码

// 数据主题:一组订单信息(一条订单需要的内容,用不同的数组装起来)String[] names = new String[4];// 订餐人名称数组:用来存放订餐人的姓名String[] foodInformations = new String[4];// 所选菜品名数组:用来存放订餐人定的餐品信息,通过菜品名拼接份数的形式显示int[] times = new int[4];// 送餐日期数组:存放订单配送时间String[] addresses = new String[4];// 送餐地址数组:存放订单配送地址int[] states = new int[4]; // 订单状态数组: 0:已预定 1:已完成double[] sumPrices = new double[4];// 订单总金额组: 存放每笔订单的总金额// 初始化第一条订单信息names[0] = "陈斌";foodInformations[0] = "红烧带鱼 2份";// "菜品名+份数"的形式显示times[0] = 3;addresses[0] = "北大青鸟";sumPrices[0] = 76.0;states[0] = 1;// 初始化第二条订单信息names[1] = "程少聪";foodInformations[1] = "鱼香肉丝 2份";// "菜品名+份数"的形式显示times[1] = 10;addresses[1] = "北大青鸟";sumPrices[1] = 20.0;states[1] = 0;// 数据主题:菜单信息String[] foodNames = { "红烧带鱼", "鱼香肉丝", "红烧鸡腿" };double[] prices = { 38.0, 6.0, 10.0 };int[] dianZans = new int[3];// 输入的数字Scanner sc = new Scanner(System.in);int choose;System.out.println("欢迎使用吃货订单系统");a: 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.print("请选择您的操作 :");choose = sc.nextInt();boolean isAdd = false; // 当为true时,记录找到一个为空的位置,可以插入switch (choose) {case 1:// 1.我要订餐System.out.println("*******我要订餐*******");// 需要找到要插入的位置for (int i = 0; i < names.length; i++) {// 如果找到空的位置则记录下来if (names[i] == null) {isAdd = true;// 记录已找到的一个空位置// 执行插入操作// 显示菜单信息System.out.println("菜单信息:");System.out.println("序号\t菜品名\t价格\t点赞数");for (int j = 0; j < 3; j++) {System.out.println((j + 1) + "\t" + foodNames[j]+ "\t" + prices[j] + "\t" + dianZans[j]);}// 点餐信息System.out.print("请输入您需要点的菜品序号:");int foodSerialNum = sc.nextInt();System.out.print("您点该菜品需要点份数为:");int foodNum = sc.nextInt();String foodInformation = foodNames[foodSerialNum - 1]+ " " + foodNum + "份";// 点餐人姓名System.out.print("请输入订餐人的姓名:");String name = sc.next();// 送餐时间int time = 0;while (true) {System.out.print("请选择配送时间(10~20点间的整数):");time = sc.nextInt();if (time > 20 || time < 10) {System.out.println("请输入10~20点间的整数!");} else {break;}}// 送餐地址System.out.print("请输入送餐地址:");String address = sc.next();// 全部信息输出一遍System.out.println("订单成功");System.out.println("您点的菜品是:" + foodInformation);System.out.println("订餐人姓名为:" + name);System.out.println("送餐时间为:" + time + "点");System.out.println("送餐地址为:" + address);double sumPrice = prices[foodSerialNum - 1] * foodNum;if (sumPrice < 50) {System.out.print("菜品价格为:" + sumPrice + " 配送费:6元"+ " 总金额为:" + (sumPrice + 6) + "元");sumPrice += 6;} else {System.out.print("总金额为:" + (sumPrice) + "元");}// 保存数据names[i] = name;foodInformations[i] = foodInformation;times[i] = time;addresses[i] = address;states[i] = 0;sumPrices[i] = sumPrice;break;}}// 如果没有找到为空的位置,则提示信息if (!isAdd) {System.out.println("对不起,您的餐袋已满!");}break;case 2:// 2.查看餐袋System.out.println("*******查看餐袋*******");System.out.println("序号\t订餐人\t餐品信息\t\t送餐时间\t\t送餐地址\t总金额\t订单状态");for (int j = 0; j < names.length; j++) {String state = states[j] == 0 ? "已预定" : "已完成";if (names[j] != null) {System.out.println((j + 1) + "\t" + names[j] + "\t"+ foodInformations[j] + "\t" + times[j]+ "点\t\t" + addresses[j] + "\t" + sumPrices[j]+ "元\t" + state);}}break;case 3:// 3.签收订单// 订单序号System.out.println("*******签收订单*******");System.out.print("请输入您需要签收的订单:");int orderNum = sc.nextInt();if (states[orderNum - 1] == 0) {states[orderNum - 1] = 1;System.out.println("您已签收成功");} else {System.out.println("该订单已签收");}break;case 4:// 4.删除订单System.out.println("*******删除订单*******");System.out.print("请输入您要删除的订单序号");int dalOrder = sc.nextInt();// 判断该订单是否存在以及状态如何if (names[dalOrder - 1] != null && states[dalOrder - 1] == 1) {System.out.println("删除成功");// 执行删除操作for (int j = dalOrder - 1; j < names.length - 1; j++) {names[j] = names[j + 1];foodInformations[j] = foodInformations[j + 1];times[j] = times[j + 1];addresses[j] = addresses[j + 1];sumPrices[j] = sumPrices[j + 1];states[j] = states[j + 1];}// 当第四行存在时,单独删除第四行,清空最后一行if (names[names.length - 1] != null) {names[names.length - 1] = null;foodInformations[names.length - 1] = null;times[names.length - 1] = 0;addresses[names.length - 1] = null;sumPrices[names.length - 1] = 0.0;}} else if (names[dalOrder - 1] != null&& states[dalOrder - 1] == 0) {System.out.println("该订单还未签收,不能删除");} else {System.out.println("未找到该订单");}break;case 5:// 5.我要点赞System.out.println("*******我要点赞*******");// 输出菜品信息System.out.println("菜单信息:");System.out.println("序号\t菜品名\t价格\t点赞数");for (int j = 0; j < 3; j++) {System.out.println((j + 1) + "\t" + foodNames[j] + "\t"+ prices[j] + "\t" + dianZans[j]);}// 点赞的菜品序号(死循环判断)while (true) {System.out.print("请输入您需要点赞的菜品序号:");int serialNum = sc.nextInt();// 判断序号是否存在if (serialNum < 4 & serialNum > 0) {dianZans[serialNum - 1]++;System.out.println("点赞成功");break;} else {System.out.println("您输入的菜品序号不存在,请重新输入1~3之间的整数");}}break;case 6:// 6.退出系统System.out.println("退出系统");break a;//结束do-while循环default:System.out.println("退出系统");break a;//结束do-while循环}// 输入0返回(输入1~5时有返回)System.out.println();System.out.print("输入0返回菜单:");choose = sc.nextInt();} while (choose == 0);System.out.println("谢谢使用,欢迎下次光临");

Java学习Day019(网上订餐系统)相关推荐

  1. java中ssm付款代码_基于Java+SSM的网上订餐系统、基于JavaWeb的网上订餐系统

    需求分析 基于Java+SSM框架实现一个校园点餐系统,包括用户端和管理员端; 前台主要功能有用户注册, 用户登录, 我的购物车.我的订单.商品评论.校园资讯等; 管理员端主要功能有:用户管理.商品管 ...

  2. 基于Java语言的网上订餐系统(附:源码 课件)

    今天UP主要给大家分享的是java毕业设计项目-网上订餐系统! 本套java项目视频主要针对于应届毕业生,毕业设计而制作,视频围绕毕业设计讲解网上订餐系统的制作全部流程.项目包括网站源码.项目原型.项 ...

  3. JAVA JSP javaweb网上订餐系统餐厅点餐系统源码(ssm点餐系统)网上订餐系统在线订餐

    JSP javaweb网上订餐系统餐厅点餐系统源码(ssm点餐系统)网上订餐系统在线订餐 大家好,很高兴和大家分享Java项目和经验.不管同学们是出于什么需求.都希望各位计算机专业的同学有一个提高. ...

  4. 网上订餐系统java论文_网上订餐系统的毕业设计

    本系统是使用JSP和SQL SERVER数据库为工具开发的,采用B/S结构的管理系统.本系统运行在Tomcat服务器环境下,可以由计算机通过IE浏览器的登陆上该订餐系统进行浏览使用.该订餐系统,包括前 ...

  5. 基于SSM的网上订餐系统-基于Java Web的网上订餐系统

    基于SSM框架实现一个校园点餐系统,包括用户端和管理员端; 前台主要功能有用户注册, 用户登录, 我的购物车.我的订单.商品评论.校园资讯等; 管理员端主要功能有:用户管理.商品管理.订单管理.评论管 ...

  6. 【Java实战项目】两小时教你做出网上订餐系统

    今天主要给大家分享的是java毕业设计项目-网上订餐系统! 本套java项目视频主要针对于应届毕业生,毕业设计而制作,视频围绕毕业设计讲解网上订餐系统的制作全部流程.项目包括网站源码.项目原型.项目文 ...

  7. JAVA JSP 餐厅点餐系统源码(点餐系统)jsp点餐系统网上订餐系统在线订餐系统

    JAVA JSP javaweb餐厅点餐系统源码(点餐系统)jsp点餐系统网上订餐系统在线订餐系统

  8. 计算机毕业设计java+jsp的网上订餐外卖系统

    项目介绍 美食是人类永恒的话题,无论是在古代还是现代人们对美食都有一种非常的热爱在里面,但是随着时代的发展,人们可能没有更多的时间去研究美食,很多时候人们在下班或者放学之后更希望通过网络来进行订餐,为 ...

  9. java毕业设计网上订餐系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计网上订餐系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计网上订餐系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开 ...

最新文章

  1. 美国智库报告:自动驾驶对社会、经济与劳动力的影响
  2. 通过调用API函数实现的无边框窗体的拖拽,比判断坐标更快捷
  3. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
  4. jackson 读取多文件_Spring Boot系列之读取配置
  5. python模块实例化_python中zipfile模块实例化解析
  6. html 图片隐藏 一部分,如何在HTML / CSS中仅显示图像的一部分?
  7. 安卓真机测试遇到的检测不到安卓设备的问题
  8. interface_cast做什么的?
  9. php如何判断是ajax,php如何判断是ajax
  10. torch.nn.Module.buffers(recurse=True)
  11. 那些有趣的网站系列(六)
  12. 《学习Oracle从这里开始》之常用SQL篇
  13. 时尚简约风格的ae字幕条模板
  14. 设置 Linux 别名命令 alias 永久生效的方法
  15. mysql配置及安装
  16. mysql主从数据一致性问题及MHA和MGR的架构及底层原理
  17. 来自国外高级Java架构师的采访总结
  18. 三菱fx2n做从站的modbus通讯_三菱Q系列和FX2N系列进行CCLink通讯(主站和智能设备站的通讯)...
  19. java微博开发_利用java语言在eclipse下实现在新浪微博开发平台发微博(转)
  20. eclipse调试技巧之使用各种视图跟踪数据变化

热门文章

  1. 移动端 html5领奖页面,H5案例|穿上领奖服,见证我的荣耀时刻
  2. 创业实例(从月薪3500到身价700万 我在上海的奋斗)
  3. Non-terminating decimal expansion; no exact representable decimal result. 的恩恩怨怨
  4. 由一幅数据对比图引发的Excel使用
  5. Bugku sql注入
  6. onblur和onclick冲突的解决方法
  7. 数据分析之车险理赔业务
  8. 什么是jsp,对于jsp的详细理解
  9. 异常、File、IO、网络编程、反射
  10. 网易公开课《计算机科学导论》简评