当前位置:文档之家› 学生选课管理系统

学生选课管理系统

学生选课管理系统SANY GROUP system office room 【SANYUA16H-SANYHUASANYUA8Q8-#include<stdio.h>#include<iostream.h>#include<stdlib.h>#include<string.h>#include<malloc.h>//定义学生对象类型typedef struct node{char Sno[10]; //学号char Sname[10]; //姓名char Ssex[3]; //性别char Sage[3]; //年龄char Sdept[4]; //所在系struct node *next;}Student;//定义课程对象类型typedef struct node2{char Cno[10]; //课程号char Cname[10]; //课程名char Cpno[5]; //先行课char Ccredit[3]; //学分struct node2 *next;}Course;//定义选课对象类型typedef struct node3{char Sno[10];char Cno[10];int Grade;struct node3 *next;}SC;//初始化学生信息表void InitlistA(Student *stu){stu->next=NULL;}//初始化课程信息表void InitlistB(Course *C){C->next=NULL;}//初始化选课信息表void InitlistC(SC *S){S->next=NULL;}//求选课表的深度int Getlength(SC *S){int i=0;SC *p;p=S->next;while(p!=NULL){p=p->next;i ;}return(i);}//用户输入数据建立学生信息表(尾插法) void CreatelistA(Student *stu){Student *s,*r;int m,i;r=stu;cout<<"现在输入学生信息"<<endl;cout<<"请输入学生个数:";cin>>m;cout<<"| 学号 | 姓名 | 性别 | 年龄 | 所在系 |"<<endl;for(i=0;i<m;i ){s=(Student *)malloc(sizeof(Student));cin>>s->Sno;cin>>s->Sname;cin>>s->Ssex;cin>>s->Sage;cin>>s->Sdept;r->next=s;r=s;}r->next=NULL;}//由用户输入数据建立课程信息列表void CreatelistB(Course *C){Course *s,*r;r=C;int m,i;cout<<"现在输入课程信息"<<endl;cout<<"请输入课程数量:";cin>>m;cout<<"| 课程号 | 课程名 | 先行课 | 学分 |"<<endl;for(i=0;i<m;i ){s=(Course *)malloc(sizeof(Course));cin>>s->Cno;cin>>s->Cname;cin>>s->Cpno;cin>>s->Ccredit;r->next=s;r=s;}r->next=NULL;}//由用户输入数据建立选课信息列表void CreatelistC(SC *S){SC *q,*r;r=S;int m,i;cout<<"现在输入选课信息"<<endl;cout<<"请输入选课信息条数:";cin>>m;cout<<"| 学号 | 课程号 | 成绩 |"<<endl;for(i=0;i<m;i ){q=(SC *)malloc(sizeof(SC));cin>>q->Sno;cin>>q->Cno;cin>>q->Grade;r->next=q;r=q;}r->next=NULL;}//输出学生信息表void DisplistA(Student *stu){Student *p=stu->next;cout<<"学生信息表"<<endl;cout<<"___________________________________________________"<<endl;cout<<"| 学号 | 姓名 | 性别 | 年龄 | 所在系 |"<<endl;cout<<"| Sno | Sname | Ssex | Sage | Sdept |"<<endl;cout<<"___________________________________________________"<<endl;while(p!=NULL){printf("|s|%9s|%8s|%8s|s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);cout<<"___________________________________________________"<<endl;p=p->next;}}//输出课程信息表void DisplistB(Course *C){Course *p=C->next;cout<<"课程信息表"<<endl;cout<<"_______________________________________________"<<endl;cout<<"| 课程号 | 课程名 | 先行课 | 学分 |"<<endl;cout<<"| Cno | Cname | Cpno | Ccredit |"<<endl;cout<<"_______________________________________________"<<endl;while(p!=NULL){printf("|%8s|s|s|s|\n",p->Cno,p->Cname,p->Cpno,p->Ccredit);cout<<"_______________________________________________"<<endl;p=p->next;}}//输出选课信息表void DisplistC(SC *S){if(Getlength(S)==0){cout<<"对不起!选课信息表已为空!"<<endl;}else{SC *p=S->next;cout<<"选课信息表"<<endl;cout<<"_______________________________________________"<<endl;cout<<"| 学号 | 课程号 | 成绩 |"<<endl;cout<<"| Sno | Cno | Grade |"<<endl;cout<<"_______________________________________________"<<endl;while(p!=NULL){printf("|s|s|d|\n",p->Sno,p->Cno,p->Grade);cout<<"_______________________________________________"<<endl;p=p->next;}}}//查询学生个人基本信息,以姓名或学号为参数void QueryStudent(Student *stu){int i=0;char sn[20];Student *p;p=stu->next;cout<<"请输入所要查询的学生的学号或姓名"<<endl;cout<<"请输入:";cin>>sn;do{if(strcmp(p->Sname,sn)==0||strcmp(p->Sno,sn)==0){cout<<"___________________________________________________"<<endl;cout<<"| 学号 | 姓名 | 性别 | 年龄 | 所在系|"<<endl;cout<<"| Sno | Sname | Ssex | Sage | Sdept |"<<endl;cout<<"___________________________________________________"<<endl;printf("|s|%9s|%8s|%8s|s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);cout<<"___________________________________________________"<<endl;break;}p=p->next;//注意指针要往后走}while(p!=NULL);if(p==NULL)cout<<"对不起!无此学生的信息!"<<endl;}//查询学生单科目的成绩void QuerySC(Student *stu,Course *C,SC *S){char sn[20];char cn[20];Student *p;Course *q;SC *r;p=stu->next;cout<<"请输入所要查询的学生的学号和课程号"<<endl;cout<<"学号或姓名:";cin>>sn;p=stu->next;//将姓名计算转化成为学号do{if(strcmp(p->Sname,sn)==0||strcmp(p->Sno,sn)==0){strcpy(sn,p->Sno);break;}p=p->next;}while(p!=NULL);if(p==NULL){cout<<"对不起!无该名学生的信息!"<<endl;return ;}cout<<"课程号或课程名:";cin>>cn;q=C->next;//将课程名计算转化成为课程号do{if(strcmp(q->Cno,cn)==0 || strcmp(q->Cname,cn)==0){strcpy(cn,q->Cno);break;}q=q->next;}while(q!=NULL);if(q==NULL){cout<<"对不起!您输入的课程信息有误!"<<endl;return ;}r=S->next;do{if(strcmp(r->Sno,sn)==0 && strcmp(r->Cno,cn)==0){cout<<"_______________________________________________"<<endl;cout<<"| 学号 | 课程号 | 成绩|"<<endl;cout<<"| Sno | Cno | Grade "<<endl;cout<<"_______________________________________________"<<endl;printf("|s|s|d|\n",r->Sno,r->Cno,r->Grade);cout<<"_______________________________________________"<<endl;break;}r=r->next;}while(r!=NULL);if(r==NULL){cout<<"对不起!该学生没有参加这门课程的考试!"<<endl;}}//查询学生个人总成绩void QuerySUM(Student *stu,SC *S){Student *p;SC *q;char sn[20];float n=0;int i=0;cout<<"请输入要查询的学生的信息!"<<endl;cout<<"学号或姓名:";cin>>sn;p=stu->next;do{if(strcmp(p->Sno,sn)==0 || strcmp(p->Sname,sn)==0){strcpy(sn,p->Sno);break;}p=p->next;}while(p!=NULL);if(p==NULL){cout<<"对不起!无该名学生的信息!"<<endl;}else{q=S->next;do{if(strcmp(q->Sno,sn)==0){n=n q->Grade;i ;}q=q->next;}while(q!=NULL);if(n==0)cout<<"该名学生没有参加考试!"<<endl;elsecout<<"该名学生的总成绩为:"<<n<<endl;}}//删除选课信息void DeleteSC(Student *stu,Course *C,SC *S){char sn[20];char cn[20];Student *p;Course *q;SC *r;SC *t;cout<<"请输入要删除的信息中学生学号或姓名和课程号或课程名!"<<endl;cout<<"学号或姓名:";cin>>sn;p=stu->next;//检查是否存在这名学生do{if(strcmp(p->Sno,sn)==0 || strcmp(p->Sname,sn)==0){strcpy(sn,p->Sno);break;}p=p->next;//注意指针要往后走}while(p!=NULL);if(p==NULL){cout<<"对不起!无该名学生的信息!"<<endl;return ;}cout<<"课程号或课程名:";cin>>cn;q=C->next;//检查课程号是否合法do{if(strcmp(q->Cname,cn)==0 || strcmp(q->Cno,cn)==0){strcpy(cn,q->Cno);break;}q=q->next;}while(q!=NULL);if(p==NULL){cout<<"对不起!您输入的课程信息有误!"<<endl;return ;}t=S;//t指向r的请一个节点,便于删除和释放r=S->next;do{if(strcmp(r->Sno,sn)==0 && strcmp(r->Cno,cn)==0){t->next=r->next;free(r);cout<<"删除成功!"<<endl;break;}t=t->next;r=r->next;}while(r!=NULL);if(r==NULL){cout<<"对不起!原表中没有您要删除的选课信息!"<<endl;}}//修改选课信息void Revalue(Student *stu,Course *C,SC *S){char sn[20],cn[20];Student *p;Course *q;SC *r;cout<<"请输入您所要修改的学生或姓名和课程号或课程名!"<<endl;cout<<"学生或姓名:";cin>>sn;p=stu->next;//检查是否存在这名学生,若存在则将姓名转换为对应的学号do{if(strcmp(p->Sno,sn)==0 || strcmp(p->Sname,sn)==0){strcpy(sn,p->Sno);break;}p=p->next;}while(p!=NULL);if(p==NULL){cout<<"对不起!无该名学生的信息!"<<endl;return ;}cout<<"课程号或课程名:";cin>>cn;q=C->next;//检查是否存在这门课程,若存在则将课程名转换为对应的课程号 do{if(strcmp(q->Cname,cn)==0 || strcmp(q->Cno,cn)==0){strcpy(cn,q->Cno);break;}q=q->next;}while(q!=NULL);if(q==NULL){cout<<"对不起!您输入的课程信息有误!"<<endl;return ;}r=S->next;do{if(strcmp(r->Sno,sn)==0 && strcmp(r->Cno,cn)==0){cout<<"该名学生的当前选课信息为:"<<endl;cout<<"_______________________________________________"<<endl;cout<<"| 学号 | 课程号 | 成绩|"<<endl;cout<<"| Sno | Cno | Grade"<<endl;cout<<"_______________________________________________"<<endl;printf("|s|s|d|\n",r->Sno,r->Cno,r->Grade);cout<<"_______________________________________________"<<endl;break;}r=r->next;}while(r!=NULL);if(r==NULL){cout<<"对不起!没有您要修改的选课信息!"<<endl;return ;}cout<<"请您重置该名学生的选课信息!"<<endl;cout<<"学号或姓名:";cin>>sn;p=stu->next;//检查学生信息表中是否存在这名学生do{if(strcmp(p->Sno,sn)==0 || strcmp(p->Sname,sn)==0){strcpy(sn,p->Sno);break;}p=p->next;}while(p!=NULL);if(p==NULL){cout<<"对不起!您的输入有误!"<<endl;return ;}cout<<"课程号或课程名:";cin>>cn;q=C->next;//检查是否存在这门课程,若存在则将课程名转换为对应的课程号do{if(strcmp(q->Cname,cn)==0 || strcmp(q->Cno,cn)==0){strcpy(cn,q->Cno);break;}q=q->next;}while(q!=NULL);if(q==NULL){cout<<"对不起!您输入的课程信息有误!"<<endl;return ;}strcpy(r->Sno,sn);strcpy(r->Cno,cn);cout<<"成绩:";cin>>r->Grade;cout<<"修改成功!"<<endl;}//添加选课信息void AddSC(Student *stu,Course *C,SC *S){char sn[20],cn[20];Student *p;Course *q;SC *r,*s;int Grade;r=S;cout<<"请输入信息:"<<endl;cout<<"学号或姓名:";cin>>sn;p=stu->next;//检查是否存在这名学生,若存在则将姓名转换为对应的学号do{if(strcmp(p->Sno,sn)==0 || strcmp(p->Sname,sn)==0){strcpy(sn,p->Sno);break;}p=p->next;}while(p!=NULL);if(p==NULL){cout<<"对不起!不存在该名学生,您不能添加其选课信息!"<<endl;return ;}cout<<"课程号或课程名:";cin>>cn;q=C->next;//检查是否存在这门课程,若存在则将课程名转换为对应的课程号do{if(strcmp(cn,q->Cname)==0 || strcmp(cn,q->Cno)==0){strcpy(cn,q->Cno);break;}q=q->next;}while(q!=NULL);if(q==NULL){cout<<"对不起!您输入的课程信息有误!"<<endl;return ;}s=(SC *)malloc(sizeof(SC));cout<<"成绩:";cin>>Grade;strcpy(s->Sno,sn);strcpy(s->Cno,cn);s->Grade=Grade;while(r->next!=NULL){r=r->next;}s->next=r->next;r->next=s;cout<<"添加成功!"<<endl;}//查询个人平均成绩void QueryAva(Student *stu,SC *S){float m=0;Student *p;SC *q;char sn[20];float n=0;int i=0;cout<<"请输入要查询的学生的信息!"<<endl;cout<<"学号或姓名:";cin>>sn;p=stu->next;do{if(strcmp(p->Sno,sn)==0||strcmp(p->Sname,sn)==0){strcpy(sn,p->Sno);break;}p=p->next;}while(p!=NULL);if(p==NULL){cout<<"对不起!无该名学生的信息!"<<endl;}else{q=S->next;do{if(strcmp(q->Sno,sn)==0){n=n q->Grade;i ;}q=q->next;}while(q!=NULL);if(n==0)cout<<"该名学生没有参加考试!"<<endl;elsecout<<"该名学生的平均成绩为:"<<n/i<<endl; }}//查询某个系所有学生的成绩void QueryDepart(Student *stu,SC *S){char Sdept[4];Student *p;SC *q;int i=0;cout<<"请输入系名:";cin>>Sdept;p=stu->next;do{if(strcmp(p->Sdept,Sdept)==0){q=S->next;do{if(strcmp(q->Sno,p->Sno)==0){cout<<"________________________________________________________"<< endl;cout<<"| 姓名 | 学号 | 课程号| 成绩 |"<<endl;cout<<"| Sname | Sno | Cno | Grade |"<<endl;cout<<"_________________________________________________________"< <endl;cout<<"| "<<p->Sname<<" | "<<q->Sno<<" | "<<q->Cno<<" | ";cout<<q->Grade<<" |"<<endl;cout<<"_________________________________________________________"< <endl;i=1;}q=q->next;}while(q!=NULL);}p=p->next;}while(p!=NULL);if(i==0){cout<<"对不起!没有您需要的信息!"<<endl;}}//查询某课程的平均成绩void QuerySCL(Course *C,SC *S){char cn[20],cn1[20];float m=0;float i=0;Course *q;SC *r;cout<<"请输入您所要查询的课程号或课程名!"<<endl;cin>>cn;q=C->next;do{if(strcmp(q->Cno,cn)==0||strcmp(q->Cname,cn)==0){strcpy(cn,q->Cno);strcpy(cn1,q->Cname);break;}q=q->next;}while(q!=NULL);if(q==NULL){cout<<"对不起!您输入的课程信息有误!"<<endl;return ;}r=S->next;do{if(strcmp(r->Cno,cn)==0){m=m (float)r->Grade;i ;}r=r->next;}while(r!=NULL);if(i==0){cout<<"对不起!没有该课程的信息!"<<endl;return ;}m=m/i;cout<<"课程 "<<cn1<<" 的平均成绩是:"<<m<<endl; }//由系统对学生信息表赋值void GivevalueA(Student *stu){Student *p,*q;p=stu;q=(Student *)malloc(sizeof(Student));strcpy(q->Sno,"95001");strcpy(q->Sname,"李勇");strcpy(q->Ssex,"男");strcpy(q->Sage,"20");strcpy(q->Sdept,"CS");q->next=p->next;p->next=q;p=p->next;}//由系统对课程信息表赋初值void GivevalueB(Course *C){Course *p,*q;p=C;q=(Course *)malloc(sizeof(Course));strcpy(q->Cno,"1");strcpy(q->Cname,"数据库");strcpy(q->Cpno,"5");strcpy(q->Ccredit,"4");q->next=p->next;p->next=q;p=p->next;}//由系统对选课信息表赋初值void GivevalueC(SC *S){SC *p,*q;p=S;q=(SC *)malloc(sizeof(SC));strcpy(q->Sno,"95001");strcpy(q->Cno,"1");q->Grade=92;q->next=p->next;p->next=q;p=p->next;}int GETchooce(char n[]){int m;if(strcmp(n,"0")==0)m=0;else if(strcmp(n,"1")==0)m=1;else if(strcmp(n,"2")==0)m=2;else if(strcmp(n,"3")==0)m=3;else if(strcmp(n,"4")==0)m=4;else if(strcmp(n,"5")==0)m=5;else if(strcmp(n,"6")==0)m=6;else if(strcmp(n,"7")==0)m=7;else if(strcmp(n,"8")==0)m=8;else if(strcmp(n,"9")==0)m=9;else if(strcmp(n,"10")==0)m=10;else if(strcmp(n,"11")==0)m=11;else if(strcmp(n,"12")==0)m=12;elsem=-1;return(m);}void main(){Student stu;Course C;SC S;char n[8];cout<<" 系统简介"<<endl<<endl;cout<<" 本系统含有三张信息表:"<<endl<<endl;cout<<" 学生信息表*课程信息表选*课信息表"<<endl<<endl;InitlistA(&stu);InitlistB(&C);InitlistC(&S);do{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;cout<<" 9: 添加选课信息 "<<endl;cout<<" 10: 查询学生个人平均成绩 "<<endl;cout<<" 11:查询某个系所有学生的成绩 "<<endl;cout<<" 12:查询某课程的平均成绩 "<<endl;cout<<" 0: 退出系统 "<<endl;cout<<"请选择您需要的操作(0-12):";cin>>n;//参数以字符串的形式输入,以防用户不小心输入字符或字符串,导致系统进入死循环switch(GETchooce(n)){case 0:cout<<"谢谢使用!再见!"<<endl;exit(0);case 1:GivevalueA(&stu);GivevalueB(&C);GivevalueC(&S);DisplistA(&stu);DisplistB(&C);DisplistC(&S);break;case 2:CreatelistA(&stu);CreatelistB(&C);CreatelistC(&S);break;case 3:DisplistA(&stu);DisplistB(&C);DisplistC(&S);break;//注意每一个case语句后面要加 break,以保证及时退出case 4:QueryStudent(&stu);break;case 5:QuerySC(&stu,&C,&S);break;case 6:QuerySUM(&stu,&S);break;case 7:DeleteSC(&stu,&C,&S);break;case 8:Revalue(&stu,&C,&S);break;case 9:AddSC(&stu,&C,&S);break;case 10:QueryAva(&stu,&S);break;case 11:QueryDepart(&stu,&S);break;case 12:QuerySCL(&C,&S);break;default:cout<<"输入错误!"<<endl;break;}}while(1);}。

相关主题