1目录1程序目标及功能---------------------------------------------------------------11.1课题背景-----------------------------------------------------------------21.2系统功能---------------------------------------------------------------21.3设计要求---------------------------------------------------------------32程序功能模块组成及流程图-----------------------------------------------32.1系统功能模块-----------------------------------------------------------52.2各模块流程图-----------------------------------------------------------63程序主要数据结构及函数列表---------------------------------------------83.1程序中使用的数据结构----------------------------------------------83.2函数列表--------------------------------------------------------------104程序代码及运行结果-------------------------------------------------------125总结与体会------------------------------------------------------------------1521、程序目标及功能1.1、课题背景当今社会是一个信息时代,计算机技术发展迅速,同时信息的自动处理以及网络式的信息交互方式越来越被人们认可和运用,让计算机来管理学生的信息是现在各个高校都在积极进行的工作之一,也是高校教学管理工作的重要内容之一。网上选课与传统的选课方式相比更节约资源,同时,随着学生选课自主权的增加,网上选课有效的避免了许多不良现象,使教学更加透明。1.2、系统功能①课程信息录入。建立课程信息链表,由键盘输入课程信息。②课程信息输出。输出所有课程信息。③查询课程。按课程编号、课程名称、学分、按课程性质、开课学期等查询(至少实现1种)。④学生选修课程。输入学生学号和课程编号,形成一条选课信息,保存在“选修信息文件”里。⑤查询学生选修的课程。输入学生学号,输出该生已选修的课程编号和课程名称。⑥保存课程信息到磁盘文件。建立一个磁盘文件,把所建立的课程表写入文件。⑦从磁盘文件中读出课程信息。31.3、设计要求①假定有n门课程,每门课程有课程编号、课程名称、课程性质(专业选修课、公选课)、总学时、总学分、理论学时、实验学时、开课学期、已选修本课程的学生人数等信息;每门课最多允许60个学生选修。选修信息文件,用来保存每个学生选修课程的信息,每条记录包括:学生的学号、所选修的课程编号和课程名称。系统以菜单方式工作(程序主界面包括程序名称及编程者学号、姓名、班级;同时要求输入功能号码,选择进入功能模块程序)。④用函数分别实现动态链表的建立、动态链表输出等功能。⑤界面友好,程序中加入必要的注释。⑥函数功能要划分好(结构化程序设计);函数要求使用指针作形参。⑦学生选修一门课后,要同时更新课程信息和选修信息文件。2、程序功能模块组成及流程图2.1系统功能模块根据设计要求分为8个模块,分别是:1:创建课程信息:课程信息的录入,建立课程信息链表,有键盘输入课程信息。2:课程信息输出:输入所有课程信息。3:查询课程信息:按课程编号、课程名称、课程性质、学分、开课4学期等查询(此程序按课程编号实现)。4:学生选修课程:输入学生学号和课程编号,形成一条选课信息,保存在“选修信息文件”里。5:查询学生选修课程:输入学生学号,输入该省已选修的课程编号和课程名称。6:保存课程信息到磁盘:建立磁盘文件,把所建立的课程表写入文件。7:从磁盘文件中读出课程信息:从磁盘文件中读出课程信息并输出,显示主界面。8:退出:结束程序,退出系统。2.2各模块流程图课程信息录入功能模块课程信息输出课程信息输出按学号查询选课,保存信息信息的保存与读出选课信息管理系统5选择模块创建课程信息do{cp1=(structstu*)malloc(sizeof(structstu));if(i==1)chead=cp2=cp1;elsecp2-next=cp1;6scanf(%d%s,&cp1-num,&cp1-name);scanf(%s%d%d%d,&cp1-quale,&cp1-time,&cp1-credit,&cp1-thtime);scanf(%d%d%d,&cp1-extime,&cp1-term,&cp1-alnum);cp2=cp1;fflush(stdin);//刷新scanf()函数缓冲,防止自动循环i++;}while(am=i);cp2-next=NULL;学生选课7intsnum;structstu*head,*p1;p1=p;printf(请输入学生学号:);scanf(%d,&snum);printf(输入课程编号:);scanf(%d,&num);do{if(p1-num=num){FILE*fp;fp=fopen(选修信息文件.txt,w);fprintf(fp,学生学号课程编号名称性质总学时总学分理论学时实验学时开课学期已修本课的人数\n);fprintf(fp,%d\t%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d,snum,p1-num,p1-name,p1-quale,p1-time,p1-credit,p1-thtime,p1-extime,p1-term,p1-alnum);fclose(fp);printf(已保存至“选修信息文件.txt”\n);}8elsep1=p1-next;}while(p1=NULL);3、程序主要数据结构及函数列表3.1程序中使用的数据结构链表的使用structstu//声明结构体类型structstudent{intnum;//课程编号charname[20];//课程名称charquale[10];//课程性质inttime;//总学时intcredit;//总学分intthtime;//理论学时intextime;//实验学时intterm;//开课学期intalnum;//已选本课程的学生人数structstu*next;};3.2函数列表structstu*creat(intam);//创建链表,录入课程信息voidoutput(structstu*p);//声明输入课程信息的函数,按9课程编号查询voidinquire(structstu*p,intn);//声明查询课程的函数voidstu_classes(structstu*p,intnum);//声明保存文件的的函数voidinquire_stu(structstu*p,intnumb);//查询学生选课信息voidsave_inf(structstu*p);//声明保存课程信息函数voidread_inf(structstu*p);//声明读出课程信息的函数voidreset();//声明清除界面函数4、程序代码及运行结果程序代码:#includestdio.h#includestdlib.h#includeconio.h#defineNULL0#defineN2//定义共5门课程structstu//声明结构体类型structstudent{intnum;//课程编号charname[20];//课程名称10charquale[10];//课程性质inttime;//总学时intcredit;//总学分intthtime;//理论学时intextime;//实验学时intterm;//开课学期intalnum;//已选本课程的学生人数structstu*next;};intmain(void){structstu*creat(intam);//创建链表,录入课程信息voidoutput(structstu*p);//声明输入课程信息的函数,按课程编号查询voidinquire(structstu*p,intn);//声明查询课程的函数voidstu_classes(structstu*p,intnum);//声明保存文件的的函数voidinquire_stu(structstu*p,intnumb);//查询学生选课信息voidsave_inf(structstu*p);//声明保存课程信息函数voidread_inf(structstu*p);//声明读出课程11信息的函数voidreset();//声明清除界面函数structstu*head;intM,n,num,numb,fail;loop:printf(\n);printf(*******************学生选修课程系统*******************\n);printf(学号:*******姓名:***班级:*****\n);printf(\n);printf(******************************************************\n);printf(*\t\t※1:创建课程信息表*\n);printf(*\t\t※2:课程信息输出*\n);printf(*\t\t※3:查询课程信息*\n);printf(*\t\t※4:学生选修课程*\n);printf(*\t\t※5:查询学生选修课程*\n);printf(*\t\t※6:保存课程信息到磁盘*\n);printf(*\t\t※7:从磁盘文件中读出课程信息*\n);printf(*\t\t※8:退出*\n);//菜单形式的主界面printf(************************************************12******\n);printf(\n\n\t\t请输入功能号[1-8]:);//提示输入功能号scanf(%d,&M);if(M==1){if(fail==1)//判断是否创建列表{printf(已经创建列表,请选择其他功能!!\n);gotoloop;//返回初始界面}elsehead=creat(N);//使用列表,录入信息fail=1;//reset();//清除界面}elseif(M==2){if(fail==1)//判断是否创建列表{output(head);reset();}//输入信息,清除界面elseprintf(没有数据,请先录入信息!!\n);13gotoloop;//返回初始界面}elseif(M==3){if(fail==1)//判断是否创建列表{inquire(head,n);reset();}//查询信息函数,清除界面elseprintf(没有数据,请先录入信息!!\n);gotoloop;//返回初始界面}elseif(M==4){if(fail==1){stu_classes(head,num);reset();}//形成信息并保存,清除界面elseprintf(没有数据,请先录入信息!!\n);gotoloop;//返回初始界面}14elseif(M==5){if(fail==1){inquire_stu(head,numb);//查询信息fail=2;reset();//清除界面}elseprintf(没有数据,请先录入信息!!\n);gotoloop;//返回初始界面}elseif(M