版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录9.1题目要求………039.2需求分析………039.3总体设计………039.4详细设计………049.4.1主函数…………………059.4.2各功能模块设计………069.5上机操作………149.5.1数据源…………………149.5.2编译、链接、运行……149.5.3运行结果………………149.6总结……………199.7参考文献………199.8附录……………199.1题目要求假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、学分、开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一个选修课程系统,使之能提供以下功能:系统以菜单方式工作。课程信息和学生选课信息录入功能(课程信息用文件保存)——输入。课程信息浏览功能——输出。查询功能(至少一种查询方法)——算法。按学分查询。某门课程学生选修情况(可选项)。9.2需求分析根据题目要求,由于课程信息是用文件保存,所以应该提供文件的输入、输出等操作;在程序中需要提供课程信息录入、课程信息浏览、课程信息查询、学生选课、查看某门课程选课信息等功能操作;另外还应提供键盘式选择菜单实现功能选择。9.3总体设计根据上面的需求分析,可以将这个系统的设计分为课程信息录入、课程信息浏览、课程信息查询、学生选课、查看某门课程选课信息等五个模块,如图1所示。图9-19.4详细设计9.4.1主函数[分析]主函数一般设计的比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块如图所示。其中各功能用菜单方式选择。其流程图如图2所示。将main()函数内的界面选择部分语句单独抽出作为一个独立函数。其流程图如图9-2所示。YY开始显示一系列功能选项输入n,判断n是否为0-5?根据n的值调用功能模块函数结束N图9-2主函数流程图[程序]voidmenu(){intn,w=0;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/printf("********************************************************************************\n");printf("MENU\n");printf("********************************************************************************\n");printf("1-输入课程信息\n");printf("2-浏览课程信息\n");printf("3-查询课程信息\n");printf("4-某门选课情况\n");printf("5-进入选课操作\n");printf("0-退出选课系统\n");printf("********************************************************************************\n");printf("请选择输入<0~5>:");scanf("%d",&n);do/*对选择的数字做判断*/{ if(n>5||n<0) { printf("\n输入错误!请重新输入!\n"); scanf("%d",&n);/*重新输入n*/ } elsew=1;}while(w==0);switch(n){case1:insert();break;/*课程信息录入模块*/case2:browser();break;/*课程信息浏览模块*/case3:search();break;/*课程信息查询模块*/case4:xuanke_information();break;/*某门选课信息查询模块*/case5:xuan_ke();break;/*学生选课模块*/case0:exit(0);/*退出*/}}/**********************主函数**********************/voidmain(){menu();/*菜单*/}9.4.2各功能模块设计(1)课程信息录入模块[数据结构]structcourse{ intnum;/*课程编号*/ charname[20];/*课程名称*/ charkind[10];/*课程性质*/ inttime;/*总时间*/ intttime;/*授课时间*/ intetime;/*实验或上机时间*/ intmark;/*学分*/ intterm;/*学期*/};[分析]将课程信息用结构体存放,课程信息录入模块如图9-3所示。开始开始输入课程门数输入课程信息,将课程信息录入文件中返回主菜单结束图9-3课程信息录入流程图[程序]/***********************课程信息录入模块***********************/voidinsert(){ FILE*fp; structcoursec; intcount; inti; if((fp=fopen("course.txt","a+"))==NULL)/*以可加方式打开*/ { printf("cannotopenfile\n"); } printf("\n请输入课程门数:"); scanf("%d",&count);/*输入课程门数*/ printf("\n课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期:\n"); for(i=0;i<count;i++)/*从0到count向文件输入课程信息*/ { scanf("%d%s%s%d%d%d%d%d",&c.num,&,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); fprintf(fp,"%d%s%s%d%d%d%d%d\n",c.num,,c.kind,c.time,c.ttime,c.etime,c.mark,c.term);/*将课程信息写入文件*/ } fclose(fp);/*关闭文件*/ menu();/*返回主菜单*/}(2)课程信息浏览模块[需求分析]将课程信息从course文件中从头到尾读出就可以,具体过程如流程图9-4所示。221开始从文件中读出课程信息用户自己进行选择返回主菜单退出选课系统结束图9-4课程信息浏览流程图[程序]/***********************课程信息浏览模块************************/voidbrowser(){ FILE*fp; structcoursec;/*将c定义为structcourse类型的结构体变量*/ inta; if((fp=fopen("course.txt","r"))==NULL)/*以读方式打开*/ { printf("\nCannotopencourse!\n"); } printf("\n课程目录为:"); printf("\n课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期:\n"); for(;!feof(fp);)/*从文件读取课程信息*/ { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&,&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.kind,c.time,c.ttime,c.etime,c.mark,c.term); } fclose(fp); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) menu();/*返回主菜单*/ else exit(0);/*退出*/}(3)课程信息查询[需求分析]具体过程参见流程图9-5所示。22211开始请用户选择按学分查询,输入所查学分按课程性质查询,输入课程性质从文件读取课程信息并输出从文件读取课程信息并输出用户选择返回主菜单退出系统结束图9-5课程信息查询流程图[程序]/***********************课程信息查询模块***********************/voidsearch(){ FILE*fp; structcoursec;/*将c定义为structcourse类型的结构体变量*/ intscore;/*定义学分为整型变量*/ charkind[10];/*定义课程性质的数组*/ inta; intb; printf("\n1.按学分查询,2.按课程性质查询.\n"); printf("请选择查询方式,输入选项数字:"); scanf("%d",&b);/*输入所选查询方式*/ if(b==1) { printf("\n请输入您要查询的学分:"); scanf("%d",&score); if((fp=fopen("course.txt","r"))==NULL)/*将文件以读方式打开*/ { printf("\nCannotopencourse!\n"); } printf("\n课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期:\n"); for(;!feof(fp);)/*将文件从头到尾读取*/ { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&,&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.kind,c.time,c.ttime,c.etime,c.mark,c.term);/*输出课程信息*/ } } elseif(b==2) { printf("\n请输入您要查询的课程性质:"); scanf("%s",&kind);if((fp=fopen("course.txt","r"))==NULL) { printf("\nCannotopencourse!\n"); } printf("\n课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期:\n"); for(;!feof(fp);) { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&,&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.kind,c.time,c.ttime,c.etime,c.mark,c.term); } } else { printf("输入错误!"); exit(0); } fclose(fp);/*关闭文件*/ printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) menu(); else exit(0);}(4)某门选课情况查询模块[需求分析]具体情况参看流程图9-6所示。221开始输入要查询的选课编号从文件读取所查编号的学生选课信息,每输出一个total+1显示该门选课的总人数用户选择返回主菜单退出系统结束图9-6某门选课情况查询流程图[程序]/***********************某门课程选修情况模块***********************/voidxuanke_information(){ inttotal=0;/*定义选课人数total的初始值为0*/ inta; intnum;/*定义课程编号为整形变量*/ FILE*fp; structstudents;/*将s定义为structstudent类型的变量*/ if((fp=fopen("student.txt","r"))==NULL) { printf("\nCannotopenstudent!\n"); } printf("\n请输入您欲查询的选课编号:");scanf("%d",&num); printf("\n学号课程编号课程名称\n"); for(;!feof(fp);) { fscanf(fp,"%d%d%s\n",&s.snum,&um,&ame); if(um==num) { total++; printf("%7d%9d%13s\n",s.snum,um,ame); } } printf("\n选课学生总人数为:%d人",total); fclose(fp); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) menu(); else exit(0);}(5)学生选修模块[需求分析]具体情况参见流程图9-7所示。221开始结束输入学号和课程编号读取课程信息,当学生所选编号与课程编号相符,停止将学生选课信息录入学生文件中提示“选课成功”用户选择返回主菜单退出系统图9-7学生选修流程图[程序]/***********************学生选修课程模块***********************/voidxuan_ke(){structstudents; structcoursec; inta; FILE*fp; printf("\n请输入您的学号及您要选择的课程编号:"); scanf("%d%d",&s.snum,&um); if((fp=fopen("course.txt","r"))==NULL) { printf("\nCannotopencourse!\n"); } for(;!feof(fp);) { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); if(um==c.num)/*如果学生所选编号与课程编号相符*/ break; } fclose(fp); if((fp=fopen("student.txt","a+"))==NULL) { printf("\nCannotopenstudent!\n"); } fprintf(fp,"%d%d%s\n",s.snum,um,);/*从学生s文件输出学生信息,包括学号,学生选课编号,课程名称*/ fclose(fp); printf("您选课已成功!"); printf("\n1-返回主菜单;2-退出选课系统\n"); scanf("%d",&a); if(a==1) menu(); else exit(0);}9.5上机操作9.5.1数据源根据前面所列的数据输入形式,输入必要数据课程信息和学生信息。9.5.2编译、链接和运行。在完成程序编译后,点击组建按钮,然后点击“!”运行程序。9.5.3运行结果。(1)主菜单函数:进入程序,效果如图5-8所示。图5-8主函数模块(2)课程信息录入模块在主界面出现后输入1并按【Enter】键,结果如图5-9所示。图5-9课程信息录入模块输入要录入的课程信息,然后按【Enter】键,回到主界面,如图5-10所示。图5-10课程信息录入模块(3)课程信息浏览模块浏览课程信息,如图5-11所示。图5-11课程信息浏览模块(4)课程信息查询模块首先进入信息查询界面,如图5-12所示:图5-12
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通行业话务员工作总结
- 娱乐休闲行业行政后勤工作总结
- 评估自我能力的有效方法计划
- 礼品饰品销售员工作总结
- 中班游戏活动小青蛙跳荷叶
- 家具家居行业会计工作总结
- 幼儿园小班教案《挑战天空的小猫》及教学反思
- 小学安全工作总结汇编六篇
- 家长如何教育小孩子
- 咖啡厅卫生整治规范
- 2023年中国软件行业基准数据SSM-BK-202310
- 华为管理法读后感
- 2024年中考英语复习:阅读七选五 专项练习题汇编(含答案解析)
- 南京财经大学国际服务贸易(考试重点)
- 玻璃生产工艺及装备培训
- 2024年国投信托有限公司招聘笔试参考题库含答案解析
- 自身免疫性肝炎的护理查房
- 《卜算子-黄州定慧院寓居作》理解性默写(含答案)
- 部编版语文五年级上册第一单元大单元教学设计
- 肝脓肿健康宣教
- 少先队大队辅导员胜任力模型研究
评论
0/150
提交评论