学生选修课系统设计.docx
- 文档编号:19698796
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:24
- 大小:211.07KB
学生选修课系统设计.docx
《学生选修课系统设计.docx》由会员分享,可在线阅读,更多相关《学生选修课系统设计.docx(24页珍藏版)》请在冰豆网上搜索。
学生选修课系统设计
编号:
C语言课程设计指导书71页第九题
名称:
学生选修课系统设计
【要求】
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课时间,实验或上级时间,学分,开课学期等信息,学生可按要求(如总学分不超过60)自由选课。
是设计一选修课课程系统,使只能提供以下功能:
(1)系统一菜单方式工作
(2)课程信息和学生选课信息录入功能(课程信息用文件保存
输入
(3)课程信息浏览功能——输出
(4)查询功能(至少一种查询方式)——算法
(5)按学分查询
(6)某门课程学生选修情况(可选项)
【提示】
数据结构可用结构体,包括授课和选课两个结构体,其中课程结构体成员包括编号,课程名称,课程性质,总学时,授课学时,实验或上机时间,学分,开课学期。
学秀结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况。
由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。
在编写本程序的过程中,首先借助老师给的指导材料,确定了目标程序运行的次序与界面,即本程序首先运行【用户系统】菜单界面,其次程序运行【用户插入课程信息】及【用户浏览课程】菜单界面,最后程序运行【统计选课信息】及【选课】界面。
如果用户选择【插入用户信息】选项则程序进入出入用户课程信息界面。
需要一次输入课程编号,课程名称,课程性质,总学时,授课时间,实验或上机学时,学分,开课学期等信息;如果用户选择【浏览课程】选项则程序进入【浏览课程】界面,将会显示所选课程的信息;如果用户选择【查询】选项则会显示按学分查询的选课信息;一次用户还可以查看某门课程的所选情况。
其次,根据目标程序运行的次序与界面,确定设计顺利,设计界面(包括各部分菜单与用户提示信息)。
再次是按照程序运行的各界面下的菜单功能编写各功能模块,并调试程序各功能模块,使各模块能够稳定高效准确地完成对应功能。
最后是程序的总体调试及功能完善,此部分从学生选课的角度出发,考虑了更加人性化、更加合理、更加高效准确、更加智能化的设计。
说明:
关于各个功能模块的设计思路及程序运行具体过程见报告的第三、四、五部分。
第三部分:
程序功能模块划分、图示及流程图
3.1系统的结构图
学生可选修课系统
3.2系统的功能模块图
3.3函数模块说明
函数模块
功能说明
insert
插入课程信息
bowser
浏览课程信息
search
查找课程信息
xanke_information
进行选课统计
3.4功能模块说明及其流程图
(1)【插入信息功能】
【设计思路简述】
先检查文件是否为空,若为空,则显示"cannotopenfile"
若不为空,则屏幕显示“theformatisnumnamexingzhi
timettimeetimemarkterm:
:
”及需要一次插入课程编号,课程名称,课程性质,总学时,授课时间,实验或上机学时,学分,开课学期的信息。
填写完这些信息后,程序将关闭所写入文件,并跳入系统菜单进行其他功能的运行。
【模块流程图】
无文件有文件
(2)【浏览信息功能】
【设计思路简述】
如果所浏览信息的文件为空文件,则屏幕显示“cannotopencourse!
”否则会显示以前输入的课程信息(课程编号,课程名称,
课程性质,总学时,授课时间,实验或上机学时,学分,开课学期)。
执行完毕后,程序先关闭浏览文件,再跳入主菜单,进行其他功能的运行。
(3)【查找选课信息功能】
【设计思路简述】
函数首先申明调用“structcoursec”,输出"inputmarkyourwanttosearch:
",即按学分查询所需课程的信息。
若原函数没有文件,则输出“Cannotopencourse!
”,否则将输出所需课程的信息。
接着关闭该文件,程序跳入主菜单进行其他功能的运行。
无文件有文件
(4)【统计选课人数功能】
【设计思路简述】
函数首先调用“structstudentc”,输出“inputcourse-numberyourwanttosearch:
”若原函数为空,则输出“Cannotopenstudent!
”。
否则将输出"Thenumberchoosecourse_num%dis%d!
"(及选择该门课程的同学有几人)。
接着关闭函数,进入系统菜单。
进行其他功能的运行。
(5)【选课功能】
【设计思路简述】
函数运行首先输出“Pleaseinputyourstudent_numberandcoursenumberyouwanttochoose:
”,如果用户输入的信息在原先输入的文件中不存在,则屏幕显示“Cannotopenstudent!
”,否则就选课成功,关闭文件,跳入系统菜单进行其他功能的运行。
(6)【voidmenu()功能】
intn,w=0;
printf("\n\t\tPLEASEENTERANUMBERFROM0TO5!
");
printf("\n\n\n\t**************MENU************");printf("\n\t\t1-insertinformations");
printf("\n\t\t2-browersinformations");
printf("\n\t\t3-searchinformations");
printf("\n\t\t4-xuankeinformations");
printf("\n\t\t5-xuanke");
printf("\n\t\t0-Exitsystem");
printf("\n\n\n\t***************************");printf("\n\n\n\n\n\n\t\tChoosethenumber,please:
");
scanf("%d",&n);
do
{
if(n>5||n<0)
{
printf("\nWrong!
inputagain!
");
scanf("%d",&n);
}
elsew=1;
}while(w==0);
switch(n)
{
case1:
insert();break;
case2:
browser();break;
case3:
search();break;
case4:
xuan_ke();break;
case5:
xuanke_information();break;
case0:
exit(0);
}
}
及系统主菜单界面,依次表示插入课程信息,浏览课程信息,查找选课信息,统计选课情况,进行选课的功能。
最后退出程序。
第四部分:
程序设计数据、运行结果
本程序是一款应用软件,故数据设计、程序运行结果应在程序的运用中得以体现,现在通过一个程序的运用事例来对数据设计、程序运行结果进行演示与实现:
【软件应用举例】
某同学想进入选修课系统进行选课,登录后进入主菜单界面。
程序主菜单界面如下:
进入此界面后,选择1,程序进入插入学生课程信息界面,界面如下:
学生需要一次性连续依次输入课程编号,课程名称,课程性质,总学时,授课时间,实验或上机时间,学分,开课学期的信息,如依次输入1yuwenjichu60352552界面显示如下:
若用户要浏览选课信息,则输入2按回车键,界面显示如下:
若用户要查找课程信息,输入3后按回车键,界面显示如下:
系统及依学分进行查询,输入5后按回车键后界面显示如下:
如果用户要统计选课信息,则可输入4后按回车键,界面显示如下:
界面提示需要用户输入学生学号和课程号,比如输入25后按回车键,界面显示如下:
如果用户要选择选课功能,则输入5按回车键,界面显示如下:
系统以课程号进行查询,如输入5按回车键界面显示如下:
之后用户选课完毕,要退出程序,可直接输入0按回车键。
【程序的优点】
算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。
【算法上的优点】主要体现在以下二点:
1.程序采用模块化设计,程序的主体的功能大都由各功能模块完成。
程序设计模块化有利于程序的进一步改进及有助于程序执行效率的提高。
2.程序执行次序控制、FOR循环、功能模块函数的巧妙结合。
例如[插入课程信息]界面结束,可返回[系统菜单]界面,主要是借助插入信息模块返回的值来实现的。
另外,对结构体数组数据的修改采用了层次明显的程序步骤,有助于相应功能模块的准确高效运行。
当然,程序的源代码为白手写起,历时3天,克服了非常多的困难,感觉到了很大的压力。
程序的源代码是在边看书、边查资料、询问、长期思考与设计、调试、试验的基础上编写出来的,在编写程序的过程中,得到了许多的锻炼,编程的思维也得以塑造。
程序源代码经过数次精简,但仍然比较庞大,应是编程经验不足造成的,虽不能说本程序源代码比他人的类似代码运行效率更高,占有资源更少,但是程序执行的准确性还是能够保障的。
[功能上的优点]主要体现在以下三点:
1.简洁明了的程序菜单。
程序主要采用了六组层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。
2.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。
程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地进行程序的操作。
3.智能化的模块设计。
程序的智能化主要体现在减少了许多人工操作。
如功能模块操作结束后,均会返回主菜单进行下一模板的运行,并提示是否再进行类似的操作,这样给用户带来了操作的方便,大大提高了学生选课的效率。
本程序达到了C语言课程设计题目的所有要求。
即本程序
(1)系统一菜单方式工作
(2)课程信息和学生选课信息录入功能(课程信息用文件保存输入(3)课程信息浏览功能——输出(4)查询功能(至少一种查询方式)——算法(5)按学分查询(6)某门课程学生选修情况(可选项)的功能要求。
与此同时,程序各模块开发设计依据了程序的具体实际的使用情景,而有所改进,使其更具有实用性。
【程序的缺点】主要表现在以下四点:
1.程序虽然经过多次精简,但仅仅是形式上、小围的精简,仍
未得到本质上的精简,即未找到更加简单、更加高效、更加合理、更小占用的资源的算法。
2.程序仍然存在不合理的地方,例如程序某些部分输入错误会导致程序中止或转向其他功能模块,即程序建议用户注意提示,进行合理的准确的输入,这样更有利于管理工作。
3.程序功能仍然不够完善。
例如信息表达方式不丰富,比较单一,缺少图片、音乐等元化表达方式。
本部分主要是针对第五部分[程序的优缺点]提出程序的改进思路。
【针对第一点:
程序算法精简问题】
>>改进思路:
1.算法上除了采用结构体数组外,考虑在程序的算法设计上引入链表结构,考察这样对数据组织存贮效率上是否具有提高作用。
2.就现有知识水平、经验来看,对我来说,本程序的算法设计上已经是最精简的了。
C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。
【针对第二点:
用户输入错误问题】
>>改进思路:
对每个数据输入段代码进行更深的研究与分析,明确变量的类
型、可能的数值,然后进行分类判断(if或switch语句),必要时借助for循环语句来控制程序进行,保障各模块运行相对独立,稳定准确执行各自功能。
典型方法是如果输入数据错误,通过printf输出问题,并用for或(do)while构成循环,输入三次以上程序自动跳出主菜单或直到用户输入正确为止。
【针对第三点:
程序功能完善问题】
>>改进思路:
[插入课程信息模块]设计思路:
可另行设置独立模块,能一次性多输入选课用户,并将其分别存放在文件中,等待用户调用查看浏览和统计。
可增加[选课信息修改的功能模块]设计思路:
首先系统应该正确录入用户多输入的课程信息,再独立设置校该用户选课信息模块,当用户进入菜单后提示用户是否修改选课信息,确定后用户可另行选课,最后提示用户修改成功。
【针对第四点:
操作界面单调问题】
>>改进思路:
C语言是面向过程的语言,当今的主流语言是面向对象的语言,开发的平台大多为WINDOWS界面平台,开发的程序也主要是WINDOWS组件基础之上的图形界面程序,故可将程序要求移植到VC++之上,借助VC++强大的功能,编写WINDOWS界面程序,利用API接口函数方便调用各种WINDOWS强大功能,服务程序,使程序更加丰富、直观、高效,生动。
#include
#include
structcourse
{
intnum;
charname[15];
charxingzhi[10];
inttime;
intttime;
intetime;
intmark;
intterm;
};
structstudent
{
intsnum;
intum;
};
/*insert*/
voidinsert()
{
voidmenu();
FILE*fp;
structcoursec;
if((fp=fopen("course.txt","a+"))==NULL)
{
printf("cannotopenfile\n");
}
printf("\n\tInputcourse'sinformation:
\n");
printf("\ttheformatisnumnamexingzhitimettimeetimemarkterm:
\n");
scanf("%d%s%s%d%d%d%d%d",&c.num,&c.name,&c.xingzhi,&c.time,
&c.ttime,&c.etime,&c.mark,&c.term);
fprintf(fp,"%d%s%s%d%d%d%d%d",c.num,c.name,c.xingzhi,c.time,
c.ttime,c.etime,c.mark,c.term);
fclose(fp);
menu();
}
/*browseliu_lan*/
voidbrowser()
{
voidmenu();
FILE*fp;
structcoursec;
if((fp=fopen("course.txt","r"))==NULL)
{
printf("\nCannotopencourse!
\n");
}
for(;!
feof(fp);)
{
fscanf(fp,"%d%s%s%d%d%d%d%d",&c.num,&c.name,&c.xingzhi,&c.time,
&c.ttime,&c.etime,&c.mark,&c.term);
printf("%d%s%s%d%d%d%d%d",c.num,c.name,c.xingzhi,c.time,
c.ttime,c.etime,c.mark,c.term);
}
fclose(fp);
menu();
}
/*search*/
voidsearch()
{
voidmenu();
FILE*fp;
structcoursec;
intscore;
printf("\ninputmarkyourwanttosearch:
");
scanf("%d",&score);
if((fp=fopen("course.txt","r"))==NULL)
{
printf("\nCannotopencourse!
\n");
}
for(;!
feof(fp);)
{
fscanf(fp,"%d%s%s%d%d%d%d%d",&c.num,&c.name,&c.xingzhi,&c.time,&c.ttime,&c.etime,&c.mark,&c.term);
if(c.mark==score)
printf("%d%s%s%d%d%d%d%d",c.num,c.name,c.xingzhi,c.time,
c.ttime,c.etime,c.mark,c.term);
}
fclose(fp);
menu();
}
/*tongjixuankerenshu*/
voidxuanke_information()
{
voidmenu();
inttotal=0;
FILE*fp;
structstudentc;
intnum;
printf("\ninputcourse-numberyourwanttosearch:
");
scanf("%d",&num);
if((fp=fopen("student.txt","r"))==NULL)
{
printf("\nCannotopenstudent!
\n");
}
for(;!
feof(fp);)
{
fscanf(fp,"%d%d",&c.snum,&c.um);
if(c.um==num)
{
total++;
printf("student_num=%d,course_num=%d",c.snum,c.um);
}
}
fclose(fp);
printf("\nThenumberchoosecourse_num%dis%d!
",num,total);
menu();
}
/*xuanke*/
voidxuan_ke()
{
voidmenu();
intsnum,um;
FILE*fp;
printf("\nPleaseinputyourstudent_numberandcoursenumberyouwanttochoose:
");
scanf("%d%d",&snum,&um);
if((fp=fopen("student.txt","a+"))==NULL)
{
printf("\nCannotopenstudent!
\n");
}
fprintf(fp,"%d%d",snum,um);
fclose(fp);
menu();
}
voidmenu()
{intn,w=0;
printf("\n\t\tPLEASEENTERANUMBERFROM0TO5!
");
printf("\n\n\n\t*******************MENU**************************");
printf("\n\t\t1-insertinformations");
printf("\n\t\t2-browersinformations");
printf("\n\t\t3-searchinformations");
printf("\n\t\t4-xuankeinformations");
printf("\n\t\t5-xuanke");
printf("\n\t\t0-Exitsystem");
printf("\n\n\n\t********************************************");
printf("\n\n\n\n\n\n\t\tChoosethenumber,please:
");
scanf("%d",&n);
do
{
if(n>5||n<0)
{
printf("\nWrong!
inputagain!
");
scanf("%d",&n);
}
elsew=1;
}while(w==0);
switch(n)
{
case1:
insert();break;
case2:
browser();break;
case3:
search();break;
case4:
xuan_ke();break;
case5:
xuanke_information();break;
case0:
exit(0);
}
}
main()
{
menu();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 选修课 系统 设计