




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、学生学籍信息管理系统设计1、需求分析学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。2、总体设计 整个系统可以设计为数据录入模块、数据修改模块、数据查询模块、数据删除模块和数据排序模块。成绩包括数学、英语、程序设计基础三门课成绩基本信息存放在一个文件,成绩信息存放在另一个文件。(1)数据录入模块学生基本信息文件可以在磁盘建立,采用写文件方式录入学生基本信息、各门课程的成绩单。综合成绩通过平时成绩和卷面成绩获得计算得到(平时30%,卷面7
2、0%)。(2)数据修改模块采用读文件方式读入学生成绩基本信息,进行修改后,以写文件方式写回原文件中。修改时,首先询问要修改信息学生的姓名或学号,然后选择要修改的内容,并输入新的数据进行修改。(3)查询模块通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,然后把查找结果输出。若选择后者,则先查找学号对应的姓名,再查找该学生的课程情况,并统计科目和实得总学分,输出结果。(3)删除模块通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在两个文件中查找该生信息,删除之。(4)排序模块通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数
3、据进行排序并输出结果,排序标准包括总分、某课成绩、某课卷面成绩等。 (5)追加模块追加学生信息#include<iostream.h>#include<fstream.h>#include<string.h>#include<stdlib.h>#include<iomanip.h>#define N 80struct StuInfo int stuNo; /学号 char name20; /姓名 char sex3; /性别 int domNum; /宿舍号 char tel12; /电话号码 ; /学生基本信息结构体struct S
4、tuGraInfo char courseName10; /课程名称 int courseNo; /课程编号 int creditHour; /学分 struct score int stuNo; /学号 float triGrade; /平时成绩 float examGrade; /卷面成绩 float totalGrade; /综合总评成绩 score_talbeN; /成绩单基本信息结构体 void create();void search();void insert();void repin();void del();void help();void recreate();StuGra
5、Info p3;StuInfo dN;int stuNum=0;int main( )char ch;do cout<<setw(60)<<" "<<endl;cout<<setw(60)<<"- 欢迎进入系统!-"<<endl;cout<<setw(40)<<"1:创建"<<endl<<setw(40)<<"2:查询"<<endl<<setw(40)<&
6、lt;"3:修改"<<endl<<setw(40)<<"4:排序"<<endl<<setw(40)<<"5:删除"<<endl<<setw(40)<<"6:添加"<<endl<<setw(40)<<"7:帮助"<<endl<<setw(40)<<"0:退出"<<endl; cout<
7、;<setw(60)<<"-"<<endl;cout<<" 请选择(07): "cin>>ch;while(!(ch<='7'&&ch>='0') /*输入不在0到5之间无效*/cout<<" 数据输入错误,请重新选择(07):"cin>>ch; switch(ch) case '1': create(); break; case '2': search(); bre
8、ak; case '3': insert(); break; case '4': repin(); break; case '5': del(); break; case '6': recreate(); break; case '7': help(); while(ch!='0');return 0;void create() /模块一录入学生信息int i,j,t=0;char m;StuGraInfo s3="数学",10,5,"英语",11,4,&qu
9、ot;程序设计",12,4;fstream file;for(i=0;i<N;i+) /输入学生基本信息到内存cout<<"请输入学号"<<endl;cin>>di.stuNo;for(int k=0;k+)for(j=0;j<i;j+) if(di.stuNo=dj.stuNo) cout<<"此学号已存在,请重新输入!"<<endl; t=1; cin>>di.stuNo; break; if(di.stuNo=0) cout<<"学号
10、不能为0,请重新输入!"<<endl; cin>>di.stuNo; t=1; break;if(t=0)break;cout<<"请输入姓名"<<endl;cin>>;cout<<"请输入性别"<<endl;cin>>di.sex;cout<<"请输入宿舍号"<<endl;cin>>di.domNum;cout<<"请输入电话号"<<e
11、ndl;cin>>di.tel;stuNum+;cout<<"是否继续?是y,否n"<<endl;cin>>m;if(m!='y')break; /输入学生的成绩信息到内存si中for(i=0;i<3;i+)cout<<"请开始输入"<<si.courseName<<"成绩"<<endl;for(j=0;j<stuNum;j+) cout<<"学号"<<endl; ci
12、n>>si. score_talbej.stuNo; cout<<si.courseName<<"平时成绩"<<endl; cin>>si. score_talbej. triGrade; cout<<si.courseName<<"卷面成绩"<<endl; cin>>si. score_talbej. examGrade; si. score_talbej. totalGrade=si. score_talbej. triGrade*0.3+ s
13、i. score_talbej. examGrade*0.7; /声明文件流对象ofstream outFile; /将基本信息写入文件testoutFile.open("D:test.txt",ios:out|ios:binary); if(!outFile) /使用错误流对象输出错误信息cout<<"文件无法打开"<<endl;abort();else /将内存中从ai地址开始的sizeof(di)的内容写入文件中 for(i=0;i<stuNum;i+) outFile.write(char*)&di,size
14、of(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*)&si,sizeof(StuGraInfo);outFile.close ();/关闭文件 void search() int n,k,i,j,sum=0,t=0;
15、 char m,a20; ifstream infile;cout<<setw(40)<<"1:查询基本信息"<<endl<<setw(40)<<"2:查询成绩"<<endl<<setw(40)<<"3:退出"<<endl; cout<<setw(60)<<"-"<<endl;cin>>n;while(!(n<=3&&n>=1) /*
16、输入不在1到3之间无效*/cout<<" 数据输入错误,请重新选择(13):"cin>>n;infile.open ("D:test.txt",ios:in|ios:binary); if(!infile) cout<<"test.txt文件不能打开"<<endl; abort(); elsefor( i=0;infile.peek() != EOF;i+) /将文件中的数据读出放在di /从文件中读字节到指定的存储器区域。 infile.read (char*)&di,size
17、of(StuInfo);infile.close ();/关闭文件switch(n)case 1: cout<<"按学号查询请输入a,按姓名查询输入b,按宿舍号查询输入c"<<endl;cin>>m; if(m='a') cout<<"请输入学号"<<endl; cin>>k;for(i=0;i<stuNum;i+) if(di.stuNo=k) cout<<"该学生学号:"<<di.stuNo<<endl
18、;cout<<"该学生姓名:"<<<<endl;cout<<"该学生性别:"<<di.sex<<endl;cout<<"该学生宿舍号:"<<di.domNum<<endl;cout<<"该学生电话:"<<di.tel<<endl;t=1; if(t=0) /容错处理 cout<<"没找到"<<endl; else i
19、f(m='b')cout<<"请输入要查找学生的姓名"<<endl; cin>>a;for(i=0;i<stuNum;i+)if(strcmp(,a)=0) cout<<"该学生学号:"<<di.stuNo<<endl;cout<<"该学生姓名:"<<<<endl; cout<<"该学生性别:"<<di.sex<<endl;
20、cout<<"该学生宿舍号:"<<di.domNum<<endl;cout<<"该学生电话:"<<di.tel<<endl;t=1;if(t=0) /容错处理 cout<<"没找到"<<endl; elsecout<<"请输入好查找的学生的宿舍号"<<endl;cin>>k;for(i=0;i<stuNum;i+) if(di.domNum=k) cout<<&quo
21、t;该学生学号:"<<di.stuNo<<endl; cout<<"该学生姓名:"<<<<endl; cout<<"该学生性别:"<<di.sex<<endl; cout<<"该学生宿舍号:"<<di.domNum<<endl; cout<<"该学生电话:"<<di.tel<<endl; t=1;if(t=0) /容错处理 c
22、out<<"没找到"<<endl; break;case 2:infile.open ("D:data.txt",ios:in|ios:binary); if(!infile) cout<<"data.txt文件不能打开"<<endl; abort(); else for(i=0;i<3;i+) /将文件中的数据读出放在pi内 /从文件中读字节到指定的存储器区域。 infile.read (char*)&pi,sizeof(StuGraInfo);infile.close(
23、); cout<<"请输入要查找的学生的学号"<<endl;cin>>k;for(i=0;i<stuNum;i+)if(di.stuNo=k)cout<<"该学生姓名为:"<<<<endl;t=1;if(t=0) /容错处理cout<<"没找到"<<endl;for(i=0;i<3;i+) /找到该学生,输出成绩信息并记录实得学分for(j=0;j<stuNum;j+) if(pi.score_talbej.
24、stuNo=k) cout<<pi.courseName<<"t"<<"平时成绩:"<<pi.score_talbej.triGrade; cout<<"t"<<"卷面成绩:"<<pi.score_talbej.examGrade; cout<<"t"<<"总分:"<<pi.score_talbej.totalGrade<<endl; if(pi
25、.score_talbej.totalGrade>=60) sum+=pi.creditHour; /用sum记录及格科目的学分 cout<<"该学生实得学分为"<<sum<<endl;case 3:break; void insert() /模块三修改学生信息fstream infile,outFile; int n,i,j,t=0;char course10;infile.open ("D:data.txt",ios:in|ios:binary);if(!infile)cout<<"da
26、ta.txt文件不能打开"<<endl;abort();elsefor(i=0;i<3;i+) /将文件中的数据读出放在pi内,并输出/从文件中读字节到指定的存储器区域。infile.read (char*)&pi,sizeof(StuGraInfo);infile.close ();/关闭文件cout<<"请输入要修改学生的学号:"<<endl;cin>>n;for(i=0;i<3;i+)for(j=0;j<stuNum;j+) if(pi.score_talbej.stuNo=n)t=1
27、;break;if(t=0)cout<<"找不到该学生!"<<endl;return;cout<<"输入要修改的科目的课程名称"<<endl;cout<<"课程包括 数学、英语、程序设计"<<endl;cin>>course;for(i=0;i<3;i+)if(strcmp(pi.courseName,course)=0)t=0;break; if(t=1) /容错处理cout<<"没找到该科目!"<<
28、endl; return;for(j=0;j<N;j+)if(pi.score_talbej.stuNo=n) cout<<"请输入该学生平时成绩"<<endl;cin>>pi.score_talbej.triGrade;cout<<"请输入该学生卷面成绩"<<endl;cin>>pi.score_talbej.examGrade;pi. score_talbej. totalGrade=pi. score_talbej. triGrade*0.3+ pi. score_tal
29、bej. examGrade*0.7;outFile.open("D:data.txt",ios:out|ios:binary);/打开文件if(!outFile) /使用错误流对象输出错误信息cout<<"文件无法打开"<<endl;abort(); else /输出数据到与对象outFile关联的文件中/把新信息写入文件 for(i=0;i<3;i+)outFile.write(char*)&pi,sizeof(StuGraInfo);outFile.close ();/关闭文件cout<<"
30、;修改成功!"<<endl; void del() int num,i=0,j=0,t=0; fstream infile,outFile;cout<<"请输入要输入学生的学号"<<endl;cin>>num;infile.open ("D:test.txt",ios:in|ios:binary); if(!infile) cout<<"test.txt文件不能打开"<<endl; /提示错误信息 abort();else for( i=0;i<3
31、;i+) /将文件中的数据读出放在pi内,并输出 /从文件中读字节到指定的存储器区域。 infile.read (char*)&di,sizeof(StuInfo); infile.close();for(i=0;i<stuNum;i+)if(di.stuNo=num) t=1;di.stuNo=0;di.domNum=0;strcpy(di.sex,"0");for(j=0;j<12;j+) di.telj=0;strcpy(,"0");if(t=0)cout<<"未找到该学生!"<
32、;<endl;infile.open ("D:data.txt",ios:in|ios:binary); if(!infile) cout<<"data.txt文件不能打开"<<endl; /提示错误信息 abort();else for( i=0;i<3;i+) /将文件中的数据读出放在pi内 /从文件中读字节到指定的存储器区域。 infile.read (char*)&pi,sizeof(StuGraInfo); infile.close();for(i=0;i<3;i+)for(j=0;j<s
33、tuNum;j+)if(pi.score_talbej.stuNo=num)pi.score_talbej.examGrade=0; pi.score_talbej.stuNo=0; pi.score_talbej.totalGrade=0;pi.score_talbej.triGrade=0;outFile.open("D:test.txt",ios:out|ios:binary); if(!outFile) /使用错误流对象输出错误信息cout<<"文件无法打开"<<endl;abort();else/将内存中从di地址开始的
34、sizeof(di)的内容写入文件中 for(i=0;i<3;i+) outFile.write(char*)&di,sizeof(StuInfo); outFile.close ();/关闭文件cout<<"基本信息删除成功!"<<endl;outFile.open("D:data.txt",ios:out|ios:binary); if(!outFile) /使用错误流对象输出错误信息cout<<"文件无法打开"<<endl;abort();else/将内存中从pi地址
35、开始的sizeof(pi)的内容写入文件中 for(i=0;i<3;i+) outFile.write(char*)&pi,sizeof(StuGraInfo); outFile.close ();/关闭文件cout<<"成绩信息删除成功!"<<endl;return;void repin()ifstream file;int i,j,max,courseNo,n,k=0;double qN=0,t;int stuN,num;char nameN20,stuName20;file.open("D:data.txt",
36、ios:in|ios:binary);for(i=0;i<3;i+)file.read(char *) &pi,sizeof(StuGraInfo);file.close();file.open("D:test.txt",ios:in|ios:binary);for(i=0;i<stuNum;i+)file.read(char *) &di,sizeof(StuInfo);file.close();cout<<setw(40)<<"1:按总分查询"<<endl<<setw(40)
37、<<"2:按某课成绩查询"<<endl<<setw(40)<<"3:按某课卷面成绩查询"<<endl<<setw(40)<<"4:退出"<<endl; cout<<setw(60)<<"-"<<endl;cin>>n;switch(n) case 1: for(i=0;i<3;i+) for(j=0;j<stuNum;j+) qj=qj+pi.score_tal
38、bej.totalGrade; /计算学生各自三门成绩总分和 stuj=pi.score_talbej.stuNo; /同时记录学生学号strcpy(namej,); for(i=0;i<N;i+) max=i; for(j=i+1;j<N;j+) if(qmax<qj) max=j; if(max!=i) /分数排序的同时,学号随着分数动 t=qmax;num=stumax; strcpy(stuName,namemax); qmax=qi;stumax=stui; strcpy(namemax,namei); qi=t; stui=num; strcpy(n
39、amei,stuName); cout<<"按总分排序结果为:"<<endl; cout<<"学号"<<"t"<<"姓名"<<"t"<<"分数"<<endl; for(i=0;i<stuNum;i+) cout<<stui<<"t"<<namei<<"t"<<qi<<
40、;endl; cout<<endl; break; case 2: cout<<"如按某课排序,请输入要排序课程的课程号"<<endl; cin>>courseNo; for(i=0;i<stuNum;i+) if(pi.courseNo=courseNo) k=1; break; if(k=0) /容错处理cout<<"找不到该课程!"<<endl;return; for(j=0;j<stuNum;j+) qj=pi.score_talbej.totalGrade; s
41、tuj=pi.score_talbej.stuNo; for(i=0;i<stuNum;i+) max=i; for(j=i+1;j<stuNum;j+) if(qmax<qj) max=j; if(max!=i) t=qmax;num=stumax; qmax=qi;stumax=stui; qi=t;stui=num; cout<<"按该课程排序结果为:"<<endl; cout<<"学号"<<"t"<<"分数"<<end
42、l; for(i=0;i<stuNum;i+) cout<<stui<<"t"<<qi<<endl; cout<<endl; break; case 3: cout<<"如按某课卷面成绩排序,请输入要排序课程的课程号"<<endl; cin>>courseNo; for(i=0;i<stuNum;i+) if(pi.courseNo=courseNo) k=1; break; if(k=0) /容错处理cout<<"找不到该课
43、程!"<<endl;return; for(j=0;j<stuNum;j+) qj=pi.score_talbej.examGrade; /计算各个学生该门课总分 stuj=pi.score_talbej.stuNo; for(i=0;i<stuNum;i+) /分数排序,学号跟着分数动 max=i; for(j=i+1;j<N;j+) if(qmax<qj)max=j; if(max!=i) t=qmax;num=stumax; qmax=qi;stumax=stui; qi=t;stui=num; cout<<"按该课程卷
44、面成绩排序结果为:"<<endl; cout<<"学号"<<"t"<<"分数"<<endl; for(i=0;i<stuNum;i+) cout<<stui<<"t"<<qi<<endl; cout<<endl; case 4: break;void help()cout<<"此系统具有存储学生数据,比你更有查询、修改、排序、删除、添加的功能。"&l
45、t;<endl; cout<<"初次使用时首先请选择' 创建'菜单,进行写入文件,用于保存数据"<<endl;cout<<"已创建后看菜单进行查询、修改等功能!"<<endl;void recreate()fstream infile,outFile;int n,i,j,k;cout<<"请输入添加人数"<<endl; /键入添加人数cin>>n;/读出文件信息infile.open("D:test.txt",ios:in|ios:binary);for(i=0;i<stuNum;i+)infile.read(char *) &di,sizeof(StuInfo);infile.close();j=stuNum;stuNum=stuNum+n; /通过添加人数修改全局变量cout<<"开始添加基本信息:"<<endl;for(i=j;i<stuNum;i+)cout<<"请输入学号"<<endl;cin>>di.stuNo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应链金融及其风险控制研究报告
- 2025至2030年专用面粉项目可行性研究报告
- 以历史故事为素材创新幼儿园思政教育方式
- 企业国际化中的公共关系策略
- 2025年铝镍永磁合金行业深度研究报告
- 牛津译林版七年级上册Unit 1《This is me》(第4课时)(单元整体+课时教学设计)
- 2025年胶囊机械设备行业深度研究报告
- 企业管理中的创新能力培养
- 个人债务管理与还款计划
- 中学生美术学习兴趣的培养策略
- 电影后期制作服务合同样本
- DB45T 1056-2014 土地整治工程 第3部分:验收技术规程
- (重点)水利安全员B证近年考试真题题库-含答案
- 2025届河北省石家庄市高三下学期一模政治试题(原卷版+解析版)
- 特种设备重大事故隐患判定准则
- 信息技术行业安全保障措施及系统稳定性维护
- 《移动通信技术简介》课件
- 病人私自外出护理不良事件
- DBJ50-T -026-2021 建筑智能化系统工程验收标准
- 克服考试紧张情绪的技巧
- 2025年一季度安全自检自查工作总结(3篇)
评论
0/150
提交评论