Java第5,6及期中PTA作业总结

前言:

  Java是一门非常重要的计算机语言,也是非常广泛使用的编程语言之一。学习Java对我的职业发展和技术能力提升都有着很大的帮助。在我学习Java的过程中,我积累了一些心得体会,这些经验对我学习Java产生了很大的影响。

首先,我需要不断地练习。练习是我学好Java的关键。在本次的习题集里,我同样认识到了许多只有通过练习才能够学习到的知识。

其次,我需要找到适合自己的学习方法。每个人的学习方法都不同,所以我需要找到适合自己的学习方式。我采用的是多种学习方式结合起来的方式,包括看书、刷题、写代码等等。不同的方法可以让我更全面地理解Java 的知识,并提高我的编程技能。

另外,我还需要不断地更新自己的知识。Java 是一门发展迅速的编程语言,新的版本和技术层出不穷。因此,在我学习Java的过程中,我需要保持持续学习的态度,跟上最新的发展。我会定期了解最新版的 Java 语言规范,并研究一些新的开源工具、框架以及库等等。

最后,我也需要不断去拓宽自己的视野。学习Java只是我的个人能力提升之一,我需要关注整个行业的发展趋势,了解各种技术、创新和尝试,掌握一些与 Java 并行关联的高端知识和前沿技术。这将协助我更好地为未来的职业生涯做准备并不断提升自己的价值。

总而言之,学习Java需要不断的练习,找到适合自己的学习方法,更新自己的知识和拓宽自己的视野,这些都是非常重要的。只有在不断锤炼中,才能紧跟着行业最新发展潮流,提高自己的竞争力,同时为行业的进步和发展贡献出自己的力量。

目录:

一:三次作业遇到的BUG(踩坑警告)

二:代码思路与解决方法

三:作业总结与代码改进

四:一些感想

一:三次作业遇到的BUG(踩坑警告)

1:OOP训练集5

  1. 菜单计价程序-4

import java.text.SimpleDateFormat;

import java.time.DayOfWeek;

import java.time.LocalDate;

import java.time.LocalTime;

import java.time.format.DateTimeFormatter;

import java.util.Scanner;

import java.text.ParseException;

 

import static java.lang.Math.max;

 

public class Main{

    public static void main(String[] args){

        Scanner input = new Scanner(System.in);

        String getStr;

        String[] str = new String[0];

        Menu[] menu = new Menu[100];

        int menuNumber = 0;             //菜单数量

        /*菜单模块*/

        while(input.hasNext()){

            getStr = input.nextLine();

            str = getStr.split(" ");

            /*输入end*/

            if(getStr.equals("end")) break;

            /*输入table进入到下一模块*/

            if(str[0].equals("table")) break;

            if(str.length==2||str.length==3) {

                /*字符串为数字且首位不为0*/

                if (str[1].matches("[0-9]{1,3}") && !str[1].startsWith("0")) {

                    if (Integer.parseInt(str[1]) > 0 && Integer.parseInt(str[1]) < 300) {

                        menu[menuNumber] = new Menu(str[0], Integer.parseInt(str[1]));

                    } else {                                                          //超出规定菜价

                        menu[menuNumber] = new Menu();

                        menu[menuNumber].isTruePrice = false;

                        System.out.println(str[0] + " price out of range " + str[1]);

                    }/*存在三个字符串,即特色菜*/

                    if (str.length == 3) {

                        if (str[2].equals("T"))

                            menu[menuNumber].isSpecial = true;

                    }

                }

                /*格式错误*/

                else {

                    menu[menuNumber] = new Menu();

                    menu[menuNumber].isFormat = false;

                    System.out.println("wrong format");

                }

                menuNumber++;

            }else{

                System.out.println("wrong format");

            }

        }

        /*第一张餐桌*/

        Table[] table = new Table[100];

        int tableNumber = 0;

        /*有四个字符串*/

        if(str.length==4){

            if(judgeTableNumber(str[1])&&judgeDate(str[2])&&judgeTime(str[3])){

                table[tableNumber] = new Table(Integer.parseInt(str[1]),str[2],str[3]);

                if(!table[tableNumber].validTime(str[2])){

                    System.out.println("not a valid time period");

                    table[tableNumber].isFormat = false;

                }

                if(!table[tableNumber].dateError(str[2])){

                    System.out.println(str[1]+" date error");

                    table[tableNumber].isFormat = false;

                }

                if(table[tableNumber].getDiscount()==0&&table[tableNumber].isFormat) {

                    System.out.print("table "+table[tableNumber].getCount());

                    System.out.println(" out of opening hours");

                    table[tableNumber].isFormat = false;

                }

                if(table[tableNumber].isFormat)

                    System.out.println("table " + str[1] + ": "); //输出桌号

            }else{                                            //格式错误

                System.out.println("wrong format");

                table[tableNumber] = new Table();

                table[tableNumber].isFormat = false;

            }

        }else{

            System.out.println("wrong format");

            table[tableNumber] = new Table();

            table[tableNumber].isFormat = false;

        }

        /*进入最傻逼的部分*/

        Order[][] order = new Order[100][100];

        int orderNUmber = 0;            //订单数目

        int deleteNumber;               //删除编号

        int orderCount = 0;

        boolean countError = false;

        while(input.hasNext()){

            getStr = input.nextLine();

            str = getStr.split(" ");

            if(getStr.equals("end"))

            {

                for(int i=0;i<=tableNumber;i++){

                    for(int j=0;j<orderNUmber;j++) {

                        if(table[i].isFormat){

                            table[i].setOriginal(order[i][j].getEveryPrice());

                            if(order[i][j].isSpecial){

                                if(table[i].haveDiscount)

                                    table[i].setBargain(Math.round(order[i][j].getEveryPrice()*0.7));

                                else

                                    table[i].setBargain(order[i][j].getEveryPrice());

                            }else{

                                table[i].setBargain(Math.round(order[i][j].getEveryPrice()*table[i].getDiscount()));

                            }

                        }

                    }

                    if(table[i].isFormat){

                        System.out.print("table "+table[i].getCount());

                        System.out.print(": ");

                        System.out.printf("%.0f ",table[i].getOriginal());

                        System.out.println(Math.round(table[i].getBargain()));

                    }

                }

                break;

            }

            if(str.length==2)

            {

                if(str[1].equals("delete")&&str[0].matches("[0-9]{1,2}")){

                    deleteNumber = Integer.parseInt(str[0]);

                    if(deleteNumber>orderNUmber){

                        System.out.println("delete error");

                    }else {

                        if(order[tableNumber][deleteNumber-1].isDelete){

                            System.out.println("deduplication "+deleteNumber);

                        }

                        order[tableNumber][deleteNumber-1].isDelete = true;

                    }

                }else if(str[1].matches("[0-9]{1,2}")){

                    if(table[tableNumber].isFormat){

                        System.out.println("invalid dish");

                    }

                }

            } else if (str.length == 3) {

                if(str[1].matches("[0-9]{1,2}")&&str[2].equals("T")){

                    if(table[tableNumber].isFormat){

                        System.out.println("invalid dish");

                    }

                }

            } else if (str.length == 4)

            {

                if (str[0].equals("table")) {

                    tableNumber++;

                    orderNUmber = 0;

                    orderCount = 0;

                    if (judgeTableNumber(str[1]) && judgeDate(str[2]) && judgeTime(str[3])) {

                        table[tableNumber] = new Table(Integer.parseInt(str[1]), str[2], str[3]);

                        if(!table[tableNumber].validTime(str[2])){

                            System.out.println("not a valid time period");

                            table[tableNumber].isFormat = false;

                        }

                        if(table[tableNumber].getDiscount()==0) {

                            System.out.print("table "+table[tableNumber].getCount());

                            System.out.println(" out of opening hours");

                            table[tableNumber].isFormat = false;

                        }

                        else System.out.println("table " + str[1] + ": "); //输出桌号

                    } else {

                        System.out.println("wrong format");

                        table[tableNumber] = new Table();

                        table[tableNumber].isFormat = false;

                    }

                } else if (str[0].matches("[0-9]{1,2}") && str[2].matches("[0-9]{1,2}")) {

                    if (Integer.parseInt(str[0]) <= orderCount) {

                        countError = true;

                        if(table[tableNumber].isFormat)

                            System.out.println("record serial number sequence error");

                    } else {

                        order[tableNumber][orderNUmber] = new Order();

                        order[tableNumber][orderNUmber].setCount(Integer.parseInt(str[0]));

                        order[tableNumber][orderNUmber].setName(str[1]);

                        order[tableNumber][orderNUmber].setPortion(Integer.parseInt(str[2]));

                        order[tableNumber][orderNUmber].setNumber(Integer.parseInt(str[3]));

                        if(countError){

                            order[tableNumber][orderNUmber].isOutput = false;

                            order[tableNumber][orderNUmber].isDelete = true;

                            countError = false;

                        }

                        if(str[0].matches("[0-9]{1,2}")&&str[0].startsWith("0")){

                            System.out.println("wrong format");

                            order[tableNumber][orderNUmber].isOutput = false;

                            order[tableNumber][orderNUmber].isDelete = true;

                        }

                        int i;

                        for (i = menuNumber - 1; i >= 0; i--) {

                            if (menu[i].isMenu(str[1])) {

                                order[tableNumber][orderNUmber].setUnitPrice(menu[i].getPrice());

                                order[tableNumber][orderNUmber].exist = true;

                                if (menu[i].isSpecial) order[tableNumber][orderNUmber].isSpecial = true;

                                break;

                            }

                        }

                        if (i == -1) {

                            System.out.println(str[1] + " does not exist");

                            order[tableNumber][orderNUmber].exist = false;

                        }

                        if (order[tableNumber][orderNUmber].isSpecial) {

                            if (Integer.parseInt(str[2]) != 3 && Integer.parseInt(str[2]) != 2 && Integer.parseInt(str[2]) != 1) {

                                if (table[tableNumber].isFormat&&order[tableNumber][orderNUmber].exist)

                                    System.out.println(Integer.parseInt(str[0]) + " portion out of range " + Integer.parseInt(str[2]));

                                order[tableNumber][orderNUmber].isOutput = false;

                                order[tableNumber][orderNUmber].isDelete = true;

                            }

                        } else {

                            if (Integer.parseInt(str[2]) != 3 && Integer.parseInt(str[2]) != 2 && Integer.parseInt(str[2]) != 1) {

                                if (table[tableNumber].isFormat&&order[tableNumber][orderNUmber].exist)

                                    System.out.println(Integer.parseInt(str[0]) + " portion out of range " + Integer.parseInt(str[2]));

                                order[tableNumber][orderNUmber].isOutput = false;

                                order[tableNumber][orderNUmber].isDelete = true;

                            }

                        }

                        if (Integer.parseInt(str[3]) > 15 || Integer.parseInt(str[3]) < 0) {

                            if (table[tableNumber].isFormat&&order[tableNumber][orderNUmber].exist)

                                System.out.println(Integer.parseInt(str[0]) + " num out of range " + Integer.parseInt(str[3]));

                            order[tableNumber][orderNUmber].isOutput = false;

                            order[tableNumber][orderNUmber].isDelete = true;

                        }

                        if (order[tableNumber][orderNUmber].exist && order[tableNumber][orderNUmber].isOutput && table[tableNumber].isFormat) {

                            System.out.print(str[0] + " " + str[1] + " ");

                            System.out.printf("%.0f\n", order[tableNumber][orderNUmber].getEveryPrice());

                        }

                        if(order[tableNumber][orderCount].isOutput){

                            orderCount = max(Integer.parseInt(str[0]),orderCount);

                        }

                        orderNUmber++;

                    }

                }

            } else if (str.length==5) {

                if(str[0].startsWith("t")){

                    System.out.println("wrong format");

                }

                if(str[0].matches("[0-9]{1,2}")&&str[1].matches("[0-9]{1,2}")&&str[3].matches("[0-9]{1,2}")){

                    if (Integer.parseInt(str[0]) <= orderNUmber) {

                        System.out.println("record serial number sequence error");

                    } else {

                        order[tableNumber][orderNUmber] = new Order();

                        order[tableNumber][orderNUmber].setOtherCount(Integer.parseInt(str[0]));

                        order[tableNumber][orderNUmber].setCount(Integer.parseInt(str[1]));

                        order[tableNumber][orderNUmber].setName(str[2]);

                        order[tableNumber][orderNUmber].setPortion(Integer.parseInt(str[3]));

                        order[tableNumber][orderNUmber].setNumber(Integer.parseInt(str[4]));

                        int j;

                        for(j=0;j<tableNumber;j++){

                            if(Integer.parseInt(str[0])==table[j].getCount()){

                                System.out.print(str[1]+" table "+tableNumber+1+" pay for table "+j+1);

                                System.out.printf("%.0f\n", order[tableNumber][orderNUmber].getEveryPrice());

                            }

                        }if(j==tableNumber){

                            System.out.println("Table number :"+str[0]+" does not exist");

                            order[tableNumber][orderNUmber].isOutput = false;

                            order[tableNumber][orderNUmber].isDelete = true;

 

                        }

                        if(str[1].matches("[0-9]{1,2}")&&str[1].startsWith("0")){

                            System.out.println("wrong format");

                            order[tableNumber][orderNUmber].isOutput = false;

                            order[tableNumber][orderNUmber].isDelete = true;

                        }

                        int i;

                        for (i = menuNumber - 1; i >= 0; i--) {

                            if (menu[i].isMenu(str[2])) {

                                order[tableNumber][orderNUmber].setUnitPrice(menu[i].getPrice());

                                order[tableNumber][orderNUmber].exist = true;

                                if (menu[i].isSpecial) order[tableNumber][orderNUmber].isSpecial = true;

                                break;

                            }

                        }

                        if (i == -1) {

                            System.out.println(str[1] + " does not exist");

                            order[tableNumber][orderNUmber].exist = false;

                        }

                        if (order[tableNumber][orderNUmber].isSpecial) {

                            if (Integer.parseInt(str[3]) != 3 && Integer.parseInt(str[3]) != 2 && Integer.parseInt(str[3]) != 1) {

                                if (table[tableNumber].isFormat)

                                    System.out.println(Integer.parseInt(str[1]) + " portion out of range " + Integer.parseInt(str[3]));

                                order[tableNumber][orderNUmber].isOutput = false;

                                order[tableNumber][orderNUmber].isDelete = true;

                            }

                        } else {

                            if (Integer.parseInt(str[3]) != 3 && Integer.parseInt(str[3]) != 2 && Integer.parseInt(str[3]) != 1) {

                                if (table[tableNumber].isFormat)

                                    System.out.println(Integer.parseInt(str[1]) + " portion out of range " + Integer.parseInt(str[3]));

                                order[tableNumber][orderNUmber].isOutput = false;

                                order[tableNumber][orderNUmber].isDelete = true;

                            }

                        }

                        if (Integer.parseInt(str[4]) > 15 || Integer.parseInt(str[4]) < 0) {

                            if (table[tableNumber].isFormat)

                                System.out.println(Integer.parseInt(str[1]) + " num out of range " + Integer.parseInt(str[4]));

                            order[tableNumber][orderNUmber].isOutput = false;

                            order[tableNumber][orderNUmber].isDelete = true;

                        }

                        if (order[tableNumber][orderNUmber].exist && order[tableNumber][orderNUmber].isOutput && table[tableNumber].isFormat) {

                            System.out.print(str[1] + " " + str[2] + " ");

                            System.out.printf("%.0f\n", order[tableNumber][orderNUmber].getEveryPrice());

                        }

                        orderNUmber++;

                    }

                }

            }

        }

    }

    public static boolean judgeTableNumber(String number){

        return number.matches("[0-9]{1,2}");

    }

    public static boolean judgeDate(String theDate){

        String[] dateStr = theDate.split("/");

        if(!dateStr[0].matches("[0-9]{4}")) return false;

        if(!dateStr[1].matches("[0-9]{1,2}")) return false;

        if(!dateStr[2].matches("[0-9]{1,2}")) return false;

        return true;

    }

    public static boolean judgeTime(String theTime){

        String[] timeStr = theTime.split("/");

        if(!timeStr[0].matches("[0-9]{1,2}")) return false;

        if(!timeStr[1].matches("[0-9]{1,2}")) return false;

        if(!timeStr[2].matches("[0-9]{1,2}")) return false;

        return true;

    }

}

class Menu{

    private String name;

    private int price;

    public boolean isSpecial = false;

    public boolean isFormat = true;

    public boolean isTruePrice = true;

    public Menu() {}

    public Menu(String name,int price){

        this.name = name;

        this.price = price;

    }

    public int getPrice() {return price;}

    public boolean isMenu(String theName){

        return theName.equals(name);

    }

 

}

class Order{

    private int count;

    private String name;

    private int portion;

    private int number;

    private int otherCount;

    private int unitPrice;

    public boolean exist = true;

    public boolean isSpecial = false;

    public boolean isOutput = true;

    public boolean isDelete = false;

    public Order(){}

 

    public void setCount(int count) {this.count = count;}

    public void setName(String name) {this.name = name;}

    public void setPortion(int portion) {this.portion = portion;}

    public void setNumber(int number) {this.number = number;}

    public void setOtherCount(int otherCount) {this.otherCount = otherCount;}

    public void setUnitPrice(int unitPrice) {this.unitPrice = unitPrice;}

    public double getEveryPrice(){

        double everyPrice = 0;

        if(portion==1) everyPrice = unitPrice * number;

        else if(portion==2) everyPrice = Math.round( unitPrice * 1.5 * number);

        else if(portion==3) everyPrice = unitPrice * 2 * number;

        if(this.isDelete) everyPrice = 0;

        return everyPrice;

    }

}

class Table{

    private int count;

    private String date;

    private String time;

    private double original;//原价

    private double bargain;//特价

    public boolean haveDiscount = false;

    public boolean isFormat = true;

    public Table(){}

    public Table(int count,String date,String time){

        this.count = count;

        this.date = date;

        this.time = time;

    }

    public int getCount() {return count;}

    public double getOriginal() {return original;}

    public void setOriginal(double price){

        this.original += price;

    }

    public double getBargain() {return bargain;}

    public void setBargain(double price){

        this.bargain += price;

    }

    public double getDiscount(){

        String inputDate = date;

        String[] dateParts = inputDate.split("/"); // 使用正则表达式分割字符串

        String formattedDate = dateParts[0] + "/" + String.format("%02d", Integer.parseInt(dateParts[1])) + "/" + String.format("%02d", Integer.parseInt(dateParts[2]));

        String inputTime = time;

        String[] timeParts = inputTime.split("/"); // 使用正则表达式分割字符串

        String formattedTime = timeParts[0] + ":" + String.format("%02d", Integer.parseInt(timeParts[1])) + ":" + String.format("%02d", Integer.parseInt(timeParts[2]));

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

        LocalDate judgeDate = LocalDate.parse(formattedDate,dateFormatter);

        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");

        LocalTime judgeTime = LocalTime.parse(formattedTime,timeFormatter);

        LocalTime startEvenTime = LocalTime.parse("16:59:59", timeFormatter);

        LocalTime endEvenTime = LocalTime.parse("20:30:01", timeFormatter);

        LocalTime startNoonTime = LocalTime.parse("10:29:59", timeFormatter);

        LocalTime endTNoonTime = LocalTime.parse("14:30:01", timeFormatter);

        LocalTime weekendStartTime = LocalTime.parse("09:29:59", timeFormatter);

        LocalTime weekendEndTime = LocalTime.parse("21:00:01", timeFormatter);

        DayOfWeek dayOfWeek = judgeDate.getDayOfWeek();

        int dayOfWeekValue = dayOfWeek.getValue();

        double discount;

        if (dayOfWeekValue >= 1 && dayOfWeekValue <= 5) {

            this.haveDiscount = true;

            if(judgeTime.isAfter(startNoonTime)&& judgeTime.isBefore(endTNoonTime)){

                discount = 0.6;

            }else if(judgeTime.isBefore(endEvenTime)&& judgeTime.isAfter(startEvenTime)){

                discount = 0.8;

            }else{

                discount = 0;           //不在营业时间

            }

        } else {

            this.haveDiscount = false;

            if(judgeTime.isAfter(weekendStartTime)&& judgeTime.isBefore(weekendEndTime)){

                discount = 1;

            }else{

                discount = 0;           //不在营业时间

            }

        }

        return discount;

    }

    public boolean isTrueTime(String theDate){

        String[] dateParts = theDate.split("/"); // 使用正则表达式分割字符串

        String formattedDate = dateParts[0] + "/" + String.format("%02d", Integer.parseInt(dateParts[1])) + "/" + String.format("%02d", Integer.parseInt(dateParts[2]));

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

        LocalDate judgeDate = LocalDate.parse(formattedDate,dateFormatter);

        LocalDate startDate = LocalDate.parse("2021/12/31", dateFormatter);

        LocalDate endDate = LocalDate.parse("2024/1/1",dateFormatter);

        return judgeDate.isAfter(startDate)&&judgeDate.isBefore(endDate);

    }

    public boolean validTime(String theDate){

        String[] isDate = new String[10];

        isDate = theDate.split("/");

        return Integer.parseInt(isDate[0]) == 2022 || Integer.parseInt(isDate[0]) == 2023;

    }

    public boolean dateError(String dateString){

        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");

        format.setLenient(false); //设置严格的解析模式

        try {

            format.parse(dateString); //解析日期字符串

            return true;

        } catch (ParseException e) {

            return false;

        }

    }

}

2OOP训练集6

1菜单计价程序-5

import java.time.DateTimeException;

import java.time.LocalDateTime;

import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        Menu menu = new Menu();

        HashMap<String ,String>hash=new HashMap<>();

        String []customer=new String[30];

        int cnt1 = 0;

        ArrayList<Table> tables = new ArrayList<>();

        String str1;

        String str2;

        String str3 = null;

        String []zhe=new String[]{"不甜","微甜","稍甜","甜"};

        String []jin=new String[]{"不酸","微酸","稍酸","酸","很酸"};

        String []chan=new String[]{"不辣","微辣","稍辣","辣","很辣","爆辣"};

        int []tasteGrade=new int [100];

        int []tasteNumber=new int [100];

        int [][]taste  = new int[100][100];

        int tableCount = 0;

        int i, flag = 0;

        int portion = 0, number = 0;

        while (true) {

            str1 = in.next();

            if (str1.equals("T")) {

                if(Objects.equals(str3, " ")){

                    menu.dishes.remove(menu.dishes.size() - 1);

                    System.out.println("wrong format");

                    continue;

                }

                menu.dishes.get(menu.dishes.size() - 1).isT = true;

                str1 = in.next();

            }

            if (str1.equals("table")) break;

            if (str1.equals("end")) break;

            str2 = in.next();

            str3 = " ";

            if(!isNumber(str2)) {

                str3=str2;

                str2 = in.next();

            }

            for (i = 0; i < menu.dishes.size(); i++) {

                if (menu.dishes.get(i).name.equals(str1)) {

                    menu.dishes.get(i).price = Integer.parseInt(str2);

                    flag++;

                    break;

                }

            }

            if (flag == 0) {

                menu.dishes.add(menu.addDish(str1, Integer.parseInt(str2),str3));

            }

            flag = 0;

        }

        if(str1.equals("end")) return ;

        while(!str1.equals("end")){

            int chanGrade=0;

            int chanNumber=0;

            int zheGrade=0;

            int zheNumber=0;

            int jinGrade=0;

            int jinNumber=0;

            String []a;

            String ord;

            String call;

            String useName;

            Table tab= new Table();

            ord = in.nextLine();

            a=ord.split(" ");

            str2=a[1];

            useName=a[3];

            call=a[4];

            String threeCall=call.substring(0,3);

            if(useName.length()>10||call.length()!=11||searchPhone(threeCall)){

                System.out.println("wrong format");

                break;

            }

            String[] Date = a[5].split("/");

            String[] Time =a[6].split("/");

            tab.num = Integer.parseInt(str2);

            int[] intDate = new int[3];

            int[] intTime = new int[3];

            for(i=0;i<3;i++) {

                intDate[i] = Integer.parseInt(Date[i]);

                intTime[i] = Integer.parseInt(Time[i]);

            }

            try {

                tab.time = LocalDateTime.of(intDate[0],intDate[1],intDate[2],intTime[0],intTime[1],intTime[2]);

                tables.add(tab);

                if(!tab.isOpen()) {

                    System.out.println("table " + str2 + " out of opening hours");

                    do {

                        str1 = in.next();

                    } while (!str1.equals("end") && !str1.equals("table"));

                    continue;

                }

            }catch(DateTimeException e){

                System.out.println( tab.num + " date error");

                break;

            }

            System.out.println("table "+str2+": ");

            while (true) {

                str1 = in.next();

                if (str1.equals("end"))

                    break;

                if (str1.equals("table"))

                    break;

                str2 = in.next();

                if (isNumber(str2)) {

                    boolean exist = false;

                    for (Table table : tables) {

                        if (table.num == Integer.parseInt(str1)) {

                            exist = true;

                            break;

                        }

                    }

                    if(exist) {

                        System.out.print(Integer.parseInt(str2) + " table " +tables.get(tableCount).num + " pay for table "

                                + Integer.parseInt(str1) + " ");

                        String str=str1;

                        Record treat = new Record();

                        str1 = in.next();

                        treat.ds = menu.dishes.get(menu.searchDish(str1));

                        if(menu.dishes.get(menu.searchDish(str1)).isT) {

                            str3 = in.next();

                            tasteGrade[Integer.parseInt(str1)]=Integer.parseInt(str3);

                        }

                        else str3=" ";

                        portion = in.nextInt();

                        number = in.nextInt();

                        tasteNumber[Integer.parseInt(str1)]=number;

                        treat.portion = portion;

                        treat.number = number;

                        System.out.print(treat.getPrice() + "\n");

                        if(menu.dishes.get(menu.searchDish(str1)).taste.equals("晋菜")) {

                            if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>4){

                                System.out.println("acidity num out of range :"+jinGrade);

                                str1=in.nextLine();

                                continue;

                            }

                            taste[Integer.parseInt(str)-1][1] += Integer.parseInt(str3)*number;

                            taste[Integer.parseInt(str)-1][4]+=number;

                        }

                        if(menu.dishes.get(menu.searchDish(str1)).taste.equals("川菜")) {

                            if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>5){

                                System.out.println("spicy num out of range :"+str3);

                                str1=in.nextLine();

                                continue;

                            }

                            taste[Integer.parseInt(str)-1][0] += Integer.parseInt(str3)*number;

                            taste[Integer.parseInt(str)-1][3]+=number;

                        }

                        if(menu.dishes.get(menu.searchDish(str1)).taste.equals("浙菜")) {

                            if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>3){

                                System.out.println("sweetness num out of range :"+str3);

                                str1=in.nextLine();

                                continue;

                            }

                            taste[Integer.parseInt(str)-1][2] += Integer.parseInt(str3)*number;

                            taste[Integer.parseInt(str)-1][5]+=number;

                        }

 

                        tables.get(tableCount).add(menu, "代点",str2, str1, portion, number);

                    }

                    else {

                        System.out.println("Table number :"+Integer.parseInt(str1)+" does not exist");

                    }

                }

                else {

                    if (!str2.equals("delete")) {

                        boolean d=false;

                        if(menu.dishes.get(menu.searchDish(str2)).isT) {

                            hash.put(str1,menu.dishes.get(menu.searchDish(str2)).taste);

                            str3 = in.next();

                            portion = in.nextInt();

                            number = in.nextInt();

                            tasteGrade[Integer.parseInt(str1)]=Integer.parseInt(str3);

                            tasteNumber[Integer.parseInt(str1)]=number;

                            d = true;

                            if(menu.dishes.get(menu.searchDish(str2)).taste.equals("晋菜")) {

                                if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>4){

                                    System.out.println("acidity num out of range :"+str3);

                                    str1=in.nextLine();

                                    continue;

                                }

                                jinGrade += Integer.parseInt(str3)*number;

                                jinNumber+=number;

                            }

                            if(menu.dishes.get(menu.searchDish(str2)).taste.equals("川菜")) {

                                if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>5){

                                    System.out.println("spicy num out of range :"+str3);

                                    str1=in.nextLine();

                                    continue;

                                }

                                chanGrade += Integer.parseInt(str3)*number;

                                chanNumber+=number;

                            }

                            if(menu.dishes.get(menu.searchDish(str2)).taste.equals("浙菜")) {

                                if(Integer.parseInt(str3)<0||Integer.parseInt(str3)>3){

                                    System.out.println("sweetness num out of range :"+str3);

                                    str1=in.nextLine();

                                    continue;

                                }

                                zheGrade += Integer.parseInt(str3)*number;

                                zheNumber+=number;

                            }

                        }

                        else str3=" ";

                        if(!d) {

                            portion = in.nextInt();

                            number = in.nextInt();

                        }

                    }

                    tables.get(tableCount).add(menu, str3,str1, str2, portion, number);

                    if(str2.equals("delete")){

                        if(hash.get(str1).equals("晋菜")) {

                            jinGrade -= tasteGrade[Integer.parseInt(str1)];

                            jinNumber -= tasteNumber[Integer.parseInt(str1)];

                        }

                        if(hash.get(str1).equals("川菜")) {

                            chanGrade -= tasteGrade[Integer.parseInt(str1)];

                            chanNumber -= tasteNumber[Integer.parseInt(str1)];

                        }

                        if(hash.get(str1).equals("浙菜")) {

                            zheGrade -= tasteGrade[Integer.parseInt(str1)];

                            zheNumber -= tasteNumber[Integer.parseInt(str1)];

                        }

                        hash.put(str1,"");

                    }

                }

 

            }

            taste[tableCount][0]=chanGrade;

            taste[tableCount][1]=jinGrade;

            taste[tableCount][2]=zheGrade;

            taste[tableCount][3]=chanNumber;

            taste[tableCount][4]=jinNumber;

            taste[tableCount][5]=zheNumber;

            tables.get(tableCount).getSum();

            int sum;

            String str=useName+" "+call+" "+tables.get(tableCount).sum;

            String []b;

            if(tableCount==0)customer[cnt1++]=str;

            else {

                b = str.split(" ");

                boolean r=true;

                for (int l = 0; l < cnt1; l++) {

                    String[] c = customer[l].split(" ");

                    if (b[0].equals(c[0])) {

                        sum = Integer.parseInt(c[2]) + Integer.parseInt(b[2]);

                        customer[l] = useName + " " + call + " " + sum;

                        r=false;

                    }

                }

                if(r)customer[cnt1++]=str;

            }

            tableCount++;

        }

        for (i = 0; i < tableCount; i++) {

            if (tables.get(i).isOpen()) {

                System.out.print("table " + tables.get(i).num + ": " + tables.get(i).origSum+" "+tables.get(i).sum);

                for(int j=0;j<3;j++){

                    if(taste[i][j+3]!=0){

                        if(j==0){

                            System.out.print(" 川菜 "+taste[i][j+3]+" "+chan[(int) Math.round(1.0*taste[i][j]/taste[i][j+3])]);

                        }

                        if(j==1){

                            System.out.print(" 晋菜 "+taste[i][j+3]+" "+jin[(int) Math.round(1.0*taste[i][j]/taste[i][j+3])]);

                        }

                        if(j==2){

                            System.out.print(" 浙菜 "+taste[i][j+3]+" "+zhe[(int) Math.round(1.0*taste[i][j]/taste[i][j+3])]);

                        }

                    }

                }

                System.out.println();

            } else

                System.out.println("table " + tables.get(i).num + " out of opening hours");

        }

        Arrays.sort(customer,0,cnt1);

        for(int j=0;j<cnt1;j++) {

            if(j<cnt1-1)

                System.out.println(customer[j]);

            else System.out.print(customer[j]);

        }

    }

    public static boolean isNumber(String string) {

        try {

            Integer.parseInt(string);

            return true;

        } catch (NumberFormatException e) {

            return false;

        }

    }

    public static boolean searchPhone(String threeCall) {

        String []phoneNumber=new String[]{"180","181","189","133","135","136"};

        for (String s : phoneNumber)

            if (s.equals(threeCall)) return false;

        return true;

    }

}

class Dish {

    public String name;

    public int price;

    public String taste;

    public boolean isT = false;

}

class Record {      //点菜

    public int orderNum;  //序号

    public Dish ds;   //菜品

    public int portion;  //份额

    public int number;  //份数

    public boolean isDeleted = false;

 

    public int getPrice() {

        if (portion == 2)

            return (int) Math.round(1.5 * ds.price) * number;

        else if (portion == 3)

            return 2 * ds.price * number;

        else

            return ds.price * number;

    }

}

class Menu {   //菜单

    ArrayList<Dish> dishes = new ArrayList<>();

 

    public int searchDish(String dishName) {

        for (int i = 0; i < dishes.size(); i++) {

            if (dishName.equals(dishes.get(i).name)) {

                return i;

            }

        }

        return -1;

    }

 

    public Dish addDish(String dishName, int price,String taste) {

        Dish newDish = new Dish();

        newDish.name = dishName;

        newDish.price = price;

        newDish.taste=taste;

        return newDish;

    }

}

class Order {

    ArrayList<Record> records = new ArrayList<>();

    Record addARecord(String tasteGrade,int orderNum, String dishName, int portion, int number, Menu menu) {

        Record newRecord = new Record();

        newRecord.orderNum = orderNum;

        newRecord.ds = menu.dishes.get(menu.searchDish(dishName));

        newRecord.portion = portion;

        newRecord.number = number;

        if(!tasteGrade.equals("代点"))

            System.out.println(newRecord.orderNum + " " + newRecord.ds.name + " " + newRecord.getPrice());

        return newRecord;

    }

    public boolean delARecordByOrderNum(int orderNum) {

        int i, flag = 0;

        for (i = 0; i < records.size(); i++) {

            if (records.get(i).orderNum == orderNum) {

                if (!records.get(i).isDeleted) {

                    records.get(i).isDeleted = true;

                }

                else {

                    System.out.println("deduplication " + orderNum);

                }

                flag++;

            }

        }

        if (flag == 0) {

            System.out.println("delete error;");

            return false;

        }

        return true;

    }

}

class Table {

    Order order = new Order();

    public int num;

    public LocalDateTime time;

    public long sum = 0;

    public long origSum = 0;

    public void add(Menu menu, String str3,String str1, String str2, int portion, int number) {     //判断点菜的模式(是否存在,删除,添加)

        if (str2.equals("delete")) {

            order.delARecordByOrderNum(Integer.parseInt(str1));

        } else {

            if (menu.searchDish(str2) != -1) {

                order.records.add(order.addARecord(str3,Integer.parseInt(str1), str2, portion, number, menu));

            } else

                System.out.println(str2 + " does not exist");

        }

    }

 

    public void getSum() {

        double ts = time.getHour();

        int wek = time.getDayOfWeek().getValue();

        for (int i = 0; i < order.records.size(); i++) {

            if (!order.records.get(i).isDeleted) {

                origSum += order.records.get(i).getPrice();

                if ((wek == 7 || wek == 6) && (ts >= 9.5) && (ts <= 21))

                    sum += order.records.get(i).getPrice();

                if ((wek >= 1 && wek <= 5) && (ts >= 17) && (ts <= 20.5)) {

                    if(!order.records.get(i).ds.isT)

                        sum += Math.round(order.records.get(i).getPrice() * 0.8);

                    else sum += Math.round(order.records.get(i).getPrice() * 0.7);

                }

                if ((wek >= 1 && wek <= 5) && (ts >= 10.5) && (ts <= 14.5)) {

                    if(!order.records.get(i).ds.isT)

                        sum += Math.round(order.records.get(i).getPrice() * 0.6);

                    else sum += Math.round(order.records.get(i).getPrice() * 0.7);

                }

 

            }

        }

    }

    public boolean isOpen() {

        int weekday = time.getDayOfWeek().getValue();

        if (weekday > 0 && weekday < 6) {

            if (time.getHour() >= 17 && time.getHour() < 20)

                return true;

            if (time.getHour() == 20) {

                if (time.getMinute() <= 30)

                    return true;

            }

            if (time.getHour() > 10 && time.getHour() < 14)

                return true;

            if (time.getHour() == 10) {

                if (time.getMinute() >= 30)

                    return true;

            }

            if (time.getHour() == 14) {

                return time.getMinute() <= 30;

            }

        } else {

            if (time.getHour() > 9 && time.getHour() < 21)

                return true;

            if (time.getHour() == 9) {

                if (time.getMinute() >= 30)

                    return true;

            }

            if (time.getHour() == 21) {

                return time.getMinute() <= 30;

            }

        }

        return false;

    }

}

 

posted @ 2023-06-29 18:56  林子诺  阅读(30)  评论(0)    收藏  举报