学生选修课程系统设计
学生选修课程系统设计课程设计
一、课程设计的内容
题目四:学生选修课程系统设计
假定有n 门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课) ,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能: 1、系统以菜单方式工作
2、课程信息录入功能(课程信息用文件保存) 3、课程信息浏览功能 4、课程信息查询功能 查询方式 按学分查询 按课程性质查询
5、学生选修课程 (可选项)
二、课程设计的要求与数据
1. 进一步掌握和利用C语言进行课程设计的能力 2. 进一步理解和运用结构化程序设计的思想和方法 3. 初步掌握开发一个小型实用系统的基本方法 4. 学会调试一个较长程序的基本方法 5. 学会利用流程图和N-S图表示算法 6. 掌握书写程序设计开发文当的能力
三、课程设计应完成的工作
1、 编写完成相应题目的程序
2、 编写课程设计报告,课程设计报告应该包含以下6部分
1) 2) 3) 4)
需求分析:包括设计题目、设计要求以及系统功能需求分析 总体设计:包括系统总体设计框架和系统功能模块图
详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图 调试分析过程描述:包括测试数据、测试输出结果以及对程序测试过程中存在问题进行思考(主要问题的出错现象、出错原因、解决方法及其效果等,相应效果截图)
5) 总结:课程设计完成了哪些主要功能,是否有扩展功能?还有哪些地方
需要改进?课程设计的学习与体会?有哪些合理化建议?
6) 附录:主要原程序代码含必要的注释
3、答辩:在实验室建立程序运行环境,并在指导教师的监督下,独立解决问题,运行程序和回答教师的提问。
四、课程设计进程安排
五、应收集的资料及其主要参考文献
[1] 谭浩强.C程序设计(第三版)[M]北京:清华大学出版社,2005年9月
[2] 谭浩强.C程序设计题解与上机指导(第三版)[M]北京:清华大学出版社,2005
年7月
发出任务日期:2011年9月20日 指导教师签名:
计划完成日期:2011年12月31日 基层教学单位责任人签名:
主管院长签章
目 录
1. 设计目的与要求…………………………………………………4 2. 总体设计…………………………………………………………5 3. 详细设计…………………………………………………………5 3.1功能模块设计………………………………………………5 3.2数据结构设计………………………………………………5 4. 调试分析…………………………………………………………9 5. 总结………………………………………………………………9 6. 附录(程序)……………………………………………………10 7. 答辩记录(正文处留出适当空白)……………………………17 8. 指导教师意见(正文处留出适当空白)………………………17
1. 目的与要求
当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息系统的环境。计算机的最到好处的于利用它能够进行信息管理,使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好学生选课信息而设计的。
数据处理手工操作,工作量大,出错率高,出错后不易更改,造成了时间上的浪费。 基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。
通过课程设计的实践环节的教学,可以加深对课堂所学基础知识的掌握与理解,提高对所学内容的综合运用能力;同时也可以通过查询相关资料,培养自学能力、接受新知识的能力,提高学习兴趣;增强程序设计能力,掌握编程技巧,并可培养实际上机调试程序的能力。“理论与实践”相结合,为此得到很好的锻炼,为以后学习、工作打下坚实的基础。
2. 总体设计
模块功能介绍
题目:学生选修课程系统设计:
课程信息包括:课程编号、课程名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期等。
根据题目要求,可以将系统分为六个模块:
1) 系统以菜单方式工作模块; 2) 课程信息与学生选课信息录入功能模块; 3) 课程信息浏览功能模块; 4) 查询模块; 5) 某些课程学生选修情况模块。
3. 详细设计
各个系统得流程图及其运行结果
主菜单功能
选课信息录入
选课信息查询
选课学生统计
进入选课操作
4. 调试分析
1. 未定义而先使用。
2. 同类型的指针混用。
3. 不知道如何使型参与实参一一对应。
4. 调试程序事出现了死循环,只有重新推出主菜单界面再检查错误再进行调试。 5. 在调试没运行完自动跳出主界面:解决方法:是由于系统的问题,在遇到float 型数据时会出现系统错误。
5. 总结
通过该系统的课程设计分析,掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法,掌握和提高了运用C 语言进行程序设计的能力。
程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做流程,在
程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序。
对于一个较大的应用程序,我们一般不可能一次就设计出一个很完善的系统。通常要先设计满足基本要求的系统,然后再测试或者在使用的过程中不断完善,慢慢地做成一个功能很完善选修课程管理系统。
本程序达到了C 语言课程设计题目的要求。即本程序(1)系统一菜单方式工作(2)课程信息和学生选课信息录入功能(课程信息用文件保存输入(3)课程信息浏览功能——输出(4)查询功能(至少一种查询方式)——算法(5)某门课程学生选修情况(可选项)的功能要求。
但是,程序功能仍然不够完善。例如信息表达方式不丰富,比较单一,缺少图片、音乐等元化表达方式。再如程序某些部分输入错误会导致程序中止或转向其他功能模块,即程序建议用户注意提示,进行合理的准确的输入,才不会使得程序出现死循环,这样更有利于管理工作。
6. 附录
程序清单
#include #include #include
struct course { int num; char name[20]; char kind[10]; int time; int ttime; int etime; int mark; int term; };
struct student
{ int snum; int cnum; char cname[20]; };
/*课程信息录入*/ void insert() { void main(); FILE *fp; struct course c; int count; int i; if((fp=fopen("course.txt","a+"))==NULL) { printf("cannot open file\n"); } printf("\n请输入课程门数:\n"); scanf("%d",&count); printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期:\n"); for(i=0;i
/*课程信息浏览*/ void browser() { void main(); FILE *fp; struct course c; int a; if((fp=fopen("course.txt","r"))==NULL)
{ printf("\nCannot open course!\n"); } printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期:\n"); for(;!feof(fp);) { fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.time,c.ttime,c.etime,c.mark,c.term); } fclose(fp); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) main(); else exit(0); }
/*课程信息查询*/ void search() { void main(); FILE *fp; struct course c; int score; char kind[10]; int a; int b; printf("1.按学分查询,2. 按课程性质查询.\n"); printf("请选择查询方式,输入选项数字:"); scanf("%d",&b); if(b==1) { printf("\n请输入您要查询的学分:\n"); scanf("%d",&score); if((fp=fopen("course.txt","r"))==NULL) { printf("\nCannot open course!\n");
} printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期:\n"); for(;!feof(fp);) { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); if(c.mark==score) printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.time,c.ttime,c.etime,c.mark,c.term); } } else if(b==2){ printf("\n请输入您要查询的课程性质:\n"); scanf("%s",&kind); if((fp=fopen("course.txt","r"))==NULL) { printf("\nCannot open course!\n"); } printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期:\n"); for(;!feof(fp);) { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); if(strcmp(c.kind,kind)==0) printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.time,c.ttime,c.etime,c.mark,c.term); } } else{ printf("输入错误!"); exit(1); } fclose(fp); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) main(); else
exit(0); }
/*统计选课情况*/
void xuanke_information() { void main(); int total=0; int a; FILE *fp; struct student s; if((fp=fopen("student.txt","r"))==NULL) { printf("\nCannot open student!\n"); } printf(" 学号 课程编号 课程名称\n"); for(;!feof(fp);) { fscanf(fp,"%d%d%s\n",&s.snum,&s.cnum,&s.cname); total++; printf("%7d%9d%13s\n",s.snum,s.cnum,s.cname); } printf("\n选课学生总人数为:%d 人",total); fclose(fp); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) main(); else exit(0); }
/*学生选修课程*/ void xuan_ke() { void main(); struct student s; struct course c; int a; FILE *fp; printf("\n请输入您的学号及您要选择的课程编号:"); scanf("%d%d",&s.snum,&s.cnum); if((fp=fopen("course.txt","r"))==NULL) {
printf("\nCannot open course!\n"); } for(;!feof(fp);) { fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); if(s.cnum==c.num) break; } fclose(fp); if((fp=fopen("student.txt","a+"))==NULL) { printf("\nCannot open student!\n"); } fprintf(fp,"%d %d %s\n",s.snum,s.cnum,c.name); fclose(fp); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) main(); else exit(0); }
/*主菜单*/ void main() { int n,w=0; printf("********************************************************************************\n"); printf(" 学生选课系统菜单 \n"); printf("********************************************************************************\n"); printf(" 1-录入选课信息 \n"); printf(" 2-浏览选课信息 \n"); printf(" 3-查询选课信息 \n"); printf(" 4-统计选课情况 \n"); printf(" 5-进入选课操作
\n"); printf(" 0-退出选课系统 \n"); printf("********************************************************************************\n"); printf(" 请选择输入选项前数字:"); scanf("%d",&n); do { if(n>5||n
8. 答辩记录
9、 指导教师意见