《程序设计综合训练》设计报告专业:信息管理与信息系统班级:学号:姓名:指导教师:陈明霞成绩:计算机工程学院2014年2月程序设计综合训练报告2目录一、题目名称、内容。二、解题的基本思路。三、设计方案:功能模块框图与程序流程图等。四、算法设计:算法描述、实现方法、详细流程图等。五、程序调试:调试过程与步骤,发现的问题,解决的办法等。六、测试:运行程序,输入测试数据,判断是否达到预期目的。测试数据要有典型意义,要注意临界值的选取,注意测试数据的广泛性和普适性。七、总结:收获与体会,有实际内容,忌空洞无物,忌千篇一律,400字左右。八、附录:源代码(含注释)。程序设计综合训练报告3一、题目名称、内容。学生选课管理系统设计假定有n门课程,每门课程的信息包括:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,实现以下功能:1.课程信息录入(课程信息用文件保存,并可在电脑中直接查找并打开该文件)2.课程信息浏览3.课程信息查询(1)按学分查询(2)按课程性质查询4.学生选修课程学生输入学号和姓名后可进行选课。5.统计学生选课情况二、解题的基本思路。本程序功能模块根据程序设计的需求,综合程序的实用性、智能化得考虑,将程序划分为5个模块分别编写。三、设计方案:功能模块框图与程序流程图等。3.1五个模块分别为:(1)浏览课程信息模块(2)查询课程信息模块(3)进入系统进行选课模块(4)选课情况统计模块(5)录入选课信息模块程序设计综合训练报告43.2主函数的流程设计:学生选课系统执行主流程如图所示,先执行主函数中显示菜单函数,通过循环和按键操作来执行相应的操作。按键的有效键值为0~5之间的任意数值,其他按键为无效输入。各个按键的执行功能为:“1”:浏览已录入的选修课课程信息调用函数,browser();“2”:通过不同的方式查找记录,调用函数search();“3”:进入系统进行选课,调用函数xuan_ke();“4”:查看课程已选情况,调用函数xuanke_information();“5”:录入选修课信息,调用函数input();“0”:退出系统;开始主函数是否继续进行相应的操作结束输入【0~5】中所要操作的项目对应的数将备选课程信息录入录入选课信息已选信息学生选课并记录按学分查询按课程性质查按课程名称查查询课程信息进入选课输出选课情况选课情况统计学生选修课程管理系统输出文件全部浏览课程信息程序设计综合训练报告5四、算法设计:算法描述、实现方法、详细流程图等。4.1程序中定义的数据类型4.1,1定义与课程有关的结构体structcourse{intnum;/*课程编号*/charname[20];/*课程名称*/charkind[10];/*课程性质*/inttaltime,ttime,etime,mark,term;/*课程时间,学分,开课信息等*/};4.1.2定义与学生有关的结构体structstudent{intsnum;/*学生学号*/intcnum;/*所选课程编号*/charcname[20];/*所选课程名称*/};4.2每个函数的过程详解4.2.1voidf1();函数原型:voidf1();函数源程序:voidf1()/*常用函数2*/{printf(\n课程编号课程名称课程性质授课学时实验或上机学时总学时学分开课学期:\n);}函数功能及实现:此函数仅包含输出语句,在课程信息输出之前调用此函数,打印出表头信息4.2.2voidmenu();函数原型:voidmenu()程序设计综合训练报告6函数源程序:voidmenu()/*主菜单*/{Printf(“\n\n\n”);printf(欢迎使用学生选课系统!\n);printf(**************************************\n);printf(*1-浏览选课信息2-查询选课信息*\n);printf(*3-进入选课操作4-选课情况统计*\n);printf(*5-录入选课信息0-退出选课系统*\n);printf(**************************************\n);printf(请选择输入选项编号(请先选择5进行课程信息录入):);}函数功能及实现:此函数为输出菜单,进入系统后提示可根据供选择的项目进行后续操作。4.2.3voidbrowser();函数原型:voidbrowser();函数源程序:/*浏览选课信息*/voidbrowser(){FILE*fp;/*定义指向文件的指针*/structcoursec;/*定义课程结构体变量c*/if((fp=fopen(course.txt,r))==NULL)程序设计综合训练报告7{printf(\nCannotopencourse!\n);}f1();for(;!feof(fp);)/*直到文件结束*/{fscanf(fp,%d%s%s%d%d%d%d%d\n,&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);/*将课程信息写入文件*/printf(%5d%12s%9s%9d%12d%12d%8d%9d\n,c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);/*格式化输出*/}fclose(fp);/*关闭文件*/menu();}函数功能及实现:此函数先定义指向文件的指针*fp,课程结构体变量c,通过if语句判断文件是否存在,在调用函数f1(),输出表头信息,通过for循环并使用fscanf函数将文件中的课程信息读出并通过printf打印到屏幕上,再通过fclose函数关闭文件。4.2.4voidsearch();函数原型:voidsearch();函数源程序:/*查询选课信息*/voidsearch(){FILE*fp;/*定义文件指针变量*/structcoursec;/*定义学生结构体变量c*/intscore;charkind[10];charname[20];intb;程序设计综合训练报告8/*输入需要的查询课程信息的方式*/printf(\n1.按学分查询\n\n);printf(\n2.按课程性质查询\n\n);printf(\n3.按课程名称查询\n\n);printf(请选择查询方式,输入选项数字:);scanf(%d,&b);for(;b1||b3;){printf(输入错误,请重新输入!);scanf(%d,&b);}/*按学分查询*/if(b==1){printf(\n请输入您要查询的学分:);scanf(%d,&score);if((fp=fopen(course.txt,r))==NULL)printf(\nCannotopencourse!\n);f1();for(;!feof(fp);){fscanf(fp,%d%s%s%d%d%d%d%d\n,&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);if(c.mark==score)printf(%5d%12s%9s%9d%12d%13d%8d%9d\n,c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);}}开始打开文件查看学生选判断查询方法结束2输入按学分按名称1按性质程序设计综合训练报告9/*按课程细致查询*/elseif(b==2){printf(\n请输入您要查询的课程性质:);scanf(%s,&kind);if((fp=fopen(course.txt,r))==NULL)printf(\nCannotopencourse!\n);f1();for(;!feof(fp);){fscanf(fp,%d%s%s%d%d%d%d%d\n,&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&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.ttime,c.etime,c.taltime,c.mark,c.term);}}/*按课程名称查询*/elseif(b==3){printf(\n请输入课程名称:);scanf(%s,&name);if((fp=fopen(course.txt,r))==NULL)printf(\nCannotopencourse!\n);f1();for(;!feof(fp);){程序设计综合训练报告10fscanf(fp,%d%s%s%d%d%d%d%d\n,&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);if(strcmp(c.name,name)==0)printf(%5d%12s%9s%9d%9d%11d%11d%11d\n,c.num,c.name,c.kind,c.ttime,c.etime,c.taltime,c.mark,c.term);}}else{printf(输入错误!);exit(1);}fclose(fp);menu();/*调用menu函数*/}函数功能及实现:先定义学生结构体变量s,打印相关可供选择的选项,通过scanf函数读取输入字符,打印表头,再使用if语句进行相关选择。如果数“1”,则是按学分查询课程,符合第一个if语句,输入想要查询的学分,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;如选择“2”,符合第二个if语句,则按照课程性质查询,输入课程性质,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;如输入“3”,符合第二个if语句,则按照课程名称查询,输入要课程名称,程序通过for循环从文件中读取课程信息,并通过printf函数输出满足要求的课程信息;查询完成后通过fclose函数关闭文件,打印主菜单,返回主函数。4.2.5voidxuan_ke();函数原型:voidxuan_ke()函数源程序:/*进入选课操作*/voidxuan_ke(){程序设计综合训练报告11structstudents;/*定义学生结构体变量s*/structcoursec;/*定义课程结构体变量c*/FILE*fp;/*定义文件指针变量*/printf(\n请输入您的学号及您要选择的课程编号(用空格分开):);scanf(%d%d,&s.snum,&s.cnum);if((fp=fopen(course.txt,r))==NULL)/*打开选课记录文件course.txt*/{printf(\nCannotopencourse!\n);}for(;!feof(fp);){fscanf(fp,%d%s%s%d%d%d%d%d\n,&c.num,&c.name,&c.kind,&c.ttime,&c.etime,&c.taltime,&c.mark,&c.term);if(s.cnum==c.num)break;}fclose(fp);/*关闭选课记录文件course.txt*/if((fp=fopen(student.txt,a+))==NULL){printf(\nCannotopenstudent!\n);}/*将学生选课信息输入student.txt文件*/fprintf(fp,%d%d%s\n,s.snum,s.cnum,c.name);fclose(fp);printf(\n恭喜您选课成功!\n);menu();}函数功