版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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;
2、 int n=0; /定义一个全局变量统计学生人数 struct student/定义一个学生信息的结构体 char name20; /用来存放姓名的 char sex20; /用来存放性别的 char yuanxi20;/用来存放院系的 long int id; /用来存放学号的 int score4; /用来存放分数的 int total; /用来存放总分数的 struct student *next; ; vector <student> stu; class Information public: Information() ; /构造函数. Information() ;
3、 /析构函数. student *creat();/建立链表函数。 void output(student *head); int count(student *head);/定义函数count()统计考生总数 student *insert(student*head);/指针函数*insert()用来添加考生信息. student *cancel(student *head,long int num);/指针函数*cancel()用来删除考生信息. student *find(student *head,long int num); /指针函数*find()用来查找考生信息. void in
4、order(student *head);/定义inorder()函数将考生的总分从大到小排列并输出 void average( student *head);/求学生成绩的平均分的函数 void save(student *head);/保存函数 student *Read();/读取函数 private: student *p1,*p2,*p3,*head,st; ; Information:Information() /构造函数 cout<<" *n" cout<<" -<<欢迎您使用学生信息管理系统>>-n&
5、quot; cout<<" *nn" Information:Information() /构造函数 cout<<" *n" cout<<" -<<谢谢您使用学生信息管理系统>>-n" cout<<" *n" student *Information:creat(void) /定义一个指向struct student的结构体指针函数*creat()用来增加学生信息. char ch20;n=0; /用来存放姓名的 p1=p2=(student
6、*)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 cout<<" -<<请建立学生考试信息表,在姓名处输入 ! 结束输入。>>-"<<endl; cout<<"姓名:" cin>>ch; head=NULL; /给指针head赋初值 while (strcmp(ch,"!")!=0) /调用字符比较函数strcmp()用来判断是否继续输入 char str10; int flag=0; p1=(student *)malloc(LEN
7、);/调用malloc()函数用来开辟一个新的存储单元 strcpy(p1->name,ch); /将循环结构前面输入的姓名复制到结构体名为p1的数组name中 cout<<" 性别:" cin>>p1->sex; cout<<"院系:" ; cin>>str; cout<<" 学号(9位):" do cin>>str; if(atol(str)> | atol(str)<1) cout<<"对不起,请正确输入!n&q
8、uot; else p1->id=atol(str); flag=1; while(flag=0); flag=0; cout<<" 语文成绩:" do cin>>str; if(atoi(str)>100 | atoi(str)<1) cout<<"对不起,请输入1-100之间的数字!n" else p1->score0=atoi(str); flag=1; while(flag=0); flag=0; cout<<" 外语成绩:" do cin>>
9、str; if(atoi(str)>100 | atoi(str)<1) cout<<"对不起,请输入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<<"对不起,请输入1-100之间的数字!n" else p1->score2=a
10、toi(str); flag=1; while(flag=0); flag=0; cout<<" C+成绩:" do cin>>str; if(atoi(str)>100 | atoi(str)<1) cout<<"对不起,请输入1-100之间的数字!n" else p1->score3=atoi(str); flag=1; while(flag=0); flag=0; p1->total=p1->score0+p1->score1+p1->score2+p1->scor
11、e3;/计算总分 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中 p2->next=NULL;/将p2所指结构体的next指针重新赋空值 return (head);/将输入的第一组学生考试信息返回 void Information:output(student *head) /定
12、义output()函数将学生的信息从头指针所指内容开始输出 if(head=NULL) cout<<" 这是一个空表,请先输入考生成绩.n" else cout<<"-n" cout<<" *学生成绩信息表*n" cout<<"-n" cout<<"学号 姓 名 性别 院系 语文 英语 数学 C+ 平均成绩 总分n" cout<<"-n" p1=head;/将头指针赋给p do cout<<s
13、etw(8)<<p1->id <<setw(9)<<p1->name <<setw(8)<<p1->sex <<setw(13)<<p1->score0 <<setw(16)<<p1->score1 <<setw(10)<<p1->score2 <<setw(9)<<p1->score3 <<setw(6)<<p1->total/4.0 <<setw(11)
14、<<p1->total<<endl; cout<<"-n" p1=p1->next;/将下一组学生信息的next指针赋给p while(p1!=NULL);/若指针p非空则继续,目的是把所有的学生信息都传给指针p然后输出. /统计学生人数的函数 int Information:count(struct student *head)/定义函数count()统计考生总数 if(head=NULL) /若指针head为空返回值为0 return(0); else return(1+count(head->next);/函数的递
15、归调用 /插入学生的成绩信息的函数 student *Information:insert( student *head) /插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加考生信息. char str10; int flag=0; cout<<"t-<<请输入新增学生成绩信息>>-n"<<endl; p1=(student *)malloc(LEN); /使p1指向插入的新结点 cout<<" 姓名:" cin>>p1->name;
16、 /将输入的姓名存放到结构体名为p1的数组name中 cout<<" 性别:" cin>>p1->sex; cout<<" 学号(9位):" do cin>>str; if(atol(str)> | atol(str)<1) cout<<"对不起,请请正确输入!n" else p1->id=atol(str); flag=1; while(flag=0); flag=0; cout<<" 语文成绩:" do cin>
17、;>str; if(atoi(str)>100 | atoi(str)<1) cout<<"对不起,请输入1-100之间的数字!n" else p1->score0=atoi(str); flag=1; while(flag=0); flag=0; cout<<" 外语成绩:" do cin>>str; if(atoi(str)>100 | atoi(str)<1) cout<<"对不起,请输入1-100之间的数字!n" else p1->sco
18、re1=atoi(str); flag=1; while(flag=0); flag=0; cout<<" 数学成绩:" do cin>>str; if(atoi(str)>100 | atoi(str)<1) cout<<"对不起,请输入1-100之间的数字!n" else p1->score2=atoi(str); flag=1; while(flag=0); flag=0; cout<<" C+成绩:" do cin>>str; if(atoi(str
19、)>100 | atoi(str)<1) cout<<"对不起,请输入1-100之间的数字!n" else p1->score3=atoi(str); flag=1; while(flag=0); flag=0; p1->total=p1->score0+p1->score1+p1->score2+p1->score3;/计算总分 p2=head;/将头指针赋给p2 if(head=NULL) /若没调用次函数以前的头指针head为空 head=p1;p1->next=NULL;/则将p1赋给头指针head并
20、将p1所指结构体成员指针next赋空值 else while(p1->id>p2->id)&&(p2->next!=NULL) p3=p2;/p3指向原p2指向的结点 p2=p2->next; /p2后移一个结点 if(p1->id<=p2->id) if(head=p2) p1->next=head; head=p1; /插入到第一个结点之前 else p3->next=p1; p1->next=p2; /插入到p3所指结点之后 else p2->next=p1; p1->next=NULL; /插
21、入到尾结点之后 n+;/将学生人数加1 cout<<"t你输入的学生信息已经成功插入"<<endl; return (head); /删除学生信息函数 student *Information:cancel(student *head,long int num)/定义一个指向struct student的结构体指针函数*delete()用来删除考生信息. if(head=NULL)/若调用次函数以前的头指针head为空 return(head); else p1=head;/否则将头指针赋给p1 while(num!=p1->id&&a
22、mp;p1->next!=NULL)/寻找要删除的结点当p1所指的学号不是输入的学号并且p1所指的next指针不为空 p2=p1; p1=p1->next; /p2指向原p1指向的结点p1后移一个结点 if(num=p1->id)/如果输入的学生准考证号是p1所指的学号结点找到后删除 if(p1=head) head=p1->next;/如果head指针和p1指针相等则将下一个结点赋给指针head else p2->next=p1->next;/否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去 cout<<" 删除学号为&qu
23、ot;<<num<<"的学生n" n-;/将学生人数减1 return(head);/将头指针返回 /查找学生信息函数 student *Information:find(student *head,long int num) /定义一个指向struct student的结构体指针函数*find()用来查找学生信息. if(head=NULL)/若调用次函数以前的头指针head为空 cout<<" 这是一个空表,请先输入考生成绩.n" return(head); else p1=head;/否则将头指针赋给p1 whi
24、le(num!=p1->id&&p1->next!=NULL) /寻找结点当p1所指的学号不是输入的学生学号并且p1所指的next指针不为空 p1=p1->next; /p1后移一个结点 if(num=p1->id)/如果要查找的学号是p1所指的学号 cout<<"-n" cout<<"学号 姓名 性别 院系 语文 英语 数学 C+ 平均分 总分 n" cout<<"-n" cout<<setw(8)<<p1->id <&l
25、t;setw(9)<<p1->name <<setw(8)<<p1->sex <<setw(13)<<p1->score0 <<setw(16)<<p1->score1 <<setw(10)<<p1->score2 <<setw(9)<<p1->score3 <<setw(6)<<p1->total/4.0 <<setw(11)<<p1->total<<en
26、dl; cout<<"-n" else cout<<" 没找到学号为"<<num<<"的学生.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&
27、lt;<"-n" cout<<"学生成绩统计表n" cout<<"-n" cout<<"学号 姓 名 性别 院系 语文 英语 数学 C+ 平均分 总分 名次n" cout<<"-n" p1=head; for(k=0;k<m;k+) pk=p1; p1=p1->next; for(k=0;k<m-1;k+) /选择排序法 for(j=k+1;j<m;j+) if(pk->total<pj->total
28、) p2=pk; pk=pj; pj=p2; for(i=0;i<m;i+) cout<<setw(8)<<p1->id <<setw(9)<<p1->name <<setw(8)<<p1->sex <<setw(13)<<p1->score0 <<setw(16)<<p1->score1 <<setw(10)<<p1->score2 <<setw(9)<<p1->score3 &
29、lt;<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);
30、p1=head; for(k=0;k<m;k+) arg1+=p1->score0; arg2+=p1->score1; arg3+=p1->score2; arg4+=p1->score3; p1=p1->next; arg1/=m;arg2/=m;arg3/=m;arg4/=m; cout<<"全班单科成绩平均分n" cout<<"-n" cout<<" 语文平均分:"<<setw(7)<<arg1 <<" 英语平
31、均分:"<<setw(7)<<arg2 <<" 数学平均分:"<<setw(7)<<arg3 <<" C+平均分:"<<setw(7)<<arg4<<endl; cout<<"-n" void Information:save(student *head) /保存函数. ofstream out("data.txt",ios:out); out<<count(head)<
32、;<endl; while(head!=NULL) out<<head->name<<"t" <<head->id<<"t"<<"t" <<head->sex<<"t" <<head->score0<<"t" <<head->score1<<"t" <<head->score2<<
33、"t" <<head->score3<<"t" <<head->total<<endl; head=head->next; student *Information:Read() /读取函数的实现 int i=0; p1=p2=( student *)malloc(LEN); head=NULL; ifstream in("data.txt",ios:out); in>>i; if(i=0)cout<<" data.txt 文件中的数据
34、为空,请先输入数据。"<<endl; return 0; else cout<<" "<<endl; for(;i>0;i-) p1=(student *)malloc(LEN); cin>>>>st.id>>st.sex >>st.score0>>st.score1>>st.score2>>st.score3 >>st.total; strcpy(p1->name,); p1->id=s
35、t.id; strcpy(p1->sex,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+; /将n的值加1 cout<<" "
36、<<p1->name<<"t" /显示读入数据 <<p1->id<<"t"<<"t" <<p1->sex<<"t" <<p1->score0<<"t" <<p1->score1<<"t" <<p1->score2<<"t" <<p1->score3&
37、lt;<"t" <<p1->total<<endl; cout<<" "<<endl; / cout<<" 数据已经成功读取完毕。"<<endl; p2->next=NULL; return (head); int main() /主函数. system("color 4f");/改变登陆界面颜色 Information person; student *head=NULL; char str5; int flag=0; in
38、t choice; long int i; char admin20; char pass30; cout<<"请输入账号n" cin>>admin; cout<<"请输入密码n" cin>>pass; if(strcmp(admin,"1111")=0&&strcmp(pass,"222")=0) do cout<<" *"<<endl; cout<<" 学生信息管理系统主菜单界面 *"<<endl ; cout<<" "<<endl; cout<<""<<endl; cout<<" .输入学生信息 "<<endl; cout<<" .显示学生信息 "<<endl; cout<<" .排序统计成绩 "<<endl; cout<<" .查找学生信息 "<<endl; cout<<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省深圳市2024学年高中地理《2.1荒漠化的防治》教案 新人教版必修3
- 人教版生物八年级下册 7.2.2基因在亲子代间的传递教案
- 回收木方供应合同模板
- 商城平台开发合同模板
- 出租钢管书架合同模板
- 个人高端家具买卖合同模板
- 区域销售许可合同模板
- 农业园区建设施工合同模板
- 三方租赁合同合同模板
- 合同模板增加表格
- 餐饮业商铺租赁合同模板2024年
- 国开2024年秋《机电控制工程基础》形考任务1答案
- 2024年重庆市消防操作员《中级技能-监控方向》科目真题冲刺卷3月份B卷
- 2024年典型事故案例警示教育手册15例
- 中药学电子版教材
- 孤独症儿童发展评估表——使用手册(最终版)
- 26个英文字母书写标准描红练习纸(总2页)
- 夜间施工谅解协议书
- 徐赛儿教学实录
- 客室车门系统康尼车门结构原理
- 第四章 土地资源调查.ppt
评论
0/150
提交评论