版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课程设计说明书本科毕业设计(题 目: 学生成绩管理系统(教师端)学生姓名: 陈学 院:工学院专 业:数字媒体技术班 级:2013级指导教师:二一四 年 十 一月 C+语言课程设计-学生成绩管理系统目录一、设计题目(问题)描述和要求- 1 -二、系统分析与模块设计- 1 -三、系统设计- 1 -1. 系统总体框架- 1 -2. 系统关键算法流程图- 1 -四、运行结果- 5 -五、小结- 5 -六、参考资料- 6 - 65 -一、设计题目(问题)描述和要求设计目的:为方便对学生成绩进行高效的管理,编写该程序以提高学生成绩管理效率。使用该程序之后,学校管理者可以查询某位学生、某个科目的成绩情况,
2、还可以对学生成绩进行排名,对学生的数据进行修改和删除,其中排名以按总分排名,并且还提供了多种浏览方式,查询结果包括各个科目的分数、总分。通过本系统可以很好的掌握学生成绩的分布,减轻管理人员的负担,也使学生的成绩和信息长时期的保留。 问题描述:编写一个简单的学生成绩管理系统。学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别、年级、班级、三个科目成绩、总分、总排名、各科目排名几个部分组成,学号不超过5个字符,姓名不超过3个字符,成绩为int型数据。该系统具有以下功能:程序开始执行时显示如下版权信息和主菜单: *学生成绩管理系统*学生信息l *1.登记l *2.编辑 l *3.顺序
3、 l 4.删除 浏览l * 5全部l *6个人l *7考试l * 8专业l *9指定系统设置 10默认 0.退出 *请输入(08): 通过键盘输入数字010后,程序能够执行相应的功能,执行完后回到上述主菜单继续等待用户输入,输入数字0后退出程序。(1)选择“登记”后,输入学生个数。按程序提示输入学号、姓名、性别、年级、班级、三个科目成绩、总分、总排名、各科目排名。(2)选择“编辑”,按提示输入要删除的学生的学号,输入学号,若改学号存在,则编辑相应的学生记录,如果该学号不存在,返回主菜单(3)选择“顺序”后,会显示从成绩高到低还是相反。该操作会改变程序中链表的连接顺序,因此浏览时候显示也是顺序改
4、变后的链表顺序输出。(4)(5)选择“全部”,系统会按照年级显示全部学生其成绩。(6)选择“个人”,系统会提示输入学生姓名或者学号进行寻找并显示。(7) 选择“考试”, 会按照每一年级的每一次考试显示成绩。(8) 选择“专业”,会按照专业进行成绩输出。(9) 选择“指定”,里面还有八种显示方式:分数段、排名、学期、班级、大一至大四,可以按照其进行浏览。(10) 进行系统相关的设置,如是否显示欢迎窗口,是否自动读取信息或是手动、是否浏览显示全部等(0)退出操作。二、系统分析与模块设计学生成绩管理系统结构图学生信息学生成绩管理系主程序统创建链表1.登记学生信息0.退出程序6.排序学生成绩5.浏览全
5、部信息4.修改学生信息3.删除学生信息2.搜索学生信息7其他多种浏览方式8.默认设置三、系统设计1. 系统总体框架学生成绩管理系统流程图学生成绩管理系统创建链表打开student.txt、set.txt文件 创建学生对象主菜单1.登记 退出系统 2.编辑3.顺序保存为文件4.删除5.全部6.个人9.指定 8.专业 7.考试10.默认设置2. 系统关键算法流程图 (1).系统包含的类库#include<iostream>#include<string>#include<fstream>#include<iomanip>#include<con
6、io.h>#include<windows.h>(2).主函数 main()函数 创建Manage对象象象 进入start并进行信息读取等前提操作,然后进入用户界面开始有用户选择操作(3)student类的设计与分析class student/*定义学生成绩类*/ private: Score *sco; string name;string pro; /专业int clas;int grade;string num;char sex;Student* next; ;表1 student类说明表名称属性说明sco数据成员成绩类开头name数据成员说明学生姓名pro数据成员说明
7、学生专业clas数据成员说明学生班级grade数据成员说明学生年级num数据成员说明学生学号sex数据成员说明学生性别next数据成员说明指向下一个节点的指针(4) .Manage类的设计与分析 class List int setSET; Student* stu;public: /添加void Add(); /添加学生 void AddScore(Student *istudent); /添加成绩 /浏览 int isEmpty(); int infoPass(string inum,string iname,char isex,int igrade,int iclas);void Ski
8、mAll(); void SkimClas(); void SkimPro(); void SpecSkim(); /指定的其他浏览方式void SkimByScore();void SkimByTerms();void SkimByPlace();void SkimByTest();void SkimByGrade(int igrade); void Find(string T); /查找void PrintAllScore(Score *q);/打印成绩,本程序用来打印第二次开始的考试成绩void InitScore(); /未给出成绩的学生进行 0 赋值void Delete(); /删
9、除void Edit(string Y); /编辑void EditScore(Student *istu);void OrderConscore(); /按总成绩排序void OrderObject(); /排名次void Compare(); /比较 void Save(); /保存int Read(); /读取 string OfProfe(); /选择学院专业int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow); /显示欢迎对话框int countSpecS
10、tudent(int igrade); /返回指定年级的学生数int countConStudent(); /返回总学生数/默认设置void DefaultSetting();/进行默认设置 void ReadSet(); /读取默认设置void SaveSet(); /保存默认设置int* ReturnSet(); char ReturnjudgeOfadd();void JudgeOfSave(); /判断是否保存已修改的信息void Start(); /类内部开始运行的操作void Interface(); /用户使用界面;名称属性说明Add()成员函数添加学生AddScore()成员函
11、数添加成绩isEmpty()成员函数判断是否有学生infoPass()成员函数判断输入信息合法性SkimAll()成员函数全部浏览SkimClas成员函数按班级浏览SkimPro()成员函数按专业浏览SpecSkim()成员函数其他浏览方式Find(string T)成员函数按学号寻找PrintAllScore(Score *q)成员函数输出所有学生数量InitScore()成员函数初始化成绩未满的学生的成绩Delete()成员函数删除学生Edit(string Y)成员函数编辑学生信息EditScore(Student *istu)成员函数编辑学生成绩OrderConscore()成员函数将
12、链表改变连接顺序进而改变输出顺序OrderObject()成员函数给每个学生每次考试排名次Save()成员函数保存学生信息Read()成员函数读取学生信息OfProfe()成员函数选择学生专业countSpecStudent(int igrade)成员函数返回相应年级学生数量countConStudent()成员函数返回总学生数DefaultSetting()成员函数默认设置ReadSet()成员函数读取设置SaveSet()成员函数保存设置ReturnSet()成员函数返回设置(5).Score类名称属性说明Score()构造函数无参构造函数Score(int *sc)构造函数只含成绩构造函
13、数Score(int *sc,int*or,int Con)构造函数含全部信息构造函数ReturnConScore()成员函数返回总分数(6). 输入学生资料模块:主要功能用来对学生的成绩进行收集和输入。在学生信息保存在系统中的前提下,输入要输入的人数,成绩录入需要输入学生资料,比如学号,姓名。在准确输入学生资料后,就可以对该学生的各科成绩进行录入。该学生各科成绩输入成功后,输入下一个学生资料时会先判断是否学号是否与之前的学生相同,如果相同,则显示提示信息,不同则继续输入(6) 输出学生资料模块:主要功能用来对学生的成绩进行输出。在系统已经录入了学生资料成绩的前提下,使用该功能可以显示所有学生
14、的信息,资料等等。具体包括学生的学号,姓名和各科成绩。在查看学生的资料,成绩各方面的信息后,按任意键就可以返回到主菜单(5)查找并显示学生资料模块主要功能是用来查找学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息(6)按学号查找,修改学生资料模块主要功能是用来修改学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生学号,系统就会显示该学生资料和各科成绩等信息,这样就可以修改该学生的资料,成绩等信息。(7)按学号查找,删除该学生资料模块主要功能是用来删除学生资料。在系统保存学生资料的前提下,想删除
15、某学生的资料,可以输入学生学号,系统查找该学生资料后,就可以删除了。由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化(8)按学生成绩总分进行排列模块主要功能是用来对学生的资料按总分进行排序。在系统保存学生资料,成绩的前提下,使用此功能可以对学生的资料按总分进行排序,这样就方便查找成绩相同或是相近的同学的资料。(9)储存学生资料并退出系统模块 主要功能是用来储存学生资料。在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,及时更新系统,方便下一次的操作。四、运行结果1开始界面2输入数据3 搜索数据4 删除5. 修改数据7. 显示数
16、据8.系统设置五、小结这个程序经过了暑假开始到十月份的修改编辑,要感谢老师及同学的指导,另外程序本身更适合学生数量不是特别多的情况下,加入学生有上千上万个,那么应该在添加几个类,在学生类之上的类,这样才可以大大方便了各种操作以及浏览等。六、参考资料C+程序设计教程CSDN程序员社区代码:/*学生成绩管理系统*类:Student Score Manage*可保存学科:语文 数学 英语*时间段:大一至大四*说明:该程序针对学生数较少的情况,假如面对上千上万的学生数,应该再将其中的存储结构进行改变,* 分别分层次存储,例如大一至大四四个链表表头,在每一个链表中又根据不同分类依据细分,* 例如根据学院
17、、专业等,这样的改变将大大有利于程序进行的寻找、输出、排序等涉及链表的操作,* 当然相应代码也要稍作改变*/#include<iostream>#include<string>#include<fstream>#include<sstream>#include<iomanip>#include<conio.h>#include<windows.h>#include<vector>using namespace std;#define CONOBJ 3 /3科科目#define YEARS 4 /4个
18、学年#define SET 4 /4个设置要求class Scorepublic:int scoreCONOBJ; /chinese,math,english三科目分别对应order0、order1、order2,每个学期两次考试,分为期中和期末考试int orderCONOBJ; /MAX科学科排名int ConOrder; /总排名Score *next; /定义在学生类当中Score()next=NULL;int i;for(i=0;i<CONOBJ;i+)scorei=0;orderi=0;ConOrder=0;/无参构造函数Score(int *sc)next=NULL;int
19、 i;for(i=0;i<CONOBJ;i+)scorei=*sc;orderi=0;sc+;ConOrder=0;/只有成绩的构造函数Score(int *sc,int*or,int Con)next=NULL;int j;for(j=0;j<CONOBJ;j+)scorej=*sc;orderj=*or;sc+;or+;ConOrder=Con;/含全部参数的构造函数int ReturnConScore() /返回总分数return score0+score1+score2;/=class Student/*Student类中包含Score类*用来存储众多的成绩,每个学期两次成
20、绩, 每学年两个学期*/Score *sco; string name;string pro; /专业int clas;int grade;string num;char sex;Student* next;public:/*几个不同参数的Student构造函数的重载,*分别对应不同形式的构造方式*/ Student(string iname):name(iname),next(NULL)sco=NULL; cout<<"tttt成功添加学生"<<name<<"n"/1.单参数时的构造函数Student(string
21、iname="No name",string ipro="none",int iclass=0,int igrade=0,string inum="0",char isex='n'):name(iname),num(inum),sex(isex),next(NULL),pro(ipro),clas(iclass),grade(igrade)sco=NULL; cout<<"tttt成功添加学生"<<name<<"n"return;/2.用于添加
22、无输入成绩的构造函数Student(string iname,string ipro,int iclas,int igrade,string inum,char isex,int *score):name(iname),pro(ipro),clas(iclas),grade(igrade),num(inum),sex(isex),next(NULL)sco=new Score(score);cout<<"tttt成功添加学生"<<name<<"n"/3.用于添加有成绩的构造函数 Student(string iname
23、,string ipro,int iclas,int igrade,string inum,char isex,int *score,int conor,int *order):name(iname),pro(ipro),clas(iclas),grade(igrade),num(inum),sex(isex),next(NULL)sco=new Score(score,order,conor);/4.用于从文件读入时候的构造函数int CountOfScore(); /统计已经存储的成绩数量,每个学期两次考试,每次考试算作一次成绩录入 成绩录入总计= 4*igradefriend class
24、 Manage; ;/=class Manageint setSET;Student* stu; /*记录是否执行了修改学生信息操作,等于'n'表示未修改信息或者修改完了但已经保存,等于'y'表示已经修改并且还未保存*/char judgeOfAdd;public:Manage()stu=NULL;/*for(int i=0;i<SET;i+)seti=1;*/ judgeOfAdd='n'Start();Manage() /删除所有记录,释放空间Student* p=stu;while(p)p=p->next;delete p;st
25、u=NULL;Student* ReturnStu()return stu;/添加void Add(); /添加学生 void AddScore(Student *istudent); /添加成绩 /浏览 int isEmpty(); int infoPass(string inum,string iname,char isex,int igrade,int iclas);void SkimAll(); void SkimClas(); void SkimPro(); void SpecSkim(); /指定的其他浏览方式void SkimByScore();void SkimByTerms(
26、);void SkimByPlace();void SkimByTest();void SkimByGrade(int igrade); void Find(string T); /查找void PrintAllScore(Score *q);/打印成绩,本程序用来打印第二次开始的考试成绩void InitScore(); /未给出成绩的学生进行 0 赋值void Delete(); /删除void Edit(string Y); /编辑void EditScore(Student *istu);void OrderConscore(); /按总成绩排序void OrderObject();
27、/排名次void Compare(); /比较 void Save(); /保存int Read(); /读取 string OfProfe(); /选择学院专业int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow); /显示欢迎对话框int countSpecStudent(int igrade); /返回指定年级的学生数int countConStudent(); /返回总学生数/默认设置void DefaultSetting();/进行默认设置 void Rea
28、dSet(); /读取默认设置void SaveSet(); /保存默认设置int* ReturnSet(); char ReturnjudgeOfadd();void JudgeOfSave(); /判断是否保存已修改的信息void Start(); /类内部开始运行的操作void Interface(); /用户使用界面;/=/Student名空间中的成员函数的函数定义int Student:CountOfScore()Score *p=sco;int i;for(i=0;p;p=p->next,i+);return i;/=/=/Manage名空间中的成员函数的函数定义int* M
29、anage:ReturnSet() return set;/-char Manage:ReturnjudgeOfadd() return judgeOfAdd;/-int Manage:countSpecStudent(int igrade) /返回指定年级的学生数Student *p=stu;int count=0;for(;p!=NULL;p=p->next)if(p->grade=igrade)count+;return count;/-int Manage:countConStudent() /返回总学生数int count=0;for(int i=0;i<CONOB
30、J;i+)count+=countSpecStudent(i+1);return count;void Manage:AddScore(Student *istudent)system("CLS");/*if(!(istudent->CountOfScore()<istudent->grade*4) /成绩已经输入满了char judge;cout<<"成绩已经输入完整,不需要再添加修改Y/返回N:"cin>>judge;if(!(judge='Y'|judge='y')retur
31、n ;*/int i,judge_grade,judge_term;char flag='y',judge_input='y'Score *temp;for(judge_grade=1;judge_grade<=istudent->grade;judge_grade+)for(judge_term=1;judge_term<=4;judge_term+)/由用户选择是否继续输入printf("n*是否输入大%d第%d次考试成绩是(y)/否(n)/返回(r):",judge_grade,judge_term);cin>&
32、gt;judge_input;if(judge_input='y'|judge_input='Y')printf("n请输入大%d第%d次考试成绩:n",judge_grade,judge_term); /abs(istudent->CountOfScore()-(istudent->grade-1)*4+1)/输入成绩int scoreCONOBJ;for(i=0;i<CONOBJ;i+)if(i=0)cout<<"输入语文成绩:"else if(i=1)cout<<"
33、输入数学成绩:"elsecout<<"输入英语成绩:"cin>>scorei;temp=new Score(score);else if(judge_input='n'|judge_input='N')temp=new Score(); /不输入成绩的学生会自动赋分数为0elsereturn ;/返回/做连接操作if(istudent->sco=NULL)istudent->sco=temp;elseScore *p=istudent->sco;while(p->next!=NULL)
34、p=p->next;p->next=temp;temp->next=NULL;/-void Manage:Compare() /比较/-void Manage:OrderObject() /各科目成绩排名次,赋值给score类中的orderif(!isEmpty()return ; Student *p,*pp;Score *qp,*qpp;int score,ch,ma,eng,igrade=1,times,count=0,c1=0,c2=0,c3=0;while(igrade<=YEARS)if(countSpecStudent(igrade)=0)igrade+;
35、continue;p=stu;times=1; while(times <= igrade*4)p=stu;c1+;/-核心部分-/while(p!=NULL) /p的循环是保证每个学生都进行成绩排序count+;if(p->grade=igrade)qp=p->sco; /qp指向该次所要排成绩的学生的成绩开头处for(int j=0;j<times-1;j+)qp=qp->next;/qpp=qpp->next;/*初始化及更新操作*/qp->ConOrder=countSpecStudent(igrade); /不同年级学生数for(int i=
36、0;i<CONOBJ;i+)qp->orderi=qp->ConOrder; /减少函数而调用采用的方法score=qp->ReturnConScore();ch=qp->score0;ma=qp->score1;eng=qp->score2;pp=stu; /每一次都从头开始进行比较while(pp!=NULL)c3+;if(pp->grade=igrade && pp->num!=p->num)qpp=pp->sco;for(int j=0;j<times-1;j+)qpp=qpp->next;i
37、f(qpp->ReturnConScore() <= score)qp->ConOrder-;if(qpp->score0 <= ch)qp->order0-; if(qpp->score1 <= ma)qp->order1-;if(qpp->score2 <= eng)qp->order2-;pp=pp->next;/cout<<p->name<<" "p=p->next;times+;igrade+;/-int WINAPI Manage:WinMain(H
38、INSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)MessageBox(NULL,/count,"您好,欢迎使用!","学生成绩管理系统",MB_OK | MB_ICONINFORMATION);return 0;/-string Manage:OfProfe() /选择学院专业int kh;string i; cout<<"nttn"cout<<"tt 1.工学院 n"cout<<&qu
39、ot;ttn"cout<<"tt 2.理学院 n"cout<<"ttn"cout<<"tt 3.医学院 n"cout<<"ttn"cout<<"tt 4.农学院 n"cout<<"ttn"cout<<"tt 5.经管学院 n"cout<<"ttn"cout<<"tt 0.退出选择 n"cout<
40、<"tt n"docout<<" tt请输入相应学院代号:"cin>>kh;while(!(kh>=0&&kh<6);cout<<"t*n"switch (kh)case 1:cout<<"t* 11.数字媒体技术n" cout<<"t* 12.土木工程n" cout<<"t* 13.建筑学n" cout<<"t* 14.化学工程工艺n"
41、break;case 2:cout<<"t* 21.化学系n"cout<<"t* 22.地理工程n"cout<<"t* 23.环境工程n" break;case 3:cout<<"t* 31.临床医学n"cout<<"t* 32.麻醉学n"cout<<"t* 33.影像学n" break;case 4:cout<<"t* 41.院农业机械n"cout<<&quo
42、t;t* 42.水产养殖n" break;case 5:cout<<"t* 51.经济学n"cout<<"t* 52.国际经济贸易n"cout<<"t* 53.金融学n" break;int ch;cout<<"t* 0.返回n"cout<<"t*n"do cout<<"t请输入相应专业代号:"cin>>ch;if(ch=0)i=OfProfe();return i;while(!(
43、ch%10>0&&ch%10<4&&ch!=43&&ch/10=kh)|(ch=14&&ch/10=kh); cout<<"t*n" switch (ch)case 11:i="数字媒体技术" break;case 12:i="土木工程" break;case 13:i="建筑学" break;case 14:i="化学工程工艺" break;case 21:i="化学系" break;c
44、ase 22:i="地理工程" break;case 23:i="环境工程" break;case 31:i="临床医学" break;case 32:i="麻醉学" break;case 33:i="影像学" break;case 41:i="农业机械" break;case 42:i="水产养殖" break;case 51:i="经济学" break;case 52:i="国际经济贸易" break;case
45、53:i="金融学" break;default:cout<<"t输入错误。" int judge=1; cout<<"t已经选择""<<i<<"专业",是否确定?nt* *nt是(1) 否(0)nt* *"cout<<"nt请选择:" cin>>judge;while(!judge) i=OfProfe();return i;/-int Manage:infoPass(string inum,strin
46、g iname,char isex,int igrade,int iclas)int value=atoi(inum.c_str(),legal=1,count=1;cout<<"nn信息输入合法性:n"if(!(igrade>=1 && igrade<=4)cout<<count<<":年级输入不合法,请输入大一大四n"legal=0;count+;else if(!(value >= igrade*10000 && value <= igrade*10000+
47、9999)cout<<count<<":学号输入不正确大一(1000019999)/大二(2000029999).n"legal=0;count+;if(!(iclas>=1 && iclas<=99)cout<<count<<":班级输入不合法,请输入199n"legal=0;count+;if(isex!='w' && isex!='m')cout<<count<<":请输入正确性别,男生-m,
48、女生-wn"legal=0;count+;if(iname.length()>2)cout<<count<<":姓名输入不宜过长n"legal=0;if(count=1)cout<<"ttt输入合法nn"return legal;/-void Manage:Add()system("CLS");Student *p=stu,*q=NULL,*save=NULL;string inum,iname,ipro;int igrade,iclas,count=0;char flag,isex,see='y'if(stu=NULL)cout<<"ttt >>*还没有学生信息!*<<"while(see='y') /备注:循环,判断是否多次输入count+;cout<<endl<<count<<".n"<<"请输入学号: "cin>>inum;p=stu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商标权知识产权转让合同
- 债权转让合同范例
- 户外广告合同样本格式模板
- 二手车辆买卖协议范本
- 2024年接送服务合同标准范本
- 股份协议书合同股份协议书2024年
- 房屋买卖代理合同范文
- 2024年离婚协议书官方范本
- 2024年购买香蕉的买卖合同范本
- 2024年居间公司股份转让合同
- 09BJ13-4 钢制防火门窗、防火卷帘
- 初二广东省深圳市道德与法治上册期中测试试题及答案
- 古诗词诵读《江城子-乙卯正月二十日夜记梦》公开课一等奖创新教学设计统编版高中语文选择性必修上册
- 单身证明书12篇
- 备战2024年高考英语考试易错点12 名词性从句(4大陷阱)(解析版)
- 2023年职业技能:平版制版工技术及理论知识考试题附含答案
- 2024年甘肃省法院系统聘用制书记员招聘笔试参考题库附带答案详解
- 中法教育比较
- 讲座《如何备好一节数学课》(青年教师年月培训)包新华课件
- 药剂科考试题库及答案大全
- 异常处理报告
评论
0/150
提交评论