学生的选课管理系统的.docx
《学生的选课管理系统的.docx》由会员分享,可在线阅读,更多相关《学生的选课管理系统的.docx(40页珍藏版)》请在冰豆网上搜索。
学生的选课管理系统的
2009~2010学年度第二学期
赣南师范学院数学与计算机科学学院
课程设计报告册
课程设计名称:
学生选课管理系统
专业:
计算机科学与技术
班级:
学号:
姓名:
指导老师:
课程设计任务一览表
序号
课程设计任务名称
设计专题任务描述(可附页)
1
学生选课信息管理系统
为选课信息管理人员和学生编写一个学生选课信息管理系统,实现选课信息的查询、修改、删除、添加以及学生课程成绩的查询等功能。
2
3
4
5
指导用书:
___算法与数据结构课程设计______
课程设计报告
设计项目
编号
1
名称
学生选课信息管理系统
主要
仪器
设备
一台PC机
附属
设备
主要
使用
软件
VisualC++6.0编程软件
起止时间
10年3月9日
—5月30日
同组人
课程设计任务书
1.系统的功能描述(10分)
2.系统的主要功能模块算法设计(30分)
3.系统的各函数设计(20分)
4.系统的编码(20分)
5.系统的运行(10分)
6.系统的主要功能模块算法性能分析(10分)
课程设计报告
一、系统的功能描述
通过此选课系统可以实现如下功能:
输入数据:
可以由用户输入学生信息、课程信息、选课信息建立各信息表;
查询各信息表:
可以查询学生信息表内的学生的个人信息,课程表里的课程信息和选课表里的选课信息;
查询学生个人信息、学生单科目成绩、个人总成绩;
删除、修改、添加选课信息;
查询学生个人平均成绩、系内所有学生成绩、某课程平均成绩;
二、系统的主要功能模块算法设计
根据实际情况,对上述要求做以下简化:
1,首先需要客户为系统输入各表信息。
2,查询或删除时只能查询或删除表内存在的信息,若表中不存在则报错。
3,各表信息由线性表实现,各表内信息按用户输入时的顺序存放。
程序中包含4个模块
(1)主程序模块;
(2)学生个人信息结构单元模块----定义各学生个人信息的结构体类型;
(3)课程信息结构单元模块----定义各课程信息的结构体类型;
(4)选课信息结构单元模块----定义各选课信息的结构体类型;
(5)功能模块----------------实现查询、修改、删除、添加信息,查询学生各个课程成绩等功能.
主要功能模块算法详细如下:
1、定义学生对象结构体类型
typedefstructnode
{charSno[10];charSname[10];charSsex[3];charSage[3];charSdept[4];structnode*next;
}Student;
2、定义课程对象结构体类型
typedefstructnode2
{charCno[10];charCname[10];charCpno[5];charCcredit[3];
structnode2*next;
}Course;
3、定义选课对象结构体类型
typedefstructnode3
{charSno[10];charCno[10];intGrade;
structnode3*next;
}SC;
4、初始化学生信息表、课程信息表、选课信息表
voidInitlistA(Student*stu)
{stu->next=NULL;
}
voidInitlistB(Course*C)
{C->next=NULL;
}
voidInitlistC(SC*S)
{S->next=NULL;
}
5、求选课表长度
intGetlength(SC*S)
{inti=0;SC*p;p=S->next;
while(p!
=NULL)
{p=p->next;i++;
}return(i);
}
6、用户输入数据建立学生信息表(尾插法)
voidCreatelistA(Student*stu)
{Student*s,*r;intm,i;r=stu;
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;
}
7、由用户输入数据建立课程信息列表
voidCreatelistB(Course*C)
{Course*s,*r;r=C;intm,i;
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;
}
8、由用户输入数据建立选课信息列表
voidCreatelistC(SC*S)
{SC*q,*r;r=S;intm,i;
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;
}
9、输出学生信息表
voidDisplistA(Student*stu)
{Student*p=stu->next;
cout<<"学生信息表"<cout<<"|学号|姓名|性别|年龄|所在系|"<cout<<"|Sno|Sname|Ssex|Sage|Sdept|"<while(p!
=NULL)
{printf("|%10s|%9s|%8s|%8s|%10s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);
p=p->next;}
}
10、输出选课信息表
voidDisplistC(SC*S)
{if(Getlength(S)==0)
{cout<<"对不起!
选课信息表已为空!
"<}
else
{SC*p=S->next;
cout<<"选课信息表"<cout<<"|学号|课程号|成绩|"<cout<<"|Sno|Cno|Grade|"<while(p!
=NULL)
{printf("|%13s|%17s|%13d|\n",p->Sno,p->Cno,p->Grade);
p=p->next;}}
}
11、查询学生个人基本信息,以姓名或学号为参数
voidQueryStudent(Student*stu)
{inti=0;charsn[20];Student*p;
p=stu->next;
cout<<"请输入所要查询的学生的学号或姓名"<";cin>>sn;
do
{if(strcmp(p->Sname,sn)==0||strcmp(p->Sno,sn)==0)
{
cout<<"|学号|姓名|性别|年龄|所在系|"<cout<<"|Sno|Sname|Ssex|Sage|Sdept|"<printf("|%10s|%9s|%8s|%8s|%10s|\n",p->Sno,p->Sname,p->Ssex,p->Sage,p->Sdept);
break;}
p=p->next;//注意指针要往后走
}while(p!
=NULL);
if(p==NULL)cout<<"对不起!
无此学生的信息!
"<}
12、查询学生单科目的成绩
voidQuerySC(Student*stu,Course*C,SC*S)
{charsn[20];charcn[20];Student*p;Course*q;SC*r;
p=stu->next;
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<<"对不起!
无该名学生的信息!
"<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<<"对不起!
您输入的课程信息有误!
"<}r=S->next;
do
{if(strcmp(r->Sno,sn)==0&&strcmp(r->Cno,cn)==0)
{cout<<"|学号|课程号|成绩|"<cout<<"|Sno|Cno|Grade"<printf("|%13s|%17s|%13d|\n",r->Sno,r->Cno,r->Grade);break;}
r=r->next;
}while(r!
=NULL);
if(r==NULL)
{cout<<"对不起!
该学生没有参加这门课程的考试!
"<}
13、查询学生个人总成绩
voidQuerySUM(Student*stu,SC*S)
{Student*p;SC*q;charsn[20];floatn=0;inti=0;
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<<"该名学生的总成绩为:
"<}
14、删除选课信息
voidDeleteSC(Student*stu,Course*C,SC*S)
{charsn[20];charcn[20];Student*p;Course*q;SC*r;SC*t;
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<<"对不起!
无该名学生的信息!
"<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<<"对不起!
您输入的课程信息有误!
"<}
t=S;r=S->next;
do
{if(strcmp(r->Sno,sn)==0&&strcmp(r->Cno,cn)==0)
{t->next=r->next;free(r);
cout<<"删除成功!
"<}
t=t->next;r=r->next;
}while(r!
=NULL);
if(r==NULL)
{cout<<"对不起!
原表中没有您要删除的选课信息!
"<}
15、修改选课信息
voidRevalue(Student*stu,Course*C,SC*S)
{charsn[20],cn[20];Student*p;Course*q;SC*r;
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<<"对不起!
无该名学生的信息!
"<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<<"对不起!
您输入的课程信息有误!
"<}r=S->next;
do
{if(strcmp(r->Sno,sn)==0&&strcmp(r->Cno,cn)==0)
{
cout<<"该名学生的当前选课信息为:
"<cout<<"|学号|课程号|成绩|"<cout<<"|Sno|Cno|Grade"<printf("|%13s|%17s|%13d|\n",r->Sno,r->Cno,r->Grade);
break;
}r=r->next;
}while(r!
=NULL);
if(r==NULL)
{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<<"对不起!
您的输入有误!
"<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<<"对不起!
您输入的课程信息有误!
"<strcpy(r->Sno,sn);strcpy(r->Cno,cn);
cout<<"成绩:
";cin>>r->Grade;cout<<"修改成功!
"<}
16、添加选课信息
voidAddSC(Student*stu,Course*C,SC*S)
{charsn[20],cn[20];Student*p;Course*q;SC*r,*s;intGrade;r=S;
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<<"对不起!
不存在该名学生,您不能添加其选课信息!
"<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<<"对不起!
您输入的课程信息有误!
"<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<<"添加成功!
"<}
17、查询个人平均成绩
voidQueryAva(Student*stu,SC*S)
{floatm=0;Student*p;SC*q;charsn[20];floatn=0;inti=0;
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<<"该名学生的平均成绩为:
"<}
}
18、查询某个系所有学生的成绩
voidQueryDepart(Student*stu,SC*S)
{charSdept[4];Student*p;SC*q;inti=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<<"|Sname|Sno|Cno|Grade|"<cout<<"|"<Sname<<"|"<Sno<<"|"<Cno<<"|";
cout<Grade<<"|"<next;
}while(q!
=NULL);
}p=p->next;
}while(p!
=NULL);
if(i==0)
{cout<<"对不起!
没有您需要的信息!
"<}
19、查询某课程的平均成绩
voidQuerySCL(Course*C,SC*S)
{charcn[20],cn1[20];floatm=0;floati=0;Course*q;SC*r;
cout<<"请输入您所要查询的课程号或课程名!
"<>cn;
q=C->next;
do
{if(strcmp(q->Cno,cn)==0||st