1、摘 要随着课程改革的不断深入,学校规模不断扩大、课程项目不断增多,为了解决学生选课管理上的复杂的人工操作,减轻重复工作,故设计了选课系统。学校规模的扩大使得学校对每年新生入学、毕业生离校及本校各种分流机制造成的学生信息产生变动,如学籍变动、个人信息修改。为了适应课程的改革,学校在每个学期都要开设一定的课程提供给学生,让学生根据自己的情况来选择,根据学生选择结果给出课程表。本校根据教学实际,为了使教师有效地管理学生信息,设计学生信息管理系统,由此形成学生成绩管理系统,本文就此设计思路进行阐述。 随着学校规模的不断扩大,专业、班级、学生的数量急剧增加,有关学生选课的各种信息量也成倍增长,而目前许多
2、高校的学生选课管理仍停留在复杂的人工操作上,重复工作较多,工作量大,效率低,因此,迫切需要开发基于互联网的课程信息管理系统来提高管理工作的效率。基于校园网的学生选课管理系统,在学生选课的规范管理、科学统计和快速查询方面具有较大的实用意义。它提高了信息的开放性,大大地改善了学生、教师对其最新信息查询的准确性.关键词:选课系统 ;学生信息管理系统 ;数据流图 Abstract With the deepening of the curriculum reform, increasing the school continues to expand the scale, course project
3、, in order to solve the complex manual operation of student management, reduce duplication of work, so the design of the course selection system. The school scale expansion so that the school of new students each year, the school leavers and various distribution mechanism of student information chan
4、ges, such as the student status changes, personal information changes. In order to adapt to the reform of curriculum, the school should set up some courses available to students in each semester, students according to their own situation to choose, according to their choice results are given curricu
5、lum. The school according to the teaching practice, in order to enable teachers to effectively manage student information, student information management system design, thereby forming a student achievement management system, this paper described the design ideas. With the continuous expansion of sc
6、hool size, the number of professional, class, students increased dramatically, the amount of information on a variety of elective students also multiplied, and now many college students course management still stays in the complex manual operation, too much repeated work, heavy workload, low efficie
7、ncy, therefore, it is urgent to develop curriculum information management system based on Internet to improve management efficiency. Student course management system based on campus network, is of great practical significance in standardizing management, student elective science statistics and rapid
8、 inquiry. It improves the openness of information, has greatly improved the accuracy of students, teachers of the latest information query.Keywords: course system,;student information management system; data flow diagram目录1概述.11.1学生选修课的介绍.11.2管理者在本系统的功能.11.3对功能的规定.11.4系统开发的意义.21.5系统开发的背景.22总体设计.3 2.
9、1总体设计描述.3 2.2总体设计模块.43详细设计.53.1主函数,头文件及结构体声明53.2管理员功能模块.63.3学生功能菜单.83.4创建链表模块.103.5浏览模块.123.6查询模块.173.7插入链表模块.173.8添加模块173.9删除模块.18 3.10选修课程模块.193.11读取保存文件模块.214系统测试264.1进入界面.234.2进入管理者系统264.3进入学生菜单265结论.30参考文献34致谢321概述1.1学生选修课的介绍现代的社会是信息化的社会,信息无所不在。在生产领域、流通领域、各个部门每天都和信息打交道,如何处理如此多的信息成为了一个重要的课题。学生在学
10、期开始选课是教学活动中的一个重要环节,该环节如果能管理好,它不仅能加快学生的选课速度,也提高了整个活动的效率。大学一般都有上千名学生,每学期开始学生都要选课,因而产生了大量的课程信息。考虑到用户使用的方便和处理的信息量系统要完成录入,保存,查询,修改和删除课程信息的各种过程,能打印出课程信息表。系统的主要使用对象是需要选课的学生,学生在选课是要察看各个课程的详细信息,还要选择一些感兴趣的课程,需要生成课表,在发现课程有冲突后能够修改先前选择的信息。需要随学生选课的变化,计算相应的总学分。在全部选定后,打印报表。系统还需要管理员来查看和修改学生的总体选课情况课程信息和学生信息。选课系统开发的目标
11、是实现学生选课信息关系的系统化、规范化和自动化为保证系统安全高效地运行,本系统把用户划分为2类:管理者和学生。不同的用户在系统中的作用和权限也有所不同,所以它所需要完成的功能也就不同。 1.2管理者和学生在本系统的功能管理者:查询学生选课情况、自己任课情况、获取自己所担任课程分班表、录入及修改成绩等。学生:查询本人信息、教师任课信息、选课、选课信息查询、成绩查询。1.3对功能的规定 1) 可实现学生选课注册。 2)方便实现学生选课信息查询。 3)可对学生成绩档案进行管理,成绩表单生成简便。 4)安全有效的用户区分,管理。 5)档案数据的高安全性,保密性。 6)有帮助文档1.4系统开发的意义 学
12、生选课系统是一个学校不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生选课系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 因此,开发这样一套软件成为很有必要的事情 1.5系统开发的背景 目前,我国的高等教育事业蓬勃发展,高校的规模不断扩大,同时,高校的教学改革也在全面推行,学分制在各高校全面启动。学分制允许学生在计划的指导下,根据自己的条件、能力、志趣,有选择地支配自己的学习。因此,学生的选课就
13、成为推行学分制的重要管理任务。以往的选课均是在计划模式下进行:每位教师将所开的课程名称,个人简介,课程限选人数,限选专业等信息交给教务处,教务处再将这些信息统一成册,分发给各个班级班长,由班长将本班的选课情况统计并返回教务处。这是一个相当长的周期,并且耗费大量的人力、物力,对选择结果没有控制。学生选课系统能够让学生们在网络上自主选择选修课程,教务处的工作人员则通过网络来处理学生的选课信息。这个系统实现了对信息数据的浏览、查询、编辑和管理等基本数据库操作,采取模块化的编写思想,提高了可读性,同时提高了开发效率,从而实现了校园无纸化办公,提高选课的效率,减轻选课操作的工作量,从而提高教学管理的效率
14、2总体设计2.1总体系统描述系统能够提供友好的用户界面,使操作人员的工作量最大限度的减少;系统具有良好的运行效率,能够得到提高管理效率的目的;系统应有良好的可扩充性,可以容易的加入其它的系统的应用;平台的设计具有一定的超前性,灵活性,能够适应学校管理的变化;软件设计应当表现出层次结构,它应巧妙地利用各个软件部件之间的控制关系。设计应当是模块化的,即该软件应当从逻辑上被划分成多个部件,分别实现各种特定功能和子功能。学生选修课程系统分为10个模块,分别为界面模块,管理者浏览模块,管理者查询模块,管理者添加模块,管理者删除模块,学生浏览模块,学生查询模块,学生选择模块,学生浏览选修课模块,学生删除模
15、块。显示模块显示选择菜单输入0-1可以进入各个不同的菜单程序模块。添加模块是用于对学生选修课程的输入。查询模块用于查询课程信息,按照系统提示你可以查看课程信息,看所有输删除模块是用于对输入的课程信息的删除,当一个输入的课程信息有错误时,可以进行删除。学生选修课程系统是实现对学生学籍信息如学号、姓名、性别、年龄、籍贯等实现输入、查询有关信息、输出、添加新生信息等功能的系统。功能总体结构如下图所示: 浏览模块:该模块能够查询所输入的课程信息。输入模块:该模块是实现对课程信息的录入并保存到文件中。 查询模块:实现按单个或全部查询课程信息。删除模块:该模块实现按单个或全部来删除错误的课程信息从而更好的
16、帮助学生 选课或学生进行删除课程。 选择选修课程模块: 该模块来帮助学生进行选修课程的选择。学生浏览所选课程模块:该模块可以使学生来查询自己所选的课程2.2总体设计模板(1)管理员信息:管理员名称、管理员密码。 课程信息:课程号、课程名称、课程类别、开课系选课信息:课程号、学生学号、成绩(2)在管理员菜单中管理员可以进行对选修课程的输入和删除,从而使得学生可以去进入学生菜单去选择选修的课程(3)学生可以在学生菜单中先进行对课程的浏览,再进入选择模块进行对课程的选择,当学生想查看自己的选修课程信息时进入查询模块就可以查询到自己所选的课程和课程信息。若对所选的课程不满意可以进入删除模块进行删除(4
17、)当输入1到3以外的数字时进入不到任何界面,该程序采用多个main()函数模块分别来实现程序的运行,通过使用数组功能来实现数据的录入,使用strcpy()函数来实现录入信息的复制,整个结构从整体来看使用了选择结构,break .case .的合理利用.主 模 块管理员模块学生模块浏览课程查询课程添加课程删除课程浏览所有课程查询课程信息选择选修课程浏览我选修的课程删除错选的课程 图3.1主模块3详细设计 3.1主函数,头文件及结构体声明主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块:进入管理者界面和进入学生界面。当输入1时进入管理员菜单,当输入2时进入学
18、生菜单,当输入3时退出程序进入菜单选择序号选择1进入管理者菜单选择2进入学生菜单选择3退出程序开 始图3.2主函数模块流程图程序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
19、 3:w=0;break;default:; while(w=1); return 0;3.2管理员功能模块管理员登录菜单输入密码进行码匹对验证进入管理员界面i=3i0按任意键退出是否否是管理员的功能一共有四个功能:浏览,查询,添加,删除课程,运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用。当进入登陆界面后输入管理员密码1进入管理员菜单,来进行对课程的输入和删除图3.3管理员功能模块流程图程序void Mangers() int n,w=1,flag=0,i=3; char s8; char password7=1; do printf(nnEnter password
20、:); scanf(%s,s); if(!strcmp(s,password) /进行密码匹配验证 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-
21、添加课程n); puts(tttt4-删除课程n);puts(tttt5-返回主菜单);puts(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);void Students()int n,w=1; do system(
22、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; case 2:search();break; case 3:choose();break; case 4:p
23、rin1();break; case 5:del();savefile1();break; case 6:return; default:; while(w=1);3.3学生功能菜单学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数。学生登录菜单按1-6数字键进入各选项1、浏览所有课程2、查询课程信息3、选择选修课程4、浏览我选修的课程5、删除错选课程6、返回主菜单进入所选目标图3.4学生功能模块流程图程序void Students() /学生登录菜单int n,w=1; do system(cls);
24、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; case 2:search();break; case 3:choose();break; case 4:prin1()
25、;break; case 5:del();savefile1();break; case 6:return; default:; while(w=1);3.4创建链表模块(1)从标准输入文件输入字符串到string字符数组,再用fputs函数把此字符串送入file1.txt文件中。 (2)由于fputs函数不会在输出一个字符串之后加上一个“n”字符,为了在从磁盘中取出数据时能区分各字符串,要在存入时使用fputs函数输出一个“n”。(3)由于输入循环的控制条件是字符串的长度不为0,所以结束输入操作的方法是在最后一行只输入一个Enter键功能说明,录入课程信息代码。创建链表Num!=0p=(SU
26、B *)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;Head=NULLHead=pTail-next=p;Tail=p;Tail-next=NULL;Return head;创建完成Scanf(num,name,kind,&stime,&ttime,&etime,&score,&term);是是否否添加(编号,课程名称,学时,实践学时,学分,开课日期)图3.5创建链表模块流程图程
27、序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(输入选修课程信息: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
28、,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(%d%s%s%d%d%d%d%d,&num,name,kind,&stime,&ttime,&etime,&score,&term); tail-next=NULL; return head;3.5浏览模块浏览模块主要用管理员中的“浏览课程”和学生功能中的“浏览所有所有课程”,将所有的课程
29、信息输出,即将all_sub.txt文件里面的内容全部输出。在浏览界面中不能进行删除或添加课程,只能够来看课程的信息或选择的课程信息。浏览所有课程返回主菜单管理员界面 学生界面浏览所有课程或所选课程返回主菜单 图3.6浏览模块流程图程序void prin() /浏览所有课程SUB *ptr;head=NULL;readfile();if(head=NULL)printf(nnt*NO RECORDS!*n);return;printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);for(ptr=head;ptr;ptr=ptr-next)printf(%
30、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);void prin1() /浏览所有已选修课程SUB *ptr;FILE *fp;if(fp=fopen(3.txt,r)=NULL)printf(Cannot open file.n);choose();printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n);while(!feof(fp)ptr=(SUB*)mallo
31、c(sizeof(SUB);fscanf(fp,%d%s%s%d%d%d%d%dn,&ptr-num,ptr-name,ptr-kind,&ptr-stime,&ptr-ttime,&ptr-etime,&ptr-score,&ptr-term);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 查询模块查询模块主要用于管理员功能中的“查询课程”和学生功能模块中的“查询所有课程”,查询模
32、块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找switch语句中,每一个case语句就是一中查询方法:开始打开文件查看学生选课信息判断查询方法 按学分查输入按课程性质查结束图3.7查询模块流程图程序void 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
33、-退出查找n); printf(nntt*n); printf(nnChiose your number(1-4): bb); scanf(%d,&a); switch(a) case 1:printf(请输入要查找的课程的名称:);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,p
34、tr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0;if(t) printf(tn未找到!n);t=1;system(pause);goto L1; case 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-nu
35、m,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; 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%
36、7dn,ptr-num,ptr-name,ptr-kind,ptr-stime,ptr-ttime,ptr-etime,ptr-score,ptr-term); t=0;if(t) printf(nt未找到!n);t=1;system(pause);goto L1;case 4:break;t=0;if(t) printf(nt未找到!n);t=1;system(pause);goto L1;case 4:break; /退出查找3.7插入链表模块插入链表操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用:程序void *myInsert(SUB *subj) /链表插入操作 SUB *ptr,*ptr2; ptr=subj; if(head=NULL) head=ptr; head-next=NULL; else for(ptr2=head;ptr2;ptr2=ptr2-next)if(ptr2-next=NULL)