收藏 分享(赏)

C语言课程设计 学生选修课系统.doc

上传人:精品资料 文档编号:10823829 上传时间:2020-01-12 格式:DOC 页数:22 大小:309KB
下载 相关 举报
C语言课程设计 学生选修课系统.doc_第1页
第1页 / 共22页
C语言课程设计 学生选修课系统.doc_第2页
第2页 / 共22页
C语言课程设计 学生选修课系统.doc_第3页
第3页 / 共22页
C语言课程设计 学生选修课系统.doc_第4页
第4页 / 共22页
C语言课程设计 学生选修课系统.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、中 国 地 质 大 学本 科 生 课 程 论 文 封 面课 程 名 称 C 语言课程设计 教 师 姓 名 邵老师 本科生姓名 丁梦营 本科生学号 20091001223 本科生专业 应用化学 所 在 院 系 材化学院 类别: C.本科生 日期: 2011 年 7 月 7 日 课程设计评语对课程论文的评语:平时成绩: 课程论文成绩:总 成 绩: 评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录课程设计评语 2目 录 31课程论文题目 42程序设计思路 43功能模块图 54数据结构设计 55算法设

2、计 66程序代码 137程序运行结果 228编程中遇到的困难及解决方法 259总结心得及良好建议 2610致谢 261课程论文题目名称:学生选修课系统设计【要求】假定有 n 门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课时间,实验或上级时间,学分,开课学期等信息,学生可按要求(如总学分不超过 60)自由选课。是设计一选修课课程系统,使只能提供以下功能:(1)系统一菜单方式工作(2)课程信息和学生选课信息录入功能(课程信息用文件保存输入(3)课程信息浏览功能输出(4)查询功能(至少一种查询方式)算法(5)按学分查询(6)某门课程学生选修情况(可选项)【提示】数据结构可用结构体,包括

3、授课和选课两个结构体,其中课程结构体成员包括编号,课程名称,课程性质,总学时,授课学时,实验或上机时间,学分,开课学期。学秀结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况。2程序设计思路1、 需求分析系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。2、总体设计整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块。3、详细设计数据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。Struct Char cour

4、seCode10; /课程编号Char courseName20; /课程名称Char courseType10; /课程类别Int totalPeriod; /总学时Int classPeriod; /授课学时Int experiPeriod; /上机学时Float creditHour; /学分Int term; /开课学期CourseInfoN; /课程信息结构体StructInt stuNo; /学号;Char courseCode10; /课程编号StuCourInfoN; /学生选课信息结构体4.(1) 信息输入模块从键盘输入课程信息和学生选课信息,写入文件。 (fwrite, f

5、printf)(2)信息浏览模块分屏显示课程信息,每屏 10 条课程记录,按任意键继续。从文件中读数据(fread,fscanf) ,然后再显示。(3)信息查询模块通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。3功能模块图显示课程信息模块查询模块主模模块增加模块删除模块修改模块选课模块显示选课情况模块4. 数据结构设计由于 C 语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。在编写本程序的过程中,首先借助老师给

6、的指导材料,确定了目标程序运行的次序与界面,即本程序首先运行【用户系统】菜单界面,其次程序运行【用户插入课程信息】及【用户浏览课程】菜单界面,最后程序运行【统计选课信息】及【选课】界面。如果用户选择【插入用户信息】选项则程序进入出入用户课程信息界面。需要一次输入课程编号,课程名称,课程性质,总学时,授课时间,实验或上机学时,学分,开课学期等信息;如果用户选择【浏览课程】选项则程序进入【浏览课程】界面,将会显示所选课程的信息;如果用户选择【查询】选项则会显示按学分查询的选课信息;一次用户还可以查看某门课程的所选情况。 其次,根据目标程序运行的次序与界面,确定设计顺利,设计界面(包括各部分菜单与用

7、户提示信息) 。再次是按照程序运行的各界面下的菜单功能编写各功能模块,并调试程序各功能模块,使各模块能够稳定高效准确地完成对应功能。最后是程序的总体调试及功能完善,此部分从学生选课的角度出发,考虑了更加人性化、更加合理、更加高效准确、更加智能化的设计。5. 算法设计开始打开文件将学好和密码读入数组中输入密码和学号密码、学好?换回 1 换回 0上图是简单的将输入学号和密码的过程提示是一遍,但实际函数中我使用的三从循环。第一重循环是输入学号;第二重循环是判断该学会是否存在,若学号不存在便提示是再输,还是退出系统;在学号存在时进入第三重循环,输入密码(注:学号和密码是在运行此函数时从文件中读到数组里

8、)并在数组中查找,若有和该密码相等的数组元素,就将进入系统,否则提示继续或退出.开始打开文件并将课程信息读入数组输入查询类型Inset()查询模块增加模块删除模块修改模块选课模块显示课程信息模块显示选课情况模块退出结束在次函数中用户通过输入选项进入不同的函数模块。当每次运行一个模块后,又进行选择。6. 程序代码#include#include#include #define M 20#define N 100 int x; /x 为供选课程数 /*主主菜单函数开始*/void menu()int n,w;void enter_linformation();void browse_linform

9、ation();void enter_sinformation();void search_num();void search_score();void l_choice_num();doputs(“tt*MENU*nn“);puts(“tttt 1.课程信息录入“);puts(“tttt 2.学生选课信息录入“);puts(“tttt 3.课程信息浏览“);puts(“tttt 4.按课程号查询“);puts(“tttt 5.按学分查询“);puts(“tttt 6.某门课程学生选修情况“);puts(“tttt 7.退出“);puts(“nntt*n“);printf(“Choice yo

10、ur number(1-7): bb“);scanf(“%d“,if(n7)w=1;getchar();else w=0;while(w=1);switch(n)case 1:enter_linformation();break;/课程信息录入case 2:enter_sinformation();break;/学生选课信息录入case 3:browse_linformation();break;/课程信息浏览case 4:search_num();break;/按课程号查询case 5:search_score();break;/按学分查询case 6:l_choice_num();/某门课

11、程学生选修情况case 7:exit(0);/退出void main()menu(); /*主函数结束*/struct lessonint num; /课程编号char name20; /课程名称char kind10; /课程性质int stime; /总学时int ttime; /授课学时int etime; /实验或上机学时int score; /学分int term; /开课学期int choice_num; /选修该课的学生人数lesM; /lesM中每个数组元素对应一条课程信息struct studentint number; /学号int num20; /课程编号stuN; /s

12、tun中每个数组元素对应一条学生选课信息void printf_face()/公共函数 1:显示数据结构项目函数 printf(“ntnumber name kind stime etime ttime score termn“);void printf_one(int i) /公共函数 2:显示一个课程信息记录printf(“nt%d %s %s %d %d %d %d %dn “,lesi.num,lesi.name,lesi.kind,lesi.stime,lesi.ttime,lesi.etime,lesi.score,lesi.term);/课程信息录入模块void l_input(

13、int i) /输入一个记录到函数 scanf(“%d“,scanf(“%s“,scanf(“%s“,scanf(“%d“,scanf(“%d“,scanf(“%d“,scanf(“%d“,scanf(“%d“,l_save(int n) /保存课程信息到文件函数FILE *fp;int i;if(fp=fopen(“lesrecord.txt“,“wb“)=NULL)printf(“n Cannot open filen“);return NULL;for(i=0;i返回继续录入课程信息 回到主菜单 退出程序 bb“);scanf(“%d“,if(k3)w1=1;getchar();else

14、 w1=0;while(w1=1);switch(k)case 1:enter_linformation();break;case 2:menu();break;case 3:break;/课程信息浏览模块void browse_linformation()/课程信息浏览函数 int k,w1;int load_lesson();void printf_n(int n);x=load_lesson();/从文件读入课程信息printf_n(x);/显示课程信息printf(“请选择下一步操作:回到主菜单 退出程序 bb“);scanf(“%d“,if(k2)w1=1;getchar();els

15、e w1=0;while(w1=1);/switch(k)case 1:menu();break;case 2:break;int load_lesson() /加载课程信息记录并可以计算记录个数FILE*fp;int i;if(fp=fopen(“lesrecord.txt“,“r“)=NULL) printf(“ncannot open filen“);return 0;for(i=0;!feof(fp);i+)fscanf(fp,“%d %s %s %d %d %d %d %d “,fclose(fp);return (i); void printf_n(int x)/显示所有课程信息记

16、录int j;printf_face();for(j=0;j.“);getchar();puts(“nn“);printf_one(j);getchar();/选课信息录入模块void enter_sinformation() /学生选课信息录入函数 void s_input(int i);int i,n,k,w1;x=load_lesson();printf(“n 总共有多少学生(0-%d)?:“,N-1);scanf(“%d“,for(i=0;i返回继续录入选课信息 回到主菜单 退出程序 bb“);scanf(“%d“,if(k3)w1=1;getchar();else w1=0;whil

17、e(w1=1);switch(k)case 1:enter_sinformation();break;case 2:menu();break;case 3:break;void s_input(int i) /输入一个记录到函数 int j,k,m,n,w1,total=0;scanf(“%d“,printf(“n 你想选多少门课 bb“);scanf(“%d“,printf(“现在输入课程编号,依次用空格隔开!n“);for(j=0;j返回重新录入选课信息 回到主菜单 退出程序 bb“);scanf(“%d“,if(n3)w1=1;getchar();else w1=0;while(w1=1

18、);switch(n)case 1:printf(“请重新输入你的学号:“);s_input(i);break;case 2:menu();break;case 3:break;/按课程号查询模块/按课程号查询函数 void search_num()int i,k,flag=0,w1;struct lesson s;printf(“nn 输入你要查询的课程编号:“);scanf(“%d“,load_lesson();printf_face();for(i=0;i返回继续查找课程信息 回到主菜单 退出程序 bb“);scanf(“%d“,if(k3)w1=1;getchar();else w1=

19、0;while(w1=1);switch(k)case 1:search_num();break;case 2:menu();break;case 3:break;/按学分查询模块/按学分查询函数void search_score()int i,k,flag=0,w1;int mark;printf(“nn 输入你要查询的课程学分:“);scanf(“%d“,load_lesson();printf_face();for(i=0;i返回继续查找课程信息 回到主菜单 退出程序 bb“);scanf(“%d“,if(k3)w1=1;getchar();else w1=0;while(w1=1);s

20、witch(k)case 1:search_score();break;case 2:menu();break;case 3:break;/某门课程学生选修情况查询模块void l_choice_num()int i,k,flag=0,w1;struct lesson s;printf(“nn 输入你要查询的课程编号:“);scanf(“%d“,x=load_lesson();for(i=0;i返回继续查找课程信息 回到主菜单 退出程序 bb“);scanf(“%d“,if(k3)w1=1;getchar();else w1=0;while(w1=1);switch(k)case 1:l_ch

21、oice_num();break;case 2:menu();break;case 3:break;7. 程序代码程序运行结果主菜单函数选课信息录入课程信息录入课程信息浏览按学分查询按课程号查询某门课程学生选修情况8. 编程中遇到的困难及解决方法1、不知道从什么地方看起。解决办法就是从第一章看起。 2、不知道如何编第一个程序,很简单解决方法是 (1) 、用书上例子 (2) 、独立完成最简单的一个完整流程,如从代码到完整的作品,如软件就是一个提示框,硬件完成一个闪灯。 3、不知道程序怎么编写,这个是刚学习的通病,其实很简单,按照你的想法编写,错了也比不编程好的多,慢慢改进就会很精简。我刚开始写一

22、个代码用了 1200 多条的汇编,但现在让我改完后只有 105 条实现了相同功能。 4、不知道怎么更好更快的编写,其实编写程序有一些思想在里面多看看一些编程思路的书。我可以提供一些 下面是总结的经验。 1、程序细化,利于组建其他程序。 2、程序模块化,利于整体调用。 3、分类程序段,使程序思路清晰。 4、 合并相同和相似的代码,编写成一个函数,用到此功能调用此函数。 5、编写通用程序,载入不同的脚本实现不同的功能。 6、编写程序工具,不同功能的模块可以用程序工具来编辑,比用代码编辑方便。 7、用通用的现成功能库来提高工作效率。 8、持续优化重构和改进,提高代码质量。 (lens23 提出的)

23、9、建立通用数学模型,使一类事物用一个统一模型表示。 10、预留一些接口,提高程序的可扩展性。 (chm51666 提出的) 11、添加一些注释、流程图、说明文档使思路清晰。 9总结心得及良好建议1、通过这一周的 C 课程设计实习,我对 c 语言的强大功能有了更深一点的了解。同时它也激发了我对编程的兴趣和爱好,特别在成功解决程序中的各种问题时,有则一种兴奋。2、通过编程也使我对 C 语言课程设计有了更深刻的了解,为以后的使用奠定了坚实的基础。3、注意大程序的设计最好按照“自顶向下,逐步细化,模块化”的方法进行设计。4、编写编写各个小函数时,要学会对运行结果的分析,并进行测试与调试。5、在编程时

24、,应该多使用库函数。因为那些函数都是进过严格调试的,有很强的可移植性,同时也能提高函数的性能。6、使用文件时要注意文件的打开和关闭。7、在使用结构数组时,要特别注意对其初始化,还要特别注意不能出现越界。8、最终最重要的一点还是要有严谨的编程思维,还要足够细心。10致谢在 C 语言的实习过程中,让我巩固了 C 语言的基础知识,以前从来没有这样编过完整的程序,实习让我有这样的一个机会,自己独立编写程序。我觉得自己说学的东西不多,但是可以将它们运用出来。在实习过程中,首先我要感谢我的老师,一个是带我走进 C 语言大门的曹老师,因为她,我开始喜欢 C 语言,把所学知识掌握牢固。同时,在这次实习中,邵老师对我的帮助对我最难忘。题目本身是很简单的,在老师的教学风格影响下,我在编写完最初程序后,有自己添加了很多功能。之后,在邵老师介绍下,我又完成了“八皇后”的程序编译。 “八皇后”让我感觉到原来程序可以更数学方法如此紧密的结合。这是非常有意思的事情。邵老师也给过我其他发展的建议,在此,我要感谢他。最后,我还要感谢给我帮助的同学,在一些程序问题上,我和同学交流经验,学到了很多在书本上学不到的东西。总之,我真诚的感谢在这次实习中给过我帮助的人!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报