1、学生选课管理系统范文272020年4月19日文档仅供参考,不当之处,请联系改正。 年度第 二 学期赣南师范学院数学与计算机科学学院课程设计报告册课程设计名称:学生选课管理系统专 业:计算机科学与技术班 级:学 号:姓 名:指 导 老 师:课程设计任务一览表序号课程设计任务名称设计专题任务描述(可附页)1学生选课信息管理系统为选课信息管理人员和学生编写一个学生选课信息管理系统,实现选课信息的查询、修改、删除、添加以及学生课程成绩的查询等功能。2345指导用书:_算法与数据结构课程设计_课程设计报告设计项目编 号1名 称学生选课信息管理系统主要仪器设备一台PC机附属设备主要使用软件Visual C
2、+ 6.0 编程软件起止时间 3月 9 日 5 月 30日 同组人课程设计任务书1 系统的功能描述(10分)2 系统的主要功能模块算法设计(30分)3 系统的各函数设计(20分)4 系统的编码(20分)5 系统的运行(10分)6 系统的主要功能模块算法性能分析(10分)课 程 设 计 报 告一、系统的功能描述经过此选课系统能够实现如下功能: 输入数据:能够由用户输入学生信息、课程信息、选课信息建立各信息表; 查询各信息表:能够查询学生信息表内的学生的个人信息,课程表里的课程信息和选课表里的选课信息; 查询学生个人信息、学生单科目成绩、个人总成绩; 删除、修改、添加选课信息; 查询学生个人平均成
3、绩、系内所有学生成绩、某课程平均成绩;二、系统的主要功能模块算法设计根据实际情况,对上述要求做以下简化:1,首先需要客户为系统输入各表信息。2,查询或删除时只能查询或删除表内存在的信息,若表中不存在则报错。3,各表信息由线性表实现,各表内信息按用户输入时的顺序存放。程序中包含4 个模块(1)主程序模块; (2)学生个人信息结构单元模块-定义各学生个人信息的结构体类型;(3)课程信息结构单元模块-定义各课程信息的结构体类型;(4)选课信息结构单元模块-定义各选课信息的结构体类型;(5)功能模块-实现查询、修改、删除、添加信息,查询学生各个课程成绩等功能.主要功能模块算法详细如下:1、定义学生对象
4、结构体类型typedef struct node char Sno10; char Sname10; char Ssex3; char Sage3; char Sdept4; struct node *next;Student;2、定义课程对象结构体类型typedef struct node2 char Cno10; char Cname10; char Cpno5; char Ccredit3; struct node2 *next;Course;3、定义选课对象结构体类型typedef struct node3 char Sno10;char Cno10;int Grade; struct
5、 node3 *next;SC;4、初始化学生信息表、课程信息表、选课信息表void InitlistA(Student *stu) stu-next=NULL;void InitlistB(Course *C) C-next=NULL;void InitlistC(SC *S) S-next=NULL;5、求选课表长度int Getlength(SC *S) int i=0;SC *p;p=S-next;while(p!=NULL)p=p-next;i+;return(i);6、用户输入数据建立学生信息表(尾插法)void CreatelistA(Student *stu) Student
6、*s,*r;int m,i;r=stu; cout现在输入学生信息endl;coutm;cout| 学号 | 姓名 | 性别 | 年龄 | 所在系 |endl;for(i=0;is-Sno;cins-Sname;cins-Ssex;cins-Sage;cins-Sdept;r-next=s;r=s;r-next=NULL;7、 由用户输入数据建立课程信息列表void CreatelistB(Course *C) Course *s,*r;r=C;int m,i;cout现在输入课程信息endl;coutm;cout| 课程号 | 课程名 | 先行课 | 学分 |endl;for(i=0;is-
7、Cno;cins-Cname;cins-Cpno;cins-Ccredit; r-next=s;r=s;r-next=NULL;8、由用户输入数据建立选课信息列表void CreatelistC(SC *S) SC *q,*r;r=S;int m,i;cout现在输入选课信息endl;coutm;cout| 学号 | 课程号 | 成绩 |endl;for(i=0;iq-Sno;cinq-Cno;cinq-Grade; r-next=q;r=q;r-next=NULL;9、输出学生信息表void DisplistA(Student *stu) Student *p=stu-next;cout学生
8、信息表endl;cout| 学号 | 姓名 | 性别 | 年龄 | 所在系 |endl;cout| Sno | Sname | Ssex | Sage | Sdept |Sno,p-Sname,p-Ssex,p-Sage,p-Sdept);p=p-next;10、输出选课信息表void DisplistC(SC *S) if(Getlength(S)=0)cout对不起!选课信息表已为空!next; cout选课信息表endl; cout| 学号 | 课程号 | 成绩 |endl; cout| Sno | Cno | Grade |Sno,p-Cno,p-Grade); p=p-next;11
9、、查询学生个人基本信息,以姓名或学号为参数void QueryStudent(Student *stu) int i=0;char sn20;Student *p;p=stu-next;cout请输入所要查询的学生的学号或姓名endl;coutsn;do if(strcmp(p-Sname,sn)=0|strcmp(p-Sno,sn)=0)cout| 学号 | 姓名 | 性别 | 年龄 | 所在系 |endl; cout| Sno | Sname | Ssex | Sage | Sdept |Sno,p-Sname,p-Ssex,p-Sage,p-Sdept);break;p=p-next;/
10、注意指针要往后走while(p!=NULL);if(p=NULL)cout对不起!无此学生的信息!next;cout请输入所要查询的学生的学号和课程号endl;coutsn;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 ;coutcn;q=C-next;/将课程名计算转化成为课程号do if(strcmp(q-Cno,cn)=0 |
11、strcmp(q-Cname,cn)=0)strcpy(cn,q-Cno);break;q=q-next;while(q!=NULL);if(q=NULL)cout对不起!您输入的课程信息有误!next;do if(strcmp(r-Sno,sn)=0 & strcmp(r-Cno,cn)=0) cout| 学号 | 课程号 | 成绩 |endl; cout| Sno | Cno | Grade Sno,r-Cno,r-Grade);break;r=r-next;while(r!=NULL);if(r=NULL)cout对不起!该学生没有参加这门课程的考试!endl;9、 查询学生个人总成绩v
12、oid QuerySUM(Student *stu,SC *S) Student *p;SC *q;char sn20;float n=0;int i=0;cout请输入要查询的学生的信息!endl;coutsn;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对不起!无该名学生的信息!next; do if(strcmp(q-Sno,sn)=0)n=n+q-Grade;i+; q=q-next;whil
13、e(q!=NULL); if(n=0)cout该名学生没有参加考试!endl; elsecout该名学生的总成绩为:nendl;10、 删除选课信息void DeleteSC(Student *stu,Course *C,SC *S) char sn20;char cn20;Student *p;Course *q;SC *r;SC *t;cout请输入要删除的信息中学生学号或姓名和课程号或课程名!endl;coutsn;p=stu-next;/检查是否存在这名学生doif(strcmp(p-Sno,sn)=0 | strcmp(p-Sname,sn)=0)strcpy(sn,p-Sno);b
14、reak;p=p-next;/注意指针要往后走while(p!=NULL);if(p=NULL)cout对不起!无该名学生的信息!endl;return ; coutcn; 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对不起!您输入的课程信息有误!next; doif(strcmp(r-Sno,sn)=0 & strcmp(r-Cno,cn)=0) t-next=r-next;f
15、ree(r); cout删除成功!next; r=r-next;while(r!=NULL);if(r=NULL)cout对不起!原表中没有您要删除的选课信息!endl;11、 修改选课信息void Revalue(Student *stu,Course *C,SC *S)char sn20,cn20;Student *p;Course *q;SC *r;cout请输入您所要修改的学生或姓名和课程号或课程名!endl;coutsn;p=stu-next;/检查是否存在这名学生,若存在则将姓名转换为对应的学号doif(strcmp(p-Sno,sn)=0 | strcmp(p-Sname,sn)
16、=0)strcpy(sn,p-Sno);break;p=p-next;while(p!=NULL);if(p=NULL)cout对不起!无该名学生的信息!endl;return ; coutcn; q=C-next;/检查是否存在这门课程,若存在则将课程名转换为对应的课程号 doif(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对不起!您输入的课程信息有误!next; doif(strcmp(r-Sno,sn)=0 & strcmp
17、(r-Cno,cn)=0) cout该名学生的当前选课信息为:endl; cout| 学号 | 课程号 | 成绩 |endl; cout| Sno | Cno | Grade Sno,r-Cno,r-Grade); break;r=r-next;while(r!=NULL);if(r=NULL)cout对不起!没有您要修改的选课信息!endl;return ; cout请您重置该名学生的选课信息!endl;coutsn; p=stu-next;/检查学生信息表中是否存在这名学生do if(strcmp(p-Sno,sn)=0 | strcmp(p-Sname,sn)=0)strcpy(sn,p
18、-Sno);break;p=p-next;while(p!=NULL);if(p=NULL)cout对不起!您的输入有误!endl;return ; coutcn;q=C-next;/检查是否存在这门课程,若存在则将课程名转换为对应的课程号 doif(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对不起!您输入的课程信息有误!Sno,sn);strcpy(r-Cno,cn); coutr-Grade; cout修改成功!endl;12
19、、 添加选课信息void AddSC(Student *stu,Course *C,SC *S)char sn20,cn20;Student *p;Course *q;SC *r,*s;int Grade;r=S;cout请输入信息:endl;coutsn;p=stu-next;/检查是否存在这名学生,若存在则将姓名转换为对应的学号doif(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对不起!不存在该名学生,您不能添加其选课信息!en
20、dl;return ;coutcn;q=C-next;doif(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);coutGrade;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;
21、cout添加成功!endl;13、 查询个人平均成绩void QueryAva(Student *stu,SC *S)float m=0;Student *p;SC *q;char sn20;float n=0;int i=0;cout请输入要查询的学生的信息!endl;coutsn;p=stu-next;doif(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对不起!无该名学生的信息!next; doif(strcmp(q-Sno,sn)
22、=0)n=n+q-Grade;i+; q=q-next;while(q!=NULL); if(n=0)cout该名学生没有参加考试!endl; elsecout该名学生的平均成绩为:n/iendl;14、 查询某个系所有学生的成绩void QueryDepart(Student *stu,SC *S) char Sdept4;Student *p;SC *q;int i=0;coutSdept;p=stu-next;doif(strcmp(p-Sdept,Sdept)=0)q=S-next;do if(strcmp(q-Sno,p-Sno)=0) cout| 姓名 | 学号 | 课程号 | 成
23、绩 |endl; cout| Sname | Sno | Cno | Grade |endl; cout| Sname | Sno | Cno | ; coutGrade |next;while(q!=NULL);p=p-next;while(p!=NULL);if(i=0)cout对不起!没有您需要的信息!endl;15、 查询某课程的平均成绩void QuerySCL(Course *C,SC *S) char cn20,cn120;float m=0;float i=0;Course *q;SC *r;cout请输入您所要查询的课程号或课程名!cn;q=C-next;doif(strcm
24、p(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对不起!您输入的课程信息有误!next;doif(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 的平均成绩是:mSno,95001);strcpy(q-Sname,李勇);st
25、rcpy(q-Ssex,男);strcpy(q-Sage,20);strcpy(q-Sdept,CS);q-next=p-next;p-next=q;p=p-next;17、 由系统对课程信息表赋初值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;18、 由系统对选课信息表赋初值v
26、oid 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;19、 选择函数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)
27、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);三、 系统的各函数设计1、初始化学生信息表void InitlistA()2、初始化课程信息表void Initli
28、stB()3、初始化选课信息表void InitlistC()4、求选课表的深度int Getlength()5、用户输入数据建立学生信息表void CreatelistA()6、由用户输入数据建立课程信息列表void CreatelistB()7、由用户输入数据建立选课信息列表void CreatelistC()8、输出学生信息表void DisplistA()9、输出课程信息表void DisplistB()10、 输出选课信息表void DisplistC()11、 查询学生个人基本信息void QueryStudent()12、 查询学生单科目的成绩void QuerySC()13、
29、查询学生个人总成绩void QuerySUM()14、 删除选课信息void DeleteSC()15、 修改选课信息void Revalue()16、 添加选课信息void AddSC()17、 查询个人平均成绩void QueryAva()18、 查询某个系所有学生的成绩void QueryDepart()19、 查询某课程的平均成绩void QuerySCL()四 系统的编码源程序:#include#include#include#include#include/定义学生对象类型typedef struct node char Sno10; /学号char Sname10; /姓名cha
30、r Ssex3; /性别char Sage3; /年龄char Sdept4; /所在系struct node *next;Student;/定义课程对象类型typedef struct node2 char Cno10; /课程号char Cname10; /课程名char Cpno5; /先行课char Ccredit3; /学分struct node2 *next;Course;/定义选课对象类型typedef struct node3 char Sno10;char Cno10;int Grade;struct node3 *next;SC;/初始化学生信息表void Initlist
31、A(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;
32、coutm;cout| 学号 | 姓名 | 性别 | 年龄 | 所在系 |endl;for(i=0;is-Sno;cins-Sname;cins-Ssex;cins-Sage;cins-Sdept;r-next=s;r=s;r-next=NULL;/由用户输入数据建立课程信息列表void CreatelistB(Course *C)Course *s,*r;r=C;int m,i;cout现在输入课程信息endl;coutm;cout| 课程号 | 课程名 | 先行课 | 学分 |endl;for(i=0;is-Cno;cins-Cname;cins-Cpno;cins-Ccredit; r-next=s; r=s;r-next=NULL;/由用户输入数据建立选课信息列表void CreatelistC(SC *S)SC *q,*r;r=S;int m,i;cout现在输入选课信息endl;coutm;cout| 学号 | 课程号 | 成绩 |endl;for(i=0;iq-Sno;cinq-Cno;cinq-Grade; r-next=q;r=q;r-next=NULL;/输出学生信息表void DisplistA(Student *stu)Student *p=stu-next;cout学生信息表endl;cout_endl;cout| 学号