精品毕业论文--vb排课系统课程设计.doc_第1页
精品毕业论文--vb排课系统课程设计.doc_第2页
精品毕业论文--vb排课系统课程设计.doc_第3页
精品毕业论文--vb排课系统课程设计.doc_第4页
精品毕业论文--vb排课系统课程设计.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书 NO.23排课系统1.功能简介 排课系统是用来自动生成课表并管理课表文档的系统。本系统主要用于满足中小学的排课要求,排课条件有班级信息,课程信息、教师信息和教学时间信息。一个完善的排课系统的任务主要包括以下几项: 条件设置: 主要负责管理班级信息、课程信息、教师信息和教学时间信息。 课表设置:主要负责进行课表安排、课表调整和查询打印。 系统管理:主要负责用户管理、密码维护和重新登录。2.数据库设计 排课系统需要建立7个表,其系统E-R图为:班级信息表PK班级名称班级人数所在教室班主任课程信息表PK课程名称总节数每周节数教师信息表PK教师编号FK1教师姓名所任课程电话邮箱 排课信息表PK排课IDFK2FK1班级名称节号星期一星期二星期三星期四星期五星期六星期日时间段信息表PK节号时间段备注班级课程信息表PK分配IDFK2FK1班级名称课程名称总节数每周节数课程分布任课教师图1 “排课系统”E-R图2.1数据字典2.1.1班级信息表 表1班级信息表字段名称数据类型可否为空说明班级名称Nvarchar(50)主键班级名称班级人数Int(4) Null本班人数所在教室Nvarchar(50)Not Null班级所在教室班主任Nvarchar(50)Null班主任姓名2.1.2课程信息表表2课程信息表字段名称数据类型可否为空说明课程名称Nvarchar(50)主键课程名称总节数Int(4)Not Null教学节数每周节数Int(4)Not Null每周课程节数2.1.3班级课程信息表表3班级课程信息表字段名称数据类型可否为空说明分配IDNumxeric(9)主键标示种子1自增1班级名称Nvarchar(50)外键主表为班级信息课程名称Nvarchar(50)外键主表为课程信息总节数Int(4)Not Null教学节数每周节数Int(4)Not Null每周课程节数课程分布Char(14)Not Null星期任课教师Char(6)外键主表为教师信息2.1.4教师信息表表4教师信息表字段名称数据类型可否为空说明教师编号Char(6)主键6位编码教师姓名Nvarchar(50)Not Null教师姓名所任课程Nvarchar(50)外键主表为课程信息电话Nvarchar(50)Null联系电话邮箱Nvarchar(50)Null联系邮箱2.1.5时间段信息表表5 时间段信息表字段名称数据类型可否为空说明节号Char(6)主键如“第一节”时间段Nvarchar(50)Not Null时间段备注Text(16)Null时间段备注2.1.6排课信息表表6 排课信息表字段名称数据类型可否为空说明 排课IDNumxeric(9)主键标种子1自增1班级名称Nvarchar(50)外键主表为班级信息节号Char(6)外键主表为时间段信息星期一Nvarchar(50)Null课程名称星期二Nvarchar(50)Null课程名称星期三Nvarchar(50)Null课程名称星期四Nvarchar(50)Null课程名称星期五Nvarchar(50)Null课程名称星期六Nvarchar(50)Null课程名称星期日Nvarchar(50)Null课程名称2.1.7用户信息表表7 用户信息表字段名称数据类型可否为空说明用户ID用户IDChar(6)主键6位的用户名称Char(10)Not Null用户名称用户类别Char(10)Not Null教师、管理人员密码Char(10)Null密码少于10位电话Nvarchar(50)Null电话邮箱Nvarchar(50)Null邮箱地址2.2创建数据库 在安装完MS SQL Server系列的数据库服务器后,创建数据库。直接手工建立数据库。打开SQL Server企业管理器,新建一个数据库,数据库名为“排课系统”,然后按照数据字典建立表和表关联。3.详细设计过程3.1排课系统3.1.1创建系统主界面3.1.1.1建立工程打开VB6.0,选择“文件”/“新建工程”命令,弹出“新建工程”对话框,选中“标准EXE”图标,单击“确定”按钮,建立一个“标准EXE”工程。在项目的属性面板中,将项目的“NAME”属性值改为“排课”。3.1.1.2创建系统主窗体1) 主窗体界面在项目资源管理器中为项目添加一个MDI窗体作为系统主窗体,将其“Name”和“Caption”属性改为“排课系统”。系统主窗体如图2所示,其主要控件的属性如表8所示表8 主窗体属性设置控件属性属性值排课系统Name排课系统Caption排课系统StartUpPosition0-ManualWindowState0-Normal图2 系统主窗体2) 主窗体菜单 在菜单编辑器对话框中编辑菜单项。系统的菜单结构如表9所示。表9 菜单结构一级菜单二级菜单一级菜单二级菜单条件设置班级设置课表管理课表安排课程设置课表调整教师设置查询打印时间设置系统管理用户管理密码维护重新登录3) 程序代码的设计 主窗体运行时需要调用SetRight过程,该过程将根据不同的用户类型来设置系统的使用权限。当用户单击工具栏中的图片按钮时,将触发ToolbAr_ButtonClick事件。单击不同的图片按钮将进入不同的系统界面,单击不同的菜单时将进入不同的界面,其代码参考附录。3.1.1.3创建公用模块为了能够对数据库访问进行集中处理,需要创建一个专门访问数据库的公用模块。在项目资源管理器中为项目添加一个模块,并将其保存为OPerateDateBase.bas。1) OPerateDateBase.basOPerateDateBase.bas公用模块主要用于对数据库进行操作,包括5个函数:GetConnStr()As String函数,返回连接字符串,用来设置数据库连接字符串。OpenConn(ByRef Conn As ADODB. Connection)As Boolean函数,返回布尔值,用来打开数据库连接。ExecuteSOL(ByVal SQL As String ,ByRef msg As String)函数,用来执行SQL语句。SelectSOL(ByVal SQL As String ,ByRef msg As String)As ADODB.Recordset函数,返回Recordset,用来执行查询语句。BatchSelectSOL(ByVal SQL As String ,ByRef msg As String)As ADODB.Recordset函数,返回Recordset,用来执行批处理。 其代码参考附录。2) PublicVar.bas为了实现小全局变量 ,另外创建一个全局变量模块PublicVar.bas。主要有4个全局变量,如下所示:LoginSucceeded全局变量,用来保存用户登录是否成功的标志。UserID全局变量,用来保存用户ID。User-Type全局变量,用来保存用户类型。ConnectionString全局变量,用来保存数据库连接字符串。3.1.2“条件设置”模块 “条件设置”模块主要包括以下功能模块:(1)班级设置:负责维护班级信息,主要提供增加、修改、删除和查询功能。(2)课程设置:负责维护课程信息,同时进行班级课程分配。(3)教师设置:主要负责维护教师的基本信息和授课信息。(4)时间设置:主要负责学校每天的教学时间安排。3.1.2.1“班级设置”模块的实现 班级设置模块负责维护班级信息,主要提供增加、修改、删除和查询功能。为了实现这些功能,需要如下控件: (1)1个ListView控件,显示班级图片。(2)1个ImageList控件,装载图片。(3)4个TextBox控件。(4)6个CommandButton控件:5个用来维护信息的按钮,分别是添加、修改、删除、保存和取消按钮,1个用来退出系统的退出按钮。其主要的控件属性如表10所示。表10 “班级设置”窗体主要控件属性表控件属性属性值A班级设置NameA班级设置Caption班级设置Txt(0)MaxLength50运行窗体时将触发Lode事件。在Lode事件中,首先需要调用LodeData过程初始化班级listView,然后调用ShowDate过程显示数据。当用户单击listView控件中的班级图标时,将触发listView_Click事件,当用户单击保存按钮时,将触发CmdSave_Click事件。在保存数据之前,需要调用CheckDate函数对数据进行合法性检查;返回值为真时表示合法,返回值为假时表示数据非法。同时,需要调用setDate过程来设置数据。其代码参考附录。3.1.2.2“课程设置”模块的实现 课程设置模块主要负责维护课程信息,同时进行班级课程分配,它包括两个窗体,一个是课程设置窗体,另一个是班级课程信息窗体,为了实现这些功能信息,需要如下控件:1) 课程设置窗体一个DateGrid控件,显示课程信息列表。3个TextBox控件。11个CommandButton控件:4个用来控制光标移动的按钮,分别用于移到第一条、上一条、下一条和最后一条记录;5个用来维护信息的按钮,分别是添加、修改、删除、保存和取消按钮;1个班级课程按钮;1个用来退出系统的退出按钮。其主要的控件属性值如表11所示。表11 “课程设置”窗体主要控件属性表控件属性属性值A课程设置(Form)NameA课程设置Caption课程设置DateGrid1(DateGrid)Caption课程信息列表2) 班级课程信息窗体5个ComboBox控件。1个DateGrid控件,显示班级课程信息列表。2个TextBox控件,显示总节数和每周节数。10个CommandButton控件:4个用来控制光标移动的按钮,分别用于移到第一条、上一条、下一条和最后一条记录;5个用来维护信息的按钮,分别是添加、修改、删除、保存和取消按钮;1个用来退出系统的退出按钮。其主要的控件属性值如表12所示。表12“班级课程设置”窗体主要控件属性表控件属性属性值A班级课程设置(Form)NameA班级课程设置Caption班级课程设置DateGrid1(DateGrid)Caption班级课程信息列表 在课程设置窗体中,运行课程设置窗体将运行窗体时将触发Lode事件。在Lode事件中,首先需要调用LodeData如果记录存在,则需要调用ShowDate过程显示数据。当用户单击保存按钮时,将触发CmdSave_Click事件。在保存数据之前,需要调用CheckDate函数对数据进行合法性检查;返回值为真时表示合法,返回值为假时表示数据非法。同时,需要调用setDate过程来设置数据。 在班级课程信息窗体中,运行班级课程信息窗体将触发Lode事件。在Lode事件中,首先需要初始化班级ComboBox、课程ComboBox、课程分布ComboBox,然后调用调用LodeData过程装载数据,如果数据存在,则需要调用ShowDate过程显示数据。当用户单击保存按钮时,其运行结果同上。 其代码参考附录。3.1.2.3“教师设置”模块的实现 教师设置模块主要负责维护教师的基本信息和授课信息,进行增加、修改、删除和查询功能,为了实现这些功能信息,需要如下控件:(1)1个ListView,控件,显示教师图标。(2)1个ImageList控件,装载图片。(3)4个TextBox控件。(4)1个ComboBox控件,显示课程名称。(5)6个CommandButton控件:5个用来维护信息的按钮,分别是添加、修改、删除、保存和取消按钮,1个用来退出系统的退出按钮。其主要的控件属性如表13所示。表13“教师设置”窗体主要控件属性控件属性属性值A教师设置NameA教师设置Caption教师设置TxtId(textbox教师标号)MaxLength6 运行窗体时将触发Lode事件。在Lode事件中,首先需要初始化教师ComboBox然后调用LodeData过程初始化教师listView,最后调用ShowDate过程显示数据。当用户单击listView控件中的教师图标时,将触发listView_Click事件,当用户单击保存按钮时,与班级课程信息窗体中运行方式一样,其代码参考附录。3.1.2.4“时间设置”模块的实现 时间设置模块主要负责实现对时间信息进行增加、修改、删除和查询功能,为了实现这些功能信息,需要如下控件:3个TextBox控件。1个DateGrid控件,显示时间设置信息。10个CommandButton控件:4个用来控制光标移动的按钮,分别用于移到第一条、上一条、下一条和最后一条记录;5个用来维护信息的按钮,分别是添加、修改、删除、保存和取消按钮;1个用来退出系统的退出按钮。其主要的控件属性如表14所示。表14 “时间设置”窗体主要控件属性表控件属性属性值A时间设置(Form)NameA时间设置Caption时间设置DateGrid1(DateGrid)Caption时间设置信息 运行窗体时将触发Lode事件。在Lode事件中,首先需要调用LodeData过程装载数据:如果记录存在,则需要调用ShowDate过程显示数据。用户单击保存按钮时,与班级课程信息窗体中运行方式一样,其代码参考附录。3.1.2“课表管理”模块 “课表管理”模块主要包括以下功能模块:课表安排:负责依据排课规则生成课表。课表调整:允许管理人员对课表进行手工调整。查询打印:负责按班级和教师进行查询和打印。3.1.2.1“课表安排”模块的实现 课表安排窗体主要用于查看班级课程信息和生成新课表,为了实现这些功能信息,需要如下控件:(1)1个ListView,控件,显示班级图标。(2)个ImageList控件,装载图片。(3)个DateGrid控件,显示班级课程信息。(4)2个CommandButton控件:1个用来生成新课表的生成课表按钮,一个用来退出系统的退出按钮。其主要的控件属性如表15所示。表15 “课表安排”窗体主要控件属性控件属性属性值B课表安排(Form)NameB课表安排Caption课表安排 重点当用户单击生成课表时将触发CmdDo_Click事件,为所有班级生成新课表,这部分程序参见附录。3.1.2.2“课表调整”模块的实现 课表调整窗体主要用于实现手工调整课表的功能,其对话框界面如下图3图3 “课表调整”模块界面为了实现这些功能,需要如下控件:(1)1个DateGrid控件,显示课表信息。(2)9个ComboBox控件。(3)4个CommandButton控件:1个调整按钮,一个保存按钮,一个取消按钮,一个用来退出系统的退出按钮。其主要的控件属性如表16所示。表16“课表调整”窗体主要控件属性控件属性属性值B课表调整(Form)NameB课表调整Caption课表调整 运行窗体时将触发Lode事件。在Lode事件中,首先需要调InitialComboBox过程初始化9个ComboBox控件;然后调用LodeData过程装载数据,并调用ShowDate过程显示数据,最后调用ControlEnable过程来控制控件的可用性,其代码参考附录。3.1.2.3“查询打印”模块的实现 查询打印窗体负责按班级和教师进行查询和打印的功能,为了实现这些功能,需要如下控件:(1)1个DateGrid控件,显示查询结果。(2)2个OptionButton控件(3)2个ComboBox控件。(4)3个CommandButton控件:1个查询按钮,一个打印按钮,一个用来退出系统的退出按钮。其主要的控件属性如表17所示。表17 “查询打印”窗体主要控件属性控件属性属性值B查询打印(Form)NameB查询打印Caption查询打印运行查询打印窗体时将触发Lode事件。在Lode事件中,首先需要调InitialComboBox过程初始化班级ComboBox和教师ComboBox;当用户单击查询按钮时,将触发CmdCount_Click事件,得到统计结果。在CmdCount_Click事件中,需要调用GetSQL过程,其代码参考附录。3.1.3“系统管理”模块 “系统设置”模块主要包括以下功能模块:用户管理:负责维护用户的基本信息。密码维护:给用户提供密码维护功能。重新登录:给用户提供重新登录功能。3.1.3.1“用户管理”模块的实现 用户管理窗体主要用于维护系统用户的信息功能,其对话框界面如下图4图4 “用户管理”窗体界面为了实现这些功能信息,需要如下控件:1个ListBox控件,显示用户和用户权限。5个TextBox控件。1个ComboBox控件,显示用户类别。6个CommandButton控件:5个用于编辑信息的按钮,1个用来退出系统的退出按钮。其主要的控件属性如表18所示。表18 “用户管理”窗体主要控件属性控件属性属性值G用户管理(Form)NameG用户管理Caption用户管理ListRights(ListBox权限) MultiSelectn1-SimpletxtUserId(TextBox用户ID)MaxLength6txtPassword(TextBox密码)PasswordChar*MaxLength10 运行窗体时将触发Lode事件。在Lode事件中,首先需要初始化用户列表ListBox和权限ListBox和用户类别ComboBox;最后调用LodeData过程装载数据,为了能够在控件中显示数据,需要在LodeData过程中调用FixDate过程。3.1.3.2“密码维护”模块的实现 密码维护模块主要负责修改密码功能。为了实现这些功能信息,需要如下控件:3个TextBox控件。1个ComboBox控件,显示用户列表。2个CommandButton控件:1个确定按钮,1个用来退出系统的退出按钮。其主要的控件属性如表19所示。表19 “密码维护”窗体主要控件属性控件属性属性值G密码维护(Form)NameG密码维护Caption密码维护txtOld(TextBox旧密码)PasswordChar*txtNew(TextBox新密码)PasswordChar*txtCheck(TextBox确认密码)PasswordChar*运行窗体时将触发Lode事件。在Lode事件中,首先需要初始化用户列表ListBox。当用户单击确定按钮后,将触发CmdOK_Click事件。3.1.3.3“重新登录”模块的实现 重新登录模块负责给用户提供重新登录功能。为了实现这些功能信息,需要如下控件:1个TextBox控件。1个ComboBox控件,显示用户列表。2个CommandButton控件:1个确定按钮,1个用来退出系统的退出按钮。其主要的控件属性如表20所示。表20 “重新登录”窗体主要控件属性控件属性属性值G登录(Form)NameG登录Caption登录txtPassword(TextBox密码)PasswordChar*运行窗体时将触发Lode事件。在Lode事件中,首先需要初始化用户列表ListBox。当用户选择用户ID、输入密码并单击确定按钮后,将触发CmdOK_Click事件。4.效果及存在问题 排课系统提供了条件设置、课表设置和系统管理3大功能,但是它还有不足之处:没有考虑到教师资源的问题。完善的排课系统不单要排出课表,也应该排出教室安排表。排课设置也应该更加丰富,一个教师可能担任多门课程,并为多个班授课。同时排课算法也有待改进。本系统主要采用的是“探测法”,也可采用“并行回溯”算法。并且我们在做这个程序时使用了“应用程序安装向导”进行打包和发布。它是随VB一起发布的一个实用工具软件,它解决了很多打包的问题。5.心得体会在做完这个排课系统后,我对运用VB做一个完整的系统有了很深的体会。比如做系统的过程就是首先进行了详细的需求分析,划分了系统模块;然后进行了数据库分析设计,得到了系统E-R图,创建了数据字典,创建了数据库、数据表以及表关联;最后通过VB进行应用程序的开发,实现了所有的系统模块。以后,我会加倍努力,希望能够掌握更多的VB知识,为自己的将来奠定良好的基础。6.参考文献1 刘天惠.Visual Basic程序设计教程M. 北京: 清华大学大学出版社,2003.121-124 2 龚沛曾.Visual Basic程序设计教程M. 高等教育出版社, 2004.23-453 蒋加伏.Visual Basic程序设计教程M.北京: 北京邮电大学出版社,2003.102-1567.附录课表安排程序代码如下:Private Sub Form_Load() Call LoadData 装载数据 Call ListView1_Click 显示班级课程信息End SubPrivate Sub LoadData()装载数据 Dim list As ListItem Dim key As String Set rs = Nothing 查询班级名称 SQL = SELECT 班级名称 FROM 班级信息表 ORDER BY 班级名称 Set rs = SelectSQL(SQL, msg) ListView1.ListItems.Clear 清空ListView If rs.RecordCount 0 Then 如果存在记录 rs.MoveFirst Do Until rs.EOF key = rs.Fields(班级名称) Set list = ListView1.ListItems.Add(, , key, 1) rs.MoveNext Loop End IfEnd SubPrivate Sub CmdDo_Click()生成课表 msg = MsgBox(您确实要进行排课吗?, vbYesNo) If msg = vbYes Then 如果选则“是”,进行排课 M_Flag = True 给模块变量赋值 1给每个班生成一张空的课程表 Call GenerateEmptyCT 2开始排课 Call GenerateRealCT 3如果排课条件设置错误,不进行排课 If M_Flag = False Then MsgBox (排课条件设置有问题,请重新设置!) Exit Sub End If Else Exit Sub End IfEnd SubPrivate Sub GenerateRealCT()给每个班生成一张真实的课程表 Dim rst1 As ADODB.Recordset Dim strClass As String 定义班级名称变量 1得到班级名称集 SQL = select 班级名称 from 班级信息表 order by 班级名称 Set rst1 = SelectSQL(SQL, msg) 2给每个班生成课表 If rst1.RecordCount 0 And M_Flag = True Then 如果班级信息存在,且排课条件设置正确 Do While Not rst1.EOF strClass = rst1.Fields(班级名称) Call GenerateCT_ByClass(strClass) 按班级生成课程表 rst1.MoveNext Loop MsgBox (已经生成了真实课表!) End IfEnd SubPrivate Sub GenerateCT_ByClass(strClass As String)按班级生成课程表 Dim rst1 As ADODB.Recordset Dim strCourse As String 定义课程名称变量 1初始化班级课表 M_courseTable For index = 1 To M_segmentNum For index2 = 1 To 7 M_courseTable(index, index2) = Next index2 Next index 2得到班级的课程集 SQL = select 课程名称 from 班级课程信息表 where 班级名称= & strClass & order by 课程名称 Set rst1 = SelectSQL(SQL, msg) 3遍历班级的每一门课程,并进行课程安排 If rst1.RecordCount 0 And M_Flag = True Then Do While Not rst1.EOF strCourse = rst1.Fields(课程名称) M_course = strCourse 赋值给模块变量 M_class = strClass 赋值给模块变量 Call GenerateCT_ByClassAndCourse(strClass, strCourse) 给每个班的每一门课进行课程安排 rst1.MoveNext Loop End If 4将M_courseTable矩阵写入到排课信息表 SQL = SELECT 节号,星期一,星期二,星期三,星期四,星期五,星期六,星期日 SQL = SQL & FROM 排课信息表 where 班级名称= & strClass & ORDER BY 节号 Set rst1 = SelectSQL(SQL, msg) If M_Flag = True Then 如果排课条件设置正确,将M_courseTable写入到排课信息表 For index = 1 To M_segmentNum For index2 = 1 To 7 rst1.Fields(index2) = M_courseTable(index, index2) Next index2 rst1.Update rst1.MoveNext Next index End IfEnd SubPrivate Sub GenerateCT_ByClassAndCourse(strClass As String, strCourse As String)给每个班的每一门课进行课程安排 Dim rst1 As ADODB.Recordset Dim segmentNum As Integer 定义每周的授课节数变量 Dim courseRang As String 定义课程分布变量 Dim splitCourse As Integer 定义需要排课的次数,两节课需要累排 Dim flag As Boolean 如果每周有偶数节课flag为True,奇数节课为false Dim dayindex1 As Integer 课程分布开始日期的序列号 Dim dayindex2 As Integer 课程分布结束日期的序列号 Dim index1 As Integer 1得到课程信息 SQL = select 班级名称,课程名称,每周节数,课程分布 from 班级课程信息表 SQL = SQL & where 班级名称= & strClass & and 课程名称= & strCourse & Set rst1 = SelectSQL(SQL, msg) segmentNum = rst1.Fields(每周节数) courseRang = rst1.Fields(课程分布) 2得到需要进行排课的次数 If segmentNum = 0 Then Exit Sub 如果该课程的授课次数为0,退出函数 splitCourse = Int(segmentNum / 2)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论