04:这次题目集主要学习了:使用LinkedHashSet删除arraylist中的重复数据,封装,了解Scanner类中nextLine(等方法、String类中split(等方法、Integer类中parseInt(等方法的用法,了解LocalDate类中of(、isAfter(、isBefore(、until(等方法的使用规则,了解ChronoUnit类中DAYS、WEEKS、MONTHS等单位的用法。题目的数目较多,但只有少数题目难度较大,比如菜单程序以及日期问题。
06:这次题目只有一个菜单程序,难度较大。
题目集4:7-1:这道题是大学以来见过的最头疼的题,由于本次题目集题量大、难度高、时间紧,我选择了先完成较简单的题目,而最难的菜单题选择了留到后面,等到结束也没能做出来,后面才知道老师把第一个题的难度设定的这样高,是为了提升我的能力,告诉我作为软件工程师不能怕困难,要迎难而上,我也下定决心做一个不怕困难的人。
import java.util.Scanner;
public static void main(String[] args {
Scanner input = new Scanner(System.in;
int year = 0;
int month = 0;
int day = 0;
if (choice == 1 { // test getNextNDays method
int m = 0;
year = Integer.parseInt(input.next(;
month = Integer.parseInt(input.next(;
day = Integer.parseInt(input.next(;
if (!date.checkInputValidity( {
System.out.println("Wrong Format";
System.exit(0;
}
if (m < 0 {
System.out.println("Wrong Format";
System.exit(0;
}
System.out.println(date.getNextNDays(m.showDate(;
}
else if (choice == 2 { // test getPreviousNDays method
int n = 0;
year = Integer.parseInt(input.next(;
month = Integer.parseInt(input.next(;
day = Integer.parseInt(input.next(;
if (!date.checkInputValidity( {
System.out.println("Wrong Format";
System.exit(0;
}
if (n < 0 {
System.out.println("Wrong Format";
System.exit(0;
}
}
else if (choice == 3 { //test getDaysofDates method
year = Integer.parseInt(input.next(;
month = Integer.parseInt(input.next(;
day = Integer.parseInt(input.next(;
int anotherMonth = Integer.parseInt(input.next(;
int anotherDay = Integer.parseInt(input.next(;
DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay;
System.out.println(fromDate.getDaysofDates(toDate;
} else {
System.out.println("Wrong Format";
System.exit(0;
}
}
else{
System.out.println("Wrong Format";
System.exit(0;
}
}
}
class DateUtil{
Day day=new Day(;
public DateUtil({
}
public DateUtil(int d,int m,int y{
this.day.value=d;
this.day.month.value=m;
this.day.month.year.value=y;
}
public int getDay( {
return day.value;
}
public void setDay(Day d {
this.day=d;
}
public boolean checkInputValidity({//检测输入的年、月、日是否合法
if(day.month.year.validate(&&day.month.validate(&&day.validate({
if((day.month.year.isLeapYear(getDay(&&day.month.value==2&&day.month.value<=29||day.validate(
return true;
else
return false;
}
else
return false;
}
public DateUtil getNextNDays(int m{//取得year-month-day的下n天日期
for(int i=0;i<m;i++{//用下一天循环
if(day.month.value==1||day.month.value==3||day.month.value==5||day.month.value==7||day.month.value==8||day.month.value==10||day.month.value==12{
if(day.month.value!=12&&day.value<31
day.dayIncrement(;
else if(day.month.value<12&&day.value==31{
day.restMin(;
day.month.monthIncrement(;
}
else if(day.month.value==12&&day.value==31{
day.restMin(;
day.month.restMin(;
day.month.year.yearIncrement(;
}
else
day.dayIncrement(;
}
else if(day.month.value==2{
if((day.month.year.isLeapYear(getDay(&&day.value==29||(!day.month.year.isLeapYear(getDay(&&day.value==28{
day.month.value=3;
day.dayIncrement(;
}
else
day.dayIncrement(;
}
else if(day.month.value==4||day.month.value==6||day.month.value==9||day.month.value==11{
if(day.value<30
day.dayIncrement(;
else if(day.value==30{
day.restMin(;
day.month.monthIncrement(;
}
}
}
}
public DateUtil getPreviousNDays(int n{//取得year-month-day的前n天日期
for(int i=0;i<n;i++{//用上一天循环
if(day.month.value==2||day.month.value==4||day.month.value==6||day.month.value==8||day.month.value==9||day.month.value==11||day.month.value==1{
if(day.month.value==1&&day.value==1 {
day.month.year.yearReduction(;
day.month.restMax(;
day.restMax(;
}
else if(day.value==1{
day.restMax(;
day.month.monthReduction(;
}
else
day.dayReduction(;
}
else if(day.month.value==3{
if(day.month.year.isLeapYear(getDay(&&day.value==1{
day.month.value=2;
day.value=29;
}
else if(!day.month.year.isLeapYear(getDay(&&day.value==1 {
day.month.value=2;
day.value=28;
}
else
day.dayReduction(;
}
else if(day.month.value==5||day.month.value==7||day.month.value==10||day.month.value==12{
if(day.value==1 {
day.month.monthReduction(;
day.value=30;
}
else
day.dayReduction(;
}
}
return new DateUtil(day.month.year.value,day.month.value,day.value;
}
public boolean compareDates(DateUtil date{//比较当前日期与date的大小(先后)
if(date.day.month.year.value<this.day.month.year.value {
return false;
}
else if(date.day.month.year.value==this.day.month.year.value&&date.day.month.value<this.day.month.value {
return false;
}
else if(date.day.month.year.value==this.day.month.year.value&&date.day.month.value==this.day.month.value&&date.day.value<this.day.value {
return false;
}
else
return true;
}
public boolean equalTwoDates(DateUtil date{//判断两个日期是否相等
if(this.day.month.year.value==date.day.month.year.value&&this.day.month.value==date.day.month.value&&this.day.value==date.day.value
return true;
return false;
}
public int getDaysofDates(DateUtil date{//求当前日期与date之间相差的天数
DateUtil fromDate=this;
DateUtil toDate=date;
int i=0,j=0,k=0;
int[] mon_maxnum=new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(this.equalTwoDates(date
return 0;
else if(!this.compareDates(date {
fromDate=date;
toDate=this;
}
for(i=fromDate.day.month.year.value+1;i<toDate.day.month.year.value;i++ {
if(day.month.year.isLeapYear(i
j=366;
else j=365;
k=k+j;
}
mon_maxnum[2]=29;
else mon_maxnum[2]=28;
int p=fromDate.day.month.value;
for (i=fromDate.day.month.value;i<=12;i++{
if(i==p{
k=k+day.mon_maxnum[i]-fromDate.day.value;
}
else k=k+mon_maxnum[i];
}
int t=toDate.day.month.value;
if(day.month.year.isLeapYear(toDate.day.month.year.value&&toDate.day.month.value>2
mon_maxnum[2]=29;
else mon_maxnum[2]=28;
for (i=1;i<=toDate.day.month.value;i++{
if(i==t{
k=k+toDate.day.value;
}
else k=k+mon_maxnum[i];
}
return k;
}
public String showDate({//以“year-month-day”格式返回日期值
return this.day.month.year.value+"-"+this.day.month.value+"-"+this.day.value;
}
}
class Day{
int value;//day
int[] mon_maxnum = {0,31,28,31,30,31,30,31,31,30,31,30,31};
Month month=new Month(;
public Day( {}
public Day(int yearValue,int monthValue,int dayValue{
}
public int getValue( {
return value;
}
public void setValue(int value {
this.value = value;
}
public Month getMonth( {
return month;
}
public void setMonth(Month value {
this.month = value;
}
public void restMin( {
value = 1;
}
public void restMax( {
value = mon_maxnum[month.value];
}
public boolean validate( {
if(value>=1&&value<=31 {
if((month.year.isLeapYear(month.year.value&&month.value==2&&value<=29||value<=mon_maxnum[month.value]
return true;
else
return false;
}
else
return false;
}
public void dayIncrement( {}
public void dayReduction( {}
}
class Month{
int value;
Year year=new Year(;
public Month( {}
public Month(int yearValue,int monthValue{
}
public int getValue( {
return value;
}
public void setValue(int value {
this.value = value;
}
public Year getYear( {
return year;
}
public void setYear(Year year {
this.year = year;
}
public void restMin( {
value = 1;
}
public void restMax( {
value = 12;
}
public boolean validate( {
if(value>=1&&value<=12
return true;
else
return false;
}
public void monthIncrement( {
value=value+1;
}
public void monthReduction( {
value=value-1;
}
}
class Year{
int value;
public Year( {}
public Year(int yearValue{
}
public int getValue( {
return value;
}
public void setValue(int value {
this.value = value;
}
public boolean isLeapYear(int year{//判断year是否为闰年
if ((year % 4 == 0 && year % 100 != 0 || year % 400 == 0
return true;
else
return false;
}
public boolean validate( {
if(value>=1900&&value<=2050
return true;
else
return false;
}
public void yearIncrement( {
value=value+1;
}
public void yearReduction( {
value=value-1;
}
}
7-6:
public class Main {
public static void main(String[] args {
Scanner input = new Scanner(System.in;
int year = 0;
int month = 0;
int day = 0;
if (choice == 1 { // test getNextNDays method
int m = 0;
year = Integer.parseInt(input.next(;
month = Integer.parseInt(input.next(;
day = Integer.parseInt(input.next(;
if (!date.checkInputValidity( {
System.out.println("Wrong Format";
System.exit(0;
}
if (m < 0 {
System.out.println("Wrong Format";
System.exit(0;
}
System.out.println(date.getNextNDays(m.showDate(;
}
else if (choice == 2 { // test getPreviousNDays method
int n = 0;
year = Integer.parseInt(input.next(;
month = Integer.parseInt(input.next(;
day = Integer.parseInt(input.next(;
if (!date.checkInputValidity( {
System.out.println("Wrong Format";
System.exit(0;
}
if (n < 0 {
System.out.println("Wrong Format";
System.exit(0;
}
}
else if (choice == 3 { //test getDaysofDates method
year = Integer.parseInt(input.next(;
month = Integer.parseInt(input.next(;
day = Integer.parseInt(input.next(;
int anotherMonth = Integer.parseInt(input.next(;
int anotherDay = Integer.parseInt(input.next(;
DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay;
System.out.println(fromDate.getDaysofDates(toDate;
} else {
System.out.println("Wrong Format";
System.exit(0;
}
}
else{
System.out.println("Wrong Format";
System.exit(0;
}
}
}
class DateUtil{
Day day=new Day(;
public DateUtil({
}
public DateUtil(int d,int m,int y{
this.day.value=d;
this.day.month.value=m;
this.day.month.year.value=y;
}
public int getDay( {
return day.value;
}
public void setDay(Day d {
this.day=d;
}
public boolean checkInputValidity({//检测输入的年、月、日是否合法
if(day.month.year.validate(&&day.month.validate(&&day.validate({
if((day.month.year.isLeapYear(getDay(&&day.month.value==2&&day.month.value<=29||day.validate(
return true;
else
return false;
}
else
return false;
}
public DateUtil getNextNDays(int m{//取得year-month-day的下n天日期
for(int i=0;i<m;i++{//用下一天循环
if(day.month.value==1||day.month.value==3||day.month.value==5||day.month.value==7||day.month.value==8||day.month.value==10||day.month.value==12{
if(day.month.value!=12&&day.value<31
day.dayIncrement(;
else if(day.month.value<12&&day.value==31{
day.restMin(;
day.month.monthIncrement(;
}
else if(day.month.value==12&&day.value==31{
day.restMin(;
day.month.restMin(;
day.month.year.yearIncrement(;
}
else
day.dayIncrement(;
}
else if(day.month.value==2{
if((day.month.year.isLeapYear(getDay(&&day.value==29||(!day.month.year.isLeapYear(getDay(&&day.value==28{
day.month.value=3;
day.dayIncrement(;
}
else
day.dayIncrement(;
}
else if(day.month.value==4||day.month.value==6||day.month.value==9||day.month.value==11{
if(day.value<30
day.dayIncrement(;
else if(day.value==30{
day.restMin(;
day.month.monthIncrement(;
}
}
}
}
public DateUtil getPreviousNDays(int n{//取得year-month-day的前n天日期
for(int i=0;i<n;i++{//用上一天循环
if(day.month.value==2||day.month.value==4||day.month.value==6||day.month.value==8||day.month.value==9||day.month.value==11||day.month.value==1{
if(day.month.value==1&&day.value==1 {
day.month.year.yearReduction(;
day.month.restMax(;
day.restMax(;
}
else if(day.value==1{
day.restMax(;
day.month.monthReduction(;
}
else
day.dayReduction(;
}
else if(day.month.value==3{
if(day.month.year.isLeapYear(getDay(&&day.value==1{
day.month.value=2;
day.value=29;
}
else if(!day.month.year.isLeapYear(getDay(&&day.value==1 {
day.month.value=2;
day.value=28;
}
else
day.dayReduction(;
}
else if(day.month.value==5||day.month.value==7||day.month.value==10||day.month.value==12{
if(day.value==1 {
day.month.monthReduction(;
day.value=30;
}
else
day.dayReduction(;
}
}
return new DateUtil(day.month.year.value,day.month.value,day.value;
}
public boolean compareDates(DateUtil date{//比较当前日期与date的大小(先后)
if(date.day.month.year.value<this.day.month.year.value {
return false;
}
else if(date.day.month.year.value==this.day.month.year.value&&date.day.month.value<this.day.month.value {
return false;
}
else if(date.day.month.year.value==this.day.month.year.value&&date.day.month.value==this.day.month.value&&date.day.value<this.day.value {
return false;
}
else
return true;
}
public boolean equalTwoDates(DateUtil date{//判断两个日期是否相等
if(this.day.month.year.value==date.day.month.year.value&&this.day.month.value==date.day.month.value&&this.day.value==date.day.value
return true;
return false;
}
public int getDaysofDates(DateUtil date{//求当前日期与date之间相差的天数
DateUtil fromDate=this;
DateUtil toDate=date;
int i=0,j=0,k=0;
int[] mon_maxnum=new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(this.equalTwoDates(date
return 0;
else if(!this.compareDates(date {
fromDate=date;
toDate=this;
}
for(i=fromDate.day.month.year.value+1;i<toDate.day.month.year.value;i++ {
if(day.month.year.isLeapYear(i
j=366;
else j=365;
k=k+j;
}
mon_maxnum[2]=29;
else mon_maxnum[2]=28;
int p=fromDate.day.month.value;
for (i=fromDate.day.month.value;i<=12;i++{
if(i==p{
k=k+day.mon_maxnum[i]-fromDate.day.value;
}
else k=k+mon_maxnum[i];
}
int t=toDate.day.month.value;
if(day.month.year.isLeapYear(toDate.day.month.year.value&&toDate.day.month.value>2
mon_maxnum[2]=29;
else mon_maxnum[2]=28;
for (i=1;i<=toDate.day.month.value;i++{
if(i==t{
k=k+toDate.day.value;
}
else k=k+mon_maxnum[i];
}
return k;
}
public String showDate({//以“year-month-day”格式返回日期值
return this.day.month.year.value+"-"+this.day.month.value+"-"+this.day.value;
}
}
class Day{
int value;//day
int[] mon_maxnum = {0,31,28,31,30,31,30,31,31,30,31,30,31};
Month month=new Month(;
public Day( {}
public Day(int yearValue,int monthValue,int dayValue{
}
public int getValue( {
return value;
}
public void setValue(int value {
this.value = value;
}
public Month getMonth( {
return month;
}
public void setMonth(Month value {
this.month = value;
}
public void restMin( {
value = 1;
}
public void restMax( {
value = mon_maxnum[month.value];
}
public boolean validate( {
if(value>=1&&value<=31 {
if((month.year.isLeapYear(month.year.value&&month.value==2&&value<=29||value<=mon_maxnum[month.value]
return true;
else
return false;
}
else
return false;
}
public void dayIncrement( {}
public void dayReduction( {}
}
class Month{
int value;
Year year=new Year(;
public Month( {}
public Month(int yearValue,int monthValue{
}
public int getValue( {
return value;
}
public void setValue(int value {
this.value = value;
}
public Year getYear( {
return year;
}
public void setYear(Year year {
this.year = year;
}
public void restMin( {
value = 1;
}
public void restMax( {
value = 12;
}
public boolean validate( {
if(value>=1&&value<=12
return true;
else
return false;
}
public void monthIncrement( {
value=value+1;
}
public void monthReduction( {
value=value-1;
}
}
class Year{
int value;
public Year( {}
public Year(int yearValue{
}
public int getValue( {
return value;
}
public void setValue(int value {
this.value = value;
}
public boolean isLeapYear(int year{//判断year是否为闰年
if ((year % 4 == 0 && year % 100 != 0 || year % 400 == 0
return true;
else
return false;
}
public boolean validate( {
if(value>=1900&&value<=2050
return true;
else
return false;
}
public void yearIncrement( {
value=value+1;
}
public void yearReduction( {
value=value-1;
}
}
这个日期与之前的7-5类与类之间的关系不同,但是方法基本相同。
1 import java.util.*; 2 3 public class Main{ 4 public static void main(String[] agrs { 5 Scanner input = new Scanner(System.in; 6 int numberTable = 0;// 桌数 7 int numberRecord = 0;// 记录数 8 int numberDish = 0;// 菜品数 9 int flagTable = 0;// 判断输入错误的类型,0为正常情况 10 Menu tableMenu = new Menu(;// 所有桌的菜谱 11 Time Time = new Time(;// 时间类 12 Table table[] = new Table[20];// 桌子数组 13 int sumPriceTable[] = new int[20];// 用来统计各桌的价格总和 14 for(int i = 0; i < 20; i++ {// 用于给数组分配空间 15 table[i] = new Table(; 16 } 17 String data = new String(; 18 while(true { 19 data = input.nextLine(; 20 if(data.equals("end"{ 21 break; 22 } 23 String dataThis[] = data.split(" "; 24 /* 完成 */ 25 if(data.length( > 12 {// 说明读到了桌子(此处没有对是否有输入完全4个参数再做判断,可能无法通过) 26 numberTable ++;// 桌数+1,0桌为空,无数据 27 table[numberTable].setTableInfo(data;// 先写入该桌数组,不管合法不合法,不合法该桌信息作废 28 numberRecord = 0;// 记录数复原 29 } 30 /// 31 else {// 没读到桌子 32 /* 完成 */ 33 if(numberTable == 0 {// 桌数为0说明还在菜谱输入阶段 34 if(dataThis.length > 2 {// 说明输入的可能是特色菜 35 if(dataThis[2].charAt(0 == "T" && dataThis.length == 3 {// 判断输入是否合法 36 if(table[numberTable].getDish([numberDish].checkPrice(dataThis[1] {// 判断价格是否输入合法,合法就进行赋值 37 if(Integer.parseInt(dataThis[1] > 0 && Integer.parseInt(dataThis[1] < 300 38 tableMenu.addDish(dataThis[0], Integer.parseInt(dataThis[1], true, numberDish;// 直接使用定义的方法赋值 39 else { 40 if(Integer.parseInt(dataThis[1] == 0 41 System.out.println("wrong format"; 42 else 43 System.out.println(dataThis[0] + " price out of range " + dataThis[1]; 44 continue; 45 } 46 numberDish ++; 47 } 48 else {// 说明价格输入不合法 49 System.out.println("wrong format"; 50 } 51 } 52 else {// 说明没有按要求输入特色菜 53 System.out.println("wrong format"; 54 } 55 } 56 else if(dataThis.length == 2 {// 说明是非特色菜 57 if(table[numberTable].getDish([numberDish].checkPrice(dataThis[1] {// 判断价格是否输入合法,合法就进行赋值 58 if(Integer.parseInt(dataThis[1] > 0 && Integer.parseInt(dataThis[1] < 300 59 tableMenu.addDish(dataThis[0], Integer.parseInt(dataThis[1], false, numberDish;// 直接使用定义的方法赋值 60 else { 61 if(Integer.parseInt(dataThis[1] == 0 62 System.out.println("wrong format"; 63 else 64 System.out.println(dataThis[0] + " price out of range " + dataThis[1]; 65 continue; 66 } 67 numberDish ++; 68 } 69 else {// 说明价格输入不合法 70 System.out.println("wrong format"; 71 } 72 } 73 else {// 说明输入参数错误 74 System.out.println("wrong format"; 75 } 76 } 77 /// 78 /* 完成 */ 79 else {// 开始进行订单,输入了序号 80 table[numberTable].getOrderTable(.getRecords([numberRecord].setRecordTemp(data; 81 numberRecord ++; 82 table[numberTable].getOrderTable(.addTotalNum(;// 给记录数+1 83 } 84 /// 85 } 86 } 87 int tableNumber;// 临时桌号 88 String[] date; 89 String[] time; 90 int year; int month; int day; 91 int hour; int minute; int second; 92 for(int i = 1; i <= numberTable; i++ {// 这个循环用来将各个类中的临时信息进行处理 93 String[] tableInfo = table[i].getTableInfo(.split(" "; 94 95 if(tableInfo[0].equals("table" { 96 if(tableInfo.length > 4 {// 说明有多余字符 97 table[i].setWrongStatus(false; 98 continue; 99 } 100 101 if(table[i].checkTableNumber(tableInfo[1] {// 说明桌号是数字 102 tableNumber = Integer.parseInt(tableInfo[1]; 103 table[i].setTableNumber(tableNumber;// 设置桌号 104 if(tableNumber >= 1 && tableNumber <= 55 {// 在桌号合法范围内 105 date = tableInfo[2].split("/";// 得到日期字符串数组 106 time = tableInfo[3].split("/";// 得到时间字符串数组 107 boolean timeFlag = true; 108 if(!table[i].getTableTime(.validDate(date[0], date[1], date[2] || !table[i].getTableTime(.validTime(time[0], time[1], time[2] { 109 timeFlag = false; 110 } 111 if(!timeFlag { 112 table[i].setWrongStatus(timeFlag;// 将该桌视为异常情况1 wrong format 时间输入格式错误 113 continue;// 直接结束本桌循环 114 } 115 116 year = Integer.parseInt(date[0]; 117 month = Integer.parseInt(date[1]; 118 day = Integer.parseInt(date[2]; 119 hour = Integer.parseInt(time[0]; 120 minute = Integer.parseInt(time[1]; 121 second = Integer.parseInt(time[2]; 122 123 // 判断日期、时间是否合法输入——唯一正确tableFlag=0 124 if(table[i].getTableTime(.checkDate(year, month, day && table[i].getTableTime(.checkTime(hour, minute, second { 125 table[i].getTableTime(.setTableTime(year, month, day, hour, minute, second;// 设置好时间 126 127 for(int j = 0; j < table[i].getOrderTable(.getTotalNum(; j++ { 128 String dishData[] = table[i].getOrderTable(.getRecords([j].getRecordTemp(.split(" "; 129 if(dishData.length == 4 {// 说明是为本桌点菜 130 Dish dishTemp = new Dish(; 131 dishTemp.setName(dishData[1];// 设置该记录菜名 132 table[i].getOrderTable(.getRecords([j].getDishThis(.setName(dishData[1];// 设置菜名 133 134 if(tableMenu.searthDish(dishTemp.getName( != null {// 说明菜谱内存在该菜 135 table[i].getOrderTable(.getRecords([j].setDishThis(tableMenu.searthDish(dishTemp.getName(;// 将该菜谱导入记录 136 table[i].getOrderTable(.getRecords([j].setExistStatus(true;// 复原至正常情况 137 } 138 else {// 说明菜谱中不存在 139 table[i].getOrderTable(.getRecords([j].setExistStatus(false;// 将该记录视为异常情况3 xxx does not exist 140 } 141 142 if(dishTemp.checkPortion(dishData[2] {// 判断份额是不是数字 143 table[i].getOrderTable(.getRecords([j].setPortion(Integer.parseInt(dishData[2];// 设置份额 144 } 145 else { 146 table[i].getOrderTable(.getRecords([j].setWrongStatus(true;// 将该记录视为异常情况2 wrong format 147 continue;// 直接结束本次记录循环 148 } 149 150 if(dishTemp.checkNumber(dishData[3] {// 判断份数是不是数字 151 table[i].getOrderTable(.getRecords([j].setNum(Integer.parseInt(dishData[3];// 设置份数 152 } 153 else { 154 table[i].getOrderTable(.getRecords([j].setWrongStatus(true;// 将该记录视为异常情况2 wrong format 155 continue;// 直接结束本次记录循环 156 } 157 if(dishTemp.checkNumber(dishData[0] {// 判断序号是不是数字 158 table[i].getOrderTable(.getRecords([j].setOrderNum(Integer.parseInt(dishData[0];// 设置序号 159 } 160 else { 161 table[i].getOrderTable(.getRecords([j].setNumError(true;// 将该记录视为异常情况4 wrong format,但是优先级最高 162 continue;// 直接结束本次记录循环 163 } 164 } 165 166 else if(dishData.length == 5 {// 说明是代点菜 167 table[i].getOrderTable(.getRecords([j].setReplaceStatus(true;// 是代点菜记录 168 boolean isTableNumFlag = true;// 判断代点桌号是否为数字 169 for(int check = 0; check < dishData[0].length(; check++ { 170 if(dishData[0].charAt(check < "0" || dishData[0].charAt(check > "9" { 171 isTableNumFlag = false; 172 break; 173 } 174 } 175 if(isTableNumFlag { 176 table[i].getOrderTable(.getRecords([j].setReplaceTableNum(Integer.parseInt(dishData[0]; 177 boolean tableNumExist = false;// 判断代点桌号是否存在 178 for(int check = 1; check <= tableNumber; check++ { 179 if(table[check].getTableNumber( == Integer.parseInt(dishData[0] { 180 tableNumExist = true; 181 break; 182 } 183 } 184 185 if(!tableNumExist { 186 table[i].getOrderTable(.getRecords([j].setReplaceTableNumExist(false; 187 continue;// 结束本条记录 188 } 189 190 Dish dishTemp = new Dish(; 191 dishTemp.setName(dishData[2];// 设置该记录菜名 192 table[i].getOrderTable(.getRecords([j].getDishThis(.setName(dishData[2];// 设置菜名 193 194 if(tableMenu.searthDish(dishTemp.getName( != null {// 说明菜谱内存在该菜 195 table[i].getOrderTable(.getRecords([j].setDishThis(tableMenu.searthDish(dishTemp.getName(;// 将该菜谱导入记录 196 table[i].getOrderTable(.getRecords([j].setExistStatus(true;// 复原至正常情况 197 } 198 else {// 说明菜谱中不存在 199 table[i].getOrderTable(.getRecords([j].setExistStatus(false;// 将该记录视为异常情况3 xxx does not exist 200 } 201 202 if(dishTemp.checkPortion(dishData[3] {// 判断份额是不是数字 203 table[i].getOrderTable(.getRecords([j].setPortion(Integer.parseInt(dishData[3];// 设置份额 204 } 205 else { 206 table[i].getOrderTable(.getRecords([j].setWrongStatus(true;// 将该记录视为异常情况2 wrong format 207 continue;// 直接结束本次记录循环 208 } 209 210 if(dishTemp.checkNumber(dishData[4] {// 判断份数是不是数字 211 table[i].getOrderTable(.getRecords([j].setNum(Integer.parseInt(dishData[4];// 设置份数 212 } 213 else { 214 table[i].getOrderTable(.getRecords([j].setWrongStatus(true;// 将该记录视为异常情况2 wrong format 215 continue;// 直接结束本次记录循环 216 } 217 if(dishTemp.checkNumber(dishData[1] {// 判断序号是不是数字 218 table[i].getOrderTable(.getRecords([j].setOrderNum(Integer.parseInt(dishData[1];// 设置序号 219 } 220 else { 221 table[i].getOrderTable(.getRecords([j].setNumError(true;// 将该记录视为异常情况4 wrong format,但是优先级最高 222 continue;// 直接结束本次记录循环 223 } 224 } 225 else { 226 table[i].getOrderTable(.getRecords([j].setWrongStatus(true;// 将该记录视为异常情况2 wrong format 227 continue;// 直接结束本次记录循环 228 } 229 } 230 231 else if(dishData.length == 3 {// 有可能是特色菜 232 table[i].getOrderTable(.getRecords([j].setIsMix(true;// 有夹杂 invalid dish 233 continue;// 直接结束本次记录循环 234 } 235 236 else if(dishData.length == 2 {// 说明是删除 237 if(dishData[1].equals("delete" { 238 table[i].getOrderTable(.getRecords([j].setIsDeleteRecord(true;// 是删除记录 239 /// 此处序号可能还需要再改------------- 240 if(dishData[0].charAt(0 >= "0" && dishData[0].charAt(0 <= "9" {// 说明序号正确 241 int checkNumber = Integer.parseInt(dishData[0]; 242 boolean deleteFlag = false;// 删除的标志 243 for(int k = 0; k < table[i].getOrderTable(.getTotalNum(; k++ { 244 if(checkNumber == table[i].getOrderTable(.getRecords([k].getOrderNum( { 245 if(!table[i].getOrderTable(.getRecords([k].getDeleteStatus( { 246 table[i].getOrderTable(.getRecords([k].setDeleteStatus(true;// 成功删除 247 deleteFlag = true; 248 break; 249 } 250 else { 251 table[i].getOrderTable(.getRecords([k].setDeleteRepeat(true;// 重复删除 252 deleteFlag = true; 253 break; 254 } 255 } 256 } 257 if(!deleteFlag { 258 table[i].getOrderTable(.getRecords([j].setDeleteErrorStatus(true;// 将该记录视为异常情况1 delete error 259 continue;// 直接结束本记录循环 260 } 261 continue;// 直接结束本次记录循环 262 } 263 else { 264 table[i].getOrderTable(.getRecords([j].setDeleteErrorStatus(true;// 将该记录视为异常情况1 delete error 265 continue;// 直接结束本次记录循环 266 } 267 } 268 else {// 可能是夹杂在内的菜谱 269 if(dishData[1].length( <= 2 { 270 table[i].getOrderTable(.getRecords([j].setIsMix(true;// 有夹杂 invalid dish 271 continue;// 直接结束本次记录循环 272 } 273 table[i].getOrderTable(.getRecords([j].setDeleteErrorStatus(true;// 将该记录视为异常情况2 wrong format 274 continue;// 直接结束本次记录循环 275 } 276 } 277 else{ 278 table[i].getOrderTable(.getRecords([j].setDeleteErrorStatus(true;// 将该记录视为异常情况2 wrong format 279 continue;// 直接结束本次记录循环 280 } 281 } 282 } 283 else {// 说明日期、时间输入不合法 284 table[i].setTime_isValid(false;// 将该桌视为异常情况2 not a valid time period 285 continue;// 直接结束本桌循环 286 } 287 if(!table[i].getTableTime(.isOpen(year, month, day, hour, minute, second { 288 table[i].setIsOpeningtime(false;// 将该桌视为异常情况5 "table " + t.tableNum + " out of opening hours" 289 } 290 } 291 else {// 说明超出了桌号范围 292 table[i].setTableNumber_Out(false;// 将该桌视为异常情况3 table num out of range 293 continue;// 直接结束本桌循环 294 } 295 } 296 else { 297 table[i].setWrongStatus(false;// 将该桌视为异常情况1 wrong format 桌号不是数字 298 continue;// 直接结束本桌循环 299 } 300 } 301 else { 302 if(tableInfo[0].substring(0, 5.equals("table" { 303 table[i].setWrongStatus(false; 304 continue; 305 } 306 table[i].setTableStatus(false;// 将该桌视为异常情况4 wrong format + record serial number sequence error 307 continue;// 直接结束本桌输出 308 } 309 } 310 311 int checkRepeatNumber[] = new int[10];// 用于检查序号是否从小到大排序的 312 313 for(int i = 1; i <= numberTable; i++ {// 进行价格计算与输出每桌的点菜情况 314 int normalFlag = 0; 315 if(table[i].getWrongStatus( && table[i].getTime_isValid( && table[i].getTableNumber_Out( && 316 table[i].getTableStatus( {// 正常情况 317 318 System.out.println("table " + table[i].getTableNumber( + ": ";// 输出桌号 319 320 for(int j = 0; j < table[i].getOrderTable(.getTotalNum(; j++ {// 订单 321 if(table[i].getOrderTable(.getRecords([j].getIsMix( {// 判断是否为夹杂的菜谱 322 System.out.println("invalid dish"; 323 continue;// 直接结束本条记录 324 } 325 326 if(!table[i].getOrderTable(.getRecords([j].getNumError( {// 正常的符合格式的记录 327 if(table[i].getOrderTable(.getRecords([j].getPortion( > 3 {// 份额大于3 328 System.out.println(table[i].getOrderTable(.getRecords([j].getOrderNum( + " portion out of range " + table[i].getOrderTable(.getRecords([j].getPortion(; 329 continue;// 直接结束本条记录 330 } 331 else if(table[i].getOrderTable(.getRecords([j].getPortion( > 9 {// 份额格式错误 332 System.out.println("not a valid portion"; 333 continue;// 直接结束本条记录 334 } 335 if(table[i].getOrderTable(.getRecords([j].getNum( > 15 { 336 System.out.println(table[i].getOrderTable(.getRecords([j].getOrderNum( + " num out of range " + table[i].getOrderTable(.getRecords([j].getNum(; 337 continue;// 直接结束本条记录 338 } 339 340 if(table[i].getOrderTable(.getRecords([j].getIsDeleteRecord( {// 说明是一条删除记录 341 if(table[i].getOrderTable(.getRecords([j].getDeleteErrorStatus( { 342 System.out.println("delete error"; 343 } 344 continue; 345 } 346 347 if(normalFlag == 0 && table[i].getOrderTable(.getRecords([j].getExistStatus( {// 说明是第一条正常的记录或者删除记录 348 checkRepeatNumber[normalFlag] = table[i].getOrderTable(.getRecords([j].getOrderNum(; 349 // 计算该条记录的价格 350 float accountPercent = 1;// 折扣率 351 if(table[i].getOrderTable(.getRecords([j].getDishThis(.getIsT( {// 判断是否为特色菜 352 if(table[i].getTableTime(.checkT( {// 进一步判断当前时间特色菜是否打折 353 accountPercent = (float0.7; 354 } 355 } 356 else { 357 accountPercent = table[i].getTableTime(.account(;// 普通菜 358 } 359 // 临时价格没有折扣和四舍五入 360 float priceTemp = table[i].getOrderTable(.getRecords([j].getDishThis(.getPrice(table[i].getOrderTable(.getRecords([j].getPortion(; 361 int priceTempInt = (int(priceTemp + 0.5; 362 if(table[i].getOrderTable(.getRecords([j].getReplaceStatus({ 363 if(table[i].getOrderTable(.getRecords([j].getReplaceTableNumExist( {// 说明代点成功 364 System.out.print(table[i].getOrderTable(.getRecords([j].getOrderNum( + " table " + table[i].getTableNumber( + " pay for table "; 365 System.out.println(table[i].getOrderTable(.getRecords([j].getReplaceTableNum( + " " + priceTempInt * table[i].getOrderTable(.getRecords([j].getNum(; 366 } 367 else { 368 System.out.println("Table number :"+ table[i].getOrderTable(.getRecords([j].getReplaceTableNum( +" does not exist"; 369 continue;// 结束本条记录,不进行求和 370 } 371 } 372 else { 373 boolean overFlag = false; 374 for(int k = j+1; k < table[i].getOrderTable(.getTotalNum(; k++ { 375 if(table[i].getOrderTable(.getRecords([j].getDishThis(.getName(.equals(table[i].getOrderTable(.getRecords([k].getDishThis(.getName( { 376 overFlag = true; 377 break; 378 } 379 } 380 if(overFlag { 381 continue; 382 } 383 System.out.print(checkRepeatNumber[normalFlag] + " " + table[i].getOrderTable(.getRecords([j].getDishThis(.getName(; 384 System.out.println(" " + priceTempInt * table[i].getOrderTable(.getRecords([j].getNum(;// 四舍五入输出点所有量该菜的价格 385 } 386 if(table[i].getOrderTable(.getRecords([j].getDeleteStatus( { 387 if(table[i].getOrderTable(.getRecords([j].getDeleteRepeat( {// 重复删除的一条记录 388 System.out.println("deduplication " + table[i].getOrderTable(.getRecords([j].getOrderNum(; 389 } 390 } 391 392 if(table[i].getOrderTable(.getRecords([j].getDeleteStatus( {// 如果是删除了的,直接结束 393 continue;// 直接结束本条记录 394 } 395 int recordPrice = (int((priceTempInt * table[i].getOrderTable(.getRecords([j].getNum( * accountPercent + 0.5;// 本条记录的菜品价格总和 396 table[i].getOrderTable(.addOrderPrice(recordPrice;// 求和 397 table[i].getOrderTable(.addOrderPriceOrigin(priceTempInt * table[i].getOrderTable(.getRecords([j].getNum(;// 求和 398 normalFlag ++; 399 } 400 else if(table[i].getOrderTable(.getRecords([j].getExistStatus({ 401 boolean normalNumberFlag = true;// 判断序号是否从小到大排序 402 for(int k = 0; k < normalFlag; k++ { 403 // 若本条记录的序号小于前面每一条正常的记录的序号,说明序号错误 404 if(table[i].getOrderTable(.getRecords([j].getOrderNum( <= table[i].getOrderTable(.getRecords([k].getOrderNum( && 405 !table[i].getOrderTable(.getRecords([j].getReplaceStatus( && !table[i].getOrderTable(.getRecords([k].getReplaceStatus( { 406 normalNumberFlag = false; 407 break; 408 } 409 } 410 if(normalNumberFlag { 411 checkRepeatNumber[normalFlag] = table[i].getOrderTable(.getRecords([j].getOrderNum(; 412 // 计算该条记录的价格 413 float accountPercent = 1;// 折扣率 414 if(table[i].getOrderTable(.getRecords([j].getDishThis(.getIsT( {// 判断是否为特色菜 415 if(table[i].getTableTime(.checkT( {// 进一步判断当前时间特色菜是否打折 416 accountPercent = (float0.7; 417 } 418 } 419 else { 420 accountPercent = table[i].getTableTime(.account(;// 非特色菜 421 } 422 // 临时价格没有折扣和四舍五入 423 float priceTemp = table[i].getOrderTable(.getRecords([j].getDishThis(.getPrice(table[i].getOrderTable(.getRecords([j].getPortion(; 424 int priceTempInt = (int(priceTemp + 0.5; 425 if(table[i].getOrderTable(.getRecords([j].getReplaceStatus({ 426 if(table[i].getOrderTable(.getRecords([j].getReplaceTableNumExist( {// 说明代点成功 427 System.out.print(table[i].getOrderTable(.getRecords([j].getOrderNum( + " table " + table[i].getTableNumber( + " pay for table "; 428 System.out.println(table[i].getOrderTable(.getRecords([j].getReplaceTableNum( + " " + priceTempInt * table[i].getOrderTable(.getRecords([j].getNum(; 429 } 430 else { 431 System.out.println("Table number :"+ table[i].getOrderTable(.getRecords([j].getReplaceTableNum( +" does not exist"; 432 continue;// 结束本条记录,不进行求和 433 } 434 } 435 else { 436 boolean overFlag = false; 437 for(int k = j+1; k < table[i].getOrderTable(.getTotalNum(; k++ { 438 if(table[i].getOrderTable(.getRecords([j].getDishThis(.getName(.equals(table[i].getOrderTable(.getRecords([k].getDishThis(.getName( { 439 overFlag = true; 440 break; 441 } 442 } 443 if(overFlag { 444 continue; 445 } 446 System.out.print(checkRepeatNumber[normalFlag] + " " + table[i].getOrderTable(.getRecords([j].getDishThis(.getName(; 447 System.out.println(" " + priceTempInt * table[i].getOrderTable(.getRecords([j].getNum(;// 四舍五入输出点所有量该菜的价格 448 } 449 if(table[i].getOrderTable(.getRecords([j].getDeleteStatus( { 450 if(table[i].getOrderTable(.getRecords([j].getDeleteRepeat( {// 重复删除的一条记录 451 System.out.println("deduplication " + table[i].getOrderTable(.getRecords([j].getOrderNum(; 452 } 453 } 454 455 if(table[i].getOrderTable(.getRecords([j].getDeleteStatus( {// 如果是删除了的,直接结束 456 continue;// 直接结束本条记录 457 } 458 int recordPrice = (int((priceTempInt * table[i].getOrderTable(.getRecords([j].getNum( * accountPercent + 0.5;// 本条记录的菜品价格总和 459 table[i].getOrderTable(.addOrderPrice(recordPrice;// 求和 460 table[i].getOrderTable(.addOrderPriceOrigin(priceTempInt * table[i].getOrderTable(.getRecords([j].getNum(;// 求和 461 normalFlag ++; 462 } 463 else { 464 System.out.println("record serial number sequence error"; 465 continue;// 直接结束本条记录 466 } 467 } 468 } 469 470 if(table[i].getOrderTable(.getRecords([j].getNumError( {// 序号输入错误 471 System.out.println("wrong format"; 472 continue;// 结束本条记录 473 } 474 475 else if(!table[i].getOrderTable(.getRecords([j].getExistStatus( && !table[i].getOrderTable(.getRecords([j].getNumError({// 该菜品不存在 476 System.out.println(table[i].getOrderTable(.getRecords([j].getDishThis(.getName( + " does not exist"; 477 continue; 478 } 479 } 480 } 481 else if(!table[i].getWrongStatus({// 一律wrong format 482 System.out.println("wrong format"; 483 continue; 484 } 485 else if(!table[i].getTableNumber_Out( {// 桌号超出范围 486 System.out.println(table[i].getTableNumber( + " table num out of range"; 487 continue; 488 } 489 else if(!table[i].getTableStatus( { 490 System.out.println("wrong format"; 491 for(int j = 0; j < table[i].getOrderTable(.getTotalNum(; j++ { 492 System.out.println("record serial number sequence error"; 493 } 494 continue; 495 } 496 } 497 498 for(int i = 1; i <= numberTable; i++ {// 输出每桌总价格 499 if(table[i].getWrongStatus( && table[i].getTableNumber_Out( && table[i].getTableStatus( { 500 501 if(!table[i].getIsOpeningtime( { 502 System.out.println("table " + table[i].getTableNumber( + " out of opening hours"; 503 } 504 else if(!table[i].getTime_isValid( { 505 System.out.print("table " + table[i].getTableNumber( + ": ";// 输出桌号 506 System.out.println("not a valid time period"; 507 } 508 else { 509 System.out.print("table " + table[i].getTableNumber( + ": "; 510 System.out.println(table[i].getOrderTable(.getOrderPriceOrigin( + " " + table[i].getOrderTable(.getOrderPrice(; 511 } 512 } 513 } 514 input.close(; 515 } 516 } 517 518 class Dish {// 菜品类:对应菜谱,包含饭店提供的所有菜的信息。 519 private String name;// 菜品名称 520 private int unit_price; // 原价 521 private boolean isT = false;// 是否为特色菜 522 523 public boolean getIsT( { 524 return isT; 525 } 526 527 public void setIsT(boolean isT { 528 this.isT = isT; 529 } 530 531 public String getName( { 532 return name; 533 } 534 535 public void setName(String name { 536 this.name = name; 537 } 538 539 public int getUnit_price( { 540 return unit_price; 541 } 542 543 public void setUnit_price(int unit_price { 544 this.unit_price = unit_price; 545 } 546 547 public float getPrice(int portion {// 计算菜品价格的方法,输入参数是点菜的份额(输入数据只能是1/2/3,代表小/中/大份) } 548 switch(portion{ 549 case 1:return this.unit_price; 550 case 2:return (floatthis.unit_price * (float1.5; 551 case 3:return (floatthis.unit_price * 2; 552 default:return 0; 553 } 554 } 555 556 public boolean checkPrice(String price{// 检查价格是否为数字 557 boolean status = false; 558 for(int i = 0; i < price.length(; i++ { 559 if(price.charAt(i >= "0" && price.charAt(i <= "9" { 560 status = true; 561 } 562 else { 563 status = false; 564 break; 565 } 566 } 567 return status; 568 } 569 570 public boolean checkPortion(String portion{// 检查份额是否为数字 571 boolean status = false; 572 for(int i = 0; i < portion.length(; i++ { 573 if(portion.charAt(i >= "0" && portion.charAt(i <= "9" { 574 status = true; 575 } 576 else { 577 status = false; 578 break; 579 } 580 } 581 return status; 582 } 583 584 public boolean checkNumber(String number{// 检查份数是否为数字 585 boolean status = false; 586 for(int i = 0; i < number.length(; i++ { 587 if(number.charAt(i >= "0" && number.charAt(i <= "9" { 588 status = true; 589 } 590 else { 591 status = false; 592 break; 593 } 594 } 595 return status; 596 } 597 } 598 599 class Menu {// 菜谱类:对应菜谱,包含饭店提供的所有菜的信息。 600 private Dish dishAll[] = new Dish[6]; 601 public Dish searthDish(String dishName{//根据菜名在菜谱中查找菜品信息,返回Dish对象。 602 for(int i = 0; i < 6; i++ { 603 if(dishAll[i] == null { 604 dishAll[i] = new Dish(;// 分配空间 605 } 606 if(dishName.equals(dishAll[i].getName({ 607 return dishAll[i]; 608 } 609 } 610 return null;// 说明该菜并不存在 611 } 612 public void addDish(String dishName, int unit_price, boolean isT, int N{// 添加一道菜品信息 613 Dish Replace = new Dish(; 614 Replace.setName(dishName; 615 Replace.setUnit_price(unit_price; 616 Replace.setIsT(isT; 617 if(this.dishAll[N] == null 618 this.dishAll[N] = new Dish(;// 分配空间 619 this.dishAll[N] = Replace; 620 } 621 } 622 623 class Record {// 点菜记录类:保存订单上的一道菜品记录 624 private String recordTemp = new String(;// 临时存储的记录 625 626 private boolean replaceTableNumExist = false;// 代点菜桌号存在情况 627 628 private boolean isMix = false;// 是否为夹杂的菜谱 629 630 private boolean isDeleteRecord = false;// 是否为删除记录 631 632 private int deleteNum;// 要删除的序号 633 634 private boolean deleteErrorStatus = false;// 是否删除错误 635 636 private boolean wrongStatus = false;// 是否输出wrong format 637 638 boolean existStatus = true;// 是否存在该菜品 639 640 private boolean replaceStatus = false;// 判断该记录是否为代点菜记录 641 642 private int replaceTableNum;// 代点单的桌号 643 644 private boolean deleteStatus = false;// 用于判断是否删除,删除了说明为true不可用,false则没有删除,可用 645 646 private boolean deleteRepeat = false;// 是否重复删除 647 648 private boolean numError = false;// 序号错误 649 650 private int orderNum;// 序号 651 652 private Dish dishThis = new Dish(;// 本条记录的菜品 653 654 private int portion;// 份额 655 656 private int num;// 份数 657 658 private float recordPrice;// 本条记录的价格 659 660 public boolean getReplaceTableNumExist( { 661 return replaceTableNumExist; 662 } 663 664 public void setReplaceTableNumExist(boolean replaceTableNumExist { 665 this.replaceTableNumExist = replaceTableNumExist; 666 } 667 668 public int getReplaceTableNum( { 669 return replaceTableNum; 670 } 671 672 public void setReplaceTableNum(int replaceTableNum { 673 this.replaceTableNum = replaceTableNum; 674 } 675 676 public boolean getNumError( { 677 return numError; 678 } 679 680 public void setNumError(boolean numError { 681 this.numError = numError; 682 } 683 684 public boolean getIsDeleteRecord( { 685 return isDeleteRecord; 686 } 687 688 public void setIsDeleteRecord(boolean isDeleteRecord { 689 this.isDeleteRecord = isDeleteRecord; 690 } 691 692 public int getDeleteNum( { 693 return deleteNum; 694 } 695 696 public void setDeleteNum(int deleteNum { 697 this.deleteNum = deleteNum; 698 } 699 700 public boolean getDeleteErrorStatus( { 701 return deleteErrorStatus; 702 } 703 704 public void setDeleteErrorStatus(boolean deleteErrorStatus { 705 this.deleteErrorStatus = deleteErrorStatus; 706 } 707 708 public boolean getWrongStatus( { 709 return wrongStatus; 710 } 711 712 public void setWrongStatus(boolean wrongStatus { 713 this.wrongStatus = wrongStatus; 714 } 715 716 public boolean getExistStatus( { 717 return existStatus; 718 } 719 720 public void setExistStatus(boolean existStatus { 721 this.existStatus = existStatus; 722 } 723 724 public float getRecordPrice( { 725 return recordPrice; 726 } 727 728 public void setRecordPrice(float recordPrice { 729 this.recordPrice = recordPrice; 730 } 731 732 public boolean getIsMix( { 733 return isMix; 734 } 735 736 public void setIsMix(boolean isMix { 737 this.isMix = isMix; 738 } 739 740 public boolean getDeleteRepeat( { 741 return deleteRepeat; 742 } 743 744 public void setDeleteRepeat(boolean deleteRepeat { 745 this.deleteRepeat = deleteRepeat; 746 } 747 748 public boolean getDeleteStatus( { 749 return deleteStatus; 750 } 751 752 public void setDeleteStatus(boolean deleteStatus { 753 this.deleteStatus = deleteStatus; 754 } 755 756 public String getRecordTemp( { 757 return recordTemp; 758 } 759 760 public boolean getReplaceStatus( { 761 return replaceStatus; 762 } 763 764 public void setReplaceStatus(boolean replaceStatus { 765 this.replaceStatus = replaceStatus; 766 } 767 768 public void setRecordTemp(String recordTemp { 769 this.recordTemp = recordTemp; 770 } 771 772 public boolean getStatus( {// 得到是否删除的状态 773 return deleteStatus; 774 } 775 776 public void setStatus(boolean deleteStatus {// 设置状态 777 this.deleteStatus = deleteStatus; 778 } 779 780 public int getPortion( {// 得到份额 781 return portion; 782 } 783 784 public void setPortion(int portion {// 设置份额 785 this.portion = portion; 786 } 787 788 public int getNum( {// 得到份数 789 return num; 790 } 791 792 public void setNum(int num {// 设置份数 793 this.num = num; 794 } 795 796 public int getOrderNum( {// 得到序号 797 return orderNum; 798 } 799 800 public void setOrderNum(int orderNum {// 设置序号 801 this.orderNum = orderNum; 802 } 803 804 public Dish getDishThis( {// 得到菜品 805 return dishThis; 806 } 807 808 public void setDishThis(Dish dishThis {// 设置菜品 809 this.dishThis = dishThis; 810 } 811 812 } 813 814 class Order {// 订单类:保存用户点的所有菜的信息。 815 private Record[] records = new Record[10];// 保存订单上每一道的记录 816 817 private int totalNum;// 记录数 818 819 private int orderPrice;// 本条订单菜价总和(未算入特定时间的折扣) 820 821 private int orderPriceOrigin;// 原始价 822 823 public void addOrderPriceOrigin(int recordPrice { 824 this.orderPriceOrigin += recordPrice; 825 } 826 827 public int getOrderPriceOrigin( { 828 return orderPriceOrigin; 829 } 830 831 public void setOrderPriceOrigin(int orderPriceOrigin { 832 this.orderPriceOrigin = orderPriceOrigin; 833 } 834 835 public void addOrderPrice(int recordPrice { 836 this.orderPrice += recordPrice; 837 } 838 839 public int getOrderPrice( { 840 return orderPrice; 841 } 842 843 public void setOrderPrice(int orderPrice { 844 this.orderPrice = orderPrice; 845 } 846 847 public int getTotalNum( {// 得到记录数 848 return this.totalNum; 849 } 850 851 public void addTotalNum( {// 给记录数+1 852 this.totalNum ++; 853 } 854 855 public float getTotalPrice({// 计算订单的总价 856 float totalPrice = 0; 857 for(int i = 0; i < this.totalNum; i++ { 858 if(getRecords([i].getStatus( 859 totalPrice += getRecords([i].getDishThis(.getPrice(1; 860 } 861 return totalPrice; 862 } 863 864 public Record addARecord(int orderNum,Dish dish,int portion,int num{// 添加一条菜品信息到订单中。 865 Record records = new Record(; 866 records.setDishThis(dish; 867 records.setOrderNum(orderNum; 868 records.setNum(num; 869 records.setPortion(portion; 870 this.totalNum ++;// 订单内菜品数需要+1 871 return records; 872 } 873 874 public void delARecordByOrderNum(int orderNum{// 根据序号删除一条记录 875 boolean flag = false; 876 for(int i = 0; i < this.totalNum; i++ { 877 if(getRecords([i].getOrderNum( == orderNum { 878 flag = true; 879 if(getRecords([i].getStatus( {// 说明没有删除 880 getRecords([i].setStatus(false; 881 } 882 else {// 说明重复删除了 883 System.out.println("deduplication " + orderNum; 884 } 885 } 886 } 887 if(flag == false { 888 System.out.println("delete error"; 889 } 890 } 891 892 public boolean checkOrderNum( {// 判断序号是不是从小到大的 893 boolean flag = true; 894 for(int i = 0; i < this.totalNum; i++ {// 小于100防止越界 895 for(int j = i+1; j < this.totalNum; j++ {// 同上 896 if(getRecords([j].getOrderNum( < getRecords([i].getOrderNum({ 897 flag = false; 898 break; 899 } 900 else 901 flag = true; 902 } 903 if(flag == false 904 return flag; 905 } 906 return true; 907 } 908 909 public Record[] getRecords( {// 得到record 910 for(int i = 0; i < 10; i++ { 911 if(this.records[i] == null 912 this.records[i] = new Record(; 913 } 914 return records; 915 } 916 917 public void setRecords(Record records, int N {// 设置record[N] 918 if(N < 10// 防止数组越界 919 this.records[N] = records; 920 } 921 } 922 923 class Table{ 924 private boolean wrongStatus = true;// 桌号是否为数字 925 926 private boolean time_isValid = true;// 时间是否合法 927 928 private boolean tableNumber_Out = true;// 是否超出桌号范围 929 930 private boolean tableStatus = true;// 该桌是否可用,是否连续输出错误记录 931 932 private boolean isOpeningtime = true;// 是否为营业时间 933 934 private String tableInfo = new String(;// 桌子信息 935 936 private Time tableTime = new Time(;// 该桌时间 937 938 private Dish dish[] = new Dish[4];// 用来存储用户输入的需要的菜品 939 940 private Order orderTable = new Order(;// 本桌订单 941 942 private int tableNumber;// 桌号 943 944 public boolean getWrongStatus( { 945 return wrongStatus; 946 } 947 948 public void setWrongStatus(boolean wrongStatus { 949 this.wrongStatus = wrongStatus; 950 } 951 952 public boolean getTime_isValid( { 953 return time_isValid; 954 } 955 956 public void setTime_isValid(boolean time_isValid { 957 this.time_isValid = time_isValid; 958 } 959 960 public boolean getTableNumber_Out( { 961 return tableNumber_Out; 962 } 963 964 public void setTableNumber_Out(boolean tableNumber_Out { 965 this.tableNumber_Out = tableNumber_Out; 966 } 967 968 public boolean getTableStatus( { 969 return tableStatus; 970 } 971 972 public void setTableStatus(boolean tableStatus { 973 this.tableStatus = tableStatus; 974 } 975 976 public boolean getIsOpeningtime( { 977 return isOpeningtime; 978 } 979 980 public void setIsOpeningtime(boolean isOpeningtime { 981 this.isOpeningtime = isOpeningtime; 982 } 983 984 public Time getTableTime( { 985 return tableTime; 986 } 987 988 public void setTableTime(Time tableTime { 989 this.tableTime = tableTime; 990 } 991 992 public String getTableInfo( { 993 return tableInfo; 994 } 995 996 public void setTableInfo(String tableInfo { 997 this.tableInfo = tableInfo; 998 } 999 1000 public Order getOrderTable( {// 得到本桌记录 1001 return orderTable; 1002 } 1003 1004 public void setOrderTable(Order orderTable {// 设置本桌记录 1005 this.orderTable = orderTable; 1006 } 1007 1008 public boolean checkTableNumber(String tableNumber {// 用于判断桌号输入是否合法 1009 boolean status = false; 1010 for(int i = 0; i < tableNumber.length(; i++ { 1011 if(tableNumber.charAt(i >= "0" && tableNumber.charAt(i <= "9" { 1012 status = true; 1013 } 1014 else { 1015 status = false; 1016 break; 1017 } 1018 } 1019 return status; 1020 } 1021 1022 public void setTableNumber(int tableNumber {// 设置桌号 1023 this.tableNumber = tableNumber; 1024 } 1025 1026 public int getTableNumber( {// 得到桌号 1027 return this.tableNumber; 1028 } 1029 1030 public void setDishN(String name, int unit_price, int N {// 设置dish[N] 1031 this.dish[N].setName(name; 1032 this.dish[N].setUnit_price(unit_price; 1033 } 1034 1035 public Dish[] getDish( {// 得到dish[] 1036 for(int i = 0; i < 4; i++ { 1037 if(this.dish[i] == null 1038 dish[i] = new Dish(; 1039 } 1040 return this.dish; 1041 } 1042 1043 } 1044 1045 class Time{ 1046 private int year;// 年 1047 1048 private int month;// 月 1049 1050 private int day;// 日 1051 1052 private int hour;// 小时 1053 1054 private int minute;// 分钟 1055 1056 private int second;// 秒 1057 1058 //设置当前下单时间 1059 public void setTableTime(int year, int month, int day, int hour, int minute, int second { 1060 this.year = year; 1061 this.month = month; 1062 this.day = day; 1063 this.hour = hour; 1064 this.minute = minute; 1065 this.second = second; 1066 } 1067 1068 public int getYear( { 1069 return year; 1070 } 1071 1072 public int getMonth( { 1073 return month; 1074 } 1075 1076 public int getDay( { 1077 return day; 1078 } 1079 1080 public int getHour( { 1081 return hour; 1082 } 1083 1084 public int getMinute( { 1085 return minute; 1086 } 1087 1088 public int getSecond( { 1089 return second; 1090 } 1091 1092 public int week(int year, int month, int day { 1093 Calendar calendar = Calendar.getInstance(; 1094 calendar.set(Calendar.YEAR, year;// 设置年 1095 calendar.set(Calendar.MONTH, month-1;// 设置月 1096 calendar.set(Calendar.DATE, day;// 设置日 1097 int week = calendar.get(Calendar.DAY_OF_WEEK - 1; 1098 if(week == 0{// 说明是星期日 1099 week = 7; 1100 } 1101 return week; 1102 } 1103 1104 public boolean validDate(String year, String month, String day {// 判断日期是否合法 1105 if(year.length( == 4 { 1106 if(month.length( <= 2 && day.length( <= 2 { 1107 for(int i = 0; i < month.length(; i++ { 1108 if(month.charAt(i < "0" || month.charAt(i > "9" { 1109 return false; 1110 } 1111 } 1112 for(int i = 0; i < day.length(; i++ { 1113 if(day.charAt(i < "0" || day.charAt(i > "9" { 1114 return false; 1115 } 1116 } 1117 return true; 1118 } 1119 else { 1120 return false; 1121 } 1122 } 1123 else { 1124 return false; 1125 } 1126 } 1127 1128 public boolean validTime(String hour, String minute, String second {// 判断时间是否合法 1129 if(hour.length( == 2 && minute.length( == 2 && second.length( == 2 { 1130 for(int i = 0; i < 2; i++ { 1131 if(hour.charAt(i < "0" || hour.charAt(i > "9" || minute.charAt(i < "0" || minute.charAt(i > "9" || second.charAt(i < "0" || second.charAt(i > "9" { 1132 return false; 1133 } 1134 } 1135 return true; 1136 } 1137 else{ 1138 return false; 1139 } 1140 } 1141 1142 public boolean checkDate(int year, int month, int day {// 判断日期是否输入合法 1143 int month_maxnum[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// 当月最大天数 1144 if(year >= 2022 && year <= 2023 { 1145 if(month >= 1 && month <= 12 { 1146 if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0 1147 month_maxnum[2] = 29; 1148 else 1149 month_maxnum[2] = 28; 1150 if(day >= 1 && day <= month_maxnum[month] 1151 return true; 1152 else 1153 return false; 1154 } 1155 else 1156 return false; 1157 } 1158 else 1159 return false; 1160 } 1161 1162 public boolean checkTime(int hour, int minute, int second {// 检查该天时间是否合法 1163 if(hour >= 0 && hour <= 24 { 1164 if(minute >= 0 && minute <= 60 { 1165 if(second >=0 && second <= 60 1166 return true; 1167 else 1168 return false; 1169 } 1170 return false; 1171 } 1172 else 1173 return false; 1174 } 1175 // 判断是否和折扣情况 1176 public float account({ 1177 int now = hour * 10000 + minute * 100 + second; 1178 int time1 = 170000;// 17点整 1179 int time2 = 203000;// 20点半 1180 int time3 = 103000;// 10点半 1181 int time4 = 143000;// 14点半 1182 int time5 = 93000;// 9点半 1183 int time6 = 213000;// 21点半 1184 if(week(year, month, day >= 1 && week(year, month, day <= 5 {// 周一到周五 1185 if(now >= time1 && now <= time2 1186 return (float0.8; 1187 else if(now >= time3 && now <= time4 1188 return (float0.6; 1189 else 1190 return 0;// 不在营业 1191 } 1192 else { 1193 if(now >= time5 && now <= time6 1194 return 1; 1195 else 1196 return 0;// 不在营业 1197 } 1198 } 1199 1200 // 是否在营业 1201 public boolean isOpen(int year, int month, int day, int hour, int minute, int second{ 1202 int now = hour * 10000 + minute * 100 + second; 1203 int time1 = 170000;// 17点整 1204 int time2 = 203000;// 20点半 1205 int time3 = 103000;// 10点半 1206 int time4 = 143000;// 14点半 1207 int time5 = 93000;// 9点半 1208 int time6 = 213000;// 21点半 1209 if(week(year, month, day >= 1 && week(year, month, day <= 5 {// 周一到周五 1210 if(now >= time1 && now <= time2 1211 return true; 1212 else if(now >= time3 && now <= time4 1213 return true; 1214 else 1215 return false; 1216 } 1217 else { 1218 if(now >= time5 && now <= time6 1219 return true; 1220 else 1221 return false; 1222 } 1223 } 1224 1225 // 判断特色菜是否打折 1226 public boolean checkT({ 1227 if(week(this.year, this.month, this.day >= 1 && week(this.year, this.month, this.day <= 5 { 1228 return true; 1229 } 1230 else 1231 return false; 1232 } 1233 }
一开始我全部都是根据输入的信息生硬的使用正则表达式进行编程,半路发现功能无法实现,只能重新换方法,我意识到编程前首先是要把题目要求弄清,多读几遍题目,再一个就是要想好编程中用的方法再动手实现。
(3)踩坑心得:
日期7-6中,将之前的代码拿过来也可以通过所有测试点,这时说明通过所有测试点并不是意味着写的有多好,只是大体功能上可以使用。
(4)改进意见:
2.像菜单这种难度较大的题目,可以从一开始先给一个基础版,以后再加进阶版,比如:我们做过的菜单有3、4,而明显之前有1、2,可是从没见过。
1:面对题目较长时一定要多读题,画一画类图,再下手,不要一股脑瞎做。
3:现在一个最大的问题就是上课听的时候似懂非懂,一下课就不记得讲过什么,尤其是模式。