最新要闻
- 索尼LYTIA公布新品:一口气推出5款5000万像素传感器_天天热点评
- 观热点:2岁女童误吞23颗磁力珠 医生:随时可能发生肠穿孔
- 亏电3.9升、纯电跑200km!比亚迪驱逐舰07申报:合资中型轿车发抖
- 《神鬼寓言》女性设计引热议:东西方怎么差这么多?
- B社《星空》引力惊人:法国XSX销量暴涨1335%
- 商务部:两个原因致全国实际使用外资以美元计下降_天天时快讯
- 打破国外垄断 国产GPU架构天狼星亮相:自研架构自主可控|即时焦点
- 全球短讯!贾跃亭透露创业心酸:被美国市场教育 战胜华尔街顶级破产黑帮
- 梅西今晚8点首发出场!直击北京工体蹲守现场:人满为患-环球时讯
- 理想L9 Pro来了!将取消激光雷达!预估售价42-43万元
- 天天日报丨体型太大!美国大码女子乘飞机被要求买2座位:吐槽称难受又费钱
- 昂利康:七氟烷原料药上市申请获批
- 新出行贺磊聊“李想疯狂输出的背后” 点名多位车企高管
- 北京工体梅西含量超标:今晚8点举行足球友谊赛-全球快看点
- 一加第四款《原神》联名机在路上了:这次主角是派蒙
- 双髻鲨头上的“锤子”有什么用? 世界热资讯
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
第三次博客:PTA题目集6-8总结-当前信息
第三次博客:PTA题目集6-8总结
前言:菜单系列终于结束了,但是接踵而至的是全新的选课系列,明明JAVA课都已经上完了,但是大作业的更新却并没有停止,由此可见蔡老师真的太爱我们了。
这次的选课系统个人感觉是和点菜大同小异的,菜单==课表,选课==点菜,算价钱==算分。
题目概述:
7-1 课程成绩统计程序-1某高校课程从性质上分为:必修课、选修课,从考核方式上分为:考试、考察。
(资料图片仅供参考)
考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。
考察的总成绩直接等于期末成绩
必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。
1、输入:
包括课程、课程成绩两类信息。
课程信息包括:课程名称、课程性质、考核方式(可选,如果性质是必修课,考核方式可以没有)三个数据项。
课程信息格式:课程名称+英文空格+课程性质+英文空格+考核方式
课程性质输入项:必修、选修
考核方式输入选项:考试、考察
课程成绩信息包括:学号、姓名、课程名称、平时成绩(可选)、期末成绩
课程信息格式:学号+英文空格+姓名+英文空格+课程名称+英文空格+平时成绩+英文空格+期末成绩
因为是第一次,所以并没有太难,而且老师在上课时已经为我们讲解过了,也特别贴心的给出了类图,
所以我们只需要按照类图写代码就可以了
这里因为各种原因自己添加了几个类,
1,DATA类,用于储存所有数据,所有的班级,学生,课程,选课信息都会储存于此,为了方便使用(不用传参,就可以直接使用)将里面所有属性改为static这样子在其他地方就可以直接通过类名调用,其属性
class Data//数据库{static Map |
2,课程表类,用于储存所有课程,(类似于之前的menu类)里面有存课,和找课方法
class All_course//课程表{Map |
3,输入类,与菜单不同的是,这次我的输入与输出并没有写在主函数里面,而是专门有一个输入类,里面有输入和输入判断方法
class input//输入{void inputing()//输入{Scanner in = new Scanner(System.in);String a="";a=in.nextLine();while(!a.equals("end"))//判断结束标志{if(judge(a))input_operate(a);a=in.nextLine();}}void input_operate(String a)//输入处理{String[]arr=a.split(" ");//分割int len=arr.length;//根据长度判断输入类型Student std;Score s;Course c;switch(len){case 2:Data.all_course.addcourse(arr[0],arr[1],"考试");break;case 3:Data.all_course.addcourse(arr[0],arr[1],arr[2]);break;case 4:std=new Student(arr[0],arr[1]);Grade.addgrade(arr[0].substring(0,6));//创建班级Data.grades.get(arr[0].substring(0,6)).addstudent(arr[0]);//将学生加入班级Data.students.put(arr[0],std);//加入学生s=new Score(Integer.parseInt(arr[3]));//临时成绩c=Data.all_course.findcourse(arr[2]);if(c==null)c=new Course(arr[2],null,null);if(student_course.findstudent_course(c,std)) { Data.scs.add(new student_course(Data.students.get(arr[0]),c,s)); Data.scs.get(Data.scs.size()-1).judge(); student_course it=Data.scs.get(Data.scs.size()-1);if(!it.flag){if(it.cou.kind!=null)System.out.println(it.std.number+" "+it.std.name+" : access mode mismatch");else //学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"System.out.println(it.cou.name+" does not exist");} }break;case 5:std=new Student(arr[0],arr[1]);Grade.addgrade(arr[0].substring(0,6));//创建班级Data.grades.get(arr[0].substring(0,6)).addstudent(arr[0]);//将学生加入班级Data.students.put(arr[0],std);//加入学生s=new Score(Integer.parseInt(arr[3]),Integer.parseInt(arr[4]));//临时成绩c=Data.all_course.findcourse(arr[2]);if(c==null)c=new Course(arr[2],null,null);if(student_course.findstudent_course(c,std)) { Data.scs.add(new student_course(Data.students.get(arr[0]),c,s)); Data.scs.get(Data.scs.size()-1).judge(); student_course it=Data.scs.get(Data.scs.size()-1);if(!it.flag){if(it.cou.kind!=null)System.out.println(it.std.number+" "+it.std.name+" : access mode mismatch");else //学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"System.out.println(it.cou.name+" does not exist");} }break;}}boolean judge(String a)//错误输入判断{String[]arr=a.split(" ");//分割int len=arr.length;//根据长度判断输入类型switch(len){case 2:if(arr[0].length()<=10&&arr[1].matches("^(必修)|(选修)$"))return true;else break;case 3:if(arr[0].length()<=10&&(arr[1].equals("必修")&&arr[2].matches("^(考试)|(考察)$")||arr[1].equals("选修")&&arr[2].matches("^(考试)|(考察)$")))return true;else break;case 4:if(arr[0].matches("^[0-9]{8}$")&&arr[1].length()<=10&&arr[2].length()<=10&&arr[3].matches("^[0-9]{1,2}|(100)$"))return true;else break;case 5:if(arr[0].matches("^[0-9]{8}$")&&arr[1].length()<=10&&arr[2].length()<=10&&arr[3].matches("^[0-9]{1,2}|(100)$")&&arr[4].matches("^[0-9]{1,2}|(100)$"))return true;else break;//default:System.out.println("wrong format");}System.out.println("wrong format");return false;}} |
4,计算类,在输入完毕后,计算所有分数
class calculate{void calculateing()//计算所有成绩{Data.scs.forEach(t->{if(t.flag)t.cou.getfinalScore(t.sco);});//计算单门课程最终成绩Data.students.forEach((key,value)->{ value.getScore();});//计算学生最终成绩Data.grades.forEach((key,value)->{ value.getScore();});//计算班级最终成绩Data.all_course.courses.forEach((key,value)->{ value.getScore();});//计算课程最终成绩}} |
class output//输出{void outputing(){Data.students.forEach((key,value)->{ //20201103 张三 34if(value.x!=0)System.out.println(value.number+" "+value.name+" "+value.sum);elseSystem.out.println(value.number+" "+value.name+" did not take any exams");});Data.all_course.courses.forEach((key,value)->{ //java 20 40 34if(value.x!=0){System.out.print(value.name+" ");if(value.e_way.equals("考试"))System.out.print(value.Cscore.usual+" ");System.out.println(value.Cscore.last+" "+value.Cscore.end);}elseSystem.out.println(value.name+" has no grades yet");});Data.grades.forEach((key,value)->{ //202011 34if(value.x!=0)System.out.println(value.number+" "+value.Gscore.end);elseSystem.out.println(value.number+" has no grades yet");});}} |
个人对自己的设计特别满意,虽然和老师设计的有所不同
7-3 课程成绩统计程序-2课程成绩统计程序-2在第一次的基础上增加了实验课,以下加粗字体显示为本次新增的内容。
某高校课程从性质上分为:必修课、选修课、实验课,从考核方式上分为:考试、考察、实验。
考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。
考察的总成绩直接等于期末成绩
实验的总成绩等于课程每次实验成绩的平均分
必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。实验课的成绩必须为实验。
相对于上一次并没有特别大的改动,只是增加了实验课。
所以代码并没有特别的改动,只需要增加一个实验类
class experimental_course extends Course//实验课{//int frequency=0;experimental_course(String name, String kind, String e_way) {super(name, kind, e_way);// TODO Auto-generated constructor stub}void getfinalScore(Score s)//计算成绩{s.end=s.end;//表示一下}} |
课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式,
要求:修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课程成绩类组合分项成绩类,分项成绩类由成绩分值和权重两个属性构成。
完成课程成绩统计程序-2、3两次程序后,比较继承和组合关系的区别。思考一下哪一种关系运用上更灵活,更能够适应变更。
题目最后的参考类图未做修改,大家根据要求自行调整,以下内容加粗字体显示的内容为本次新增的内容。
某高校课程从性质上分为:必修课、选修课、实验课,从考核方式上分为:考试、考察、实验。
考试的总成绩由平时成绩、期末成绩分别乘以权重值得出,比如平时成绩权重0.3,期末成绩权重0.7,总成绩=平时成绩*0.3+期末成绩*0.7。
考察的总成绩直接等于期末成绩
实验的总成绩等于课程每次实验成绩乘以权重后累加而得。
课程权重值在录入课程信息时输入。(注意:所有分项成绩的权重之和应当等于1)
必修课的考核方式必须为考试,选修课可以选择考试、考察任一考核方式。实验课的成绩必须为实验。
这次改动较大,并且要求更改类间关系,对输入与输出都做了较大的更改,
输入:
class input//输入{void inputing()//输入{Scanner in = new Scanner(System.in);String a="";a=in.nextLine();while(!a.equals("end"))//判断结束标志{int mode=0;mode=judge(a);if(mode!=0)input_operate(a,mode);a=in.nextLine();}}void input_operate(String a,int mode)//输入处理{String[]arr=a.split(" ");//分割int len=arr.length;//根据长度判断输入类型Student std;Score s;Course c;double power[]=new double[10];int n=0;if(mode==1)//课程信息{if(len>=6){n=Integer.parseInt(arr[3]);if(len-4!=n){}}Data.all_course.addcourse(arr);}else if(mode==2)//成绩信息{std=new Student(arr[0],arr[1]);if(!Data.students.containsKey(arr[0])){Grade.addgrade(arr[0].substring(0,6));//创建班级Data.grades.get(arr[0].substring(0,6)).addstudent(arr[0]);//将学生加入班级Data.students.put(arr[0],std);//加入学生}s=new Score(arr);//临时成绩c=Data.all_course.findcourse(arr[2]);if(c==null)c=new Course(arr[2],null,null,0,null);if(student_course.findstudent_course(c,std)){Data.scs.add(new student_course(Data.students.get(arr[0]),c,s));Data.scs.get(Data.scs.size()-1).judge();student_course it=Data.scs.get(Data.scs.size()-1);if(arr.length-3!=c.n)it.flag=false;if(!it.flag){if(it.cou.kind!=null)System.out.println(it.std.number+" "+it.std.name+" : access mode mismatch");else//学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"System.out.println(it.cou.name+" does not exist");}}}}int judge(String a)//错误输入判断,顺便判断输入模式{String[]arr=a.split(" ");//分割int len=arr.length;//根据长度判断输入类型//java 实验 实验 4 0.2 0.3 0.2 0.3//20201116 张三 java 70 80 90 100if(len==3&&arr[0].length()<=10&&arr[1].matches("^(必修)|(选修)|(实验)$")&&arr[2].matches("^(考试)|(考察)|(实验)$"))return 1;else if(arr[0].length()<=10&&arr[1].matches("^(必修)|(选修)|(实验)$")&&arr[2].matches("^(考试)|(考察)|(实验)$")&&arr[3].matches("^[4-9]$")){boolean flag=true;if(flag)return 1;}else if(len==5&&arr[0].length()<=10&&arr[1].matches("^(必修)|(选修)|(实验)$")&&arr[2].matches("^(考试)|(考察)|(实验)$")){boolean flag=true;if(flag)return 1;}else if(arr[0].matches("^[0-9]{8}$")&&arr[1].length()<=10&&arr[2].length()<=10){boolean flag=true;for(int i=0;i |
类图:
菜单系列踩坑心得(这世上本没有坑,踩的人多了就成了坑)
1.可以去elicpice上测试,但是搞完复制回PTA一定一定要把package删了,以及主类改为Main,会非零返回。
2.使用容器一定要根据题目要求重构排序规则,如按中文拼音排序
Map |
3.对象第一次new了之后,无论在那都不要再new了不然会变成null
4.访问数组不能越界,会有段错误
5.只要不是void类型的方法一定要保证所有情况都有返回值,会非零返回
6.要注意不同容器的特性,使用合理容器储存数据
7.可以建立数据库用于统一管理数据
8.一些超时可能是圈复杂度过高,或循环没有出口下面是我的的圈复杂度
总结:
通过这两次PTA大作业,我深刻感受到了,面向对象与面向过程的差别,对类有了一定的认识,题目都不算特别难,但是每一个题目都是一个知识点,特别是菜单系列刚开始的时候无从下手做完后再看看感慨万分,虽然类是老师设计的,但是其中的交流是自己打的,熬了几天大夜虽然很累但是拿满分的那一刻成就感满满。
学到了什么:
1.对类的设计有了一定的了解。
2.对集合有了一定的认知。
3.体会到优秀的框架设计的好处(优秀的架构与细节设计。优秀的含义很广泛,清晰、可读、易维护、易扩展的设计往往是鲁棒的,这样的设计往往很难出现严重的纰漏,因为很多错误已经被规避掉了,即使有错误,发现、纠正的难度也不会太大)
4.对JAVA报错的修改更加得心应手。
5.对类的封装性有了概念
6.学习了正则表达式的基本使用
7.合理使用各种泛型可以大大缩减代码量,而且非常高端
对课程的建议
1.每次作业截止之后可以出一下不计分的补题,可以让没有及时解决问题的同学继续尝试。
关键词:
第三次博客:PTA题目集6-8总结-当前信息
索尼LYTIA公布新品:一口气推出5款5000万像素传感器_天天热点评
观热点:2岁女童误吞23颗磁力珠 医生:随时可能发生肠穿孔
亏电3.9升、纯电跑200km!比亚迪驱逐舰07申报:合资中型轿车发抖
《神鬼寓言》女性设计引热议:东西方怎么差这么多?
B社《星空》引力惊人:法国XSX销量暴涨1335%
Java并发(十)----线程之守护线程 今日讯
商务部:两个原因致全国实际使用外资以美元计下降_天天时快讯
打破国外垄断 国产GPU架构天狼星亮相:自研架构自主可控|即时焦点
全球短讯!贾跃亭透露创业心酸:被美国市场教育 战胜华尔街顶级破产黑帮
梅西今晚8点首发出场!直击北京工体蹲守现场:人满为患-环球时讯
理想L9 Pro来了!将取消激光雷达!预估售价42-43万元
天天日报丨体型太大!美国大码女子乘飞机被要求买2座位:吐槽称难受又费钱
微服务配置中心选型比较——Nacos、Apollo
记录--前端如何优雅导出多表头xlsx
昂利康:七氟烷原料药上市申请获批
新西兰经济陷入技术性衰退
天天热头条丨商品日报(6月15日):焦煤领涨商品市场 贵金属承压下行
新华指数|钢“财”说:库存降幅收窄,宏观情绪回暖|全球最资讯
新出行贺磊聊“李想疯狂输出的背后” 点名多位车企高管
北京工体梅西含量超标:今晚8点举行足球友谊赛-全球快看点
一加第四款《原神》联名机在路上了:这次主角是派蒙
双髻鲨头上的“锤子”有什么用? 世界热资讯
618先别买洗地机!分享几条你不知道的要点|即时焦点
万方查重多久出报告(万方查重)-全球速递
扩展中国剩余定理(EXCRT)
天天即时看!三类重要Linux文件的用途与区别
沉浸式的使用 Windows/office激活工具|环球聚焦
delphi7使用rave5.0展现数据库数据报表
一文读懂物联网平台如何搞定80%以上的物联网项目
最新快讯!经常出汗是怎么回事呢_经常出汗是怎么回事
亚运会倒计时100天!vivo成手机独家供应商:交付vivo X90s、iQOO 11S 天天要闻
世界即时:越南人的国民神车! 越南版“宝骏悦也”发布:车长仅3114mm
天天快看点丨河北热成了炣北!多地气温突破40℃:石家庄成今年首个40℃省会级城市
环球要闻:谷歌推出“硬核”智能家居编辑器:支持用户手搓脚本
环球最资讯丨周鸿祎:做大模型这3个月 最惭愧的是自己不擅长吹牛
美晨生态:诸城经开投累计质押股数约为7843万股
世界视讯!如何优雅地使用Low Code提高开发效率
环球热点!ctfpwn-堆入门之uaf(新手向)
会说话!爱德华兹谈生涯至今最爱的时刻:唐斯的60分之夜
游戏网站开除40%员工 “AI编辑”每周撰写数百篇问题文章引众怒|每日焦点
让手机更智能!小米小爱建议宣布已覆盖40余款机型 看看有你的吗?|全球报道
3A大作游戏《星空》尚未发售 却已收到玩家差评:直接0分 焦点速看
夜景拍摄表现出彩:尼康尼克尔Z DX 24mm f/1.7镜头开售_全球观热点
天天最新:芭比娃娃真人电影《芭比》确认引进中国内地:画风对比《小美人鱼》如何?
vivox9什么时候上市的多少钱(vivox9什么时候上市的) 最新资讯
资讯:上传自己java项目到maven中央仓库pom
当前关注:《深入探索C++对象模型》- 第一章 - 关于对象 - 笔记
.NET 文件上传服务设计 天天快播报
变形积木:以装配式装修助力美团酒店布局“百品、千城、万店”-当前观点
国资委召开中央企业提高上市公司质量暨并购重组工作专题会-环球热资讯
科创板收盘播报:科创50指数跌0.14% 电气设备股表现强势|环球热议
马斯克邀请丰田加入特斯拉快充阵营:你们充电太慢了
要闻:新一轮油价调整将于6月28日开启 这次又有降价的可能
Steam客户端大规模更新!新增实用笔记功能 世界热议
AMD Yes!RX 6650 XT显卡杀到1799元:比N卡更香 天天播资讯
贾跃亭团队出身就是不一样!高合HiPhi Y内饰官图发布:平替FF 91
世界热文:手机微信出现状态是什么意思(微信出现状态是怎么回事)
云小课|RDS for MySQL参数模板一键导入导出,参数配置轻松搞定|焦点简讯
【环球时快讯】数据分析提效5倍,国有集团企业数字化历程 | 数字化标杆
ESMapV数字孪生三维可视化云平台-零代码可视化设计师助力者
flask自定义参数校验、序列化和反序列化_视讯
出庭当晚特朗普与“金主”举行晚宴,筹得200多万美元-世界微头条
微资讯!新华社权威快报|“一箭41星” 发射成功
欠2.4亿罚款又如何?贾跃亭国内“现身”:我不要烧太多钱也能快速成功 环球快讯
端午节放假3天自驾方便了!滴滴租车正式上线:跑车、房车全都有
全球即时:一机搞定全屋清洁!石头新品洗地机A10 Ultra今晚首销:到手价3399元
1799元咬死RTX 3060显卡 英特尔新驱动继续鸡血:性能猛增33%|当前快看
用上丰田氢燃料电池 海马7X-H来了:不到5分钟加注续航达800km-天天微速讯
汉字找茬王连歌曲不甘怎么过-世界热闻
全球热文:解析Spring内置作用域及其在实践中的应用
世界观点:pickle
RPG游戏开发日志: 世界观速讯
石家庄太和网点电话_石家庄太和网
3个ChatGPT插件自动写书爆火!更多躺着赚钱玩法可以问AI自己_全球看热讯
3.1级地震发生时上海居民躲床下避难 监控视频显示:剧烈摇晃、余震可能性不大|今头条
全球热点评!盘点C#最有价值的10个语法糖
Cannot Reference “XxxClass.xxx” Before Supertype Constructor Has Been Called
足球服批发_足球装备批发|热推荐
男子赶集买毛蛋到家全变鸭子 后续会饲养:网友点赞赚大了
直言理想ONE被问界M7打残 学习华为要看什么书:李想整理分享
丰田手把手教经销商诋毁纯电|每日动态
矛盾的马斯克!特斯拉4D雷达首拆:千元成本、探测距离300米
女学霸边读研边兼职3年赚17万:为了明确自己毕业后适合什么工作
开源即时通讯IM框架MobileIMSDK的H5端开发快速入门-世界关注
港股午评:恒指涨0.83% 恒生科技指数涨1.82% 天天看点
热点在线丨会定期删除 微软回应Edge私传图片问题:不含任何用户标识
天玑9200+加持 vivo X90s官宣:安卓最强悍的曲面屏旗舰
全球聚焦:李想最新发言引围观:我们谁都没兴趣搞、那点销量有啥可搞的
温州近视司机深夜高速上镜片突然脱落:两眼一抹黑
动态焦点:张雪峰称高考绝对是普通家庭改变命运的最好出路 回应建议报理科
2023年农业电商行业发展现状调查及行业未来趋势分析
用益-今日财经视点:美联储如期暂停加息但放鹰!
深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN
『题解』BZOJ2839 集合计数|天天热点评
热推荐:00-串口和SSH方式登录
戴德梁行亚洲REITs报告:C-REITs市场快速扩容 ESG将成为高质量发展新动力
因为读书值得
每日动态!六合一套装:八喜冰淇淋3.8元/杯抄底(商超8元)
巴黎治鼠患官宣失败:市民将与600万只老鼠共存