中山大学计算机科学系报告-Read_第1页
中山大学计算机科学系报告-Read_第2页
中山大学计算机科学系报告-Read_第3页
中山大学计算机科学系报告-Read_第4页
中山大学计算机科学系报告-Read_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验题目:学生信息管理系统3问题描述:学校招生办在录取当年新生时为新生建立了一个新生基础信息类StudentBase,其中包含每位新生的基本资料:学号(long mNum)、姓名(char mName20)、性别(int mSex:其中0 表示男,1 表示女)、年龄(int mAge)、住址(char mAddr 30)。新生主修专业所在系(设每个系只有一个主修专业)又在学生基本资料的基础上为该系的每位新生建立一个主修类First(即学生信息管理系统2 中的Major 类),其中除了包含原来新生基本资料外,还设有新生主修系名(char mMajorDepName30)和主修成绩表(设为int mFirstScoreN)(N 是大于0 的整数)(学生信息管理系统2 中的mMajorDepName 和mMajorScore);为了促进复合型人才培养,学生在二年级可修读第二专业(第二学位)课程。第二学位接收系又为每位修读本系第二学位同学建立一个类Second,其中除了学生基本资料外,还设有第二专业名称(char mSecondDepName30)和攻读第二专业成绩表(设为int FscoreM)(M 是大于零的整数)。(可参考学生信息管理系统2 中的Minor 类)学校学位办为了掌握每位学生学位发放情况,又为学生建立一个管理类StudentMIS。它应该包含学生所有资料。当学生主修专业课程全部合格(各门课程成绩大于等于60 分,百分制记分),则可给他颁发主修专业学位;当学生获得主修专业学位,并攻读第二专业学位课程全部及格(各门课程成绩大于等于60 分,百分制记分),则可颁发第二专业学位(若第一专业拿不到学位,则该学生无权申请第二专业的学位)。按照管理规定:1 招生办工作人员只能访问并修改学生的基本资料,但没有权限访问学生第一专业和第二专业的相关资料;2 主修系(即第一专业)教务员只能访问(但不能修改)学生的基本资料,能访问并修改第一专业课程相关资料,不能访问和修改第二专业课程相关资料;3 第二专业系教务员只能访问(但不能修改)学生的基本资料,能访问并修改第二专业课程相关资料,不能访问和修改第一专业课程相关资料;4 学位办工作人员能访问学生所有资料,但不可以修改学生任何资料;5 设每门课程的成绩都用百分制(整数)表示。建立一个学生信息管理系统,管理某校学生。首先由招生办工作人员为该管理系统输入学生的基本信息:1 从文件BaseFile.dat 中读入每个学生的基本信息,建立学生基本信息管理库;每个学期结束时,各个系的教务员将输入本系学生所修各门课程的成绩,如果有其他系同学来攻读本系第二学位课程的,教务员还要输入这些学生(外来系修读本系第二学位的同学)所修读的第二学位课程的成绩(假设每个学期每位主修学生修读课程不超过6 门,学生修读第二学位课程不超过5门):2 每个系的教务员从文件中读入主修或本系的每位学生各门主修课程成绩具体文件名参见实验要求)。输入结束以后:3 每个系的教务员统计出本系学生在期末考中至少有3 门(含3 门)以上课程成绩在85 分(含85 分)以上、其余课程成绩不低于70 分的同学并显示出其相关资料,请将统计结果输出到文件Good.dat(其中指系的编号,如FirstGood.dat 记录的是First 系的优秀学生名单)中;4 每个系的教务员还要统计出本系主修学生中需要参加补考的同学、其相关基本资料和要补考的主修课程,请将统计结果输出到文件MajorBad.dat 中;5 每个系的教务员还要统计外来系修读本系第二学位的学生补考名单、其相关基本资料和要补考的课程,请将统计结果输出到文件MinorBad.dat 中。(其中指系的编号,如FirstMajorBad.dat 记录的是主修First 系的补考学生名单,FirstMinorBad.dat 记录的是以First 系为第二专业的补考学生名单)6 修业期满后,学位办工作人员统计出获得主修专业学位的同学及其相关资料,并且统计出能够获得第二学位的同学及其相关资料,最后统计出不能获得主修专业学位的同学及其相关资料。请将统计结果输出到文件Bachelor.dat 中;利用类与继承设计出满足上述要求的类,并编出一个程序模拟招生办工作人员、主修系教务员、第二学位接收系教务员和学位管理人员的操作且实现其工作要求。实验环境与工具:Microsoft visual c+基本算法及其讨论:由问题中给出的几种实现方案,选择第三种作为设计的方案。整个系统涉及的对像有学生,招生办工作人员,A,B,C三个系的教务员,还有学位办工作人员。先分析他们的关系,招生办工作人员,三个系的教务员,学位办的工作人员均为系统的操作人员,所以系统将分别提供不同的界面给他们进行操作,所以可以将这几个不同的操作系统抽象为几个不同的类。而学生是所有这些系统的操作对象,所以学生应该作为系统中的对象。再分析这几个系统的关系。所有的系统都可以访问学生的基本信息,而每个系统又具有其余系统不具有的一些操作。招生办工作人员的系统可以修改学生的基本信息,三个系的教务员可以修改学生的成绩,需要统计优秀学生和需要补考学生的名单,还要统计本系中第二学位学生需要补考的名单。学位办工作人员需要统计所有能获得学位学生的名单,能获得第二学位学生的名单还有不能获得学位学生的名单。三个系的教务员的额外操作是建立再招生办工作人员的操作之上,而学位办工作人员的操作又是建立再三个系教务员的操作之上,所以系统的结构如题目要求中方案三的类层次图所示。而各个类又有各自仅仅属于自己的部分操作,所以在继承时需要屏蔽一些继承下来的函数,并且重载和重定义一些继承下来的函数。分别用类StudentBase,FirstA,FirstB,FirstC,StudentMIS来实现以上的几个针对不同对象的系统。在主函数中只需要构建一个StudentMIS的对象即可将所有的信息保存下来。分别声明指向各自类的指针,在使用时让他们指向StudentMIS的对象即可用静态绑定来实现系统对各个操作人员权限的限制。在方案三中系统中学生的总人数是不定的,每个专业学习的课程数是不定的,第二专业学习的课程数也是不定的,但题目中都给出了默认值,所以在程序中用常量来代替,在需要修改的时候只需要修改常量的值即可。由于每个系的学生和该系中第二学位的学生的人数也是不定的所以在程序中要求用户输入。整个程序的框架确定后就考虑具体类的设计。StudentBase类作为所有类的基类其中要保存学生的基本信息,所以里面应该包含了一个protected的student类数组用来保存学生的基本信息,公共接口中需要提供一个按学号和按姓名查找学生信息的函数,还有一个修改学生基本信息的函数。FirstA,FirstB,FirstC在功能上是一致的,所以以FirstA为模型,在FirstA类中需要保存该系的所有学生的成绩,还有该系中所有第二专业的学生的成绩,在公共接口中需要提供按学号和按姓名查询学生基本信息和学生成绩的函数,统计本系优秀学生,统计本系需要补考学生名单,统计该系中第二专业需要补考学生的名单的函数,还有就是修改本系中学生的成绩的函数。这三个类都是StudentBase类的子类,所以都保存了一份学生的基本信息,这样就导致了重复继承的问题,所以应该将StudentBase作为虚基类,这样在继承的时候就仅保留了一份基类的信息。StudentMIS类继承自FirstA,FirstB,FirstC,所以将他们的所有操作都继承下来了,但学位办工作人员的权限并没有如此大,所以需要屏蔽一些函数,使其在该类中不再可用,还需要重载搜索函数,因为在此类中搜索的范围扩大到所有学生中了,所以搜索的函数需要我们重载。学位办工作人员多了一个统计学位获得情况的函数,将其加入到公共接口中。类的框架设计好后就考虑其实现,输出优秀学生的函数和统计补考学生的函数与上两次实验的函数类似,而搜索函数仅仅需要加入两个参数控制即可。其余的功能算法都较为简单可以直接实现。新加入的统计学位的函数,仅需要在三个系学生和第二学生中按条件遍历即可。实现方案:程序中的函数较多,但大多数较为简单,所以仅给出几个稍微复杂一点的函数的伪代码。mSearchByStuNum(num,stu,aver,score,nn,mm)1 For i=0 to 52 do if mStui.mGetNum()=num3 Then stumStui4 Find=15 Break6 If find = 0 then RETURN 07 Find08 For j=0 to nn-19 Do if mScorej.mNum=num10 Then aver=mScorej.mAvg11 Find=112 For i=0 to mm-113 Do scoreimScorej.mScorei14 Break15 If find=0 then RETURN 016 RETURN 1mGetGoodStu(filename,num)1 for i=0 to 52 do for j=0 to 43 Do if mScorei.mScorej =85 then kk+14 If mScorei.mScorej=38 Then ifmSearchByStuNum(mScorei.mNum,stu,aver,s,num,0)=0 then RETURN 09 If display(stu,mScorei,filename)=0then RETURN 010 RETURN 1mSortByAvg(filename,num)1 for i=0 to 42 do maxi3 For j=i+1 to 54 Do if mScoremax.mAvg mScorej.mAvg then maxj5 TempmScorei6 mScoreimScoremax7 mScoremaxtemp8 For i=0 to 59 Do print mScorei.mNum10 mSearchByStuNum(mScorei.mNum,stu,aver,score,num,0)11 Print stu.mGetName()12 Forj=0 to 413 Do print mScorei.mScorej14 Print mScorei.mAvg15 RETURN 1mGetminorBadStu(filename,num)1 for i=0 to num-12 do for j=0 to m-1 3 Do if maminorScorei.mScorej604 Then k15 Break6 If k=17 Then if mSearchByStuNum(maminorScorei.mNum,stu,aver,s,0,num)=0 then return 08 If display(stu,maminorScorei.filename)=0 then return 09 Return 1测试方案及其讨论: 在测试中首先使用原有的测试数据测试程序的正确性,所有功能均按要求实现。学生的基本信息数据如下所示 aaaaaa 0 18 mmmmmm A0011 bbbbbb 1 20 mmmmmm A1100 cccccc 1 19 mmmmmm A1101 dddddd 1 20 mmmmmm A1110 eeeeee 0 17 ffffff B0011 ffffff 0 18 ffffff B0022 gggggg 1 19 ffffff B0033 hhhhhh 1 20 ffffff B0044 rrrrrr 1 18 cccccc C1100 kkkkkk 0 18 cccccc C1101 wwwwww 1 19 cccccc C1102 qqqqqq 1 20 cccccc C1110 dajflk 1 22 dfssaa c3420 zzzzzz 0 20 gggggg c1110 xxxxxx 1 19 kkkkkk d1121 mamama 1 20 eeeeee d1010 vvvvvv 1 20 llllll e1111 mmmmmm 0 19 llllll e1111 kkkmmm 0 20 llllll e1112 eeemma 0 20 llllll e1113在测试数据中使用乱序测试了文件对于乱序的处理,使用长姓名,长地址和多空格测试系统对于长数据的处理,在测试中多添加了一组数据进行测试,程序正确忽略了最后一组数据。学生的成绩按A,B,C三系的顺序为 85 90 75 88 89 79 85 74 69 99 80 88 77 89 98 77 88 56 66 75 29 100 98 77 85 92 82 77 80 91 55 50 21 61 79 88 89 90 99 98 77 88 89 88 70 88 89 66 77 77 66 77 56 88 89 82 81 88 97 92 98 45 21 67 80 77 88 99 89 98 87 78 70 65 97 66 56 88 76 67 75 85 87 88 76 88 82 85 76 77 90 92 93 100 92 72 83 84 90 91第二学位的成绩按A,B,C三系的顺序为 ffffff 88 77 99 90 ffffff 77 88 69 55 cccccc 78 87 98 89 cccccc 60 55 77 88 ffffff 87 82 90 91 mmmmmm 77 78 88 89 mmmmmm 66 77 56 88 cccccc 77 88 99 98 cccccc 77 88 55 66 cccccc 77 78 77 87 mmmmmm 77 78 87 88 mmmmmm 67 99 88 55 ffffff 66 67 76 87 ffffff 88 89 55 75 ffffff 90 92 80 91 mmmmmm 87 60 51 22所有的数据均在程序中正常给出输出文件,结果运行正确。小结:该程序模拟了学生信息管理系统,分别为三种不同的用户提供了不能的系统来实现各自的功能。在系统实现的过程中,首先分析该问题将问题中的对象提取出来,再将对象抽象成系统中的类,在设计过程中需要将具体的数据在类中封装起来,并在类中提供公共的接口来为类的使用者提供操作类中的数据的函数,使类接口可以提供一系列的功能。在该系统的设计过程中可以看出,大型软件在设计的过程中首先最重要的是分析问题,将显示中的问题如何转化成一个一个的对象和对象的操作,对象之间的关系又是怎样的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论