1、题目一、学生选课管理系统目录第一部分:课程设计名称、目标、要求第二部分:程序总体设计思绪第三部分:程序功效划分、图示及步骤图第四部分:程序设计数据、运行结果第五部分:程序优缺点第六部分:心得体会第七部分:附录(源程序)第八部分:附录(参考文件) 第一部分:课程设计名称、目标、要求名称:学生选修课程系统设计目标:利用C语言提升处理实际问题能力试验环境:Microsoft Visual C+ 6.0内容:假定有n门课程,每门课程有课程编号,课程名称,课程性质,总课时,讲课课时,试验或上机课时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。【功效】系统以菜单方法工作v课程信息录
2、入功效(课程信息用文件保留)输入v课程信息浏览功效输出v查询功效:(最少一个查询方法)算法v按学分查询l按课程性质查询l学生选修课程(可选项)v第二部分:程序总体设计思绪因为C语言是面对过程语言,故我设计思绪是依据目标程序运行过程来编写。具体设计思绪以下:程序要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功效。首先,考虑到程序数据输入,能够设置一个管理员登陆选项,经过该选项进入管理员界面,进行选修课录入和修改操作,最终将录入课程保留到对应文件中。然后定义多种函数功效包含查看,查询,删除等。另一个为学生登陆界面,该界面学生能够进行课程选择和浏览查询等操作。
3、在进行该操作之前需要对管理员保留文件进行读取,然后对其中内容进行查询等,在学生选好课程以后,能够将其选好课程保留于对应文件中,方便下次进行修改。经过函数层层调用来实现程序逻辑结构。中间经过文件打开和关闭实现对文件内部所包含数据操作。整个程序设计思绪到此结束。第三部分:程序功效划分、图示及步骤图【功效模块划分及其步骤图】本程序功效模块依据程序设计需求,综合程序实用性、人性化、智能化考虑,将程序划分为6个部分分别编写,程序主体功效将由这9个部分来完成。这9个部分依次是:1. 登录界面函数;void login()2. 学生登录界面据函数:void stu_login()3. 管理员登录界面函数:v
4、oid man_login()4. 退出界面函数:void bye_sys()5. 课程选择函数:void c_select()6. 课程浏览函数:void c_view()7. 课程查询函数:void c_search()8. 课程增加函数:void c_add()9. 课程删除函数:void c_delete()10. 菜单函数:void index()11. 主函数部分; main()总体设计:系统功效模块图部分函数步骤图:1、 课程选择函数:2、 课程查询函数3、 课程增加函数4、课程删除函数第四部分:程序设计数据、运行结果本程序是一款应用软件,故数据设计、程序运行结果应在程序利用中得
5、以表现,现在经过一个程序利用事例来对程序运行结果进行演示和实现。【软件利用举例】1、程序开始界面以下:选择某个选项,如进行管理员登录,进行课程增加进入管理员界面:2、再选择所要进行操作,如进行课程增加,结果以下:下面能够进行继续增加课程或退出:3、选择课程浏览,能够分页查看对应课程信息:第一页:第二页:4、课程查询查找结果:4、 管理员课程删除操作:删除后能够进行浏览,观察删除后结果:可见删除后只有一条统计。删除操作完成正确。下面进行学生操作使用方法:1、学生登陆界面:2、选择学生选课选项:3、学生登陆也可进行课程浏览和查询函数,其结果和管理员登陆相同,不再演示。第五部分:程序优缺点【程序优点
6、】算法是程序灵魂,程序优点首先表现在算法上优点,其次才是功效上。算法上优点关键表现在以下三点:1. 程序采取main主函数方法设计,程序主体功效大全部由该功效完成。程序如此设计有利于程序深入改善及有利于程序实施效率提升。2. 程序对文件数据读写采取了fread和fwrite块读写函数,能够将文件中数据完全读出,然后赋到定义数组中,再在对应数组中进行一系列操作,最终再写入文件。3. 插入操作在本程序中将课程信息直接插入数组最终一个节点,从而降低了数据相互移动,节省了时间。功效上优点关键表现在以下两点: 简练明了程序菜单。程序关键采取了层次不一样菜单,相互独立又相互联络,巧妙相接,符适用户使用习惯
7、和思维。 人性化程序提醒语言,程序提醒语言较人性化,不仅大多为祈使语句、疑问句,而且提醒明确,含有较强明确指导作用。程序提醒不仅层次分明,提醒方法多样,而且提醒信息井然有序,愈加有利于用户顺利、正确地看懂程序并进行操作。【程序缺点】关键表现在以下两点:1、 本程序没有进行对应密码操作,所以对于使用者来说可能存在比较大不保密性。需要改善。2、 本程序没有使用文本读写函数fscanf和fprintf,所以到课程文件和选课文件全部是二进制形式。第六部分:心得体会选课系统程序比起通讯录程序来讲好写部分,因为本程序用到了数组,对于数组操作掌握比较熟练,所以在编写程序时候困难没有那么多。本程序在编写过程中
8、用到了很多通讯录中模块化设计和函数相互调用思想,使得编写比较方便和好用。经过该系统课程设计分析,我掌握了模块化设计方法,了解和利用了结构化程序设计思想和方法,掌握和提升了利用C语言进行程序设计能力。程序设计过程,实际上是确定处理问题具体步骤,而这个步骤通常叫做步骤,在程序设计过程中理清楚整个问题步骤很关键,然后采取逐步细化方法实现整个程序。对于一个较大应用程序,通常不可能一次就设计出一个很完善系统。通常要先设计满足基础要求系统,然后再测试或在使用过程中不停完善,慢慢地做成一个功效很完善选修课程管理系统。所以在进行调试时候需要对很多变量了解和掌握其改变规律等,这对于我愈加好掌握visual C中
9、调试工含有很大帮助。总而言之经过这次课程设计,我对c语言使用和了解全部有了很大加深,对于编程思想也有了很多新了解和感受。第七部分:附录一、参考文件:1、李丽娟主编 ,C语言程序设计教程(第二版),人民邮电出版社2、严蔚敏主编,数据结构(C语言),清华大学出版社3、崔单主编,C语言程序设计案例精粹,电子工业出版社4、谭浩强主编,程序设计(第三版),清华大学出版社二、源程序#includestdio.h#includestdlib.h#includewindows.h#includestring.hvoid index();/首页void login();void bye_sys();/退出界面v
10、oid stu_login();/学生登录菜单 void c_select();void c_view();/课程浏览 void c_add();/增加课程void c_delete();void c_searchs();/学生查询函数void c_searchm();/管理员查询函数void c_viewm();/管理员浏览函数void c_views();/学生浏览函数struct course/定义课程结构体 int c_num; char c_name20; int c_score; int c_nelepeo;/课程已选人数 int c_melepeo;/课程人数上限;struct
11、student char s_number10; char s_password10;struct manager char m_name10; char m_password10;void index()/首页 char input; printf(nnttt*n); printf(ttt 湖南大学学生选课系统n); printf(ttt*nnn); printf(ttt*nnn); printf(ttt*nnn); printf(ttt*nnn); printf(ttt*设计者:刘晓斌*nnn); input=getchar(); system(cls);void login()/登陆界面
12、 void stu_login(); void man_login(); void bye_sys(); int input; do system(cls); printf(nnnt1.学生登录n); printf(t2.管理员登陆n); printf(t3.退出本系统n); printf(t请选择服务类别:); scanf(%d,&input); if (input!=1&input!=2&input!=3) /输入数不等于选项时候打印画面 printf(nt输入犯错!请重新选择n); printf(nt按任意键返回选择页面nt); getchar();getchar(); system(c
13、ls); if(input=3)/假如输入3退出系统 bye_sys(); while(input!=1&input!=2&input!=3); switch(input) case 1:stu_login();break; case 2:man_login();break; void bye_sys()/退出界面exit(0);void man_login() void c_add(); void c_delete(); void c_view(); void c_searchm(); int in; do system(cls); printf(nnt1.新增课程n); printf(t2
14、.删除课程n); printf(t3.课程浏览n); printf(t4.课程查询n); printf(t5.退出n); printf(nnt请选择服务种类:); scanf(%d,&in); if(in!=1&in!=2&in!=3&in!=4&in!=5) printf(nt没有这项服务t按任意重新选择); getchar();getchar(); while(in!=1&in!=2&in!=3&in!=4&in!=5); switch(in) case 1:c_add();break; case 2:c_delete();break; case 3:c_viewm();break; ca
15、se 4:c_searchm();break;case 5:login();break; void stu_login()/学生登录菜单 void c_select(); void c_view(); void c_searchs(); void login(); int input; do system(cls); printf(nnnt-学生登陆-); printf(nnt1.学生选课n); printf(t2.课程浏览n); printf(t3.课程查询n); printf(t4.退出n); scanf(%d,&input); if(input!=1&input!=2&input!=3&
16、input!=4) printf(nt没有这项服务n); printf(t按任意键重新选择); getchar(); getchar(); while(input!=1&input!=2&input!=3&input!=4); switch(input) case 1:c_select();break; case 2:c_views();break; case 3:c_searchs();break; case 4:login();break; void c_select() int n,in,i=0,j;int flag=0; FILE *fp; FILE *fp1; char input;
17、 struct course courses10; if(fp=fopen(course.dat,rb)=NULL) /判定是否存在课程 printf(nnnt课程不存在nn); printf(tnt); input=getchar(); input=getchar(); stu_login();/进入学生登陆菜单 else/存在话循环读取文件中信息直到文件指针到文件尾部 do fread(&coursesi,sizeof(struct course),1,fp); i=i+1; while(!feof(fp); fclose(fp);/文件读完后关闭 printf(nntt请输入你要选课程编
18、号:); scanf(%d,&n); if(fp1=fopen(courseselect.dat,rb)=NULL) fp1=fopen(courseselect.dat,wb); else fclose(fp1); fp1=fopen(courseselect.dat,ab); for(j=0;ji;j+) if(coursesj.c_num=n) flag+; if(flag=0) printf(nntt不存在对应课程n); printf(nntt继续选课请按1,退出请按2:n); scanf(%d,&in); switch(in) case 1:c_select();break; cas
19、e 2:stu_login();break; default: printf(输入错误,将返回登录界面!n); login();break; else fwrite(&coursesj,sizeof(struct course),1,fp1); fclose(fp1); printf(nntt选课成功t请选择:); printf(nntt1.继续选课); printf(nntt2.退出,返回登录界面!); scanf(%d,&in); switch(in) case 1:c_select();break; case 2:stu_login();break; default:break; voi
20、d c_viewm()/课程浏览 void stu_login(); void c_view() ; int inp,i=0,n=0; FILE *fp; char input; struct course courseview10; if(fp=fopen(course.dat,rb)=NULL) /判定是否存在课程 system(cls); printf(nnnt课程不存在nn); printf(tnt); getchar();getchar(); stu_login();/进入学生登陆菜单 else/存在话循环读取文件中信息直到文件指针到文件尾部 do fread(&courseview
21、i,sizeof(struct course),1,fp); i=i+1; while(!feof(fp); fclose(fp);/文件读完后关闭 do system(cls); if(i=1) printf(nnnttt没有统计!n); getchar();getchar(); man_login(); else printf(nt-共有%d条统计-,i-1); printf(nnt课程编号: %dn,courseviewn.c_num); printf(nnt课程名字: %sn,courseviewn.c_name); printf(nnt课程学分: %dn,courseviewn.c_
22、score); printf(nnt课程已选人数: %dn,courseviewn.c_nelepeo); printf(nnt课程人数上限: %dn,courseviewn.c_melepeo); printf(nnt1.上一页t2.下一页t3.回目录); printf(n请选择:); scanf (%d,&inp); switch(inp) case 1: if(n=0) printf(nt已抵达首页 t按任意键返回); input=getchar(); input=getchar(); else n=n-1; break; case 2: if(n=i-2) printf(nt已抵达尾页
23、t按人意见返回); input=getchar(); input=getchar(); else n=n+1; break; case 3:man_login();break; default: printf(nt操作错误t按任意键返回); getchar();getchar(); break; while(inp!=3); void c_views()/课程浏览 void stu_login(); void c_view() ; int inp,i=0,n=0; FILE *fp; char input; struct course courseview10; if(fp=fopen(cou
24、rse.dat,rb)=NULL) /判定是否存在课程 system(cls); printf(nnnt课程不存在nn); printf(tnt); getchar();getchar(); stu_login();/进入学生登陆菜单 else/存在话循环读取文件中信息直到文件指针到文件尾部 do fread(&courseviewi,sizeof(struct course),1,fp); i=i+1; while(!feof(fp); fclose(fp);/文件读完后关闭 do system(cls); if(i=1) printf(nnnttt没有统计!n); getchar();ge
25、tchar(); stu_login(); else printf(nt-共有%d条统计-,i-1); printf(nnt课程编号: %dn,courseviewn.c_num); printf(nnt课程名字: %sn,courseviewn.c_name); printf(nnt课程学分: %dn,courseviewn.c_score); printf(nnt课程已选人数: %dn,courseviewn.c_nelepeo); printf(nnt课程人数上限: %dn,courseviewn.c_melepeo); printf(nnt1.上一页t2.下一页t3.回目录); pri
26、ntf(n请选择:); scanf (%d,&inp); switch(inp) case 1: if(n=0) printf(nt已抵达首页 t按任意键返回); input=getchar(); input=getchar(); else n=n-1; break; case 2: if(n=i-2) printf(nt已抵达尾页t按人意见返回); input=getchar(); input=getchar(); else n=n+1; break; case 3:stu_login();break; default: printf(nt操作错误t按任意键返回); getchar();ge
27、tchar(); break; while(inp!=3); void c_searchs() void stu_login(); void c_searchs(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear10; if (fp=fopen(course.dat,rb)=NULL) /判定课程信息是否存在 system(cls); printf(nnt课程不存在t按任意键返回); getchar();getchar(); stu_login(); else/存在话循环读取文件中信息直到文件指针到文件尾部
28、 do fread(&courseseari,sizeof(struct course),1,fp); i=i+1; while(!feof(fp); fclose(fp); system(cls); printf(nnttt请输入你要查询课程编号:); scanf(%d,&id); do/检验输入是否符合要求 for(j=0;ji-1;j+) if(id=coursesearj.c_num) flag+; k=j; if(flag=1) system(cls); printf(nnt课程编号:%dn,courseseark.c_num); printf(nnt课程名字:%sn,courseseark.c_name); printf(nnt课程学分:%dn,courseseark.c_score); printf(nn