1、 合肥工业大学 课程设计报告 设计题目: 学生选课系统 学生姓名: 专 业: 计算机科学与技术 班 级: 学 号: 指导教师: 完成日期: 2011 年 7 月 2 日 合肥工业大学计算机与信息学院合肥工业大学计算机与信息学院 第 1 页 共 29 页 (一)(一) 需求和规格说明需求和规格说明 安排研究生课程表。设有 m 个研究生和可选修的 n 门课程, 如果某个研究生选修的两门课程安排在同 一时间内上课,则这两门课程就会发生冲突,要求不冲突地安排课程表。 提示:研究生选课信息可存放在 mn 矩阵 a 中,ai,j= 1 表示研究生 i 选修了课程 j,ai,j=0 表示 研究生 i 未选修
2、了课程 j。 (二)(二) 设计设计 目标: (1)实现选修课系统学生端的几个操作功能(学生选课、学生情况、选课情况、退出系统) 。 (2)实现选修课系统管理端的几个操作功能(增加学生、增加课程、删除学生、删除课程、填写成绩、 更改学分、学生情况、选课情况、保存数据、退出系统) 。 4 总体方案:先定义课程,在此类中先声明课程名称的字符型常量,然后声明课程成绩和指向下一个课程 的指针。 5然后分开开始定义学生类,课程类。在学生类中和课程类中声明要操作的步骤,在学生类中要声 明学生姓名、学生选课、学生成绩、学生的课程平均成绩,最后用链表连接起来。在课程类中声明课程名称, 课程的学分,该课程最多选
3、的人和实际选该科得人,把他们用链表连接起来。 6最后用一个总菜单将学生选 课、学生情况、选课情况、增加学生和课程、删除学生、删除课程等连接,这样程序设计就算完成了。 2-1 选修课管理功能图 系统类图系统类图 选课系统 选修课系统学生端 选修课系统管理端 学 生 选 课 学 生 情 况 选 课 情 况 退 出 系 统 增 加 课 程 增 加 学 生 删 除 学 生 删 除 课 程 填 写 成 绩 更 改 学 分 学 生 情 况 选 课 情 况 保 存 数 据 退 出 系 统 第 2 页 共 29 页 (三)(三) 程序运行平台程序运行平台 VC+6.0。 具体操作如下:打开 VC+6.0,新建
4、一个空工程,添加相应的源文件,再编译,链接,执行。 因为内容过长只选取了其中的一部分作为说明 增加学生 studentdb *newnode = new studentdb 成功后按任意 键返回 增加课程 subjectdb *newnode = new subjectdb; 成功后按任意键 返回 删除学生 coutNext; while(p) if(strcmp(p-cname,N)=0) p-grade = score; p = p-Next; float student:average()/学生课程的平均成绩 float aver=0.0; course *p = root; while
5、 (p) aver = aver+p-grade; aver = aver/factcourse; return aver; void student:addcourse (char N,float g)/给学生增加一门课 course *s = new course; s-Next=NULL; if(root = NULL) 第 6 页 共 29 页 root = s; course *p = root; course *newcourse = new course; newcourse-Next = p-Next; p-Next=newcourse; strcpy(newcourse-cn
6、ame,N); newcourse-grade = g; factcourse+; int student:findcourse (char N)/查找是否已有此课程,如果有返回 1,如果没有返回 0 course *p = root; if(root=NULL) return 0; p = p-Next; while(p) if(strcmp(p-cname,N)=0) return 1; p = p-Next; return 0; / struct studentdb student stu; studentdb *Next; ; struct studentname char tname20; /学生的名字