资源描述
武 夷 学 院
课程设计报告
课程名称:
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
数学与计算机学院 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 章 课程设计项目进度表
日期
完成的工作
2015-1-5
项目可行性研究,研究报告
2015-1-6
数据采集,确定表格,数据类型,系统开发技术,运行环境
2015-1-7
子模块的程序设计和调试
2015-1-8
系统联合调试,撰写课程设计总结报告
2015-1-9
交课程设计纸质和电子版材料
第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_a.name);
printf("请输入课程性质:限选课,请输入1;选修课,请输入2;必修课,请输入3! ");
scanf("%d",&c_a.name);
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即可。");
scanf("%d",&c_a.term);
fwrite(&c_a,sizeof(struct course),1,fp1);//将一个结构体元素写入文件中
}
void out(type temp)
{
printf("课程代码: %s\n课程名: %s\n",temp.number,temp.name);
printf("课程名: %s\n",temp.name);
if(temp.kind==1)
printf("课程性质: Limited optional course\n");
else if(temp.kind==2)
printf("课程性质: Optional course\n");
else if(temp.kind==3)
printf("课程性质: Required Courses\n");
else
printf("该编码系统不认识,即无对应的课程性质存在!\n");
printf("课程总学时: %d\n课程授课学时: %d\n实验或上机学时: %d\n学分: %d\n课程开课学期: %d\n\n",temp.time,temp.lessontime,temp.practicetime,temp.credit,temp.term);
}
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)
{
printf("请输入要查询的学分:\n");
scanf("%d",&credit);
while((fread(&temp,sizeof(type),1,fp1))!=0)
if(credit==temp.credit)
out(temp);
}
else if(judge==2)
{
printf("请输入你要查找课程的性质(限选课,请输入1;选修课,请输入2;必修课,请输入3):");
scanf("%d",&kind);
while((fread(&temp,sizeof(type),1,fp1))!=0)
if(temp.kind==kind)
out(temp);
}
else
printf("不好意思,无此类查询!\n");
}
void choose_course()
{
rewind(fp1);
course temp;
int judge=1,n=0,time=0,credit=0;
char choose[20][20];
r1: printf("请开始填写课程编号进行选课:\n");
while(judge==1)
{
printf("请输入你所选课程的标号: ");
scanf("%s",choose[n]);
n++;
printf("如想继续选课,请输入1;如想提交,请输入0!\n");
scanf("%d",&judge);
}
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;}
}
}
第8 章 附录
8.1 学生选课登记管理系统表
课程编码
课程名
课程性质
课程总学时
授课时间
实践时间
学期
学分
001
jiaoyu
2
18
56
56
2014-2015
第2学期
100
002
kexue
1
18
56
56
2014-2015
第2学期
100
003
Kexue
2
18
56
56
2014-2015
第2学期
100
004
lvyouxue
2
18
78
78
2014-2015
第2学期
100
005
guanglixue
2
18
56
56
2014-2015
第2学期
100
第9 章 设计心得
这次的课程设计实验是对我们进入大学以来学习c语言结果的一次大考验。自己动手,发现问题和解决问题。并发现了许多自己的不足,平时没掌握的知识在实践中暴漏,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分问题,还稍微有些小问题。但是,我相信经过深入的的学习,一定能把它解决好。我们不仅巩固《c语言程序设计》课程学习的内容,掌握设计的基本方法,强化上机动手能力,还进一步掌握以下了知识:数据类型、分支控制、循环控制、函数的定义及调用、结构体及数组、指针、文件操作、编译预处理等;通过课程设计,掌握了程序的局部测试、调试方法,建立程序系统调试、测试的基本概念和思想,学会较大程序的系统测试和调试方法。
团队精神不可少,分工合作也是必须的。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。更重要的是,这次课程设计虽然花了我不少时间,但正是这些时间,
让我见识到了C语言的重要性。这个学生选修课程管理系统都是在自己知识范围内完
成的,所以界面清晰简单,从这里我也得到一个体会,做一个程序,或者开发一个软件,应该着重从它的后台制作入手,不能做出一个中看不中用的程序或者软件。相信这次的课程设计会为我们以后继续从事计算机工作打了一个小小的开头。
第10 章 参考文献
[1] 计算机基础,高等教育出版社,2003年
[2] C语言程序设计,哈尔滨工程大学出版社,2013年
展开阅读全文