1、高校学籍管理系统C+程序设计VC+课程设计-高校学籍管理系统 源程序一、课程设计题目:学籍管理系统 二、目的与要求:1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。2、基本要求: (1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统的设计中,至少要用到面向对象的一种机制。3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。4、写出设计说明书 三、设计方法和基本原
2、理:1、功能要求 要求完成以下功能: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 #include #include #include class COURSE/课程类private:static int coursenum; /课程数量static char (*coursename)20;/课程名称public:static void LoadCour
4、se()/从文件COURSE.DAT装入课程信息 ifstream f(course.dat); fcoursenum; coursename=new charcoursenum20; for(int i=0;icoursename; f.close();friend class STUDENT;friend class COLLEGE;int COURSE:coursenum=0;char (*COURSE:coursename)20=0;class STUDENT /学生类private:char num20; /学号char name20;/姓名char sex; /性别char cna
5、me20; /班级float *grade; /成绩(动态数组)float sum; /各科总分STUDENT *next;public:STUDENT() grade=new floatCOURSE:coursenum; next=0;STUDENT() delete grade;void Input() sum=0; coutnum; /输入学生一般信息 coutname; coutsex;sex=toupper(sex); coutcname; for(int i=0;iCOURSE:coursenum;i+)/输入学生各科成绩 coutCOURSE:coursenamegrade; s
6、um+=grade;/计算总分 void Input(ifstream &f) fnum; fname; fsex;sex=toupper(sex); fcname; for(int i=0;igrade; fsum;static void OutputT() coutsetw(10)学号setw(20)姓名setw(5)性别setw(10)班级; for(int i=0;iCOURSE:coursenum;i+) coutsetw(7)COURSE:coursename; coutsetw(10)总分endl;void Output() coutsetw(10)num;/输出学生一般信息 c
7、outsetw(20)name; coutsetw(5)sex; coutsetw(10)cname; for(int i=0;iCOURSE:coursenum;i+)/输出学生各科成绩,总分 coutsetw(7)grade; coutsetw(10)sumendl;void Output(ofstream &f) fsetw(10)num;/输出学生一般信息 fsetw(20)name; fsetw(5)sex; fsetw(10)cname; for(int i=0;iCOURSE:coursenum;i+)/输出学生各科成绩,总分 fsetw(7)grade; fsetw(10)su
8、mnext; delete p; p=SL; void Set(); /课程设置(增,删,改,存)void Add(); /增加学生void Delete(); /删除学生void Modify(); /修改学生void Query(); /查询学生信息(按姓名,学号)void Print(); /输出所有学生信息void Stat(); /统计课程平均成绩,课程合格率void SumSort(); /按总分排名(高-低)void NumSort(); /按学号排序(低-高)void Save(); /学生数据存盘void Load(); /装入学生数据;/增加学生void COLLEGE:A
9、dd() coutnext)p2=p2-next;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() coutn*
10、删除学生 *n;char No20;STUDENT *p1,*p2;coutNo;if(!Find(No,&p1,&p2) coutnext=p1-next;/连接 delete p1; cout正确删除!n;/修改学生void COLLEGE:Modify() coutn* 修改学生 *n;char No20;STUDENT *p1,*p2;coutNo;if(!Find(No,&p1,&p2) coutOutput();/输出原来的学生信息(做提示) p1-Input();/输入此学生信息(更新) cout修改完成!n;/*承上*/查询学生信息/按学号或姓名查找,如果找到显示该学生,如果未
11、找到,也给出相应提示.void COLLEGE:uery()coutnext;char No20;char Name20;char ch;do coutch;while(ch!=1&ch!=2);int flag=0;/未找到0,找到1if(ch=1)/按学号查 coutNo; while(p) if(strcmp(p-num,No)=0) flag=1;break; else p=p-next;else/按姓名查 coutName; while(p) if(strcmp(p-name,Name)=0) flag=1;break; else p=p-next;if(flag=1)/如果找到,显
12、示此同学信息 p-OutputT(); p-Output();else/否则给出未找到提出 cout指定的学生没有找到!n;/输出所有学生信息void COLLEGE:rint() coutnext;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();coutnext;whi
13、le(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; p2-Input(f); delete p2;f.close();/统计课程平均成绩,课程合格率void COLLEGE:Stat() float *sum=new floatCOURSE:coursenum;
14、/各科平均成绩float *pass=new floatCOURSE:coursenum;/各科合格人数,/n=合格率int n=0;/学生人数for(int i=0;inext;n=0; sum=pass=0; while(p)/遍历学生链表 n+; /人数 sum=sum+p-grade;/某科总分 if(p-grade=60)pass+; /某科合格人数 p=p-next; for(i=0;iCOURSE:coursenum;i+) coutsetprecision(4)setiosflags(ios:showpoint); coutCOURSE:coursename平均:sum/n,合
15、格率:pass/n*100.%endl;delete sum;delete pass;void COLLEGE:ValueS2ToS1(STUDENT &s1,STUDENT &s2)strcpy(s1.num,s2.num); /学号strcpy(s1.name,s2.name);/姓名s1.sex=s2.sex; /性别strcpy(ame,ame); /班级for(int i=0;i低void COLLEGE:SumSort() STUDENT *p1,*p2;p1=SL-next;while(p1) p2=p1-next; while(p2) if(p2-sump1-sum) STUD
16、ENT 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-next; while(p2) if(strcmp(p2-num,p1-num)next; p1=p1-next;void main()char ch;COLLEGE c;/定义大学对象cout.setf(ios:left);/显示主菜单,接受选择,并分支调用大学
17、类的相应功能的成员函数do coutn 高校学籍管理系统 n; cout1增加学生n; cout2删除学生n; cout3修改学生n; cout4查询学生n; cout5输出学生信息n; cout6综合统计(课程平均成绩,课程合格率)n; cout7总分排序n; cout8学号排序n; coutS数据存盘n; coutL数据装入n; coutch;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;
18、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:3C+英语高数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 2223、3运行结果参考 高校学籍管理系统 1增加学生2删除学生3修改学生4查询学生5输出学生信息6综合统计(课程平均成绩,课程合格率7总分排序8学号排序S数据存盘L数据装入Q退出 请选择(1-8,SLQ) 高校学籍管理系统 1增加学生2删除学生3修改学生4查询学生5输出学生信息6综合统计
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1