选课系统毕业论文

2024-07-17

选课系统毕业论文(精选8篇)

篇1:选课系统毕业论文

网上选课系统总结

1、前言

随着社会的发展,学生培养计划已不再一成不变,各个学校纷纷推出了面向全体学生的选课服务,这项旨在为大家提供一个更加宽松自由而且更符合学生意愿的服务已成为当代学生过程中不可缺少的一部分。正式计算机技术的迅速发展使得人们从过去复杂的手工劳动中得以解脱,从而使这种服务在现在才可能迅速普及,同时编写一套完整的学生信息显得尤为重要。

2、学生选课管理系统的组成本系统包括首页,系统公告,学生选课,教师查看,系统管理,系统帮助,联系我们7个部分。

“首页”主要是介绍衡水学院的基本情况。

“系统公告”介绍最近的一些新闻和通知,方面同学们及时了解。

“学生选课”是为学生提供选课界面。该界面要列出搜有课程信息供学生查询和选课。包括未选课程,已选课程,学生选课受一些条件的约束,如课程名额限制,该界面允许学生选课和修改退选。

“教师查看”教师可以查看学生选课情况,有详细的选课名单。

“系统管理”主要是按指定系检索该系的学生信息,维护学生,系,课程和学生选课及成绩等方面基本信息,包括增加,删除,修改

“系统帮助”主要是帮助学生能更好及时的完成选课任务。

3、系统实现

采用了ASP.NET结合SQL Server2008数据库,即将学生选课的有关数据库存放在选用的SQL Server2008作为后台的数据库。

运行环境硬件与网络环境:用服务器能运行Windows XP及以上操作系统。

篇2:选课系统毕业论文

体育公选课管理信息系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在手工安排课程和人工统计成绩的原始阶段,这样的方式对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档和统计的数据比较多的高校来说,人工记录是相当麻烦的。而且当在学期末统计学生成绩时时,由于数据量庞大,还只能靠人工去一条条的统计,这样不但麻烦还浪费了许多时间,效率也比较低,而且十分容易出错。针对这种现象,本文在熟悉选课流程后运用面向对象的方法开发了体育公选课管理信息系统。本系统具有运行速度快、安全性高、稳定性好的优点,并且具备完善的成绩报表生成,老师在线评分等功能。

体育公选课管理信息系统的开发是为了减少大量的、繁琐的、重复的操作,提高教学管理效率,继续教学管理改革,促进教学管理科学化与信息化,同时与全面推行学分制与实施新教学计划相配套。

本系统主要运用面向对象的思想,运用MS SQL数据库和ASP.NET,开发基于B/S架构下的体育公选课管理信息系统。体育公选课管理信息系统主要包括两大模块:选课系统与考试系统。其中选课系统实现了学生数据管理、教师数据管理、学院数据管理、课程数据管理、系统管理、学生在线选课、教师在线评分等功能;考试系统包括了题库管理、试题管理、随机组卷、在线考试、自动评分、在线监考等功能。

当前的体育公选课管理信息系统,存在着功能单

一、课程安排缺乏灵活、不能结合体育理论知识进行成绩评定、无法实现管理员对所开课程的人数进行控制,造成热门课程人数爆满、冷门课程无人问津的后果,手工输入大批量数据时容易出错等缺点。

针对以上问题,本系统设计时主要做了以下创新的改进:

(1)对所开课程进行按班别安排指标,例如:开设篮球课,给02信息管理与信息系统这个班别的指标是10人,当02信息管理与信息系统这个班别选择该课程的人数达到十人后就会提示指标已达上限。这样的设计更能体现课程安排的公平性。

(2)学生总成绩评定实现自动化。根据公式:期末成绩=考试成绩×70%+理论考试×20%+平时成绩×10%评定学生的成绩,其中公式中的理论考试成绩是由本系统的子系统——考试系统提供的,考试子系统组卷的方式是通过随机抽题的方式进行组卷的,这样的方式使学生不单单是体能上的进步,更能打好扎实的理论基础。

本文所做的主要工作及取得的主要成果如下:

1)研究了管理信息系统的体系结构。

2)通过面向对象的分析方法画出系统用例图、类图,完成系统需求分析。

3)通过功能模块设计、数据库设计、编码设计、安全性设计,完成了系统的设计。

4)编写相应的文档。

5)开发了功能强大的体育公选课管理信息系统。

篇3:选课系统毕业论文

1)要积极引导学生的选课需求,避免盲目选课、扎堆选课的情况出现。

2)尽可能满足学生的选课需求,让多数学生能够中选,避免出现部分学生多次中选,部分学生无中选的情况。

3)系统应该足够智能化,注重易用性和便利性,尤其是数据的整理、发布等重要操作,要求具备基本计算机操作能力的工作人即可完成。

4)系统运行稳定,效率高,安全性好,易于维护。

1 网络选课系统常用算法分析

1.1“先来先选”算法

从选课系统的设计发展来看,最简单的选课算法是“先来先选”式的,选课系统根据学生登记选课的时间先后来确定中选学生,当选课人数达到该门课程最大限选人数时,就结束该门课程的选课。“先来先选”算法会导致选课系统开放初期会有大量学生涌入选课系统,影响系统效率,极端情况下甚至会出现网络堵塞,服务器崩溃等问题。因此“先来先选”的办法已经逐渐被各类选课系统淘汰。

1.2 优先算法

优先算法一般都采用了预选和正选两阶段结合的方式,预选阶段所有选修课不设选课人数限制,学生可以在和必修课无冲突的情况下,任意进行选修课的选择。预选阶段结束以后,选课系统暂时关闭,进行后台的筛选处理。对于选课人数小于课程容量的课程,所有选课学生都可以中选;但若选课人数大于课程容量,则需要进行筛选。

对于上述“筛选”过程,又衍生出了多种优先算法,以期能够较为公平的处理学生的选课结果。常见的优先算法有“年级优先”“专业优先”“志愿优先”等。“年级优先”和“专业优先”算法顾名思义,前者一般将高年级学生作为优先考虑的对象,首先满足他们的选课需求,再考虑低年级学生的需求。而“专业优先”则优先考虑本专业学生中选本专业的选修课,在优先满足本专业学生的选课需求以后,再满足外专业的学生。“志愿优先”算法则略为复杂,首先是在预选阶段,学生需确定所选选修课的优先志愿选择(根据学生一学期规定可选选修课门数来确定,一般为2-3级志愿),在正选阶段,首先满足第一志愿学生的选课需求,再依次满足二、三志愿学生的需求。

1.3 优先算法存在的问题

可以看到,各类优先算法都是设定了一个“优先对象”首先满足优先对象的选课需求,再考虑其他对象。各类算法“优先对象”设定的群体不同,在一定程度上解决了“选谁不选谁”的问题,但对于选课公平的考虑均欠妥。我们来考虑这样两个问题:

在极端的情况下:所有的优先原则都已使用,依然存在“选课人数大于课程容量”的现象,那么多出来的这部分人该怎么处理?各类优先算法的处理方式多采用“平均分布概率”算法来进行抽签,也就是说最后多出来的这部分学生,采取随机抽签的方式来解决“选谁不选谁”的问题。

在上述的前提下,又会出现这样的问题:在最后的选课结果上,会有学生中选多门课程,而有学生无中选课程的情况出现。实际上这样的情况在选课系统实现中,是应该极力避免的。

造成这样问题的原因在于人为地设定了一个“优先群体”,虽然保障了“优先群体”的选课权利,却未能很好地顾及非优先群体的选课权利。而使用“随机抽签”算法对非优先群体进行筛选,在一定程度上也破坏了选课的公平与公正。优先法的选课,更多的是满足了“优先群体”的选课需求,而忽视了对于非优先群体的公平,对于解决全校公共选修课的选课问题,优先算法是不适合的。

1.4 排除算法的提出

优先算法提出的初衷,在于首先考虑解决大部分学生的选课需求,将大问题转换为小问题的思路来解决问题。然而对于“小问题”的处理最终会回归到使用“平均分布概率”来进行抽签筛选,因此尚未有比“平均分布概率”算法更好的算法提出之前,问题就聚焦到前置算法的设计上,使得用“平均分布概率”算法进行抽签,能做到尽可能的公平。

如何保证每位学生都有中选的机会?如何确保冷门课程和热门课程的人数平衡?是我们对改进选课算法考虑得比较多的问题。首先从优先算法的弊端出发,我们认为不应该人为地设置一个“优先群体”来进行筛选,否则有违公平选课的初衷。另外从公平的角度考虑,我们认为已经中选课程的学生,其选课的优先级应该比未中选的学生低。出于这两方面的考虑,我们认为在使用“平均分布概率”算法来对选课学生进行筛选之前,应该尽可能的降低未中选的学生人数,亦即参与“平均分布概率”抽签的学生人数。因此我们设计了一套“排除算法”,来解决上述的问题。

2 排除选课算法的具体实现

排除算法同样适用于分为预选和正选两阶段的选课形式,在预选结束以后,对于所有的选修课按照如下流程进行筛选:

1)考虑所有选课人数小于课容量的课程,将选择此类课程的所有学生,全部标记为中选状态。满足条件的课程标记为处理完毕。

2)我院公共选修课允许学生每学期选择三门。第二步开始考察所有选课人数大于课容量课程,依次排除已经中选了2门以上、2门、1门的学生。每次排除以后都考察是否有课程的选课人数已经小于或等于课容量,满足条件的课程标记为处理完毕,同时标记相应学生为中选状态。

3)再次考察剩余的选课人数大于课容量的课程,排除在待选集合中还有的学生,也就是说保留仅选择了这一门课程的学生。

4)上述流程处理完毕以后,若还存在选课人数超课容量的课程,则用平均分布概率算法进行筛选,直到所有课程的中选人数小于和等于课容量的状态。

具体的流程图如图1。

程序在抽签阶段不涉及数据的删除,所有选课学生的信息都暂存在临时的“上课学生表选修”sk_skxsbxx中,选修课名单的筛选操作都在这个表中进行。在选课对未中签的学生只是把SFZQ(是否中签)字段标为0。每次选课的结果可以通过该字段进行统计。

sk_skxsbxx表使用的字段如表1所示。

对于最后的抽签程序,使用SQL语句来实现,可以参考下例:

上面SQL的意思是:在备选学生表sk_skxsbxx中,在满足条件课程号:

kch='2007108'和课序号:kxh='1001'和是否中签标识sfzq是空的集合中随机抽取5条。

实施“排除选课算法”以后,预选阶段选课人数不受课容量的限制,只要学生喜欢的课每个学生都可以选,这样可以在一定程度上反映某一门课程的受欢迎程度。

在筛选阶段由于系统在尽量满足每个学生在至少有一门课中选的前提下,再对结果进行随机筛选,因为对于绝大部分学生来说选课机会和中选几率是公平的,并且和学生选课的时间、专业、成绩等因素无关。可以保证绝大部分的学生都至少有一门选修课中选,最后需要利用平均分布概率算法进行筛选抽签的课程,一般只有少数热门课程,并且最后进行抽签的学生人数,也会大大少于实际选择该门课程的学生人数(大部分学生已经中选其他课程)学生无法中选课程的几率。

“排除选课算法”的实施,可以在“课程总容量”尚未远远大于“需选课学生人数”的情况下,比较好的解决学生公平选课的问题。在目前我院的应用当中,已经取得了比较好的效果。具体的反映就大大减轻了“补选”阶段的工作量,所有的选修课名单在“正选”阶段就可以全部确定了。

3 除选课算法外的其他工作

诚然,无论是我院采用的排除抽签选课法还是其他已有的各类算法,都只是在上课学生人选上进行的筛选,为了让学生能够更有目的、有规划地进行选课,在选课算法的优化设计之外还有应该在学生选课阶段对学生进行积极的引导。一是避免部分热门课程选课人数过于集中,导致中选率过低,二是增加部分冷门课程的选课人数,让尽可能多的学生所选课程都能中选。为此我们在选课系统中增加了实时中选率显示和推荐课程显示。

实时中选率通过计算已课程容量和已选课人数的比值,显示该门课程在目前状态下的中选几率,学生在选课时可以看到每门课程的中选率,以方便规划自己的选课。

假设一门课程课程容量为P1,已选课人数为P2,则当P1>=P2时,中选率显示为100%;当P1

篇4:网络选课系统研究与实现

关键词:教学教务管理 网络选课 BS模式

中图分类号:TP311.52文献标识码:A文章编号:1674-098X(2012)04(a)-0166-01

1 引言

自1969年ARPAnet网诞生到1990年更名为Internet,网络一直处于不停发展的过程中,主机和用户数都不断地增长,特别是进入90年代以来,网络应用进入多元化发展时期,视频点播、多媒体会议、电子商务等新型的应用不断出现,网络深入日常工作生活的各个方面。在高校实施学分制的大环境下,基于网络的在线选课系统是教学教务管理中不可或缺的重要功能模块,教学教务部门将课程和老师的信息公布在网上,学生利用网络完成相关课程的选择,学生可以自由选择,打破了原来学年制小班级的限制,比起原来学年制下直接安排教师进入各个班级的课程来说具有较好的灵活性和自由性。基于网络的选课系统作为计算机应用的一部分,使用计算机对选课信息进行管理,有着手工管理所无法比拟的优点,能够极大地提高教学教务管理的效率。

本文结合我校教学教务的要求对于选课系统中的功能做了详细分析,并由此提出了一个选课系统的实现。

2 系统分析

选课系统主要由用户管理部分,用来对系统管理员、教学教务人员、教师和学生四类用户进行;教学任务管理部分,用来管理各个学期的教学任务;选课管理部分,學生用来完成课程的选修,老师用来浏览选课的情况。整个系统结构如图1所示,下面将就主要功能模块做分析。

2.1 用户管理模块分析

管理员用户可以通过相关的用户名和密码登录进用户管理界面下。

在此界面下可以完成对教师、教学教务人员以及学生数据进行增删改、查找、授权等操作,例如将每年新入学的学生数据导入进系统,新分配的老师数据录入进入系统,分配不同的权限和功能给教师和教学教务人员。

2.2 教学任务管理模块分析

教学教务人员通过相关用户名和密码进入教学任务管理界面下。

在每学期结束前的一个月,教学教务管理人员将下个学期的所有课程预先根据培养计划生成教学任务,然后将相应的教学任务安排到具体的任课教师,并安排相应的教室和上课时间(此类功能属于排课管理子系统),任课教师便可登录选课系统查看自己的任务和上课时间地点。

2.3 选课管理模块分析

学生在规定时间登录进入选课管理界面下进行下个学期课程的选课。

选课分为初选和正选两个阶段,初选阶段是不限制选课班级的人数,也就是学生想选哪个老师的课程便可以选取,但往往某些课程的人数超过最大容量,之后基于一定的策略剔除掉一部分学生,在正选阶段这些学生可以选入其他班级,同时如果有漏选或者错选的学生也可以进行特殊修改。

3 系统实现关键技术

3.1 用户权限动态分配

考虑到不同的用户在该系统中需要有不同的权限,而权限最终又是通过映射到不同的菜单(功能)上来,所以在考虑本系统中用户权限分配的时候采用了动态的策略,即在数据库中采用一个菜单表用来存储体现不同权限的功能菜单项,然后每个菜单项还具有一个编号属性,在用户表将用户所具有权限对应的功能菜单项的编号保存,当不同用户登陆后根据菜单表中保存的菜单编号读取菜单项生成用户的操作菜单完成不同的功能。

3.2 选课管理

在初选阶段选课的人数将有可能超过班级人数的最大容量,这样势必会在初选结束后对多余的人员做出剔除。如何公平地剔除一些学生是一个需要考虑的问题,在本系统中采用的策略为综合考虑学习成绩和自然班学生的平均性作为剔除的权重因子。具体的执行的过程为:在所有需要选择该门课程的学生中,按照自然班统计其上一学年所学课程的平均学分积点作为划分不同档次的学生的一个参数,然后在按照自然班学生尽可能平均分配到各个选课班的原则可以得到每个档次的学生人数,这样在总人数超过的选课班中将不同档次的学生人数抽取出来后,如果发现超过该档次的人数容量,那么再随机剔除掉多余的学生,在随机剔除的过程中要考虑到不同自然班级人数的相对平均性,即优先剔除掉那些自然班级超编的学生;如果该档次的学生人数未达到要求,那么保留空间供正选阶段该档次的其他学生选入。同时在正选阶段也按照类似的策略保证选入的学生满足成绩和人数的平均性,这样每个班的学生情况相对来说比较平均,对于老师教学的开展比较有利。

4 结语

基于网络的选课系统给教学教务管理人员和学生提供了一个简易高效的平台,在学分制的管理背景下有利于学校教学教务管理的便利性和高效性,符合信息化新形势下的高校管理的要求。

参考文献

[1]叶飞.Internet网络选课系统设计与实现[J].沈阳师范大学学报(自然科学版),2004,4.

[2]米明.基于变化概率的网络选课系统算法研究[J].计算机与现代化,2009,12.

[3]邓万友,孟雅杰,贾焕军,宋英,刘洪波.学分制下网络选课系统的构想与实现[J].黑龙江高教研究,2001,1.

[4]关慧,由德凯,侯建梅.网上选课系统的设计与实现[J].沈阳化工学院学报,2004,4.

篇5:网上选课系统开题报告

三、课题主要内容(提纲)及拟解决的关键问题

课题主要内容:

本系统采用的开发工具是ASP.NET,采用的开发语言是C#,采用的数据库服务器为SQL SERVER。网上选课系统包括四个项目,其中的Web、BussinessLayer和DataLayer项目分别对应设计模型的三个层次,Web项目的项目类型为“ASP.NET Web Application”,其余两个项目类型为“Class Library”,上一个层次要引用下个层次的命名空间,从而达到使用下一层次提供功能的目的。另外还包括一个用于定义层间数据接口的项目Common,其项目类型为“Class Library”,目的是为了使得各层之间在传递数据时具有统一的数据接口。

解决的关键问题:

网上选课系统中Web项目中将定义多个用户控件,分别用来实现选课系统的人员管理、课程管理、选课班级管理、信息统计管理、学生班级管理等功能。通过用户控件的动态加载方法,将安全控制集中到主页面Default.aspx中去处理,从而实现安全定制需要加载的控件。由于网上选课系统的网络用户较多,为了提高系统的安全性和访问效率,整个系统采用三层式体系结构进行开发,即表示层、业务逻辑层和数据层。利用ASP.NET可以快速方便地部署三层体系结构,通过在网页中使用基于事件的处理,可以指定处理的后台代码文件。显示层放在 ASP.NET页面中,数据库操作和逻辑层用组件来实现,可以方便的实现三层架构。

(1)系统管理员

查询、修改、增加用户信息:系统管理员通过此项功能可查询、修改、增加学生教师信息等。 录入学生与教师个人信息:通过此项功能可以实现对教师和学生的个人信息添加删除。 开设课程:管理员登录系统后,可以开设课程,可以设置该课程为必修课程或则选修课程,可以设置该课程的最大人数。

(2)教师用户

篇6:选课系统功能分析报告

姓名:

学号:

引言

随着计算机的普及,各高校均采用计算机进行学生选课。而对学生选课相关信息的管理由学生选课管理系统实现。学生选课系统是一个学校不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生选课系统应该能够为用户提供充足的信息和快捷的查询手段。功能分析

2.1 系统功能分析

(1)学生 ①学生登录

②学生选课,退选,选课浏览 ③学生信息修改(修改密码)④学生查询课程,浏览课程信息(2)管理员 ①管理员登录

②管理员资料修改(密码修改)③管理系统

a.录入课程、学生 b.删除课程、学生

c.修改课程、学生(权限有限制)

d.浏览课程、学生信息(学生密码不可见)(3)教师 ①教师登录

②浏览自己教授的课程、已选课的学生的信息(学生密码不可见)③录入课程信息(课程介绍、安排)④录入成绩

2.2 系统设计目标

本系统是为了更好管理学生选课排课信息而设计的。明确在正常运营中必须面对大量课程、学生信息、教师信息以及三者间相互联系产生的选课信息,由于学校的学生和课程繁多,包含的信息量大且复杂,使选课管理工作更规范化,系统化,程序化,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课排课相关信息。该系统分三类型用户:

1、学生;

2、管理员;

3、教师。三用户通过登录进入不同的界面。学生主要实现选课,通过查询、浏览本学期所开设课程进行选课与退选课程和课程成绩查询;管理员可以通过特别用户身份登录,对系统进行全面的管理,对新用户与课程的添加、删除、修改,对信息进行管理。教师主要查询自己要教授的课程并期末录入成绩。概要设计

3.1 系统功能设计

(1)学生功能模块

(2)管理员功能模块

(3)教师功能模块

3.2 类设计

(1)学生类

属性:学号,名字,班级,密码,性别,出生年月,入学年份,籍贯,电话,选课数。

(2)课程类

属性:课程号,课程名,课程类别,上课老师,选课上限,已选人数,上课时间,上课地点。(3)管理员类

属性:编号,名字,密码,性别,年龄。(4)教师类

属性:编号,名字,密码,性别,年龄,点。

(5)界面类 ① 登录界面 ② 管理员界面类 ③ 学生界面类

④ 学生、课程查找界面 ⑤ 管理员信息修改

⑥ 学生信息修改界面、密码修改界面

篇7:C语言课程设计学生选课系统

一、学生选课管理系统

第一部分:课程设计名称、目的、要求

第二部分:程序总体设计思路

第三部分:程序功能划分、图示及流程图

第四部分:程序设计数据、运行结果

第五部分:程序的优缺点

第六部分:心得体会

第七部分:附录(源程序)

第八部分:附录(参考文献)

目录

..............................................................................第一部分:课程设计名称、目的、要求

名称:学生选修课程系统设计

目的:运用C语言提高解决实际问题的能力 实验环境:Microsoft Visual C++ 6.0 内容:

假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。【功能】

系统以菜单方式工作

课程信息录入功能(课程信息用文件保存)--输入 课程信息浏览功能--输出

查询功能:(至少一种查询方式)--算法 按学分查询 按课程性质查询 学生选修课程(可选项)

第二部分:程序总体设计思路

由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。

具体的设计思路如下:

程序的要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先,考虑到程序的数据输入,可以设置一个管理员登陆选项,通过该选项进入管理员界面,进行选修课的录入和修改操作,最后将录入的课程保存到相应的文件中。然后定义各种函数的功能包括查看,查询,删除等。另一个为学生登陆界面,该界面学生可以进行课程选择和浏览查询等操作。在进行该操作之前需要对管理员保存的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,可以将其选好的课程保存于相应的文件中,以便下次进行修改。通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内部所包含的数据的操作。

整个程序的设计思路到此结束。

第三部分:程序功能划分、图示及流程图

【功能模块划分及其流程图】

本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这9个部分来完成。这9个部分依次是:

1.登录界面函数;void login()2.学生登录界面据函数:void stu_login()3.管理员登录界面函数:void man_login()4.退出界面函数:void bye_sys()

5.课程选择函数:void c_select()6.课程浏览函数:void c_view()7.课程查询函数:void c_search()8.课程增加函数:void c_add()9.课程删除函数:void c_delete()10.菜单函数:void index()11.主函数部分; main()

总体设计:

学生选课系统管理员登录学生登录新增课程删除课程课程浏览查询课程学生选课课程浏览课程查询c_add函数c_delete函数c_view函数c_search函数c_select函数c_view函数c_search函数

系统功能模块图

部分函数流程图:

1、课程选择函数:

开始输入要选择的课程的编号j=0;j

2、课程查询函数

开始输入要查询的课程的编号j=0;j

3、课程增加函数

开始输入要增加的课程的编号j=0;j

4、课程删除函数

开始输入要删除的课程的编号nj=0;j

本程序是一款应用软件,故数据设计、程序运行结果应在程序的

运用中得以体现,现在通过一个程序的运用事例来对程序运行结果进行演示与实现。【软件运用举例】

1、程序开始界面如下:

选择某个选项,如进行管理员登录,进行课程的增加 进入管理员界面:

2、再选择所要进行的操作,如进行课程增加,结果如下:

下面可以进行继续增加课程或者退出:

3、选择课程浏览,可以分页查看相应的课程信息: 第一页:

第二页:

4、课程查询

查找结果:

4、管理员课程删除操作:

删除后可以进行浏览,观察删除后的结果:

可见删除后只有一条记录。删除操作完成正确。下面进行学生操作的使用方法:

1、学生登陆界面:

2、选择学生选课选项:

3、学生登陆也可进行课程浏览和查询函数,其结果与管理员登陆相同,不再演示。

第五部分:程序的优缺点

【程序的优点】

算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。

[算法上的优点]主要体现在以下三点:

1.程序采用main主函数方式设计,程序的主体的功能大都由该功能

完成。程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。

2.程序对文件数据的读写采用了fread和fwrite块读写函数,能够将文件中的数据完全读出,然后赋到定义的数组中,再在相应的数组中进行一系列操作,最终再写入文件。

3.插入操作在本程序中将课程信息直接插入数组最后一个节点,从而减少了数据的相互移动,节省了时间。

[功能上的优点] 主要体现在以下两点:

1. 简洁明了的程序菜单。程序主要采用了层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。2. 人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地看懂程序并进行操作。

【程序的缺点】 主要表现在以下两点:

1、本程序没有进行相应的密码操作,所以对于使用者来说可能存在比较大的不保密性。需要改善。

2、本程序没有使用文本读写函数fscanf和fprintf,所以的到的课程文件和选课文件都是二进制形式。

第六部分:心得体会

选课系统程序比起通讯录程序来讲好写一些,由于本程序用到了数组,对于数组的操作掌握的比较熟练,所以在编写程序的时候困难没有那么多。

本程序在编写的过程中用到了许多通讯录中的模块化设计和函数互相调用的思想,使得编写比较方便和好用。

通过该系统的课程设计分析,我掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法,掌握和提高了运用C语言进行程序设计的能力。

程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做流程,在程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序。

对于一个较大的应用程序,一般不可能一次就设计出一个很完善的系统。通常要先设计满足基本要求的系统,然后再测试或者在使用的过程中不断完善,慢慢地做成一个功能很完善选修课程管理系统。所以在进行调试的时候需要对许多变量理解和掌握其变化规律等,这对于我更好的掌握visual C中调试的工具有很大的帮助。

总之经过这次课程设计,我对c语言的使用和理解都有了很大的加深,对于编程的思想也有了很多新的理解和感受。

第七部分:附录

一、参考文献:

1、李丽娟主编,C语言程序设计教程(第二版),人民邮电出版社

2、严蔚敏主编,数据结构(C语言),清华大学出版社

3、崔单主编,C语言程序设计案例精粹,电子工业出版社

4、谭浩强主编,程序设计(第三版),清华大学出版社

二、源程序

#include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h”

void index();//首页 void login();void bye_sys();//退出界面

void stu_login();//学生登录菜单

void c_select();void c_view();//课程浏览

void c_add();//增加课程 void c_delete();void c_searchs();//学生查询函数 void c_searchm();//管理员查询函数 void c_viewm();//管理员浏览函数 void c_views();//学生浏览函数

struct course//定义课程结构体

{

int c_num;

char c_name[20];

int c_score;

int c_nelepeo;//课程已选人数

int c_melepeo;//课程人数上限 };struct student { char s_number[10];

char s_password[10];};struct manager { char m_name[10];char m_password[10];};

void index()//首页 {

char input;

printf(“nnttt*****************************n”);

printf(“ttt

湖南大学学生选课系统n”);

printf(“ttt*****************************nnn”);

printf(“ttt*****************************nnn”);

printf(“ttt*****************************nnn”);

printf(“ttt*****************************nnn”);

printf(“ttt**********设计者:刘晓斌******nnn”);

input=getchar();

system(“cls”);} void login()//登陆界面

{

void stu_login();

void man_login();

void bye_sys();

int input;

do

{

system(“cls”);

printf(“nnnt1.学生登录n”);

printf(“t2.管理员登陆n”);

printf(“t3.退出本系统n”);

printf(“t请选择服务类别:”);

scanf(“%d”,&input);

if(input!=1&&input!=2&&input!=3)//输入数不等于选项的时候打印画面

{

printf(“nt输入出错!请重新选择~n”);

printf(“nt按任意键返回选择页面~nt”);

getchar();getchar();

system(“cls”);

}

if(input==3)//如果输入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_delete();

void c_view();

void c_searchm();

int in;

do

{

system(“cls”);

printf(“nnt1.新增课程n”);

printf(“t2.删除课程n”);

printf(“t3.课程浏览n”);

printf(“t4.课程查询n”);

printf(“t5.退出n”);

printf(“nnt请选择服务种类:”);

scanf(“%d”,&in);

if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5)

{

printf(“nt没有这项服务t按任意重新选择”);

getchar();getchar();

}

}while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5);

switch(in)

{

case 1:c_add();break;

case 2:c_delete();break;

case 3:c_viewm();break;

case 4:c_searchm();break;

case 5:login();break;

} }

void stu_login()//学生登录菜单

{

void c_select();

void c_view();

void c_searchs();

void login();

int input;

do

{

system(“cls”);

printf(“nnnt--学生登陆--”);

printf(“nnt1.学生选课n”);

printf(“t2.课程浏览n”);

printf(“t3.课程查询n”);

printf(“t4.退出n”);

scanf(“%d”,&input);

if(input!=1&&input!=2&&input!=3&&input!=4)

{

printf(“nt没有这项服务~n”);

printf(“t按任意键重新选择”);

getchar();

getchar();

}

}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 courses[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程

{

printf(“nnnt课程不存在nn”);

printf(“t<按任意键返回管理菜单>nt”);

input=getchar();

input=getchar();

stu_login();//进入学生登陆菜单

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&courses[i],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”);

}

else

{

fclose(fp1);

fp1=fopen(“courseselect.dat”,“ab”);

}

for(j=0;j

if(courses[j].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;

default:

printf(“输入错误,将返回登录界面!n”);

login();break;

}

}

else

{

fwrite(&courses[j],sizeof(struct course),1,fp1);

fclose(fp1);

printf(“nntt选课成功t请选择:”);

printf(“nntt1.继续选课”);

printf(“nntt2.退出,返回登录界面!”);

scanf(“%d”,&in);

switch(in)

{

case 1:c_select();break;

case 2:stu_login();break;

default:break;

}

} }

void c_viewm()//课程浏览

{

void stu_login();

void c_view();

int

inp,i=0,n=0;

FILE *fp;

char input;

struct course courseview[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程

{

system(“cls”);

printf(“nnnt课程不存在nn”);

printf(“t<按任意键返回管理菜单>nt”);

getchar();getchar();

stu_login();//进入学生登陆菜单

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&courseview[i],sizeof(struct course),1,fp);

i=i+1;

}

while(!feof(fp));

fclose(fp);//文件读完后关闭

do

{

system(“cls”);

if(i==1)

{

printf(“nnnttt没有记录!n”);

getchar();getchar();

man_login();

}

else

{

printf(“nt------共有%d条记录-------”,i-1);

printf(“nnt课程编号: %dn”,courseview[n].c_num);

printf(“nnt课程名字: %sn”,courseview[n].c_name);

printf(“nnt课程学分: %dn”,courseview[n].c_score);

printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo);

printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo);

printf(“nnt1.上一页t2.下一页t3.回目录”);

printf(“n请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:

{

if(n==0)

{

printf(“nt已到达首页 t按任意键返回”);

input=getchar();

input=getchar();

}

else

{

n=n-1;

}

break;

}

case 2:

{

if(n==i-2)

{

printf(“nt已到达尾页t按人意见返回”);

input=getchar();

input=getchar();

}

else

{

n=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 courseview[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程

{

system(“cls”);

printf(“nnnt课程不存在nn”);

printf(“t<按任意键返回管理菜单>nt”);

getchar();getchar();

stu_login();//进入学生登陆菜单

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&courseview[i],sizeof(struct course),1,fp);

i=i+1;

}

while(!feof(fp));

fclose(fp);//文件读完后关闭

do

{

system(“cls”);

if(i==1)

{

printf(“nnnttt没有记录!n”);

getchar();getchar();

stu_login();

}

else

{

printf(“nt------共有%d条记录-------”,i-1);

printf(“nnt课程编号: %dn”,courseview[n].c_num);

printf(“nnt课程名字: %sn”,courseview[n].c_name);

printf(“nnt课程学分: %dn”,courseview[n].c_score);

printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo);

printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo);

printf(“nnt1.上一页t2.下一页t3.回目录”);

printf(“n请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:

{

if(n==0)

{

printf(“nt已到达首页 t按任意键返回”);

input=getchar();

input=getchar();

}

else

{

n=n-1;

}

break;

}

case 2:

{

if(n==i-2)

{

printf(“nt已到达尾页t按人意见返回”);

input=getchar();

input=getchar();

}

else

{

n=n+1;

}

break;

}

case 3:{stu_login();break;}

default:

{

printf(“nt操作错误t按任意键返回”);

getchar();getchar();

break;

}

}

}

}while(inp!=3);

} }

void c_searchs(){

void stu_login();

void c_searchs();

int id,i=0,j,inp,k;

int flag=0;

FILE *fp;

struct course coursesear[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)

//判断课程信息是否存在 {

system(“cls”);

printf(“nnt课程不存在t按任意键返回”);

getchar();getchar();

stu_login();

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&coursesear[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

}

system(“cls”);

printf(“nnttt请输入你要查询的课程编号:”);

scanf(“%d”,&id);

do//检查输入是否符合要求

{

for(j=0;j

{

if(id==coursesear[j].c_num)

{

flag++;

k=j;

}

}

if(flag==1)

{

system(“cls”);

printf(“nnt课程编号:%dn”,coursesear[k].c_num);

printf(“nnt课程名字:%sn”,coursesear[k].c_name);

printf(“nnt课程学分:%dn”,coursesear[k].c_score);

printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo);

printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo);

getchar();getchar();

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchs();

case 2:stu_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

else

{

system(“cls”);

printf(“nnt不存在对应记录n”);

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchs();

case 2:stu_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

}while(inp!=1);

}

void c_searchm(){

void stu_login();

void c_searchm();

int id,i=0,j,inp,k;

int flag=0;

FILE *fp;

struct course coursesear[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)

//判断课程信息是否存在 {

system(“cls”);

printf(“nnt课程不存在t按任意键返回”);

getchar();getchar();

stu_login();

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&coursesear[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

}

system(“cls”);

printf(“nnttt请输入你要查询的课程编号:”);

scanf(“%d”,&id);

do//检查输入是否符合要求

{

for(j=0;j

{

if(id==coursesear[j].c_num)

{

flag++;

k=j;

}

}

if(flag==1)

{

system(“cls”);

printf(“nnt课程编号:%dn”,coursesear[k].c_num);

printf(“nnt课程名字:%sn”,coursesear[k].c_name);

printf(“nnt课程学分:%dn”,coursesear[k].c_score);

printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo);

printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo);

getchar();getchar();

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchm();

case 2:man_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

else

{

system(“cls”);

printf(“nnt不存在对应记录n”);

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchm();

case 2:man_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

}while(inp!=1);}

void c_add()//增加课程 {

void c_add();

void man_login();

int i=0,j,inp;

FILE *fp;

struct course course_new;

struct course courses[10];

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(“%d”,&course_new.c_nelepeo);

printf(“nntt5.课程人数上限:”);

scanf(“%d”,&course_new.c_melepeo);

if((fp=fopen(“course.dat”,“rb”))!=NULL)

{

do

{

fread(&courses[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

for(j=0;j<=i-1;j++)

if(course_new.c_num==courses[j].c_num)

{

system(“cls”);

printf(“nnttt对不起,这个编号已经使用过nntt按任意键返回管理菜单”);

getchar();getchar();

man_login();

break;

}

}

if((fp=fopen(“course.dat”,“rb”))==NULL)

{

fp=fopen(“course.dat”,“wb”);

}

else

{

fclose(fp);

fp=fopen(“course.dat”,“ab”);

}

fwrite(&course_new,sizeof(struct course),1,fp);

fclose(fp);

printf(“nntt信息输入完毕t按任意键继续”);

getchar();getchar();

do

{

system(“cls”);

printf(“nntt1.继续输入”);

printf(“nntt2.返回管理菜单”);

printf(“nntt请选择”);

scanf(“%d”,&inp);

if(inp!=1&&inp!=2)

{

printf(“输入不符合要求t按任意键重新选择”);

getchar();getchar();

}

}while(inp!=1&&inp!=2);

switch(inp)

{

case 1:c_add();break;

case 2:man_login();break;

} }

void c_delete()//查询后删除 {

FILE *fp;

int i=0,j,n,k,flag=0;

struct course courses[10];

void c_delete();

void man_login();

printf(“nntt请输入你要删除的课程编号:”);

scanf(“%d”,&n);

if((fp=fopen(“course.dat”,“rb”))!=NULL)

{

do

{

fread(&courses[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

}

else

{

printf(“nntt不存在任何课程t按任意键返回”);

getchar();getchar();

man_login();

}

for(j=0;j

{

if(courses[j].c_num==n)

{

flag=1;

fp=fopen(“course.dat”,“wb”);

for(k=0;k

fwrite(&courses[k],sizeof(struct course),1,fp);

fclose(fp);

fp=fopen(“course.dat”,“ab”);

for(k=j+1;k

{

fwrite(&courses[k],sizeof(struct course),1,fp);

}

printf(“nntt记录已删除!t按任意键返回ntt”);

getchar();getchar();

man_login();

fclose(fp);

}

}

if(flag==0)

{

printf(“nntt不存在对应的课程t按任意键返回”);

getchar();getchar();

man_login();

} // printf(“nntt记录已删除!t按任意键返回ntt”);

}

int main(){

篇8:教务实验选课系统

一、总体设计

(一)逻辑设计;

根据系统需求分析定义系统中的实体来表现实体之间的逻辑关系。本系统中的用户角色有学生和教师,系统中涉及的实体有实验、班级、作业、通知、成绩。

(二)物理结构设计;

在逻辑设计的基础上,为本系统设计了10个数据表,下面分别对他们进行说明。1、学生信息表:从教务选课网站数据库导出,选择了此课程的学生名单。需要学生学号、姓名和是否已经注册3列。数据表在学期开始时间有效期内必须与教务信息保持同步。2、学生注册表:存储学生的注册信息,包括学号、注册号、注册时间、注册密码、注册邮箱、注册电话、备注和是否选择了班级8列。只有学生信息表中的学生才能进行注册,所以学生注册表与学生信息表之间需要一个外连接。3、班级学生表:存储每个班级与学生之间的对应关系,包括班级序号、学生学号、座号3列。学生学号由学生注册表得到,而班级序号、座号由学生自己选择。

二、教务实验选课系统的库设计及说明

(一)库文件设计及说明:

*S-ID是外键, 引用student-infor中的S-ID列;SI-ifclass表示该学生是否已经选择班级, 0表示没有选择, 1表示已经选择, 默认是为0。注意:1、据各个实验的成绩可以算出总的实验成绩, 并计算最后的总成绩;2、S-ID是外键, 引用student-login中的S-ID列;3、各项成绩精度为5, 小数位为1位。

(二)学生用户角色功能的设计:

在本系统中,学生可以完成的操作有注册、登陆、选择班级、查看实验信息等。各项具体功能如下:1、注册:只有在学校选课网站上选择了本门课程的学生才可以在此注册。2、登陆:注册后,先登录才能进入系统。3、选择班级:因为事先规定了4个班,每个班的上课时间和教学方式不一样,学生可以根据自己的情况选择班级,一旦超过选课期限之后就不能改了。4、查看实验信息:查看实验课上课时间、本次实验课的注意事项等信息。

三、结论

本系统基于ASP.NET+Visual Basic+SQL Server2000,提供了授课教师和选修本课程的学生之间的一个交流平台,实现了学校教务实验课选课系统中课程信息查询、班级选择、作业提交、重要通知查看等基本功能。在可维护性上还有待改进,系统页面设计没有使用统一的模板,而是每个页面的布局都单独设计,这样设计不利于系统整体风格的一致性和课维护性。在NET中,所有ASPX页面都有SystemWeb.UI.Page继承而来。只需在ASPX和SystemWeb.UI Page之间加入一层,写一个自己的Class就可以是问题变行简单化,即只需要新建一个类,这个继承SystemWeb.UI.Page的特性,同时添加自己的图片、框架等,然后在项目中添加新的页面值需要继续新建这个类即可实现。

摘要:本系统为学校教务课选课系统, 它提供了授课教师和选修本课程的学生之间的一个交流平台。通过本平台, 学生可以进行课程信息查询、班级选择等操作;教师可以进行课程信息输入、班级调整等操作。

关键词:选课系统,ASP.NET,交流平台,SQL Server2000

参考文献

上一篇:钥匙管理措施方案下一篇:让学生像热爱生命一样热爱读书