C语言课程设计-学生选修课程管理系统(36页).doc
-C语言课程设计-学生选修课程管理系统-第 34 页内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生选修课程管理系统学生姓名:学 号:专 业:软件工程班 级:软件一班指导教师:日 期:2014年12月23日内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生选修课程管理系统指导教师余金林时间2014.12.132014.12.23一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。学生选修课程管理系统设计假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:1.课程信息录入功能(课程信息用文件保存)输入;课程信息浏览功能输出2.查询功能:(至少一种查询方式)算法 按学分查询 按课程名称查询3.学生选修课程(可选项)三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安,机械工业出版社目 录内蒙古科技大学课程设计任务书I目 录II第一章 需求分析31.1引言31.2任务概述31.3数据描述31.4功能需求31.5性能需求31.6运行需求41.7任务计划4第二章概要设计42.1总体设计42.2数据类型设计(或数据结构设计)52.3接口设计 /函数声明62.4运行界面设计6第三章详细设计103.1输入模块设计103.2输出模块设计123.3查找模块设计18第四章测试分析204.1测试程序执行情况20第五章用户手册(可选)265.1使用说明265.2运行说明26第六章课程设计总结27附录:程序代码28参考文献48致谢48第一章 需求分析1.1 引言本课设真对于选修课,增加课程,阅览课程,按学分选择课程,等一系列功能。现在大学生正处于选课阶段,特作本课设,帮助学生选课。1.2 任务概述1、采用结构体的形式进行信息输入与输出。2、对输入的课程的信息进行简单的排序。3、对输入的课程的信息进行删除。4、对输入的课程信息进行修改。5、对输入的课程信息进行浏览。6、对输入的课程信息进行查询。1.3 数据描述课程编号:课程名字:课程学分:课程性质:课程学时:开课学期:001幸福学2哲学163-8周春002大学语文2文学1412-18周春1.4 功能需求1、有登陆系统的界面和一些必要的提示。2、有输入信息的界面和返回主目录的功能。3、有信息的浏览功能,对信息进行系统的输出。4、有信息的删除功能,对无关紧要或不必要并且已输入的信息进行删除。5、有信息的修改功能,对有错误或对需要修改的信息进行修改。6、有信息的查询功能,按学分可进行查询。1.5 性能需求1、具有一定的信息提示功能。2、对信息由基本的处理功能,如:输入、输出、查询、修改、删除等。3、对管理的信息进行系统的输入和输出。1.6 运行需求1、输入信息要严格按照提示顺序进行输入。2、输入选择项功能,要在选项范围内进行选择。3、输入的信息严格按照要求的格式输出。4、输入的信息必须清晰,不可连续不断。1.7 任务计划1、本程序是以为了更好地帮助学生选课而编写的一个程序。目的是以以一种更系统的操作来帮助学生选课,所以本程序的输入是以数据和文字两种形式输入的,输出也是一样。而本程序可以对学生所选课程进行输入和输出,对信息进行删除和修改并可以对信息进行浏览,使使用者更方便的浏览所选课程的信息。还可以对信息尽查找,方便使用者对信息进行提取。2、对程序进行调试时,如果有输入错的信息的时候,本程序会对使用者进行提示,而让使用者对信息进行重新输入。第二章 概要设计2.1 总体设计 学生选课 课程浏览 课程查询学生登录 新增课程 课程浏览登陆页面管理员登录 课程查询退出系统2.2 数据类型设计(或数据结构设计)struct course/定义课程结构体int c_num;/课程编号char c_name20;/课程名字int c_score;/课程学分char c_properties20;/课程性质int c_time;/课程学时char c_term20;/开课学期struct studentchar s_number10;char s_password10;struct managerchar m_name10;char m_password10;2.3 接口设计 /函数声明表2.1:函数列表函数名函数格式 /即函数首部函数功能login()void登陆bye_sys()void退出界面stu_login()void学生登陆菜单c_select()void选择课程c_view()void课程浏览c_add()void新增课程c_searchs()void学生查询函数c_searchm()void管理员查询函数c_viewm()void管理员浏览函数c_views()void学生浏览函数2.4 运行界面设计void login()/登陆界面void stu_login();void man_login();void bye_sys();int input;dosystem("cls");printf("nnnnnntttt1.学生登陆n");printf("ntttt2.管理员登陆n");printf("ntttt3.退出系统nnn");printf("nnnt请输入项目代号:");scanf("%d",&input);if(input!=1&&input!=2&&input!=3)printf("nt 输入有误!请重新输入n");printf("nt 按任意键返回nt");getchar();getchar();system("cls");if(input=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_view();void c_searchm();int in;dosystem("cls");printf("nnnnttt -管理员登陆菜单-nn");printf("nntttt1.新增课程n");printf("ntttt2.课程浏览n");printf("ntttt3.课程查询n");printf("ntttt4.退出n");printf("nnt请输入项目代号:");scanf("%d",&in); while(in!=1&&in!=2&&in!=3&&in!=4);switch(in)case 1:c_add();break;case 2:c_viewm();break;case 3:c_searchm();break;case 4:login();break;第三章 详细设计3.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("%s",course_new.c_properties);printf("nntt5.课程学时:");scanf("%d",&course_new.c_time);printf("nntt6.开课学期:");scanf("%s",course_new.c_term);if(fp=fopen("course.dat","rb")!=NULL)dofread(&coursesi,sizeof(struct course),1,fp);i=i+1;while(!feof(fp);fclose(fp);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);while(inp!=1&&inp!=2);switch(inp)case 1:c_add();break;case 2:man_login();break;3.2 输出模块设计void 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("nnt 课程不存在nn");printf("t<按任意键返回菜单>nt");getchar();getchar();man_login();elsedofread(&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("nttt-共有%d条记录-",i-1);printf("nnttt 课程编号: %dn",courseviewn.c_num);printf("nnttt 课程名字: %sn",courseviewn.c_name);printf("nnttt 课程学分: %dn",courseviewn.c_score);printf("nnttt 课程性质: %sn",courseviewn.c_properties);printf("nnttt 课程学时: %dn",courseviewn.c_time);printf("nnttt 开课学期: %sn",courseviewn.c_term);printf("nntt1.上一页t2.下一页t3.回目录");printf("nt请选择: ");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();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("t<按任意键返回菜单>nt");getchar();getchar();stu_login();elsedofread(&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("nttt-共有%d条记录-",i-1);printf("nnttt 课程编号: %dn",courseviewn.c_num);printf("nnttt 课程名字: %sn",courseviewn.c_name);printf("nnttt 课程学分: %dn",courseviewn.c_score);printf("nnttt 课程性质: %sn",courseviewn.c_properties);printf("nnttt 课程学时: %dn",courseviewn.c_time);printf("nnttt 开课学期: %sn",courseviewn.c_term);printf("nntt1.上一页t2.下一页t3.回目录");printf("nt请选择: ");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;while(inp!=3);3.3 查找模块设计 void c_searchm()void man_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按任意键返回");getchar();getchar();man_login();elsedofread(&courseseari,sizeof(struct course),1,fp);i=i+1;while(!feof(fp);fclose(fp);system("cls");printf("nnttt 请输入你要查询的课程学分:");scanf("%d",&id);dofor(j=0;j<i-1;j+)if(id=coursesearj.c_score)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 课程性质:%sn",courseseark.c_properties);printf("nnt 课程学时:%dn",courseseark.c_time);printf("nnt 开课学期:%sn",courseseark.c_term);getchar();getchar();printf("nnt1.回目录继续查询t2.退出查询系统n");printf("请选择:");scanf("%d",&inp);switch(inp)case 1:c_searchm();case 2:man_login();elsesystem("cls");printf("nnt 不存在对应记录n");printf("nnt1.回目录继续查询t2.退出查询系统n");printf("请选择:");scanf("%d",&inp);switch(inp)case 1:c_searchm();case 2:man_login();while(inp!=1);第四章 测试分析4.1 测试程序执行情况1、 登陆2、 学生登陆界面3、 管理员登录界面4、 录入课程5、课程浏览6、课程查询报错7、学生选课界面8、学生选课信息浏览查询界面第五章 用户手册(可选)5.1 使用说明操作如下:输入:将所选修的课程信息输入。输出:选课信息、课程查询等。根据不同的需要选择,进入浏览信息。进入查询信息:则屏幕会出现按学分。当信息输入正确,进入你所需要的菜单程序中。所选课程信息:显示课程编号、课程名称、课程性质、课程学时、课程学分 开课学期。1、这个学生管理系统登陆较为方便,主菜单界面较为清晰,用户可以选择相应的功能进行管理。2由于系统不完善,安全性不高,所以用户在使用系统时,不要挑战,要按照提示信息输入。3、该系统缺点很多,对于很多错误情况不能进行安全处理,系统不稳定。4、用户管理信息,要在信息全部完善后方可全面浏览信息。5.2 运行说明(1)根据正确的提示安装软件。(2)Intel486以上系列、AMD K6 以上系列等PC台式机和便携式电脑都可运行。 (3) 打开该程序系统,浏览菜单,根据需要选择功能,进行各项操作。第六章 课程设计总结(1)通过这次的课程设计,使我了解了一个简单的学生选课系统的设计过程,并且基本掌握了Microsoft Visual C+的基本用法,掌握C语言程序设计课程的基本知识及其应用情况,加深对该课程的理解,在这次设计过程中使我对编程和程序的开发建立了浓厚的兴趣。(2)在设计过程中遇到了很多的问题,但是最后通过自己的努力或者在网上寻找最后都得到了解决,虽然这次的设计是一个很小的程序但是设计这样的程序真的不简单呀,虽然这次的设计时间很短,并且程序也不是很大,但是还是遇到了许多问题,但是我相信在以后的学习中我会更加的努力,并且努力的改正现在的程序,使之程序的功能更加的完善。(3)通过此次编程培养了我们结构化程序设计的思想,加深了对高级语言基本语言要素和控制结构的理解,锻炼我们独立思考制作程序的能力,并且掌握了一些课程设计的相关知识与实践操作能力,为以后的学习提供了锻炼的机会。经过设计和开发,我对于数据的一致性的问题也通过程序进行了有效的解决。从而是我对c语言这门课程有了更好的了解。附录:程序代码#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<string.h>void login();/登陆void bye_sys();/退出界面void stu_login();/学生登陆菜单void c_select();/选择课程void c_view();/课程浏览void c_add();/新增课程void c_searchs();/学生查询函数void c_searchm();/管理员查询函数void c_viewm();/管理员浏览函数void c_views();/学生浏览函数struct course/定义课程结构体int c_num;/课程编号char c_name20;/课程名字int c_score;/课程学分char c_properties20;/课程性质int c_time;/课程学时char c_term20;/开课学期struct studentchar s_number10;char s_password10;struct managerchar m_name10;char m_password10;int main()/主函数部分 system("color e4");login();return 0;void login()/登陆界面void stu_login();void man_login();void bye_sys();int input;dosystem("cls");printf("nnnnnntttt1.学生登陆n");printf("ntttt2.管理员登陆n");printf("ntttt3.退出系统nnn");printf("nnnt请输入项目代号:");scanf("%d",&input);if(input!=1&&input!=2&&input!=3)printf("nt 输入有误!请重新输入n");printf("nt 按任意键返回nt");getchar();getchar();system("cls");if(input=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_view();void c_searchm();int in;dosystem("cls");printf("nnnnttt -管理员登陆菜单-nn");printf("nntttt1.新增课程n");printf("ntttt2.课程浏览n");printf("ntttt3.课程查询n");printf("ntttt4.退出n");printf("nnt请输入项目代号:");scanf("%d",&in); while(in!=1&&in!=2&&in!=3&&in!=4);switch(in)case 1:c_add();break;case 2:c_viewm();break;case 3:c_searchm();break;case 4:login();break;void stu_login()/学生登陆void c_select();void c_view();void c_searchs();void login();int input;dosystem("cls");printf("nnnnttt -学生登陆菜单-nn");printf("nntttt1.学生选课n");printf("ntttt2.课程浏览n");printf("ntttt3.课程查询n");printf("ntttt4.退出nn");printf("ntt请输入项目代号:");scanf("%d",&input);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("t<按任意键返回管理菜单>nt");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;j<i;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;elsefwrite(&coursesj,sizeof(struct course),1,fp1);fclose(fp1);printf("nnttt 选课成功n");printf("nttt1.继续选课");printf("nttt2.返回登录界面n");printf("请选择:");scanf("%d",&in);switch(in)case 1:c_select();break;case 2:stu_login();break;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