当前位置:文档之家› 学生学籍信息管理系统C

学生学籍信息管理系统C

一、学生学籍信息管理系统设计1、需求分析学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。

2、总体设计整个系统可以设计为数据录入模块、数据修改模块、数据查询模块、数据删除模块和数据排序模块。

成绩包括数学、英语、程序设计基础三门课成绩基本信息存放在一个文件,成绩信息存放在另一个文件。

(1)数据录入模块学生基本信息文件可以在磁盘建立,采用写文件方式录入学生基本信息、各门课程的成绩单。

综合成绩通过平时成绩和卷面成绩获得计算得到(平时30%,卷面70%)。

(2)数据修改模块采用读文件方式读入学生成绩基本信息,进行修改后,以写文件方式写回原文件中。

修改时,首先询问要修改信息学生的姓名或学号,然后选择要修改的内容,并输入新的数据进行修改。

(3)查询模块通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,然后把查找结果输出。

若选择后者,则先查找学号对应的姓名,再查找该学生的课程情况,并统计科目和实得总学分,输出结果。

(3)删除模块通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在两个文件中查找该生信息,删除之。

(4)排序模块通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果,排序标准包括总分、某课成绩、某课卷面成绩等。

(5)追加模块追加学生信息#include<iostream.h>#include<fstream.h>#include<string.h>#include<stdlib.h>#include<iomanip.h>#defineN80structStuInfo{intstuNo;//学号charname[20];//姓名charsex[3];//性别intdomNum;//宿舍号chartel[12];//电话号码};//学生基本信息结构体structStuGraInfo{ charcourseName[10];//课程名称intcourseNo;//课程编号intcreditHour;//学分structscore{intstuNo;//学号floattriGrade;//平时成绩floatexamGrade;//卷面成绩floattotalGrade;//综合总评成绩}score_talbe[N];};//成绩单基本信息结构体voidcreate();voidsearch();voidinsert();voidrepin();voiddel();voidhelp();voidrecreate();StuGraInfop[3];StuInfod[N];intstuNum=0;intmain(){charch;do{cout<<setw(60)<<""<<endl;cout<<setw(60)<<"---------欢迎进入系统!--------------"<<endl;cout<<setw(40)<<"1:创建"<<endl<<setw(40)<<"2:查询"<<endl<<setw(40)<<"3:修改"<<endl<<setw(40)<<"4:排序"<<endl<<setw(40)<<"5:删除"<<endl<<setw(40)<<"6:添加"<<endl<<setw(40)<<"7:帮助"<<endl<<setw(40)<<"0:退出"<<endl;cout<<setw(60)<<"--------------------------------------"<<endl;cout<<"请选择(0~7):";cin>>ch;while(!(ch<='7'&&ch>='0'))/*输入不在0到5之间无效*/{cout<<"数据输入错误,请重新选择(0~7):";cin>>ch;}switch(ch){case'1':create();break;case'2':search();break;case'3':insert();break;case'4':repin();break;case'5':del();break;case'6':recreate();break;case'7':help();}}while(ch!='0');return0;}voidcreate(){//模块一录入学生信息inti,j,t=0;charm;StuGraInfos[3]={{"数学",10,5},{"英语",11,4},{"程序设计",12,4}}; fstreamfile;for(i=0;i<N;i++)//输入学生基本信息到内存{cout<<"请输入学号"<<endl;cin>>d[i].stuNo;for(intk=0;;k++){for(j=0;j<i;j++)if(d[i].stuNo==d[j].stuNo){cout<<"此学号已存在,请重新输入!"<<endl;t=1;cin>>d[i].stuNo;break;}if(d[i].stuNo==0){cout<<"学号不能为0,请重新输入!"<<endl;cin>>d[i].stuNo;t=1;break;}if(t==0)break;}cout<<"请输入姓名"<<endl;cin>>d[i].name;cout<<"请输入性别"<<endl;cin>>d[i].sex;cout<<"请输入宿舍号"<<endl;cin>>d[i].domNum;cout<<"请输入电话号"<<endl;cin>>d[i].tel;stuNum++;cout<<"是否继续?是y,否n"<<endl;cin>>m;if(m!='y')break;}//输入学生的成绩信息到内存s[i]中for(i=0;i<3;i++){cout<<"请开始输入"<<s[i].courseName<<"成绩"<<endl;for(j=0;j<stuNum;j++){cout<<"学号"<<endl;cin>>s[i].score_talbe[j].stuNo;cout<<s[i].courseName<<"平时成绩"<<endl;cin>>s[i].score_talbe[j].triGrade;cout<<s[i].courseName<<"卷面成绩"<<endl;cin>>s[i].score_talbe[j].examGrade;s[i].score_talbe[j].totalGrade=s[i].score_talbe[j].triGrade*0.3+s[i].score_tal be[j].examGrade*0.7;}}//声明文件流对象ofstreamoutFile;//将基本信息写入文件testoutFile.open("D:\\test.txt",ios::out|ios::binary);if(!outFile)//使用错误流对象输出错误信息{cout<<"文件无法打开"<<endl;abort();}else{//将内存中从a[i]地址开始的sizeof(d[i])的内容写入文件中for(i=0;i<stuNum;i++)outFile.write((char*)&d[i],sizeof(StuInfo)); outFile.close();//关闭文件}outFile.open("D:\\data.txt",ios::out|ios::binary);if(!outFile)//使用错误流对象输出错误信息{cout<<"文件无法打开"<<endl;abort();}else{for(i=0;i<3;i++)outFile.write((char*)&s[i],sizeof(StuGraInfo));outFile.close();//关闭文件}}voidsearch(){intn,k,i,j,sum=0,t=0;charm,a[20];ifstreaminfile;cout<<setw(40)<<"1:查询基本信息"<<endl<<setw(40)<<"2:查询成绩"<<endl<<setw(40)<<"3:退出"<<endl;cout<<setw(60)<<"--------------------------------------"<<endl;cin>>n;while(!(n<=3&&n>=1))/*输入不在1到3之间无效*/{cout<<"数据输入错误,请重新选择(1~3):";cin>>n;}infile.open("D:\\test.txt",ios::in|ios::binary);if(!infile){cout<<"test.txt文件不能打开"<<endl;abort();}else{for(i=0;infile.peek()!=EOF;i++)//将文件中的数据读出放在d[i] //从文件中读字节到指定的存储器区域。

相关主题