C语言课程设计学生选课系统word文档良心出品

上传人:仙*** 文档编号:66801502 上传时间:2022-03-29 格式:DOC 页数:32 大小:562KB
返回 下载 相关 举报
C语言课程设计学生选课系统word文档良心出品_第1页
第1页 / 共32页
C语言课程设计学生选课系统word文档良心出品_第2页
第2页 / 共32页
C语言课程设计学生选课系统word文档良心出品_第3页
第3页 / 共32页
点击查看更多>>
资源描述
题目一、学生选课管理系统目录第一部分:课程设计名称、目的、要求.第二部分:程序总体设计思路.第三部分:程序功能划分、图示及流程图.第四部分:程序设计数据、运行结果.第五部分:程序的优缺点.第六部分:心得体会.第七部分:附录(源程序).第八部分:附录(参考文献).第一部分:课程设计名称、目的、要求名称: 学生选修课程系统设计目的:运用C 语言提高解决实际问题的能力实验环境: Microsoft Visual C+ 6.0内容:假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于 60)自由选课。【功能】系统以菜单方式工作课程信息录入功能 (课程信息用文件保存 )输入课程信息浏览功能输出查询功能: (至少一种查询方式 )算法按学分查询按课程性质查询学生选修课程 (可选项 )第二部分:程序总体设计思路由于 C语言是面对过程的语言, 故我的设计思路是根据目标程序运行的过程来编写的。具体的设计思路如下:程序的要求是设计学生选修课管理系统, 对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先,考虑到程序的数据输入,可以设置一个管理员登陆选项, 通过该选项进入管理员界面,进行选修课的录入和修改操作, 最后将录入的课程保存到相应的文件中。然后定义各种函数的功能包括查看,查询,删除等。另一个为学生登陆界面,该界面学生可以进行课程选择和浏览查询等操作。在进行该操作之前需要对管理员保存的文件进行读取, 然后对其中的内容进行查询等, 在学生选好课程以后, 可以将其选好的课程保存于相应的文件中, 以便下次进行修改。 通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内部所包含的数据的操作。整个程序的设计思路到此结束。第三部分:程序功能划分、图示及流程图【功能模块划分及其流程图】本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6 个部分分别编写,程序主体功能将由这9 个部分来完成。这9 个部分依次是:1. 登录界面函数; void login()2. 学生登录界面据函数: void stu_login()3. 管理员登录界面函数: void 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()总体设计:学生选课系统管理员登录学生登录新增课程删除课程课程浏览查询课程学生选课课程浏览课程查询c_add函数c_delete函数 c_view函数c_search函数 c_select函数c_view函数c_search函数系统功能模块图部分函数流程图:1、课程选择函数:开 始输入要选择的课程的编号j=0;ji;( i初 始 化 为 0)coursesj.c_num=nYflag+j+flag=0YNN没有找到对应课程选课成功结 束2、课程查询函数开 始输入要查询的课程的编号j=0;ji-1;( i初 始 化 为 0)coursesj.c_num=nNYflag+j+flag=0YN没有找到对应课程打印相应的课程结 束3、课程增加函数开 始输入要增加的课程的编号j=0;ji-1;( i初 始 化 为 0)coursesj.c_num=nYprintf ( “编 号 已 使 用 过 ”)j+Nfrwrite 写 入 课 程信息到文件结 束4、课程删除函数开 始输 入 要 删 除 的 课 程 的 编 号 nj=0;ji-1;( i初 始 化 为 0)coursesj.c_num=nYNk=0;kj;frwrite 写 入 课 程信息到文件k+k=j+1;ki-1;k+j+不存在相应课程结 束第四部分:程序设计数据、运行结果本程序是一款应用软件,故数据设计、程序运行结果应在程序的运用中得以体现,现在通过一个程序的运用事例来对程序运行结果进行演示与实现。【软件运用举例】1、程序开始界面如下:选择某个选项,如进行管理员登录,进行课程的增加进入管理员界面:2、再选择所要进行的操作,如进行课程增加,结果如下:下面可以进行继续增加课程或者退出:3、选择课程浏览,可以分页查看相应的课程信息:第一页:第二页:4、课程查询查找结果:4、管理员课程删除操作:删除后可以进行浏览,观察删除后的结果:可见删除后只有一条记录。删除操作完成正确。下面进行学生操作的使用方法:1、学生登陆界面:2、选择学生选课选项:3、学生登陆也可进行课程浏览和查询函数,其结果与管理员登陆相同,不再演示。第五部分:程序的优缺点【程序的优点】算法是程序的灵魂, 程序的优点首先表现在算法上的优点, 其次才是功能上的。算法上的优点 主要体现在以下三点:1. 程序采用 main 主函数方式设计,程序的主体的功能大都由该功能完成。程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。2. 程序对文件数据的读写采用了 fread 和 fwrite 块读写函数,能够将文件中的数据完全读出,然后赋到定义的数组中,再在相应的数组中进行一系列操作,最终再写入文件。3. 插入操作在本程序中将课程信息直接插入数组最后一个节点,从而减少了数据的相互移动,节省了时间。功能上的优点主要体现在以下两点:简洁明了的程序菜单。 程序主要采用了层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。人性化的程序提示语言, 程序提示语言较人性化, 不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。程序提示不仅层次分明, 提示方式多样, 而且提示信息井然有序,更加有利于用户顺利、准确地看懂程序并进行操作。【程序的缺点】主要表现在以下两点:1、本程序没有进行相应的密码操作,所以对于使用者来说可能存在比较大的不保密性。需要改善。2、 本程序没有使用文本读写函数 fscanf 和 fprintf ,所以的到的课程文件和选课文件都是二进制形式。第六部分:心得体会选课系统程序比起通讯录程序来讲好写一些,由于本程序用到了数组,对于数组的操作掌握的比较熟练,所以在编写程序的时候困难没有那么多。本程序在编写的过程中用到了许多通讯录中的模块化设计和函数互相调用的思想,使得编写比较方便和好用。通过该系统的课程设计分析,我掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法,掌握和提高了运用C 语言进行程序设计的能力。程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做流程,在程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序。对于一个较大的应用程序,一般不可能一次就设计出一个很完善的系统。通常要先设计满足基本要求的系统,然后再测试或者在使用的过程中不断完善,慢慢地做成一个功能很完善选修课程管理系统。所以在进行调试的时候需要对许多变量理解和掌握其变化规律等,这对于我更好的掌握visual C中调试的工具有很大的帮助。总之经过这次课程设计,我对c 语言的使用和理解都有了很大的加深,对于编程的思想也有了很多新的理解和感受。第七部分:附录一、参考文献:1、李丽娟主编,C 语言程序设计教程(第二版) ,人民邮电出版社2、严蔚敏主编,数据结构(C 语言),清华大学出版社3、崔单主编, C 语言程序设计案例精粹,电子工业出版社4、谭浩强主编,程序设计(第三版) ,清华大学出版社二、源程序#includestdio.h#includestdlib.h#includewindows.h#includestring.hvoid index();/ 首页void login();void bye_sys();/ 退出界面void 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 studentchar s_number10;char s_password10;struct managerchar 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()/ 登陆界面void stu_login();void man_login();void bye_sys();int input;dosystem(cls);printf(nnnt1.学生登录n);printf(t2.printf(t3.管理员登陆退出本系统n);n);printf(t 请选择服务类别:);scanf(%d,&input);if (input!=1&input!=2&input!=3)/输入数不等于选项的时候打印画面printf(ntprintf(nt输入出错 ! 请重新选择按任意键返回选择页面n);nt);getchar();getchar();system(cls);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;dosystem(cls);printf(nnt1. 新增课程 n);printf(t2. 删除课程 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;case 4:c_searchm();break;case 5:login();break;void stu_login()/ 学生登录菜单void c_select();void c_view();void c_searchs();void login();int input;dosystem(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&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;struct course courses10;if(fp=fopen(course.dat,rb)=NULL) /判断是否存在课程printf(nnnt课程不存在 nn);printf(tnt);input=getchar();input=getchar();stu_login();/ 进入学生登陆菜单else/存在的话循环读取文件中的信息直到文件指针到文件尾部dofread(&coursesi,sizeof(struct course),1,fp);i=i+1;while(!feof(fp);fclose(fp);/ 文件读完后关闭printf(nntt请输入你要选课程的编号:);scanf(%d,&n);if(fp1=fopen(courseselect.dat,rb)=NULL)fp1=fopen(courseselect.dat,wb);elsefclose(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;case 2:stu_login();break;default:printf( 输入错误,将返回登录界面!n);login();break;elsefwrite(&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;void c_viewm()/ 课程浏览void stu_login();void c_view() ;intinp,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/存在的话循环读取文件中的信息直到文件指针到文件尾部dofread(&courseviewi,sizeof(struct course),1,fp);i=i+1;while(!feof(fp);fclose(fp);/ 文件读完后关闭dosystem(cls);if(i=1)printf(nnnttt没有记录! n);getchar();getchar();man_login();elseprintf(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. 回目录 );printf(n请选择: );scanf (%d,&inp);switch(inp)case 1:if(n=0)printf(nt已到达首页t 按任意键返回);input=getchar();input=getchar();elsen=n-1;break;case 2:if(n=i-2)printf(nt已到达尾页 t 按人意见返回);input=getchar();input=getchar();elsen=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() ;intinp,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/存在的话循环读取文件中的信息直到文件指针到文件尾部dofread(&courseviewi,sizeof(struct course),1,fp);i=i+1;while(!feof(fp);fclose(fp);/ 文件读完后关闭dosystem(cls);if(i=1)printf(nnnttt没有记录! n);getchar();getchar();stu_login();elseprintf(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.回目录 );printf(n 请选择: );scanf (%d,&inp);switch(inp)case 1:if(n=0)printf(nt已到达首页t 按任意键返回);input=getchar();input=getchar();elsen=n-1;break;case 2:if(n=i-2)printf(nt已到达尾页 t 按人意见返回);input=getchar();input=getchar();elsen=n+1;break;case 3:stu_login();break;default:printf(nt操作错误 t 按任意键返回);getchar();getchar();break;while(inp!=3);void c_searchs()void stu_login();void c_searchs();intid,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/存在的话循环读取文件中的信息直到文件指针到文件尾部dofread(&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(nnt 课程已选人数 :%dn,courseseark.c_nelepeo); printf(nnt 课程人数上限 :%dn,courseseark.c_melepeo); getchar();getchar();printf(nnt1. 回目录继续查询t2.退出查询系统n);printf( 请选择: );scanf(%d,&inp);switch(inp)case 1:c_searchs();case 2:stu_login();default:printf(nt没有这项服务t 请按任意键重新输入);getchar();getchar();elsesystem(cls);printf(nnt不存在对应记录n);printf(nnt1. 回目录继续查询t2.退出查询系统n);printf( 请选择: );scanf(%d,&inp);switch(inp)case 1:c_searchs();case 2:stu_login();default:printf(nt没有这项服务t 请按任意键重新输入);getchar();getchar();while(inp!=1);void c_searchm()void stu_login();void c_searchm();intid,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/存在的话循环读取文件中的信息直到文件指针到文件尾部dofread(&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(nnt 课程已选人数 :%dn,courseseark.c_nelepeo); printf(nnt 课程人数上限 :%dn,courseseark.c_melepeo); getchar();getchar();printf(nnt1. 回目录继续查询t2.退出查询系统n);printf( 请选择: );scanf(%d,&inp);switch(inp)case 1:c_searchm();case 2:man_login();default:printf(nt没有这项服务t 请按任意键重新输入);getchar();getchar();elsesystem(cls);printf(nnt不存在对应记录n);printf(nnt1. 回目录继续查询t2.退出查询系统n);printf( 请选择: );scanf(%d,&inp);switch(inp)case 1:c_searchm();case 2:man_login();default:printf(nt没有这项服务t 请按任意键重新输入);getchar();getchar();while(inp!=1);void c_add()/ 增加课程void c_add();void man_login();int i=0,j,inp;FILE *fp;struct course course_new;struct course courses10;system(cls);printf(nntt请输入课程信息);printf(nntt1. 课程编号 :);scanf(%d,&course_new.c_num);printf(nntt2. 课程名字 :);scanf(%s,course_new.c_name);printf(nntt3. 课程学分 :);scanf(%d,&course_new.c_score);printf(nntt4. 课程已选人数:);scanf(%d,&course_new.c_nelepeo);printf(nntt5. 课程人数上限:);scanf(%d,&course_new.c_melepeo);if(fp=fopen(course.dat,rb)!=NULL)dofread(&coursesi,sizeof(struct course),1,fp);i=i+1;while(!feof(fp);fclose(fp);for(j=0;j=i-1;j+)if(course_new.c_num=coursesj.c_num)system(cls);printf(nnttt对不起,这个编号已经使用过nntt按任意键返回管理菜单);getchar();getchar();man_login();break;if(fp=fopen(course.dat,rb)=NULL)fp=fopen(course.dat,wb);elsefclose(fp);fp=fopen(course.dat,ab);fwrite(&course_new,sizeof(struct course),1,fp);fclose(fp);printf(nntt信息输入完毕t按任意键继续);getchar();getchar();dosystem(cls);printf(nntt1.printf(nntt2.printf(nntt继续输入 );返回管理菜单请选择 ););scanf(%d,&inp);if(inp!=1&inp!=2)printf( 输入不符合要求t 按任意键重新选择);getchar();getchar();while(inp!=1&inp!=2);switch(inp)case 1:c_add();break;case 2:man_login();break;void c_delete()/ 查询后删除FILE *fp;inti=0,j,n,k,flag=0;struct course courses10;void c_delete();void man_login();printf(nntt请输入你要删除的课程编号:);scanf(%d,&n);if(fp=fopen(course.dat,rb)!=NULL)dofread(&coursesi,sizeof(struct course),1,fp);i=i+1;while(!feof(fp);fclose(fp);elseprintf(nntt不存在任何课程t 按任意键返回 );getchar();getchar();man_login();for(j=0;ji-1;j+)if(coursesj.c_num=n)flag=1;fp=fopen(course.dat,wb);for(k=0;kj;k+)fwrite(&coursesk,sizeof(struct course),1,fp);fclose(fp);fp=fopen(course.dat,ab);for(k=j+1;ki-1;k+)fwrite(&coursesk,sizeof(struct course),1,fp);printf(nntt记录已删除!t 按任意键返回 ntt);getchar();getchar();man_login();fclose(fp);if(flag=0)printf(nntt不存在对应的课程t 按任意键返回 );getchar();getchar();man_login();/ printf(nntt记录已删除! t 按任意键返回ntt);int main()index();login();return 0;
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!