学生信息管理系统C++语言程序代码_第1页
学生信息管理系统C++语言程序代码_第2页
学生信息管理系统C++语言程序代码_第3页
学生信息管理系统C++语言程序代码_第4页
学生信息管理系统C++语言程序代码_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include #include #include #include #include #include #include #include #include #define LEN sizeof(struct student)using namespace std;int n=0; /定义一个全局变量统计学生人数struct student/定义一个学生信息的结构体char name20; /用来存放姓名的char sex20; /用来存放性别的char yuanxi20;/用来存放院系的long int id; /用来存放学号的int score4; /用来存放分数的int total;

2、 /用来存放总分数的struct student *next;vector stu;class Informationpublic:Information。; / 构造函数.Information。; / 析构函数.student *creat();建立链表函数。void output(student *head);int count(student *head);/ 定义函数 count()统计考生总数student *insert(student*head);/ 指针函数 *insert()用来添加考生信息.student *cancel(student *head,long int nu

3、m);/ 指针函数 *cancel()用来删除考生信息 student *find(student *head,long int num); / 指针函数 *find()用来查找考生信息. void inorder(student *head);/定义inorder()函数将考生的总分从大到小排列并输出 void average( student *head);/求学生成绩的平均分的函数void save(student *head);/ 保存函数student *Read();/ 读取函数private:student *p1,*p2,*p3,*head,st;Information:Inf

4、ormation() / 构造函数coutvvI *n;coutvvn;coutvvI *nn;Information:Information。/ 构造函数coutvvI *n;coutvvvv 谢谢您使用学生信息管理系统n;coutvvI *n;student *lnformation:creat(void)/定义一个指向 struct student的结构体指针函数 *creat()用来增加学生信息 char ch20;n=0; /用来存放姓名的p1=p2=(student *)malloc(LEN);调用malloc()函数用来开辟一个新的存储单元coutvvvvendl;coutvv姓

5、名:;cinch;head=NULL; /给指针head赋初值while (strcmp(ch,!)!=0) /调用字符比较函数 strcmp()用来判断是否继续输入char str10;int flag=0;p仁(student *)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元strcpy(p1-name,ch); /将循环结构前面输入的姓名复制到结构体名为pl的数组name中coutvv性别:;cinp1-sex;coutvv院系:cinstr;coutvv学号(9 位):;docinstr;if(atol(str)999999999 | atol(str)v

6、l) coutvv对不起,请正确输入!n;elsep1-id=atol(str); flag=1;while(flag=0);flag=0;coutvv语文成绩:;docinstr;if(atoi(str)100 | atoi(str)score0=atoi(str); flag=1;while(flag=0);flag=0;coutvv外语成绩:;docinstr;if(atoi(str)100 | atoi(str)score1=atoi(str); flag=1;while(flag=0);flag=0;coutvv数学成绩:;docinstr;if(atoi(str)100 | ato

7、i(str)v1)coutvv对不起,请输入1-100之间的数字!n;else p1-score2=atoi(str); flag=1;while(flag=0);flag=0;coutvv C+ 成绩:;docinstr;if(atoi(str)100 | atoi(str)v1)coutvv对不起,请输入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; 计算总分if(n=0)head=p1;如果是输入第一组学

8、生考试信息就将指针pl赋给指针headelse p2-next=p1;否则将p1赋给p2所指结构体的next指针p2=p1;将指针p1赋给指针p2n+; /将n的值加1cout姓名:;cinch;将输入的姓名存放到字符数组ch中p2-next=NULL;将p2所指结构体的next指针重新赋空值return (head);/将输入的第一组学生考试信息返回void lnformation:output(student *head) /定义output()函数将学生的信息从头指针所指内容开始输出if(head=NULL) coutidvvsetw(9)vvp1-namevvsetw(8)vvp1-s

9、exvvsetw(13)vvp1-score0vvsetw(16)vvp1-score1vvsetw(10)vvp1-score2vvsetw(9)vvp1-score3vvsetw(6)vvp1-total/4.0vvsetw(11)vvp1-totalvvendl;coutvvn;p仁p1-next;/将下一组学生信息的next指针赋给pwhile(p1!=NULL);若指针p非空则继续,目的是把所有的学生信息都传给指针p然后输出./统计学生人数的函数int lnformation:count(struct student *head)/ 定义函数 count()统计考生总数if(head

10、=NULL) /若指针head为空返回值为 0return(0);else return(1+count(head-next); 函数的递归调用/插入学生的成绩信息的函数*insert()student *lnformation:insert( student *head) / 插入新结点定义一个指向struct student 的结构体指针函数用来添加考生信息.char str10;int flag=0;coutvvtnvvendl;p1= (student *)malloc(LEN);/ 使 p1 指向插入的新结点cout姓名:;cinp1-name; /将输入的姓名存放到结构体名为p1的

11、数组name中cout性别:;cinp1-sex;cout学号(9 位.):;docinstr;if(atol(str)99999999 | atol(str)id=atol(str); flag=1; while(flag=0);flag=0;cout语文成绩:;docinstr;if(atoi(str)100 | atoi(str)score0=atoi(str); flag=1;while(flag=0);flag=0;coutvv外语成绩:;do cinstr;if(atoi(str)100 | atoi(str)score1=atoi(str); flag=1;while(flag=

12、O);flag=O;cout数学成绩:;docinstr;if(atoi(str)100 | atoi(str)score2=atoi(str); flag=1;while(flag=0);flag=0;cout C+ 成绩:;docinstr;if(atoi(str)100 | atoi(str)score3=atoi(str); flag=1;while(flag=0);flag=0;p1-total=p1-score0+p1-score1+p1-score2+p1-score3; 计算总分p2=head;将头指针赋给p2if(head=NULL) /若没调用次函数以前的头指针 head为

13、空next赋空值head=p1;p1-next=NULL;则将p1赋给头指针 head并将p1所指结构体成员指针elsewhile(p1-idp2-id)&(p2-next!=NULL)p3=p2;/p3指向原p2指向的结点p2=p2_next;/p2后移一个结点if(p1-idid)if(head=p2)p1-next=head;head=p1; /插入到第一个结点之前elsep3-next=p1;p1-next=p2;/插入到p3所指结点之后elsep2_next=p1;p1-next=NULL; /插入到尾结点之后n+;将学生人数加1coutid&p1-next!=NULL)寻找要删除的

14、结点当pl所指的学号不是输入的学号并且pl所指的next指针不为空p2=p1;p1=p1-next; /p2指向原pl指向的结点pl后移一个结点if(num=p1-id)/如果输入的学生准考证号是pl所指的学号结点找到后删除if(p1=head) head=p1-next;/如果head指针和pl指针相等则将下一个结点赋给指针 headelsep2-next=p1-next;/否则将pl所指结点赋给p2所指结点将要删除的学生信息跳过去coutvv删除学号为vvnumvv的学生n;n-;/将学生人数减1return(head);/将头指针返回/查找学生信息函数student *lnformati

15、on:find(student *head,long int num)/定义一个指向 struct student 的结构体指针函数 *find()用来查找学生信息.if(head=NULL)若调用次函数以前的头指针head为空coutvv这是一个空表,请先输入考生成绩.n;return(head);elsep仁head;/否则将头指针赋给 p1while(num!=p1-id&p1-next!=NULL)寻找结点当p1所指的学号不是输入的学生学号并且p1所指的next指针不为空p1=p1-next; /p1 后移一个结点if(num=p1-id)如果要查找的学号是 p1所指的学号coutn;

16、coutvv学号姓名性别院系语文英语数学 C+平均分总分n;coutn;coutidnamesexvvsetw(13)vvp1-score0vvsetw(16)vvp1-score1vvsetw(10)vvp1-score2vvsetw(9)vvp1-score3vvsetw(6)vvp1-total/4.0vvsetw(11)vvp1-totalvvendl;coutvvn;elsecoutvv没找到学号为vvnumvv的学生.n; /结点没找到return(head);void lnformation:inorder(student *head)/定义inorder()函数将考生的总分从大

17、到小排列并输出 int i,k,m=0,j;student *p20;定义一个指向 struct student的结构体指针数组 pif(head!=NULL)如果头指针是空则继续 m=count(head);coutn;cout学生成绩统计表n;coutn;coutvv学号姓名性别院系语文英语数学 C+平均分总分名次n;coutn;p1=head;for(k=0;knext;for(k=0;km-1;k+) / 选择排序法for(j=k+1;jtotaltotal)p2=pk;pk=pj;pj=p2;for(i=0;iidnamevvsetw(8)vvp1-sexvvsetw(13)vvp1

18、-score0vvsetw(16)vvp1-score1vvsetw(10)vvp1-score2vvsetw(9)vvp1-score3vvsetw(6)vvp1-total/4.0vvsetw(11)vvp1-totalvvendl;coutvvn;void lnformation:average(student *head) / 求各科平均成绩的函数int k,m;float arg1=0,arg2=0,arg3=0,arg4=0;if(head=NULL)如果头指针是空则继续coutvv这是一个空表,请先输入学生成绩.n;elsem=count(head);p1=head;for(k=

19、0;kscore0;arg2+=p1-score1;arg3+=p1-score2;arg4+=p1-score3;p1=p1-next;arg1/=m;arg2/=m;arg3/=m;arg4/=m;coutvv全班单科成绩平均分n;coutvvn;coutvv语文平均分:vvsetw(7)vvarg1vv英语平均分:vvsetw(7)vvarg2vv数学平均分:vvsetw(7)vvarg3vv C+ 平均分:vvsetw(7)vvarg4vvendl;coutvvn;void lnformation:save(student *head) / 保存函数.ofstream out(data

20、.txt,ios:out);outvvcount(head)vvendl;while(head!=NULL) outvvhead-namevvtvvhead-idvvtvvtvvhead-sexvvtvvhead-score0vvtvvhead-score1vvtvvhead-score2vvtvvhead-score3vvtvvhead-totalvvendl;head=head-next;student *lnformation:Read() / 读取函数的实现 int i=0;p1= p2=( student *)malloc(LEN);head=NULL;ifstream in(dat

21、a.txt,ios:out);ini;if(i=0)cout data.txt文件中的数据为空,请先输入数据。0;i-) p 1= (student *)malloc(LEN);st.idst.sexst.score0st.score1st.score2st.score3st.total;strcpy(p1-name,);p1-id=st.id;strcpy(p1-sex,st.sex);p1-score0=st.score0;p1-score1=st.score1;p1-score2=st.score2;p1-score3=st.score3;p1-tota

22、l=st.total;if(n=0)head=p1;/如果是输入第一组学生考试信息就将指针p1赋给指针headelse p2-next=p1;否则将p1赋给p2所指结构体的next指针p2=p1;将指针p1赋给指针p2n+; /将n的值加1cout vvp1-nameidvtvvtsexscore0score1vvtvvp1-score2vvtvvp1-score3vvtvvp1-totalvvendl;coutvv/coutvv数据已经成功读取完毕。vvendl;vvendl;vvendl;p2-next=NULL;return (head);int main() / 主函数.system(

23、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)=0&strcmp(pass,222)=0)docoutvvvvendl;* Icoutvv |*vvendlcoutvvvvendl; coutvvvvendl;coutvv I输入学生信息I vvendl;coutvv I.显示学生信息I vvendl;coutvv I.排序统计成绩I vvendl;coutvv I.查找学生信息I vvendl;coutvv I.增加学生信息I vvendl;coutvv I.删除学生信息I vvendl;coutvv I.保存退出系统I vvendl;coutvv Lvvend

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论