高校学籍管理系统C++程序设计.docx
- 文档编号:11182086
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:34
- 大小:20.90KB
高校学籍管理系统C++程序设计.docx
《高校学籍管理系统C++程序设计.docx》由会员分享,可在线阅读,更多相关《高校学籍管理系统C++程序设计.docx(34页珍藏版)》请在冰豆网上搜索。
高校学籍管理系统C++程序设计
VC++课程设计---高校学籍管理系统
源程序
一、课程设计题目:
学籍管理系统
二、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书
三、设计方法和基本原理:
1、功能要求
要求完成以下功能:
1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。
2)能够将指定的信息从文件中删除。
3)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。
4)可以统计全部学生的总成绩,及其在班上的排名。
5)能够统计各科的平均成绩及及格率。
6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。
7)如果检索不到相应的信息应提示用户。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
a)写出需求分析(做什么)
b)分析系统中的各个实体之间的关系及其属性和行为;
c)根据问题描述,设计系统的类层次;
d)完成类层次中各个类的描述(包括属性和方法);
e)完成类中各个成员函数的定义;
f)用户界面的设计
g)分析系统功能模块(系统流程图)
h)代码编写
i)功能调试;
j)完成系统总结报告以及系统使用说明书。
源程序代码如下:
[code]/*
course.dat-课程列表(只读)
student.dat-学生信息
*/
#include
#include
#include
#include
classCOURSE //课程类
{
private:
staticintcoursenum; //课程数量
staticchar(*coursename)[20]; //课程名称
public:
staticvoidLoadCourse() //从文件COURSE.DAT装入课程信息
{
ifstreamf("course.dat");
f>>coursenum;
coursename=newchar[coursenum][20];
for(inti=0; i f>>coursename; f.close(); } friendclassSTUDENT; friendclassCOLLEGE; }; intCOURSE: : coursenum=0; char(*COURSE: : coursename)[20]=0; classSTUDENT//学生类 { private: charnum[20]; //学号 charname[20]; //姓名 charsex; //性别 charcname[20];//班级 float*grade; //成绩(动态数组) floatsum; //各科总分 STUDENT*next; public: STUDENT() { grade=newfloat[COURSE: : coursenum]; next=0; } ~STUDENT() { delete[]grade; } voidInput() { sum=0; cout<<"学号: "; cin>>num; //输入学生一般信息 cout<<"姓名: "; cin>>name; cout<<"性别: "; cin>>sex; sex=toupper(sex); cout<<"班级: "; cin>>cname; for(inti=0; i : coursenum; i++) //输入学生各科成绩 { cout< : coursename<<"成绩: "; cin>>grade; sum+=grade; //计算总分 } } voidInput(ifstream&f) { f>>num; f>>name; f>>sex; sex=toupper(sex); f>>cname; for(inti=0; i : coursenum; i++) //输出学生各科成绩,总分 { f>>grade; } f>>sum; } staticvoidOutputT() { cout< for(inti=0; i : coursenum; i++) cout< : coursename; cout< } voidOutput() { cout< cout< cout< cout< for(inti=0; i : coursenum; i++) //输出学生各科成绩,总分 { cout< } cout< } voidOutput(ofstream&f) { f< f< f< f< for(inti=0; i : coursenum; i++) //输出学生各科成绩,总分 { f< } f< } friendclassCOLLEGE; }; classCOLLEGE //学校类 { private: STUDENT*SL; //学生链表 voidClear(); intFind(char*ID,STUDENT**p1,STUDENT**p2); voidCOLLEGE: : ValueS2ToS1(STUDENT&s1,STUDENT&s2); public: COLLEGE() { COURSEadCourse(); //装入课程信息 SL=newSTUDENT(); //创建学生链表表头结点 } ~COLLEGE() { STUDENT*p=SL; //删除学生链表各个结点 while(p) { SL=p->next; deletep; p=SL; } } voidSet(); //课程设置(增,删,改,存) voidAdd(); //增加学生 voidDelete(); //删除学生 voidModify(); //修改学生 voidQuery(); //查询学生信息(按姓名,学号) voidPrint(); //输出所有学生信息 voidStat(); //统计课程平均成绩,课程合格率 voidSumSort(); //按总分排名(高->低) voidNumSort(); //按学号排序(低->高) voidSave(); //学生数据存盘 voidLoad(); //装入学生数据 }; //增加学生 voidCOLLEGE: : Add() { cout<<"\n**增加学生信息**\n"; STUDENT*p=newSTUDENT; //创建1个新学生结点 STUDENT*p2=SL; //查找学生链表表尾结点 while(p2->next)p2=p2->next; p2->next=p; //链接学生结点 p->Input(); //输入学生信息 } //查找学生结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针) intCOLLEGE: : Find(char*ID,STUDENT**p1,STUDENT**p2) { *p1=SL->next; *p2=SL; while(*p1) { if(strcmp((*p1)->num,ID)==0) break; //找到 else { *p2=*p1; //继续查找 *p1=(*p1)->next; } } return*p1? 1: 0; } //删除学生 voidCOLLEGE: elete() { cout<<"\n**删除学生**\n"; charNo[20]; STUDENT*p1,*p2; cout<<"学号: "; cin>>No; if(! Find(No,&p1,&p2)) { cout<<"指定的学生没有找到! \n"; } else { p2->next=p1->next; //连接 deletep1; cout<<"正确删除! \n"; } } //修改学生 voidCOLLEGE: : Modify() { cout<<"\n**修改学生**\n"; charNo[20]; STUDENT*p1,*p2; cout<<"学号: "; cin>>No; if(! Find(No,&p1,&p2)) { cout<<"指定的学生没有找到! \n"; } else { p1->Output(); //输出原来的学生信息(做提示) p1->Input(); //输入此学生信息(更新) cout<<"修改完成! \n"; } } /*承上*/ //查询学生信息 //按学号或姓名查找,如果找到显示该学生,如果未找到,也给出相应提示. voidCOLLEGE: uery() { cout<<"\n**查询学生**\n"; STUDENT*p=SL->next; charNo[20]; charName[20]; charch; do { cout<<"按学号查1,按姓名查2: "; cin>>ch; }while(ch! ='1'&&ch! ='2'); intflag=0; //未找到0,找到1 if(ch=='1') //按学号查 { cout<<"学号: "; cin>>No; while(p) if(strcmp(p->num,No)==0) { flag=1; break; } else p=p->next; } else //按姓名查 { cout<<"姓名: "; cin>>Name; while(p) if(strcmp(p->name,Name)==0) { flag=1; break; } else p=p->next; } if(flag==1) //如果找到,显示此同学信息 { p->OutputT(); p->Output(); } else //否则给出未找到提出 cout<<"指定的学生没有找到! \n"; } //输出所有学生信息 voidCOLLEGE: rint() { cout<<"\n**输出学生信息**\n"; STUDENT*p=SL->next; STUDENT: : OutputT(); //输出标题 while(p) //循环输出各位学生信息 { p->Output(); p=p->next; } } //学生数据存盘 voidCOLLEGE: : Save() { ofstreamf("student.dat"); STUDENT*p=SL->next; while(p) //遍历学生链表 { p->Output(f); //写入文件 p=p->next; } f.close(); cout<<"\n**保存数据完成! **\n"; } voidCOLLEGE: : Clear() { STUDENT*p=SL->next; while(p) { SL->next=p->next; deletep; p=SL->next; } } //装入学生数据 voidCOLLEGEad() { Clear(); ifstreamf("student.dat"); STUDENT*p=SL; STUDENT*p2=newSTUDENT; p2->Input(f); while(f) { p->next=p2; p=p->next; p2=newSTUDENT; p2->Input(f); } deletep2; f.close(); } //统计课程平均成绩,课程合格率 voidCOLLEGE: : Stat() { float*sum=newfloat[COURSE: : coursenum]; //各科平均成绩 float*pass=newfloat[COURSE: : coursenum]; //各科合格人数,/n=>合格率 intn=0; //学生人数 for(inti=0; i : coursenum; i++) { STUDENT*p=SL->next; n=0; sum=pass=0; while(p) //遍历学生链表 { n++; //人数 sum=sum+p->grade; //某科总分 if(p->grade>=60)pass++; //某科合格人数 p=p->next; } } for(i=0; i : coursenum; i++) { cout< : showpoint); cout< : coursename<<"平均: "< "< } delete[]sum; delete[]pass; } voidCOLLEGE: : ValueS2ToS1(STUDENT&s1,STUDENT&s2) { strcpy(s1.num,s2.num); //学号 strcpy(s1.name,s2.name); //姓名 s1.sex=s2.sex; //性别 strcpy(ame,ame); //班级 for(inti=0; i : coursenum; i++) s1.grade=s2.grade; //成绩指针(动态数组) s1.sum=s2.sum; //各科总分 } //按总分排名(采用选择法排序),总分高->低 voidCOLLEGE: : SumSort() { STUDENT*p1,*p2; p1=SL->next; while(p1) { p2=p1->next; while(p2) { if(p2->sum>p1->sum) { STUDENTt; ValueS2ToS1(t,*p1); ValueS2ToS1(*p1,*p2); ValueS2ToS1(*p2,t); } p2=p2->next; } p1=p1->next; } } voidCOLLEGE: : NumSort() //按学号排序(低->高) { STUDENT*p1,*p2; p1=SL->next; while(p1) { p2=p1->next; while(p2) { if(strcmp(p2->num,p1->num)<0) //只要修改这里,其余同SumSort { STUDENTt; ValueS2ToS1(t,*p1); ValueS2ToS1(*p1,*p2); ValueS2ToS1(*p2,t); } p2=p2->next; } p1=p1->next; } } voidmain() { charch; COLLEGEc; //定义大学对象 cout.setf(ios: : left); //显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数 do { cout<<"\n☆☆高校学籍管理系统☆☆\n"; cout<<"1-增加学生\n"; cout<<"2-删除学生\n"; cout<<"3-修改学生\n"; cout<<"4-查询学生\n"; cout<<"5-输出学生信息\n"; cout<<"6-综合统计(课程平均成绩,课程合格率)\n"; cout<<"7-总分排序\n"; cout<<"8-学号排序\n"; cout<<"S-数据存盘\n"; cout<<"L-数据装入\n"; cout<<"Q-退出\t请选择(1-8,SLQ): "; cin>>ch; ch=toupper(ch); switch(ch) { case'1': c.Add(); break; case'2': c.Delete();break; case'3': c.Modify();break; case'4': c.Query();break; case'5': c.Print(); break; case'6': c.Stat(); break; case'7': c.SumSort(); break; case'8': c.NumSort(); break; case'S': c.Save(); break; case'L': c.Load(); break; } }while(ch! ='Q'); } 3、2数据文件 1、course.dat: 3 C++ 英语 高数 2、student.dat: 86101 chenkaijun M M8601 77 59 96 232 86102 zhaowei F M8601 55 85 77 217 86103 wubin M M8601 85 87 92 264 86104 shijun M M8601 58 90 85 233 86105 wangzhuguo M M8601 66 70 86 222 3、3运行结果参考 ☆☆高校学籍管理系统☆☆ 1-增加学生 2-删除学生 3-修改学生 4-查询学生 5-输出学生信息 6-综合统计(课程平均成绩,课程合格率 7-总分排序 8-学号排序 S-数据存盘 L-数据装入 Q-退出请选择(1-8,SLQ) ☆☆高校学籍管理系统☆☆ 1-增加学生 2-删除学生 3-修改学生 4-查询学生 5-输出学生信息 6-综合统计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高校 学籍 管理 系统 C+ 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)