武夷学院课程设计报告课程名称:C语言程序设计设计题目:学生选课管理系统学生班级:2014级计算机科学与技术2班学生姓名:=指导教师:完成日期:2015-1-9数学与计算机学院课程设计项目研究报告目录第 1 章项目简介 (03)1.1 项目名称 (03)1.2 开发人员 (03)1.3 指导教师 (03)第 2 章项目研究意义 (03)2.1 课程设计概述 (03)2.2 需求分析 (03)2.3 研究意义 (04)第 3 章采用的技术 (04)3.1 课程设计的方案设计论证 (04)3.2 流程描述或代码描述 (05)3.3 部分重要算法设计06第4 章课程设计项目进度表 (07)第5 章课程设计任务分配表 (08)第6 章达到的效果 (08)6.1 程序设计思想 (08)6.2 程序最终实现结果 (09)第7 章源程序 (11)第8 章附录 (14)8.1 学生选课登记管理系统 (14)第9 章设计心得 (15)第10 章参考文献 (15)第 1 章项目简介1.1 项目名称学生选课管理系统1.2 开发人员2014计算机科学与技术刘雪涓王芬岚王小倩王林峰丁义勋1.3 指导教师程仁贵第 2 章项目研究意义2.1 课程设计概述学生选课管理系统是学生管理的一个重要环节,程序是在Microsoft VC++上执行的。
该程序为学生提供选修课程。
1.假定有n门的课程,每门课程都有编号、课程名称、课程性质、(专业选修课、公关课)、总学时、总学分、理论学时、已选修本课程学生人数等信息;每门课最多允许60个学生选修。
2.选修信息文件,用来保存每个学生选修课程的信息,每条记录包括:学生的学号、所选修的课程编号和课程名称。
3.系统以菜单的方式工作(需要输入功能号码,进入功能模块程序。
)4.用函数分别实现动态链表的建立、动态链表输出等功能。
5.界面友好,程序中加入必要的注释。
6.学生选修一门课后,要同时更新课程信息和选修信息文件。
.2.2 需求分析当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用与信息系统的环境。
计算机的最到好处的是利用它能够进行信息管理,使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好学生选课信息而设计的。
数据处理手工操作,工作量大,出错率高,出错后不易更改,造成了时间上的浪费。
基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。
2.3 研究意义该系统的实际实现学生选课信息关系的系统化,规范化和自动化。
学生选课系统要求处理的开发性,方便老师上传学生成绩,学生上网选课和查询选课信息及成绩。
采用这样的系统即可以小范围的处理信息有可疑根据业务规则和数据处理逻辑的集中在服务器上统一管理,客户端无需进行复杂的计算,也不会因为复杂的操作而影响到其他用户。
所以具有较强的可靠性,稳定性。
在功能方面,可实现学生选课注册。
可对学生成绩档案进行管理,成绩表单生成简便。
安全有效的进行用户区分和管理档案数据也更加具有保密性和安全性。
使用起来稳定,操作性能好,惭怍方法又易于掌握,系统安全性强,所以该系统很值得研究开发。
………………..第 3 章采用的技术3.1 课程设计的方案设计论证1.简洁明了的程序菜单。
程序主要采用了六组层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。
2.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。
程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地进行程序的操作。
3.智能化的模块设计。
程序的智能化主要体现在减少了许多人工操作。
如功能模块操作结束后,均会返回主菜单进行下一模板的运行,并提示是否再进行类似的操作,这样给用户带来了操作的方便,大大提高了学生选课的效率。
本程序达到了C语言课程设计题目的所有要求。
即本程序(1)系统一菜单方式工作(2)课程信息和学生选课信息录入功能(课程信息用文件保存输入(3)课程信息浏览功能——输出(4)查询功能(至少一种查询方式)——算法(5)按学分查询(6)某门课程学生选修情况(可选项)的功能要求。
与此同时,程序各模块开发设计依据了程序的具体实际的使用情景,而有所改进,使其更具有实用性。
3.2 流程描述或伪代码描述.3.3部分重要算法设计:【1】void overview(); //浏览函数,负责浏览整个课程信息void seek(); //查询函数,负责查询课程信息void choose_course();//选课函数,负责让用户选课void out(type temp);void input();int main(){int n,i;if((fp1=fopen("course_information.txt","wb"))==NULL){printf("创建文件失败!\n");exit(0);}printf("请输入要存储的课程数目:\n");【2】while((scanf("%d",&n))!=EOF){if(n==1)overview();if(n==2)seek();if(n==3)choose_course();if(n==0)exit(0);printf("\n\n如想继续操作,只要按规则输入你要进行的操作即可!\n规则:如想浏览整个课程信息,请输入1;如想查询课程信息,请输入2;如想进行选课,请输入3!\n");【3】void overview(){rewind(fp1);course temp;printf("整个课程信息如下:\n");while((fread(&temp,sizeof(type),1,fp1))!=0)out(temp);}void seek(){int judge,credit=0,kind=0;char a='N';course temp;printf("如想按学分查询,请输入1;如想按课程性质,请输入2:\n");scanf("%d",&judge);rewind(fp1); //将文件指针位置置为开头if(judge==1)【4】while((fread(&temp,sizeof(type),1,fp1))!=0){for(int i=0;i<n;i++)if(strcmp(temp.number,choose[i])==0){time=time+temp.time;credit=temp.credit;break;}}if(time<270||credit<40)goto r1;printf("你所选的课为:\n");while((fread(&temp,sizeof(type),1,fp1))!=0){for(int i=0;i<n;i++)if(strcmp(temp.number,choose[i])==0){out(temp);break;}第4 章课程设计项目进度表第5 章课程设计任务分配表第6 章达到的效果6.1 程序设计思想为了让程序更加精简在算法上采用了结构体数组外考虑在程序的算法设计上引入了链表结构,考虑这样对数据组织存储效率上会有提高作用。
为了不让某些程序部分输入错误会导致程序终止或转向其他功能模块,采用对每个数据输入段代码进行更深的研究与分析,明确变量的类型、可能的数值,然后进行分类判断(if 或switch语句),必要时借助for循环语句来控制程序进行,保障各模块运行相对独立,稳定准确执行各自功能。
典型方法是如果输入数据错误,通过printf输出问题,并用for或while构成循环,输入三次以上程序自动跳出主菜单或直到用户输入正确为止。
6.2 程序最终实现结果第7 章源程序#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct course{char number[15],name[25];int kind,time,lessontime,practicetime,credit,term;}type;FILE *fp1;void overview(); //浏览函数,负责浏览整个课程信息void seek(); //查询函数,负责查询课程信息void choose_course();//选课函数,负责让用户选课void out(type temp);void input();int main(){int n,i;if((fp1=fopen("course_information.txt","wb"))==NULL){printf("创建文件失败!\n");exit(0);}printf("请输入要存储的课程数目:\n");scanf("%d",&n);printf("开始创建文件,请输入课程信息:\n\n");for(i=0;i<n;i++){printf("请输入第%d门课程的信息:\n",i+1);input();printf("\n");}printf("如想浏览整个课程信息,请输入1;如想查询课程信息,请输入2;如想进行选课,请输入3;如想结束选修课系统,请输入0!\n");while((scanf("%d",&n))!=EOF){if(n==1)overview();if(n==2)seek();if(n==3)choose_course();if(n==0)exit(0);printf("\n\n如想继续操作,只要按规则输入你要进行的操作即可!\n规则:如想浏览整个课程信息,请输入1;如想查询课程信息,请输入2;如想进行选课,请输入3!\n");}printf("欢迎您使用此程序进行选课,谢谢!\n");fclose(fp1);return 0;}void input(){course c_a;printf("请输入课程编码: ");scanf("%s",c_a.number);printf("请输入课程名: ");scanf("%s",c_);printf("请输入课程性质:限选课,请输入1;选修课,请输入2;必修课,请输入3! ");scanf("%d",&c_);printf("请输入课程总学时: ");scanf("%d",&c_a.time);printf("请输入课程授课时间: ");scanf("%d",&c_a.lessontime);printf("请输入课程实验或实践时间: ");scanf("%d",&c_a.practicetime);printf("请输入课程学分: ");scanf("%d",&c_a.credit);printf("请输入课程所在的学期,比如第二学期,就输入2即可。