毕业设计论文基于C的学生选课系统.doc

上传人:sccc 文档编号:4861915 上传时间:2023-05-20 格式:DOC 页数:44 大小:371.02KB
返回 下载 相关 举报
毕业设计论文基于C的学生选课系统.doc_第1页
第1页 / 共44页
毕业设计论文基于C的学生选课系统.doc_第2页
第2页 / 共44页
毕业设计论文基于C的学生选课系统.doc_第3页
第3页 / 共44页
毕业设计论文基于C的学生选课系统.doc_第4页
第4页 / 共44页
毕业设计论文基于C的学生选课系统.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《毕业设计论文基于C的学生选课系统.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于C的学生选课系统.doc(44页珍藏版)》请在三一办公上搜索。

1、摘 要学生选课系统是一个针对高校学生选课而开发的学生选课信息管理系统,是为学生选课提供安全、快捷、方便的服务而建立的应用软件。本系统是一个典型的学生选课系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。另外,本文还着重论述了信息管理系统的系统功能与实现,包括数据流程及存储、学生课程设置、选课修改及删除等。本系统可以使老师、学生更方便的选课。实现全校学生选课查询。由于学生上课情况复杂,可以实现信息修改,及时调整学生的基本情况。切实的提高学校的管理的工作效率。关键字:学

2、生选课系统;c+;管理员;学生;查询AbstractStudents in college course system is a course and development of student course students information management system, course is for studentsProvide safe, efficient and convenient services and applications. This system is a typical information management system, its develo

3、pment mainly bag Cover the setting and maintenance of database and the programming of the frontend application. The former required consistency and Integrality, and the security of data. For the latter request application function complete, easy to use, etc. In addition, this paper also Focuses on t

4、he information management system of the system function and the realization, including the data flow and storage, student courses, students information,User registration, modification and deletion of online courses. This system can make teachers and students more convenient courses. Realizing course

5、 in the chool,Line of inquiry. Due to the complex classes, can achieve information modification, adjust the basic situation of the students. To improve school The management of the work efficiency.Keywords:The system of Student course; c+; Student Management Information System;student;目录第一章 课题概述11.1

6、 应用背景的分析11.1.1学校管理系统的开发现状及方法11.1.2学生选课系统的应用价值21.2课题要求与提示21.2.1课题要求31.2.2 课题提示3第二章 设计简介及系统大纲42.1设计简介42.1.1 学生端的设计42.1.2 管理端的设计42.2 系统流程5第三章 详细设计63.1 主函数,头文件及结构体声明63.2 管理员功能模块73.3 学生功能菜单103.4 创建链表模块113.5 浏览模块123.6 查询模块133.7 插入链表模块163.8 添加模块163.9 删除模块173.10 选修课程模块183.11 读取文件模块213.12 保存文件模块22第四章 设计结果及分析

7、244.1学生选课结果及分析244.1.1 学生选课实现功能244.1.2 选课结果分析2542管理员结果及分析254.2.1管理员结果2542.2分析25总 结26致 谢27参考文献28附录 完整程序代码29西安文理学院计算机科学系 课程设计报告第一章 课题概述1.1 应用背景的分析1.1.1学校管理系统的开发现状及方法在高等学校的教务管理工作中,课程表的编排是一项十分复杂、棘手的工作。在排课过程中除了满足大量的制约条件以外,还必须解决许多冲突与矛盾,例如:两位教师不能同一时间在同一班级上课、一位教师不能在同一时间上两门课等等。利用计算机辅助进行课表编排工作,既提高了排课工作的科学性,又可大

8、大减轻管理人员的工作强度,提高工作效率,从而使学校教务管理现代化迈上了一个新台阶。我国不少高校都实行了学分制,它的核心是允许学生自由选课,即把学习的自主权交给学生。在这里,学生选课时的制约因素比较复杂,工作量也很大,而且往往需要在较短的时间内完成。运用计算机辅助选课,即能实时地对大量选课数据进行检验和统计,十分方便地输出选课结果,同时也避免了人工处理时容易产生的错误。从系统开发的复杂程度来看,计算机辅助排课与选课是高校教务系统中的两个关键子系统,目前不少教务系统尚未很好地解决排课与选课问题。本文主要对高校教务管理系统中计算机课表编排与选课子系统的基本功能、设计思想、需求分析以及实现技术进行探讨

9、。我想大家肯定都经历过学生时代,也许很多人还对那个时候的选课记忆犹新,每个学期都要排着长长的队伍去选。现在,我们已经进入到Internet 时代了,选课系统自然也要随着更新。大学中,公选课较多,学生可根据自己的专业及兴趣选择公选课程进行学习,本系统将从教学部门的要求出发,实现公选课的选择、查询与统计。数据库是从60 年代初发展起来的计算机技术。经过四十来年的发展,数据库技术己经趋于成熟。Web 数据库在新的Internet 环境中发生了很大的变化。就数据应用而言呈现出多样化的空间,如数字图书馆、电子出版物、电子商务、远程教育系统等的出现,给web 数据库技术提出了更多、更高的要求。同时,随着国

10、内高校校园网的建设,基于互联网的应用系统的开发正在蓬勃发展并发挥着较大的作用。例如,我国许多高校的网上招生系统,学校的各种管理信息系统,学校选课系统,还有一些医学院校开发出的网上诊所、远程诊断系统等等,都是基于校园网的应用系统。国外的教学科研软件与国内相比开发的早而且比较成熟。早在七十年代末,美国就建成了NSFNET(国家科学基金网),其课题的申报及课题的进展情况汇报都在网上进行。其网上教学教务管理系统也十分完善,世界各地的学生可以坐在家里通过互联网完成入学报名、选课、考试、毕业论文、取得学位这一学习生活的全过程。目前,国际上已具规模的远程教育学校就有数百所之多,网上教育正在各地发挥着巨大的作

11、用,为世界各国培养出大批人才。所有这些都表明,基于Internet 的校园网的应用已深入到校园内的各个方面。1.1.2学生选课系统的应用价值这份可行性研究报告是对学生选课系统作的可行性研究分析及指出存在的必性。本报告的编写目的在于研究选课系统软件的开发途径和应用方法。当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系

12、统管理的前提。本系统就是为了管理好选课信息而设计的。学校作为一种信息资源的集散地,学生和课程繁多,包含很多的信息数据的管理,现今,有很多的学校都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于选课情况的统计和查询等往往采用对课程的人工检查进行,对学生的选课权限、以及选课代号等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管学校都有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境

13、。数据处理手工操作,工作量大,出错率高,出错后不易更改。学校采取手工方式对学生选课情况进行人工管理,由于信息比较多,选课信息的管理工作混乱而又复杂;一般选课情况是记录在文件上,课程的数目和代号也记录在文件中,学校的工作人员也只是当时对它比较清楚,时间长了,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的选课进行更改就更加困难了。基于这些问题,我认为有必要建立一个学生选课系统,使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。1.2课题要求与提示1.2.1课题要求 假定有n门课

14、程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一个选修课程系统,使之能提供以下功能:课程信息录入功能(课程信息用文件保存),即输入;课程信息浏览功能,即输出;查询功能:(至少2种查询方式),即算法;按学分查询;按课程性质查询;学生选修课程(可选项,若完成可给予设计加分)。1.2.2 课题提示数据结构可用结构体,包括课程和选秀两个结构体,其中课程结构体包括课程编号, 课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期.选修结构体成员包括学号,课程编号,该结构体的建立主要是为

15、了查询某门课程学生选修情况. 第二章 设计简介及系统大纲2.1设计简介本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找,添加,删除,课程的选修,追加选修的课程.课程信息采用结构体这种数据结构,系统设计主要分为学生端设计和管理端设计。2.1.1 学生端的设计1-浏览所有课程2-查询课程信息3-选择选修课程4-浏览我选修的课程5-删除错选课程6-返回主菜单;2.1.2 管理端的设计1-浏览课程2-查询课程3-添加课程4-删除课程5-返回主菜单2.2 系统流程主 菜 单浏览课程查询课程管理员菜单添加课程删除课程浏览所有课程查询课程信息学生菜单选择选修课程浏览我选修的课程删除错选的课程图2

16、1系统流程图第三章 详细设计3.1 主函数,头文件及结构体声明主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块图3-1 主界面程序#include #include #include #include #include typedef struct subjects /课程结构体 int num; /课程编号 char name20; /课程名称 char kind10; /课程性质 int stime; /总学时 int ttime; /授课学时 int etime; /实验或上机学时 int score; /学分 int term; /开课学期 st

17、ruct subjects *next;SUB;SUB *head=NULL;int main()int n,w=1;do system(cls); puts(nntt*MENU*nn);puts(tttt1.以管理员身份登录n);puts(tttt2.以学生身份登录n);puts(tttt3.退出);puts(nntt*n);printf(Chiose your number(1-3): bb);scanf(%d,&n);switch(n)case 1:Mangers() ;break;case 2:Students();break;case 3:w=0;break;default:; wh

18、ile(w=1); return 0;3.2 管理员功能模块管理员的功能一共有四个功能:浏览,查询,添加,删除课程.运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用.图3-2 管理员菜单程序void Mangers() /管理员登录菜单 int n,w=1,flag=0,i=3; char s8; char password=19901206; do printf(nnEnter password:); j=0;while(1)a=getch();if(a=13)break;sj=a;j+;printf(*);sj=0; if(!strcmp(s,password) /进

19、行密码匹配验证 flag=1; break; else printf(nnError! You only have %d times! Enter again:n,i-1); i-; while(i0); if(!flag) printf(you have Enter 3 times!); /输入密码超过了3次! exit(0); /自动退出 do system(cls);puts(nntt*管理员菜单*nn);puts(tttt1-浏览课程n);puts(tttt2-查询课程n);puts(tttt3-添加课程n);puts(tttt4-删除课程n);puts(tttt5-返回主菜单); p

20、uts(nntt*n);printf(Chiose your number(1-5): bb);scanf(%d,&n); switch(n) case 1:prin();break; case 2:search();break; case 3:insert();savefile();break; case 4:del();savefile();break; case 5:return; default:; while(w=1);3.3 学生功能菜单学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数图3-

21、3 学生菜单程序void Students() /学生登录菜单int n,w=1; do system(cls); puts(nntt*学生菜单*nn); puts(tttt1-浏览所有课程n);puts(tttt2-查询课程信息n); puts(tttt3-选择选修课程n); puts(tttt4-浏览我选修的课程n); puts(tttt5-删除错选课程n); puts(tttt6-返回主菜单);puts(nntt*n); printf(Chiose your number(1-6): bb); scanf(%d,&n); switch(n) case 1:prin();break; ca

22、se 2:search();break; case 3:choose();break; case 4:prin();break; case 5:del();savefile1();break; case 6:return; default:; while(w=1);3.4 创建链表模块程序SUB *create_form() /创建链表 SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name20,kind10; int size=sizeof(SUB); head=tail=NULL; printf(输入

23、选修课程信息:n);scanf(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term);while(num!=0) p=(SUB *)malloc(size); p-num=num; strcpy(p-name,name); strcpy(p-kind,kind); p-stime=stime; p-ttime=ttime; p-etime=etime; p-score=score; p-term=term; if(head=NULL) head=p; else tail-next=p; tail=p;scanf(%

24、d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term); tail-next=NULL; return head;3.5 浏览模块浏览模块主要用管理员中的”浏览课程”和学生功能中的”浏览所有所有课程”,将所有的课程信息输出,即将all_sub.txt文件里面的内容全部输出程序void prin() /浏览所有课程SUB *ptr;head=NULL;readfile();if(head=NULL)printf(nnt*NO RECORDS!*n);return;printf(课程编号 课程名称 课程性质 总学时 授课学

25、时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);system(pause);3.6 查询模块查询模块主要用于管理员功能中的”查询课程”和学生功能模块中的”查询所有课程”,查询模块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找.switch语句中,每一个case语句就是一中查询方法图3-4 查询界面程序voi

26、d search() /课程信息查询 int a,num; int t=1; char type10,min10; SUB *ptr; L1:system(cls);printf(nntt*请选择查询方式*n); printf(nttt1-按课程名称查找n); printf(nttt2-按课程性质查找n); printf(nttt3-按学分查找n); printf(nttt4-退出查找n); printf(nntt*n); printf(nnChiose your number(1-4): bb); scanf(%d,&a); switch(a) case 1:printf(请输入要查找的课程

27、的名称:); /按课程名称查找scanf(%s,min);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(min,ptr-name)=0)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf(tn未找到!n);t=1;system(pause);goto L1; c

28、ase 2:printf(请输入要查找的课程的性质:); /按课程性质查找scanf(%s,type);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(strcmp(type,ptr-kind)=0)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf(tn未找到!n);t=1;

29、system(pause);goto L1; case 3:printf(输入要查找的课程的学分:); /按学分查找 scanf(%d,&num);printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)if(ptr-score=num)printf(%5d%12s%9s%9d%9d%11d%11d%7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term);t=0;if(t) printf(n

30、t未找到!n);t=1;system(pause);goto L1;case 4:break; /退出查找3.7 插入链表模块插入链表操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用程序void *myInsert(SUB* subj) /链表插入操作 SUB *p1,*p2;p1=subj; if(head=NULL) head=p1; head-next=NULL; else for(p2=head;p2;p2=p2-next)if(p2-next=NULL) p2-next=subj; subj-next=NULL; break; eturn head;3.8

31、添加模块添加模块主要用于增加课程信息,采用链表的操作程序void *insert() /插入课程信息 SUB *ptr,*subj;int size=sizeof(SUB);char ch,ch1;while(ch!=0)subj=(SUB *)malloc(size);ptr=subj;printf(输入要插入的课程信息:n);printf(ntt请输入课程编号:);scanf(%d,&subj-num); printf(ntt请输入课程名称:);scanf(%s,&subj-name); printf(ntt请输入课程性质:);scanf(%s,&subj-kind); printf(nt

32、t请输入总学时:);scanf(%d,&subj-stime);printf(ntt请输入授课学时:);scanf(%d,&subj-ttime);printf(ntt请输入实践或上机学时:);scanf(%d,&subj-etime);printf(ntt请输入学分:);scanf(%d,&subj-score);printf(ntt请输入开课学期:);scanf(%d,&subj-term);myInsert(subj);printf(nn继续插入请按回车n);printf(n结束添加课程按 0: bb);ch1=getchar(); /*将回车键赋给CH1,否则subj-term输完后输

33、入的回车键会赋给CH,因此用CH1填补。*/ch=getchar(); return head;3.9 删除模块删除模块主要用于管理员删除课程信息学生删除自己的选课,全部采用删除链表中的某一个节点的操作程序void *del() /删除课程-SUB *p1,*p2;char ch,ch1;int num;while(ch!=0)printf(输入想要删除的课程编号: bbbbb);scanf(%d,&num);if(head-num=num)p2=head;head=head-next;free(p2);if(head=NULL)return NULL;p1=head;p2=head-next

34、;while(p2)if(p2-num=num)p1-next=p2-next;free(p2);else p1=p2;p2=p1-next;printf(n继续删除请按回车n);printf(n结束删除课程按 0: bb);ch1=getchar(); /将回车键赋给CH1,否则num输完后再输入的回车键会赋给CH,因此用CH1填补。ch=getchar();return head;system(pause);3.10 选修课程模块选修课程模块采用插入链表的操作,程序void choose() /选新课程SUB *p,*q;int a5;int num,total=0,i=0,j;print

35、f(输入要选修的课程的编号,编号之间以空格分开n);scanf(%d,&num);printf(如果确认输入完要选修的课程的编号,请输入0: bb);while(num!=0)for(p=head;p;p=p-next)if(p-num=num)total=total+p-score;ai=num;i+;scanf(%d,&num);if(total60) printf(选修总学分为%d,未达到60,选修失败!n,total);system(pause);elseFILE *fp;fp=fopen(my_sub.txt,w);fprintf(fp,课程编号 课程名称 课程性质 总学时 授课学时

36、 实践或上机学时 学分 开课学期n);for(j=0;jnext)if(q-num=aj)fprintf(fp,%5d%12s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term);fclose(fp);printf(ttn*选修成功!*n);printf(n您选修的课程总学分为%d,课程分别为:n,total);printf(n课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(j=0;jnext)if(q-num=aj)printf(%5d%1

37、2s%9s%9d%9d%11d%11d%7dn,q-num,q-name,q-kind,q-stime,q-ttime,q-etime,q-score,q-term);printf(n以上信息全部保存在my_sub.txt中n);system(pause);3.11 读取文件模块读取文件模块是用来读出文件内容,并将内容输出到内存中,当输入文件名时,就能打开指定的文件,当输入all_sub.txt时,打开所有课程信息的文件,当输入my_sub.txt时,就是浏览学生选修的课程信息程序void readfile() /阅读文件 void *myInsert(SUB*);SUB *newSub; int num,stime,ttime,etime; int score,term; char c,name20,kind10,fname20; p

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号