




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、include iostream.h include iomanip.h> include fstream> include vector> #include <malloc。h include stdlib。h include string> #include process。h> include stdio.h #define LEN sizeof(struct student) using namespace std; int n=0; /定义一个全局变量统计学生人数 struct student/定义一个学生信息的结构体 char name20; /
2、用来存放姓名的 char sex20; /用来存放性别的 char yuanxi20;/用来存放院系的 long int id; /用来存放学号的 int score4; /用来存放分数的 int total; /用来存放总分数的 struct student next; ; vector student stu; class Information public: Information() ; /构造函数. Information() ; /析构函数。 student *creat();/建立链表函数。 void output(student head); int count(studen
3、t head);/定义函数count()统计考生总数 student insert(studenthead);/指针函数insert()用来添加考生信息。 student cancel(student *head,long int num);/指针函数*cancel()用来删除考生信息。 student find(student *head,long int num); /指针函数find()用来查找考生信息. void inorder(student head);/定义inorder()函数将考生的总分从大到小排列并输出 void average( student *head);/求学生成绩
4、的平均分的函数 void save(student *head);/保存函数 student Read();/读取函数 private: student *p1,p2,*p3,*head,st; ; Information:Information() /构造函数 cout<" *n”; cout" -<欢迎您使用学生信息管理系统-n”; cout<” *nn" Information:Information() /构造函数 cout” *n”; cout” -<谢谢您使用学生信息管理系统>>-n"; cout<&
5、quot; *n" student Information::creat(void) /定义一个指向struct student的结构体指针函数creat()用来增加学生信息。 char ch20;n=0; /用来存放姓名的 p1=p2=(student *)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 cout<” -<<请建立学生考试信息表,在姓名处输入 ! 结束输入。-”endl; cout<”姓名:”; cinch; head=NULL; /给指针head赋初值 while (strcmp(ch,”!")!=0)
6、 /调用字符比较函数strcmp()用来判断是否继续输入 char str10; int flag=0; p1=(student *)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 strcpy(p1-name,ch); /将循环结构前面输入的姓名复制到结构体名为p1的数组name中 cout<<” 性别:"; cin>p1->sex; cout<”院系:” ; cinstr; cout<” 学号(9位):”; do cinstr; if(atol(str)>999999999 | atol(str)1) cout
7、<"对不起,请正确输入!n”; else p1id=atol(str); flag=1; while(flag=0); flag=0; cout” 语文成绩:”; do cin>str; if(atoi(str)100 | atoi(str)1) cout<"对不起,请输入1100之间的数字!n”; else p1score0=atoi(str); flag=1; while(flag=0); flag=0; cout<” 外语成绩:”; do cinstr; if(atoi(str)>100 | atoi(str)1) cout”对不起,请输
8、入1-100之间的数字!n”; else p1score1=atoi(str); flag=1; while(flag=0); flag=0; cout" 数学成绩:" do cinstr; if(atoi(str)100 | atoi(str)1) cout”对不起,请输入1100之间的数字!n”; else p1score2=atoi(str); flag=1; while(flag=0); flag=0; cout<<” C+成绩:”; do cinstr; if(atoi(str)100 atoi(str)1) cout<”对不起,请输入1100之
9、间的数字!n”; else p1>score3=atoi(str); flag=1; while(flag=0); flag=0; p1->total=p1->score0+p1score1+p1score2+p1score3;/计算总分 if(n=0)head=p1;/如果是输入第一组学生考试信息就将指针p1赋给指针head else p2-next=p1;/否则将p1赋给p2所指结构体的next指针 p2=p1;/将指针p1赋给指针p2 n+; /将n的值加1 cout<" 姓名:”; cin>ch;/将输入的姓名存放到字符数组ch中 p2next=
10、NULL;/将p2所指结构体的next指针重新赋空值 return (head);/将输入的第一组学生考试信息返回 void Information::output(student head) /定义output()函数将学生的信息从头指针所指内容开始输出 if(head=NULL) cout” 这是一个空表,请先输入考生成绩.n"; else cout<”-n"; cout<” *学生成绩信息表*n"; cout<<"-n”; cout<”学号 姓 名 性别 院系 语文 英语 数学 C+ 平均成绩 总分n”; cout”-
11、n”; p1=head;/将头指针赋给p do coutsetw(8)p1->id setw(9)p1name <<setw(8)<<p1sex setw(13)p1>score0 setw(16)p1score1 setw(10)p1>score2 <setw(9)p1score3 <setw(6)<p1-total/4。0 <<setw(11)<p1total<endl; cout<”-n”; p1=p1>next;/将下一组学生信息的next指针赋给p while(p1!=NULL);/若指针
12、p非空则继续,目的是把所有的学生信息都传给指针p然后输出。 /统计学生人数的函数 int Information::count(struct student head)/定义函数count()统计考生总数 if(head=NULL) /若指针head为空返回值为0 return(0); else return(1+count(head->next));/函数的递归调用 /插入学生的成绩信息的函数 student *Information:insert( student *head) /插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加考生信息.
13、char str10; int flag=0; cout<”t-请输入新增学生成绩信息>-n”<endl; p1=(student *)malloc(LEN); /使p1指向插入的新结点 cout<<" 姓名:"; cinp1-name; /将输入的姓名存放到结构体名为p1的数组name中 cout<” 性别:”; cinp1sex; cout" 学号(9位):"; do cin>>str; if(atol(str)99999999 atol(str)<1) cout"对不起,请请正确输入!
14、!!n"; else p1>id=atol(str); flag=1; while(flag=0); flag=0; cout<" 语文成绩:”; do cinstr; if(atoi(str)>100 atoi(str)<1) cout<”对不起,请输入1-100之间的数字!!n"; else p1score0=atoi(str); flag=1; while(flag=0); flag=0; cout” 外语成绩:"; do cin>str; if(atoi(str)>100 | atoi(str)1) co
15、ut”对不起,请输入1-100之间的数字!n"; else p1-score1=atoi(str); flag=1; while(flag=0); flag=0; cout” 数学成绩:”; do cin>>str; if(atoi(str)100 | atoi(str)1) cout<”对不起,请输入1100之间的数字!!n”; else p1->score2=atoi(str); flag=1; while(flag=0); flag=0; cout" C+成绩:"; do cin>str; if(atoi(str)100 | a
16、toi(str)1) cout<<”对不起,请输入1100之间的数字!!n”; else p1score3=atoi(str); flag=1; while(flag=0); flag=0; p1>total=p1->score0+p1-score1+p1-score2+p1score3;/计算总分 p2=head;/将头指针赋给p2 if(head=NULL) /若没调用次函数以前的头指针head为空 head=p1;p1next=NULL;/则将p1赋给头指针head并将p1所指结构体成员指针next赋空值 else while(p1->idp2-id)(p2
17、->next!=NULL) p3=p2;/p3指向原p2指向的结点 p2=p2>next; /p2后移一个结点 if(p1-id=p2>id) if(head=p2) p1->next=head; head=p1; /插入到第一个结点之前 else p3next=p1; p1next=p2; /插入到p3所指结点之后 else p2-next=p1; p1>next=NULL; /插入到尾结点之后 n+;/将学生人数加1 cout<”t你输入的学生信息已经成功插入”endl; return (head); /删除学生信息函数 student Informat
18、ion:cancel(student head,long int num)/定义一个指向struct student的结构体指针函数delete()用来删除考生信息。 if(head=NULL)/若调用次函数以前的头指针head为空 return(head); else p1=head;/否则将头指针赋给p1 while(num!=p1-id&p1>next!=NULL)/寻找要删除的结点当p1所指的学号不是输入的学号并且p1所指的next指针不为空 p2=p1; p1=p1>next; /p2指向原p1指向的结点p1后移一个结点 if(num=p1->id)/如果输
19、入的学生准考证号是p1所指的学号结点找到后删除 if(p1=head) head=p1->next;/如果head指针和p1指针相等则将下一个结点赋给指针head else p2-next=p1next;/否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去 cout<” 删除学号为”num<<”的学生n”; n-;/将学生人数减1 return(head);/将头指针返回 /查找学生信息函数 student Information:find(student *head,long int num) /定义一个指向struct student的结构体指针函数find
20、()用来查找学生信息。 if(head=NULL)/若调用次函数以前的头指针head为空 cout<<" 这是一个空表,请先输入考生成绩。n”; return(head); else p1=head;/否则将头指针赋给p1 while(num!=p1>id&p1->next!=NULL) /寻找结点当p1所指的学号不是输入的学生学号并且p1所指的next指针不为空 p1=p1next; /p1后移一个结点 if(num=p1>id)/如果要查找的学号是p1所指的学号 cout<"-n”; cout<”学号 姓名 性别 院系
21、语文 英语 数学 C+ 平均分 总分 n”; cout<”-n" cout<setw(8)<p1>id <setw(9)<p1name setw(8)p1sex setw(13)<<p1>score0 setw(16)<<p1score1 setw(10)<p1score2 setw(9)<p1score3 <setw(6)<p1->total/4.0 setw(11)p1totalendl; cout<”-n”; else cout<" 没找到学号为”num”的学生
22、。n" /结点没找到 return(head); void Information:inorder(student head) /定义inorder()函数将考生的总分从大到小排列并输出 int i,k,m=0,j; student *p20;/定义一个指向struct student的结构体指针数组p if(head!=NULL)/如果头指针是空则继续 m=count(head); cout”-n”; cout"学生成绩统计表n”; cout<”-n”; cout<”学号 姓 名 性别 院系 语文 英语 数学 C+ 平均分 总分 名次n"; cout
23、<"-n”; p1=head; for(k=0;k<m;k+) pk=p1; p1=p1next; for(k=0;k<m1;k+) /选择排序法 for(j=k+1;jm;j+) if(pktotalpj-total) p2=pk; pk=pj; pj=p2; for(i=0;im;i+) cout<<setw(8)p1-id <setw(9)p1-name <setw(8)p1sex setw(13)p1score0 <setw(16)p1score1 setw(10)p1score2 <setw(9)p1>score3
24、 <setw(6)p1-total/4。0 <<setw(11)<p1-total<endl; cout"-n"; void Information::average(student *head) /求各科平均成绩的函数 int k,m; float arg1=0,arg2=0,arg3=0,arg4=0; if(head=NULL)/如果头指针是空则继续 cout” 这是一个空表,请先输入学生成绩.n”; else m=count(head); p1=head; for(k=0;km;k+) arg1+=p1score0; arg2+=p1s
25、core1; arg3+=p1>score2; arg4+=p1->score3; p1=p1next; arg1/=m;arg2/=m;arg3/=m;arg4/=m; cout<”全班单科成绩平均分n”; cout<"-n”; cout” 语文平均分:"setw(7)arg1 " 英语平均分:”setw(7)<arg2 ” 数学平均分:”setw(7)<arg3 ” C+平均分:"setw(7)<<arg4<endl; cout”-n”; void Information:save(student
26、 head) /保存函数。 ofstream out(”data。txt”,ios:out); outcount(head)<endl; while(head!=NULL) outhead->name”t" head-id<”t”t” headsex”t" <head-score0"t” <<headscore1”t" <headscore2"t” headscore3<"t” headtotalendl; head=head-next; student Information:Read
27、() /读取函数的实现 int i=0; p1=p2=( student )malloc(LEN); head=NULL; ifstream in(”data.txt",ios::out); in>i; if(i=0)cout<” data。txt 文件中的数据为空,请先输入数据.”endl; return 0; else cout” ”endl; for(;i>0;i) p1=(student )malloc(LEN); cin>>st。namest。id>st。sex >st。score0st.score1>st.score2st。
28、score3 st.total; strcpy(p1-name,st。name); p1->id=st。id; strcpy(p1sex,st。sex); p1-score0=st。score0; p1->score1=st。score1; p1-score2=st.score2; p1>score3=st.score3; p1-total=st。total; if(n=0)head=p1;/如果是输入第一组学生考试信息就将指针p1赋给指针head else p2-next=p1;/否则将p1赋给p2所指结构体的next指针 p2=p1;/将指针p1赋给指针p2 n+; /将
29、n的值加1 cout<” "p1name<<"t" /显示读入数据 <p1-id<”t"<”t" <p1sex”t” <p1-score0”t” <p1score1"t” <p1score2”t" <p1->score3<<”t” <p1->total<endl; cout<” ”<endl; / cout<<” 数据已经成功读取完毕.”<endl; p2-next=NULL; return (
30、head); int main() /主函数. system(”color 4f”);/改变登陆界面颜色 Information person; student *head=NULL; char str5; int flag=0; int choice; long int i; char admin20; char pass30; cout<”请输入账号n”; cinadmin; cout<”请输入密码n" cinpass; if(strcmp(admin,"1111”)=0strcmp(pass,”222”)=0) do cout” *"<endl; cout" 学生信息管理系统主菜单界面 *”endl ; cout<” ”endl; cout<”endl; cout<".输入学生信息 "<<endl; cout”。显示学生信息 ”<endl; cout<”。排序统计成绩 "endl; cout<”。查找学生信息 "<endl; cout"。增加学生信息 "end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省连云港市新海初级中学2024-2025学年部编版九年级历史下学期第一次中考模拟考试题(含答案)
- 内蒙古艺术学院《建筑材料》2023-2024学年第二学期期末试卷
- 南华大学《生理学A》2023-2024学年第二学期期末试卷
- 拉萨师范高等专科学校《水土保持与防护林学》2023-2024学年第二学期期末试卷
- 云南省红河州2025届高三第二学期英语试题模拟考试卷(一)含解析
- 河北软件职业技术学院《数据可视化理论与实践》2023-2024学年第一学期期末试卷
- 湖北省武汉市黄陂区部分学校2025年初三下学期期中质量抽测生物试题试卷含解析
- 江苏省宿迁市新阳中学2025届高考语文试题考前最后一卷预测卷(五)含解析
- 浙江省宁波市余姚市余姚中学2024-2025学年高考模拟历史试题(二)含解析
- 山西药科职业学院《相对论与量子力学》2023-2024学年第一学期期末试卷
- 2025四川成都陆港枢纽投资发展集团限公司招聘人事专员1人自考难、易点模拟试卷(共500题附带答案详解)
- 湖北省部分普通高中联盟2023-2024学年高一下学期数学期中考试试卷(含答案)
- 养老院新员工安全培训
- 2025年四川雅安市名山区茗城有限公司招聘笔试参考题库含答案解析
- 2022年湖南省岳阳市华容县小升初语文试卷
- 【北京】《总也倒不了的老屋》名师课件(第二课时)
- 《肺的结构和功能》课件
- 事业单位考试综合基础知识真题及解析
- 贷款免息申请书
- 光伏安装劳务分包合同
- 长期护理保障失能等级评估规范
评论
0/150
提交评论