版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 coursenum;/ 课程数量static
4、char (*coursename)20;/ 课程名称public:static void LoadCourse()/ 从文件 COURSE.DAT装入课程信息ifstream f("course.dat");f>>coursenum;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 (*COU
5、RSE:coursename)20=0;class STUDENT / 学生类private:char num20;/ 学号char name20;/ 姓名char sex;/性别char cname20; /班级float *grade;/ 成绩 ( 动态数组 )float sum;/ 各科总分STUDENT *next;public:STUDENT()grade=new floatCOURSE:coursenum;next=0;STUDENT().delete grade;void Input()sum=0;cout<<" 学号 :"cin>>n
6、um;/ 输入学生一般信息cout<<" 姓名 :"cin>>name;cout<<" 性别 :"cin>>sex;sex=toupper(sex);cout<<" 班级 :"cin>>cname;for(int i=0;i<COURSE:coursenum;i+)/ 输入学生各科成绩cout<<COURSE:coursename<<"成绩 :"cin>>grade;sum+=grade;/ 计算总分v
7、oid Input(ifstream &f)f>>num;f>>name;f>>sex;sex=toupper(sex);f>>cname;for(int i=0;i<COURSE:coursenum;i+)/ 输出学生各科成绩,总分f>>grade;f>>sum;static void OutputT()cout<<setw(10)<<"学号 "<<setw(20)<<" 姓名 "<<setw(5)<&
8、lt;" 性别"<<setw(10)<<" 班级 "for(int i=0;i<COURSE:coursenum;i+)cout<<setw(7)<<COURSE:coursename;cout<<setw(10)<<"总分 "<<endl;void Output()cout<<setw(10)<<num;/ 输出学生一般信息cout<<setw(20)<<name;cout<<setw
9、(5)<<sex;cout<<setw(10)<<cname;.for(int i=0;i<COURSE:coursenum;i+)/ 输出学生各科成绩,总分cout<<setw(7)<<grade;cout<<setw(10)<<sum<<endl;void Output(ofstream &f)f<<setw(10)<<num;/ 输出学生一般信息f<<setw(20)<<name;f<<setw(5)<<se
10、x;f<<setw(10)<<cname;for(int i=0;i<COURSE:coursenum;i+)/ 输出学生各科成绩,总分f<<setw(7)<<grade;f<<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(
11、STUDENT &s1,STUDENT &s2); public:COLLEGE()COURSEadCourse();/ 装入课程信息SL=new STUDENT();/ 创建学生链表表头结点COLLEGE()STUDENT *p=SL;/ 删除学生链表各个结点while(p)SL=p->next;delete p;p=SL;.void Set();/ 课程设置 ( 增,删,改,存 )void Add();/ 增加学生void Delete();/ 删除学生void Modify();/ 修改学生void Query();/查询学生信息 ( 按姓名,学号 )void Pr
12、int();/输出所有学生信息void Stat();/统计课程平均成绩,课程合格率void SumSort();/按总分排名 ( 高-> 低)void NumSort();/按学号排序 ( 低-> 高)void Save();/学生数据存盘void Load();/装入学生数据;/ 增加学生void COLLEGE:Add()cout<<"n*增加学生信息 *n"STUDENT *p=new STUDENT;/ 创建 1 个新学生结点STUDENT *p2=SL;/查找学生链表表尾结点while(p2->next)p2=p2->next
13、;p2->next=p;/ 链接学生结点p->Input();/ 输入学生信息/ 查找学生结点 ( 返回 1- 找到, 0- 未找到 . 结点指针由 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*p2=*p1;/ 继续查找*p1=(*p1)->next;return *p1?1:0;./ 删除学生void COLLEGE:elete()
14、cout<<"n*删除学生 *n"char No20;STUDENT *p1,*p2;cout<<" 学号 :"cin>>No;if(!Find(No,&p1,&p2)cout<<" 指定的学生没有找到 !n"elsep2->next=p1->next;/ 连接delete p1;cout<<" 正确删除 !n"/ 修改学生void COLLEGE:Modify()cout<<"n*修改学生 *n"
15、;char No20;STUDENT *p1,*p2;cout<<" 学号 :"cin>>No;if(!Find(No,&p1,&p2)cout<<" 指定的学生没有找到 !n"elsep1->Output();/ 输出原来的学生信息 ( 做提示 )p1->Input();/ 输入此学生信息 ( 更新 )cout<<" 修改完成 !n"/* 承上 */ 查询学生信息/ 按学号或姓名查找,如果找到显示该学生,如果未找到,也给出相应提示 . void COLLEG
16、E:uery()cout<<"n* 查询学生 *n".STUDENT *p=SL->next;char No20;char Name20;char ch;docout<<" 按学号查 1, 按姓名查 2:"cin>>ch;while(ch!='1'&&ch!='2');int flag=0;/ 未找到 0,找到 1if(ch='1')/ 按学号查cout<<" 学号 :"cin>>No;while(p)if
17、(strcmp(p->num,No)=0)flag=1;break;elsep=p->next;else/ 按姓名查cout<<" 姓名 :"cin>>Name;while(p)if(strcmp(p->name,Name)=0)flag=1;break;elsep=p->next;if(flag=1)/ 如果找到,显示此同学信息p->OutputT();p->Output();else/ 否则给出未找到提出cout<<" 指定的学生没有找到 !n"/ 输出所有学生信息 void C
18、OLLEGE:rint()cout<<"n* 输出学生信息 *n" STUDENT *p=SL->next;.STUDENT:OutputT();/ 输出标题while(p)/ 循环输出各位学生信息p->Output();p=p->next;/ 学生数据存盘void COLLEGE:Save()ofstream f("student.dat");STUDENT *p=SL->next;while(p)/ 遍历学生链表p->Output(f);/ 写入文件p=p->next;f.close();cout<
19、;<"n*保存数据完成 ! *n"void COLLEGE:Clear()STUDENT *p=SL->next;while(p)SL->next=p->next;delete p;p=SL->next;/ 装入学生数据 void COLLEGEad()Clear();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;
20、.p2->Input(f);delete p2;f.close();/ 统计课程平均成绩,课程合格率void COLLEGE:Stat()float *sum=new floatCOURSE:coursenum;/ 各科平均成绩float *pass=new floatCOURSE:coursenum;/ 各科合格人数, /n=>合格率int n=0;/ 学生人数for(int i=0;i<COURSE:coursenum;i+)STUDENT *p=SL->next;n=0;sum=pass=0;while(p)/ 遍历学生链表n+;/ 人数sum=sum+p->
21、;grade;/ 某科总分if(p->grade>=60)pass+;/ 某科合格人数p=p->next;for(i=0;i<COURSE:coursenum;i+)cout<<setprecision(4)<<setiosflags(ios:showpoint); cout<<COURSE:coursename<<"平均 :"<<sum/n<<", 合格率 :"<<pass/n*100.<<"%"<<e
22、ndl;delete sum;delete pass;void COLLEGE:ValueS2ToS1(STUDENT &s1,STUDENT &s2)strcpy(s1.num,s2.num);/ 学号strcpy(,);/ 姓名s1.sex=s2.sex;/性别strcpy(ame,ame);/ 班级for(int i=0;i<COURSE:coursenum;i+)s1.grade=s2.grade;/ 成绩指针 ( 动态数组 )s1.sum=s2.sum;/ 各科总分./ 按总分排名 ( 采用选择法排序 ), 总分高 -> 低 v
23、oid COLLEGE:SumSort()STUDENT *p1,*p2; p1=SL->next;while(p1)p2=p1->next;while(p2)if(p2->sum>p1->sum)STUDENT t;ValueS2ToS1(t,*p1);ValueS2ToS1(*p1,*p2);ValueS2ToS1(*p2,t);p2=p2->next;p1=p1->next;void COLLEGE:NumSort()/ 按学号排序 ( 低-> 高)STUDENT *p1,*p2;p1=SL->next;while(p1)p2=p1-
24、>next;while(p2)if(strcmp(p2->num,p1->num)<0)/ 只要修改这里,其余同SumSortSTUDENT t;ValueS2ToS1(t,*p1);ValueS2ToS1(*p1,*p2);ValueS2ToS1(*p2,t);p2=p2->next;p1=p1->next;.void main()char ch;COLLEGE c;/ 定义大学对象cout.setf(ios:left);/ 显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数 don 高校学籍管理系统 n"cout<<&quo
25、t;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<<"
26、;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 &
27、#39;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 :3C+英语高数2、student.dat:.86101chenkaijunMM860177599623286102zhaoweiFM860155857721786103wubinMM860185879226486104shijunMM8601589085
28、23386105wangzhuguoMM86016670862223、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* 输出学生信息 *学号姓名性别 班级C+英语高数总分86101chenkaijunMM860177599623286102zhao
29、weiFM860155857721786103wubinMM8601858792264.86104shijunMM860158908523386105wangzhuguoMM8601667086222 高校学籍管理系统1增加学生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* 输
30、出学生信息 *学号姓名性别 班级C+英语高数总分86103wubinMM860185879226486104shijunMM860158908523386101chenkaijunMM860177599623286105wangzhuguoMM860166708622286102zhaoweiFM8601558577217 高校学籍管理系统1增加学生2删除学生.3修改学生4查询学生5输出学生信息6综合统计 ( 课程平均成绩 , 课程合格率 )7总分排序8学号排序S数据存盘L数据装入Q退出请选择 (1-8,SLQ):qPress any key to continun/ 查询学生信息/ 按学号或
31、姓名查找,如果找到显示该学生,如果未找到,也给出相应提示 . void COLLEGE:uery()cout<<"n*查询学生 *n"STUDENT *p=SL->next;char No20;char Name20;char ch;docout<<" 按学号查 1, 按姓名查 2:"cin>>ch;while(ch!='1'&&ch!='2');int flag=0;/ 未找到 0,找到 1if(ch='1')/ 按学号查cout<<&
32、quot; 学号 :"cin>>No;while(p)if(strcmp(p->num,No)=0)flag=1;break;elsep=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<<&
33、quot; 指定的学生没有找到 !n"/ 输出所有学生信息 void COLLEGE:rint()cout<<"n*输出学生信息 *n"STUDENT *p=SL->next;STUDENT:OutputT();/ 输出标题while(p)/ 循环输出各位学生信息p->Output();p=p->next;/ 学生数据存盘void COLLEGE:Save()ofstream f("student.dat");STUDENT *p=SL->next;while(p)/ 遍历学生链表p->Output(f
34、);/ 写入文件p=p->next;f.close();cout<<"n*保存数据完成 ! *n"void COLLEGE:Clear()STUDENT *p=SL->next;while(p)SL->next=p->next;delete p;p=SL->next;./ 装入学生数据void COLLEGEad()Clear();ifstream f("student.dat");STUDENT *p=SL;STUDENT *p2=new STUDENT;p2->Input(f);while(f)p-&g
35、t;next=p2;p=p->next;p2=new STUDENT;p2->Input(f);delete p2;f.close();/ 统计课程平均成绩,课程合格率void COLLEGE:Stat()float *sum=new floatCOURSE:coursenum;/ 各科平均成绩float *pass=new floatCOURSE:coursenum;/ 各科合格人数, /n=>合格率int n=0;/ 学生人数for(int i=0;i<COURSE:coursenum;i+)STUDENT *p=SL->next;n=0;sum=pass=0
36、;while(p)/ 遍历学生链表n+;/ 人数sum=sum+p->grade;/ 某科总分if(p->grade>=60)pass+;/ 某科合格人数p=p->next;for(i=0;i<COURSE:coursenum;i+)cout<<setprecision(4)<<setiosflags(ios:showpoint); cout<<COURSE:coursename<<"平均 :"<<sum/n<<", 合格.率 :"<<pas
37、s/n*100.<<"%"<<endl;delete sum;delete pass;void COLLEGE:ValueS2ToS1(STUDENT &s1,STUDENT &s2)strcpy(s1.num,s2.num);/ 学号strcpy(,);/ 姓名s1.sex=s2.sex;/性别strcpy(ame,ame);/ 班级for(int i=0;i<COURSE:coursenum;i+)s1.grade=s2.grade;/ 成绩指针 ( 动态数组 )s1.sum=s2.sum;/ 各
38、科总分/ 按总分排名 ( 采用选择法排序 ), 总分高 -> 低void COLLEGE:SumSort()STUDENT *p1,*p2;p1=SL->next;while(p1)p2=p1->next;while(p2)if(p2->sum>p1->sum)STUDENT t;ValueS2ToS1(t,*p1);ValueS2ToS1(*p1,*p2);ValueS2ToS1(*p2,t);p2=p2->next;p1=p1->next;void COLLEGE:NumSort()/ 按学号排序 ( 低-> 高)STUDENT *p1
39、,*p2;p1=SL->next;while(p1)p2=p1->next;.while(p2)if(strcmp(p2->num,p1->num)<0)/ 只要修改这里,其余同SumSortSTUDENT t;ValueS2ToS1(t,*p1);ValueS2ToS1(*p1,*p2);ValueS2ToS1(*p2,t);p2=p2->next;p1=p1->next;void main()char ch;COLLEGE c;/ 定义大学对象cout.setf(ios:left);/ 显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数do
40、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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国婴儿床市场前景规模及发展趋势分析报告
- 2024年港口起重机采购与租赁合同3篇
- 2024年塔吊租赁合同及操作培训服务3篇
- 茂名职业技术学院《刑法2》2023-2024学年第一学期期末试卷
- 2024年度物业服务合同履行监督与违约责任追究研究3篇
- 2024年标准离婚合同样本图片直接下载版B版
- 2024年版测绘服务委托书2篇
- 2024年歌手经纪公司合约3篇
- 2025年兰州货运从业资格证考试试题和答案
- 2025公对公借款合同范本
- 《物流系统规划与设计》课程教学大纲
- 护理质控分析整改措施(共5篇)
- 金属矿山安全教育课件
- 托盘演示教学课件
- 中华农耕文化及现实意义
- DB32T 4353-2022 房屋建筑和市政基础设施工程档案资料管理规程
- DBJ61-T 112-2021 高延性混凝土应用技术规程-(高清版)
- 2023年高考数学求定义域专题练习(附答案)
- 农产品品牌与营销课件
- 苏科版一年级心理健康教育第17节《生命更美好》教案(定稿)
- 车辆二级维护检测单参考模板范本
评论
0/150
提交评论