收藏 分销(赏)

C专业课程设计研究应用生成绩标准管理系统.docx

上传人:快乐****生活 文档编号:2864479 上传时间:2024-06-07 格式:DOCX 页数:62 大小:653.93KB
下载 相关 举报
C专业课程设计研究应用生成绩标准管理系统.docx_第1页
第1页 / 共62页
C专业课程设计研究应用生成绩标准管理系统.docx_第2页
第2页 / 共62页
C专业课程设计研究应用生成绩标准管理系统.docx_第3页
第3页 / 共62页
C专业课程设计研究应用生成绩标准管理系统.docx_第4页
第4页 / 共62页
C专业课程设计研究应用生成绩标准管理系统.docx_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、中南大学面向对象编程C+课程设计汇报题 目 硕士成绩管理系统 学生姓名 神孟秋 指导老师 学 院 信息科学和工程学院_ 专业班级 计算机科学和技术1604 二一七 年 十 月目 录1.课程设计内容32.课程设计目标43.背景知识 44.工具/准备工作45.设计步骤、方法等45.1.步骤1:相关类定义,重载75.2.步骤2:单链表相关函数135.3.步骤3:文件操作函数申明和定义225.4.步骤4:统计函数申明和定义265.5.步骤5:菜单函数书写285.6.步骤6:登录界面(密码),欢迎界面实现316.设计结果及分析327.设计结论和感想398.对本设计过程及方法、手段改善提议399.参考文件

2、40程序设计基础实践汇报1. 课程设计内容该课程是C+编程和数据结构课程学习内容关键实践步骤,其关键目标在于经过综合程序课程设计,培养和提升学生独立分析问题、处理实际问题能力和计算机语言编程能力。利用Visual C+环境,用数据结构、面向对象程序设计思想进行程序设计、功效模块调试,完成相关设计题所要求任务、撰写课程设计汇报。设计一个硕士基础信息管理,实现对不一样学制硕士包含:学术硕士和工程硕士信息管理。定义一个基础硕士类,基础信息包含:学号、姓名、性别、年纪、课程成绩。派生出学术硕士类,增加属性包含:专业,发表论文(名称和等级(1、2、3),能够多篇,最多3篇),论文成绩,总成绩;工程硕士增

3、加属性包含:领域,参与项目(名称和等级(A,B,C,),项目成绩,总成绩。计算方法以下1) 学术硕士论文成绩计算:各个等级论文得分为:等级*10,每个学生论文最高90分;假设某硕士发表两篇论文,等级分别为1、2,那么论文成绩=(10/90+20/90)*100,总成绩=课程成绩*0.7+论文成绩*0.3;2) 工程硕士项目成绩计算:每个学生只参与一项项目,各个等级得分:A级90,B级75,C级60,不参与项目得分为0;总成绩=课程成绩*0.5+项目成绩*0.5基础功效和技术要求:1、 数据文件管理功效:创建新文件、打开文件、保留文件。2、计算和统计功效:完成统计中相关数据统计;1)能够打开已存

4、在数据表文件,对数据表中和某关键字匹配相关统计进行数据统计(包含:总数、平均值、分段信息),比如:按总成绩得分为100、9099、8089、7079、6069和不及格学生人数,和所占百分比。2)计算每个硕士总成绩。3、统计管理功效:统计管理采取链表或指针数组实现。1)输入添加/插入统计,并保留到数据文件中。2)查询、显示统计,依据用户要求按所给统计关键字查询一个或多个相关联统计各项信息。3)修改统计:能够打开已存在数据表文件,并对确定任意统计进行修改,在修改过程中,应显示统计信息,给出确定提醒,并对更新统计信息进行文件保留。4)删除统计:能够打开已存在数据表文件,能够删除数据表中任一统计,要求

5、含有逻辑删除(含有恢复功效)和物理删除功效,并对新数据表信息进行文件保留。2. 课程设计目标课程设计是学习过程关键步骤。经过课程设计,能够深入加深对C+语言基础知识了解,提升C+语言综合编程能力和程序调试技巧,为后续课程学习和实际问题处理打下良好基础。愈加好了解以下内容:算法基础概念;使用常量、变量、运算符和表示式、程序控制结构、数组、函数、编译预处理、指针、类和对象特征、正确使用类和对象、运算符重载、继承和派生、多态性和虚函数、输入输出流文件操作等C+语言要素进行程序设计;在一个C+语言开发环境下进行C+程序设计基础步骤。3. 背景知识 C+是多年来中国外广泛使用现代计算机语言,它既支持基于

6、过程程序设计,也支持面向对象程序设计,属高级语言范围。它既含有高级语言特点,又含有汇编语言特点。它能够作为工作系统设计语言,编写系统应用程序,也能够作为应用程序设计语言,编写不依靠计算机硬件应用程序,代码清楚精简,十分灵活,作为计算机基础课程,我们应熟练掌握。4. 工具/准备工作自主学习C+语言中输入输出流文件操作相关知识,温习C+语言知识,操作软件Visual Studio 。5. 设计步骤、方法等思绪:首先,仔细阅读课程设计题目标具体要求(这点很关键),先写出自己思绪,怎样实现各个功效,然后就是分多个大块敲代码,每完成一个函数功效,去调试运行,假如能运行话说明这块函数大致应该是没有问题了,

7、能够进入下一模块书写,不然这段代码没有经过。第一次进入:登录界面输入两类硕士相关数据退出函数exit(0)以后进入:登录界面菜单界面6.信息查找2.信息插入3.信息删除4.信息输出5.信息修改7.信息统计8.退出函数9.初始化该系统1.信息录入模块书写构建次序:1. 进行类定义,基类硕士,派生类学术硕士和工程硕士,类中变量申明,进行重载,使之能够实现cin cout 输入和输出。2. 进行单链表操作函数书写,使之能够对两类派生硕士进行链表建立、输出、插入、修改、删除等基础操作。3. 进行相关文件操作函数申明和定义,使程序能够对缓存中数据读到磁盘中,也能够将磁盘中数据读取到内存中。4. 统计函数

8、书写,这部分用到了静态变量和静态函数,程序能够实现基础统计功效。5. 菜单函数书写,这部分就是美观,简单大方,cout语句进行图形绘制即可,比较轻易。6. 密码,欢迎界面实现:使程序愈加美观,也能够填写正确用户名和口令方可进入系统。 1-2-3-4-5-6下面进行代码说明:5.1. 步骤1:相关类定义,重载 这部分对于整个代码来说相对比较简单,利用c+对类定义,类中数据组员申明,重载函数使用即可实现,这里我着重说明一下重载部分,以学术硕士重载为例(其它相同),重载过程中输出语句要尽可能美观,而输入语句话,我想要能够对用户误操作进行处理,因为学号为0是退出录入,所以当用户输入0时,if判定语句判

9、定是否为0,若为零,return input结束函数,其它比如说成绩,等级输入全部有限定,同理,if语句判定,若为真,配合goto语句回到输入数据前,重新输入,这么做好处,用户一旦输入错误一个数据,立即会令用户重新输入(个人认为,相对于部分作品,等候用户将其全部数据输入以后,每个数据进行判定,若有一个不符和要求,即不录入数据好部分),其中浮点型数据判定比较关键(不能正确保留数据,判定浮点型数据是否=一个固定值需要调用fabs函数实现),还有,在输入过程中有部分数据是经过计算得到,这么数据我在用户输入部分必需数据后就会进行赋值,调用计算函数计算赋值,用户一旦输入完成,相关值便赋值给该对象数据域。

10、不过也是有缺点,goto语句用偏多,这点不利于程序稳定性,应努力加强。源代码(部分):/重载函数(派生类:学术硕士)istream& operator(istream &input, academicGraduateStudent &astu)cout astu.num;if (astu.num = 0)return input;cout astu.name;loopse:cout astu.sex;/判定性别是否正当if (!(astu.sex = 男 | astu.sex = 女)cerr 性别输入有误,请重新输入! endl;goto loopse;cout astu.age;loopc

11、:cout astu.courseScore;if (astu.courseScore 100)cerr 课程成绩输入有误,请重新输入! endl;goto loopc;cout astu.major;looppn:cout 发表论文篇数: astu.paperNumber;if (!(astu.paperNumber 0)cerr 输入有误,论文篇数范围1 - 3 = 1)cout astu.apaper.paper1;loopff:cout astu.apaper.paperLevel1;/判定等级是否正当if (!(astu.apaper.paperLevel1 = 1 | astu.a

12、paper.paperLevel1 = 2 | astu.apaper.paperLevel1 = 3)cerr 输入等级有误(等级为1 2 3),请重新输入! endl;goto loopff;loopf:cout astu.apaper.paper1Score;/判定分数是否正当if (astu.apaper.paper1Score 90)cerr 输入分数一有误,请重新输入! = 2)cout astu.apaper.paper2;loopss:cout astu.apaper.paperLevel2;if (!(astu.apaper.paperLevel2 = 1 | astu.ap

13、aper.paperLevel2 = 2 | astu.apaper.paperLevel2 = 3)cerr 输入等级有误(等级为1 2 3),请重新输入! endl;goto loopss;loops:cout astu.apaper.paper2Score;if (astu.apaper.paper2Score 90)cerr 输入分数二有误,请重新输入! = 3)cout astu.apaper.paper3;looptt:cout astu.apaper.paperLevel3;if (!(astu.apaper.paperLevel3 = 1 | astu.apaper.paper

14、Level3 = 2 | astu.apaper.paperLevel3 = 3)cerr 输入等级有误(等级为1 2 3),请重新输入! endl;goto looptt;loopt:cout astu.apaper.paper3Score;if (astu.apaper.paper3Score 90)cerr 输入分数三有误,请重新输入! endl;goto loopt;cout 论文成绩:;astu.paperScore = astu.calculatePaperScore();cout astu.paperScore endl;cout 总成绩:;astu.sumScore = ast

15、u.calculateSumScore();cout astu.sumScore endl;return input;class graduateStudentpublic:graduateStudent() ;/结构函数graduateStudent() ;/析构函数protected:int num;/学号string name;/姓名string sex;/性别int age;/年纪float courseScore;/课程成绩;/学术硕士class academicGraduateStudent:public graduateStudentpublic:academicGraduate

16、Student *paNext;/定义一个指针,链表操作academicGraduateStudent() apaper.paper1Score = 0.0;apaper.paper2Score = 0.0;apaper.paper3Score = 0.0;apaper.paperLevel1 = 0;apaper.paperLevel2 = 0;apaper.paperLevel3 = 0;/结构函数academicGraduateStudent() ;/析构函数int getNum()const return num; /获取学号string getName()const return n

17、ame; /获取姓名float calculatePaperScore();/计算论文分数float calculateSumScore();/计算总成绩/重载函数friend ostream& operator(istream&, academicGraduateStudent&);/统计函数static void statisticalData(academicGraduateStudent*);protected:static float sumAcademicScore;/学术硕士全体总成绩static int countAcademicNumber;/学术硕士总人数static fl

18、oat averageAcademicScore;/学术硕士平均成绩static int a6;/学术硕士总分分段人数string major;/专业struct paper/发表论文string paper1;float paper1Score;int paperLevel1;string paper2;float paper2Score;int paperLevel2;string paper3;float paper3Score;int paperLevel3;apaper;/apaper代表是academicGraduateStudentpaperint paperNumber;/发表

19、论文数float paperScore;/论文成绩float sumScore;/总成绩;/工程硕士class engineeringGraduateStudent :public graduateStudentpublic:engineeringGraduateStudent *peNext;/定义一个指针,链表操作engineeringGraduateStudent() ;/结构函数engineeringGraduateStudent() ;/析构函数int getNum()const return num; /获取学号string getName()const return name;

20、/获取姓名float calculateSumScore();/计算总分数 /重载函数friend ostream& operator(istream&, engineeringGraduateStudent&);/统计函数static void statisticalData(engineeringGraduateStudent*);protected:static float sumEngineeringScore;/工程硕士全体总成绩static int countEngineeringNumber;/工程硕士总人数static float averageEngineeringScore

21、;/工程硕士平均成绩static int e6;/学术硕士总分分段人数string field;/领域struct project/参与项目string pName;/项目名称char pLevel;/项目等级A,B,Ceproject;float projectScore;/项目成绩float sumScore;/总成绩;5.2. 步骤2:单链表相关函数这一块代码书写我思绪:因为有两类派生硕士,而文件操作需要是告诉计算机字节数读取,所以,建立两个单链表,分别对学术,工程类硕士进行操作,链表优势确实比数组好,能够说,链表就是一个动态数组,链表书写过程中是我又复习了一遍上学期学知识,愈加加深了头

22、结点关键作用(头结点中数据域是没有用,只有指针域有用),我将两个头结点均申明为全局变量,方便函数调用使用,下面展示学术类源代码,工程类同理。源代码(部分):/学术类硕士一般函数定义academicGraduateStudent* seekAcademicData(academicGraduateStudent *head)/查找某个学术硕士数据if (head-paNext = NULL)/判定缓存中是否有数据cerr 错误代码:0x123458! endl;cerr 异常错误!(请上报管理员处理) endl;system(pause);exit(0);loop:cout 学号(1), 姓名(

23、2)? i;if (!(i = 1 | i = 2)cerr 输入有误,请重新输入! paNext;int targetNum;string targetName;switch (i)case 1:loopnu:cout 请输入学号: targetNum;while (p-getNum() != targetNum)p = p-paNext;if (p = NULL)cerr 没有这个数据!请重新输入! endl;goto loopnu;return p;break;case 2:loopna:cout 请输入姓名: targetName;while (p-getName() != targe

24、tName)p = p-paNext;if (p = NULL)cerr 没有这个数据!请重新输入! endl;goto loopna;return p;break;default:cerr 错误代码:0x123459! endl;cerr 异常错误!(请上报管理员处理) endl;system(pause);exit(0);academicGraduateStudent* inputAcademicData(academicGraduateStudent *head)/录入学术硕士数据academicGraduateStudent *p, *q;p = q = new academicGra

25、duateStudent;if (p = NULL | q = NULL)/申请内存失败操作cerr 错误代码:0x123456! endl;cerr 异常错误!(请上报管理员处理) endl;system(pause);exit(0);cout 开始录入数据(学号为零时结束) *p;cout 录入成功! getNum() != 0 )if (i = 1)head-paNext = p;elseq-paNext = p;q = p;p = new academicGraduateStudent;if (p = NULL)/申请内存失败操作cerr 错误代码:0x123457! endl;cer

26、r 异常错误!(请上报管理员处理) *p;p-getNum();if (p-getNum() != 0)cout 录入成功! endl;elsecout 录入结束! paNext = NULL;return head;academicGraduateStudent* insertAcademicData(academicGraduateStudent *head)/插入某个学术硕士数据if (head-paNext = NULL)/判定缓存中是否有数据cerr 错误代码:0x123458! endl;cerr 异常错误!(请上报管理员处理) endl;system(pause);exit(0)

27、;academicGraduateStudent *p, *q;cout 请输入一个新数据(学术硕士) endl;p = new academicGraduateStudent;if (p = NULL)cerr 错误代码:0x123458! endl;cerr 异常错误!(请上报管理员处理) *p;cout 录入成功! endl;cout 请输入插入在哪个数据以后? paNext = q-paNext;q-paNext = p;return head;academicGraduateStudent* delAcademicData(academicGraduateStudent *head)

28、/删除某个学术硕士数据if (head-paNext = NULL)/判定缓存中是否有数据cerr 错误代码:0x123458! endl;cerr 异常错误!(请上报管理员处理) endl;system(pause);exit(0);academicGraduateStudent *p, *q;loop:cout 学号(1), 姓名(2)? i;if (!(i = 1 | i = 2)cerr 输入有误,请重新输入! paNext;q = head;int targetNum;string targetName;switch (i)case 1:loopnu:cout 请输入学号: targ

29、etNum;while (p-getNum() != targetNum)q = p;p = p-paNext;if (p = NULL)cerr 没有这个数据!请重新输入! endl;goto loopnu;break;case 2:loopna:cout 请输入姓名: targetName;while (p-getName() != targetName)q = p;p = p-paNext;if (p = NULL)cerr 没有这个数据!请重新输入! endl;goto loopna;break;default:cerr 错误代码:0x123459! endl;cerr 异常错误!(请

30、上报管理员处理) endl;system(pause);exit(0);i = 0;loopq:cout 是否确定删除?是(1), 否(2) i;if (i = 1)q-paNext = p-paNext;else if (i = 2)cerr 取消成功! endl;elsecout 输入有误,请重新输入! paNext;if (head-paNext = NULL)cerr 错误代码:0x156456(链表中无数据) endl;cerr 请联络管理员处理! endl;system(pause);exit(0);while (p != NULL)cout *p paNext;return;vo

31、id modifyAcademicData()/修改学术硕士数据academicGraduateStudent *p, *q;p = seekAcademicData(aHead);q = new academicGraduateStudent;q-paNext = p-paNext;if (q = NULL)cerr 错误代码0x156112 endl;cerr 请联络管理员处理! *q;int i = 0;loop:cout 是否确定修改 是(1), 否(2)? i;if (i = 1)*p = *q;cout 修改成功 endl;else if (i = 2)cout 取消成功! end

32、l;delete q;elsecerr 输入有误, 请重新输入! paNext;ofstream outfile(AcademicStudentData.txt, ios:out);if ( !outfile )cerr 文件打开失败! endl;cerr 错误代码0x125158 endl;cerr 请联络管理员处理 endl;system(pause);exit(0);while (p != NULL)outfile paNext;outfile.close();/建立一个dat二进制文件,方便以后读取p = head-paNext;/重新赋值ofstream outfiled(Acade

33、micStudentData.dat, ios:out|ios:binary);if (!outfiled)cerr 文件打开失败! endl;cerr 错误代码0x125158 endl;cerr 请联络管理员处理 paNext;outfiled.close();return;/读取磁盘数据到内存academicGraduateStudent* getAcademicStudentData(academicGraduateStudent *head)/获取磁盘中学术硕士数据到缓存loop:ifstream infile(AcademicStudentData.dat, ios:in | ios:binary);if (!infile

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服