目录
9.1题目要求?????????????????????03 9.2需求分析?????????????????????03 9.3总体设计?????????????????????03 9.4详细设计?????????????????????04
9.4.1主函数???????????????????05 9.4.2各功能模块设计???????????????06 9.5上机操作?????????????????????14
9.5.1数据源???????????????????14 9.5.2编译、链接、运行??????????????14 9.5.3运行结果??????????????????14 9.6总结???????????????????????19 9.7参考文献?????????????????????19 9.8附录???????????????????????19
1
9.1 题目要求
假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、学分、开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一个选修课程系统,使之能提供以下功能:
⑴ 系统以菜单方式工作。
⑵ 课程信息和学生选课信息录入功能(课程信息用文件保存)——输入。 ⑶ 课程信息浏览功能——输出。
⑷ 查询功能(至少一种查询方法)——算法。 ⑸ 按学分查询。
⑹ 某门课程学生选修情况(可选项)。
9.2需求分析
根据题目要求,由于课程信息是用文件保存,所以应该提供文件的输入、输出等操作;在程序中需要提供课程信息录入、课程信息浏览、课程信息查询、学生选课、查看某门课程选课信息等功能操作;另外还应提供键盘式选择菜单实现功能选择。
9.3总体设计
根据上面的需求分析,可以将这个系统的设计分为课程信息录入、课程信息浏览、课程信息查询、学生选课、查看某门课程选课信息等五个模块,如图1所示。
学生选修课程系统课程信息录入课程信息浏览课程信息查询某门课程选课情况学生选课操作按课程学分查询按课程性质查询
2
图9-1
9.4详细设计
9.4.1主函数
[分析]
主函数一般设计的比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块如图所示。其中各功能用菜单方式选择。其流程图如图2所示。将main()函数内的界面选择部分语句单独抽出作为一个独立函数。其流程图如图9-2所示。
开始 显示一系列功能选项 N 输入n,判断n是否为0-5? Y 根据n的值调用功能模块函数 结束 图9-2 主函数流程图
[程序] void menu() {
int n,w=0;
/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/ printf(\************\\n\
printf(\ MENU \\n\
printf(\
************\\n\
printf(\ 1-输入课程信息 \\n\
printf(\ 2-浏览课程信息
3
\\n\\\n\\\n\\\n\\\n\
printf(\************\\n\
printf(\ 请选择输入<0 ~ 5>:\
scanf(\
do /*对选择的数字做判断*/ {
if(n>5||n<0) { printf(\输入错误!请重新输入!\\n\ }
scanf(\ /*重新输入n*/
printf(\ 3-查询课程信息
printf(\ 4-某门选课情况
printf(\ 5-进入选课操作
printf(\ 0-退出选课系统
else w=1; }while(w==0);
switch(n)
{
case 1:insert();break; /*课程信息录入模块*/ case 2:browser();break; /*课程信息浏览模块*/ case 3:search();break; /*课程信息查询模块*/
case 4:xuanke_information();break; /*某门选课信息查询模块*/ case 5:xuan_ke();break; /*学生选课模块*/ case 0:exit(0); /*退出*/ } }
/**********************主函数**********************/ void main() {
menu(); /*菜单*/ }
9.4.2各功能模块设计
4
(1) 课程信息录入模块
[数据结构]
struct course { int num; /*课程编号*/ char name[20]; /*课程名称*/
char kind[10]; /*课程性质*/ int time; /*总时间*/ int ttime; /*授课时间*/ int etime; /*实验或上机时间*/ int mark; /*学分*/
int term; /*学期*/ };
[分析]
将课程信息用结构体存放,课程信息录入模块如图9-3所示。
开始 输入课程门数 输入课程信息,将课程信息录入文件中 返回主菜单 结束
图9-3 课程信息录入流程图
[程序]
/***********************课程信息录入模块***********************/ void insert() {
FILE *fp; struct course c; int count;
int i;
if((fp=fopen(\ /*以可加方式打开*/ {
5