学生成绩管理系统设计及使用说明.docx
- 文档编号:7095786
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:48
- 大小:661.40KB
学生成绩管理系统设计及使用说明.docx
《学生成绩管理系统设计及使用说明.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统设计及使用说明.docx(48页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统设计及使用说明
C语言上机训练作业
课程名称
学生成绩管理系统
学号
2012301168
学生姓名
王少乾
所在专业
机械设计制造及其自动化
所在班级
05021201
一、训练目的
通过上机训练的实践,学生能够将所学的基本理论和方法应用到作业中;以达到理论和实践相结合。
加深对程序设计的理解。
主要对基本语法、程序调试、开发工具应用进行实践。
二、基本要求
1.熟练掌握源程序代码输入、编辑,代码的编译、链接、运行,以及程序的调试和异常处理等基本技能;
2.全面掌握编程语言的基本语法,包括概念性定义、过程调用、数据处理、异常处理等,如变量、表达式、运算符、函数、数组、类定义等,方法的调用、循环语句、分支判断等、异常的捕获、抛出与处理等,文件、数据库数据处理等;
3.掌握面向对象的、模块化的程序设计方法,注重基本语句的编写与编程技巧相互结合,并能够熟练运用开发工具提供的功能,完成上机训练。
三、内容设计
1.能够输入、添加、修改、删除学生的个人信息以及各科成绩(本程序只设计了C++、数学、英语三门作为代表);
2.能够对所有学生成绩进行总分成绩排名、单科成绩排名,求全班总分平均分,单科平均分;
3.能够按照学生姓名或者学号对学生成绩信息进行查询;
4.能够导出学生姓名以及对应的单科成绩、总分成绩,以供汇总打印;
5.能够进行学生、教师、管理员角色进行权限限定。
管理员可以为教师和学生安排学期必修课程,教师能够查看管理员安排好的必修课程,学生可以查看管理员安排好的必修课程,并根据必修课程选出两门可以安排如课表的选修课程
四、功能介绍
1.函数总览。
通过主函数来对定义的其他类函数进行调用,利用“类”实现了程序的结构清晰、简洁;对于需要重复利用的函数单独定义(例如课程显示函数),使整个程序更加明了。
2.详细功能调试演示。
首先对管理员、教师共同拥有的功能(录入、查找、修改、删除学生成绩)进行调试:
添加四个学生的成绩:
按学生姓名查找:
按学生学号查找:
修改学生成绩:
删除学生成绩:
然后对管理员、教师、学生共有功能(排序学生成绩、查看各科以及总分平均成进行调试:
查看平均成绩:
最后对扩展功能(管理员安排必修课程、学生选择选修课程)进行调试:
在没有任何必修课程安排情况下管理员显示:
学生显示:
在没有安排必修课程的情况下,学生无法选择选修课程(因为选修要选在必修课的空白处):
管理员可对周一至周五的课程进行安排:
课程安排成功之后自动保存在本地磁盘,学生、教师、管理员均可,即使关闭程序,再次打开也可以查看
必修课程安排好之后,学生可以根据空白课程处选择自己的选修课程,发生时间冲突会自动提醒重新选择时间
五、反思总结
1.程序仍然不是十分简洁,虽然采用了函数调用、类定义等方法,但是由于运用不是很熟练,一些地方还是出现了重复,如输出安排课表的函数;
2.对链表的运用不是非常熟悉,虽然在保存学生成绩以及排序成绩的函数中采用了链表的形式,但是对于选课保存函数,由于难以单独调用链表中某一数据,采用了数组的形式;
3.一些细节没有完善。
考虑到程序的简洁性,一些地方没有设计输入错误的提示。
不过必要的地方还是有的,比如说选课函数,如果选择的课程不存在会提示重新选择。
六、程序附录
#include
#include
#include
#include
usingnamespacestd;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
classStudent{
public:
charname[20];
charId[20];
intCnum;//C课程得分
intMnum;//数学课程得分
intEnum;//英语课程得分
intsum;//总分
Student*Next;
voidInput(){
cout<<"\t\t请输入学生的姓名:
";
cin>>name;
cout<<"\t\t请输入学生的学号:
";
cin>>Id;
cout<<"\t\t请输入C课程的成绩:
";
cin>>Cnum;
cout<<"\t\t请输入数学课程的成绩:
";
cin>>Mnum;
cout<<"\t\t请输入英语课程的成绩:
";
cin>>Enum;
sum=Cnum+Mnum+Enum;
}
voidReadFile(istream&in){
in>>name>>Id>>Cnum>>Mnum>>Enum>>sum;
}
voidShow1(){
cout<<"姓名:
"< "< "< "< "< } voidShow2(){ cout<<"姓名: "< "< "< voidShow3(){ cout<<"姓名: "< "< "< voidShow4(){ cout<<"姓名: "< "< "< voidShow5(){ cout<<"姓名: "< "< "< }; //﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ classStudentmassage: publicStudent{ public: Studentmassage(); ~Studentmassage(); voidShowMenu1(); voidShowMenu2(); voidShowMenu3(); voidFind(); voidSave(); voidModifyItem(); voidRemoveItem(); voidSwap(Student*,Student*); voidSort(); voidUnpass(); intListCount(); voidAverage(); voidGuanlikecheng1(); voidGuanlikecheng2(); voidxianshikecheng(); voidxuanzekecheng(); voidDisplay(){ for(Student*p=Head->Next;p! =End;p=p->Next) p->Show1(); cout<<"输入任意字符! 继续……"; getch(); } voidAddItem(){ End->Input(); End->Next=newStudent; End=End->Next; cout<<"添加成功! "< cout<<"输入任意字符! 继续……"; getch(); } private: Student*Head,*End; ifstreamin; ofstreamout; Student*FindItem(char*name){ for(Student*p=Head;p->Next! =End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空 if(! strcmp(p->Next->name,name)) returnp;returnNULL; } Student*FindID(char*Id){ for(Student*p=Head;p->Next! =End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空 if(! strcmp(p->Next->Id,Id))returnp; returnNULL; } }; //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ Studentmassage: : Studentmassage(){ Head=newStudent; Head->Next=newStudent; End=Head->Next; in.open("chengji.txt"); if(! in) cout<<"这是一个新系统,您是首次登陆,无任何学生信息。 "< else { while(! in.eof()) { End->ReadFile(in); if(End->name[0]=='\0')break; End->Next=newStudent; End=End->Next; } in.close(); cout<<"\t\t已经从chengji.txt中读取到学生信息! "< } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ Studentmassage: : ~Studentmassage(){ Save(); for(Student*temp;Head->Next! =End;){ temp=Head->Next; Head->Next=Head->Next->Next; deletetemp; } deleteHead,End; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌学生菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage: : ShowMenu1(){ cout<<"〓〓〓〓〓〓〓〓〓〓☆学生成绩管理系统(学生用)☆〓〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓★★★★★★★★★★★★★★★★★〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆1.显示学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆2.排序学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆3.查找学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆4.查看平均成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆5.查看学期课程☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆6.选择选修课程☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆0.安全退出系统☆★〓〓〓〓〓〓〓〓〓"< cout<<"\n\t\t\n\t\t请选择: "; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌教师菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage: : ShowMenu2(){ cout<<"〓〓〓〓〓〓〓〓〓〓☆学生成绩管理系统(教师用)☆〓〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓★★★★★★★★★★★★★★★★★〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆1.增加学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆2.显示学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆3.排序学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆4.查找学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆5.删除学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆6.修改学生信息☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆7.查看平均成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆8.显示课程安排☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆0.安全退出系统☆★〓〓〓〓〓〓〓〓〓"< cout<<"注意: 务必通过菜单选择“0”关闭系统,否则不能保存学生成绩到chengji.txt"< cout<<"\n\t\t\n\t\t请选择: "; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌管理员菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage: : ShowMenu3(){ cout<<"〓〓〓〓〓〓〓〓〓〓☆学生成绩管理系统(管理员用)☆〓〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓★★★★★★★★★★★★★★★★★〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆1.增加学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆2.显示学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆3.排序学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆4.查找学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆5.删除学生成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆6.修改学生信息☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆7.查看平均成绩☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆8.管理课程安排☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆9.显示课程安排☆★〓〓〓〓〓〓〓〓〓"< cout<<"〓〓〓〓〓〓〓〓〓★☆0.安全退出系统☆★〓〓〓〓〓〓〓〓〓"< cout<<"注意: 务必通过菜单选择“0”关闭系统,否则不能保存学生成绩到chengji.txt"< cout<<"\n\t\t\n\t\t请选择: "; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage: : Find(){ charname[20],Id[10]; intx;Student*p=NULL; cout<<"\n\t\t*********************************\n"; cout<<"\t\t※1.按学生的姓名查找\n\t\t※2.按学生学号查找"; cout<<"\n\t\t*********************************\n请选择: "; cin>>x; switch(x){ case1: { cout<<"\t\t请输入要查找的学生的姓名: "; cin>>name; if(p=FindItem(name)){ p->Next->Show1(); cout<<"输入任意字符! 继续……"; getch(); } else{ cout<<"\t\t没有找到该姓名的学生! "<<'\n'< cout<<"输入任意字符! 继续……"; getch(); } } break; case2: { cout<<"\t\t请输入要查找的学生的学号: "; cin>>Id; if(p=FindID(Id)){ p->Next->Show1(); cout<<"输入任意字符! 继续……"; getch(); } else{ cout<<"\t\t没有找到该学号的学生! "<<'\n'< cout<<"输入任意字符! 继续……"; getch(); } } break; } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查看平均成绩﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage: : Average() { intA; cout<<"请选择需要查看的平均成绩"< cin>>A; switch(A){ case1: { Student*p=NULL; intn=Studentmassage: : ListCount(); doubleS=0; for(p=Head->Next;p! =End;p=p->Next){ S=S+p->Cnum; ;} cout< "< 继续……"; getch(); break; } case2: { Student*p=NULL; intn=Studentmassage: : ListCount(); doubleS=0; for(p=Head->Next;p! =End;p=p->Next){ S=S+p->Mnum; ;} cout< "< 继续……"; getch(); break; } case3: { Student*p=NULL; intn=Studentmassage: : ListCount(); doubleS=0; for(p=Head->Next;p! =End;p=p->Next){ S=S+p->Enum; ;} cout< "< 继续……"; getch(); break; } case4: { Student*p=NULL; intn=Studentmassage: : ListCount(); doubleS=0; for(p=Head->Next;p! =End;p=p->Next){ S=S+p->sum; ;} cout< "< 继续……"; getch(); break;} } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ intStudentmassage: : ListCount()//统计当前链表的记录总数,返回一个整数 { if(! Head) return0; intn=0; for(Student*p=Head->Next;p! =End;p=p->Next){n++;} returnn; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage: : Swap(Student*p1,Student*p2)//交换两个combox变量的数据域 { Student*temp=newStudent; strcpy(temp->name,p1->name); strcpy(temp->Id,p1->Id); temp->Cnum=p1->Cnum; temp->Mnum=p1->Mnum; temp->Enum=p1->Enum; temp->sum=p1->sum; strcpy(p1->name,p2->name); strcpy(p1->Id,p2->Id); p1->Cnum=p2->Cnum; p1->Mnum=p2->Mnum; p1->Enum=p2->Enum; p1->sum=p2->sum; strcpy(p2->name,temp->name); strcpy(p2->Id,temp->Id); p2->Cnum=temp->Cnum; p2->Mnum=temp->Mnum; p2->Enum=temp->Enum; p2->sum=temp->sum; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage: : Sort()//对当前链表进行成绩排序 { intx; cout<<"请选择需要排序的成绩\n1.C++成绩\n2.数学成绩\n3.英语成绩\n4.总成绩"< cin>>x; switch(x){ case4: { Student*p=NULL,*p1=NULL,*k=NULL; intn=Studentmassage: : ListCount(); if(n<2) return; for(p=Head->Next;p! =End;p=p->Next) for(k=p->Next;k! =End;k=k->Next){ if(p->sum>k->sum){ Studentmassage: : Swap(p,k); } } cout<<"按总成绩排序完成! "< for(p=Head->Next;p! =End;p=p->Next) p->Show2(); cout<<"输入任意字符! 继续……"; getch(); break;} case1: { Student*p=NULL,*p1=NULL,*k=NULL; intn=Studentmassage: : ListCount(); if(n<2) return; for(p=Head->Next;p! =End
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 设计 使用说明
![提示](https://static.bdocx.com/images/bang_tan.gif)