PTA 4-6次总结

科技资讯 投稿 9300 0 评论

PTA 4-6次总结

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:现在一个最大的问题就是上课听的时候似懂非懂,一下课就不记得讲过什么,尤其是模式。

 

编程笔记 » PTA 4-6次总结

赞同 (52) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽