1、题目一、学生选课管理系 统目录第一部分:课程设计名称、 目的、要求 第二部分:程序总体设计思路 .第三部分:程序功能划分、图示及流程图 第四部分:程序设计数据、运行结果 第五部分:程序的优缺点 .第六部分:心得体会 .第七部分:附录(源程序) .第八部分:附录(参考文献) .第一部分:课程设计名称、目的、要求名称:学生选修课程系统设计目的:运用 C 语言提高解决实际问题的能力实验环境:Microsoft Visual C+ 6.0内容:假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于 60)自由选
2、课。【功能】系统以菜单方式工作课程信息录入功能(课程信息用文件保存)输入课程信息浏览功能输出查询功能:(至少一种查询方式)算法按学分查询按课程性质查询学生选修课程(可选项)第二部分:程序总体设计思路由于 C 语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。具体的设计思路如下:程序的要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先,考虑到程序的数据输入,可以设置一个管理员登陆选项,通过该选项进入管理员界面,进行选修课的录入和修改操作,最后将录入的课程保存到相应的文件中。然后定义各种函数的功能包括查看,查询,删除等。另一个为学生
3、登陆界面,该界面学生可以进行课程选择和浏览查询等操作。在进行该操作之前需要对管理员保存的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,可以将其选好的课程保存于相应的文件中,以便下次进行修改。通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内部所包含的数据的操作。整个程序的设计思路到此结束。第三部分:程序功能划分、图示及流程图【功能模块划分及其流程图】本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为 6 个部分分别编写,程序主体功能将由这 9 个部分来完成。这 9 个部分依次是:1. 登录界面函数;void logi
4、n()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_view不不 c_search不不
5、c_add不不 c_delete不不不不不不 不不不不不不不不c_select不不 c_view不不 c_search不不系统功能模块图部分函数流程图:1、 课程选择函数:不 不不 不 不 不 不 不 不 不 不 不 不flag+YN不 不coursesj.c_num=nj=0;jnt“);input=getchar();input=getchar();stu_login();/进入学生登陆菜单 else/存在的话循环读取文件中的信息直到文件指针到文件尾部 dofread(i=i+1;while(!feof(fp);fclose(fp);/文件读完后关闭printf(“nntt 请输入你要选课
6、程的编号:“);scanf(“%d“,if(fp1=fopen(“courseselect.dat“,“rb“)=NULL)fp1=fopen(“courseselect.dat“,“wb“);elsefclose(fp1);fp1=fopen(“courseselect.dat“,“ab“);for(j=0;jnt“);getchar();getchar();stu_login();/进入学生登陆菜单 else/存在的话循环读取文件中的信息直到文件指针到文件尾部 dofread(i=i+1;while(!feof(fp);fclose(fp);/文件读完后关闭dosystem(“cls“);
7、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“,cour
8、seviewn.c_melepeo);printf(“nnt1.上一页 t2.下一页t3.回目录“);printf(“n 请选择:“);scanf (“%d“,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();else n=n+1;break;case 3:man_login();break;d
9、efault: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(“course.dat“,“rb“)=NULL) /判断是否存在课程 system(“cls“);printf(“nnnt 课程不存在 nn“);printf(“tnt“);getchar();g
10、etchar();stu_login();/进入学生登陆菜单 else/存在的话循环读取文件中的信息直到文件指针到文件尾部 dofread(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_
11、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“,switch(inp)case 1:if(n=0)printf(“nt 已到达首页 t 按任意键返回 “);input=getchar();input=getchar();elsen=n-
12、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();getchar();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 cou
13、rse coursesear10;if (fp=fopen(“course.dat“,“rb“)=NULL) /判断课程信息是否存在system(“cls“);printf(“nnt 课程不存在 t 按任意键返回“);getchar();getchar();stu_login();else/存在的话循环读取文件中的信息直到文件指针到文件尾部 dofread(i=i+1;while(!feof(fp);fclose(fp);system(“cls“);printf(“nnttt 请输入你要查询的课程编号:“);scanf(“%d“,do/检查输入是否符合要求 for(j=0;ji-1;j+)if
14、(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();pri
15、ntf(“nnt1.回目录继续查询t2.退出查询系统n“);printf(“请选择:“);scanf(“%d“,switch(inp)case 1:c_searchs();case 2:stu_login();default:printf(“nt 没有这项服务t 请按任意键重新输入“);getchar();getchar(); else system(“cls“);printf(“nnt 不存在对应记录n“);printf(“nnt1.回目录继续查询t2.退出查询系统n“);printf(“请选择:“);scanf(“%d“,switch(inp)case 1:c_searchs();case
16、 2:stu_login();default:printf(“nt 没有这项服务t 请按任意键重新输入“);getchar();getchar(); while(inp!=1); void c_searchm() void stu_login();void c_searchm();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 按任意键返回“);g
17、etchar();getchar();stu_login();else/存在的话循环读取文件中的信息直到文件指针到文件尾部 dofread(i=i+1;while(!feof(fp);fclose(fp);system(“cls“);printf(“nnttt 请输入你要查询的课程编号:“);scanf(“%d“,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
18、课程名字:%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“,switch(inp)case 1:c_searchm();case 2:man_login();defau
19、lt:printf(“nt 没有这项服务t 请按任意键重新输入“);getchar();getchar(); else system(“cls“);printf(“nnt 不存在对应记录n“);printf(“nnt1.回目录继续查询t2.退出查询系统n“);printf(“请选择:“);scanf(“%d“,switch(inp)case 1:c_searchm();case 2:man_login();default:printf(“nt 没有这项服务t 请按任意键重新输入“);getchar();getchar(); while(inp!=1); void c_add()/增加课程voi
20、d 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“, printf(“nntt2.课程名字:“);scanf(“%s“,course_new.c_name);printf(“nntt3.课程学分:“);scanf(“%d“,printf(“nntt4.课程已选人数:“);scanf(“%d“,printf(“nn
21、tt5.课程人数上限:“);scanf(“%d“,if(fp=fopen(“course.dat“,“rb“)!=NULL)dofread(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(fclose(fp);printf(“nntt 信息输入完毕t 按任意键继续“);getchar();getchar();dosystem(“cls“);printf(“nntt1.继续输入“);printf(“nntt2.返回管理菜单“);