Java课程设计--奖学金评定.docx
第1章课题概述1Ll课题的目的11.2课题的要求11. 2.1系统的性能需求1L2.2系统的功能需求1第2章概要设计21 .1整个程序的模块结构及流程22 .2各个功能模块的描述22. 2.1编辑信息22. 4.2查询信息23. 4.3统计信息22. 4.4获奖信息3第3章程序功能的实现43. 1主要功能模块的实现43. 1.1编辑信息的实现43. 1.2查询信息的实现44. 1.3统计信息的实现73.1.4获奖信息的实现8第4章调试及发现问题的解决H第5章程序测试及分析12第6章总结16参考文献17第1章课题概述本次java课程设计的题目是以本校学生手册中奖学金的评定办法为背景,设计的一个学生奖学金评定系统。Ll课题的目的奖学金管理工作是高校学生管理工作的重要组成部分。高校为鼓励学生在校期间刻苦学习,设立了多种奖学金,同时为了做好奖学金的评审与管理工作,投入了大量的人力、物力和财力。奖学金管理工作特别是评审工作具有涉及面广、工作量大、发生时间相对集中的特点。高校的奖学金评定工作每学年都要开展,传统的评审工作主要是以手工方式进行的,存在着效率地下、容易出错等弊端。因此,实现奖学金评定管理的信息化是十分必要的。1.2课题的要求1.2.1 系统的性能需求由于对系统中学生的基本信息,学习成绩等,不允许随意增加、修改和删除,因此在系统设计中主要是保证系统的可行性,并在保证可行性的前提下满足数据录入的准确性和高效性。1、准确性:为确保数据录入的准确性,系统提出了采取双工录入比较法和多次校对来确保录入数据正确性的策略。2、高效性:系统设计要能高效的完成对学生基本信息和学科成绩进行录入。3、可行性:对学生成绩的录入与管理系统要能够及时对重要的数据进行备份,当数据遭到灾难性的毁坏后能及时重建和恢复。对学生成绩和信息的录入与管理系统是通过信息的正确录入,在系统内进行分析处理输出新的信息并利用反馈信息对相关事物进行有效控制的具有一定特殊功能的人机交互系统。1.2. 2系统的功能需求设计一个奖学金评定系统,该系统要能够进行信息和成绩的录入、修改、删除、查询。具体功能需求如下:1、由于大多数系统操作人员的都是非计算机专业,要求系统要有良好的人机界面;2、能对学生成绩进行准确、高效的录入、校对和分析,并支持多条件查询与修改;3、能够及时地对重要数据进行备份和恢复,方便的导出数据文件;4、数据操作方便简单,稳定性好,数据计算及成绩分析要能够自动完成。第2章概要设计1. 1整个程序的模块结构及流程根据课题要求,奖学金评定系统由编辑信息、查询信息、统计信息、获奖信息四大模块组成。程序各功能模块的划分,及主要流程如图2-1所示。图2-1整个程序各功能模块间的流程2. 2各个功能模块的描述3. 2.1编辑信息输入学生信息并以文件SCOre.dat保存,具有输入新增学生基本信息,学生学科成绩,以及成绩的添加、删除和修改的功能。4. 4.2查询信息可以按学号或姓名查询某学生的所有成绩,以及按学号或姓名修改指定学生的相关成绩。5. 4.3统计信息(1)具有能够读取Score.dat文件并显示所有学生的所有成绩的功能;(2)具有显示输出60分以下、6079、8089、90分以上各分数段的学生信息的功能。2.4.4获奖信息(1)具有按各门课程的学分和分数计算所有同学的绩点,并根据绩点排名得出各等级奖学金的名单的功能;(2)具有将各等级奖学金获得者的名单写入文件Bonus.dat的功能。第3章程序功能的实现3.1 主要功能模块的实现3.1.1 编辑信息的实现此模块具有三个功能,能够新增学生信息,删除学生信息,修改学生信息、,新增学生,通过自己的输入,把相关的数据写入指定的文件中,需要用到对流的操作,在写入文件前,需要先保存到自己定义的集合里,再把集合的数据全部写入文件进行保存,修改信息,删除信息也是如此。新增学生信息的代码实现如下:publicvoidactionPerformed(ActionEvente)if(e.getSource()=confirm)Stringclassno=Classnotf.getTe×t();Stringstuid=Stuidtf.getText();Stringname=nametf.getText();Stringclan=cIantf.getText();Stringmath=mathtf.getText();StringEnglish=Englishtf.getTe×t();Stringphysics=physicstf.getTe×t();Stringma×phil=ma×philtf.getText();s=newStUdent(CIaSSno,stuid,name,clanjmath,Englishjphysicsjma×phil);Classnotf.setTe×t("");StuidtfsetText("");nametf.setTe×t("");clantf.setTe×t("");mathtf.setTe×t("");Englishtf.setTe×t("");physicstf.setTe×t("");maxphiltf.setTe×t("");List.add(s);sve();elseif(e.getSource()=save)this.dispose();)3.1.2 查询信息的实现查询信息中有两大功能,一个是根据指定的学号和姓名,查询其相关的各项成绩以及及其绩点。这是自己输入的学号和姓名,与集合中的对应的数据进行对比,当发现一致时,就输出其成绩与绩点。另一个是根据自己输入的学号姓名,对其相关的成绩进行修改,如果一项成绩需要修改,就在集合中修改指定的数据,其他不改变,结束后,在把集合中的数据全部写入到文件中。查询成绩与绩点的代码实现如下:publicvoidactionPerformed(ActionEvente)ArrayList<Student>list=InternalFrame.list;Strings=null;Stringclangrade=null;Stringmathgrade=null;StringEnglishgrade=null;Stringphysicsgrade=null;Stringma×philgrade=null;if(e.getSource()=confirm)for(inti=0;i<list.size();i+)if(jtf2.getTe×t().equals(list.get(i).stuid)IIjtf3.getText().equals(list.get(i).name)s="C语言:"+list.get(i).clan+“t高数:”+list.get(i).math+“t大英:“+list.get(i).English+”t大物+list.get(i).physics+,t马哲:“+list.get(i).ma×phil;list.get(i).calgrade();Doubleclanl=Double.valuef(list.get(i).clangrade);Doublemathl=Double.valuef(list.get(i).mathgrade);DoubleEnglishl=Double.valuef(list.get(i).Englishgrade);Doublephysicsl=Double.valuef(list.get(i).physicsgrade);Doublema×phill=Double.valuef(list.get(i).ma×philgrade);clangrade=clanl.toString();mathgrade=mathl.toString();Englishgrade=Englishl.toString();physicsgrade=physicsl.toString();ma×philgrade=ma×phill.toString();jtf4.setText(',ci三W:"+clangrade+mathgrade+”t大英:"+Englishgrade+,t大物:”+physicsgrade+"t马哲:"+maxphilgrade);jtf4.setEditable(false);jtf4.setEditable(false);jtfl.setEditable(false);jtfl.setText(s);jtfl.setEditable(false);)修改个人成绩的代码实现如下:publicvoidactionPerformed(ActionEvente)ArrayList<Student>list=InternalFrame.list;Stringm="确定要修改该学生成绩吗?”;if(e.getSource()=confirm)intok=JOptionPane.ShowConfirmDialog(this,m,确认”,JOptionPane.YES_NO_OPTIONJJOptionPane.QUESTION_MESSAGE);if(ok=JOptionPane.YES_OPTION)Stringclan=clantf.getText();Stringmath=mathtf.getText();StringEnglish=Englishtf.getTe×t();Stringphysics=physicstf.getText();Stringma×phil=maxphiltf.getTe×t();for(inti=0;i<list.size();i+)if(nametf.getText().equals(list.get(i).classno)IIstuidtf.getText().equals(list.get(i).stuid)if(!clan.trim().equals("")list.get(i).clan=clan;)if(!math.trim().equals("")list.get(i).math=math;)if(!English,trim().equals(,",)list.get(i).English=English;)if(!physics.trim().equals("")list.get(i).physics=physics;)if(!ma×phil.trim().equals("")list.get(i).ma×phil=ma×phil;)list.get(i).calgrade();InternalFrame.save();)try(setClosed(true);catch(PropertyVetoExceptionel)el.printStackTrace();)elseclantf.setText(");mathtf.setText(,");Englishtf.setText("");Physicstf.setText("");maxphiltf.setText("");)3.1.3 统计信息的实现统计信息之中具有显示所有学生成绩,以及各项科目各分数段的人的相关信息。显示所有学生的成绩时,利用集合,把集合中的各个学生的成绩输出来,同样在统计各分数段的人的相关信息也是从集合中的对象的属性中获取。显示所有学生成绩的代码实现如下:publicShowInternalFrame(Stringtitle)super();setTitle(title);setBounds(50j20,700,500);SetResizable(true);setClosable(true);setlconifiable(true);SetMaXimiZabIe(true);list=InternalFrame.list;jp=new3Panel(newGridLayout(list.size()j1,1,1);Strings=“班级"学号“姓名"JC语言“,”高数“,”大英"J大物”J马哲");Stringss=newStringlist.size()s.length;JTablejt;for(inti=0;i<list.size();i+)ssi0=list.get(i).classno;ssil=list.get(i).stuid;ssi2=list.get(i).name;ssi3=Iistget(i)clan;ssi4=list.get(i).math;ssi5=listget(i)physics;ssi6=listget(i)-English;ssi7=list.get(i).maxphil;)jt=new3Table(ss,s);jsp=newJScrollPane(jt);jsp.SetverticaiscrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);this.add(jsp);setVisible(true);)3.1.4 获奖信息的实现获奖信息中主要是得到各等奖的名单,通过比较每个学生的绩点,进行排名,根据人数的比例,计算各等奖的人数,在根据排名确定人选,这些获奖人的信息依然是在集合中得到的。(1)获奖名单的主体代码实现如下:publicAwardInternalFrame(Stringtitle)super();setTitle(title);setBounds(50,20,650,500);SetResizable(true);setClosable(true);setlconifiable(true);setMaximizable(true);jll=newJLabe1(“一等奖:”);jl2=newJLabe1(“二等奖:“);jl3=newJLabe1(“三等奖:“);jtal=newJTextArea(8,50);jta2=newJTeXtArea(8,50);jta3=newJTextArea(8,50);jp=new3Panel(newGridLayout(3,1,li1);jpl=newJPanel();jp2=newJPanel();jp3=newJPanel();list=(ArrayList<Student>)InternalFrame.list.clone();grade=newdoublelist.size();for(inti=0;i<list.size();i+)list.get(i).calgrade();gradei=list.get(i).allgrade;)nolnum=list.size()*0.05;no2num=list.size()*0.1;no3num=list.size()*0.15;bdl=newBigDecimal(nolnum).setScale(0,BigDecimal.ROUND_HALF_UP);bd2=newBigDecimal(no2num).setScale(0jBigDecimal.ROUND_HALF_UP);bd3=newBigDecimal(no3num).setScale(0,BigDecimal.ROUND_HALF_UP);bdlint=bdl.intValue();bd2int=bd2.intValue();bd3int=bd3.intValue();Arrays.sort(grade);for(inti=0;i<bdlint;i+)gradenol=gradelist.size()-1;for(intj=0;j<list.size();j+)if(gradenol=list.get(j).allgrade)jtagrl+=list.get(j).getinf();list.remove(j);break;)for(inti=0;i<bd2int;i+)gradeno2=gradelist.size()-1;for(intj=0;j<list.size();j+)if(gradeno2=list.get(j).allgrade)jtagr2+=list.get(j).getinf();list.remove(j);break;)for(inti=0;i<bd3int;i+)gradeno3=gradelist.size()-1;for(intj=0;j<list.size();j+)if(gradeno3=list.get(j).allgrade)jtagr3+=list.get(j).getinf();list.remove(j);break;)jtal.setText(jtagrl);jta2.setText(jtagr2);jta3,setText(jtagr3);Filef=newFile("D:/bat/Bonus.dat");BufferedWriterbw=null;trybw=newBufferedWriter(newFileWriter(f);bw.write("一等奖:"+jtagrl);bw.newLine();bw.write("二等奖:"+jtagr2);bw.newLine();bw.write("三等奖:"+jtagr3);bw.flush();bw.close();catch(Exceptione)e.printStackTrace();)jtal.setEditable(false);jta2.setEditable(false);jta3.setEditable(false);jtal.setLineWrap(true);jta2.setLineWrap(true);jta3.setLineWrap(true);第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。1、如何使定义的集合保持唯一性?解决方法:对于集合需要用静态进行定义,使之成为类变量,如果是成员变量,每次实例化个对象,就会产生相应的成员变量,无法保证其的唯一性,调用其中的数据会发生异常,所以必须使之成为静态,每次要用到时,通过类点名,得到整个集合,保证唯一性。2、当修改某个学生的相关信息时,包括成绩时,在获取奖学金名单时,被修改的学生绩点没有得到改变,如何避免影响获奖名单的准确性?解决方法:在学生类中,定义一个方法,这个方法是得到其所有成绩的绩点,在修改的方法中,最后调用学生类的得到绩点的方法,保证每次修改学生成绩时,绩点也会发生相应的变化,从而保证获取名单的准确性。3、在根据绩点排名时,同时出现了两个相同的绩点,而在同一个等级的奖学金中恰好两个以上的名额,如何避免在同一个等级的奖学金的名单上输出相同的两个人?解决方法:在排名前可以先克隆一个原来装有所有数据的集合,然后对这个集合进行操作。需要对这个集合进行遍历,一旦找到在集合中对象的数据中与比较的数据一致时,立刻停止循环,得到其相关信息,保存相关的变量中,接着便移除这个集合的对象,然后继续在集合中对剩下的对象的数据进行比较,一直到达到获奖的人数,也就是每找到对象,便减小集合的大小,从而保证人不会重复,信息也不会相同。4、如何避免每次需要用到某个人的相关的信息时,都要实例化个对象?解决方法:在学生类中,定义个方法,方法是得到其班级,姓名,学号,每次需要用到其相关的信息时,可以直接通过集合中的指定的对象调用该方法,从而不需每次都去实例化对象,再获取其相关信息。第5章程序测试及分析运行程序,首先显示程序主菜单,列出的功能选项有编辑信息、查询信息、统计信息、获奖信息等。在编辑信息中执行输入信息的功能。图57所示,是实现输入信息的界面。图5-1输入信息图5-2所示,是删除信息的功能界面。图5-3所示,查询成绩与绩点的功能界面。图5-3查询成绩与绩点图5-4所示,修改成绩的功能界面。巴修改个人成绩猿口"0区图5-4修改成绩统计信息中显示所有学生的成绩的功能界面,如图5-5所示。B所有学生成绫班级字号姓名cigs高效大英大物马哲14121易80808080:8014122劫77876366:9014123情838994635114124薇恩786460909114125艾希66756956,8614126库奇67686058|8914127迦那785777648114128那美566751>37314129巴德827952857?141210杰斯53927869j88141211泰隆87897278|64141212亚索7089648855141213侵伦58678192I66141214麓91689088;75141215波比66607880田8141216赵信78768357(79141217李青8083508971141218番森67598173|74141219贾克斯9195788485141220菲奥娜75709189|66141221茸皇99999999|99141223张山3223222222141225张三60709080100图5-5显示所有学生信息统计信息过程中的显示C语言各个分数段的信息功能界面,过程如图5-6所示。BC语言各分款段学生信息口 Er区60以下:班级:1412姓名劫字号2然1412姓名:库奇字号:6; 级1412姓名:波比字号15:级1412姓名:菲奥娜字号20:班级:1412姓名薇恩字号:4;班级:1412姓名迦那学号:7;班级:1412姓名赵信学号:16:班级:1412姓名:张三学号:25;班级:1412姓名:艾希字号:5:班级1412姓名亚索字号:12;班级1412姓名潘森字号:18;.班班班O:1412姓名娜美字号8班级:1412姓名:杰斯学号:10:班级:1412姓名:盖伦字号:13;班级1412姓名张山字号23;班级:1412姓名易学号1班级:1412姓者慎学号:3;班缴1412姓名巴德字号9班级1412姓名:泰隆字号11:班级:1412姓名:李青学号:17;.班级1412姓名:瑞雯学号14;班级:1412姓名贾克斯字号:19;班级:1412姓名满皇字号:21:90以上:获奖信息中的获奖名单的功能界面,过程如图5-7所示。旦_躲奖名单:口Fl×i班级:1412姓名:落皇学号21;班级:1412姓名:贾克斯学号:19;班级:1412姓名瑞雯学号:14:二等奖:班级1412姓名易学号1;班缴1412姓名泰隆学号:11.班缎1412姓名菲奥娜字号20:图5-7获奖名单第6章总结通过二周的课程设计,终于独立写出了超过一千多行代码的程序,还学会了如何实现图形界面,学会了如何正确地布局,正确运用了集合与流的操作。总结起来,主要有以下几点体会:1、要想做好这个课程设计,程序设计语言的基础一定要扎实。良好的程序设计语言基础是写出一个完满的程序的保证。程序语言设计的基础的高低关系到课程设计任务能否顺利完成。2、程序的编写过程,不能一蹴而就,它应该是一个循环渐进,不断完善直至完美的过程,编写程序,特别是编写功能庞大,不要妄想一口气将所有的功能都非常完美地实现。一般是先将整个程序的框架先搭建起来,然后分出各个功能模块,各个功能模块单独地实现其中的方法,每个模块中有时需要多个类,之中需要建立起相关的联系。3、不仅要用严谨细致的态度去编写程序,而且要有足够的耐心去调试程序;测试程序时,应重点关注边界条件和特殊细节。绝大多数程序不是只要编写完就能运行,所以当程序编写完一定要进行细地测试。如果发现测试结果不对或不够完美,则需要沉下心来,仔细检查程序中的每一个环节和漏洞。测试和调试程序时不能有懒惰思想。比如在奖学金评定的调试过程中,我在编写程序的过程中,刚开始就并没有考虑到当我没有输入信息时,系统需要给我提示或者在输入相同的信息时,系统给我相关的提示,还有就是在查询信息时,当输入并不存在的信息时,系统自动给我一个警告的提示。这些问题都是程序的测试阶段才逐步发现并逐步解决的。4、养成良好的学习态度和学习习惯,培养正确的学习方法。编写复杂的计算机程序必须学会独立思考,不懂的地方可以上网或到图书馆查阅资料,遇到实在无法理解或解决的问题时,要主动向老师请教。对于任何一个程序功能,不仅能够基本地完成实现,还能够对于可能会产生的异常可以产生相应的提示,进行及时地纠正与调整,亦即保证程序的健壮性。最后,感谢在此过程中帮助过我的指导老师和各位同学!参考文献1张跃平,JAVA实用教程,清华大学出版社,20062李鑫,黄卓,戴金波,王胜峰.课程设计案例精编M.北京:中国水利水电出版社,2006.3周之英编著,现代软件工程,科学出版社,20034邵丽萍,JAVA语言程序设计,清华大学,2006.