Java第5,6及期中PTA作业总结
前言:
Java是一门非常重要的计算机语言,也是非常广泛使用的编程语言之一。学习Java对我的职业发展和技术能力提升都有着很大的帮助。在我学习Java的过程中,我积累了一些心得体会,这些经验对我学习Java产生了很大的影响。
首先,我需要不断地练习。练习是我学好Java的关键。在本次的习题集里,我同样认识到了许多只有通过练习才能够学习到的知识。
其次,我需要找到适合自己的学习方法。每个人的学习方法都不同,所以我需要找到适合自己的学习方式。我采用的是多种学习方式结合起来的方式,包括看书、刷题、写代码等等。不同的方法可以让我更全面地理解Java 的知识,并提高我的编程技能。
另外,我还需要不断地更新自己的知识。Java 是一门发展迅速的编程语言,新的版本和技术层出不穷。因此,在我学习Java的过程中,我需要保持持续学习的态度,跟上最新的发展。我会定期了解最新版的 Java 语言规范,并研究一些新的开源工具、框架以及库等等。
最后,我也需要不断去拓宽自己的视野。学习Java只是我的个人能力提升之一,我需要关注整个行业的发展趋势,了解各种技术、创新和尝试,掌握一些与 Java 并行关联的高端知识和前沿技术。这将协助我更好地为未来的职业生涯做准备并不断提升自己的价值。
总而言之,学习Java需要不断的练习,找到适合自己的学习方法,更新自己的知识和拓宽自己的视野,这些都是非常重要的。只有在不断锤炼中,才能紧跟着行业最新发展潮流,提高自己的竞争力,同时为行业的进步和发展贡献出自己的力量。
目录:
一:三次作业遇到的BUG(踩坑警告)
二:代码思路与解决方法
三:作业总结与代码改进
四:一些感想
一:三次作业遇到的BUG(踩坑警告)
1:OOP训练集5
- 菜单计价程序-4
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;
import java.text.ParseException;
import static java.lang.Math.max;
public class Main{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String getStr;
String[] str = new String[0];
Menu[] menu = new Menu[100];
int menuNumber = 0; //菜单数量
/*菜单模块*/
while(input.hasNext()){
getStr = input.nextLine();
str = getStr.split(" ");
/*输入end*/
if(getStr.equals("end")) break;
/*输入table进入到下一模块*/
if(str[0].equals("table")) break;
if(str.length==2||str.length==3) {
/*字符串为数字且首位不为0*/
if (str[1].matches("[0-9]{1,3}") && !str[1].startsWith("0")) {
if (Integer.parseInt(str[1]) > 0 && Integer.parseInt(str[1]) < 300) {
menu[menuNumber] = new Menu(str[0], Integer.parseInt(str[1]));
} else { //超出规定菜价
menu[menuNumber] = new Menu();
menu[menuNumber].isTruePrice = false;
System.out.println(str[0] + " price out of range " + str[1]);
}/*存在三个字符串,即特色菜*/
if (str.length == 3) {
if (str[2].equals("T"))
menu[menuNumber].isSpecial = true;
}
}
/*格式错误*/
else {
menu[menuNumber] = new Menu();
menu[menuNumber].isFormat = false;
System.out.println("wrong format");
}
menuNumber++;
}else{
System.out.println("wrong format");
}
}
/*第一张餐桌*/
Table[] table = new Table[100];
int tableNumber = 0;
/*有四个字符串*/
if(str.length==4){
if(judgeTableNumber(str[1])&&judgeDate(str[2])&&judgeTime(str[3])){
table[tableNumber] = new Table(Integer.parseInt(str[1]),str[2],str[3]);
if(!table[tableNumber].validTime(str[2])){
System.out.println("not a valid time period");
table[tableNumber].isFormat = false;
}
if(!table[tableNumber].dateError(str[2])){
System.out.println(str[1]+" date error");
table[tableNumber].isFormat = false;
}
if(table[tableNumber].getDiscount()==0&&table[tableNumber].isFormat) {
System.out.print("table "+table[tableNumber].getCount());
System.out.println(" out of opening hours");
table[tableNumber].isFormat = false;
}
if(table[tableNumber].isFormat)
System.out.println("table " + str[1] + ": "); //输出桌号
}else{ //格式错误
System.out.println("wrong format");
table[tableNumber] = new Table();
table[tableNumber].isFormat = false;
}
}else{
System.out.println("wrong format");
table[tableNumber] = new Table();
table[tableNumber].isFormat = false;
}
/*进入最傻逼的部分*/
Order[][] order = new Order[100][100];
int orderNUmber = 0; //订单数目
int deleteNumber; //删除编号
int orderCount = 0;
boolean countError = false;
while(input.hasNext()){
getStr = input.nextLine();
str = getStr.split(" ");
if(getStr.equals("end"))
{
for(int i=0;i<=tableNumber;i++){
for(int j=0;j<orderNUmber;j++) {
if(table[i].isFormat){
table[i].setOriginal(order[i][j].getEveryPrice());
if(order[i][j].isSpecial){
if(table[i].haveDiscount)
table[i].setBargain(Math.round(order[i][j].getEveryPrice()*0.7));
else
table[i].setBargain(order[i][j].getEveryPrice());
}else{
table[i].setBargain(Math.round(order[i][j].getEveryPrice()*table[i].getDiscount()));
}
}
}
if(table[i].isFormat){
System.out.print("table "+table[i].getCount());
System.out.print(": ");
System.out.printf("%.0f ",table[i].getOriginal());
System.out.println(Math.round(table[i].getBargain()));
}
}
break;
}
if(str.length==2)
{
if(str[1].equals("delete")&&str[0].matches("[0-9]{1,2}")){
deleteNumber = Integer.parseInt(str[0]);
if(deleteNumber>orderNUmber){
System.out.println("delete error");
}else {
if(order[tableNumber][deleteNumber-1].isDelete){
System.out.println("deduplication "+deleteNumber);
}
order[tableNumber][deleteNumber-1].isDelete = true;
}
}else if(str[1].matches("[0-9]{1,2}")){
if(table[tableNumber].isFormat){
System.out.println("invalid dish");
}
}
} else if (str.length == 3) {
if(str[1].matches("[0-9]{1,2}")&&str[2].equals("T")){
if(table[tableNumber].isFormat){
System.out.println("invalid dish");
}
}
} else if (str.length == 4)
{
if (str[0].equals("table")) {
tableNumber++;
orderNUmber = 0;
orderCount = 0;
if (judgeTableNumber(str[1]) && judgeDate(str[2]) && judgeTime(str[3])) {
table[tableNumber] = new Table(Integer.parseInt(str[1]), str[2], str[3]);
if(!table[tableNumber].validTime(str[2])){
System.out.println("not a valid time period");
table[tableNumber].isFormat = false;
}
if(table[tableNumber].getDiscount()==0) {
System.out.print("table "+table[tableNumber].getCount());
System.out.println(" out of opening hours");
table[tableNumber].isFormat = false;
}
else System.out.println("table " + str[1] + ": "); //输出桌号
} else {
System.out.println("wrong format");
table[tableNumber] = new Table();
table[tableNumber].isFormat = false;
}
} else if (str[0].matches("[0-9]{1,2}") && str[2].matches("[0-9]{1,2}")) {
if (Integer.parseInt(str[0]) <= orderCount) {
countError = true;
if(table[tableNumber].isFormat)
System.out.println("record serial number sequence error");
} else {
order[tableNumber][orderNUmber] = new Order();
order[tableNumber][orderNUmber].setCount(Integer.parseInt(str[0]));
order[tableNumber][orderNUmber].setName(str[1]);
order[tableNumber][orderNUmber].setPortion(Integer.parseInt(str[2]));
order[tableNumber][orderNUmber].setNumber(Integer.parseInt(str[3]));
if(countError){
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
countError = false;
}
if(str[0].matches("[0-9]{1,2}")&&str[0].startsWith("0")){
System.out.println("wrong format");
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
int i;
for (i = menuNumber - 1; i >= 0; i--) {
if (menu[i].isMenu(str[1])) {
order[tableNumber][orderNUmber].setUnitPrice(menu[i].getPrice());
order[tableNumber][orderNUmber].exist = true;
if (menu[i].isSpecial) order[tableNumber][orderNUmber].isSpecial = true;
break;
}
}
if (i == -1) {
System.out.println(str[1] + " does not exist");
order[tableNumber][orderNUmber].exist = false;
}
if (order[tableNumber][orderNUmber].isSpecial) {
if (Integer.parseInt(str[2]) != 3 && Integer.parseInt(str[2]) != 2 && Integer.parseInt(str[2]) != 1) {
if (table[tableNumber].isFormat&&order[tableNumber][orderNUmber].exist)
System.out.println(Integer.parseInt(str[0]) + " portion out of range " + Integer.parseInt(str[2]));
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
} else {
if (Integer.parseInt(str[2]) != 3 && Integer.parseInt(str[2]) != 2 && Integer.parseInt(str[2]) != 1) {
if (table[tableNumber].isFormat&&order[tableNumber][orderNUmber].exist)
System.out.println(Integer.parseInt(str[0]) + " portion out of range " + Integer.parseInt(str[2]));
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
}
if (Integer.parseInt(str[3]) > 15 || Integer.parseInt(str[3]) < 0) {
if (table[tableNumber].isFormat&&order[tableNumber][orderNUmber].exist)
System.out.println(Integer.parseInt(str[0]) + " num out of range " + Integer.parseInt(str[3]));
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
if (order[tableNumber][orderNUmber].exist && order[tableNumber][orderNUmber].isOutput && table[tableNumber].isFormat) {
System.out.print(str[0] + " " + str[1] + " ");
System.out.printf("%.0f\n", order[tableNumber][orderNUmber].getEveryPrice());
}
if(order[tableNumber][orderCount].isOutput){
orderCount = max(Integer.parseInt(str[0]),orderCount);
}
orderNUmber++;
}
}
} else if (str.length==5) {
if(str[0].startsWith("t")){
System.out.println("wrong format");
}
if(str[0].matches("[0-9]{1,2}")&&str[1].matches("[0-9]{1,2}")&&str[3].matches("[0-9]{1,2}")){
if (Integer.parseInt(str[0]) <= orderNUmber) {
System.out.println("record serial number sequence error");
} else {
order[tableNumber][orderNUmber] = new Order();
order[tableNumber][orderNUmber].setOtherCount(Integer.parseInt(str[0]));
order[tableNumber][orderNUmber].setCount(Integer.parseInt(str[1]));
order[tableNumber][orderNUmber].setName(str[2]);
order[tableNumber][orderNUmber].setPortion(Integer.parseInt(str[3]));
order[tableNumber][orderNUmber].setNumber(Integer.parseInt(str[4]));
int j;
for(j=0;j<tableNumber;j++){
if(Integer.parseInt(str[0])==table[j].getCount()){
System.out.print(str[1]+" table "+tableNumber+1+" pay for table "+j+1);
System.out.printf("%.0f\n", order[tableNumber][orderNUmber].getEveryPrice());
}
}if(j==tableNumber){
System.out.println("Table number :"+str[0]+" does not exist");
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
if(str[1].matches("[0-9]{1,2}")&&str[1].startsWith("0")){
System.out.println("wrong format");
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
int i;
for (i = menuNumber - 1; i >= 0; i--) {
if (menu[i].isMenu(str[2])) {
order[tableNumber][orderNUmber].setUnitPrice(menu[i].getPrice());
order[tableNumber][orderNUmber].exist = true;
if (menu[i].isSpecial) order[tableNumber][orderNUmber].isSpecial = true;
break;
}
}
if (i == -1) {
System.out.println(str[1] + " does not exist");
order[tableNumber][orderNUmber].exist = false;
}
if (order[tableNumber][orderNUmber].isSpecial) {
if (Integer.parseInt(str[3]) != 3 && Integer.parseInt(str[3]) != 2 && Integer.parseInt(str[3]) != 1) {
if (table[tableNumber].isFormat)
System.out.println(Integer.parseInt(str[1]) + " portion out of range " + Integer.parseInt(str[3]));
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
} else {
if (Integer.parseInt(str[3]) != 3 && Integer.parseInt(str[3]) != 2 && Integer.parseInt(str[3]) != 1) {
if (table[tableNumber].isFormat)
System.out.println(Integer.parseInt(str[1]) + " portion out of range " + Integer.parseInt(str[3]));
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
}
if (Integer.parseInt(str[4]) > 15 || Integer.parseInt(str[4]) < 0) {
if (table[tableNumber].isFormat)
System.out.println(Integer.parseInt(str[1]) + " num out of range " + Integer.parseInt(str[4]));
order[tableNumber][orderNUmber].isOutput = false;
order[tableNumber][orderNUmber].isDelete = true;
}
if (order[tableNumber][orderNUmber].exist && order[tableNumber][orderNUmber].isOutput && table[tableNumber].isFormat) {
System.out.print(str[1] + " " + str[2] + " ");
System.out.printf("%.0f\n", order[tableNumber][orderNUmber].getEveryPrice());
}
orderNUmber++;
}
}
}
}
}
public static boolean judgeTableNumber(String number){
return number.matches("[0-9]{1,2}");
}
public static boolean judgeDate(String theDate){
String[] dateStr = theDate.split("/");
if(!dateStr[0].matches("[0-9]{4}")) return false;
if(!dateStr[1].matches("[0-9]{1,2}")) return false;
if(!dateStr[2].matches("[0-9]{1,2}")) return false;
return true;
}
public static boolean judgeTime(String theTime){
String[] timeStr = theTime.split("/");
if(!timeStr[0].matches("[0-9]{1,2}")) return false;
if(!timeStr[1].matches("[0-9]{1,2}")) return false;
if(!timeStr[2].matches("[0-9]{1,2}")) return false;
return true;
}
}
class Menu{
private String name;
private int price;
public boolean isSpecial = false;
public boolean isFormat = true;
public boolean isTruePrice = true;
public Menu() {}
public Menu(String name,int price){
this.name = name;
this.price = price;
}
public int getPrice() {return price;}
public boolean isMenu(String theName){
return theName.equals(name);
}
}
class Order{
private int count;
private String name;
private int portion;
private int number;
private int otherCount;
private int unitPrice;
public boolean exist = true;
public boolean isSpecial = false;
public boolean isOutput = true;
public boolean isDelete = false;
public Order(){}
public void setCount(int count) {this.count = count;}
public void setName(String name) {this.name = name;}
public void setPortion(int portion) {this.portion = portion;}
public void setNumber(int number) {this.number = number;}
public void setOtherCount(int otherCount) {this.otherCount = otherCount;}
public void setUnitPrice(int unitPrice) {this.unitPrice = unitPrice;}
public double getEveryPrice(){
double everyPrice = 0;
if(portion==1) everyPrice = unitPrice * number;
else if(portion==2) everyPrice = Math.round( unitPrice * 1.5 * number);
else if(portion==3) everyPrice = unitPrice * 2 * number;
if(this.isDelete) everyPrice = 0;
return everyPrice;
}
}
class Table{
private int count;
private String date;
private String time;
private double original;//原价
private double bargain;//特价
public boolean haveDiscount = false;
public boolean isFormat = true;
public Table(){}
public Table(int count,String date,String time){
this.count = count;
this.date = date;
this.time = time;
}
public int getCount() {return count;}
public double getOriginal() {return original;}
public void setOriginal(double price){
this.original += price;
}
public double getBargain() {return bargain;}
public void setBargain(double price){
this.bargain += price;
}
public double getDiscount(){
String inputDate = date;
String[] dateParts = inputDate.split("/"); // 使用正则表达式分割字符串
String formattedDate = dateParts[0] + "/" + String.format("%02d", Integer.parseInt(dateParts[1])) + "/" + String.format("%02d", Integer.parseInt(dateParts[2]));
String inputTime = time;
String[] timeParts = inputTime.split("/"); // 使用正则表达式分割字符串
String formattedTime = timeParts[0] + ":" + String.format("%02d", Integer.parseInt(timeParts[1])) + ":" + String.format("%02d", Integer.parseInt(timeParts[2]));
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate judgeDate = LocalDate.parse(formattedDate,dateFormatter);
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime judgeTime = LocalTime.parse(formattedTime,timeFormatter);
LocalTime startEvenTime = LocalTime.parse("16:59:59", timeFormatter);
LocalTime endEvenTime = LocalTime.parse("20:30:01", timeFormatter);
LocalTime startNoonTime = LocalTime.parse("10:29:59", timeFormatter);
LocalTime endTNoonTime = LocalTime.parse("14:30:01", timeFormatter);
LocalTime weekendStartTime = LocalTime.parse("09:29:59", timeFormatter);
LocalTime weekendEndTime = LocalTime.parse("21:00:01", timeFormatter);
DayOfWeek dayOfWeek = judgeDate.getDayOfWeek();
int dayOfWeekValue = dayOfWeek.getValue();
double discount;
if (dayOfWeekValue >= 1 && dayOfWeekValue <= 5) {
this.haveDiscount = true;
if(judgeTime.isAfter(startNoonTime)&& judgeTime.isBefore(endTNoonTime)){
discount = 0.6;
}else if(judgeTime.isBefore(endEvenTime)&& judgeTime.isAfter(startEvenTime)){
discount = 0.8;
}else{
discount = 0; //不在营业时间
}
} else {
this.haveDiscount = false;
if(judgeTime.isAfter(weekendStartTime)&& judgeTime.isBefore(weekendEndTime)){
discount = 1;
}else{
discount = 0; //不在营业时间
}
}
return discount;
}
public boolean isTrueTime(String theDate){
String[] dateParts = theDate.split("/"); // 使用正则表达式分割字符串
String formattedDate = dateParts[0] + "/" + String.format("%02d", Integer.parseInt(dateParts[1])) + "/" + String.format("%02d", Integer.parseInt(dateParts[2]));
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate judgeDate = LocalDate.parse(formattedDate,dateFormatter);
LocalDate startDate = LocalDate.parse("2021/12/31", dateFormatter);
LocalDate endDate = LocalDate.parse("2024/1/1",dateFormatter);
return judgeDate.isAfter(startDate)&&judgeDate.isBefore(endDate);
}
public boolean validTime(String theDate){
String[] isDate = new String[10];
isDate = theDate.split("/");
return Integer.parseInt(isDate[0]) == 2022 || Integer.parseInt(isDate[0]) == 2023;
}
public boolean dateError(String dateString){
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
format.setLenient(false); //设置严格的解析模式
try {
format.parse(dateString); //解析日期字符串
return true;
} catch (ParseException e) {
return false;
}
}
}
2:OOP训练集6
1菜单计价程序-5
import java.time.DateTimeException;
import java.time.LocalDateTime;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Menu menu = new Menu();
HashMap<String ,String>hash=new HashMap<>();
String []customer=new String[30];
int cnt1 = 0;
ArrayList<Table> tables = new ArrayList<>();
String str1;
String str2;
String str3 = null;
String []zhe=new String[]{"不甜","微甜","稍甜","甜"};
String []jin=new String[]{"不酸","微酸","稍酸","酸","很酸"};
String []chan=new String[]{"不辣","微辣","稍辣","辣","很辣","爆辣"};
int []tasteGrade=new int [100];
int []tasteNumber=new int [100];
int [][]taste = new int[100][100];
int tableCount = 0;
int i, flag = 0;
int portion = 0, number = 0;
while (true) {
str1 = in.next();
if (str1.equals("T")) {
if(Objects.equals(str3, " ")){
menu.dishes.remove(menu.dishes.size() - 1);
System.out.println("wrong format");
continue;
}
menu.dishes.get(menu.dishes.size() - 1).isT = true;
str1 = in.next();
}
if (str1.equals("table")) break;
if (str1.equals("end")) break;
str2 = in.next();
str3 = " ";
if(!isNumber(str2)) {
str3=str2;
str2 = in.next();
}
for (i = 0; i < menu.dishes.size(); i++) {
if (menu.dishes.get(i).name.equals(str1)) {
menu.dishes.get(i).price = Integer.parseInt(str2);
flag++;
break;
}
}
if (flag == 0) {
menu.dishes.add(menu.addDish(str1, Integer.parseInt(str2),str3));
}
flag = 0;
}
if(str1.equals("end")) return ;
while(!str1.equals("end")){
int chanGrade=0;
int chanNumber=0;
int zheGrade=0;
int zheNumber=0;
int jinGrade=0;
int jinNumber=0;
String []a;
String ord;
String call;
String useName;
Table tab= new Table();
ord = in.nextLine();
a=ord.split(" ");
str2=a[1];
useName=a[3];
call=a[4];
String threeCall=call.substring(0,3);
if(useName.length()>10||call.length()!=11||searchPhone(threeCall)){
System.out.println("wrong format");
break;
}
String[] Date = a[5].split("/");
String[] Time =a[6].split("/");
tab.num = Integer.parseInt(str2);
int[] intDate = new int[3];
int[] intTime = new int[3];
for(i=0;i<3;i++) {
intDate[i] = Integer.parseInt(Date[i]);
intTime[i] = Integer.parseInt(Time[i]);
}
try {
tab.time = LocalDateTime.of(intDate[0],intDate[1],intDate[2],intTime[0],intTime[1],intTime[2]);
tables.add(tab);
if(!tab.isOpen()) {
System.out.println("table " + str2 + " out of opening hours");
do {
str1 = in.next();
} while (!str1.equals("end") && !str1.equals("table"));
continue;
}
}catch(DateTimeException e){
System.out.println( tab.num + " date error");
break;
}
System.out.println("table "+str2+": ");
while (true) {
str1 = in.next();
if (str1.equals("end"))
break;
if (str1.equals("table"))
break;
str2 = in.next();
if (isNumber(str2)) {
boolean exist = false;
for (Table table : tables) {
if (table.num == Integer.parseInt(str1)) {
exist = true;
break;
}
}
if(exist) {
System.out.print(Integer.parseInt(str2) + " table " +tables.get(tableCount).num + " pay for table "
+ Integer.parseInt(str1) + " ");
String str=str1;
Record treat = new Record();
str1 = in.next();
treat.ds = menu.dishes.get(menu.searchDish(str1));
if(menu.dishes.get(menu.searchDish(str1)).isT) {
str3 = in.next();
tasteGrade[Integer.parseInt(str1)]=Integer.parseInt(str3);
}
else str3=" ";
portion = in.nextInt();
number = in.nextInt();
tasteNumber[Integer.parseInt(str1)]=number;
treat.portion = portion;
treat.number = number;
System.out.print(treat.getPrice() + "\n");
if(menu.dishes.get(menu.searchDish(str1)).taste.equals("晋菜")) {
if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>4){
System.out.println("acidity num out of range :"+jinGrade);
str1=in.nextLine();
continue;
}
taste[Integer.parseInt(str)-1][1] += Integer.parseInt(str3)*number;
taste[Integer.parseInt(str)-1][4]+=number;
}
if(menu.dishes.get(menu.searchDish(str1)).taste.equals("川菜")) {
if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>5){
System.out.println("spicy num out of range :"+str3);
str1=in.nextLine();
continue;
}
taste[Integer.parseInt(str)-1][0] += Integer.parseInt(str3)*number;
taste[Integer.parseInt(str)-1][3]+=number;
}
if(menu.dishes.get(menu.searchDish(str1)).taste.equals("浙菜")) {
if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>3){
System.out.println("sweetness num out of range :"+str3);
str1=in.nextLine();
continue;
}
taste[Integer.parseInt(str)-1][2] += Integer.parseInt(str3)*number;
taste[Integer.parseInt(str)-1][5]+=number;
}
tables.get(tableCount).add(menu, "代点",str2, str1, portion, number);
}
else {
System.out.println("Table number :"+Integer.parseInt(str1)+" does not exist");
}
}
else {
if (!str2.equals("delete")) {
boolean d=false;
if(menu.dishes.get(menu.searchDish(str2)).isT) {
hash.put(str1,menu.dishes.get(menu.searchDish(str2)).taste);
str3 = in.next();
portion = in.nextInt();
number = in.nextInt();
tasteGrade[Integer.parseInt(str1)]=Integer.parseInt(str3);
tasteNumber[Integer.parseInt(str1)]=number;
d = true;
if(menu.dishes.get(menu.searchDish(str2)).taste.equals("晋菜")) {
if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>4){
System.out.println("acidity num out of range :"+str3);
str1=in.nextLine();
continue;
}
jinGrade += Integer.parseInt(str3)*number;
jinNumber+=number;
}
if(menu.dishes.get(menu.searchDish(str2)).taste.equals("川菜")) {
if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>5){
System.out.println("spicy num out of range :"+str3);
str1=in.nextLine();
continue;
}
chanGrade += Integer.parseInt(str3)*number;
chanNumber+=number;
}
if(menu.dishes.get(menu.searchDish(str2)).taste.equals("浙菜")) {
if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>3){
System.out.println("sweetness num out of range :"+str3);
str1=in.nextLine();
continue;
}
zheGrade += Integer.parseInt(str3)*number;
zheNumber+=number;
}
}
else str3=" ";
if(!d) {
portion = in.nextInt();
number = in.nextInt();
}
}
tables.get(tableCount).add(menu, str3,str1, str2, portion, number);
if(str2.equals("delete")){
if(hash.get(str1).equals("晋菜")) {
jinGrade -= tasteGrade[Integer.parseInt(str1)];
jinNumber -= tasteNumber[Integer.parseInt(str1)];
}
if(hash.get(str1).equals("川菜")) {
chanGrade -= tasteGrade[Integer.parseInt(str1)];
chanNumber -= tasteNumber[Integer.parseInt(str1)];
}
if(hash.get(str1).equals("浙菜")) {
zheGrade -= tasteGrade[Integer.parseInt(str1)];
zheNumber -= tasteNumber[Integer.parseInt(str1)];
}
hash.put(str1,"");
}
}
}
taste[tableCount][0]=chanGrade;
taste[tableCount][1]=jinGrade;
taste[tableCount][2]=zheGrade;
taste[tableCount][3]=chanNumber;
taste[tableCount][4]=jinNumber;
taste[tableCount][5]=zheNumber;
tables.get(tableCount).getSum();
int sum;
String str=useName+" "+call+" "+tables.get(tableCount).sum;
String []b;
if(tableCount==0)customer[cnt1++]=str;
else {
b = str.split(" ");
boolean r=true;
for (int l = 0; l < cnt1; l++) {
String[] c = customer[l].split(" ");
if (b[0].equals(c[0])) {
sum = Integer.parseInt(c[2]) + Integer.parseInt(b[2]);
customer[l] = useName + " " + call + " " + sum;
r=false;
}
}
if(r)customer[cnt1++]=str;
}
tableCount++;
}
for (i = 0; i < tableCount; i++) {
if (tables.get(i).isOpen()) {
System.out.print("table " + tables.get(i).num + ": " + tables.get(i).origSum+" "+tables.get(i).sum);
for(int j=0;j<3;j++){
if(taste[i][j+3]!=0){
if(j==0){
System.out.print(" 川菜 "+taste[i][j+3]+" "+chan[(int) Math.round(1.0*taste[i][j]/taste[i][j+3])]);
}
if(j==1){
System.out.print(" 晋菜 "+taste[i][j+3]+" "+jin[(int) Math.round(1.0*taste[i][j]/taste[i][j+3])]);
}
if(j==2){
System.out.print(" 浙菜 "+taste[i][j+3]+" "+zhe[(int) Math.round(1.0*taste[i][j]/taste[i][j+3])]);
}
}
}
System.out.println();
} else
System.out.println("table " + tables.get(i).num + " out of opening hours");
}
Arrays.sort(customer,0,cnt1);
for(int j=0;j<cnt1;j++) {
if(j<cnt1-1)
System.out.println(customer[j]);
else System.out.print(customer[j]);
}
}
public static boolean isNumber(String string) {
try {
Integer.parseInt(string);
return true;
} catch (NumberFormatException e) {
return false;
}
}
public static boolean searchPhone(String threeCall) {
String []phoneNumber=new String[]{"180","181","189","133","135","136"};
for (String s : phoneNumber)
if (s.equals(threeCall)) return false;
return true;
}
}
class Dish {
public String name;
public int price;
public String taste;
public boolean isT = false;
}
class Record { //点菜
public int orderNum; //序号
public Dish ds; //菜品
public int portion; //份额
public int number; //份数
public boolean isDeleted = false;
public int getPrice() {
if (portion == 2)
return (int) Math.round(1.5 * ds.price) * number;
else if (portion == 3)
return 2 * ds.price * number;
else
return ds.price * number;
}
}
class Menu { //菜单
ArrayList<Dish> dishes = new ArrayList<>();
public int searchDish(String dishName) {
for (int i = 0; i < dishes.size(); i++) {
if (dishName.equals(dishes.get(i).name)) {
return i;
}
}
return -1;
}
public Dish addDish(String dishName, int price,String taste) {
Dish newDish = new Dish();
newDish.name = dishName;
newDish.price = price;
newDish.taste=taste;
return newDish;
}
}
class Order {
ArrayList<Record> records = new ArrayList<>();
Record addARecord(String tasteGrade,int orderNum, String dishName, int portion, int number, Menu menu) {
Record newRecord = new Record();
newRecord.orderNum = orderNum;
newRecord.ds = menu.dishes.get(menu.searchDish(dishName));
newRecord.portion = portion;
newRecord.number = number;
if(!tasteGrade.equals("代点"))
System.out.println(newRecord.orderNum + " " + newRecord.ds.name + " " + newRecord.getPrice());
return newRecord;
}
public boolean delARecordByOrderNum(int orderNum) {
int i, flag = 0;
for (i = 0; i < records.size(); i++) {
if (records.get(i).orderNum == orderNum) {
if (!records.get(i).isDeleted) {
records.get(i).isDeleted = true;
}
else {
System.out.println("deduplication " + orderNum);
}
flag++;
}
}
if (flag == 0) {
System.out.println("delete error;");
return false;
}
return true;
}
}
class Table {
Order order = new Order();
public int num;
public LocalDateTime time;
public long sum = 0;
public long origSum = 0;
public void add(Menu menu, String str3,String str1, String str2, int portion, int number) { //判断点菜的模式(是否存在,删除,添加)
if (str2.equals("delete")) {
order.delARecordByOrderNum(Integer.parseInt(str1));
} else {
if (menu.searchDish(str2) != -1) {
order.records.add(order.addARecord(str3,Integer.parseInt(str1), str2, portion, number, menu));
} else
System.out.println(str2 + " does not exist");
}
}
public void getSum() {
double ts = time.getHour();
int wek = time.getDayOfWeek().getValue();
for (int i = 0; i < order.records.size(); i++) {
if (!order.records.get(i).isDeleted) {
origSum += order.records.get(i).getPrice();
if ((wek == 7 || wek == 6) && (ts >= 9.5) && (ts <= 21))
sum += order.records.get(i).getPrice();
if ((wek >= 1 && wek <= 5) && (ts >= 17) && (ts <= 20.5)) {
if(!order.records.get(i).ds.isT)
sum += Math.round(order.records.get(i).getPrice() * 0.8);
else sum += Math.round(order.records.get(i).getPrice() * 0.7);
}
if ((wek >= 1 && wek <= 5) && (ts >= 10.5) && (ts <= 14.5)) {
if(!order.records.get(i).ds.isT)
sum += Math.round(order.records.get(i).getPrice() * 0.6);
else sum += Math.round(order.records.get(i).getPrice() * 0.7);
}
}
}
}
public boolean isOpen() {
int weekday = time.getDayOfWeek().getValue();
if (weekday > 0 && weekday < 6) {
if (time.getHour() >= 17 && time.getHour() < 20)
return true;
if (time.getHour() == 20) {
if (time.getMinute() <= 30)
return true;
}
if (time.getHour() > 10 && time.getHour() < 14)
return true;
if (time.getHour() == 10) {
if (time.getMinute() >= 30)
return true;
}
if (time.getHour() == 14) {
return time.getMinute() <= 30;
}
} else {
if (time.getHour() > 9 && time.getHour() < 21)
return true;
if (time.getHour() == 9) {
if (time.getMinute() >= 30)
return true;
}
if (time.getHour() == 21) {
return time.getMinute() <= 30;
}
}
return false;
}
}

浙公网安备 33010602011771号