0学生选修课系统设计一、设计目的当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息系统的环境。计算机的最到好处的于利用它能够进行信息管理,使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好学生选课信息而设计的。数据处理手工操作,工作量大,出错率高,出错后不易更改,造成了时间上的浪费。基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。二、题目说明假定有n门课程,每门课程都有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供一下功能:(1)系统以菜单方式工作;(2)课程信息和学生信息的录入功能(课程信息有文件保存)----输入;(3)课程信息浏览功能----输出;(4)查询功能(至少一种查询方式)---算法;(5)按学分查询;(6)某门课程学生选修情况(可选项)。[提示]数据结构可用结构体,包括课程和选秀两个结构体,其中课程结构体包括课程编号、课程名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期。选修结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况.。三、数据结构设计本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找、添加、删除、课程的选修、追加选修的课程,课程信息采用结构体这种数据结构。typedefstructsubjects{1intnum;//课程编号charname[20];//课程名称charkind[10];//课程性质intstime;//总学时intttime;//授课学时intetime;//实验或上机学时intscore;//学分intterm;//开课学期structsubjects*next;}SUB;SUB*head=NULL;四、程序分析现代的社会是信息化的社会,信息无所不在。在生产领域、流通领域、各个部门每天都和信息打交道,如何处理如此多的信息成为了一个重要的课题。学生在学期开始选课是教学活动中的一个重要环节,该环节如果能管理好,它不仅能加快学生的选课速度,也提高了整个活动的效率。大学一般都有上千名学生,每学期开始学生都要选课,因而产生了大量的课程信息。考虑到用户使用的方便和处理的信息量系统要完成录入,保存,查询,修改和删除课程信息的各种过程,能打印出课程信息表。对象:系统的主要使用对象是需要选课的学生。学生在选课是要察看各个课程的详细信息,还要选择一些感兴趣的课程,需要生成课表,在发现课程有冲突后能够修改先前选择的信息。需要随学生选课的变化,计算相应的总学分。在全部选定后,打印报表。系统还需要管理员来查看和修改学生的总体选课情况课程信息和学生信息。五、程序设计大纲2主模块管理员模块学生模块浏览课程查询课程添加课程删除课程浏览所有课程查询课程信息选择选修课程浏览我选修的课程删除错选的课程3六、模块设计(一)主函数,头文件及结构体声明主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块:[程序]#includestdio.h#includestring.h#includestdlib.h#includemalloc.hvoidprin1();voidchoose();typedefstructsubjects//课程结构体{intnum;//课程编号charname[20];//课程名称charkind[10];//课程性质intstime;//总学时intttime;//授课学时intetime;//实验或上机学时intscore;//学分intterm;//开课学期structsubjects*next;}SUB;SUB*head=NULL;intmain(){intn,w=1;do{system(cls);puts(\n\n\t\t*****************MENU******************\n\n);进入选课系统选择序号进行选课进入下一层4puts(\t\t\t\t1.以管理员身份登录\n);puts(\t\t\t\t2.以学生身份登录\n);puts(\t\t\t\t3.退出);puts(\n\n\t\t*******************************************\n);printf(Chioseyournumber(1-3):[]\b\b);scanf(%d,&n);switch(n){case1:Mangers();break;case2:Students();break;case3:w=0;break;default:;}}while(w==1);return0;}(二)管理员功能模块管理员的功能一共有四个功能:浏览,查询,添加,删除课程,运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用:管理员登录菜单输入密码进行码匹对验证进入管理员界面i=3i0按任意键退出是否否是5[程序]voidMangers(){intn,w=1,flag=0,i=3;chars[8];charpassword[7]=1;do{printf(\n\nEnterpassword:);scanf(%s,s);if(!strcmp(s,password))//进行密码匹配验证{flag=1;break;}else{printf(\n\nError!Youonlyhave%dtimes!Enteragain:\n,i-1);i--;}}while(i0);if(!flag){printf(youhaveEnter3times!);//输入密码超过了3次!!exit(0);//自动退出}do{system(cls);puts(\n\n\t\t*********************管理员菜单***********************\n\n);puts(\t\t\t\t1---浏览课程\n);puts(\t\t\t\t2---查询课程\n);puts(\t\t\t\t3---添加课程\n);puts(\t\t\t\t4---删除课程\n);puts(\t\t\t\t5---返回主菜单);puts(\n\n\t\t******************************************************\n);printf(Chioseyournumber(1-5):[]\b\b);scanf(%d,&n);switch(n){case1:prin();break;6case2:search();break;case3:insert();savefile();break;case4:del();savefile();break;case5:return;default:;}}while(w==1);}voidStudents(){intn,w=1;do{system(cls);puts(\n\n\t\t*********************学生菜单***********************\n\n);puts(\t\t\t\t1---浏览所有课程\n);puts(\t\t\t\t2---查询课程信息\n);puts(\t\t\t\t3---选择选修课程\n);puts(\t\t\t\t4---浏览我选修的课程\n);puts(\t\t\t\t5---删除错选课程\n);puts(\t\t\t\t6---返回主菜单);puts(\n\n\t\t****************************************************\n);printf(Chioseyournumber(1-6):[]\b\b);scanf(%d,&n);switch(n){case1:prin();break;case2:search();break;case3:choose();break;case4:prin1();break;case5:del();savefile1();break;case6:return;default:;}}while(w==1);}(三)学生功能菜单学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,7添加选修课程,删除错选的课程,也是用到switch语句来调用函数:[程序]voidStudents()//学生登录菜单{intn,w=1;do{system(cls);puts(\n\n\t\t************学生菜单**************\n\n);puts(\t\t\t\t1---浏览所有课程\n);puts(\t\t\t\t2---查询课程信息\n);puts(\t\t\t\t3---选择选修课程\n);puts(\t\t\t\t4---浏览我选修的课程\n);puts(\t\t\t\t5---删除错选课程\n);puts(\t\t\t\t6---返回主菜单);puts(\n\n\t\t***********************************\n);printf(Chioseyournumber(1-6):[]\b\b);scanf(%d,&n);switch(n){case1:prin();break;学生登录菜单按1-6数字键进入各选项1、浏览所有课程2、查询课程信息3、选择选修课程4、浏览我选修的课程5、删除错选课程6、返回主菜单进入所选目标8case2:search();break;case3:choose();break;case4:prin1();break;case5:del();savefile1();break;case6:return;default:;}}while(w==1);}(四)创建链表模块9创建链表输入选修课程信息(num,name,kind,stime,ttime,etime,score,term)Num!=0p=(SUB*)malloc(size);p-num=num;strcpy(p-name,name);strcpy(p-kind,kind);p-stime=stime;p-ttime=ttime;p-etime=etime;p-score=score;p-term=term;Head==NULLHead=pTail-next=p;Tail=p;Tail-next=NULL;Returnhead;创建完成Scanf(num,name,kind,&stime,&ttime,&etime,&score,&term);是是否否10[程序]SUB*create_form()//创建链表{SUB*head,*tail,*p;intnum,stime,ttime;intetime,score,term;charname[20],kind[10];intsize=sizeof(SUB);head=tail=NULL;printf(输入选修课程信息:\n);scanf(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term);while(num!=0){p=(SUB*)malloc(size);p-num=num;strcpy(p-name,name);strcpy(p-kind,kind);p-stime=stime;p-ttime=ttime;p-etime=etime;p-score=score;p-term=term;if(head==NU