https://www.myziyuan.com/
- hedianshui
- #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 NULL 0 int const Q=20; #define LEN sizeof(struct student) using namespace std; int n=0; //定义一个全局变量统计学生人数 //——--------->定义一个学生考试信息的结构体 struct student { char name[Q]; //用来存放姓名的 char sex[Q]; //用来存放性别的 long int id; //用来存放准考证号的 int score[4]; //用来存放分数的 int total; //用来存放总分数的 struct student *next; }; //student向量容器 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[Q];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<<" 准考证号(8位):"; 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];//计算总分 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);//将输入的第一组学生考试信息返回 } //--------------->定义output()函数将考生的信息从头指针所指内容开始输出 void Information::output(student *head) { 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) return(0);//若指针head为空返回值为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<<" 准考证号(8位):"; 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; }//p2指向原p1指向的结点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); } } //------------定义inorder()函数将考生的总分从大到小排列并输出 void Information::inorder(student *head) { int i,k,m=0,j; student *p[Q];//定义一个指向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(void) { Information person; student *head=NULL; char str[10]; int flag=0; int choice; long int i; head=person.Read(); 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<<" 请输入要查找的准考证号(8位):"; do{ cin>>str; if(atol(str)>99999999 || 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<<" 请输入要删除的准考证号(8位):"; do{ cin>>str; if(atol(str)>99999999 || 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); return 0; }
- 2022-01-19 07:59:30
- 尖叫的奶牛
- 第1步:输入QQ校友录制。第2步:输入您的QQ号码,密码和附加代码,登录。第3步:在下面找到您的学校,如果没有,请创建一所学校。第4步:在学校找到你的课程,如果你没有找到它,在底部找到“如果正确地确认搜索信息,你的班级没有出现在上面的列表中,请在这里创建一个类。”第5步:填写“类名”和“注册年”,然后单击“注册”。好的,建立QQ校友记录。1. QQ校友记录和QQ集团有什么区别?QQ集团是指QQ用户中具有常见功能的小组(参见QQ组使用帮助),QQ校友记录实际上是一种QQ组,并且每个校友录制类的创建都将自动生成一个免费的QQ组,类用户可以在QQ组中进行通信和享受。(点击放大图片)QQ校友记录和QQ组之间的主要区别在于校友记录增加了其他条件如学校和学校类型的位置,也可以通过输入同学的名称来找到同学,并且QQ组在网站上没有这些功能。2.如何加入,退出和删除类?加入课程必须先找到类,然后选择加入类模式,加入成员模式或加入来宾模式;请先访问课程第一页,在课堂上的最新消息区域的右下角,有一个“退出此类”按钮,单击,可以删除类只能执行类创建者,创建者必须首先登录课程主页,在类管理中输入类成员管理,踢出课程,然后返回课堂,在最新的留言中单击区右下角的“退出此类”完成删除课程。在网站上删除类后,QQ面板上相应的QQ组(内容不受限制)的组消息是dEleted。3.如何将QQ组转换为QQ校友?此前,许多用户以前创建了一组同学。如果要将小组转换为校友,您必须先找到自己的学校。您可以在学校课程列表中跳转到“注册新类”。注册框中,选择组要将组转换为校友记录,然后输入组的数量和准入的年份,将自动将组转换为校友录制类。只有组创建者可以将组转换为校友录制类。每个用户可以建造一些课程吗?每个班级可以多少人?目前,普通用户只能创建1类,QQ成员可以创建3个类(最多3组在QQ成员面板上属于您创建的此成员)。在课后,班级成员可以设定最多80人。在80岁的人口限制之后,用户只能加入该类,而且客户的数量不受限制,但只有类成员可以出现在类组o中n小组并享受该功能。5.如何通过QQ软件添加其他学生到课堂?如果是一类创建者,可以从面板上的QQ组添加QQ朋友。在类中,步骤如下:1)右键单击类名,选择“修改组信息”;(单击放大图片)2)在弹出“查看组详细信息”(单击放大图片)中选择“会员列表”(单击放大图片)3)点击“设置组成员”在成员列表中,您可以在您的中添加组的成员朋友。(点击放大图片)类中的所有用户都可以在类中输入同学的QQ号码或电子邮件地址,以邀请学生加入该类。6.我如何找到学校?在学校的主页中,您可以选择学校所在的学校,并使用学校关键字查找。您也可以直接到您的省份。7.如何创建一所学校?您可以在创建学校之前搜索您的学校。如果你找不到你的学校,你可以创造学校。首先选择学校类型,学校区域,然后确定学校名称申请学校,系统管理员将在24小时内审查并批准您的申请。8.如何创建一个类?在创建类之前,您必须先找到自己的学校(找不到自己的学校。在创建类时输入类名并提交注册年份。如果您在创建之前没有填写您自己的个人信息一堂课,你将被填写,让你和你的同学很容易。9.我如何找到一个课程?找到一个课程,找到你的学校,在课堂上找到,你还可以搜索类名键入学校课程列表页面。10.如何删除我的留言或照片?在自己的消息之后,您有“删除”和“修改”按钮。在照片书中,您也有照片后面的“删除”按钮书,单击以单击。11.如何修改QQ校友中录制的密码?您在QQ Alu中录制的密码MNI是您的QQ密码。您可以通过QQ软件中的“菜单”在“个人设置”中修改“网络安全”。12.如何成为一名班级管理员?类创建者自动成为Accound Administrators,创建者还可以通过类管理中通过类成员资格管理指定其他成员。创建者可以作为类管理员设置最多3个成员。13.人们创建的差异是什么区别?创始人是班级的创造者。它在课堂上具有至高无上的权限;类管理员由Creator指定(Creator也是管理员),只有管理员可以在类管理中使用各种功能;课程成员是一个类正式成员,您可以使用类消息,专辑和地址簿的功能;Guest Guest不是班级的正式成员,但可以在课堂上显示,客人还可以发出消息并上传照片。14.如何在QQ面板上展示我的课程?当用户创建类或加入类时,类ISYOU将自动出现在组中的QQ面板上。如果您没有出现,您可能是一个用户QQ版本,请下载最新版本的QQ。15. QQ校友搜索论坛是什么?QQ校友强大的论坛是交流校友交换的论坛,在交换QQ用户提供经验,以及有哪些问题可以体现在那里,将有一个主持人和其他热贯的用户来回答你的问题。如何将固定组转换为校友文件1.成员可以创建4组,包括同学组,它与校友之间有什么区别?众所周知,会员可以创建4组,包括同学(同学),同学和校友录制类的表现相同,以及他们最重要的区别是没有学校,学校,学校等。 这课堂特征和校友集合可以根据学校名称找到,学校所在,让用户可以轻松找到自己的学校和课程,与学生密切联系。2.将群体转变为校友的课程有什么好处?在用户将该组转为学校记录之后,本集团可以使课堂特征群体,如学校名称,学校位置和入学年度的年份,使其同学可以找到自己。与此同时,校友师范器专为学生用户设计。有许多功能有很多组,例如寻找同学,邀请学生通过电子邮件和QQ号码。此外,校友记录将继续推出更多令人兴奋的专业从事学生的设计。3.固定组转换为校友录制类:1)。从校友视频主页搜索;2)。当注册类中,从“使用组的用户,即可进行将组到校友“”进入后,输入您的团队ID和入场年份,您可以转动它。
- 2022-01-19 07:58:18
- 织梦源码
- 用户权限管理系统,你是什么系统,xp 、2000、2003 说清楚学生身份建立用户 把权限加到power user里就可以了 其他的删了
- 2022-01-19 07:58:18