2017年3月15号课堂笔记

2017年3月15号 晴 空气质量:中度污染

主要内容:

第一部分项目:吃货联盟讲解

一、吃货联盟项目

1、老师代码:

public class OrderMsg {

public static void main(String[] args) throws Exception {
/**
* 订餐人姓名、选择菜品、送餐时间、送餐地址、订单状态、总金额
* 01.创建对应的数组
* 02.数组的初始化
* 03.显示菜单
* 04.根据用户的选择进去指定的模块
*/
String[] names = new String[6]; // 订餐人姓名
String[] dishMsgs = new String[6];// 选择菜品
int[] numbers = new int[6];// 菜品份数
Date[] dates = new Date[6]; // 送餐时间
String[] times = new String[6]; // 送餐时间对应的String类型的日期
String[] addresses = new String[6];// 送餐地址
int[] states = new int[6];// 订单状态 0:已经预定 1:已经完成
double[] sumPrices = new double[6];// 总金额

// 初始化数据
names[0] = "小黑";
dishMsgs[0] = "八仙过海";
numbers[0] = 3;
dates[0] = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
times[0] = sdf.format(dates[0]);
addresses[0] = "天堂路1号院";
states[0] = 1;
sumPrices[0] = 5000;

names[1] = "小白";
dishMsgs[1] = "佛跳墙";
numbers[1] = 5;
dates[1] = new Date();
times[1] = sdf.format(dates[1]);
addresses[1] = "地域路2号院";
states[1] = 1;
sumPrices[1] = 500;

// 初始化用户可以选择的菜
String[] dishNames = { "八仙过海", "佛跳墙", "松鼠鱼", "红烧带鱼", "时令蔬菜", "辣土豆丝" };
// 定义每个菜的单价
double[] prices = { 88, 78.8, 58.0, 28.5, 50, 80 };
// 定义点赞 的数组
int[] praiseNums = new int[6];
praiseNums[0] = 5;
praiseNums[1] = 10;

System.out.println("***********欢迎进入《吃货联盟》点餐系统***********");
Scanner scanner = new Scanner(System.in);
int num = -1; // 如果用户输入的是0 默认返回主菜单
boolean isExit = false;// 定义一个标记 来标识 用户是否退出系统 true:退出
do {
// 显示菜单供用户选择
System.out.println("当前系统时间是:" + sdf.format(new Date()));
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 = scanner.nextInt(); // 根据用户的选择执行不同的功能
switch (choose) {
case 1:
System.out.println("************我要订餐************");
// 定义一个标记判断餐带是否已满
boolean addFlag = false;
for (int i = 0; i < names.length; i++) { // 订餐人的集合
if (names[i] == null) {
addFlag = true;
System.out.println("请输入订餐人的姓名:");
names[i] = scanner.next(); // 获取订餐人的姓名
System.out.println("您可以选择下列的菜品:");
System.out.println("序号 菜名 单价 点赞数");
for (int j = 0; j < dishNames.length; j++) { // 遍历菜品
String praiseNum = (praiseNums[j] > 0) ? praiseNums[j]
+ "个赞"
: "";
System.out.println(j + 1 + " " + dishNames[j]
+ " " + prices[j] + " "
+ praiseNum);
}
// 用户开始点菜
System.out.println("请您选择菜品的编号:");
int chooseDishName = scanner.nextInt();
System.out.println("请您输入点餐的份数:");
int number = scanner.nextInt();
System.out.println("请您输入送餐的地址:");
String address = scanner.next();
System.out.println("请您输入送餐的时间:(时:分:秒)");
String time = scanner.next();

/**
* 根据用户的餐费 判断是否收取送餐费 大于60免送餐费
* 01.获取用户点的菜的单价
* 02.获取总金额
* 03.判断
*/
double sumPrice = prices[chooseDishName - 1] * number;
double price = (sumPrice > 60) ? 0 : 6;
System.out.println("恭喜您订餐成功!");
System.out.println("您定的菜品是:"
+ dishNames[chooseDishName - 1] + " " + number
+ "份");
System.out.print("餐费:" + sumPrice);
System.out.print(" 送餐费:" + price);
System.out.println(" 总费用:" + (price + sumPrice));
// 向数组中增加数据
times[i] = sdf.format(sdf.parse(time)); // 时间
addresses[i] = address; // 地址
sumPrices[i] = (sumPrice + price); // 总金额
dishMsgs[i] = dishNames[chooseDishName - 1]; // 定的菜品
states[i] = 0; // 订餐的状态
numbers[i] = number; // 份数
break;
}
}
if (!addFlag) {// 餐袋已经满了
System.out.println("餐袋已经满了");
}
break;
case 2:
System.out.println("************查看餐袋************");
/**
* 显示
* 编号 订餐人 菜品(份数) 送餐时间 送餐地址 总金额 状态
*/
System.out
.println("编号 订餐人 菜品(份数) 送餐时间 送餐地址 总金额 状态 点赞数量");
for (int i = 0; i < names.length; i++) {
if (names[i] != null) { // 有人订餐 的显示
String state = (states[i] == 0) ? "已经预定" : "已经完成"; // 获取状态
String time = times[i]; // 获取时间
String sumPrice = sumPrices[i] + "元"; // 总金额
String address = addresses[i]; // 地址
String dishMsg = dishMsgs[i]; // 菜品
int count = numbers[i];
System.out.println(i + 1 + " " + names[i] + " "
+ dishMsg + "(" + count + ")" + " " + time
+ " " + address + " " + sumPrice
+ " " + state + " " + praiseNums[i]);
}
}
break;
case 3:
System.out.println("************签收订单************");
/**
* 01.状态为已经完成!不需要签收
* 02.状态为已经预定!需要签收
* 03.没有指定的订单,不能签收
*/
System.out.println("请您输入需要签收的订单编号:");
int sign = scanner.nextInt();
// 定义一个标记 来判断订单是否被签收
int flag = 0;
for (int i = 0; i < names.length; i++) {
if (names[i] != null && states[i] == 0) {// 01.有订单 可以签收
states[i] = 1;// 改变状态
flag = 1;
break; // 必须退出 否则 后续的都会变成签收
} else if (names[i] != null && states[i] == 1) {// 02.有订单
flag = 2;
}
}
if (flag == 1) {
System.out.println("订单已经签收!");
} else if (flag == 2) {
System.out.println("订单不需要重复签收!");
} else {
System.out.println("没有指定的订单!请您核实!");
}

break;
case 4:
System.out.println("************删除订单************");
System.out.println("请您输入需要删除的订单编号:");
int delNum = scanner.nextInt();
// 定义一个标记 来判断订单是否被签收以及是否存在
int delFlag = 0;
for (int i = 0; i < names.length; i++) {
if (names[i] != null && states[delNum - 1] == 1) { // 可以删除
// 有指定的订单
// 状态是已经完成
// 删除位置 之后的所有元素 依次前移
for (int j = delNum - 1; j < names.length - 1; j++) {
names[j] = names[j + 1]; // 订餐人
dishMsgs[j] = dishMsgs[j + 1];// 菜品
times[j] = times[j + 1];// 时间
addresses[j] = addresses[j + 1];// 地址
states[j] = states[j + 1];// 状态
numbers[j] = numbers[j + 1];// 份数
}
delFlag = 1;
break;
} else if (names[i] != null && states[i] == 0) { // 订单还没有签收
delFlag = 2;
}
}
if (delFlag == 1) {
System.out.println("订单已经被删除");
} else if (delFlag == 2) {
System.out.println("订单还没有签收 不允许删除!");
} else {
System.out.println("没有找到指定的订单!");
}
break;
case 5:
System.out.println("************我要点赞***************");
System.out.println("编号 菜名 价格");
for (int i = 0; i < dishNames.length; i++) { // 遍历所有的菜名
String price = prices[i] + "元"; // 获取价格
String name = dishNames[i];
System.out.println(i + 1 + " " + name + " "
+ price);
}
System.out.println("请您输入点赞的菜品编号:");
int chooseNum = scanner.nextInt();
praiseNums[chooseNum - 1]++;// 点赞数加+1
System.out.println("谢谢参与!点赞成功!");
break;
case 6:
// 退出系统
isExit = true;
break;
default:
// 退出系统
isExit = true;
break;
}
if (!isExit) { // 默认这是不退出
System.out.println("输入0返回主菜单!");
num = scanner.nextInt();
} else {
break; // 退出系统
}

} while (num == 0);
System.out.println("谢谢您的光临!!!!!");
}
}

2、自己代码:

package cn.bdqn.test;

import java.util.Scanner;

/**
*
*<P>Title<P>FoodieUnion
*<P>Description<P>
*我要订餐
*查看餐袋
*签收订单
*删除订单
*我要点赞
*退出系统
*
*需要的数据:
*菜品名称
*单价
*点赞数
*订餐人
*订餐份数
*订餐时间
*送餐地址
*状态
*价格
*
* @author alex
* @date 2017-3-13上午11:56:13
* You can either travel or read,but either your body or soul must be on the way
*/
public class FoodieUnionFirstVision {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
/*
* 备用菜品: 佛跳墙 ; 回锅肉,麻婆豆腐; 葱烧海参,油焖大虾 ; 清炖蟹粉狮子头,大煮干丝; 豉汁蒸排骨,菠萝咕噜肉;
*/
// 菜品名称
String[] dishNames = new String[5];
// 单价
double[] prices = new double[5];
// 点赞数
int[] praises = new int[5];
// 订餐人姓名
String[] foodieNames = new String[5];
// 预定菜品名称
String[] bookingNames = new String[5];
// 订餐份数
int[] numbers = new int[5];
// 订餐时间(时间格式后期加)
int[] times = new int[5];
// 送餐地址
String[] addresses = new String[5];
// 送餐状态:0为预定,1为完成配送
int[] states = new int[5];
// 订单餐费=菜品价格*订餐份数
double pays[] = new double[5];
// 送餐费用(订单总价小于100元,另外收取送餐费6元)
double deliverPays[] = new double[5];
// 订单总价:订单总价=菜品价格*订餐份数+送餐费用
double[] totals = new double[5];

// 标记是否退出菜单:true为想退出,false不退出;
boolean flag = false;
// 标记用户是否再次进入吃货联盟主菜单进行操作:Y为进入;N为不进入;(不区分大小写IgnoreCase)
String result = "N";
// 标记要加入订餐信息的位置
int index = -1;

// 初始化3个菜品信息:菜品名称 单价 点赞数
dishNames[0] = "佛跳墙";
dishNames[1] = "回锅肉";
dishNames[2] = "大煮干丝";
dishNames[3] = "油焖大虾";
dishNames[4] = "菠萝咕噜肉";
prices[0] = 658;
prices[1] = 58;
prices[2] = 39;
prices[3] = 98;
prices[4] = 66;
praises[0] = 27;
praises[1] = 165;
praises[2] = 93;
praises[3] = 50;
praises[4] = 34;
// 初始化2条订单信息:订餐人;所订餐及份数;送餐时间;送餐地址;状态;价格
foodieNames[0] = "土豪";
foodieNames[1] = "老百姓";
bookingNames[0] = "佛跳墙";
bookingNames[1] = "回锅肉";
numbers[0] = 10;
numbers[1] = 1;
times[0] = 15;
times[1] = 13;
addresses[0] = "北京市朝阳区紫玉东路1号";
addresses[1] = "北京市海淀区北大青鸟五道口校区";
states[0] = 0;
states[1] = 1;
totals[0] = 6580;
totals[1] = 68;
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("请选择相应的操作:");
int choose = input.nextInt();
switch (choose) {
case 1:
// 我要订餐:(订餐人;所订餐及份数;送餐时间;送餐地址;状态;价格)
System.out.println("****************我要订餐******************");
// 1)加入订餐人姓名
System.out.println("请您输入订餐人的姓名:");
String foodieName = input.next();
boolean flag1 = false;// 标识能否加入订餐人姓名 false:不能加入,true:能加入
for (int i = 0; i < foodieNames.length; i++) {
if (foodieNames[i] == null) {
foodieNames[i] = foodieName;
index = i;// 标记位置
flag1 = true;
break;
}
}
if (flag1) {
foodieNames[index] = foodieName;// 给标记处赋值订餐人姓名
} else {
System.out.println("很遗憾!今日吃货订餐额度已满,欢迎您明天再来!");
break;
}
// 2)输出初始化3个菜品信息:序号 菜品名称 单价 点赞数
System.out.println("序号 菜品名称 单价 点赞数");
for (int i = 0; i <= 2; i++) {
System.out.print((i + 1) + " " + dishNames[i] + " "
+ prices[i] + " " + praises[i] + " ");
}

// 3)加入预定菜品的名字
System.out.println("请您输入想要预定菜品的编号:");
int num = input.nextInt();// 用变量num接收预定菜品编号
if (num < 1 || num > 3) {
System.out.println("您的输入超出规定范围(1~3),请重新输入预定菜品编号:");
num = input.nextInt();
} else {
bookingNames[index] = dishNames[(num - 1)];// 给标记处赋值预定菜品名称
}

// 4)订餐份数(每人最多预定10份)
System.out.println("请您输入想要预定菜品的份数:");
int number = input.nextInt();
if (number < 1 || number > 10) {// 判断(1~10)
System.out.println("输入次数超出规定范围(1~10份),请重新输入预定菜品份数:");
number = input.nextInt();
} else {
numbers[index] = number;// 给标记处赋值订餐份数
}
// 5)预约送餐时间
System.out.println("请您输入预约送餐的时间(格式为小时(24小时制,10点到21点之间)):例如15:");// 改时间格式,以后再完善
int time = input.nextInt();
// 判断小时(10~21)
while (time < 10 || time > 21) {
System.out.println("输入时间超出规定范围(10点到21点之间),请重新输入预定菜品份数:");
time = input.nextInt();
}
times[index] = time;

// 6)送餐地址
System.out.println("请您输入送餐地址:");
String address = input.next();
addresses[index] = address;// 给标记处赋值送餐地址
// 7)订单状态:送餐状态:0为预定,1为完成配送
states[index] = 0;// 给标记处赋值订单状态(默认为预定状态)
// 8)计算订单总价:订单总价=菜品价格*订餐份数+送餐费用(订单总价小于100元,另外收取送餐费6元)
pays[index] = prices[(num - 1)] * numbers[index];
if (pays[index] < 100) {// 订单总价小于100元,另外收取送餐费6元
deliverPays[index] = 6;
} else {
deliverPays[index] = 0;
}
totals[index] = pays[index] + deliverPays[index];
// 统一输出信息
System.out.println("订餐成功!");
System.out.println("您预定的是:" + bookingNames[index]
+ numbers[index] + "份");
System.out.println("送餐时间:" + times[index] + "点");
System.out.println("送餐地址:" + addresses[index]);
System.out.println("餐费:" + pays[index] + "元,送餐费:"
+ deliverPays[index] + "元,总计:" + totals[index] + "元");
break;
case 2:
// 查看餐袋(订餐人 预定菜品 订餐份数 送餐时间 送餐地址 订单状态 订单总价)

System.out.println("****************查看餐袋****************");
System.out
.println("序号 订餐人 预订菜品 订餐份数 送餐时间 送餐地址 订单状态 订单总价");
for (int i = 0; i < foodieNames.length; i++) {
if (foodieNames[i] != null) {
index = i;// 是否需要重新定义一个变量??
String state = (states[index] == 0) ? "已预订" : "已签收";

System.out.println((index + 1)
+ " "// 序号为index+1
+ foodieNames[index] + " "
+ bookingNames[index] + " " + numbers[index]
+ "份 " + times[index] + "点 "
+ addresses[index] + " " + state + " "
+ totals[index] + "元");
}
}
break;
case 3:
// 签收订单:送餐后,将用户签收订单状态修改为“已完成”

System.out.println("****************签收订单*****************");
System.out.println("请选择要签收的订单序号:");
int want = input.nextInt();// 接收用户输入的订单序号,index=want-1
for (int i = 0; i < foodieNames.length; i++) {
if (foodieNames[(want - 1)] == null) {// 判断结果:找不到订单
System.out.println("对不起,没有您输入的订单信息,无法签收!");
break;
} else if (foodieNames[(want - 1)]// 判断结果:订单已签收
.equalsIgnoreCase(foodieNames[i]) && states[i] == 1) {
System.out.println("对不起,该订单已完成签收,无需再次签收!");
break;
} else if (foodieNames[(want - 1)]// 判断结果:订单未签收
.equalsIgnoreCase(foodieNames[i]) && states[i] == 0) {
states[i] = 1;
System.out.println("您已成功签收" + want + "号订单,谢谢合作!");
}
}
break;
case 4:
// 删除订单:
System.out.println("****************删除订单*****************");
System.out.println("请选择要删除的订单序号:");
int delete = input.nextInt();
// 定义一个标记,来判断订单是否被签收以及是否存在
int deleteFlag = -1;
for (int i = 0; i < foodieNames.length;) {
if (foodieNames[delete - 1] != null
&& states[delete - 1] == 1) {// 有订单,可以删除
for (int j = delete - 1; j < foodieNames.length - 1; j++) {// 下标为delete-1
// 从删除数据位置+1开始,所有元素整体前移
foodieNames[j] = foodieNames[j + 1];
bookingNames[j] = bookingNames[j + 1];
numbers[j] = numbers[j + 1];
times[j] = times[j + 1];
addresses[j] = addresses[j + 1];
states[j] = states[j + 1];
totals[j] = totals[j + 1];
}
// 把最后一个位置赋值为空
foodieNames[foodieNames.length - 1] = null;
bookingNames[foodieNames.length - 1] = null;
numbers[foodieNames.length - 1] = 0;
times[foodieNames.length - 1] = 0;
addresses[foodieNames.length - 1] = null;
states[foodieNames.length - 1] = -1;
totals[foodieNames.length - 1] = 0;
deleteFlag = 1;
} else if (foodieNames[delete - 1] != null
&& states[delete - 1] == 0) {// 有订单,未签收不能删除
deleteFlag = 2;
}
if (deleteFlag == 1) {
System.out.println("删除订单成功!");
break;
} else if (deleteFlag == 2) {
System.out.println("对不起,该订单尚未完成签收,无法删除!");
break;
} else {// 没有订单
System.out.println("对不起,没有您输入的订单信息,无法删除!");
break;
}
}
break;
case 5:
// 我要点赞
System.out.println("****************我要点赞*****************");
System.out.println("序号 菜品名称 单价 点赞数");
for (int i = 0; i < dishNames.length; i++) {// 遍历所有菜名
System.out.println(i + 1 + " " + dishNames[i] + " "
+ prices[i] + "元 " + praises[i]);
}
System.out.println("请选择您要点赞的菜品序号:");
int like = input.nextInt();
for (int i = 0; i < dishNames.length; i++) {
if (dishNames[like - 1] == null) {
System.out.println("对不起,没有您输入的菜品序号,无法点赞");
} else if (dishNames[like - 1].equals(dishNames[i])) {
praises[like - 1]++;
System.out.println("点赞成功,感谢您对吃货联盟的肯定和支持!");
}
}
break;
case 6:
// 退出系统
flag = true;
System.out.println("您已退出吃货联盟系统!");
break;
default:
// 输入了要求以外的数字,我们默认也是退出
System.out.println("输入有误,您已退出吃货联盟系统!");
flag = true;
break;
}
if (flag) {
// 不再进入吃货联盟,跳出
break;
} else {
System.out.println("***************************************");
System.out.println("是否返回吃货联盟主菜单继续操作?(Y/N):");// 判断是否继续进入吃货联盟操作
result = input.next();
}
} while (result.equalsIgnoreCase("y")); // 继续进入吃货联盟操作
System.out.println("谢谢您使用吃货联盟订餐,欢迎下次惠顾!");
}
}

// 用菜名去查找
// boolean flag2 = false;// 标识能否找到预定菜品的名字false:不能找到,true:能找到
// for (int i = 0; i < dishNames.length; i++) {
// if (dishNames[i] == bookingName) {
// flag2 = true;
// break;
// }
// }
// if (flag2) {// 找到的话,给标记位置的预定菜品名字赋值
// bookingNames[index] = bookingName;
// } else {// 找不到,给客户提示
// System.out.println("抱歉!您想要预定的菜品不在本系统菜单中!");
// break;
// }

二、作业

1、三大特性纸版笔记:记录一下三大特性的重要概念,周五交老师。记考勤。

2、做题

3、视频看完多态

三、考试

2017.03.15
15:03 开始,15:34结束;答题时间:31 分钟;检查时间:2 分钟;
成绩:88 分
有几道题是答完后面的答案又去前面验证了题目。类和对象开始有一定难度,要用心去学!

四、视频多看,还有一个月大数据开班,努力赶一下进度!

五、老师辛苦了!

原文地址:https://www.cnblogs.com/wsnedved2017/p/6554265.html