一. 前言
PTA第三阶段的题目集包括了题集7 8 9 10 11。
第7次题集是最后一次的菜单类,是对前一段菜单类的题目的总结,个人认为对于我来说有一定难度。
第8次题集是课程成绩统计程序的第一次作业,要求输入课程信息与学生信息,最后再进行总结计算课程成绩以及学生和班级成绩后输出。整体难度不会很大,但我仍然没用得到比较高的分数。
第9次题集也只有一道题目,统计Java程序中关键词的出现次数。这题开始考察一些数据结构,包括map,以及set的应用,还有就是正则表达式的应用,难度适中。
第10次题集有四个题目,其中的两个考察的是HashMap的应用。第三个题目是对第一次的课程成绩统计系统的迭代,在原有的基础之上增加了实验课的输入,难度较低。最后一道题目应该是为了让我们感受多态设置的,非常基础的多态基本问题,没有什么难度。
最后一次题集一共有五道题目。期中第二题是课程成绩统计系统的最后一次迭代,我没能够写出来。第一题是对arrylist的排序,较为简单。第三题是身份证排序,也要利用到arrlist的排序,其余考察的就是基础的语法,难度较小。第四题考察的是自定义接口,考察的内容不难,但是在数组输出那有点没有理解意思,导致做题的时候卡了一下下。最后一题考察的是重写object类里面的toString方法和equal方法,难度较小。
二. 设计与分析
主要对我认为比较有价值以及需要改进的题目进行分析,对于重要步骤的理解我会写在注释当中,改进写在最后。
第7次题集 菜单计价程序-5
这是最后一次的迭代,难度也较大。
题意:菜单输入时增加特色菜,特色菜的输入格式:菜品名+英文空格+口味类型+英文空格+基础价格+"T",输入订单记录时如果是特色菜,添加口味度(辣/酸/甜度)值,格式为:序号+英文空格+菜名+英文空格+口味度值+英文空格+份额+英文空格+份数。以及添加了整卓菜的口味度的输出以及口味值范围出错的情况。
package oopclass;
import java.util.Scanner;
import java.util.Calendar;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Menu menu =new Menu();
ArrayList<Order> orders=new ArrayList<>();
ArrayList<People> peoples=new ArrayList<>();
ArrayList<Table> tables=new ArrayList<>();
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
while(!str.equals("end")){
String str1[]=str.split(" ");
if(str1.length==2){
if(str1[1].equals("delete")) {
for(int i=0;i<orders.get(orders.size()-1).records.size();i++) {
int num=orders.get(orders.size()-1).records.get(i).orderNum;
int num1=Integer.parseInt(str1[0]);
//System.out.println(num);
if(num==num1) {
//System.out.println(orders.size());
orders.get(orders.size()-1).records.remove(orders.get(orders.size()-1).records.get(i));
//System.out.println(orders.size());
}
}
}else {
int unit_price=Integer.parseInt(str1[1]);
Dish d=new Dish(str1[0],unit_price,"无",0);
menu.addDish(d);
}
}
if(str1.length==4){
if(str1[3].equals("T")){
int unit_price=Integer.parseInt(str1[2]);
Dish d=new Dish(str1[0],unit_price,str1[1],0);
d.Tfalg=true;
menu.addDish(d);
}else{
int orderNum=Integer.parseInt(str1[0]);
Dish d=menu.searthDish(str1[1]);
int portion=Integer.parseInt(str1[2]);
int num=Integer.parseInt(str1[3]);
Record record=new Record(orderNum,d,portion,num);
orders.get(orders.size()-1).addARecord(record);
}
}
if(str1.length==5){
int orderNum=Integer.parseInt(str1[0]);
Dish D=menu.searthDish(str1[1]);
Dish d=new Dish(D.name,D.unit_price,D.caixi,D.spicy);
d.Tfalg=D.Tfalg;
int spicy=Integer.parseInt(str1[2]);
int portion=Integer.parseInt(str1[3]);
int num=Integer.parseInt(str1[4]);
d.spicy=spicy;
Record record=new Record(orderNum,d,portion,num);
orders.get(orders.size()-1).addARecord(record);
}
if(str1.length==7){//因为增加了口味度的输入,所以输入长度也就增加到了7
int number=Integer.parseInt(str1[1]);
String str2[]=str1[5].split("/");
int year=Integer.parseInt(str2[0]);
int month=Integer.parseInt(str2[1]);
int day=Integer.parseInt(str2[2]);
String str3[]=str1[6].split("/");
int hour=Integer.parseInt(str3[0]);
int min=Integer.parseInt(str3[1]);
int s=Integer.parseInt(str3[2]);
Table table=new Table(number,year,month,day,hour,min,s);
Order order=new Order();
orders.add(order);
table.order=order;
tables.add(table);
if(table.isOpen()) {
int pnum=0;
int pflag=0;
for(int i=0;i<peoples.size();i++){
if(peoples.get(i).pname.equals(str1[3])){
pnum=i;
pflag=1;
break;
}
}
if(pflag==0){
People people=new People(str1[3],str1[4]);
peoples.add(people);
people.ptables.add(table);
}else{
peoples.get(pnum).ptables.add(table);
}
}
}
str=sc.nextLine();
}
for(int i=0;i<tables.size();i++){
if(tables.get(i).isOpen()) {
System.out.println("table "+tables.get(i).number+": ");
for(int j=0;j<tables.get(i).order.records.size();j++){
Record record= tables.get(i).order.records.get(j);
if(record.d.spicyVail()) {
System.out.println(record.orderNum+" "+record.d.name+" "+record.getPrice());
}else {
if(record.d.caixi.equals("川菜")) {
System.out.println("spicy num out of range :"+record.d.spicy);
}
if(record.d.caixi.equals("晋菜")) {
System.out.println("acidity num out of range :"+record.d.spicy);
}
if(record.d.caixi.equals("浙菜")) {
System.out.println("sweetness num out of range :"+record.d.spicy);
}
}
}
}else {
System.out.println("table "+tables.get(i).number+" out of opening hours");
}
}
for(int i=0;i<tables.size();i++){//遍历每个桌子的订单
if(tables.get(i).isOpen()) {
System.out.print("table "+tables.get(i).number+": "+tables.get(i).sumMoney1()+" "+tables.get(i).sumMoney2());
Order order= tables.get(i).order;
if(order.chuancaiNum()!=0){//如果川菜的数量不为0,则开始输出川菜的信息
System.out.print(" 川菜 "+order.chuancaiNum());
switch (order.spicyLa()){
case 1:
System.out.print(" 微辣");
break;
case 2:
System.out.print(" 稍辣");
break;
case 3:
System.out.print(" 辣");
break;
case 4:
System.out.print(" 很辣");
break;
case 5:
System.out.print(" 爆辣");
break;
}
}
if(order.jincaiNum()!=0){//如果晋菜的数量不为0,则开始输出晋菜的信息
System.out.print(" 晋菜 "+order.jincaiNum());
switch (order.spicySuan()){
case 1:
System.out.print(" 微酸");
break;
case 2:
System.out.print(" 稍酸");
break;
case 3:
System.out.print(" 酸");
break;
case 4:
System.out.print(" 很酸");
break;
}
}
if(order.zhecaiNum()!=0){//如果浙菜的数量不为0,则开始输出浙菜的信息
System.out.print(" 浙菜 "+order.zhecaiNum());
switch (order.spicyTian()){
case 1:
System.out.print(" 微甜");
break;
case 2:
System.out.print(" 稍甜");
break;
case 3:
System.out.print(" 甜");
break;
}
}
System.out.println();
}
}
for(int i=0;i<peoples.size()-1;i++){
for(int j=0;j<peoples.size()-i-1;j++){
if(peoples.get(j).pname.compareTo(peoples.get(j+1).pname)>0){
People tmp=new People();
tmp=peoples.get(j);
peoples.set(j,peoples.get(j+1));
peoples.set(j+1,tmp);
}
}
}
for(int i=0;i<peoples.size();i++){
if(peoples.get(i).haveTable()) {
System.out.println(peoples.get(i).pname+" "+peoples.get(i).phoneNumber+" "+peoples.get(i).psumMoney());
}
}
}
}
class People {
String pname;
String phoneNumber;
ArrayList<Table> ptables= new ArrayList<>();
People(){
}
People (String name,String phomeNumber){
this.pname=name;
this.phoneNumber=phomeNumber;
}
public void addTable(Table table){
ptables.add(table);
}
public int psumMoney(){
int r=0;
for(int i=0;i<ptables.size();i++){
if(ptables.get(i).isOpen())
r+=ptables.get(i).sumMoney2();
}
return r;
}
public boolean haveTable() {
if(ptables.isEmpty()) {
return false;
}
return true;
}
}
class Dish {
String name;
int unit_price;
boolean Tfalg=false;
String caixi;//表示菜系
int spicy;//这里在dish类当中新增spicy的属性(其实应该是flavour,但是单词记错了)
Dish(){
}
Dish(String name,int unit_price,String caixi,int spicy){
this.name=name;
this.unit_price=unit_price;
this.caixi=caixi;
this.spicy=spicy;
}
public int getPrice(int portion){
double rate=0;
if(portion==1) rate=1;
if(portion==2) rate=1.5;
if(portion==3) rate=2;
return (int)((10*unit_price*rate+5)/10);
}
public boolean spicyVail(){//判断菜的口味度是否在范围内
if(caixi.equals("川菜")){
if(spicy>=0&&spicy<=5){
return true;
}
}
if(caixi.equals("晋菜")){
if(spicy>=0&&spicy<=4){
return true;
}
}
if(caixi.equals("浙菜")){
if(spicy>=0&&spicy<=3){
return true;
}
}
if(caixi.equals("无")) {
return true;
}
return false;
}
}
class Table {
int number;
Order order;
int year,month,day,hour,min,s;
int deleteNum;
Table(){
}
Table(int number,int year,int month,int day,int hour,int min,int s){
this.number=number;
this.year=year;
this.month=month;
this.day=day;
this.hour=hour;
this.min=min;
this.s=s;
}
public boolean isOpen(){
Calendar calendar=Calendar.getInstance();
calendar.set(year,month-1,day);
int weekDay=calendar.get(Calendar.DAY_OF_WEEK);
if(weekDay>=2&&weekDay<=6){
if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){
return true;
}else {
if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){
return true;
}
}
}else{
if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){
return true;
}
}
return false;
}
public void setOrder(Order order){
this.order=order;
}
public int sumMoney1(){
int sum=0;
sum= order.getTotalPrice();
return sum;
}
public int sumMoney2() {
int sum = 0;
double rate=1;
double rate1=1;
Calendar calendar=Calendar.getInstance();
calendar.set(year,month-1,day);
int weekDay=calendar.get(Calendar.DAY_OF_WEEK);
if(weekDay>=2&&weekDay<=6){
if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){
rate=0.8;
rate1=0.7;
}else {
if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){
rate=0.6;
rate1=0.7;
}
}
}else{
if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){
rate=1;
rate1=1;
}
}
for(int i=0;i<order.records.size();i++) {
Dish d=order.records.get(i).d;
if(d.Tfalg) {
if(d.spicyVail())
sum+=(int)(10*order.records.get(i).getPrice()*rate1+5)/10;
}else {
sum+=(int)(10*order.records.get(i).getPrice()*rate+5)/10;
}
}
return sum;
}
}
class Order {
Menu menu;
ArrayList<Record> records =new ArrayList<>();
//Record[] records=new Record[20];
Order(Menu menu){
this.menu=menu;
}
Order (){
}
public int getTotalPrice() {
int r = 0;
for (int i = 0; i < records.size(); i++) {
if(records.get(i).d.spicyVail()) {
r += records.get(i).getPrice();
}
}
return r;
}
public int getTprice() {
int r=0;
for(int i=0;i<records.size();i++) {
if(records.get(i).d.Tfalg&&records.get(i).d.spicyVail()) {
r+=records.get(i).getPrice();
}
}
return r;
}
public void addARecord(Record record){
records.add(record);
}
public void delARecordByOrderNum(int orderNum) {
for (int i = 0; i < records.size(); i++) {
if (records.get(i).orderNum == orderNum) {
records.remove(i);
}
}
}
public int chuancaiNum(){
int cnt=0;
for(int i=0;i<records.size();i++){
Dish d=records.get(i).d;
if(d.caixi.equals("川菜")&&d.spicyVail()){
cnt+=records.get(i).num;
}
}
return cnt;
}
public int jincaiNum(){
int cnt=0;
for(int i=0;i<records.size();i++){
Dish d=records.get(i).d;
if(d.caixi.equals("晋菜")&&d.spicyVail()){
cnt+=records.get(i).num;
}
}
return cnt;
}
public int zhecaiNum(){
int cnt=0;
for(int i=0;i<records.size();i++){
Dish d=records.get(i).d;
if(d.caixi.equals("浙菜")&&d.spicyVail()){
cnt+=records.get(i).num;
}
}
return cnt;
}
public int spicyLa(){
double r=0;
int cnt=0;
for(int i=0;i<records.size();i++){
Dish d=records.get(i).d;
if(d.Tfalg&&d.caixi.equals("川菜")&&d.spicyVail()){
r+=d.spicy*records.get(i).num;
cnt+=records.get(i).num;
}
}
return (int)(10*r/cnt+5)/10;
}
public int spicySuan(){
double r=0;
int cnt=0;
for(int i=0;i<records.size();i++){
Dish d=records.get(i).d;
if(d.Tfalg&&d.caixi.equals("晋菜")&&d.spicyVail()){
r+=d.spicy*records.get(i).num;
cnt+=records.get(i).num;
}
}
return (int)(10*r/cnt+5)/10;
}
public int spicyTian(){
double r=0;
int cnt=0;
for(int i=0;i<records.size();i++){
Dish d=records.get(i).d;
if(d.Tfalg&&d.caixi.equals("浙菜")&&d.spicyVail()){
r+=d.spicy*records.get(i).num;
cnt+=records.get(i).num;
}
}
return (int)(r/cnt*10+5)/10;
}
}
class Record {
int orderNum;
Dish d;
int portion;
int num=1;
int flag=1;
Record(){
}
Record(int orderNum,Dish d,int portion,int num){
this.orderNum=orderNum;
this.d=d;
this.portion=portion;
this.num=num;
}
int getPrice(){
return d.getPrice(portion)*num;
}
}
class Menu {
ArrayList<Dish> dishs=new ArrayList<>();
Menu(){
}
Dish searthDish(String dishName) {
for(int i=0;i<dishs.size();i++){
if(dishs.get(i).name.equals(dishName)){
return dishs.get(i);
}
}
return null;
}
void addDish(Dish d) {
int flag=0;
for(int i=0;i<dishs.size();i++){
if(d.name.equals(dishs.get(i).name)){
dishs.set(i,d);
flag=1;
}
}
if(flag==0){
dishs.add(d);
}
}
}
类图如下:
总结分析:本题是对菜单类题目的最后一次迭代,在前几次的基础之上添加了口味的属性,难度不算太大,只需在原有的dish类中加上有关口味以及口味度的属性即可,并且在主函数的输入中,添加特色菜的口味输入的功能即可。
心得:写了一段时间的这一类迭代的题目就能有一种感觉,就是你第一次或者前一次的题目的结构得写的比较好或者说结构得比较顺畅丝滑,后面的迭代中要加功能就直接加或者修改的部分比较少,不然的话就需要对前几次写的代买进行大改,是比较麻烦的,所以前面开始写之前就得想好大概的整体的结构应该怎么去写,会比较方便后续的迭代。
题集8 课程成绩统计程序-1
这是第一次的课程统计程序
题意:
题目输入包括课程,课程成绩两类信息,以及学生的成绩。最后通过程序的统计和计算输出各个课程的分数以及学生和班级的成绩。
import java.util.Comparator;
import java.text.Collator;
import java.util.Locale;
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Course> Courses=new ArrayList<>();//用于存储输入的课程
ArrayList<Class> Classes=new ArrayList<>();//用于计入输入的学生的班级
ArrayList<SelectCourse> SelectCourses=new ArrayList<>();//用于计入输入的选课信息
ArrayList<Student> Students=new ArrayList<>();//用于存储输入的学生信息
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
while(!str.equals("end")) {
String str1[] = str.split(" ");
if(str1.length==3){//如果输入的是长度为3的字符串的话,就说明输入的是课程的信息
if(str1[0].length()>10){
System.out.println("wrong format");
}else{
int flag=0;
for(int i=0;i<Courses.size();i++){
if(Courses.get(i).getCourseName().equals(str1[0])||(!str1[1].equals("选修")&&!str1[1].equals("必修"))||(!str1[2].equals("考试")&&!str1[2].equals("考察"))){
flag=1;
break;
}
}
if(flag==0){
Course course=new Course(str1[0],str1[1],str1[2]);
if(course.getCourseNature().equals("必修")&&course.getCourseMethod().equals("考察")){
System.out.println(course.getCourseName()+" : course type & access mode mismatch");
}else{
Courses.add(course);
}
}
}
}
if(str1.length==4||str1.length==5){//学生成绩的输入
int flag=0,flag1=0,flag2=0,flag3=0;
for(int i=0;i<SelectCourses.size();i++){
if(SelectCourses.get(i).getStudent().getNumber()==Integer.parseInt(str1[0])&&SelectCourses.get(i).getStudent().getName().equals(str1[1])&&SelectCourses.get(i).getCourse().getCourseName().equals(str1[2])){
flag3=1;
break;
}
}
if(flag3==0){
if(((str1.length==4||str1.length==5)&&(!str1[0].matches("[0-9]{8}")||str1[1].length()>10||Integer.parseInt(str1[3])>100||Integer.parseInt(str1[3])<0))||(str1.length==5&&(Integer.parseInt(str1[4])>100||Integer.parseInt(str1[4])<0))){
System.out.println("wrong format");
}else{
String str2=str1[0].substring(0,6);
int classnumber=Integer.parseInt(str2);
int studentnumber=Integer.parseInt(str1[0]);
int grades1=Integer.parseInt(str1[3]);
for(int i=0;i<Courses.size();i++){
if(Courses.get(i).getCourseName().equals(str1[2])){
flag=1;
if(Courses.get(i).getCourseNature().equals("必修")){
flag1=1;
}
break;
}
}
if(flag==1){
if(str1.length==4){
if(flag1==1){
System.out.println(str1[0]+" "+str1[1]+" : access mode mismatch");
grades1=0;
}
SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,classnumber);
SelectCourses.add(selectCourse);
}else{
int grades2=Integer.parseInt(str1[4]);
SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,grades2,classnumber);
SelectCourses.add(selectCourse);
}
}else{
System.out.println(str1[2]+" does not exist");
SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],0,classnumber);
SelectCourses.add(selectCourse);
}
for(int i=0;i<Classes.size();i++){
if(Classes.get(i).getNumber()==classnumber){
flag2=1;
break;
}
}
if(flag2==0){
Class my_class=new Class(classnumber);
Classes.add(my_class);
}
}
}
}
str=sc.nextLine();
}
//加入学生
for(int i=0;i<SelectCourses.size();i++){
int flag=0;
for(int j=0;j<Students.size();j++){
if(Students.get(j).getNumber()==SelectCourses.get(i).getStudent().getNumber()){
flag=1;
break;
}
}
if(flag==0){
Students.add(SelectCourses.get(i).getStudent());
}
}
//设置学生成绩和显示学生成绩
for(int i=0;i<Students.size();i++){
int r=0,num=0;
for(int j=0;j<SelectCourses.size();j++){
if(Students.get(i).getNumber()==SelectCourses.get(j).getStudent().getNumber()){
r+=SelectCourses.get(j).getAbstractGrades().computeGrades();
num++;
}
}
Students.get(i).setAverageGrades(r/num);
}
java.util.Collections.sort(Students);
for(int i=0;i<Students.size();i++){
if(Students.get(i).getAverageGrades()==0){
System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" did not take any exams");
}else{
System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" "+Students.get(i).getAverageGrades());
}
}
//显示课程
Courses.sort(new my_sort());
for(int i=0;i<Courses.size();i++){
int r=0,r1=0,r2=0,num=0;
for(int j=0;j<SelectCourses.size();j++){
if(Courses.get(i).getCourseName().equals(SelectCourses.get(j).getCourse().getCourseName())){
if(SelectCourses.get(j).getAbstractGrades().computeGrades()!=0){
if(Courses.get(i).getCourseMethod().equals("考试")){
r+=SelectCourses.get(j).getAbstractGrades().computeGrades();
r1+=SelectCourses.get(j).getAbstractGrades().getDailyGrades();
r2+=SelectCourses.get(j).getAbstractGrades().getFinalGrades();
}
if(Courses.get(i).getCourseMethod().equals("考察")){
r+=SelectCourses.get(j).getAbstractGrades().computeGrades();
r1+=SelectCourses.get(j).getAbstractGrades().getFinalGrades();
}
num++;
}
}
}
if(num!=0){
r/=num;
r1/=num;
r2/=num;
}
Courses.get(i).setAverageGrade(r);
if(r==0){
System.out.println(Courses.get(i).getCourseName()+" has no grades yet");
}else{
if(Courses.get(i).getCourseMethod().equals("考试")){
Courses.get(i).setAverageDGrade(r1);
Courses.get(i).setAverageFGrade(r2);
System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageDGrade()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade());
}else{
Courses.get(i).setAverageFGrade(r1);
System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade());
}
}
}
//显示班级
java.util.Collections.sort(Classes);
for(int i=0;i<Classes.size();i++){
int r=0,num=0;
for(int j=0;j<SelectCourses.size();j++){
if(Classes.get(i).getNumber()==SelectCourses.get(j).getClassNumber()){
r+=SelectCourses.get(j).getAbstractGrades().computeGrades();
num++;
}
}
Classes.get(i).setAverageGrades(r/num);
if(r!=0){
System.out.println(Classes.get(i).getNumber()+" "+Classes.get(i).getAverageGrades());
}else{
System.out.println(Classes.get(i).getNumber()+" has no grades yet");
}
}
}
}
class my_sort implements Comparator<Course> {
private Collator collator=Collator.getInstance(Locale.CHINA);
@Override
public int compare(Course o1, Course o2){
int result=collator.compare(o1.getCourseName(),o2.getCourseName());
if(result>0){
return 1;
}else if(result<0) {
return -1;
}
return 0;
}
}
class Course implements Comparator<Course> {
private Collator collator=Collator.getInstance(Locale.CHINA);
private String courseName;
private String courseNature;
private String courseMethod;
private int averageGrade=0;
private int averageFGrade=0;
private int averageDGrade=0;
public Course() {
}
public Course(String courseName){
this.courseName=courseName;
}
public Course(String courseName, String courseNature, String courseMethod) {
this.courseName = courseName;
this.courseNature = courseNature;
this.courseMethod = courseMethod;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getCourseNature() {
return courseNature;
}
public void setCourseNature(String courseNature) {
this.courseNature = courseNature;
}
public String getCourseMethod() {
return courseMethod;
}
public void setCourseMethod(String courseMethod) {
this.courseMethod = courseMethod;
}
public int getAverageGrade() {
return averageGrade;
}
public void setAverageGrade(int averageGrade) {
this.averageGrade = averageGrade;
}
public int getAverageFGrade() {
return averageFGrade;
}
public void setAverageFGrade(int averageFGrade) {
this.averageFGrade = averageFGrade;
}
public int getAverageDGrade() {
return averageDGrade;
}
public void setAverageDGrade(int averageDGrade) {
this.averageDGrade = averageDGrade;
}
@Override
public int compare(Course o1, Course o2) {
return collator.compare(o1, o2);
}
}
class SelectCourse implements Comparable<SelectCourse> {
private Course course;
private Student student;
private AbstractGrades abstractGrades;
private int classNumber;
public SelectCourse() {
}
public SelectCourse(int studentNumber,String studentName,String courseName,int dailyGrades,int finalGrades,int classNumber){
student=new Student(studentNumber,studentName);
course=new Course(courseName);
abstractGrades=new ExamGrades(dailyGrades,finalGrades);
this.classNumber=classNumber;
}
public SelectCourse(int studentNumber,String studentName,String courseName,int finalGrades,int classNumber){
student=new Student(studentNumber,studentName);
course=new Course(courseName);
abstractGrades=new InspectGrades(finalGrades);
this.classNumber=classNumber;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public AbstractGrades getAbstractGrades() {
return abstractGrades;
}
public void setAbstractGrades(AbstractGrades abstractGrades) {
this.abstractGrades = abstractGrades;
}
public int getClassNumber() {
return classNumber;
}
public void setClassNumber(int classNumber) {
this.classNumber = classNumber;
}
@Override
public int compareTo(SelectCourse o) {
if(this.student.getNumber()>o.getStudent().getNumber()){
return 1;
}
if(this.student.getNumber()<o.getStudent().getNumber()){
return -1;
}
return 0;
}
}
class Class implements Comparable<Class> {
int number;
private int averageGrades;
public Class() {
}
public Class(int number) {
this.number = number;
}
public Class(int number, int averageGrades) {
this.number = number;
this.averageGrades = averageGrades;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getAverageGrades() {
return averageGrades;
}
public void setAverageGrades(int averageGrades) {
this.averageGrades = averageGrades;
}
@Override
public int compareTo(Class o) {
if(this.number>o.number){
return 1;
}
if(this.number<o.number){
return -1;
}
return 0;
}
}
abstract class AbstractGrades {
private int finalGrades;
private int dailyGrades;
public AbstractGrades() {
}
public AbstractGrades(int finalGrades) {
this.finalGrades=finalGrades;
}
public AbstractGrades(int finalGrades,int dailyGrades){
this.finalGrades=finalGrades;
this.dailyGrades=dailyGrades;
}
public int getFinalGrades() {
return finalGrades;
}
public void setFinalGrades(int finalGrades) {
this.finalGrades = finalGrades;
}
public int getDailyGrades() {
return dailyGrades;
}
public void setDailyGrades(int dailyGrades) {
this.dailyGrades = dailyGrades;
}
public abstract int computeGrades();
}
class ExamGrades extends AbstractGrades{
public ExamGrades() {
}
public ExamGrades(int dailyGrades,int finalGrades) {
super(finalGrades, dailyGrades);
}
@Override
public int computeGrades() {
return (int)(0.7*getFinalGrades()+0.3*getDailyGrades());
}
}
class InspectGrades extends AbstractGrades{
public InspectGrades() {
}
public InspectGrades(int finalGrades) {
super(finalGrades);
}
@Override
public int computeGrades() {
return getFinalGrades();
}
}
class Student implements Comparable<Student>{
private String name;
private int number;
private int averageGrades;
public Student() {
}
public Student(int number, String name) {
this.name = name;
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public int getAverageGrades() {
return averageGrades;
}
public void setAverageGrades(int averageGrades) {
this.averageGrades = averageGrades;
}
@Override
public int compareTo(Student o) {
if(this.number>o.getNumber()){
return 1;
}
if(this.number<o.getNumber()){
return -1;
}
return 0;
}
}
类图如下:
总结分析:
本题的思路是,先创建出对应的容器来存储相应的信息,入如课程信息,学生成绩信息,班级信息。在每次的输入过程中,将每条信息存入相应的容器当中。在输入结束的时候,对选课的容器进行一个排序,最后到了输出的步骤,根据所需要的信息一个个遍历选课信息,根据题目需求输出相应信息。
心得:
看清楚题目的要求,想清楚需要什么数据,数据如何从输入的信息中存储,需要什么样的容器,以及如何分类存储不同的信息。以及输出的时候,应该想清楚先遍历哪种容器,分清楚先后顺序。
题集10-HahsMap检索
题意:
输入多个学生的成绩信息,包括:学号、姓名、成绩。学号是每个学生的唯一识别号,互不相同。姓名可能会存在重复。
使用HashMap存储学生信息,并实现根据学号的检索功能。输出查询到的学生信息格式:学号+英文空格+姓名+英文空格+成绩
如果没有查询到,则输出:"The student "+查询的学号+" does not exist"
import java.util.Map;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Map<String,String> map1=new HashMap<>();//创建所需容,用于存储学号和存储姓名
Map<String ,Integer> map2=new HashMap<>();//用于存储学号和分数
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
while(!str.equals("end")){
String str1[]=str.split(" ");
map1.put(str1[0],str1[1]);
map2.put(str1[0],Integer.parseInt(str1[2]));
str=sc.nextLine();
}
str=sc.nextLine();
String name=" ";
int score=0;
int flag=0;
Set<String> set=map1.keySet();//用map的keySet用于后续的遍历
Set<String> set1=map2.keySet();//同理
for(String str1:set){
if(str1.equals(str)){
name=map1.get(str1);
score=map2.get(str1);
flag=1;
}
}
if(flag==1){
System.out.println(str+" "+name+" "+score);
}else{
System.out.println("The student "+str+" does not exist");
}
}
}
总结:
本题主要考察hashmap的使用,题目是要求输入学生信息,但是因为拥有3个信息,所以我选择用了2个hashmap来存储这三个数据,其中key都是学号,value分别是姓名和分数。后续用keyset来遍历hashmap,最后输出
心得:
理解掌握了hashmap的基本概念,并掌握了hahsmap的基本使用方法,以及遍历map的方法。
题集10-hashmap 排序
题意:
输入多个学生的成绩信息,包括:学号、姓名、成绩。学号是每个学生的唯一识别号,互不相同。姓名可能会存在重复。要求:使用HashMap存储学生信息。
按学号从大到小的顺序输出所有学生信息,每个学生信息的输出格式:学号+英文空格+姓名+英文空格+成绩
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Collections;
import java.util.Comparator;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Map<String[], Integer> map = new HashMap<>();//这次只用一个hashmap来存储学生信息,其中学号和姓名用字符串数组存储
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
while (!str.equals("end")) {
String str1[] = str.split(" ");
String str2[] = {str1[0], str1[1]};
map.put(str2, Integer.parseInt(str1[2]));
str=sc.nextLine();
}
List<Map.Entry<String[],Integer>> arrayList=new ArrayList<Map.Entry<String[], Integer>>(map.entrySet());//将map中的数据转为list进行排序
Collections.sort(arrayList, new Comparator<Map.Entry<String[], Integer>>() {
@Override
public int compare(Map.Entry<String[], Integer> o1, Map.Entry<String[], Integer> o2) {
String str2[]=o1.getKey();
String str3[]=o2.getKey();
int ans1=Integer.parseInt(str2[0]);
int ans2=Integer.parseInt(str3[0]);
if(ans1>ans2){
return -1;
}
if(ans1<ans2){
return 1;
}
return 0;
}
});
for(Map.Entry<String[],Integer> entry:arrayList){
String str1[]= entry.getKey();
int ans= entry.getValue();
System.out.println(str1[0]+" "+str1[1]+" "+ans);
}
}
}
总结: 这题的基本要求与上一题基本一致,但是要求排序,这就需要用到list的排序,并且需要用到collection的sort进行自定义排序。存储上的形式也进行了改变,只用了一个hashmap就可以存储。 心得: 在掌握了hashmap的基本的使用方法之上,学会了如何对hashmap进行排序。 题集10-课程成绩统计-2 题意: 这是课程成绩统计的迭代,相较于第一次的题目,这次的迭代在输入的时候可以多输入一个实验课选项,其余要求差不多。 import java.util.Comparator; import java.text.Collator; import java.util.Locale; import java.util.Scanner; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Course> Courses=new ArrayList<>(); ArrayList<Class> Classes=new ArrayList<>(); ArrayList<SelectCourse> SelectCourses=new ArrayList<>(); ArrayList<Student> Students=new ArrayList<>(); Scanner sc=new Scanner(System.in); String str=sc.nextLine(); while(!str.equals("end")) { String str1[] = str.split(" "); if(str1.length==3){ if(str1[0].length()>10){ System.out.println("wrong format"); }else{ int flag=0; for(int i=0;i<Courses.size();i++){ if(Courses.get(i).getCourseName().equals(str1[0])){ flag=1; break; } } if(flag==0){ Course course=new Course(str1[0],str1[1],str1[2]); if((course.getCourseNature().equals("必修")&&course.getCourseMethod().equals("考察"))||(!course.getCourseNature().equals("实验")&&course.getCourseMethod().equals("实验"))){//在判断这一步新增添上实验课的判断 System.out.println(course.getCourseName()+" : course type & access mode mismatch"); }else{ Courses.add(course); } } } } if(str1.length==4||str1.length==5){ int flag=0,flag1=0,flag2=0,flag3=0; for(int i=0;i<SelectCourses.size();i++){ if(SelectCourses.get(i).getStudent().getNumber()==Integer.parseInt(str1[0])&&SelectCourses.get(i).getStudent().getName().equals(str1[1])&&SelectCourses.get(i).getCourse().getCourseName().equals(str1[2])){ flag3=1; break; } } if(flag3==0){ if(((str1.length==4||str1.length==5)&&(!str1[0].matches("[0-9]{8}")||str1[1].length()>10||Integer.parseInt(str1[3])>100||Integer.parseInt(str1[3])<0))||(str1.length==5&&(Integer.parseInt(str1[4])>100||Integer.parseInt(str1[4])<0))){ System.out.println("wrong format"); }else{ String str2=str1[0].substring(0,6); int classnumber=Integer.parseInt(str2); int studentnumber=Integer.parseInt(str1[0]); int grades1=Integer.parseInt(str1[3]); for(int i=0;i<Courses.size();i++){ if(Courses.get(i).getCourseName().equals(str1[2])){ flag=1; if(Courses.get(i).getCourseNature().equals("必修")){ flag1=1; } break; } } if(flag==1){ if(str1.length==4){ if(flag1==1){ System.out.println(str1[0]+" "+str1[1]+" : access mode mismatch"); grades1=0; } SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,classnumber); SelectCourses.add(selectCourse); }else{ int grades2=Integer.parseInt(str1[4]); SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades1,grades2,classnumber); SelectCourses.add(selectCourse); } }else{ System.out.println(str1[2]+" does not exist"); SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],0,classnumber); SelectCourses.add(selectCourse); } for(int i=0;i<Classes.size();i++){ if(Classes.get(i).getNumber()==classnumber){ flag2=1; break; } } if(flag2==0){ Class my_class=new Class(classnumber); Classes.add(my_class); } } } }else{ if(str1.length>5){//实验课的输入int flag2=0; //System.out.println(str1.length); if(Integer.parseInt(str1[3])>=4&&Integer.parseInt(str1[3])<=9){ String str2=str1[0].substring(0,6); int classnumber=Integer.parseInt(str2); int studentnumber=Integer.parseInt(str1[0]); int grades=0; if(str1.length<8||str1.length>13){ System.out.println(str1[0]+" "+str1[1]+" : access mode mismatch"); SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades,classnumber); SelectCourses.add(selectCourse); for(int i=0;i<Classes.size();i++){ if(Classes.get(i).getNumber()==classnumber){ flag2=1; break; } } if(flag2==0){ Class my_class=new Class(classnumber); Classes.add(my_class); } }else{ int flag=0; int ans=0,cnt=0; for(int i=4;i< str1.length;i++){ if(Integer.parseInt(str1[i])<0||Integer.parseInt(str1[i])>100){ flag=1; break; }else{ ans+=Integer.parseInt(str1[i]); cnt++; } } if(flag==1){ System.out.println("wrong format"); }else{ grades=ans/cnt; SelectCourse selectCourse=new SelectCourse(studentnumber,str1[1],str1[2],grades,classnumber); SelectCourses.add(selectCourse); for(int i=0;i<Classes.size();i++){ if(Classes.get(i).getNumber()==classnumber){ flag2=1; break; } } if(flag2==0){ Class my_class=new Class(classnumber); Classes.add(my_class); } } } }else{ System.out.println("wrong format"); } } } str=sc.nextLine(); } //加入学生 for(int i=0;i<SelectCourses.size();i++){ int flag=0; for(int j=0;j<Students.size();j++){ if(Students.get(j).getNumber()==SelectCourses.get(i).getStudent().getNumber()){ flag=1; break; } } if(flag==0){ Students.add(SelectCourses.get(i).getStudent()); } } //设置学生成绩和显示学生成绩 for(int i=0;i<Students.size();i++){ int r=0,num=0; for(int j=0;j<SelectCourses.size();j++){ if(Students.get(i).getNumber()==SelectCourses.get(j).getStudent().getNumber()){ r+=SelectCourses.get(j).getAbstractGrades().computeGrades(); num++; } } Students.get(i).setAverageGrades(r/num); } java.util.Collections.sort(Students); for(int i=0;i<Students.size();i++){ if(Students.get(i).getAverageGrades()==0){ System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" did not take any exams"); }else{ System.out.println(Students.get(i).getNumber()+" "+Students.get(i).getName()+" "+Students.get(i).getAverageGrades()); } } //显示课程 Courses.sort(new my_sort()); for(int i=0;i<Courses.size();i++){ int r=0,r1=0,r2=0,num=0; for(int j=0;j<SelectCourses.size();j++){ if(Courses.get(i).getCourseName().equals(SelectCourses.get(j).getCourse().getCourseName())){ if(SelectCourses.get(j).getAbstractGrades().computeGrades()!=0){ if(Courses.get(i).getCourseMethod().equals("考试")){ r+=SelectCourses.get(j).getAbstractGrades().computeGrades(); r1+=SelectCourses.get(j).getAbstractGrades().getDailyGrades(); r2+=SelectCourses.get(j).getAbstractGrades().getFinalGrades(); } if(Courses.get(i).getCourseMethod().equals("考察")||Courses.get(i).getCourseMethod().equals("实验")){ r+=SelectCourses.get(j).getAbstractGrades().computeGrades(); r1+=SelectCourses.get(j).getAbstractGrades().getFinalGrades(); } num++; } } } if(num!=0){ r/=num; r1/=num; r2/=num; } Courses.get(i).setAverageGrade(r); if(r==0){ System.out.println(Courses.get(i).getCourseName()+" has no grades yet"); }else{ if(Courses.get(i).getCourseMethod().equals("考试")){ Courses.get(i).setAverageDGrade(r1); Courses.get(i).setAverageFGrade(r2); System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageDGrade()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade()); }else{ if(Courses.get(i).getCourseMethod().equals("考察")){ Courses.get(i).setAverageFGrade(r1); System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageFGrade()+" "+Courses.get(i).getAverageGrade()); }else{ Courses.get(i).setAverageFGrade(r1); System.out.println(Courses.get(i).getCourseName()+" "+Courses.get(i).getAverageFGrade()); } } } } //显示班级 java.util.Collections.sort(Classes); for(int i=0;i<Classes.size();i++){ int r=0,num=0; for(int j=0;j<SelectCourses.size();j++){ if(Classes.get(i).getNumber()==SelectCourses.get(j).getClassNumber()){ r+=SelectCourses.get(j).getAbstractGrades().computeGrades(); num++; } } Classes.get(i).setAverageGrades(r/num); if(r!=0){ System.out.println(Classes.get(i).getNumber()+" "+Classes.get(i).getAverageGrades()); }else{ System.out.println(Classes.get(i).getNumber()+" has no grades yet"); } } } } class my_sort implements Comparator<Course> { private Collator collator = Collator.getInstance(Locale.CHINA); @Override public int compare(Course o1, Course o2) { int result = collator.compare(o1.getCourseName(), o2.getCourseName()); if (result > 0) { return 1; } else if (result < 0) { return -1; } return 0; } } class Course implements Comparator<Course> { private Collator collator=Collator.getInstance(Locale.CHINA); private String courseName; private String courseNature; private String courseMethod; private int averageGrade=0; private int averageFGrade=0; private int averageDGrade=0; public Course() { } public Course(String courseName){ this.courseName=courseName; } public Course(String courseName, String courseNature, String courseMethod) { this.courseName = courseName; this.courseNature = courseNature; this.courseMethod = courseMethod; } public String getCourseName() { return courseName; } public void setCourseName(String courseName) { this.courseName = courseName; } public String getCourseNature() { return courseNature; } public void setCourseNature(String courseNature) { this.courseNature = courseNature; } public String getCourseMethod() { return courseMethod; } public void setCourseMethod(String courseMethod) { this.courseMethod = courseMethod; } public int getAverageGrade() { return averageGrade; } public void setAverageGrade(int averageGrade) { this.averageGrade = averageGrade; } public int getAverageFGrade() { return averageFGrade; } public void setAverageFGrade(int averageFGrade) { this.averageFGrade = averageFGrade; } public int getAverageDGrade() { return averageDGrade; } public void setAverageDGrade(int averageDGrade) { this.averageDGrade = averageDGrade; } @Override public int compare(Course o1, Course o2) { return collator.compare(o1, o2); } } class SelectCourse implements Comparable<SelectCourse> { private Course course; private Student student; private AbstractGrades abstractGrades; private int classNumber; public SelectCourse() { } public SelectCourse(int studentNumber,String studentName,String courseName,int dailyGrades,int finalGrades,int classNumber){ student=new Student(studentNumber,studentName); course=new Course(courseName); abstractGrades=new ExamGrades(dailyGrades,finalGrades); this.classNumber=classNumber; } public SelectCourse(int studentNumber,String studentName,String courseName,int finalGrades,int classNumber){ student=new Student(studentNumber,studentName); course=new Course(courseName); abstractGrades=new InspectGrades(finalGrades); this.classNumber=classNumber; } public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public AbstractGrades getAbstractGrades() { return abstractGrades; } public void setAbstractGrades(AbstractGrades abstractGrades) { this.abstractGrades = abstractGrades; } public int getClassNumber() { return classNumber; } public void setClassNumber(int classNumber) { this.classNumber = classNumber; } @Override public int compareTo(SelectCourse o) { if(this.student.getNumber()>o.getStudent().getNumber()){ return 1; } if(this.student.getNumber()<o.getStudent().getNumber()){ return -1; } return 0; } } class Class implements Comparable<Class> { int number; private int averageGrades; public Class() { } public Class(int number) { this.number = number; } public Class(int number, int averageGrades) { this.number = number; this.averageGrades = averageGrades; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public int getAverageGrades() { return averageGrades; } public void setAverageGrades(int averageGrades) { this.averageGrades = averageGrades; } @Override public int compareTo(Class o) { if(this.number>o.number){ return 1; } if(this.number<o.number){ return -1; } return 0; } } abstract class AbstractGrades { private int finalGrades; private int dailyGrades; public AbstractGrades() { } public AbstractGrades(int finalGrades) { this.finalGrades=finalGrades; } public AbstractGrades(int finalGrades,int dailyGrades){ this.finalGrades=finalGrades; this.dailyGrades=dailyGrades; } public int getFinalGrades() { return finalGrades; } public void setFinalGrades(int finalGrades) { this.finalGrades = finalGrades; } public int getDailyGrades() { return dailyGrades; } public void setDailyGrades(int dailyGrades) { this.dailyGrades = dailyGrades; } public abstract int computeGrades(); } class ExamGrades extends AbstractGrades{ public ExamGrades() { } public ExamGrades(int dailyGrades,int finalGrades) { super(finalGrades, dailyGrades); } @Override public int computeGrades() { return (int)(0.7*getFinalGrades()+0.3*getDailyGrades()); } } class InspectGrades extends AbstractGrades{ public InspectGrades() { } public InspectGrades(int finalGrades) { super(finalGrades); } @Override public int computeGrades() { return getFinalGrades(); } } class Student implements Comparable<Student>{ private String name; private int number; private int averageGrades; public Student() { } public Student(int number, String name) { this.name = name; this.number = number; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public int getAverageGrades() { return averageGrades; } public void setAverageGrades(int averageGrades) { this.averageGrades = averageGrades; } @Override public int compareTo(Student o) { if(this.number>o.getNumber()){ return 1; } if(this.number<o.getNumber()){ return -1; } return 0; } } 总结: 这次的迭代难度不算大,主要是需要增添实验课这一特殊课程,但是发现实验课的成绩计算方式和考试课是差不多的,所以并没有进行大量的修改,只需要注意几个实验课可能会出现wrong fromt的点就可以了。 心得: 只要前期代码的结构写的比较好,后期的修改或添加就不会很困难。
import java.util.Scanner;import java.util.Calendar;import java.util.ArrayList;public class Main {
public static void main(String[] args) { Menu menu =new Menu(); ArrayList<Order> orders=new ArrayList<>(); ArrayList<People> peoples=new ArrayList<>(); ArrayList<Table> tables=new ArrayList<>(); Scanner sc=new Scanner(System.in); String str=sc.nextLine(); while(!str.equals("end")){ String str1[]=str.split(" ");
if(str1.length==2){ if(str1[1].equals("delete")) { for(int i=0;i<orders.get(orders.size()-1).records.size();i++) { int num=orders.get(orders.size()-1).records.get(i).orderNum; int num1=Integer.parseInt(str1[0]); //System.out.println(num); if(num==num1) { //System.out.println(orders.size()); orders.get(orders.size()-1).records.remove(orders.get(orders.size()-1).records.get(i)); //System.out.println(orders.size()); } } }else { int unit_price=Integer.parseInt(str1[1]); Dish d=new Dish(str1[0],unit_price,"无",0); menu.addDish(d); } }
if(str1.length==4){ if(str1[3].equals("T")){ int unit_price=Integer.parseInt(str1[2]); Dish d=new Dish(str1[0],unit_price,str1[1],0); d.Tfalg=true; menu.addDish(d); }else{ int orderNum=Integer.parseInt(str1[0]); Dish d=menu.searthDish(str1[1]); int portion=Integer.parseInt(str1[2]); int num=Integer.parseInt(str1[3]); Record record=new Record(orderNum,d,portion,num); orders.get(orders.size()-1).addARecord(record); } }
if(str1.length==5){ int orderNum=Integer.parseInt(str1[0]); Dish D=menu.searthDish(str1[1]); Dish d=new Dish(D.name,D.unit_price,D.caixi,D.spicy); d.Tfalg=D.Tfalg; int spicy=Integer.parseInt(str1[2]); int portion=Integer.parseInt(str1[3]); int num=Integer.parseInt(str1[4]); d.spicy=spicy; Record record=new Record(orderNum,d,portion,num); orders.get(orders.size()-1).addARecord(record); } if(str1.length==7){ int number=Integer.parseInt(str1[1]); String str2[]=str1[5].split("/"); int year=Integer.parseInt(str2[0]); int month=Integer.parseInt(str2[1]); int day=Integer.parseInt(str2[2]); String str3[]=str1[6].split("/"); int hour=Integer.parseInt(str3[0]); int min=Integer.parseInt(str3[1]); int s=Integer.parseInt(str3[2]); Table table=new Table(number,year,month,day,hour,min,s); Order order=new Order(); orders.add(order); table.order=order; tables.add(table); if(table.isOpen()) { int pnum=0; int pflag=0; for(int i=0;i<peoples.size();i++){ if(peoples.get(i).pname.equals(str1[3])){ pnum=i; pflag=1; break; } } if(pflag==0){ People people=new People(str1[3],str1[4]); peoples.add(people); people.ptables.add(table); }else{ peoples.get(pnum).ptables.add(table); } } } str=sc.nextLine(); }
for(int i=0;i<tables.size();i++){ if(tables.get(i).isOpen()) { System.out.println("table "+tables.get(i).number+": "); for(int j=0;j<tables.get(i).order.records.size();j++){ Record record= tables.get(i).order.records.get(j); if(record.d.spicyVail()) { System.out.println(record.orderNum+" "+record.d.name+" "+record.getPrice()); }else { if(record.d.caixi.equals("川菜")) { System.out.println("spicy num out of range :"+record.d.spicy); } if(record.d.caixi.equals("晋菜")) { System.out.println("acidity num out of range :"+record.d.spicy); } if(record.d.caixi.equals("浙菜")) { System.out.println("sweetness num out of range :"+record.d.spicy); } } } }else { System.out.println("table "+tables.get(i).number+" out of opening hours"); } }
for(int i=0;i<tables.size();i++){ if(tables.get(i).isOpen()) { System.out.print("table "+tables.get(i).number+": "+tables.get(i).sumMoney1()+" "+tables.get(i).sumMoney2()); Order order= tables.get(i).order; if(order.chuancaiNum()!=0){ System.out.print(" 川菜 "+order.chuancaiNum()); switch (order.spicyLa()){ case 1: System.out.print(" 微辣"); break; case 2: System.out.print(" 稍辣"); break; case 3: System.out.print(" 辣"); break; case 4: System.out.print(" 很辣"); break; case 5: System.out.print(" 爆辣"); break; } } if(order.jincaiNum()!=0){ System.out.print(" 晋菜 "+order.jincaiNum()); switch (order.spicySuan()){ case 1: System.out.print(" 微酸"); break; case 2: System.out.print(" 稍酸"); break; case 3: System.out.print(" 酸"); break; case 4: System.out.print(" 很酸"); break; } } if(order.zhecaiNum()!=0){ System.out.print(" 浙菜 "+order.zhecaiNum()); switch (order.spicyTian()){ case 1: System.out.print(" 微甜"); break; case 2: System.out.print(" 稍甜"); break; case 3: System.out.print(" 甜"); break; } } System.out.println(); } }
for(int i=0;i<peoples.size()-1;i++){ for(int j=0;j<peoples.size()-i-1;j++){ if(peoples.get(j).pname.compareTo(peoples.get(j+1).pname)>0){ People tmp=new People(); tmp=peoples.get(j); peoples.set(j,peoples.get(j+1)); peoples.set(j+1,tmp); } } }
for(int i=0;i<peoples.size();i++){ if(peoples.get(i).haveTable()) { System.out.println(peoples.get(i).pname+" "+peoples.get(i).phoneNumber+" "+peoples.get(i).psumMoney()); } } }}
class People { String pname;
String phoneNumber;
ArrayList<Table> ptables= new ArrayList<>();
People(){
}
People (String name,String phomeNumber){ this.pname=name; this.phoneNumber=phomeNumber; }
public void addTable(Table table){ ptables.add(table); }
public int psumMoney(){ int r=0; for(int i=0;i<ptables.size();i++){ if(ptables.get(i).isOpen()) r+=ptables.get(i).sumMoney2(); } return r; } public boolean haveTable() { if(ptables.isEmpty()) { return false; } return true; }
}
class Dish { String name;
int unit_price;
boolean Tfalg=false;
String caixi;
int spicy;
Dish(){
}
Dish(String name,int unit_price,String caixi,int spicy){ this.name=name; this.unit_price=unit_price; this.caixi=caixi; this.spicy=spicy; }
public int getPrice(int portion){ double rate=0; if(portion==1) rate=1; if(portion==2) rate=1.5; if(portion==3) rate=2; return (int)((10*unit_price*rate+5)/10); }
public boolean spicyVail(){ if(caixi.equals("川菜")){ if(spicy>=0&&spicy<=5){ return true; } } if(caixi.equals("晋菜")){ if(spicy>=0&&spicy<=4){ return true; } } if(caixi.equals("浙菜")){ if(spicy>=0&&spicy<=3){ return true; } } if(caixi.equals("无")) { return true; } return false; }}
class Table { int number;
Order order;
int year,month,day,hour,min,s;
int deleteNum;
Table(){
}
Table(int number,int year,int month,int day,int hour,int min,int s){ this.number=number; this.year=year; this.month=month; this.day=day; this.hour=hour; this.min=min; this.s=s; }
public boolean isOpen(){ Calendar calendar=Calendar.getInstance(); calendar.set(year,month-1,day); int weekDay=calendar.get(Calendar.DAY_OF_WEEK); if(weekDay>=2&&weekDay<=6){ if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){ return true; }else { if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){ return true; } } }else{ if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){ return true; } } return false; }
public void setOrder(Order order){ this.order=order; }
public int sumMoney1(){ int sum=0; sum= order.getTotalPrice(); return sum; }
public int sumMoney2() { int sum = 0; double rate=1; double rate1=1; Calendar calendar=Calendar.getInstance(); calendar.set(year,month-1,day); int weekDay=calendar.get(Calendar.DAY_OF_WEEK); if(weekDay>=2&&weekDay<=6){ if((hour>=17&&(hour<=19))||(hour==20&&min<=30)){ rate=0.8; rate1=0.7; }else { if((hour==10&&min>=30)||(hour>=11&&hour<=13)||(hour==14&&min<=30)){ rate=0.6; rate1=0.7; } } }else{ if((hour==9&&min>=30)||(hour>9&&hour<21)||(hour==21&&min<=30)){ rate=1; rate1=1; } } for(int i=0;i<order.records.size();i++) { Dish d=order.records.get(i).d; if(d.Tfalg) { if(d.spicyVail()) sum+=(int)(10*order.records.get(i).getPrice()*rate1+5)/10; }else { sum+=(int)(10*order.records.get(i).getPrice()*rate+5)/10; } } return sum; }}
class Order { Menu menu;
ArrayList<Record> records =new ArrayList<>(); //Record[] records=new Record[20];
Order(Menu menu){ this.menu=menu; }
Order (){
}
public int getTotalPrice() { int r = 0; for (int i = 0; i < records.size(); i++) { if(records.get(i).d.spicyVail()) { r += records.get(i).getPrice(); } } return r; } public int getTprice() { int r=0; for(int i=0;i<records.size();i++) { if(records.get(i).d.Tfalg&&records.get(i).d.spicyVail()) { r+=records.get(i).getPrice(); } } return r; } public void addARecord(Record record){ records.add(record); }
public void delARecordByOrderNum(int orderNum) { for (int i = 0; i < records.size(); i++) { if (records.get(i).orderNum == orderNum) { records.remove(i); } } } public int chuancaiNum(){ int cnt=0; for(int i=0;i<records.size();i++){ Dish d=records.get(i).d; if(d.caixi.equals("川菜")&&d.spicyVail()){ cnt+=records.get(i).num; } } return cnt; }
public int jincaiNum(){ int cnt=0; for(int i=0;i<records.size();i++){ Dish d=records.get(i).d; if(d.caixi.equals("晋菜")&&d.spicyVail()){ cnt+=records.get(i).num; } } return cnt; }
public int zhecaiNum(){ int cnt=0; for(int i=0;i<records.size();i++){ Dish d=records.get(i).d; if(d.caixi.equals("浙菜")&&d.spicyVail()){ cnt+=records.get(i).num; } } return cnt; }
public int spicyLa(){ double r=0; int cnt=0; for(int i=0;i<records.size();i++){ Dish d=records.get(i).d; if(d.Tfalg&&d.caixi.equals("川菜")&&d.spicyVail()){ r+=d.spicy*records.get(i).num; cnt+=records.get(i).num; } } return (int)(10*r/cnt+5)/10; }
public int spicySuan(){ double r=0; int cnt=0; for(int i=0;i<records.size();i++){ Dish d=records.get(i).d; if(d.Tfalg&&d.caixi.equals("晋菜")&&d.spicyVail()){ r+=d.spicy*records.get(i).num; cnt+=records.get(i).num; } } return (int)(10*r/cnt+5)/10; }
public int spicyTian(){ double r=0; int cnt=0; for(int i=0;i<records.size();i++){ Dish d=records.get(i).d; if(d.Tfalg&&d.caixi.equals("浙菜")&&d.spicyVail()){ r+=d.spicy*records.get(i).num; cnt+=records.get(i).num; } } return (int)(r/cnt*10+5)/10; }}
class Record { int orderNum;
Dish d;
int portion;
int num=1;
int flag=1;
Record(){
}
Record(int orderNum,Dish d,int portion,int num){ this.orderNum=orderNum; this.d=d; this.portion=portion; this.num=num; }
int getPrice(){ return d.getPrice(portion)*num; }
}
class Menu { ArrayList<Dish> dishs=new ArrayList<>();
Menu(){
}
Dish searthDish(String dishName) { for(int i=0;i<dishs.size();i++){ if(dishs.get(i).name.equals(dishName)){ return dishs.get(i); } } return null; }
void addDish(Dish d) { int flag=0; for(int i=0;i<dishs.size();i++){ if(d.name.equals(dishs.get(i).name)){ dishs.set(i,d); flag=1; } } if(flag==0){ dishs.add(d); } }} 标签:第三阶段,题目,String,get,int,str1,PTA,return,public From: https://www.cnblogs.com/lzh30/p/17503617.html