版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VC+课程设计-高校学籍管理系统 源程序一、课程设计题目:学籍管理系统 二、目的与要求:1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。2、基本要求: (1)要求利用面向对象的方法以与C+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统的设计中,至少要用到面向对象的一种机制。3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。4、写出设计说明书 三、设计方法和基本原理:1、功能要求 要求完成以
2、下功能:1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。2)能够将指定的信息从文件中删除。3)能够按编号、对学生的信息进行检索并将检索结果显示在屏幕上。4)可以统计全部学生的总成绩,与其在班上的排名。5)能够统计各科的平均成绩与与格率。6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。7)如果检索不到相应的信息应提示用户。 2、问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤: a) 写出需求分析(做什么) b) 分析系统中的各个实体之间的关系与其属性和行为; c) 根据问题描述,设计系统的类层次; d) 完成类层次中各个类的描述(包括属性和方法);
3、e) 完成类中各个成员函数的定义; f) 用户界面的设计 g) 分析系统功能模块(系统流程图) h) 代码编写 i) 功能调试; j) 完成系统总结报告以与系统使用说明书。源程序代码如下:code/*course.dat-课程列表(只读)student.dat-学生信息*/#include <fstream.h>#include <iomanip.h>#include <string.h>#include <ctype.h>class COURSE /课程类private: static int cou
4、rsenum; /课程数量 static char (*coursename)20; /课程名称public: static void LoadCourse() /从文件COURSE.DAT装入课程信息 ifstream f("course.dat"); f>>coursenum;
5、0; coursename=new charcoursenum20; for(int i=0; i<coursenum; i+) f>>coursename; f.close(); friend class STUDENT; friend class COLLEGE;int COURSE:coursenum=0;char (*COURSE:coursename)20
6、=0;class STUDENT /学生类private: char num20; /学号 char name20; / char sex; /性别 charame20; /班级 float *grade; /成绩(动态数组) float sum;
7、;/各科总分 STUDENT *next;public: STUDENT() grade=new floatCOURSE:coursenum; next=0; STUDENT() delete grade; void Input() sum=0; cout<
8、;<"学号:" cin>>num; /输入学生一般信息 cout<<":" cin>>name; cout<<"性别:" cin>>sex; sex=toupper(sex); cout<<"班级:" ci
9、n>>cname; for(int i=0; i<COURSE:coursenum; i+) /输入学生各科成绩 cout<<COURSE:coursename<<"成绩:" cin>>grade; sum+=grade; /计算总分
10、 void Input(ifstream &f) f>>num; f>>name; f>>sex; sex=toupper(sex); f>>cname; for(int i=0; i<COURSE:coursenum; i+) /输出学生各科成绩,
11、总分 f>>grade; f>>sum; static void OutputT() cout<<setw(10)<<"学号"<<setw(20)<<""<<setw(5)<<"性别"<<setw(10)
12、<<"班级" for(int i=0; i<COURSE:coursenum; i+) cout<<setw(7)<<COURSE:coursename; cout<<setw(10)<<"总分"<<endl; void Output()
13、cout<<setw(10)<<num; /输出学生一般信息 cout<<setw(20)<<name; cout<<setw(5)<<sex; cout<<setw(10)<<cname; for(int i=0; i<COURSE:coursenum; i+) /输出学生各科成绩,总分 &
14、#160; cout<<setw(7)<<grade; cout<<setw(10)<<sum<<endl; void Output(ofstream &f) f<<setw(10)<<num; /输出学生一般信息 f<<setw(20)<
15、<name; f<<setw(5)<<sex; f<<setw(10)<<cname; for(int i=0; i<COURSE:coursenum; i+) /输出学生各科成绩,总分 f<<setw(7)<<grade; f<&l
16、t;setw(10)<<sum<<endl; friend class COLLEGE;class COLLEGE /学校类private: STUDENT *SL; /学生链表 void Clear(); int Find(char* ID,STUDENT *p1,STUDENT *p2); void COLLEGE:ValueS2ToS1(STUDENT &s1,STUDENT &a
17、mp;s2);public: COLLEGE() COURSEadCourse(); /装入课程信息 SL=new STUDENT(); /创建学生链表表头结点 COLLEGE() STUDENT *p=SL; /删除学生链表各个结点 while(p)
18、60; SL=p->next; delete p; p=SL; void Set(); /课程设置(增,删,改,存) void Add();
19、160;/增加学生 void Delete(); /删除学生 void Modify(); /修改学生 void Query(); /查询学生信息(按,学号) void Print(); /输出所有学生信息 void Stat();
20、160; /统计课程平均成绩,课程合格率 void SumSort(); /按总分排名(高->低) void NumSort(); /按学号排序(低->高) void Save(); /学生数据存盘 void Load(); &
21、#160; /装入学生数据;/增加学生void COLLEGE:Add() cout<<"n* 增加学生信息 *n" STUDENT *p=new STUDENT; /创建1个新学生结点 STUDENT *p2=SL;
22、160; /查找学生链表表尾结点 while(p2->next)p2=p2->next; p2->next=p; /学生结点 p->Input(); /输入学生信息/查找学生结点(返回1-找到,0-未找到.
23、结点指针由p1返回,p2为前看指针)int COLLEGE:Find(char *ID,STUDENT *p1,STUDENT *p2) *p1=SL->next; *p2=SL; while(*p1) if(strcmp(*p1)->num,ID)=0) break; /找到 else
24、160; *p2=*p1; /继续查找 *p1=(*p1)->next; return *p1?1:0;/删除学生void COLLEGE:elete() cout<<"n* 删除学生 *n" char No20; STUDENT *p1,*p2; &
25、#160; cout<<"学号:" cin>>No; if(!Find(No,&p1,&p2) cout<<"指定的学生没有找到!n" else p2->next=p1->next; /连接 delete p1;
26、; cout<<"正确删除!n" /修改学生void COLLEGE:Modify() cout<<"n* 修改学生 *n" char No20; STUDENT *p1,*p2; cout<<"学号:" cin>>No; if(!Fin
27、d(No,&p1,&p2) cout<<"指定的学生没有找到!n" else p1->Output(); /输出原来的学生信息(做提示) p1->Input(); /输入此学生信息(更新) cout<<"修改完成!n" /*承上*/查询学生信息
28、/按学号或查找,如果找到显示该学生,如果未找到,也给出相应提示.void COLLEGE:uery() cout<<"n* 查询学生 *n" STUDENT *p=SL->next; char No20; char Name20; char ch; do cout<<"按学号查1,按查2:" cin&
29、gt;>ch; while(ch!='1'&&ch!='2'); int flag=0; /未找到0,找到1 if(ch='1') /按学号查 cout<<"学号:" cin>>No; while(p) if(strcmp(p-
30、>num,No)=0) flag=1; break; else p=p->next; else /按查 cout<<":&q
31、uot; cin>>Name; while(p) if(strcmp(p->name,Name)=0) flag=1; break; else p=p->
32、next; if(flag=1) /如果找到,显示此同学信息 p->OutputT(); p->Output(); else /否则给出未找到提出 cout<<"指定的学生没有找到!n"/输出所有学生信息void COLLEGE:rint()
33、cout<<"n* 输出学生信息 *n" STUDENT *p=SL->next; STUDENT:OutputT(); /输出标题 while(p) /循环输出各位学生信息 p->Output(); p=p->next; /学生数据存盘void COLLEGE:Save() &
34、#160; ofstream f("student.dat"); STUDENT *p=SL->next; while(p) /遍历学生链表 p->Output(f); /写入文件 p=p->next; f.close(); co
35、ut<<"n* 保存数据完成! *n"void COLLEGE:Clear() STUDENT *p=SL->next; while(p) SL->next=p->next; delete p; p=SL->next; /装入学生数据void COLLEGEad() Cle
36、ar(); ifstream f("student.dat"); STUDENT *p=SL; STUDENT *p2=new STUDENT; p2->Input(f); while(f) p->next=p2; p=p->next; p2=new STUDENT; p2->Input(f);
37、60; delete p2; f.close();/统计课程平均成绩,课程合格率void COLLEGE:Stat() float *sum=new floatCOURSE:coursenum; /各科平均成绩 float *pass=new floatCOURSE:coursenum; /各科合格人数,/n=>合格率 int n=0;
38、;/学生人数 for(int i=0; i<COURSE:coursenum; i+) STUDENT *p=SL->next; n=0; sum=pass=0; while(p) /遍历学生链表 n+; &
39、#160; /人数 sum=sum+p->grade; /某科总分 if(p->grade>=60)pass+; /某科合格人数 p=p->next; fo
40、r(i=0; i<COURSE:coursenum; i+) cout<<setprecision(4)<<setiosflags(ios:showpoint); cout<<COURSE:coursename<<"平均:"<<sum/n<<",合格率:"<<pass/n*100.<<"%"<<endl;
41、 delete sum; delete pass;void COLLEGE:ValueS2ToS1(STUDENT &s1,STUDENT &s2) strcpy(s1.num,s2.num); /学号 strcpy(,); / s1.sex=s2.sex; /性别 strcpy(ame,ame);&
42、#160; /班级 for(int i=0; i<COURSE:coursenum; i+) s1.grade=s2.grade; /成绩指针(动态数组) s1.sum=s2.sum; /各科总分/按总分排名(采用选择法排序),总分高->低void COLLEGE:SumSort() S
43、TUDENT *p1,*p2; p1=SL->next; while(p1) p2=p1->next; while(p2) if(p2->sum>p1->sum) STUDENT t;
44、; ValueS2ToS1(t,*p1); ValueS2ToS1(*p1,*p2); ValueS2ToS1(*p2,t); p2=p2->next; p1=p1->next; void COLLEGE:NumSort() /按
45、学号排序(低->高) STUDENT *p1,*p2; p1=SL->next; while(p1) p2=p1->next; while(p2) if(strcmp(p2->num,p1->num)<0) /只要修改这里,其余同SumSort
46、 STUDENT t; ValueS2ToS1(t,*p1); ValueS2ToS1(*p1,*p2); ValueS2ToS1(*p2,t); p2=p2->next;
47、0; p1=p1->next; void main() char ch; COLLEGE c; /定义大学对象 cout.setf(ios:left); /显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数 do cout<<"n 高校学籍管理系统 n" cout<<"1增加学生n"
48、0; cout<<"2删除学生n" cout<<"3修改学生n" cout<<"4查询学生n" cout<<"5输出学生信息n" cout<<"6综合统计(课程平均成绩,课程合格率)n" cout<<"7总分排序n" cout<&l
49、t;"8学号排序n" cout<<"S数据存盘n" cout<<"L数据装入n" cout<<"Q退出t请选择(1-8,SLQ):" cin>>ch; ch=toupper(ch); switch(ch) case '1':&
50、#160; c.Add(); break; case '2': c.Delete();break; case '3': c.Modify();break; case '4': c.Query(); break; case '5':
51、60; c.Print(); break; case '6': c.Stat(); break; case '7': c.SumSort(); break; case '8': c.NumSort(); break;
52、60; case 'S': c.Save(); break; case 'L': c.Load(); break; while(ch!='Q');3、2数据文件1、course.dat:3C+英语高数2、student.dat: 86101 &
53、#160; chenkaijun M M8601 77 59 96 232 86102 zhaowei F
54、; M8601 55 85 77 217 86103 wubin M M8601 &
55、#160; 85 87 92 264 86104 shijun M M8601 58 &
56、#160; 90 85 233 86105 wangzhuguo M M8601 66 70 86 &
57、#160; 2223、3运行结果参考 高校学籍管理系统 1增加学生2删除学生3修改学生4查询学生5输出学生信息6综合统计(课程平均成绩,课程合格率7总分排序8学号排序S数据存盘L数据装入Q退出 请选择(1-8,SLQ) 高校学籍管理系统 1增加学生2删除学生3修改学生4查询学生5输出学生信息6综合统计(课程平均成绩,课程合格率7总分排序8学号排序S数据存盘L数据装入Q退出 请选择(1-8,SLQ):5* 输出学生信息 *学号 &
58、#160; 性别 班级 C+ 英语 高数 总分86101 chenkaijun M M8601 77 59 96 23
59、286102 zhaowei F M8601 55 85 77 21786103 wubin
60、 M M8601 85 87 92 26486104 shijun M M8601 58
61、0; 90 85 23386105 wangzhuguo M M8601 66 70 86 222 高校学籍管理系统 1增加
62、学生2删除学生3修改学生4查询学生5输出学生信息6综合统计(课程平均成绩,课程合格率)7总分排序8学号排序S数据存盘L数据装入Q退出 请选择(1-8,SLQ):7 高校学籍管理系统 1增加学生2删除学生3修改学生4查询学生5输出学生信息6综合统计(课程平均成绩,课程合格率)7总分排序8学号排序S数据存盘L数据装入Q退出 请选择(1-8,SLQ):5* 输出学生信息 *学号 性别 班级
63、60; C+ 英语 高数 总分86103 wubin M M8601 85 87 92 26486104 &
64、#160; shijun M M8601 58 90 85 23386101 chenkaijun M
65、60; M8601 77 59 96 23286105 wangzhuguo M M8601 66 70
66、160;86 22286102 zhaowei F M8601 55 85 77 217 高校学籍管理系统 1增加学生2删除学生3修改学生4查询学生5输出学生信息6综合统计(课程平均
67、成绩,课程合格率)7总分排序8学号排序S数据存盘L数据装入Q退出 请选择(1-8,SLQ):qPress any key to continun/查询学生信息/按学号或查找,如果找到显示该学生,如果未找到,也给出相应提示.void COLLEGE:uery() cout<<"n* 查询学生 *n" STUDENT *p=SL->next; char No20; char Name20; char ch;
68、;do cout<<"按学号查1,按查2:" cin>>ch; while(ch!='1'&&ch!='2'); int flag=0; /未找到0,找到1 if(ch='1') /按学号查 cout<<"学号:" &
69、#160;cin>>No; while(p) if(strcmp(p->num,No)=0) flag=1; break; else p=p->next;
70、; else /按查 cout<<":" cin>>Name; while(p) if(strcmp(p->name,Name)=0) flag=1; break;
71、60; else p=p->next; if(flag=1) /如果找到,显示此同学信息 p->OutputT(); p->Output(); else /否则给出未找到提出 cout<<"指定的学
72、生没有找到!n"/输出所有学生信息void COLLEGE:rint() cout<<"n* 输出学生信息 *n" STUDENT *p=SL->next; STUDENT:OutputT(); /输出标题 while(p) /循环输出各位学生信息 p->Output();
73、 p=p->next; /学生数据存盘void COLLEGE:Save() ofstream f("student.dat"); STUDENT *p=SL->next; while(p) /遍历学生链表 p->Output(f); /写入文件 p=p->
74、;next; f.close(); cout<<"n* 保存数据完成! *n"void COLLEGE:Clear() STUDENT *p=SL->next; while(p) SL->next=p->next; delete p; p=SL->next;
75、;/装入学生数据void COLLEGEad() Clear(); ifstream f("student.dat"); STUDENT *p=SL; STUDENT *p2=new STUDENT; p2->Input(f); while(f) p->next=p2; p=p
76、->next; p2=new STUDENT; p2->Input(f); delete p2; f.close();/统计课程平均成绩,课程合格率void COLLEGE:Stat() float *sum=new floatCOURSE:coursenum; /各科平均成绩 float *pass=new floa
77、tCOURSE:coursenum; /各科合格人数,/n=>合格率 int n=0; /学生人数 for(int i=0; i<COURSE:coursenum; i+) STUDENT *p=SL->next; n=0; sum=pass=0; while(p) /遍历学生链表
78、0; n+; /人数 sum=sum+p->grade; /某科总分 if(p->grade>=60)pass+; /某科合格人数
79、; p=p->next; for(i=0; i<COURSE:coursenum; i+) cout<<setprecision(4)<<setiosflags(ios:showpoint); cout<<COURSE:coursename<<"平均:"<<sum/
80、n<<",合格率:"<<pass/n*100.<<"%"<<endl; delete sum; delete pass;void COLLEGE:ValueS2ToS1(STUDENT &s1,STUDENT &s2) strcpy(s1.num,s2.num); /学号 strcpy(,); /
81、 s1.sex=s2.sex; /性别 strcpy(ame,ame); /班级 for(int i=0; i<COURSE:coursenum; i+) s1.grade=s2.grade; /成绩指针(动态数组) s1.sum=s2.sum; /各科总分/按总分排名(采
82、用选择法排序),总分高->低void COLLEGE:SumSort() STUDENT *p1,*p2; p1=SL->next; while(p1) p2=p1->next; while(p2) if(p2->sum>p1->sum)
83、 STUDENT t; ValueS2ToS1(t,*p1); ValueS2ToS1(*p1,*p2); ValueS2ToS1(*p2,t); p2=p2->next;
84、; p1=p1->next; void COLLEGE:NumSort() /按学号排序(低->高) STUDENT *p1,*p2; p1=SL->next; while(p1) p2=p1->next; while(p2) if(strcmp(p2->num,p1->
85、num)<0) /只要修改这里,其余同SumSort STUDENT t; ValueS2ToS1(t,*p1); ValueS2ToS1(*p1,*p2); ValueS2ToS1(*p2,t);
86、 p2=p2->next; p1=p1->next; void main() char ch; COLLEGE c; /定义大学对象 cout.setf(ios:left); /显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数 do cout&
87、lt;<"n 高校学籍管理系统 n" cout<<"1增加学生n" cout<<"2删除学生n" cout<<"3修改学生n" cout<<"4查询学生n" cout<<"5输出学生信息n" cout<<"6综合统计(课程平均成绩,课程
88、合格率)n" cout<<"7总分排序n" cout<<"8学号排序n" cout<<"S数据存盘n" cout<<"L数据装入n" cout<<"Q退出t请选择(1-8,SLQ):" cin>>ch; ch=toupper(ch);
89、60; switch(ch) case '1': c.Add(); break; case '2': c.Delete();break; case '3': c.Modify();break; case '4
90、39;: c.Query(); break; case '5': c.Print(); break; case '6': c.Stat(); break; case '7': c.SumSort(); break;
91、60; case '8': c.NumSort(); break; case 'S': c.Save(); break; case 'L': c.Load(); break; while(ch!='Q');3、2数据文件1、course.dat
92、:3C+英语高数2、student.dat: 86101 chenkaijun M M8601 77 59 96 232 86102&
93、#160; zhaowei F M8601 55 85 77 217 86103
94、160; wubin M M8601 85 87 92 264 86104 shijun
95、; M M8601 58 90 85 233 86105 wangzhuguo M M8601
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理身份核对的法律依据
- 医疗护理员常见病症护理
- 护士分级护理营养支持
- 中医西学中专项128学时试题答案
- 矿山设备管理工程师面试技巧
- 联通集团高级管理岗位的面试技巧
- 旅游行业景区运营主管面试全攻略
- 轮机长岗位技能培训计划
- 零售业门店总经理面试要点与策略
- 联想企业市场部策划经理经验
- 乐山市市中区2026年上半年公开招聘城市社区专职网格员(禁毒社工)(24人)笔试备考题库及答案解析
- 柔性传感器介绍
- 抖音直播营销案例分析
- 2025青岛国企社会招聘笔试题及答案解析
- 7s管理制度标准规范
- 隧道爆破作业安全操作规程
- 小学生主题班会 拒绝校园欺凌 课件
- 硅酸镁铝增稠触变性及其农药中的应用探讨-陈杰
- 开平事业单位笔试真题
- 共青团光辉历史简洁版
- GB/T 14536.1-2022电自动控制器第1部分:通用要求
评论
0/150
提交评论