收藏 分销(赏)

学生信息管理系统C++语言程序代码.doc

上传人:精**** 文档编号:4053943 上传时间:2024-07-26 格式:DOC 页数:14 大小:46.04KB 下载积分:8 金币
下载 相关 举报
学生信息管理系统C++语言程序代码.doc_第1页
第1页 / 共14页
学生信息管理系统C++语言程序代码.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
#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 name[20]; //用来存放姓名的 char sex[20]; //用来存放性别的 char yuanxi[20];//用来存放院系的 long int id; //用来存放学号的 int score[4]; //用来存放分数的 int total; //用来存放总分数的 struct student *next; }; vector <student> stu; class Information { public: Information() ; //构造函数. ~Information() ; //析构函数。 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 inorder(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”; cout〈〈" ******************************************************************************\n\n”; } Information::~Information() //构造函数 { cout<〈” ******************************************************************************\n”; cout<〈" —----—————---—-—----————<〈谢谢您使用学生信息管理系统〉>-——-—————-————-——-----—-\n”; cout<〈” ******************************************************************************\n”; } student *Information::creat(void) //定义一个指向struct student的结构体指针函数*creat()用来增加学生信息. { char ch[20];n=0; //用来存放姓名的 p1=p2=(student *)malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元 cout〈〈” —————-—--—-—-<〈请建立学生考试信息表,在姓名处输入 ! 结束输入.〉〉—————-—---————"<〈endl; cout〈<”姓名:"; cin>〉ch; head=NULL; //给指针head赋初值 while (strcmp(ch,”!")!=0) //调用字符比较函数strcmp()用来判断是否继续输入 { char str[10]; int flag=0; p1=(student *)malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元 strcpy(p1—>name,ch); //将循环结构前面输入的姓名复制到结构体名为p1的数组name中 cout<<” 性别:"; cin〉〉p1-〉sex; cout<〈"院系:" ; cin〉〉str; cout<〈” 学号(9位):”; do{ cin〉〉str; if(atol(str)〉999999999 || atol(str)〈1) cout〈〈"对不起,请正确输入!\n”; 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->score[0]=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-〉score[1]=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—>score[2]=atoi(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—〉score[3]=atoi(str); flag=1;} }while(flag==0); flag=0; p1—>total=p1—〉score[0]+p1—〉score[1]+p1—>score[2]+p1—〉score[3];//计算总分 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) //定义output()函数将学生的信息从头指针所指内容开始输出 { if(head==NULL) cout〈<” 这是一个空表,请先输入考生成绩。\n”; else{ cout〈<"--—-------———-————-——-——--—---———-——————-—--———————-—-—-————-—---—-——---———---—\n”; cout〈〈" *学生成绩信息表*\n”; cout〈〈"-——-—--—-—-—-—--————--——-—----—-—--—-——-—-—————-———-—-———-—-———————--—-—————-——\n”; cout〈〈”学号 姓 名 性别 院系 语文 英语 数学 C++ 平均成绩 总分\n"; cout〈〈”-—-———--—————-----————-——-—--—--———---———————--—--————-————-——————-————————-———\n”; p1=head;//将头指针赋给p do { cout〈<setw(8)<〈p1-〉id 〈〈setw(9)〈〈p1-〉name <〈setw(8)〈〈p1—>sex <<setw(13)〈〈p1->score[0] <<setw(16)〈〈p1—>score[1] <<setw(10)〈〈p1—〉score[2] <<setw(9)〈<p1-〉score[3] <〈setw(6)〈〈p1—〉total/4。0 〈〈setw(11)〈〈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));//函数的递归调用 } //插入学生的成绩信息的函数 student *Information::insert( student *head) //插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加考生信息。 { char str[10]; int flag=0; cout<〈"\t--—-—--——-—————-<〈请输入新增学生成绩信息〉〉-——-———-—-—--—-—\n"〈〈endl; p1=(student *)malloc(LEN); //使p1指向插入的新结点 cout〈<” 姓名:”; cin〉〉p1—〉name; //将输入的姓名存放到结构体名为p1的数组name中 cout<〈" 性别:”; cin>>p1—>sex; cout〈〈” 学号(9位):”; do{ cin>〉str; if(atol(str)〉99999999 || atol(str)<1) cout<〈”对不起,请请正确输入!!!\n”; 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-〉score[0]=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-〉score[1]=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-〉score[2]=atoi(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-〉score[3]=atoi(str); flag=1;} }while(flag==0); flag=0; p1-〉total=p1—>score[0]+p1-〉score[1]+p1—〉score[2]+p1->score[3];//计算总分 p2=head;//将头指针赋给p2 if(head==NULL) //若没调用次函数以前的头指针head为空 { head=p1;p1—>next=NULL;//则将p1赋给头指针head并将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; } //插入到尾结点之后 } 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&&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<〈” 删除学号为”〈<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 while(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 <〈setw(9)〈〈p1—>name 〈<setw(8)〈<p1—>sex 〈<setw(13)〈〈p1—〉score[0] 〈〈setw(16)〈〈p1—〉score[1] 〈〈setw(10)〈<p1—〉score[2] 〈〈setw(9)<<p1—〉score[3] <<setw(6)〈〈p1-〉total/4。0 〈〈setw(11)<<p1->total<<endl; cout〈<”———---———-—--———--—--——-——-—-————————-—-——-—-———-——--——--—————---—-—--—---—--—\n"; } else cout〈〈" 没找到学号为”〈〈num<〈"的学生.\n"; //结点没找到 return(head); } } void Information::inorder(student *head) //定义inorder()函数将考生的总分从大到小排列并输出 { int i,k,m=0,j; student *p[20];//定义一个指向struct student的结构体指针数组p if(head!=NULL)//如果头指针是空则继续 { m=count(head); cout〈〈"——-———————-———-———-—-——————-——-—-—-——--—-—--———-———-—-—---————-————-—-————--——\n”; cout<<”学生成绩统计表\n"; cout〈<”—-———————————--——————————-———————-——-—---—-————-—————--————-—--—-—---—-——-—-—-\n”; cout〈<”学号 姓 名 性别 院系 语文 英语 数学 C++ 平均分 总分 名次\n”; cout<<”——-—-——-———-———-———-——--—-—-—-—-—---——-—-——-—-—————-——---—-——--—--———-——---—-—\n”; p1=head; for(k=0;k<m;k++) { p[k]=p1; p1=p1-〉next; } for(k=0;k〈m-1;k++) //选择排序法 for(j=k+1;j〈m;j++) if(p[k]->total<p[j]-〉total) { p2=p[k]; p[k]=p[j]; p[j]=p2; } for(i=0;i〈m;i++) { cout〈〈setw(8)〈〈p1—〉id <〈setw(9)〈〈p1->name 〈<setw(8)〈〈p1—〉sex <〈setw(13)<<p1—〉score[0] <<setw(16)〈〈p1-〉score[1] 〈〈setw(10)〈〈p1—>score[2] <〈setw(9)〈<p1-〉score[3] 〈〈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;k<m;k++) { arg1+=p1—〉score[0]; arg2+=p1—〉score[1]; arg3+=p1-〉score[2]; arg4+=p1—〉score[3]; p1=p1-〉next; } 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 *head) //保存函数。 { ofstream out("data。txt”,ios::out); out〈<count(head)〈〈endl; while(head!=NULL) { out<〈head-〉name<〈"\t” 〈〈head—>id〈<”\t”〈〈"\t” <<head—>sex<〈”\t” 〈〈head—〉score[0]〈〈”\t” 〈〈head—>score[1]〈〈"\t” 〈〈head->score[2]〈〈”\t" 〈〈head—〉score[3]<〈”\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 文件中的数据为空,请先输入数据。”〈〈endl; return 0;} else { cout<〈” …………………………………………………………………………………………"〈〈endl; for(;i>0;i—-) { p1=(student *)malloc(LEN); cin>>st。name〉>st。id>〉st。sex 〉〉st。score[0]〉〉st.score[1]>>st。score[2]>>st。score[3] 〉>st。total; strcpy(p1—〉name,st.name); p1—>id=st.id; strcpy(p1—〉sex,st。sex); p1—〉score[0]=st。score[0]; p1—〉score[1]=st。score[1]; p1—〉score[2]=st.score[2]; p1—〉score[3]=st.score[3]; 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〈〈" "〈〈p1-〉name<〈"\t" //显示读入数据 〈〈p1—〉id<〈"\t”〈<”\t" <〈p1->sex<〈”\t” 〈〈p1—〉score[0]<<”\t" 〈<p1—〉score[1]〈<”\t" 〈〈p1->score[2]〈〈”\t" 〈〈p1-〉score[3]〈<”\t" <<p1—>total〈<endl; cout〈<” …………………………………………………………………………………………”〈〈endl; // } cout〈〈” 数据已经成功读取完毕.”〈<endl; p2-〉next=NULL; return (head); } } int main() //主函数. { system("color 4f”);//改变登陆界面颜色 Information person; student *head=NULL; char str[5]; int flag=0; int choice; long int i; char admin[20]; char pass[30]; 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<<”┃⑤。增加学生信息 ┃”<<endl; cout〈<"┃⑥.删除学生信息 ┃”〈<endl; cout〈<"┃⑦。保存退出系统 ┃"〈〈endl; cout〈〈”┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"〈〈endl; cout<〈”请输入您的选择(1-—7):( )\b\b"; cin>>str; if(atoi(str)>7 || atoi(str)〈1) cout〈<”对不起,请输入1—7这几个数字!!\n”; else { choice=atoi(str); switch(choice) { case 1: head=person.creat(); break; case 2: person。output(head); break; case 3: person。inorder(head); person.average(head); cout〈〈" 学生人数为:”〈<person。count(head)<〈”人\n"; break; case 4: cout〈<” 请输入要查找的学号(9位):"; do{ cin〉>str; if(atol(str)〉999999999 || atol(str)<1) cout〈〈"对不起,请输入正确输入!!!\n”; else {i=atol(str); flag=1; } }while(flag==0); flag=0; person.find(head,i); break; case 5: head=person.insert(head); person。output(head); break; case 6: cout〈〈" 请输入要删除的学号(9位):”; do{ cin>〉str; if(atol(str)>999999999 || atol(str)〈1) cout〈〈”对不起,请输入正确输入!!!h\n”; else {i=atol(str); flag=1; } }while(flag==0); flag=0; head=person.cancel(head,i); person.output(head); break; case 7: person。save(head); cout<<”文件已保存!可以安全退出!!!"〈<endl; break; default :cout〈<" 对不起,您的输入有误,请重新输入。\n"; break; } } }while(choice!=7); }else cout<〈"密码不对,重新输入”; return 0; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服