得分:信电工程学院《高级语言程序设计课程设计》报告题目:学生选修课程系统班级:11电信1学号:20110504123姓名:倪威指导教师:黄为勇2014年1月6日高级语言程序设计课程设计报告1目录1程序目标及功能------------------------------------------11.1课题背景---------------------------------------------------11.2系统功能--------------------------------------------------11.3设计要求---------------------------------------------------12程序功能模块组成及流程图--------------------------------22.1系统功能模块-----------------------------------------------22.2各模块流程图-----------------------------------------------33程序主要数据结构及函数列表-----------------------------63.1程序中使用的数据结构---------------------------------------63.2函数列表---------------------------------------------------64程序代码及运行结果-------------------------------------74.1程序代码---------------------------------------------------74.2程序运行结果----------------------------------------------295总结与体会---------------------------------------------34高级语言程序设计课程设计报告11.程序目标及功能1.1课题背景学生选课系统是一个教育单位不可缺少的重要系统组成部分,它对于学校的决策者、管理者管理、查看课程来说都有至关重要,所以学生选课管理系统应该能够为广大学、师生提供充足的信息和快捷的课程选择过程,有助于学生选好每一门课程,此系统系统选课方便、快捷,用简单的界面来展示学生的选课信息,应用简单明了、存储量大、可靠性高、保密性好、寿命长、成本低等优点,可以极大的提高对学生信息管理的效率。利用C语言开发,实现了简单的学生课程信息的录入、修改、查询、删除等操作,并且能够利用文件系统长久的保留原始数据。1.2系统功能本系统称为“学生选修课程系统”,主要功能是实现对课程信息、学生信息以及学生选修课程的管理及输入输出。通过本系统,可以简单地实现高校对于课程选修的要求。1.3设计要求1.基本要求:(1)假定有n门课程,每门课程有课程编号、课程名称、课程性质(专业选修课、公选课)、总学时、总学分、理论学时、实验学时、开课学期、已选修本课程的学生人数等信息;每门课最多允许60个学生选修。(2)选修信息文件,用来保存每个学生选修课程的信息,每条记录包括:学生的学号、所选修的课程编号和课程名称。(3)系统以菜单方式工作;(4)用函数分别实现动态链表的建立、动态链表输出等功能;(5)界面友好,程序中加入必要的注释;(6)函数功能要划分好(结构化程序设计);函数要求使用指针作形参。(7)学生选修一门课后,要同时更新课程信息和选修信息文件。2.系统结构及模块要求:(1)课程节点数至少10个。(2)程序主界面包括程序名称及编程者学号、姓名、班级;同时要求输入功能号码,选择进入功能模块程序。高级语言程序设计课程设计报告2(3)各模块功能:A.课程信息录入。建立课程信息链表,由键盘输入课程信息。B.课程信息输出。输出所有课程信息。C.查询课程。按课程编号、课程名称、学分、按课程性质、开课学期等查询(至少实现1种)。D.学生选修课程。输入学生学号和课程编号,形成一条选课信息,保存在“选修信息文件”里。E.查询学生选修的课程。输入学生学号,输出该生已选修的课程编号和课程名称。F.保存课程信息到磁盘文件。建立一个磁盘文件,把所建立的课程表写入文件。G.从磁盘文件中读出课程信息。2程序功能模块组成及流程图2.1系统功能模块根据需求,将这个系统的设计分为如下七大模块:课程信息录入模块、课程管理模块、学生信息录入模块、学生信息管理模块、选课模块、系统信息查看及存储模块、系统使用说明及帮助模块。各个模块又细分如下:课程信息录入模块分为从键盘输入和从文件输入模块;课程管理分为增加和删除模块;学生信息录入模块分为从键盘输入和从文件输入模块;学生信息管理模块分为增加和删除模块;学生选课模块又分为查询未选课程和查询已选课程(分别实现选课和退选功能);系统信息查看及存储模块分为课程信息显示、学生信息显示及存储模块,其中的存储模块又分为课程信息存储和学生信息存储模块。菜单总体框图如下:菜单选择模块录入学生信息学生选课系统信息查看及储存系统使用说明及帮助完成选择模块学生信息管理录入课程信息课程管理退出系统高级语言程序设计课程设计报告32.2各模块流程图1.课程信息录入模块2.课程管理模块YN3.学生信息录入模块录入课程信息从键盘或文件输入输入课程各节点显示录入成功,转入完成选择菜单保存删除课程输入课程信息新增课程录入学生信息从键盘或文件输入输入课程各节点显示录入成功,转入完成选择菜单高级语言程序设计课程设计报告44.学生管理模块YN5.学生选课模块查询可选课程查询已选课程返回主菜单输入学号输入学号保存删除学生输入学生信息新增学生学生选课高级语言程序设计课程设计报告56.系统信息查看及存储模块7.系统使用说明及帮助模块8.退出系统系统信息及查看系统查看课程信息查看学生信息存储信息返回主菜单存储课程信息存储学生信息返回主菜单输入路径,保存主菜单选择系统使用说明与帮助菜单显示帮助选择退出系统菜单退出系统高级语言程序设计课程设计报告63程序主要数据结构及函数列表3.1程序中使用的数据结构程序中主要使用了动态链表,用函数实现动态链表的建立、动态链表输出等功能,并以指针作为形参在不同函数之间传递数据,最终完成整个系统的功能。3.2函数列表1.voidMs()//延时函数2.voidkeyboardc()//录入课程子函数(从键盘录入)3.voidfilec()//录入课程子函数(从文件录入)4.voidinputc()//录入课程主函数5.voidinsertc(structcouse*incouse)//课程管理子函数(增加课程)6.voiddelc(intnum1)//课程管理子函数(删除课程)7.voidmanagementc()//课程管理主函数8.voidkeyboards()//录入学生信息子函数(从键盘录入)9.voidfiles()//录入学生信息子函数(从文件录入)10.voidinputs()//录入学生信息主函数11.voidinserts(structstudent*incouse)//学生信息管理子函数(填加学生信息)12.voiddels(intnum2)//学生信息管理子函数(删除学生信息)13.voidmanagements()//学生信息管理主函数14.voidelect(structstudent*s)//选课15.voidcheak()//学生选课子函数(查询可选课程)16.voidback(structstudent*p)//退课17.voidhcheak()//学生选课子函数(查询已选课程)18.voidelective()//学生选课主函数19.voidlistc()//输出课程信息20.voidlists()//输出学生信息21.voidintoc()//存储课程信息22.voidintos()//存储学生信息23.voidinto()//存储信息24.voidstore()//系统信息主函数高级语言程序设计课程设计报告725.voidhelp()//帮助函数26.intmain()//主函数4程序代码及运行结果4.1程序代码#includestdio.h#includestdlib.hintN1,N2,kk1,kk2,kk3;structcouse*head1;structstudent*head2;structcouse//课程信息结构体{intnum1;//课程编号charname1[20];//课程名intscore;//课程学分intnelepeo;//课程已选人数intMelepeo;//课程人数上限charpro[20];//课程性质(专业课或公选课)inttime;//总学时inttime1;//理论学时inttime2;//实验学时intterm;//开课学期structcouse*next;};structstudent//学生信息结构体{intnum2;charname2[20];intnelenum[50];//已选课程编号intnelen;//已选课程数量structstudent*next;};高级语言程序设计课程设计报告8voidMs(){for(kk1=0;kk11100;kk1++)for(kk2=0;kk21200;kk2++)for(kk3=0;kk31200;kk3++);}voidkeyboardc()//录入课程子函数(从键盘录入){structcouse*p1,*p2;N1=0;p1=p2=(structcouse*)malloc(sizeof(structcouse));printf(课程编号\t课程名称\t学分\t课程已选人数\t课程人数上限\t课程性质(公选课、专业课)\t总学时\t理论学时\t实验学时\t开课学期\n);scanf(%d%s%d%d%d%s%d%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-Melepeo,p1-pro,&p1-time,&p1-time1,&p1-time2,&p1-term);head1=NULL;while(p1-num1!=0){N1=N1+1;if(N1==1)head1=p1;elsep2-next=p1;p2=p1;p1=(structcouse*)malloc(sizeof(structcouse));scanf(%d%s%d%d%d%s%d%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-Melepeo,p1-pro,&p1-time,&p1-time1,&p1-time2,&p1-term);}p2-next=NULL;高级语言程序设计课程设计报告9}voidfilec()//录入课程子函数(从文件录入){FILE*fp;charfilepath[20];structcouse*p1,*p2;N1=0;printf(输入要读入的文件路径:);getchar();gets(filepath);if((fp=fopen(filepath,r))==NULL){printf(找不到%s文件!\n,filepath);exit(0);}p1=p2=(structcouse*)malloc(sizeof(structcouse));fscanf(fp,%d%s%d%d%d%s%d%d%d%d,&p1-num1,p1-name1,&p1-score,&p1-nelepeo,&p1-Melepeo,p1-pro,&p1-time,&p1-time1,&p1-time2,&p1-term);head1=NULL;while(!feof(fp)){N1=N1+1;if(N1==1)head1=p1;elsep2-next=p1;p2=