《C++学生成绩管理系统课程设计报告.pdf》由会员分享,可在线阅读,更多相关《C++学生成绩管理系统课程设计报告.pdf(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+面向对象程序设计课程设计 设计题目:成绩管理系统 专 业:计算机科学与技术 班 级:0314401 学 号:031440122 姓 名:贺超 日 期:2015 年 10 月 25 日2015 年 12 月 25 日 成 绩:目录 一、选题背景 3 二、方案论证 3 1。系统主控平台 3 2。增加学生成绩信息 3 3.显示学生信息 3 4。查询学生信息 3 5 修改学生信息 4 6。删除学生信息 4 7。学生信息按总分排序 4 8.保存数据到文件与将文件数据装入学生数组 4 三、过程论述 5 1。系统学生信息类设计:5 2。添加学生信息模块:7 3。删除信息模块:13 4。修改信息模块 15
2、 5。查找学生信息 17 6。显示学生信息模块 19 7。学生信息排序模块 21 8。保存信息模块 26 9.读取信息模块 27 四、结果分析 29 1.系统主函数 29 2.添加学生信息 29 3。删除学生信息 30 4.修改学生信息 30 5。查找学生信息 31 6.显示学生信息 31 7。学生信息排序 32 8.学生信息排序 32 五、课程设计总结 33 参考文献 33 一、选题背景 学生成绩管理系统是对学生信息及成绩的管理。开发工具Visual C+.主要用于对学生的学号、姓名等基本信息以及各个学科成绩进行增加、删除、修改、查询以及保存到文件等操作。系统给用户提供一个人机界面,使用户可
3、以根据提示输入操作项,调用系统提供的管理功能。二、方案论证 本系统采用 c+控制台程序来实现程序所需的所有要求,具体实现如下:1.系统主控平台 通过主菜单允许用户选择想要的操作。包括输入学生信息、显示学生信息、查询学生信息、修改学生信息、删除学生信息、显示所有学生信息、统计各个分数段学生信息、学生按总分排序输出。通过输入相应的序号选择相应的操作。2.增加学生成绩信息 用户根据提示输入学生的学号、姓名、性别、4 门课程的成绩(课程名称自定)。输入完一条学生记录,保存在学生数组中,可选择继续输入下条学生记录还是退回到主菜单.3.显示学生信息 将保存在学生数组中的学生记录逐行显示出来。若数据很多,应
4、该每显示若干行后暂停,按回车后继续显示后续内容。4。查询学生信息 先询问按学号、姓名、成绩做查询,若按学号查询,则输入要查找的学号,然后在学生数组中找到该学号的学生记录,显示出该学生的信息。若找不到该学号信息,则显示无此学号。若按姓名查询,则输入要查找的姓名,然后在学生数组中找到该姓名的学生记录,显示出该学生的信息。若找不到该姓名信息,则显示无此姓名。若按成绩查询,则输入要查找的科目及成绩范围,然后在学生数组中找到该成绩范围的学生记录(可以有多个学生),显示出相关学生的信息。若找不到信息,则显示无此成绩。每次查询完,询问是否继续查询,是则继续下轮查询,否则退回主菜单。5 修改学生信息 先提示输
5、入要修改的学生的学号,在学生数组中找出该学生记录,若找到,则重新输入学生的姓名、性别、4 门课程的成绩等。然后保存到学生数组的该学生记录中.若找不到,则显示无此学号。6。删除学生信息 先提示输入要删除的学生的学号,在学生数组中找出该学生记录,若找到,则在学生数组中删除该学生记录。若找不到,则显示无此学号。7。学生信息按总分排序 在本模块中,系统自动遍历信息链表并排序来对链表中所有的信息进行排序,并在排序后显示排序后的所有信息。8。保存数据到文件与将文件数据装入学生数组 在系统退出前,先将学生数组的学生信息保存的文件中.然后结束系统。每次进入系统时,先将文件中的学生数据装入学生链表中,然后才进入
6、系统的主菜单.本系统的数据存储利用类对象链表,定义学生信息类,将学生信息定义为类的成员变量,并定义初始化信息、修改信息、显示信息、计算总分、计算平均分这几个类成员函数,方便数据的增加与修改.系统中录入学生数据前会在系统类对象链表中检测是否存在与输入的学号相同的信息,如果存在并继续输入了信息,则会出现信息的重复和搜索不到的情况,因此,设置数据检查环节可以避免数据的重复录入,当出现输入了重复的数据时,会有系统提示,提示输入的信息已存在并提供重新输入的机会;另在输入学号查找和删除部分,如果系统在检测类对象链表的时候未发现系统中包含输入的学号,则输出提示,输入的信息在系统中不存在;系统在学生信息查询部
7、分,有根据学生成绩查询所有符合条件的学生信息,这部分存在输入分数的上下限问题,必须存在上限大于等于下限,并且上下限必须都在分数的范围内,因此每次输入一个分数都设置一个判断语句来判断是否符合条件,如果不符合提示重新输入。本系统开发环境:VC+6.0 使用开发语言:C+三、过程论述 详细设计:学生成绩管理系统添加学生信息删除学生信息修改学生信息查询学生信息显示学生信息成绩信息排序退出读取成绩信息保存到文件中 图 1 系统模块图 如图 1,本系统分为添加学生信息模块、删除学生信息模块、修改学生信息模块、查找学生信息模块、显示学生信息模块、学生信息排序、统计学生信息七个主要实现功能的模块,每个模块分别
8、有个主函数,用来实现这个模块的信息。1。系统学生信息类设计:class Menu public:int TheMenu();void Work();void Save();void Read();int ReadOnePart(int nPass,char cOneLine,int n,char cC,int m);int nEnd;int nChoose;Menu();Menu();protected:void Insert();void Revise();void Delete();void Search();void Show();;Menu::Menu()nEnd=1;nChoose=
9、0;Menu:Menu()class Worker:public Menu public:int TheMenu();void Work();protected:void Insert();void Revise();void Delete();void Search();void OrderInChinese();void OrderInEnglish();void OrderInMath();void OrderInSum();void Show();class Information /数据:public:char cNum12;/学号 char cName12;/姓名 char cSe
10、x12;/性别 int nChinese;int nMath;int nEnglish;int nSum;Information*pSNext;2.添加学生信息模块:输入学号比较是否存在存在与否将添加的信息添加到链表输出学号已存在不存在存在 图 2 添加学生信息流程图 添加信息的时候会检测系统中是否含有同样学号的学生信息,如果不存在才可以添加,如果已经存在,需要输出提示。添加学生信息函数:void Worker::Insert()int nCheck=0;/用于判断是否存在 int nScore1;int nScore2;int nScore3;float nSum;cout ”*endl;c
11、out ”请输入学号:*cNum;pSSearch=pSHead;/遍历指针指向头指针,开始遍历链表 while(pSSearch!=NULL)if(strcmp(pSSearch-cNum,cNum)=0)/如果等于 0 表示两边字符数组相等,即存在 cout ”*”endl;cout 输入的学号已存在!*endl;cout *”pSNext;/令遍历指针指向下一个节点 /查找不存在再插入信息,因此 nCkeck 为 0 if(nCheck=0)/向链表中插入值 cout ”请输入姓名:”cName;cout *请输入性别:*”cSex;cout ”*请输入语文成绩:endl;cin nCh
12、inese;cout nMath;cout ”*请输入英语成绩:”nEnglish;nSum=nChinese+nMath+nEnglish;pSSearch=pSHead;/遍历指针指向头指针 pSFormer=pSHead;/最开始初始化为指向头指针 if(pSSearch=NULL)/如果头指针为空的话,直接把数据插入链表 pToThis=(Information*)malloc(nSize);/开辟一个节点大小的内存区 pSHead=pToThis;/令头指针指向第一个节点 pToThis-pSNext=NULL;/此时链表内只存在一个节点,因此该节点的指针不指向任何节点 for(in
13、t i=0;i nChinese=nChinese;pToThis-nMath=nMath;pToThis-nEnglish=nEnglish;pToThisnSum=nSum;else /当头指针不是空的时候,即链表内存在节点,需要遍历节点,我们插入默认按照学号由小到大排序 while(pSSearch!=NULL)if(strcmp(pSSearch-cNum,cNum)0)/表示新节点的编号大于正遍历的节点,要插在这个节点之前 /插入条件符合,缓存信息小于正在搜索的信息,则插入消息 if(pSSearch=pSHead)/如果查找的指针等于头指针 pToThis=(Information
14、)malloc(nSize);pSHead=pToThis;pToThis-pSNext=pSSearch;/令新节点的指针指向刚才正在遍历的节点,让新的节点连入链表 for(int i=0;i nSum=nSum;break;else /当搜索的节点并非首节点 pToThis=(Information*)malloc(nSize);pToThis-pSNext=pSSearch;pSFormerpSNext=pToThis;for(int i=0;i 12;i+)/字符数组一位一位的赋值进去,不可以直接赋值 /缓存区数据存入节点中 pToThiscNumi=cNumi;pToThis-cNa
15、me i=cNamei;pToThiscSexi=cSexi;pToThisnChinese=nChinese;pToThisnMath=nMath;pToThisnEnglish=nEnglish;pToThisnSum=nSum;break;pSFormer=pSSearch;/指向前一个节点的指针指向当前节点 pSSearch=pSSearchpSNext;/当搜寻的尾节点仍然没有打到插入要求 if(pSSearch=NULL)pToThis=(Information*)malloc(nSize);pSFormer-pSNext=pToThis;pToThis-pSNext=NULL;f
16、or(int i=0;i cNumi=cNumi;pToThis-cNamei =cNamei;pToThiscSexi=cSexi;pToThis-nChinese=nChinese;pToThis-nMath=nMath;pToThis-nEnglish=nEnglish;pToThis-nSum=nSum;break;cout ”*”endl;cout ”信息添加成功!endl;cout *endl;cout ”*”endl;3。删除信息模块:输入需要删除的学号比较是否存在存在与否删除该节点数据输出该学号信息不存在存在不存在结束 图 3 删除信息流程图 在删除信息模块中,首先输入需要删除
17、的学生学号,在信息链表中查询,如果存在,则删除需要删除的信息,如果不存在,则提示所需要删除的信息不存在。删除信息函数代码:void Worker::Delete()cout *endl;cout 请输入需要删除的学号:”cNum;pSSearch=pSHead;pSFormer=pSHead;while(pSSearch!=NULL)if(strcmp(pSSearchcNum,cNum)=0)if(pSFormer=pSHead)/如果被查到的节点是第一个节点,pFormer是头指针 pSHead=pSSearchpSNext;else pSFormer-pSNext=pSSearchpSN
18、ext;/令前一个节点中指向下一个节点的指针直接指向被删除节点的下一个节点,以达到删除该节点的目的 free(pSSearch);cout ”*endl;cout ”*该学号信息已删除!*”endl;cout ”*pSNext;/pSSearch 指向下一个节点 if(pSSearch=NULL)/输出 cout ”*”endl;cout ”输入的学号信息不存在!”endl;cout ”*endl;4.修改信息模块 输入需要修改的学生信息比较是否存在存在与否修改学生信息输出学生信息不存在存在不存在结束 图 4.修改学生信息流程图 在修改学生信息模块中,首先输入需要修改的学号,在信息链表中查找信
19、息,如果查找不到则输出提示,输入的学号不存在,如果存在,则调用类对象成员函数对信息进行修改。修改模块的代码如下:void Worker:Revise()float nSum;/输入需要修改的信息 cout *endl;cout 请输入需要修改的学号:”cNum,cNum)=0)cout cName;cout 请输入性别:endl;cin cSex;cout ”*请输入语文成绩:nChinese;cout *请输入数学成绩:*”nMath;cout 请输入英语成绩:”nMath=nMath;pSSearchnEnglish=nEnglish;pSSearchnSum=nSum;cout ”*”e
20、ndl;cout 信 息 已 修 改!*pSNext;/遍历指针指向下一个节点,用于下一次比较 if(pSSearch=NULL)cout *”endl;cout 输入的学号信息不存在!*endl;cout ”*”endl;5.查找学生信息 输入学生学号比较是否存在存在与否输出学生信息不存在存在不存在输出学生信息结束 图 5 查找学生信息流程图 在查找信息模块中,利用学号查询符合条件的学生信息均可输出,而且添加了对上下限的判断。查找学生信息代码:void Worker:Search()int nKey=0;/输入查询的信息 cout *”endl;cout ”请输入学号:endl;cin cN
21、um;pSSearch=pSHead;/从头开始遍历链表 while(pSSearch!=NULL)if(strcmp(pSSearchcNum,cNum)=0)nKey=1;cout *”endl;cout ”*查 询 结 果 *endl;cout ”学号:pSSearchcNum endl;cout 姓名:pSSearchcName endl;cout ”性别:”pSSearch-cSex endl;cout ”语文成绩:”nChinese endl;cout 数学成绩:”nMath endl;cout 英语成绩:nEnglish endl;cout ”*”endl;break;pSSea
22、rch=pSSearchpSNext;if(nKey=0)cout *”endl;cout ”*系 统 不 含 该 学 号 信 息 ”endl;cout ”*endl;6.显示学生信息模块 获得头指针判断指针是否为NULL显示项目信息否指针指向下一个节点 图 6。显示学生信息流程图 在显示系统所有信息模块中,是一个遍历链表的过程,一边遍历链表一边显示链表中所有的信息.显示所有信息代码:void Worker::Show()pSSearch=pSHead;/从头指针开始一个节点一个节点的显示各个节点的数据 cout ”*”endl;cout 学 生 信 息 如 下 *”endl;cout。wid
23、th(10);/定义显示距离 cout ”学号”;cout。width(10);cout ”姓名;cout.width(10);cout 性别;cout.width(10);cout ”语文”;cout。width(10);cout ”数学;cout。width(10);cout 英语”;cout.width(10);cout ”总分 endl;while(pSSearch!=NULL)cout。width(10);/定义显示距离 cout pSSearchcNum;cout.width(10);cout cSex;cout.width(10);cout pSSearchnChinese;co
24、ut.width(10);cout pSSearchnMath;cout。width(10);cout pSSearch-nEnglish;cout。width(10);cout pSNext;cout ”*pSNext=NULL;for(int i=0;i cNumi=pSSearch-cNumi;pSNOToThiscNamei=pSSearch-cNamei;pSNOToThiscSexi=pSSearch-cSexi;pSNOToThis-nChinese=pSSearchnChinese;pSNOToThis-nMath=pSSearch-nMath;pSNOToThisnEngli
25、sh=pSSearch-nEnglish;pSNOToThisnSum=pSSearch-nSum;else while(pSNoSearch!=NULL)if(pSNoSearch-nChinese pSSearchnChinese)/插入条件符合,缓存信息小于正在搜索的信息,则插入消息 if(pSNoSearch=pSNoHead)/如果查找的指针等于头指针 pSNOToThis=(Information*)malloc(nSize);pSNoHead=pSNOToThis;pSNOToThispSNext=pSNoSearch;for(int i=0;i 12;i+)/缓存区数据存入节点
26、中 pSNOToThis-cNumi=pSSearch-cNumi;pSNOToThiscNamei=pSSearchcNamei;pSNOToThiscSexi=pSSearch-cSexi;pSNOToThisnChinese=pSSearchnChinese;pSNOToThisnMath=pSSearchnMath;pSNOToThis-nEnglish=pSSearchnEnglish;pSNOToThisnSum=pSSearchnSum;break;else /当搜索的节点并非首节点 pSNOToThis=(Information)malloc(nSize);pSNOToThis
27、pSNext=pSNoSearch;pSNoFormarpSNext=pSNOToThis;for(int i=0;i cNumi=pSSearchcNumi;pSNOToThiscNamei=pSSearch-cNamei;pSNOToThis-cSexi=pSSearch-cSexi;pSNOToThisnChinese=pSSearchnChinese;pSNOToThisnMath=pSSearchnMath;pSNOToThis-nEnglish=pSSearchnEnglish;pSNOToThisnSum=pSSearch-nSum;break;pSNoFormar=pSNoSe
28、arch;pSNoSearch=pSNoSearch-pSNext;if(pSNoSearch=NULL)pSNOToThis=(Information)malloc(nSize);pSNoFormar-pSNext=pSNOToThis;pSNOToThispSNext=NULL;for(int i=0;i cNumi=pSSearchcNumi;pSNOToThiscNamei=pSSearchcNamei;pSNOToThis-cSexi=pSSearchcSexi;pSNOToThisnChinese=pSSearchnChinese;pSNOToThis-nMath=pSSearch
29、nMath;pSNOToThis-nEnglish=pSSearchnEnglish;pSNOToThis-nSum=pSSearchnSum;pSSearch=pSSearchpSNext;pSNoSearch=pSNoHead;/从头指针开始一个节点一个节点的显示各个节点的数据 cout ”*endl;cout *按语文成绩排序后的信息如下 ”endl;cout。width(10);/定义显示距离 cout ”学号”;cout.width(10);cout 姓名;cout.width(10);cout 性别;cout。width(10);cout ”语文”;cout。width(10);c
30、out ”数学;cout.width(10);cout 英语”;cout。width(10);cout 总分”endl;while(pSNoSearch!=NULL)cout。width(10);/定义显示距离 cout pSNoSearch-cNum;cout。width(10);cout cSex;cout。width(10);cout nChinese;cout。width(10);cout nMath;cout。width(10);cout nEnglish;cout。width(10);cout nSum pSNext;cout ”*”endl;8.保存信息模块 在保存信息模块中,遍
31、历整个信息数组,把每一条信息写入到 txt 文件中。保存信息模块代码如下:void Menu::Save()ofstream writefile;writefile。open(”学生信息.txt);pSSearch=pSHead;while(pSSearch!=NULL)writefile pSSearchcNum cName ”;”cSex ;pSSearch-nChinese ;”pSSearchnMath ;”pSSearch-nEnglish ;”nSum ”;”endl;pSSearch=pSSearch-pSNext;writefile.close();cout *”endl;co
32、ut ”信 息 保 存 成 功!”endl;cout *”endl;9.读取信息模块 读取信息模块中,读取一行 txt 文件中的信息,就是原来数组中一个元素的信息,读取一行信息后,拆分开重新存进数组中,完成信息的读取。读取信息代码:void Menu:Read()int nPass=0;/用于跟踪读取一行数据读到哪一位 char cOneLine1000;/用于存储读取的一行 string sOneline;ifstream readfile(”学生信息。txt”);if(readfile.fail()cout ”*endl;cout 暂 无 数 据 记 录!endl;cout cNamei=
33、cNamei;pToThis-cSexi=cSexi;pToThisnChinese=atoi(cChinese);pToThis-nEnglish=atoi(cEnglish);pToThisnMath=atoi(cMath);pToThis-nSum=atoi(cSum);if(pSHead=NULL)/当头指针为空时表示链表为空,放在第一个节点位置 pSHead=pToThis;pToThispSNext=NULL;else pSFormer-pSNext=pToThis;pToThis-pSNext=NULL;pSFormer=pToThis;cout *”endl;cout ”数 据
34、 装 载 成 功!*”endl;cout *”endl;readfile。close();四、结果分析 1.系统主函数 图 9 系统主菜单 2。添加学生信息 当输入的学号在系统中已经存在了,系统则会给出提示,并可以重新输入 图 10 系统学号重复显示 正确输入学生信息:图 11 添加学生信息成功 3。删除学生信息 当输入的学号不存在,则会提示不存在信息:图 12 删除学号不存在显示 而当输入正确的学号后,系统会删除信息:图 13 删除信息成功 4。修改学生信息 当输入的学号在系统中不存在,则给出提示:图 14 修改学号不存在显示 当输入的学号正确后,系统会提示修改学生信息:图 15 修改学生信息显示 5.查找学生信息 查找首先弹出菜单选择使用何种方式查找:菜单如下:图 16 正确查询信息显示 6.显示学生信息 图 17 显示学生信息 7.学生信息排序 图 18 排序主菜单 8。学生信息排序 图 19 按语文成绩排序 图 19 按数学成绩排序 图 19 按英语成绩排序 图 19 按总分成绩排序 五、课程设计总结 经过了课程设计的学习,对 C+程序设计又有了更深层次的理解,通过对课程设计的分析、编写、运行、调试,对 C+程序的结构,运行效果和程序的编写都有了更深层次的理解。尤其在本次课设中使用了类对象链表,并系统的学习了链表的操作,并利用类对象链表存储信息。参考文献