C++学生成绩管理系统课程设计报告.docx
- 文档编号:26216462
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:36
- 大小:196.72KB
C++学生成绩管理系统课程设计报告.docx
《C++学生成绩管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++学生成绩管理系统课程设计报告.docx(36页珍藏版)》请在冰豆网上搜索。
C++学生成绩管理系统课程设计报告
C++面向对象程序设计课程设计
设计题目:
成绩管理系统
专业:
计算机科学与技术
班级:
0314401
学号:
031440122
姓名:
贺超
日期:
2015年10月25日—2015年12月25日
成绩:
一、选题背景
学生成绩管理系统是对学生信息及成绩的管理。
开发工具VisualC++。
主要用于对学生的学号、姓名等基本信息以及各个学科成绩进行增加、删除、修改、查询以及保存到文件等操作。
系统给用户提供一个人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。
二、方案论证
本系统采用c++控制台程序来实现程序所需的所有要求,具体实现如下:
1.系统主控平台
通过主菜单允许用户选择想要的操作。
包括输入学生信息、显示学生信息、查询学生信息、修改学生信息、删除学生信息、显示所有学生信息、统计各个分数段学生信息、学生按总分排序输出。
通过输入相应的序号选择相应的操作。
2.增加学生成绩信息
用户根据提示输入学生的学号、姓名、性别、4门课程的成绩(课程名称自定)。
输入完一条学生记录,保存在学生数组中,可选择继续输入下条学生记录还是退回到主菜单。
3.显示学生信息
将保存在学生数组中的学生记录逐行显示出来。
若数据很多,应该每显示若干行后暂停,按回车后继续显示后续内容。
4.查询学生信息
先询问按学号、姓名、成绩做查询,若按学号查询,则输入要查找的学号,然后在学生数组中找到该学号的学生记录,显示出该学生的信息。
若找不到该学号信息,则显示无此学号。
若按姓名查询,则输入要查找的姓名,然后在学生数组中找到该姓名的学生记录,显示出该学生的信息。
若找不到该姓名信息,则显示无此姓名。
若按成绩查询,则输入要查找的科目及成绩范围,然后在学生数组中找到该成绩范围的学生记录(可以有多个学生),显示出相关学生的信息。
若找不到信息,则显示无此成绩。
每次查询完,询问是否继续查询,是则继续下轮查询,否则退回主菜单。
5修改学生信息
先提示输入要修改的学生的学号,在学生数组中找出该学生记录,若找到,则重新输入学生的姓名、性别、4门课程的成绩等。
然后保存到学生数组的该学生记录中。
若找不到,则显示无此学号。
6.删除学生信息
先提示输入要删除的学生的学号,在学生数组中找出该学生记录,若找到,则在学生数组中删除该学生记录。
若找不到,则显示无此学号。
7.学生信息按总分排序
在本模块中,系统自动遍历信息链表并排序来对链表中所有的信息进行排序,并在排序后显示排序后的所有信息。
8.保存数据到文件与将文件数据装入学生数组
在系统退出前,先将学生数组的学生信息保存的文件中。
然后结束系统。
每次进入系统时,先将文件中的学生数据装入学生链表中,然后才进入系统的主菜单。
本系统的数据存储利用类对象链表,定义学生信息类,将学生信息定义为类的成员变量,并定义初始化信息、修改信息、显示信息、计算总分、计算平均分这几个类成员函数,方便数据的增加与修改。
系统中录入学生数据前会在系统类对象链表中检测是否存在与输入的学号相同的信息,如果存在并继续输入了信息,则会出现信息的重复和搜索不到的情况,因此,设置数据检查环节可以避免数据的重复录入,当出现输入了重复的数据时,会有系统提示,提示输入的信息已存在并提供重新输入的机会;另在输入学号查找和删除部分,如果系统在检测类对象链表的时候未发现系统中包含输入的学号,则输出提示,输入的信息在系统中不存在;系统在学生信息查询部分,有根据学生成绩查询所有符合条件的学生信息,这部分存在输入分数的上下限问题,必须存在上限大于等于下限,并且上下限必须都在分数的范围内,因此每次输入一个分数都设置一个判断语句来判断是否符合条件,如果不符合提示重新输入。
本系统开发环境:
VC++6.0
使用开发语言:
C++
三、过程论述
详细设计:
图1系统模块图
如图1,本系统分为添加学生信息模块、删除学生信息模块、修改学生信息模块、查找学生信息模块、显示学生信息模块、学生信息排序、统计学生信息七个主要实现功能的模块,每个模块分别有个主函数,用来实现这个模块的信息。
1.系统学生信息类设计:
classMenu
{
public:
intTheMenu();
voidWork();
voidSave();
voidRead();
intReadOnePart(intnPass,charcOneLine[],intn,charcC[],intm);
intnEnd;
intnChoose;
Menu();
~Menu();
protected:
voidInsert();
voidRevise();
voidDelete();
voidSearch();
voidShow();
};
Menu:
:
Menu()
{
nEnd=1;
nChoose=0;
}
Menu:
:
~Menu()
{
}
classWorker:
publicMenu
{
public:
intTheMenu();
voidWork();
protected:
voidInsert();
voidRevise();
voidDelete();
voidSearch();
voidOrderInChinese();
voidOrderInEnglish();
voidOrderInMath();
voidOrderInSum();
voidShow();
};
classInformation
{
//数据:
public:
charcNum[12];//学号
charcName[12];//姓名
charcSex[12];//性别
intnChinese;
intnMath;
intnEnglish;
intnSum;
Information*pSNext;
};
2.添加学生信息模块:
图2添加学生信息流程图
添加信息的时候会检测系统中是否含有同样学号的学生信息,如果不存在才可以添加,如果已经存在,需要输出提示。
添加学生信息函数:
voidWorker:
:
Insert()
{
intnCheck=0;//用于判断是否存在
intnScore1;
intnScore2;
intnScore3;
floatnSum;
cout<<"**************************************************************"< cout<<"*请输入学号: *"< cin>>cNum; pSSearch=pSHead;//遍历指针指向头指针,开始遍历链表 while(pSSearch! =NULL) { if(strcmp(pSSearch->cNum,cNum)==0)//如果等于0表示两边字符数组相等,即存在 { cout<<"**************************************************************"< cout<<"*输入的学号已存在! *"< cout<<"**************************************************************"< nCheck=1;//用此变量标记是否有相同的存在,有则为1,没有则为0 break; } pSSearch=pSSearch->pSNext;//令遍历指针指向下一个节点 } //查找不存在再插入信息,因此nCkeck为0 if(nCheck==0)//向链表中插入值 { cout<<"*请输入姓名: *"< cin>>cName; cout<<"*请输入性别: *"< cin>>cSex; cout<<"*请输入语文成绩: *"< cin>>nChinese; cout<<"*请输入数学成绩: *"< cin>>nMath; cout<<"*请输入英语成绩: *"< cin>>nEnglish; nSum=nChinese+nMath+nEnglish; pSSearch=pSHead;//遍历指针指向头指针 pSFormer=pSHead;//最开始初始化为指向头指针 if(pSSearch==NULL)//如果头指针为空的话,直接把数据插入链表 { pToThis=(Information*)malloc(nSize);//开辟一个节点大小的内存区 pSHead=pToThis;//令头指针指向第一个节点 pToThis->pSNext=NULL;//此时链表内只存在一个节点,因此该节点的指针不指向任何节点 for(inti=0;i<12;i++)//字符数组一位一位的赋值进去,不可以直接赋值 { //缓存区数据存入节点中 pToThis->cNum[i]=cNum[i]; pToThis->cName[i]=cName[i]; pToThis->cSex[i]=cSex[i]; } pToThis->nChinese=nChinese; pToThis->nMath=nMath; pToThis->nEnglish=nEnglish; pToThis->nSum=nSum; } else { //当头指针不是空的时候,即链表内存在节点,需要遍历节点,我们插入默认按照学号由小到大排序 while(pSSearch! =NULL) { if(strcmp(pSSearch->cNum,cNum)>0)//表示新节点的编号大于正遍历的节点,要插在这个节点之前 { //插入条件符合,缓存信息小于正在搜索的信息,则插入消息 if(pSSearch==pSHead) { //如果查找的指针等于头指针 pToThis=(Information*)malloc(nSize); pSHead=pToThis; pToThis->pSNext=pSSearch;//令新节点的指针指向刚才正在遍历的节点,让新的节点连入链表 for(inti=0;i<12;i++)//字符数组一位一位的赋值进去,不可以直接赋值 { //缓存区数据存入节点中 pToThis->cNum[i]=cNum[i]; pToThis->cName[i]=cName[i]; pToThis->cSex[i]=cSex[i]; } pToThis->nChinese=nChinese; pToThis->nMath=nMath; pToThis->nEnglish=nEnglish; pToThis->nSum=nSum; break; } else { //当搜索的节点并非首节点 pToThis=(Information*)malloc(nSize); pToThis->pSNext=pSSearch; pSFormer->pSNext=pToThis; for(inti=0;i<12;i++)//字符数组一位一位的赋值进去,不可以直接赋值 { //缓存区数据存入节点中 pToThis->cNum[i]=cNum[i]; pToThis->cName[i]=cName[i]; pToThis->cSex[i]=cSex[i]; } pToThis->nChinese=nChinese; pToThis->nMath=nMath; pToThis->nEnglish=nEnglish; pToThis->nSum=nSum; break; } } pSFormer=pSSearch;//指向前一个节点的指针指向当前节点 pSSearch=pSSearch->pSNext; //当搜寻的尾节点仍然没有打到插入要求 if(pSSearch==NULL) { pToThis=(Information*)malloc(nSize); pSFormer->pSNext=pToThis; pToThis->pSNext=NULL; for(inti=0;i<12;i++)//字符数组一位一位的赋值进去,不可以直接赋值 { //缓存区数据存入节点中 pToThis->cNum[i]=cNum[i]; pToThis->cName[i]=cName[i]; pToThis->cSex[i]=cSex[i]; } pToThis->nChinese=nChinese; pToThis->nMath=nMath; pToThis->nEnglish=nEnglish; pToThis->nSum=nSum; break; } } } cout<<"**************************************************************"< cout<<"*信息添加成功! *"< cout<<"**************************************************************"< } cout<<"**************************************************************"< } 3.删除信息模块: 图3删除信息流程图 在删除信息模块中,首先输入需要删除的学生学号,在信息链表中查询,如果存在,则删除需要删除的信息,如果不存在,则提示所需要删除的信息不存在。 删除信息函数代码: voidWorker: : Delete() { cout<<"**************************************************************"< cout<<"*请输入需要删除的学号: *"< cin>>cNum; pSSearch=pSHead; pSFormer=pSHead; while(pSSearch! =NULL) { if(strcmp(pSSearch->cNum,cNum)==0) { if(pSFormer==pSHead)//如果被查到的节点是第一个节点,pFormer是头指针 { pSHead=pSSearch->pSNext; } else { pSFormer->pSNext=pSSearch->pSNext;//令前一个节点中指向下一个节点的指针直接指向被删除节点的下一个节点,以达到删除该节点的目的 } free(pSSearch); cout<<"**************************************************************"< cout<<"*该学号信息已删除! *"< cout<<"**************************************************************"< break; } pSFormer=pSSearch;//让pFormer指针指向当前的节点,留着下一次用 pSSearch=pSSearch->pSNext;//pSSearch指向下一个节点 } if(pSSearch==NULL) { //输出 cout<<"**************************************************************"< cout<<"*输入的学号信息不存在! *"< cout<<"**************************************************************"< } } 4.修改信息模块 图4.修改学生信息流程图 在修改学生信息模块中,首先输入需要修改的学号,在信息链表中查找信息,如果查找不到则输出提示,输入的学号不存在,如果存在,则调用类对象成员函数对信息进行修改。 修改模块的代码如下: voidWorker: : Revise() { floatnSum; //输入需要修改的信息 cout<<"**************************************************************"< cout<<"*请输入需要修改的学号: *"< cin>>cNum; pSSearch=pSHead; while(pSSearch! =NULL) { //如果匹配的话,则重新输入各个信息 if(strcmp(pSSearch->cNum,cNum)==0) { cout<<"*请输入姓名: *"< cin>>cName; cout<<"*请输入性别: *"< cin>>cSex; cout<<"*请输入语文成绩: *"< cin>>nChinese; cout<<"*请输入数学成绩: *"< cin>>nMath; cout<<"*请输入英语成绩: *"< cin>>nEnglish; nSum=nChinese+nMath+nEnglish; //将修改的信息存入链表 for(inti=0;i<12;i++)//字符数组一位一位的赋值进去,不可以直接赋值 { //缓存区数据存入节点中 pSSearch->cNum[i]=cNum[i]; pSSearch->cName[i]=cName[i]; pSSearch->cSex[i]=cSex[i]; } pSSearch->nChinese=nChinese; pSSearch->nMath=nMath; pSSearch->nEnglish=nEnglish; pSSearch->nSum=nSum; cout<<"**************************************************************"< cout<<"*信息已修改! *"< cout<<"**************************************************************"< break; } pSSearch=pSSearch->pSNext;//遍历指针指向下一个节点,用于下一次比较 } if(pSSearch==NULL) { cout<<"**************************************************************"< cout<<"*输入的学号信息不存在! *"< cout<<"**************************************************************"< } } 5.查找学生信息 图5查找学生信息流程图 在查找信息模块中,利用学号查询符合条件的学生信息均可输出,而且添加了对上下限的判断。 查找学生信息代码: voidWorker: : Search() { intnKey=0; //输入查询的信息 cout<<"**************************************************************"< cout<<"请输入学号: *"< cin>>cNum; pSSearch=pSHead;//从头开始遍历链表 while(pSSearch! =NULL) { if(strcmp(pSSearch->cNum,cNum)==0) { nKey=1; cout<<"**************************************************************"< cout<<"*查询结果*"< cout<<"学号: "< cout<<"姓名: "< cout<<"性别: "< cout<<"语文成绩: "<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 学生 成绩管理系统 课程设计 报告