Java——吃货联盟订餐系统(基础知识)
项目需求
(1)现今已经进入网络时代,人们的日常生活已经离不开网络,如网上购物、看新闻、交友等。
(2)“只要点点手指,就能送餐上门”,网上订餐越来越受到都市年轻人的青睐。
(3)现要求开发一个网上订餐系统,需要实现我要订餐、查看餐袋、签收订单、删除订单、我要点赞和退出系统6个功能。
项目环境准备
(1)开发工具:MyEclipse,JDK1.7。
(2)开发语言:Java。
案例覆盖的技能点
(1)理解程序基本概念——程序、变量、数据类型。
(2)会使用顺序、选择、循环、跳转语句编写程序。
(3)会使用数组。
难点分析
1、 使用数组对象保存订单信息
(1)根据本项目的需求分析可知,每条订单的信息都包括订餐人姓名、选择菜品及份数、送餐时间、送餐地址、订单状态、总金额,并且会有多条订单信息,可以使用数组来保存多条相同的信息。
(2)定义6个数组分别保存订单的订餐人姓名、选择的菜品及份数、送餐时间、送餐地址、订单状态、总金额。
(3)各数组中下标相同的元素组成一条订单信息。
该系统最多接收4条订单。
String[] names = new String[4]; //保存订餐人姓名
String[] dishMegs = 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]; //保存订单的总金额
2、访问订单信息
访问各数组中第i+1条订单信息可采用如下方式
订餐人姓名:names[i]
所选菜品信息:dishMegs[i]
送餐时间:times[i]
送餐地址:addresses[i]
订单状态:states[i]
订单的总金额:sumPrices[i]
3、 删除订单信息
(1)若数组中下标为delID的元素需删除,后面的元素则依次前移一位,即后一位的数据覆盖前一位的数据,可采用如下方式实现:
for(int j =delId;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];
sumPrices[j] = sumPrices[j+1];
}
(2)依次实现后,会将最后一个元素置为空。
4、 计算订单的总金额
(1)本项目中在,在接收到订单的菜品编号和份数之后,通过“菜品编号-1”得到该菜品单价的保存位置,再利用“单价*份数”公式计算出预定菜品的总金额。
(2)同时,按“菜品名+份数”格式,使用“+”运算符将菜品名称和预定份数用字符串保存,如“红烧带鱼2份”。
//用户点菜
System.out.println("请选择您要点的菜品编号:");
int chooseDish = input.nextInt();
System.out.println("请选择您需要的份数:");
int number = input.nextInt();
String dishMeg = dishNames[chooseDish-1]+" "+number+"份";
double sumPrice = price[chooseDish-1]*number;
(3)利用if选择结构或三元运算符“?:”判断订单的总金额是否够50元。如果订单总金额够50元,免费送餐5元;否则加收5元送餐费。
//计算送餐费
double deliCharge = (sumPrice>=50)?0:5;
项目实现思路
1、 数据初始化
(1)创建OrderingMgr类,在main()方法中定义6个数组分别存储6类订单信息:
订餐人姓名(names)、选择菜品信息(dishMegs)、送餐时间(times)、送餐地址(addresses)、订单状态(states)、总金额(sumPrices)。
(2)创建3个数组,用来存储3种菜品的名称、单价和点赞数等信息。
//供选择的菜品信息
String[] dishNames = {"红烧带鱼","鱼香肉丝","时令鲜蔬"}; //菜品名称
double[] prices = {38.0,20.0,10.0}; //菜品单价
int[] praiseNums = new int[3]; //点赞数
(3)初始化2条订单信息。
//初始化第一条订单信息
names[0] = "张晴";
dishMegs[0] = "红烧带鱼 2份";
times[0] = 12;
addresses[0] = "天成路207号";
sumPrices[0] = 76.0;
states[0] = 1;
//初始化第二条订单信息
names[1] = "张晴";
dishMegs[1] = "鱼香肉丝 2份";
times[1] = 18;
addresses[1] = "天成路207号";
sumPrices[1] = 45.0;
states[1] = 0;
2、 实现菜单切换
执行程序,输出系统主菜单。用户根据显示的主菜单,输入功能编号实现菜单的显示和菜单的切换,具体要求如下:
(1)当输入1~5时,输出相关的菜单项信息。
(2)显示“输入0返回”。输入0,则返回主菜单,否则,退出系统,终止程序的运行,输出提示信息“谢谢使用,欢迎下次光临!”。
3、 实现查看餐袋
遍历系统中已有的订单,并逐条显示输出,内容包括序号、订餐人姓名、订餐信息(菜品名和份数)、送餐时间、送餐地址、总金额、订单状态(已预订或已完成)。
4、 实现我要订餐
为用户显示系统中提供的菜品信息,获得订餐人信息,形成订单。每条订单包含如下信息。
(1)订餐人姓名:要求用户输入。
(2)选择菜品及份数:显示3个供选择菜品的序号、名称、单价、点赞数,提示用户输入要选择的菜品序号及份数。
(3)送餐时间:当天10:00~20:00间整点送餐,要求用户输入10~20的整数,输入错误,重新输入。
(4)送餐地址:要求用户输入。
(5)状态:订单的当前状态。订单有两种状态,0为已预订状态(默认状态),1为已完成(订单已签收)。
(6)总金额:订单总金额。总金额 = 菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。
各数组中相同下标的数据组成一条订单信息,因此向每个数组相同下标的位置各增加一条数据并保存。
5、 实现签收订单
送餐完成后,要将用户签收订单的状态由“已预订”修改为“已完成”。业务要求如下:
(1)如果订单的当前状态为:“已预订”且数组下标为用户输入的订单序号减1,就签收。
(2)如果订单的当前状态为:“已完成”且数组下标为用户输入的订单序号减1,不可签收。
控制台接收要签收的订单序号。利用for循环结构遍历全部订单,利用if选择结构判断names数组中订餐人姓名是否为null,订单状态是否为已预订且数组下标是指定订单序号减1。
如果条件成立,该订单的状态值修改为1(即已完成)。
6、 实现删除订单
我们可以删除系统中处于“已完成”状态的订单,具体要求如下:
(1)接收要删除的订单序号。
(2)如果指定订单的状态为“已完成”且数组下标值为用户输入的订单序号减1,执行删除操作。
(3)如果指定订单的状态为“已预订”且数组下标值为用户输入的订单序号减1,不能删除。
执行删除操作,其他情况给出相应提示信息。
7、 实现我要点赞
选择执行“我要点赞”菜单项。
(1)界面显示菜品序号、菜品名、单价、点赞数(如为0可不显示),提示用户输入要点赞的菜品序号。
(2)接收要点赞的菜品序号。
(3)praiseNums中对应菜品的点赞数加1。
代码展示
package cn.bdqn.demo1;
import java.util.Scanner;
public class DingCan {
public static void main(String[] args) {
// 吃货联盟订餐系统
Scanner input = new Scanner(System.in);
// 订餐系统相关信息
String[] names = new String[4]; // 保存订餐人姓名
String[] dishMegs = 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]; // 保存订单的总金额
// 供选择的菜品信息
String[] dishNames = { "红烧带鱼", "鱼香肉丝", "时令鲜蔬" }; // 菜品名称
double[] prices = { 38.0, 20.0, 10.0 }; // 菜品单价
int[] praiseNums = new int[3]; // 点赞数
// 初始化第一条订单信息
names[0] = "张晴";
dishMegs[0] = "红烧带鱼 2份";
times[0] = 12;
addresses[0] = "天成路207号";
sumPrices[0] = 76.0;
states[0] = 1;
// 初始化第二条订单信息
names[1] = "张晴";
dishMegs[1] = "鱼香肉丝 2份";
times[1] = 18;
addresses[1] = "天成路207号";
sumPrices[1] = 45.0;
states[1] = 0;
// 默认初始值
boolean flag = true;
// 循环初始值
int num = -1;
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.println("请选择:");
int choose = input.nextInt();
switch (choose) {
case 1:
// 我要订餐
// 判断数组中哪个位置为空,从此处开始插入数据,若没有位置为空,则提示“餐袋已满”
int numNull = 0;
for (int i = 0; i < names.length; i++) {
if (names[i] == null) {
System.out.println("--新增订单--");
// (1)订餐人姓名
System.out.println("请输入订餐人姓名:");
names[i] = input.next();
// (2)选择菜品及份数
System.out.println("序号\t名称\t\t单价\t点赞数");
for (int j = 0; j < dishNames.length; j++) {
System.out.println((j + 1) + "\t" + dishNames[j]+ "\t\t" + prices[j] + "\t"+ praiseNums[j]);
}
System.out.println("请选择菜品序号:");
int caiNum = input.nextInt();
System.out.println("选择份数:");
int fenNum = input.nextInt();
dishMegs[i] = dishNames[caiNum - 1] + " " + fenNum
+ "份";
// (3)送餐时间
System.out.println("请选择送餐时间(10:00-20:00整点送餐):");
int time0 = input.nextInt();
while (time0 < 10 || time0 > 20) {
System.out.println("输入错误,请重新输入:");
time0 = input.nextInt();
}
times[i] = time0;
// (4)送餐地址
System.out.println("请输入送餐地址:");
addresses[i] = input.next();
// (5)状态(新增时,订单状态均为默认状态0)
states[i] = 0;
// (6)总金额 =
// 菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。
double caiPrices = prices[caiNum - 1] * fenNum;
if (caiPrices >= 50) {
sumPrices[i] = caiPrices;
} else {
sumPrices[i] = caiPrices + 5;
}
break;
} else {
numNull = i;
}
}
if (numNull == names.length - 1) {
System.out.println("餐袋已满,请及时处理。");
}
break;
case 2:
// 查看餐袋
System.out.println("--查看餐袋--");
System.out
.println("序号\t\t订餐人\t\t餐品信息\t\t\t送餐时间\t\t送餐地址\t\t\t总金额\t\t订单状态");
for (int i = 0; i < names.length; i++) {
if (names[i] != null) {
String time = times[i] + "点";
String sumPrice = sumPrices[i] + "元";
String state;
if (states[i] == 0) {
state = "已预订";
} else {
state = "已完成";
}
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);
}
}
break;
case 3:
// 签收订单
System.out.println("--签收订单--");
System.out.println("请选择需要签收的订单序号:");
int orderNum = input.nextInt();
for (int i = 0; i < names.length; i++) {
if (orderNum == i + 1) {
if (names[i] != null) {
if (states[i] == 0) {
states[i]=1;
System.out.println("订单签收完成!");
} else {
System.out.println("你选择的订单已完成,不能再次签收订单!");
}
}
}
}
break;
case 4:
// 删除订单
System.out.println("--删除订单--");
System.out.println("请选择需要删除的订单序号:");
int orderNum1 = input.nextInt();
for (int i = 0; i < names.length; i++) {
if (orderNum1 == i + 1) {
if (names[i] != null) {
if (states[i] == 0) {
System.out.println("该订单仍在预定状态,不能删除!");
} else {
names[i]=null;
System.out.println("订单删除成功!");
}
}
}
if(names[i]==null){
for (int j = i; 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];
sumPrices[j] = sumPrices[j + 1];
states[j] = states[j + 1];
}
}
}
break;
case 5:
// 我要点赞
System.out.println("--我要点赞--");
System.out.println("序号\t名称\t\t单价\t点赞数");
for (int j = 0; j < dishNames.length; j++) {
System.out.println((j + 1) + "\t" + dishNames[j]+ "\t\t" + prices[j] + "\t"+ praiseNums[j]);
}
System.out.println("请选择点赞的菜品序号:");
int caiZanNum = input.nextInt();
for (int j = 0; j < dishNames.length; j++) {
if(caiZanNum==j+1){
praiseNums[j]+=1;
}
}
System.out.println("点赞后的菜品展示:");
System.out.println("序号\t名称\t\t单价\t点赞数");
for (int j = 0; j < dishNames.length; j++) {
System.out.println((j + 1) + "\t" + dishNames[j]+ "\t\t" + prices[j] + "\t"+ praiseNums[j]);
}
break;
case 6:
// 退出系统
flag=false;
break;
default:
flag = false;
break;
}
if (flag) {
System.out.println("输入0返回:");
num = input.nextInt();
} else {
break;
}
} while (num == 0);
System.out.println("谢谢使用,欢迎下次光临");
}
}
Java——吃货联盟订餐系统(基础知识)相关推荐
- 10、Java——吃货联盟订餐系统(基础知识)
目录 项目需求 项目环境准备 案例覆盖的技能点 难点分析 1. 使用数组对象保存订单信息 2.访问订单信息 3. 删除订单信息 4. 计算订单的总金额 项目实现思路 1. 数据初始化 2. 实现菜单切 ...
- Java吃货联盟订餐系统1.3-面向对象+I/O流
吃货联盟订餐系统 author:luckyboy! version:1.3 知识储备:变量.数据类型.选择结构.循环结构.数组.面向对象.集合和I/O流 吃货联盟订餐系统概述 现在的互联网时代,足不出 ...
- Java吃货联盟订餐系统
OrderingUtil类 import java.util.Scanner;public class OrderingUtil {Scanner input = new Scanner(System ...
- 29、Java——吃货联盟订餐系统(对象+XML)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- 11、Java——吃货联盟订餐系统(对象+数组)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- 37、Java——吃货联盟订餐系统(JDBC+MySQL+Apache DBUtils)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- Java基础 吃货联盟订餐系统
Java基础 吃货联盟订餐系统 需求分析 系统概述 搭建框架 编写功能 项目总结 需求分析 系统概述 "只要动动手指,就能送餐上门",网上订餐深受现代人青睐,现开发一个网上订餐系统 ...
- Java基础之吃货联盟订餐系统Version1.0
注意:此项目为刚学完Java基础至数组的入门程序. 吃货联盟订餐系统Version1.0是在数组的基础上完成的一个小项目,由于只是运用数组实现了一些简单的功能, 所以我管它叫Version1.0,即1 ...
- Java基础——吃货联盟订餐系统
吃货联盟订餐系统 刚刚学完java基础入门,主要学习Java基本环境搭建,定义变量.选择结构,循环结构.数组等.本阶段结束尝试接触此次吃货联盟订餐系统,第一次敲这么长的代码,后面多见识见识应该就好了, ...
最新文章
- C语言 string.h 中函数的实现
- 2运行内存多大_电脑笔记本满血复活之内存升级篇
- 14行代码AC_SCU 4440 Rectangle(公式+矩阵对称性)
- 深入剖析阿里云推荐引擎——新架构,新体验
- 1. 栈和队列的数组实现
- web前端到底是什么?有前途吗
- Spring学习笔记之AOP配置篇(一) 注解配置
- ListView的getFirstVisiblePosition等方法返回的是哪个对象
- 遇冷的斗鱼直播,还“斗”得动吗?| 畅言
- 指针以及二重指针的理解
- SLAM会议笔记(五)LLOAM
- About_php_封装函数
- 数据库实时同步技术解决方案
- 3步快速彻底卸载MySQL
- java jvm dump文件_各种获取JVM DUMP的方法
- 向日葵android客户端,向日葵安卓3.1客户端教程
- Python3 猴子第一天摘下若干个桃子,当即吃了一半..
- 图表可视化配色学习——自动提取图片主色调与配色方案(python、pillow、haishoku和seaborn),并生成十六进制颜色编码
- 如何提高数据处理中的准确性
- android中数据库sql语句删除指定日期或之前之后的数据
热门文章
- Derek Sivers:记日记和专题记录的收获(译)
- C语言的FILE类型使用
- 简单记录下电脑Ubuntu系统卡死后无法正常开机的解救方式
- 计算机论文致谢词范文500字,专科论文致谢词范文500字(通用8篇)
- (转)去掉office2003盗版五角星的办法
- C语言两个按键分别控制两个灯,用C语言模拟楼道灯开关控制程序,两个开关都能控制灯的亮灭...
- 戴尔g3数字键盘失灵的情况解决
- 老年人全身皮肤瘙痒案
- 昨夜一梦,梦醒我的青春
- 计算机论文期刊文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些...