文档库 最新最全的文档下载
当前位置:文档库 › 学生选课管理系统

学生选课管理系统

#include
#include
#include
#include
#include


//定义学生对象类型
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<<"现在输入学生信息"<cout<<"请输入学生个数:";
cin>>m;
cout<<"| 学号 | 姓名 | 性别 | 年龄 | 所在系 |"<for(i=0;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<<"现在输入课程信息"<cout<<"请输入课程数量:";
cin>>m;
cout<<"| 课程号 | 课程名 | 先行课 | 学分 |"<for(i=0;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<<"现在输入选课信息"<cout<<"请输入选课信息条数:";
cin>>m;
cout<<"| 学号 | 课程号 | 成绩 |"<for(i=0;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<<"学生信息表"<cout<<"___________________________________________________"<cout<<"| 学号 | 姓名 | 性别 | 年龄 | 所在系 |"<cout<<"| Sno | Sname | Ssex | Sage | Sdept |"<cout<<"___________________________________________________"<while(p!=NULL)
{
printf("|%10s|%9s|%8s|%8s|%10s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);
cout<<"_________________________________

__________________"<p=p->next;
}
}




//输出课程信息表
void DisplistB(Course *C)
{
Course *p=C->next;
cout<<"课程信息表"<cout<<"_______________________________________________"<cout<<"| 课程号 | 课程名 | 先行课 | 学分 |"<cout<<"| Cno | Cname | Cpno | Ccredit |"<cout<<"_______________________________________________"<while(p!=NULL)
{
printf("|%8s|%14s|%10s|%10s|\n",p->Cno,p->Cname,p->Cpno,p->Ccredit);
cout<<"_______________________________________________"<p=p->next;
}
}



//输出选课信息表
void DisplistC(SC *S)
{
if(Getlength(S)==0)
{
cout<<"对不起!选课信息表已为空!"<}
else
{
SC *p=S->next;
cout<<"选课信息表"<cout<<"_______________________________________________"<cout<<"| 学号 | 课程号 | 成绩 |"<cout<<"| Sno | Cno | Grade |"<cout<<"_______________________________________________"<while(p!=NULL)
{
printf("|%13s|%17s|%13d|\n",p->Sno,p->Cno,p->Grade);
cout<<"_______________________________________________"<p=p->next;
}
}
}



//查询学生个人基本信息,以姓名或学号为参数
void QueryStudent(Student *stu)
{
int i=0;
char sn[20];
Student *p;
p=stu->next;
cout<<"请输入所要查询的学生的学号或姓名"<cout<<"请输入:";
cin>>sn;
do
{
if(strcmp(p->Sname,sn)==0||strcmp(p->Sno,sn)==0)
{
cout<<"___________________________________________________"<cout<<"| 学号 | 姓名 | 性别 | 年龄 | 所在系 |"<cout<<"| Sno | Sname | Ssex | Sage | Sdept |"<cout<<"___________________________________________________"<printf("|%10s|%9s|%8s|%8s|%10s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);
cout<<"___________________________________________________"<break;
}
p=p->next;//注意指针要往后走
}while(p!=NULL);
if(p==NULL)
cout<<"对不起!无此学生的信息!"<}


//查询学生单科目的成绩
void QuerySC(Student *stu,Course *C,SC *S)
{
char sn[20];
char cn[20];
Student *p;
Course *q;
SC *r;
p=stu->next;
cout<<"请输入所要查询的学生的学号和课程号"<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<<"对不起!无该名学生的信息!"<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<<"对不起!您输入的课程信息有误!"<return ;
}
r=S->next;
do
{
if(strcmp(r->Sno,sn)==0 && strcmp(r->Cno,cn)==0)
{
cout<<"_______________________________________________"<cout<<"| 学号 | 课程号 | 成绩 |"<cout<<"| Sno | Cno | Grade "<cout<<"_______________________________________________"<printf("|%13s|%17s|%13d|\n",r->Sno,r->Cno,r->Grade);
cout<<"_______________________________________________"<break;
}
r=r->next;
}while(r!=NULL);
if(r==NULL)
{
cout<<"对不起!该学生没有参加这门课程的考试!"<}
}



//查询学生个人总成绩
void QuerySUM(Student *stu,SC *S)
{
Student *p;
SC *q;
char sn[20];
float n=0;
int i=0;
cout<<"请输入要查询的学生的信息!"<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<<"对不起!无该名学生的信息!"<}
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<<"该名学生没有参加考试!"<else
cout<<"该名学生的总成绩为:"<}
}



//删除选课信息
void DeleteSC(Student *stu,Course *C,SC *S)
{
char sn[20];
char cn[20];
Student *p;
Course *q;
SC *r;
SC *t;
cout<<"请输入要删除的信息中学生学号或姓名和课程号或课程名!"<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<<"对不起!无该名学生的信息!"<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<<"对不起!您输入的课程信息有误!"<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<<"删除成功!"<break;
}
t=t->next;
r=r->next;
}while(r!=NULL);
if(r==NULL)
{
cout<<"对不起!原表中没有您要删除的选课信息!"<}
}



//修改选课信息
void Revalue(Student *stu,Course *C,SC *S)
{


char sn[20],cn[20];
Student *p;
Course *q;
SC *r;
cout<<"请输入您所要修改的学生或姓名和课程号或课程名!"<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<<"对不起!无该名学生的信息!"<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<<"对不起!您输入的课程信息有误!"<return ;
}
r=S->next;
do
{
if(strcmp(r->Sno,sn)==0 && strcmp(r->Cno,cn)==0)
{
cout<<"该名学生的当前选课信息为:"<cout<<"_______________________________________________"<cout<<"| 学号 | 课程号 | 成绩 |"<cout<<"| Sno | Cno | Grade "<cout<<"_______________________________________________"<printf("|%13s|%17s|%13d|\n",r->Sno,r->Cno,r->Grade);
cout<<"_______________________________________________"<break;
}
r=r->next;
}while(r!=NULL);
if(r==NULL)
{
cout<<"对不起!没有您要修改的选课信息!"<return ;
}
cout<<"请您重置该名学生的选课信息!"<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<<"对不起!您的输入有误!"<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<<"对不起!您输入的课程信息有误!"<return ;
}
strcpy(r->Sno,sn);
strcpy(r->Cno,cn);
cout<<"成 绩:";
cin>>r->Grade;
cout<<"修改成功!"<}



//添加选课信息
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<<"请输入信息:"<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<<"对不起!不存在该名学生,您不能添加其选课信息!"<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<<"对不起!您输入的课程信息有误!"<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<<"添加成功!"<}



//查询个人平均成绩
void QueryAva(Student *stu,SC *S)
{
float m=0;
Student *p;
SC *q;
char sn[20];
float n=0;
int i=0;
cout<<"请输入要查询的学生的信息!"<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<<"对不起!无该名学生的信息!"<}
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<<"该名学生没有参加考试!"<else
cout<<"该名学生的平均成绩为:"<}
}


//查询某个系所有学生的成绩
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<<"________________________________________________________"<cout<<"| 姓名 | 学号 | 课程号 | 成绩 |"<cout<<"| Sname | Sno | Cno | Grade |"<cout<<"_________________________________________________________"<cout<<"| "<Sname<<" | "<Sno<<" | "<Cno<<" | ";
cout<Grade<<" |"<cout<<"_________________________________________________________"<i=1;
}
q=q->next;
}while(q!=NULL);
}
p=p->next;
}while(p!=NULL);
if(i==0)
{
cout<<"对不起!没有您需要的信息!"<}
}


//查询某课程的平均成绩
void QuerySCL(Course *C,SC *S)
{
char cn[20],cn1[20];
float m=0;
float i=0;
Course *q;
SC *r;
cout<<"请输入您所要查询的课程号或课程名!"<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<<"对不起!您输入的课程信息有误!"<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<<"对不起!没有该课程的信息!"<return ;
}
m=m/i;
cout<<"课程 "<
}

//由系统对学生信息表赋值
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;
else
m=-1;
return(m);
}

void main()
{
Student stu;
Course C;
SC S;
char n[8];
cout<<" 系统简介"<cout<<" 本系统含有三张信息表:"<cout<<" 学生信息表*课程信息表选*课信息表"<InitlistA(&stu);
InitlistB(&C);
InitlistC(&S);
do
{
cout<<" 功能选择: "<cout<<" 1:系统提供数据测试各表性能"<cout<<" 2: 输入数据重建各信息表 "<cout<<" 3: 查看各个信息表的全表信息 "<cout<<" 4: 查询学生个人基本信息 "<cout<<" 5: 查询学生单科目的成绩 "<cout<<" 6: 查询学生个人总成绩 "<cout<<" 7: 删 除 选 课 信 息 "<cout<<" 8: 修 改 选 课 信 息 "<cout<<" 9: 添 加 选 课 信 息 "<cout<<" 10: 查询学生个人平均成绩 "<cout<<" 11:查询某个系所有学生的成绩 "<cout<<" 12:查询某课程的平均成绩 "<cout<<" 0: 退 出 系 统 "<cout<<"请选择您

需要的操作(0-12):";
cin>>n;//参数以字符串的形式输入,以防用户不小心输入字符或字符串,导致系统进入死循环
switch(GETchooce(n))
{
case 0:
cout<<"谢谢使用!再见!"<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<<"输入错误!"<break;
}
}while(1);
}



相关文档
相关文档 最新文档