#include<iostream> #include<iomanip> #include<string.h> #include<fstream> using namespace std; struct node { int num; char name[20]; char sex; int age; char addr[50]; char course[20]; int score; node *next; };
struct student { private: node *head; public: student(); void In_student(); //录入信息 void Modify_student(); //修改信息 void Del_student(); //删除信息 void Prt_student(); //查询信息 void Paixu_student(); //排序信息 void Ins_student(); //插入信息 };
student::student() //作用是定义一个头结点!! { node *p; p=new node; p->num=-1; p->age=0; p->score=-1; p->next=p; head=p; return; }
void student::In_student() //这里的录入信息实际上是在链表中插入元素 { cout<<" ---------欢迎使用录入套餐------------- "<<endl; node *p,*k; int nu; //学号 char nam[20]; //姓名 char se; //性别 int ag; //年龄 char add[50]; //地址 char cou[20]; //课程 int s; //成绩 ofstream outfile("f1.dat",ios::out); if(!outfile) { cerr<<"打开失败!!"<<endl; exit(1); } k=head; cout<<" 请输入--(以学号为'-1'结束录入,但还需输完整个信息段!!)"<<endl; cout<<"学号 姓名 性别 年龄 地址 课程 成绩 "<<endl; cin>>nu >>nam >>se >>ag >>add >>cou >>s; while(nu!=-1) { outfile<<nu<<nam<<se<<ag<<add<<cou<<s; p=new node; p->num=nu; strcpy(p->name,nam); p->sex=se; p->age=ag; strcpy(p->addr,add); strcpy(p->course,cou); p->score=s; p->next=head; k->next=p; k=p; cout<<" 继续录入下一位学生信息"<<endl; cin>>nu >>nam >>se >>ag >>add >>cou >>s; } outfile.close(); cout<<" ----------谢谢使用录入套餐----------"<<endl; return; }
void student::Modify_student() { cout<<" ----------欢迎使用修改套餐----------- "<<endl; cout<<" 说明:按学号进行修改"<<endl; if(head->next==head) { cout<<"Sorry!! 学生系统中没有信息!!"<<endl; cout<<" -----------谢谢使用修改套餐------------ "<<endl; return; } int n; //学号 int m; node *p; cout<<" 请输入要修改信息的同学的学号:"<<endl; cin>>n; p=head->next; while((p->num)!=n) p=p->next; if(p==head) { cout<<"Sorry!! 学生系统中没这位同学!!"<<endl; cout<<" -----------谢谢使用修改套餐------------ "<<endl; return; }
cout<<" 请修改"<<n<<"号的基本信息"<<endl; cout<<" 客户您好!这里是修改提示:"<<endl; cout<<" 按键1-----修改学号"<<endl; cout<<" 按键2-----修改姓名"<<endl; cout<<" 按键3-----修改性别"<<endl; cout<<" 按键4-----修改年龄"<<endl; cout<<" 按键5-----修改地址"<<endl; cout<<" 按键6-----修改课程"<<endl; cout<<" 按键7-----修改成绩"<<endl; cout<<" 按键8-----退出修改程序"<<endl;
do { cout<<"请选择修改键:"<<endl; cin>>m; switch(m) { case 1: int nu; cout<<" 请输入新的学号:"<<endl; cin>>nu; p->num=nu; cout<<" 您已成功修改!!"<<endl; break; case 2: char nam[20]; cout<<" 请输入新的姓名:"<<endl; cin>>nam; strcpy(p->name,nam); cout<<" 您已成功修改!!"<<endl; break; case 3: char se; cout<<" 请输入新的性别:"<<endl; cin>>se; p->sex=se; cout<<" 您已成功修改!!"<<endl; break; case 4: int ag; cout<<" 请输入新的年龄:"<<endl; cin>>ag; p->age=ag; cout<<" 您已成功修改!!"<<endl; break; case 5: char add[50] ; cout<<" 请输入新的地址:"<<endl; cin>>add; strcpy(p->addr,add); cout<<" 您已成功修改!!"<<endl; break; case 6: char cou[20]; cout<<" 请输入新的课程:"<<endl; cin>>cou; strcpy(p->course,cou); cout<<" 您已成功修改!!"<<endl; break; case 7: int s; cout<<" 请输入新的成绩:"<<endl; cin>>s; p->score=s; cout<<" 您已成功修改!!"<<endl; break; case 8: break; } }while(m!=8); cout<<" -----------谢谢使用修改套餐------------ "<<endl; return; }
void student::Del_student() { cout<<" ----------欢迎使用删除套餐---------- "<<endl; if(head->next==head) { cout<<"Sorry!! 学生系统中没有信息!!"<<endl; cout<<" ----------谢谢使用删除套餐----------- "<<endl; return; } int n; //学号 node *p,*q; cout<<" 请输入要删除信息的同学的学号:"<<endl; cin>>n; q=head; while(((q->next)->num)!=n) q=q->next; if(q->next==head) { cout<<"Sorry!! 学生系统这位同学!!"<<endl; return; } p=q->next; q->next=p->next; delete p; cout<<" 您已成功删除!!"<<endl; cout<<" ----------谢谢使用删除套餐----------- "<<endl; return; }
void student::Prt_student() { cout<<" ----------欢迎使用查询套餐------------ "<<endl;
if(head->next==head) { cout<<"Sorry!! 学生系统中没有信息!!"<<endl; cout<<" ----------谢谢使用查询套餐----------"<<endl; return; } int n; int count0=0; cout<<" 您好,您想输出所有学生的信息还是个别人或部分信息?"<<endl; cout<<" 这里是提示!!"<<endl; cout<<" 按键1-----输出所有信息"<<endl; //查询所有信息 cout<<" 按键2-----按学号查询信息"<<endl; //按学号查询信息 cout<<" 按键3-----按姓名查询信息"<<endl; //按姓名查询信息 cout<<" 按键4-----按年龄查询信息"<<endl; //按年龄查询信息 cout<<" 按键5-----按成绩查询信息"<<endl; //按成绩查询信息 //按分数查询信息 cout<<" 按键6-----退出查询程序 "<<endl; do { cout<<"请选择查询键:"<<endl; cin>>n; switch(n) { case 1: node *p; p=head->next; cout<<"学号 姓名 性别 年龄 地址 课程 成绩:"<<endl; while(p!=head) { cout<<" "<<p->num<<" " <<p->name<<" " <<p->sex<< " " <<p->age<< " " <<p->addr<< " " <<p->course<< " " <<p->score<< " " <<endl; p=p->next; count0++; } cout<<" 学生成绩信息管理系统中共有"<<count0<<"个学生信息"<<endl; break; case 2: int m; node *q; q=head->next; cout<<" 请输入要查找的同学的学号:"<<endl; cin>>m; while(q!=head&&(q->num)!=m) q=q->next; if((q->num)==m) { cout<<"学号:"<<q->num<<"--" <<"姓名:"<<q->name<<"--" <<"性别:"<<q->sex<<"--" <<"年龄:"<<q->age<<"--" <<"地址:"<<q->addr<<"--" <<"课程:"<<q->course<<"--" <<"成绩:"<<q->score<<"--" <<endl; } else { cout<<" 系统中没有学号是"<<m<<"的同学!!"<<endl; } break; case 3: char na[20]; node *w; w=head->next; cout<<" 请输入要查找的同学的姓名:"<<endl; cin>>na; while(w!=head&&strcmp(w->name,na)!=0) w=w->next; if(strcmp(w->name,na)==0) { cout<<"学号:"<<w->num<<"--" <<"姓名:"<<w->name<<"--" <<"性别:"<<w->sex<<"--" <<"年龄:"<<w->age<<"--" <<"地址:"<<w->addr<<"--" <<"课程:"<<w->course<<"--" <<"成绩:"<<w->score<<"--" <<endl; } else { cout<<" 系统中没有姓名是"<<na<<"的同学!!"<<endl; } break; case 4: node *z; int a; //年龄 z=head->next; cout<<" 请输入要查找的同学的年龄:"<<endl; cout<<"说明:如果没有任何查询结果,表明没有符合条件的结果!!!"<<endl; cin>>a; while(z!=head) { if(z->age==a) { cout<<"学号:"<<z->num<<"--" <<"姓名:"<<z->name<<"--" <<"性别:"<<z->sex<<"--" <<"年龄:"<<z->age<<"--" <<"地址:"<<z->addr<<"--" <<"课程:"<<z->course<<"--" <<"成绩:"<<z->score<<"--"<<endl; } z=z->next; }
break; case 5: cout<<" 您好,您按成绩查询是以一个分数还是以一个分数段?"<<endl; cout<<" 这里是提示!!"<<endl; cout<<" 键1-----按一个分数查询信息"<<endl; cout<<" 键2-----按一个分数段查询信息"<<endl; cout<<" 键3-----退出成绩查询程序"<<endl; int o; do { cout<<" 请输入键:"<<endl; cin>>o; switch(o) { case 1: node *x; int s; //成绩 x=head->next; cout<<" 请输入要查找的同学的成绩:"<<endl; cout<<"说明:如果没有任何查询结果,表明没有符合条件的结果!!!"<<endl; cin>>s; while(x!=head) { if(x->score==s) { cout<<"学号:"<<x->num<<"--" <<"姓名:"<<x->name<<"--" <<"性别:"<<x->sex<<"--" <<"年龄:"<<x->age<<"--" <<"地址:"<<x->addr<<"--" <<"课程:"<<x->course<<"--" <<"成绩:"<<x->score<<"--"<<endl; } x=x->next; } break; case 2: node *y; y=head->next; int h; //分数段的最高值 int l; //分数段的最低值 cout<<" 请分别输入分数段的最高值,最低值--"<<endl; cout<<"说明:如果没有任何查询结果,表明没有符合条件的结果!!!"<<endl; cin>>h>>l; while(y!=head) { if((y->score>=l)&&(y->score<=h)) { cout<<"学号:"<<y->num<<"--" <<"姓名:"<<y->name<<"--" <<"性别:"<<y->sex<<"--" <<"年龄:"<<y->age<<"--" <<"地址:"<<y->addr<<"--" <<"课程:"<<y->course<<"--" <<"成绩:"<<y->score<<"--"<<endl; } y=y->next; } break; case 3: cout<<" 您已退出成绩程序!!"<<endl; break; } }while(o!=3); break; case 6: break; } }while(n!=6); cout<<" ----------谢谢使用查询套餐----------"<<endl; return; }
void student::Paixu_student() {
cout<<" ----------欢迎使用排序套餐----------"<<endl; if(head->next==head) { cout<<" Sorry!! 学生系统中没有信息!!"<<endl; cout<<" ----------谢谢使用排序套餐----------"<<endl; return; } ifstream infile("f1.dat",ios::in); if(!infile) { cerr<<"打开失败 !!"<<endl; exit(1); } cout<<"系统自动输出所有学生基本信息:"<<endl; cout<<"学号 姓名 性别 年龄 地址 课程 成绩:"<<endl; node *pm; node *pn; pm=head->next; pn=head->next; while(pm!=head) { infile; cout<<" "<<pm->num<<" " <<pm->name<<" " <<pm->sex<< " " <<pm->age<< " " <<pm->addr<< " " <<pm->course<< " " <<pm->score<< " " <<endl; pn=pn->next; pm=pm->next; } int n; cout<<" 您好,下面提供几种排序方案"<<endl; cout<<" 这里是提示!!"<<endl; cout<<" 键1-----按成绩排序"<<endl; cout<<" 键2-----按年龄排序"<<endl; cout<<" 键3-----按学号排序"<<endl; cout<<" 键4-----按姓名排序"<<endl; cout<<" 键5-----退出排序套餐"<<endl;
do { cout<<"请选择排序键:"<<endl; cin>>n; switch(n) { case 1: node *p2; node *p1; p2=head->next; p1=p2->next;
while(p2->next!=head) //冒泡法 { if(p2->score > p1->score) { // 把头指针指向当前比较小的节点 p2->next=p1->next; p1->next=head->next; head->next=p1; // 把用于比较的两个指针复位 p2=head->next; p1=p2->next ; } else { // 指向下一个节点 p2=p2->next ; p1=p2->next ; }
} cout<<" 当前表以按学生成绩排序成功"<<endl;
node *q; q=head->next; while(q!=head) { cout<<"学号:"<<q->num<<"--" <<"姓名:"<<q->name<<"--" <<"性别:"<<q->sex<<"--" <<"年龄:"<<q->age<<"--" <<"地址:"<<q->addr<<"--" <<"课程:"<<q->course<<"--" <<"成绩:"<<q->score<<"--" <<endl; q=q->next; } break; case 2: node *h2; node *h1; h2=head->next; h1=h2->next;
while(h2->next!=head) //冒泡法 { if(h2->age > h1->age) { // 把头指针指向当前比较小的节点 h2->next=h1->next; h1->next=head->next; head->next=h1;
// 把用于比较的两个指针复位 h2=head->next; h1=h2->next ; } else { // 指向下一个节点 h2=h2->next ; h1=h2->next ; }
} cout<<" 当前表以按学生年龄排序成功"<<endl; // return head->next;
node *pt; pt=head->next; while(pt!=head) { cout<<"学号:"<<pt->num<<"--" <<"姓名:"<<pt->name<<"--" <<"性别:"<<pt->sex<<"--" <<"年龄:"<<pt->age<<"--" <<"地址:"<<pt->addr<<"--" <<"课程:"<<pt->course<<"--" <<"成绩:"<<pt->score<<"--" <<endl; pt=pt->next; }
break; case 3: node *a2; node *a1; a2=head->next; a1=a2->next;
while(a2->next!=head) //冒泡法 { if(a2->num > a1->num) { // 把头指针指向当前比较小的节点 a2->next=a1->next; a1->next=head->next; head->next=a1;
// 把用于比较的两个指针复位 a2=head->next; a1=a2->next ; } else { // 指向下一个节点 a2=a2->next ; a1=a2->next ; }
} cout<<" 当前表以按学生学号排序成功"<<endl;
node *ptt; ptt=head->next; while(ptt!=head) { cout<<"学号:"<<ptt->num<<"--" <<"姓名:"<<ptt->name<<"--" <<"性别:"<<ptt->sex<<"--" <<"年龄:"<<ptt->age<<"--" <<"地址:"<<ptt->addr<<"--" <<"课程:"<<ptt->course<<"--" <<"成绩:"<<ptt->score<<"--" <<endl; ptt=ptt->next; }
break;
case 4: node *z2; node *z1; z2=head->next; z1=z2->next;
while(z2->next!=head) //冒泡法 { if(strcmp(z2->name,z1->name)>0) { // 把头指针指向当前比较小的节点 z2->next=z1->next; z1->next=head->next; head->next=z1;
// 把用于比较的两个指针复位 z2=head->next; z1=z2->next ; } else { // 指向下一个节点 z2=z2->next ; z1=z2->next ; }
} cout<<" 当前表以按学生姓名排序成功"<<endl;
node *pti; pti=head->next; while(pti!=head) { cout<<"学号:"<<pti->num<<"--" <<"姓名:"<<pti->name<<"--" <<"性别:"<<pti->sex<<"--" <<"年龄:"<<pti->age<<"--" <<"地址:"<<pti->addr<<"--" <<"课程:"<<pti->course<<"--" <<"成绩:"<<pti->score<<"--" <<endl; pti=pti->next; }
break;
case 5: break;
} }while(n!=5);
cout<<" ----------谢谢使用排序套餐----------"<<endl; return; }
void student::Ins_student() { int nn; //学号 int n; char na[20]; char s; int a; char ad[50]; char co[20]; int sc; cout<<" ----------欢迎使用插入套餐----------"<<endl; cout<<" 您想在哪个学号前插入?请输入该学号:"<<endl; cin>>nn; cout<<" 请输入该同学的学生信息(包括:学号,姓名,性别,年龄,地址,课程,成绩!)"<<endl; cin>>n>>na>>s>>a>>ad>>co>>sc; node *pp,*qq; pp=new node; pp->num=n; strcpy(pp->name,na); pp->sex=s; pp->age=a; strcpy(pp->addr,ad); strcpy(pp->course,co); pp->score=sc; qq=head; while((qq->next!=head)&&(((qq->next)->num)!=nn)) qq=qq->next; pp->next=qq->next; qq->next=pp; cout<<" 您好,您已成功插入!!"<<endl; cout<<" ----------谢谢使用插入套餐----------"<<endl; return; }
#include<iostream> #include"score.h" #include<fstream> using namespace std; int main() { student stu; int n; int count=0; char password[4]; //密码 char name[11]; //用户名 cout<<" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ "<<endl; cout<<"┃ ★ ★ ★ 学生成绩信息管理系统 ★ ★ ★ ┃"<<endl; cout<<"┃ ☆程序员之家☆ ┃"<<endl; cout<<"┃ ----- 产权所有 违者必究 ┃"<<endl; cout<<" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ "<<endl; cout<<" ****************************欢迎进入学生成绩信息管理系统*********************"<<endl; cout<<endl; cout<<"请输入用户名:"<<endl; cin>>name; cout<<"请输入密码:"<<endl; while(1) { cin>>password; if(strcmp(password,"7954")==0 ) { cout<<" *您的密码正确!!-------------*"<<endl; cout<<endl; cout<<" **************************************************************************"<<endl; cout<<" **************** ┃* 顾客您好-这里是套餐提示!! *┃ *******************"<<endl; cout<<" **************** ┃* 按键1 -----------录入信息 *┃ *******************"<<endl; cout<<" ******厚德****** ┃* 按键2 -----------修改信息 *┃ *******规范********"<<endl; cout<<" **************** ┃* 按键3 -----------删除信息 *┃ *******************"<<endl; cout<<" **************** ┃* 按键4 -----------插入信息 *┃ *******************"<<endl; cout<<" ******重能****** ┃* 按键5 -----------查询信息 *┃ *******创新********"<<endl; cout<<" **************** ┃* 按键6 -----------排序信息 *┃ *******************"<<endl; cout<<" **************** ┃* 按键7 -----------退出系统 *┃ *******************"<<endl; cout<<" ****************************************************南京信息职业技术学院**"<<endl; do { cout<<"请您选择套餐按键"<<endl; cin>>n; switch (n) { case 1: { stu.In_student(); break; } case 2: { stu.Modify_student(); break; } case 3: { stu.Del_student(); break; } case 4: { stu.Ins_student(); break; } case 5: { stu.Prt_student(); break; } case 6:{ stu.Paixu_student(); break; } case 7: { break; } } }while(n!=7); } else { count=count+1; if(count==3) { cout<<"实在对不起,您已经输入错误3次了!!!"<<endl; cout<<"系统自动退出!!!"<<endl; break; } cout<<"对不起! 您的密码有误!!"<<endl; cout<<"请重新输入密码"<<endl; continue; } break; } cout<<" 谢谢使用-----学生成绩信息管理系统!!! "<<endl; cout<<" 再见!! "<<endl; cout<<"*******************************************************************************"<<endl; return 0; }