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

上传人:仙人指路1688 文档编号:2384874 上传时间:2023-02-17 格式:DOC 页数:20 大小:227KB
返回 下载 相关 举报
C语言课程设计学生选修课系统设计 .doc_第1页
第1页 / 共20页
C语言课程设计学生选修课系统设计 .doc_第2页
第2页 / 共20页
C语言课程设计学生选修课系统设计 .doc_第3页
第3页 / 共20页
C语言课程设计学生选修课系统设计 .doc_第4页
第4页 / 共20页
C语言课程设计学生选修课系统设计 .doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《C语言课程设计学生选修课系统设计 .doc》由会员分享,可在线阅读,更多相关《C语言课程设计学生选修课系统设计 .doc(20页珍藏版)》请在三一办公上搜索。

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

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

3、据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。 Struct Char courseCode10; /课程编号 Char courseName20; /课程名称 Char courseType10; /课程类别 Int totalPeriod; /总学时 Int classPeriod; /授课学时 Int experiPeriod; /上机学时 Float creditHour; /学分 Int term; /开课学期CourseInfoN; /课程信息结构体Struct Int stuNo; /学号; Char courseCode10; /课程编号StuCourInfoN

4、; /学生选课信息结构体4.(1) 信息输入模块 从键盘输入课程信息和学生选课信息,写入文件。(fwrite, fprintf)(2)信息浏览模块 分屏显示课程信息,每屏10条课程记录,按任意键继续。从文件中读数据(fread,fscanf),然后再显示。(3)信息查询模块 通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。 可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。3功能模块图显示课程信息模块查询模块主模模块增加模块删除模块修改模块选课模块显示选课情况模块4. 数据结构设计由

5、于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。在编写本程序的过程中,首先借助老师给的指导材料,确定了目标程序运行的次序与界面,即本程序首先运行【用户系统】菜单界面,其次程序运行【用户插入课程信息】及【用户浏览课程】菜单界面,最后程序运行【统计选课信息】及【选课】界面。如果用户选择【插入用户信息】选项则程序进入出入用户课程信息界面。需要一次输入课程编号,课程名称,课程性质,总学时,授课时间,实验或上机学时,学分,开课学期等信息;如果用户选择【浏览课程】选项则程序进入【浏览课程】界面,将会显示所选课程的信息;如果用户选择【查询】选项则会显示按学分查询的选课信息;一次用户

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

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

8、t n,w;void enter_linformation();void browse_linformation();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.退

9、出);puts(nntt*n);printf(Choice your number(1-7): bb);scanf(%d,&n);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

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

11、dent int number; /学号 int num20; /课程编号stuN; /stun中每个数组元素对应一条学生选课信息 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

12、.score,lesi.term); /课程信息录入模块void l_input(int i) /输入一个记录到函数 scanf(%d,&lesi.num);scanf(%s,&lesi.name);scanf(%s,&lesi.kind);scanf(%d,&lesi.stime);scanf(%d,&lesi.ttime); scanf(%d,&lesi.etime);scanf(%d,&lesi.score);scanf(%d,&lesi.term);l_save(int n) /保存课程信息到文件函数FILE *fp;int i;if(fp=fopen(lesrecord.txt,wb

13、)=NULL)printf(n Cannot open filen);return NULL;for(i=0;in;i+)fprintf(fp,%d %s %s %d %d %d %d %dn ,lesi.num,lesi.name,lesi.kind,lesi.stime,lesi.ttime,lesi.etime,lesi.score,lesi.term);fclose(fp);void enter_linformation() /课程信息录入函数int i,m,k,w1;printf(总共多少门课(0-%d)?,M-1);scanf(%d,&m);printf_face();for(i=

14、0;im;i+)printf(n 请输入第%d条课程信息n,i+1);l_input(i);/调用输入函数if(i!=0)l_save(m);/调用保存函数printf(请选择下一步操作:返回继续录入课程信息 回到主菜单 退出程序 bb); scanf(%d,&k); if(k3) w1=1; getchar(); else w1=0; while(w1=1); switch(k) case 1:enter_linformation();break; case 2:menu();break; case 3:break;/课程信息浏览模块void browse_linformation()/课程

15、信息浏览函数 int k,w1;int load_lesson();void printf_n(int n);x=load_lesson();/从文件读入课程信息printf_n(x);/显示课程信息printf(请选择下一步操作:回到主菜单 退出程序 bb); scanf(%d,&k); if(k2) w1=1; getchar(); else w1=0; while(w1=1);/ switch(k) case 1:menu();break; case 2:break;int load_lesson() /加载课程信息记录并可以计算记录个数FILE*fp;int i;if(fp=fopen

16、(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 ,&lesi.num,&lesi.name,&lesi.kind,&lesi.stime,&lesi.ttime,&lesi.etime,&lesi.score,&lesi.term);fclose(fp);return (i); void printf_n(int x)/显示所有课程信息记录int j; printf_face();for(j=0;j.);getch

17、ar();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,&n);for(i=0;in;i+) printf(n 请输入第%d个学生学号:n,i+1); s_input(i); printf(请选择下一步操作: 返回继续录入选课信息 回到主菜单 退出程序 bb); scanf(%d,&k); if(k3) w1

18、=1; getchar(); else w1=0; while(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,&stui.number); printf(n你想选多少门课 bb);scanf(%d,&m);printf(现在输入课程编号,依次用空格隔开!n);for(j=0;jm;j+)scanf(%d,&stui.numj);for(k=0;k

19、x;k+)if(lesk.num=stui.numj)total+=lesk.score;lesk.choice_num+;if(total60) printf(警告:你所选课程总学分不到60!请选择下一步操作:返回重新录入选课信息 回到主菜单 退出程序 bb); scanf(%d,&n); if(n3) w1=1; getchar(); else w1=0; while(w1=1); switch(n) case 1:printf(请重新输入你的学号:);s_input(i);break; case 2:menu();break; case 3:break; /按课程号查询模块/按课程号查询

20、函数 void search_num()int i,k,flag=0,w1;struct lesson s; printf(nn输入你要查询的课程编号:);scanf(%d,&s.num);load_lesson();printf_face();for(i=0;ix;i+)if(s.num=lesi.num)flag=1; printf_one(i);if(flag=1)printf(Found!);else printf(Not found!);printf(请选择下一步操作: 返回继续查找课程信息 回到主菜单 退出程序 bb); scanf(%d,&k); if(k3) w1=1; get

21、char(); else w1=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,&mark);load_lesson();printf_face();for(i=0;ix;i+)if(mark=lesi.score)flag=1; printf_one(i);if(flag=1)pr

22、intf(Found!);else printf(Not found!);printf(请选择下一步操作:返回继续查找课程信息 回到主菜单 退出程序 bb); scanf(%d,&k); if(k3) w1=1; getchar(); else w1=0; while(w1=1); switch(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输入你要查询的

23、课程编号:);scanf(%d,&s.num);x=load_lesson();for(i=0;ix;i+)if(s.num=lesi.num)flag=1; printf(选修这门课的总人数为:%dn,lesi.choice_num);if(flag=1)printf(Found!);else printf(Not found!);printf(请选择下一步操作:返回继续查找课程信息 回到主菜单 退出程序 bb); scanf(%d,&k); if(k3) w1=1; getchar(); else w1=0; while(w1=1); switch(k) case 1:l_choice_n

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

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

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

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

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号