2023年11月30日发(作者:)

辽宁广播电视大学开放教育试点

软件开发与应用专业(专科)

毕业设计报告

设计题目 排课管理系统

电大分校:

学生姓名:

号:

指导教师:

完成日期:

- 1 -

................................................ 错误!未定义书签。

第一章 系统概述 ........................................................ 4

11排课管理系统概述 ................................................... 4

12排课管理系统的目的和意义 ........................................... 4

第二章 系统分析 ........................................................ 5

21 编程环境选择 ...................................................... 5

22设计大纲 ........................................................... 7

第三章 设计内容 ....................................................... 9

31实现功能 .......................................................... 10

32功能与模块的设计 .................................................. 10

33数据库设计 ........................................................ 10

34数据表设计 ........................................................ 11

第四章 系统流程图设计与分析 .......................................... 14

41登陆系统流程图 .................................................... 14

42主界面中课表生成部分流程图 ........................................ 14

421班级管理流程图 ................................................. 14

422班级课程处理流程图 ............................................. 15

423课表生成部分流程图 ............................................. 16

424报表输出功能 ................................................... 17

43其它模块设计说明 .................................................. 18

第五章 设计进程 ....................................................... 19

第六章 结论和总结 ..................................................... 20

- 2 -

致谢 .................................................................. 22

参考文献: ............................................ 错误!未定义书签。

附件:程序清单

计算机已经成为我们学习和工作的得力助手:今天,计算机的价格已经十分低廉,

性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主

要有以下几个方面:首先,计算机可以代替人工进行许多繁杂的劳动;其次,计算机

可以节省许多资源;第三,计算机可以大大的提高人们的工作效率;第四,计算机可

以使敏感文档更加安全,等等。 在中小学中用计算机管理排课的意义现在我国的中

小学校中排课的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的

发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机

为基础的信息管理所取代。我作为一个计算机应用的大专生,希望可以在这方面有所

贡献。改革的总设计师邓小平同志说过"科学技术是第一生产力",我希望能用我三年

的所学编制出一个实用的程序来帮助中小学进行更有效的课程管理。

- 4 -

第一章 系统概述

11 排课管理系统概述

排课管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管

理者来说都至关重要,所以排课管理系统应该能够为用户提供充足的信息和快捷的查

询手段。但一直以来人们使用传统人工的方式管理文件排课,这种管理方式存在着许

多缺点,:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、

更新和维护都带来了不少的困难。随着科学技术的不断提高,计算机科学日渐成熟,

强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的

作用。作为计算机应用的一部分,使用计算机对排课信息进行管理,具有着手工管理所

无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿

命长、成本低等。这些优点能够极大地提高排课管理的效率,也是企业的科学化、正

规化管理,与世界接轨的重要条件。

12排课管理系统的目的和意义

终上所述,开发这样一套排课管理软件成为很有必要的事情。我们所开发的这排

课管理软件归纳起来,好处大约有以下几点:

1 可以存储历届的排课,安全、高效;

2 只需一到二名排课录入员即可操作系统,节省大量人力;

3 可以按照录入人员的输入来自动生成课程表,并尽量减少冲突等情况发生。

排课系统的设计分析根据实际情况,我们使用原型法(Rapid Prototyping)即以

少量代价快速地构造一个可执行的软件系统模型。使用户和开发人员可以较快地确定

需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性

质逐渐增加上去,直到所有的性质全部满足。此时模块也发展成为最终产品了。

- 5 -

第二章 系统分析

2.1 编程环境选择

编程环境的选择微软公司的JspWindows应用程序开发工具,使目前最为广泛

的、易学易用的面向对象的开发工具。Jsp提供了大量的控件,这些控件可用于设计

界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效

的提高了应用程序的运行效率和可靠性。故而,实现本系统VB是一个相对较好的选

择。 关系型数据库的实现Sqlserver2000 就是关系数据库开发工具,数据库能汇集各

种信息以供查询、存储和检索。Sqlserver 的优点在于它能使用数据表示图或自定义

窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一

目了然。另外,Sqlserver 允许创建自定义报表用于打印或输出数据库中的信息。

Sqlserver也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件

服务器,与其他网络用户共享数据库。Sqlserver 是一种关系数据库工具,关系数据

库是已开发的最通用的数据库之一。如上所述,Sqlserver 作为关系数据库开发具备

了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功

能。

二者的结合(DBA)微软的JET数据库引擎提供了与数据库打交道的途

径,我们是通过它以及Jsp 来访问数据库并对其进行各种操作。JspSqlserver以及

其他微软的软件产品都是通过共用JET数据库引擎,从而给用户提供了丰富的数据类

型。当今的微软对数据库中的ADO比较注视,并在.net上使用了技术,鉴

ADO在很多程序里的广泛应用,使用ADO来连接数据库将是最为适用的,并且

在定义了ADO的连接模块后,对于将来的升级也会很方便,只要修改一下连接源,

就可以轻松的更换后台。

在使用Jsp语言进行编程时还有有如下的优点:

- 6 -

Jsp应用程序不同于其他语言开发的单一性程序。使用Jsp编程时,必须首先

确定应用程序如何与用户交互,如鼠标单击,用户必须编写代码控制这些事件的响应

方法。

使用Jsp开发数据库应用程序的一般步骤如下所示:

1 建立数据库

2 建立用户界面

3 编写代码

4 调试运行

5 编译应用程序

6 发布应用程序

界面设计

1 控件的位置

2 界面元素的一致性

3 保持界面的简明

4 使用颜色和图像:增加视觉的感染力

5 图像和图标:增加应用程序的视觉上的趣味

6 选取字体

Jsp应用程序的结构:

由于Jsp应用程序是基于对象的,所以应用程序的代码结构就是该程序在屏幕上

物理表示的模型。根据定义,对象包含数据和代码。在屏幕上看到的窗体代表属性,

这些属性定义了窗体的外观和内在特性。

本设计主要是运用ADO来连接和操作数据库。

:

ADO 技术简介

- 7 -

ADOMicrosoft目前主要的数据存取技术,从1997Microsoft推出ADO

第一个版本之后, ADO的整体架构并没有太大的改变。不过在每一个新的ADO版本

之中,Microsoft不断地改善ADO的执行效率,提供更多的功能,持续增加ADO的稳

定性,并且让ADO能够存取更多种类的数据源。

ADOMicrosoft提出的各种数据存取技术的演化结果,因为随着数据日益复杂,

数据存取技术也必须不断地进步以适应应用系统的需求。目前,虽然ADOWindows

平台存取数据的标准技术,不过ADO也将会继续演变。要了解ADO为什么会成为目前

的标准,可以从Windows平台数据存取技术的进化而得知。

1. ODBC

1992MicrosoftSybaseDigital共同制定了ODBC标准接口,以单一的ODBC

API来存取各种不同的数据库。随后ODBC便获得了许多数据库厂商和Third-Party

的支持而逐渐成为标准的数据存取技术。ODBC以当时的业界标准规范X/Open

Call-Level Interface(CLI)ISO / IEC9075-3 Call-Level Interface(SQL/CLI)

为涵盖的范围,因而支持了广阔的数据库。虽然ODBC在初期的版本中执行效率不佳,

而且功能有限,因此也为人们所贬低。但是,随着Microsoft不断地改善ODBC,使

ODBC的执行效率不断增加,ODBC驱动程序的功能也日渐齐全。到目前,ODBC已经是

一个稳定并且执行效率良好的数据存取引擎。不过ODBC仅支持关系数据库,以及传

统的数据库数据类型,并且只以C / C + +语言API形式提供服务,因而无法符合日

渐复杂的数据存取应用,也无法让脚本语言使用。因此Microsoft除了ODBC之外,

也推出了其他的数据存取技术以满足程序员不同的需要。

2. DAO

1993Microsoft为了让程序员能够存取Sqlserver数据库,使用OLE

Automation技术封装了Jet Engine。这些使用Jet Engine存取Sqlserver数据库的

OLE Automation Object便称为Data Sqlserver Object(DAO)DAO能够存取x Base

的数据库以及Excel文件,并且能够结合ODBC存取关系数据库。但是DAO毕竟主要

的设计目的是存取Sqlserver数据库,因此DAO在存取Sqlserver数据库时非常有效

率,但是在存取其他的数据源时却表现得不怎么好。目前DAO已经慢慢接近维护的状

态。

3. RDO

由于DAO在结合ODBC存取关系数据库时表现得并不好,因此在1995Microsoft

同样以OLE Automation技术直接封装ODBC API,让程序员能够存取关系数据库。这

种数据存取技术便称为Remote Data Object(RDO)Microsoft之所以推出RDO,是

因为ODBC API是非常复杂的API,许多程序员无法直接使用ODBC API来开发应用程

序,因此Microsoft以简化的RDO对象让程序员能够较为简单存取数据。此外,通过

RDOVB和脚本语言也能够存取各种关系数据库。不过目前RDO也已经逐渐地被放弃

- 8 -

了。

4. OLE-DB

随着数据源日益复杂化,现今的应用程序很可能需要从不同的数据源取得数据,

加以处理,再把处理过的数据输出到另外一个数据源中。更麻烦的是这些数据源可能

不是传统的关系数据库,而可能是Excel文件,EmailInternet/Intranet上的电

子签名信息。Microsoft为了让应用程序能够以统一的方式存取各种不同的数据源,

1997年提出了Universal Data Sqlserver(UDA)架构。UDACOM技术为核心,协

助程序员存取企业中各类不同的数据源。UDAOLE-DB (属于操作系统层次的软件)

作为技术的骨架。OLE-DB定义了统一的COM接口作为存取各类异质数据源的标准,

并且封装在一组COM对象之中。藉由OLE-DB,程序员就可以使用一致的方式来存取

各种数据。

5. ADO

ADO(ActiveX Data Object)是微软新近推出的新一代数据访问规范,其使用简便功能

强大,Delphi 中其地位等同于一个和BDE并列的数据库引擎。ADOMDAC的应用

程序设计接口,从它的字面意思上可以看出,ADOActive X技术密不可分,Active

X技术又和OLECOM(组件对象模型,也由微软提出,旨在实现软件组件化)等技术有

深厚的历史渊源。OLE DB 则是系统级的接口,定义了一套从关系数据库及文件系统

访问数据的COM接口。

2.2设计大纲

经过慎重考虑,并尽量使排课的速度加快,因此对各位教师和各班级都建立一个

占用表,首先计算当前要排课程的老师的已排课程占用情况,将其与排课班级的占用

表进行对比,获取有用空间,即得到的空间都会适合,这样使用随机推举的方式来自

动生成一个新位置,达到排课效果,并且不会造成冲突等情况的发生。

排课作为系统的主要重点,在编写中就要尽量避免各种各样的冲突和错误发生,

因此也需要经过投入长时间的测试与使用才能使程序的功能达到最好,速度最快。

在课程表输出方面,将采用目前最常用的报表形式来进行输出,并且同时使用

VB中操作EXECL的方法将课程表输出到EXECL自制的课程表模板文件中,并且同

时可以实现打印,这样用户如果在认为报表输出的格式并不能让您满意的话,就可以

- 9 -

根据自己的需要来修改EXECL的模板,达到课程表的完美输出。

第三章 设计内容

3.1实现功能

1 掌握学校所有的课程和教师的信息。包括每门课程的时间、班级以及任课老师

的姓名等。

2 针对不同的人员授予不同的权限。提供灵活的浏览、查询功能。可以查看某个

系、某个班级所有课程的信息。

3 可以对一个或多个班级进入课程管理与排课表管理,可以不限次的生成该班级

课程表。

- 10 -

4 可以对课程进行变动管理。既可以手工排课,又可以实现自动排序功能。

5 帮助系统维护可以实现:操作日志、重新登录、打印设置(包括统计各种报表

及打印等)、退出等操作。

6 提供一种或多种课程表输出功能,并使用活动的模板输出功能,输出样式可以

由用户自定义。

7 实现功能全面化,由于每个学校或班级的每天课程数目或时间都不太一样,

现智能计算总课程数目和管理对应的时间段,并且根据每门课程的独立分布式来进行

排列(例如:大学语文自动排列的分布方式可以是周一至周六,那么系统就会自动将

其平均分布在周一至周六这些天里)

8用户管理:设置两个级别用户:管理员和普通用户,管理员有权限操作系统中

的所有数据,普通用户只能以执行查询,输出之类的功能,无法对系统进行实质性的

操作,用户使用本系统之前必须先通过身份认证(用户级别、用户名和密码,密码输

入有次数限制,连续三次输入错误密码则锁定该用户)

3.2功能与模块的设计

3.2.1 设计思想

本系统采用各班级独立划分管理,所有教师均可为任何班级服务,各班级根据每

天课程数目来进行自动排序,同时各教师允许教学多门课程,因此为了每名教师

配置了时间占用表,只要与班级对应的时间空间表未被占用,都可以参与排课,

并根据用户定义的要求排出课程。

数据管理类:由于班级,时间,教师,课程等信息都需要一个活动的管理过程,

因为在节省资源的情况下,将各数据所需要的代码合并在一起进行编写和使用。

- 11 -

排课系统主画面

系统启动画面

系统认证

系统还原班级管理课程管理时间段设置

排课系统

用户管理

3.2.2 各模块设计与分析

课表生成离开系统

此处中各模块的设计与分析在以下各模块数据流图与程序中同步讲解。

- 12 -

3.2.3 系统ER

11

::

NN

1

:

N

系统E -R图说明:

本系统是一个排课管理系统,主要是根据班级为单位,利用班级与课程来进

行排课。

班级与课程是一对多的关系,班级不能重复,但是课程可以随意出现任何班级。

班级与班级课程信息之间也是一对多的关系,一个班级,可以有很多不同的课

程。

班级与临时生成课表是一对多的关系,一个班级,只能有一个课程表,而排列

的方式都同样由班级获得。

其余的数据库建立都是在让系统方便使用的基础上建立的,还有一个无需用户

手动添加数据的,做为内部参数来使用的表,这里就不用标出的了。

3.2.4 数据字典

- 13 -

数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实完善的。

明确地需求收集和分析作为数据库设计的第一阶段是十分重要的。这一阶段收集到的

基础数据(用数据字典来表达)和一组数据流程图(Data Flow Diagram,简称DFD

是下一步进行概念设计的基础。

以下是本系统的数据结构,因实现使用方便的特点,数据库中的各字段列表直接

用中文来表示,所以数据字典在以下数据库设计中已经没有什么太大的必要。

详见数据库的设计:

3.3数据库设计

数据库的概念数据库是一种存储数据并对数据进行操作的工具。数据库的作

用在于组织和表达信息,简而言之,数据库就是信息的集合。计算机的数据库可以分

为两类:非关系数据库(flat-file)和关系数据库(relational。关系数据库中包

含了多个数据表的信息,数据库含有各个不同部分的术语,像记录、域等。新建一个

数据库创建任何一个数据库的第一步是仔细的规划数据库,设计必须是灵活的、有逻

辑的。创建一个数据库结构的过程被认为是数据模型设计。创建一个数据库的大体思

路如下:

1 标识需要的数据;

2 收集被标识的字段到表中;

3 标识主关键字字段;

4 绘制一个简单的数据图表;

5 规范数据;

6 标识指定字段的信息;

7 创建物理表。

3.2修改已建的数据库

数据库的修改分为:添加、编辑和删除记录。这三种操作均可由Jsp 创建的程序来

完成,下面的章节将详细描述实现的具体方法。 实现数据库之间的联系数据库之间

的关系指明两个库之间共享一个共同的关键字值。一个连接是指一种虚拟的表,这种

表是在当用户要求从相互关联的各个不同的表中获取信息时建立的,关键字段用于在

- 14 -

相互连接的不同表中查找匹配的记录。一个更高级的连接形式称为自连接。这种连接

是指一个表被连接到它自己的一个字段,或在不同的纪录中由重复数据的组合字段。

数据库中有三种不同类型的关键字:主关键字、组合关键字和外关键字。在表中使用

的关键字类型用于描述数据库表示什么以及在数据库中如何与其它的库建立关系。

在众多的数据库中,Microsoft Sqlserver是操作最简单,使用最为广泛的

一种数据库软件,在单机上运行有着方便、实用、操作员要求低等特点。在这里,我

选择了使用Sqlserver数据库管理系统,来开发一个小型的销售管理系统。

在系统的数据库设计中,应遵守以下的原则:

①数据结构的合理性。即数据文件的合理组织,数据元素的合理归类和划分,

及数据项的合理描述。

②数据存储的安全性。提高安全性的最为有效的措施是增加数据的冗余,而数据

的大量冗余往往为维护数据的一致性带来了困难。对此,根据实际需要进行合理取舍,

在尽量降低冗余的前提下,确保数据的安全性和可靠性。

③维护和管理方便。存储结构的设计,首先应保证对数据进行管理和维护上的方

便,它是提高系统运行效率的基础。

3.4数据表设计

在使用Sqlserver创建“排课管理系统”数据库系统中需要建立的数据表有:

1 登陆

字段 数据类型 字段大小 必填字段 索引 允许为空

用户名 文本 50

密码 文本 50 (无重复)

权限 文本 50

2 课程名

数据类型 字段大小 必填字段 索引 允许为空

- 15 -

课程名 文本 4 (无重复)

教师姓名 文本 50

3 课程信息表

数据类型 字段大小 必填字段 索引 允许为空

课程名 文本 50 (无重复)

课节数 数字 长整型

每周课数 数字 长整型

需要周数 数字 长整型 (有重复)

任课老师 文本 50

两节课累排 文本 50

课程分布 文本 50

所属班级 文本 50

4 临时生成表

字段 数据类型 字段大小 必填字段 索引 允许为空

时间段 文本 50

星期一 文本 50

星期二 文本 50

星期三 文本 50

星期四 文本 50

星期五 文本 50

星期六 文本 50

星期日 文本 50

所属班级 文本 50

自动编号 自动编号

5 课程占用表

字段 数据类型 字段大小 必填字段 索引 允许为空

- 16 -

班级 文本 50

占用 文本 50 (无重复)

6 系统日志

字段 数据类型 字段大小 必填字段 索引 允许为空

用户名 文本 50

时间 文本 50

操作记录 文本 255

7 系统设定

字段 数据类型 字段大小 必填字段 索引 允许为空

每天课数 数字 长整型

8 占用

字段 数据类型 字段大小 必填字段 索引 允许为空

教师姓名 文本 50

占用 文本 50

- 17 -

第四章 系统流程图设计与分析

4.1登陆系统流程图

N>=3

退

Y

设计说明:进入主界面后,等待操作用户输入用户名和密码,在输入之后按确定进入,

验证用户名和密码,实现流程:

(1) 检测数据库中有无管理员帐号,如果有,则等待用户输入用户名和密码,否则按

程序本身自动执行插入命令,新建一个管理员用户,并等待用户输入.

- 18 -

(2) 验证用户名和密码是否正确,错误次数不能超过三次,超过三次则退出系统登

陆界面

(3) 当验证通过后,检测该登陆用户的管理权限,并设置变量传值给主窗体.

4.2 主界面中课表生成部分流程图

4.2.1 班级管理流程图

班级管理

添加保存修改删除返回

输入数据

验证重复

执行保存

模块设计说明:班级的操作部分是排课程序正常执行的重要部分,班级的添加不允

许有同名的班级出现,而修改也不能做到修改班级名,班级名称将作为不可修改的数

据部分,而删除部分,在删除之前必须保证该班级的课表是否已经生成,如果是,则

需要注销课程表,这样做是让该班级生成的课表占用教师空间的部分全部返回,这样

不会使教师的空间被反复占用,而最终导致错误发生。

4.2.2 班级课程处理流程图

- 19 -

班级课程处理

Y

课程是否生成提示并返回操作

N

添加保存修改删除

输入数据

验证重复

执行保存

模块设计说明:课程数据的添加,修改或删除都会影响到已生成课程表的返回,因为

在操作之前必要保证课程表属于未生成状态,如果当前为生成状态,则需要注销课程

表,这样才可以继续操作。

注:已生成课程表的返回:由于课程表排列好后,对应的课程后教师的排课占用表都

会有标记标明,如果这时修改了某此数据后,这教师的占用表并没有恢复到未生成状

态,这样就会导致不可预知的错误发生。

4.2.3 课表生成部分流程图

- 20 -

注解:

生成课表

A:每周课程数是否大于课程表的表格数

B:退回以前曾生成的课程表,此操作达

到将各位老师和该班级的排课占用情况

返回到未生成状态

显示课程

a

Y

N

b

退出

进入排课循环

排课完成并退出

排课循环

C

D

F

允许几节连排

次数取决于课程总数

C: 当前所排课程与当前班级的可

排课位置生成

D:获取随机生成的位置对应值,并

利用获取的值来计算课程表上对应

的横向与纵向坐标

F:根据用户的设置来确定允许排课

的课节数(例如:允许同一课程两

节课连排,则可以进行某个操作步

骤),根据当前需求,目前只开发

2节课连排与单节课排列。

G:在当前课程当前节排列成功后,

将会为该课程的教师的课程占用情

况与班级的占用作修改,做个标记

2节课连排

单节课排列

G

(2)列出对应课程教师的未被占用的排课列表和班级的课程占用表。

(3)穷举法列出以上两者之间的共通点,可用点。

(4)最后通过循环随机选择来实现课程的定位与排列。

(5)课程定位中不允许每天有相同的课程重复,并按规定来执行按什么样的格式来

排列,例如两节连排,也就是说可以把该课程在同一天排在一起,可以实现两节

课连上,这是大学课表里最常用的一个功能。

4.2.4 报表输出功能

EXECL

a

a

b

退

Y

N

a

bMDI

a

模块设计说明:此处采用了两种输出方式,第一种是普通的报表方式输出,可以实现

一般的打印预览等功能,第二种则是采用模板功能,用户可以自由修改模板,前提是

不可以更改数据位,其它的部分无论如何修改都没有关系。

- 22 -

4.3其它模块设计说明(用户管理模块,时间段模块,课程管理模块)

此处几个模块是经过资源优化将其与班级管理整合在一起的,此处工作流程基本

上与班级管理的流程相同。

4.4 调课功能实现及设计说明

由系统自动排课生成的并不一定能完全达到用户所想需要的效果,虽然在程序中

解决了系统冲突的出现,但是因为某些原因而出现临时的原因都需要进行调课,因此排

课系统中除了自动生成课表还必须有很灵活的调课功能才能让系统更完整,也便如使

.

调课

获取课程资料

获取教师对应资源

查询可调点

使可调位置变色

此处调课是事先获取系统有用资源空间,并在图表中进行背景色变色显示,提示用户该

门课程可以调动至变色显示的地方,主要是通过班级的课程占用与该教师的排课占用

情况进行对比,寻找有利和适用的位置,并等待用户进行调课操作.

执行调课:在进行以上操作后,计算机自动等待用户选择系统列出的调课点,在选择某

调课点后,系统自动清除数据库的中该课程的教师与当前班级该处资源占用情况,并同

时清除图表中的资料,将其重新放置到新位置,并修改新地点的资源占用情况,最后将

图表的可调位置背景色还原回正常状态.

- 23 -

第五章 设计进程

313日:获得毕业设计课题与论文规范

314日:构思后台数据库的内容,前台操作界面与实现大体的功能

316日:创建数据库后台,建立连接数据库的模块,创建主界面窗体,并

初步使用数据处理

317日:构思资源优化,对排课必须的功能进行归纳并构思采用排课方式

321日:构思采用教师与班级之间的资源占用表来进行穷举法排列,并通

过随机生成取得理想排课位置。

324日:完成生成课表部分代码,并进行反复测试,寻找系统错误部分,

并加以修改。

326日:开始加入班级课程添加,删除,修改等代码,并加以调试

328日:为防止系统崩溃,加入系统还原代码,注销课程表代码

329日:开始编写班级管理与用户管理等部分的代码,并加以整合

41日: 设计报表的输出功能,并采用了EXECL电子表格作为模板的输出

功能

43日: 加入防错代码,并进行大范围测试,减少程序出错机率

45日: 后期进行美化效果处理

48日: 引用论文规范的模板,着手论文的完成

414日:完成论文

- 24 -

第六章 结论和总结

确定了本系统的实用价值后,选用了目前最常用也最简便的sqlserver数据

库做为后台,鉴于ADO在很多程序里的广泛应用,使用ADO来连接数据库将是最

为适用的,并且在定义了ADO的连接模块后,对于将来的升级也会很方便,只要

修改一下连接源,就可以轻松的更换后台,sqlserver适用于单机版,当想转换

为网络版的SQL数据库时,就很容易做到

为了减少系统的数据资源,选用了目前最方便的将数据交给后台处理的方法,

即使用SQL的语句将数据库交给SQLSERVER后台,由后台来处理,这样系统

的执行会加快,也使用程序本身变得简单

1. 本程序使用了新型控件flexcell,此控件的双色表格与单元格的特殊赋值功能不

但能带给用户最好的视觉感受,同时在操作时大大减少了手动输入操作,因此

也为非计算机人员的可操作性带来很大的方便。

2. 采用独特的资料占用排除方法来生成所需要的课程表,使课程表生成速度加快。

3. 支持很方便的课程,用户等模块的添加,修改,删除等过程。

4. 使用定位查询,只要选择对应的班级,就可以找到对应的内容,班级就是一个

整体,通过班级来寻找所想要的数据会实现的更为简便。

5. 特殊的课程表输出功能,大大减少了课程表输出时的格式局限性,只要修改

EXECL中的模板,就可以打印出你想要的效果来。

程序的不足:

(1)对排课来说,各个学校都有着不太相同的排列方法,有每天的课节数,允

- 25 -

许课程连排数,时间段等等,而这些方法转换为计算机语言时,往往会因为这样

那样的限制而造成死循环或者程序速度缓慢,因为排课系统要适应大部分学校使

用,所以这里提供的一些要求是不能够满足大部分人的。

(2)由于排课实现功能复杂,程序中也许有不可预知的错误未测试出来,所以

这也需要长时间的进行测试才能发现并修复问题。

(3)受开发条件和开发时间的限制,本系统只利用了本地数据库Sqlserver

它同应用程序处于同一系统中,能存储的数据量也有一定限制,并没有发挥出

JSP其数据库方面的优势。

在本次毕业设计中,我从指导老师李志强老师身上学到了很多东西。李老师

认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无

论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我

以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。

另外,在系统开发过程中田立鹏老师也给于我很大的帮助,帮助解决了不少

的难点,特别是在SQL查询方面给我解决了大部分的难点,使得系统能及时开发

完成,还有同组的同学同样给与我不少帮助,这里一并表示感谢。

参考文献

[1] Jsp 使用指南

作者:Bob Reselman , Richard Peasley , Wayne Pruchniak.

出版社:电子工业出版社

- 26 -

[2] 中文版Microsoft Office 2000 自学通

作者:Ned Snell

出版社:机械工业出版社

[3] Jsp 中文版控件大全

作者:Microsoft

出版社;电子工业出版社

[4] 中文Sqlserver 2000 24学时教程

作者:Craig Eddy Timothy Buchanan

出版社:机械工业出版社

附录:

1. 连接数据库

Public cnn As New tion

Public kc1 As New set '

Public kc2 As New set '

Public kc3 As New set '

---以上代码用以定义数据源与记录集

Sub Main()

tkOpenSqlserverDB & "" ‘通过过程连接数据库

If = adStateOpen Then '检测表的状态,是否打开或关闭

End If

"select * from ³Ä¿º", cnn, adOpenStatic, adLockReadOnly, adCmdText

If Count = 0 Then

Set kc1 = e("insert into ³Ä¿º values('admin','admin','±¬¹´¶Ø½³Ñª')")

End If

-----以上代码用以检测表内是否有初始登陆帐号,如果没有,将执行添加用户语句

nknumber = 6

- 27 -

End Sub

Private Sub tkOpenSqlserverDB( _ ‘此处为连接数据库过程

tkFileName As String, _

Optional tkUserID As String, _

2. 登陆界面与代码

Private Declare Sub ReleaseCapture Lib "user32" () 'Ó§±ÓÏô¯API

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As

Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub Form_Load()

e = LoadPicture( & "")

lor = RGB(83, 82, 132)

lor = RGB(83, 82, 132)

End Sub

Private Sub Image1_Click()

On Error GoTo finish

Set kc1 = e("select * from ³Ä¿º where ÐÀ¸§Àö='" & & "' and ÀØ¿ë='"

& & "'")

If = True Then

If pnum < 2 Then

pnum = pnum + 1

MsgBox "ÐÀ¸§Àö¸´Àؿ벳˵!", vbInformation, "²³Ëµ²ËÇ÷£·" & pnum

= ""

= ""

us

Else

MsgBox "ÐÀ¸§Àö¸´Àؿ벳˵±¬¶÷Å÷²Ë,̳ʱ¸®¬Ñ´¯Êȱô", vbInformation, "ɮǻ"

End

End If

Else

If (2) = "±¬¹´¶Ø½³Ñª" Then

admin = True

End If

End Sub

3. 排课系统主界面

Dim Classprint As New OpenRs '´¨Ï岴С¹Ä¿¹¹¯

Dim xlApp As New ation

Dim sendsql As String

Private Sub gridcs() '´ÑgridȷͯĵºõÍͱóǹ¸¯

On Error GoTo finish

Case "ÓØÏ¸Ó¾ÓØÅÒ"

= 7 * nknumber + 1

= 7 * nknumber + 1

End Select

(1, 1, - 1, - 1).ClearText

(1, 1, - 1, - 1).ClearText

Set kc2 = e("select Ò¹ÐÀ from Ò¹ÐÀ where ºÉÇ¥ÍÒÀö='" & (hang, 5).Text

& "'")

For i = 1 To - 1

(1, i).Text = Mid((0), i, 1)

Next

(1, 1, - 1, - 1).Alignment = cellCenterCenter

Set kc2 = e("select Ò¹ÐÀ from ¼Ë±ÉÒ¹ÐÀ where ©­¹´='" & & "'")

For i = 1 To - 1

(1, i).Text = Mid((0), i, 1)

Next

Exit Sub

finish:

MsgBox ption

MsgBox ption

End Sub

Private Sub asPopup1_Click(Cancel As Boolean)

kctable = "³Ä¿º"

n = "ÐÀ¸§¶Ø½³"

1

End Sub

Private Sub asPopup10_Click(Cancel As Boolean)

If vyes = vbYes Then

Set kc2 = ecute("update Ò¹ÐÀ set

Ò¹ÐÀ='000000'")

Set kc2 = e("update ¼Ë±ÉÒ¹ÐÀ set

Ò¹ÐÀ='000000'")

End If

End Sub

Private Sub delbutton_Click()

On Error GoTo finish

If = "" Then

MsgBox "©­¹´Àö±Ã°¸¼ÆËª¼Ò£¬ÄëΡÑñ©­¹´", vbInformation, "ɮǻ"

End If

word_validate

If vde = False Then

MsgBox "Ï´ÏÎÆ¸±Æ¼Ë±Éª³£¬Ëª°¸¼Æ°Õ¬¶¬²É¬£¬Ä묢̸ÌÓÐͳÁ¼Ë±Éª³ÑÖºõÍͰլ¶£¡",

vbInformation, "ɮǻ"

Exit Sub

End If

If kcdel = False Then

MsgBox "³ªÄ©Æ»±÷°Õ¬¶°¸ª¸ÑÇͳ!", vbInformation, "«ÄǶÐÀ´Ñ̵"

Exit Sub

End If

If hang = 0 Then

Exit Sub

End If

Dim delok As String

If (hang, 1).Text = "" Then

Exit Sub

End If

delok = MsgBox("Å«ÅÌÆ»±÷¼Ë±ÉÀö˪" & (hang, 1).Text & "³ÁÇ÷»Ù¿ð£¼£¼",

vbQuestion + vbOKCancel, "¬¢Ïâ:²È°Õ¬¶º«¸®º«Î§Æ¸¬Ç¾ÌÐë±Æ¹¨¬Ç¾ÌʱūÄå±÷")

If delok = vbOK Then

sql = "delete from ¼Ë±ÉÍÂÌ¢ where " & (0).Name & "='" & (hang, 1).Text

& "' and È·Çò©­¹´='" & & "'"

- 34 -

Set kc2 = e(sql)

MsgBox "Á¼ª±¹·Æ»±÷ʱ±Æ!", , "ɮǻ"

Call XPButton3_Click

End If

Exit Sub

finish:

MsgBox ption

End Sub

Private Sub editbutton_Click()

On Error GoTo finish

If = "" Then

MsgBox "©­¹´Àö±Ã°¸¼ÆËª¼Ò£¬ÄëΡÑñ©­¹´", vbInformation, "ɮǻ"

Exit Sub

End If

sql = "update ¼Ë±ÉÍÂÌ¢ set "

For j = 1 To - 2

sql = sql & (j - 1).Name & "='" & (hang, j).Text & "',"

Next

sql = sql & (j - 1).Name & "='" & (hang, j).Text & "' where " &

(0).Name & "='" & (hang, 1).Text & "' and È·Çò©­¹´='" &

& "'"

Set kc2 = e(sql) 'ÐÀkc2µ¹Í¿Ç÷»Ù¹¯,Òâη¼ÆÇ³ÌÓ¸¾¼µ¹Í¿

hang = hang + 1

Loop

MsgBox "¹·Ê±±ÆÍÚµÁ°Õ¬¶!", , "ɮǻ"

Call XPButton3_Click

End If

Exit Sub

finish:

MsgBox ption

End Sub

Function word_validate() 'ŨÌÚΰӤ£¬Ó¶ÏªÎ°Ó¤ÐÀ¸§ÇÄ«ñÁØÓ²ÍÍÇäÅë³Å°Õ¬¶

Set kc2 = e("select count(È·Çò©­¹´) from ¾ÕǪƸ±Æª³ where È·Çò©­¹´='" &

& "'")

If (0) = 0 Then

vde = True

Else

vde = False

End If

End Function

Private Sub finddkd_Click()

On Error GoTo finish

If admin = False Then

If = "" Or (hang1, ne1).Text = "" Or hang1 = 0 Or ne1 = 0 Then

MsgBox "´Ñ̵ΡÑñ²³Ëµ!", vbInformation, "²³Ëµ"

Exit Sub

End If

Set kc1 = e("select Å˼˽ÌÇ¥,¾ººÖ¼Ë½×ÂÂ,¼Ë±É«Ó°¹ from ¼Ë±ÉÍÂÌ¢ where

¼Ë±ÉÀö='" & (hang1, ne1).Text & "' and È·Çò©­¹´='" & & "'")

Select Case (2)

Case "ÓØÏ¸Ó¾ÓØËå"

= 5 * nknumber + 1

= 5 * nknumber + 1

Case "ÓØÏ¸Ó¾ÓØ¾·"

= 6 * nknumber + 1

= 6 * nknumber + 1

For i = 1 To - 1 Step n

If (1, i).Text = "0" Then

If (1, i).Text = "0" Then

= + 1

Private Sub Form_Load()

On Error GoTo finish

isterInformation "CNwinndy", "W]vyY-nonvk-unty-Zbl_e-`hms^" 'ºõÍͬ¢°®

e = LoadPicture( & "")

serResizing = True

(4).Locked = True

'---------------------

grid2pz

grid3pz

ght(0) = 0

(0).Width = 0

(1).Width = 20

'-------------grid5¼Ë±Éª³

e = True

For i = 1 To 7

(i).Width = 80

If = True Then

MsgBox "̳ʱÁ¼Ä©Ó§±ÓÀ¼É²³Á¼ËÇ÷˪6ºÖ£¬Ï´²ÈÁ¸Í¯ÏªÇäÅë6µôǪ¹ä´Ë£¡", vbInformation,

"ɮǻ"

kctable = "ºÉΧǪ¹ä´Ë"

1

End If

Do While Not

= (7 * nknumber) + 1

For i = 1 To - 1

(i).Width = 20

Next

(1, 1, - 1, - 1).BackColor = RGB(90, 158, 214)

Exit Sub

finish:

MsgBox ption

End Sub

Private Sub grid3pz()

On Error GoTo finish

ly = True

(0).Width = 0

ght(0) = 0

= (7 * nknumber) + 1

For i = 1 To - 1

(i).Width = 20

Next

(1, 1, - 1, - 1).BackColor = RGB(90, 158, 214)

= + 1

For j = 1 To numberkc 'Ư´¨´¾Å¡¾Í

If Not (j - 1) Is Nothing Then '¼ÒÓ³³Á²¥½³

(i, j).Text = (j - 1)

Else

(i, j).Text = ""

End If

End If

Exit Sub

finish:

MsgBox ption

End Sub

Private Sub Grid1_RowColChange(ByVal Row As Long, ByVal Col As Long)

On Error GoTo finish

hang = Row

If (Row, 1).Text <> "" Then

ox(5).Clear

Set kc2 = e("SELECT DISTINCT ºÉÇ¥ÍÒÀö FROM ¼Ë±ÉÀö where ¼Ë±ÉÀö='" &

(Row, 1).Text & "'")

Do While Not

ox(5).AddItem (0)

xt

Loop

End If

Exit Sub

finish:

MsgBox ption

End Sub

Private Sub Grid5_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

If dkyesno = True And Button = 2 Then

If admin = False Then

MsgBox "«Ä¶Ø½³Ñª°¸¼ÆÓ²ÍͲȰլ¶", vbInformation, "ŨÌÚ²³Ëµ"

Exit Sub

End If

Dim Y As Integer

If (hang1, ne1).BackColor <> RGB(255, 255, 255) Then

MsgBox "¼Ë±É°¸¼ÆÏѳ¶Ó¾²È²¥"

Else

Dim kcstr As String

Dim str1, str2 As String

kcstr = (jehang, jene).Text

Select Case jene

Case 1

str1 = "ÍÄÃÖϸ"

Case 2

str1 = "ÍÄÃÖ´ø"

Case 3

str1 = "ÍÄÃÖÅ÷"

Case 4

str1 = "ÍÄÃÖÈÁ"

Case 5

str1 = "ÍÄÃÖËå"

Set kc3 = e("update Ò¹ÐÀ set Ò¹ÐÀ='" & str2 & "' where ºÉÇ¥ÍÒÀö='" &

(0) & "'")

Set kc3 = e("select Ò¹ÐÀ from ¼Ë±ÉÒ¹ÐÀ where ©­¹´='" & &

"'")

str2 = Mid((0), 1, Y - 1) & "0" & Mid((0), Y + 1)

Set kc3 = e("update ¼Ë±ÉÒ¹ÐÀ set Ò¹ÐÀ='" & str2 & "' where ©­¹´='" &

& "'")

Set kc3 = e("update ¾ÕǪƸ±Æª³ set " & str1 & "='' where È·Çò©­¹´='"

& & "' and Ǫ¹ä´Ë='" & (i, 0).Text & "'")

End If

str2 = Mid((0), 1, Y - 1) & "11" & Mid((0), Y + 2)

End If

Set kc3 = e("update Ò¹ÐÀ set Ò¹ÐÀ='" & str2 & "' where ºÉÇ¥ÍÒÀö='" &

(0) & "'")

Set kc3 = e("select Ò¹ÐÀ from ¼Ë±ÉÒ¹ÐÀ where ©­¹´='" & & "'")

str2 = Mid((0), 1, Y - 1) & "1" & Mid((0), Y + 1)

If n = 2 Then

str2 = Mid((0), 1, Y - 1) & "11" & Mid((0), Y + 2)

End If

Set kc3 = e("update ¼Ë±ÉÒ¹ÐÀ set Ò¹ÐÀ='" & str2 & "' where ©­¹´='" &

& "'")

Set kc3 = e("update ¾ÕǪƸ±Æª³ set " & str1 & "='" & kcstr & "' where

È·Çò©­¹´='" & & "' and Ǫ¹ä´Ë='" & (hang1, 0).Text & "'")

Set kc3 = e("update ¾ÕǪƸ±Æª³ set " & str1 & "='" & kcstr & "' where

È·Çò©­¹´='" & & "' and Ǫ¹ä´Ë='" & (hang1 + 1, 0).Text & "'")

(0, 0, - 1, - 1).BackColor = RGB(148, 167, 178)

End If

End Sub

Private Sub savebutton_Click()

On Error GoTo finish

If = "" Then

MsgBox "©­¹´Àö±Ã°¸¼ÆËª¼Ò£¬ÄëΡÑñ©­¹´", vbInformation, "ɮǻ"

End If

word_validate

If vde = False Then

MsgBox "Ï´ÏÎÆ¸±Æ¼Ë±Éª³£¬Ëª°¸¼Æ°Õ¬¶¬²É¬£¬Ä묢̸ÌÓÐͳÁ¼Ë±Éª³ÑÖºõÍͰլ¶£¡",

vbInformation, "ɮǻ"

Exit Sub

End If

If kcsave = False Then

MsgBox "³ªÄ©°¸ÑÇͳª£²æ£¡", vbInformation, "ɮǻ"

Exit Sub

End If

For i = 1 To - 1 '²¥½³ÓÔÀöÇ÷»Ù

- 47 -

If (i, 1).Text <> "" Then

Set kc1 = e("select ¼Ë±ÉÀö from ¼Ë±ÉÍÂÌ¢ where ¼Ë±ÉÀö='" & (i,

1).Text & "' and È·Çò©­¹´='" & XPCombo1.Text & "'")

If = False Then

MsgBox "³Ö" & i & "ÍͳÁ¼Ë±ÉÀöÑÖÇ÷»Ù¼â½ï±ôÌÓÓÔµ²£¬Äë¹²°°", vbInformation, "²³Ëµ"

(i, 1).SetFocus

Exit Sub

End If

End If

Next

For i = 1 To - 1

For n = 1 To - 1

Select Case n

Case 1, 2, 3, 4, 5, 7 '¹²°°Ç÷»ÙÇÄ«ñ˪¼Ò

If (i, 1).Text <> "" Then

If (i, n).Text = "" Then

MsgBox "³Ö" & i & "ÍͳÁ--[" & (0, n).Text & "]--¬Ó´Ë°¸ÑÇͳ˪¼Ò!",

vbInformation, "ɮǻ"

(i, n).SetFocus

Exit Sub

End If

If (i, 3).Text < "2" And (i, 6).Text = "1" Then

MsgBox "³Ö" & i & "ÍͳÁÀ¼ÓؼËÇ÷ËÚ«¨Ç³ÌÓ¾ººÖ¼Ë¾¬ÂÂ!", vbInformation,

"ɮǻ"

Exit Sub

End If

ElseIf i = 1 Then

MsgBox "ËÚÅË·ËÇ÷»Ù¼Æª£²æ", vbInformation, "¼Ë̳ʱ"

Exit Sub

End If

End Select

Next

If (i, 1).Text <> "" Then 'Ó²ÍͰåÅëÐï»ä

sql = "insert into ¼Ë±ÉÍÂÌ¢ values('"

sql = sql & (i, j).Text & "','"

Next

sql = sql & & "')"

Set kc1 = e(sql)

End If

Next

MsgBox "À¹¾îÓ²ÍÍʱªÌ!", vbInformation, "ʱ±Æ"

griddispose

kcsave = True

kcedit = False

kcdel = False

Exit Sub

On Error GoTo finish

If = "" Then

MsgBox "©­¹´Àö±Ã°¸¼ÆËª¼Ò£¬ÄëΡÑñ©­¹´", vbInformation, "ɮǻ"

End If

Call XPButton3_Click

e = True

'¹ÃÈãÀ¼ÓØÇ÷Á¼ÇÄ«ñ±¬±ô«´Ë§

kbreturn '«³¸ÔÏÑÄ©¹·Æ¸±Æ³Á¼Ëª³

Dim nnum As Integer

Set kc2 = e("select count(È·Çò©­¹´) from ¼Ë±ÉÍÂÌ¢ where È·Çò©­¹´='" &

& "'")

If (0) = 0 Then

MsgBox "À¸ÐÍ´¨Ïå¼Ë±É£¬ËÚ«¨Â¼ˣ¡", vbInformation, "¼Ë±É˲´¨Ïå"

e = False

Exit Sub

End If

Set kc2 = e("select sum(À¼ÓؼËÇ÷) from ¼Ë±ÉÍÂÌ¢ where È·Çò©­¹´='" &

& "'")

= (0)

= 1

= 0

nnum = 30

Set kc2 = e("select count(¼Ë±É«Ó°¹) from ¼Ë±ÉÍÂÌ¢ where È·Çò©­¹´='" &

& "' and ¼Ë±É«Ó°¹='ÓØÏ¸Ó¾ÓØ¾·'")

nnum = nnum + (0) * 2

Set kc2 = e("select count(¼Ë±É«Ó°¹) from ¼Ë±ÉÍÂÌ¢ where È·Çò©­¹´='" &

& "' and ¼Ë±É«Ó°¹='ÓØÏ¸Ó¾ÓØÅÒ'")

nnum = nnum + (0) * 4

e = False

Exit Sub

finish:

MsgBox ption

Exit For

End If

If j = nknumber Then

Select Case n

Case 2 '³ªÑÇͳ¾ººÖ¼Ë¾¬ÂÂǪÑÈÍÍ

If (Y, X).Text = "" And (Y + 1, X).Text = "" Then

Dim gsql1, gsql2 As String

gsql1 = ""

gsql2 = ""

For j1 = 1 To nknumber * 7

If j1 > - 1 Then

gsql1 = gsql1 & "0"

Else

Next

Exit Sub

finish:

Set kc2 = e("select Å˼˽ÌÇ¥ from ¼Ë±ÉÍÂÌ¢ where ¼Ë±ÉÀö='" & (j,

i).Text & "' and È·Çò©­¹´='" & & "'")

Set kc3 = e("select Ò¹ÐÀ from Ò¹ÐÀ where ºÉÇ¥ÍÒÀö='" & kc2.Fields(0) &

"'")

Dim str2 As String

str1 = Len((0))

str2 = Mid((0), 1, js - 1) & "0" & Mid((0), js + 1)

Set kc3 = e("update Ò¹ÐÀ set Ò¹ÐÀ='" & str2 & "' where ºÉÇ¥ÍÒÀö='" &

(0) & "'")

End If

Next

Next

Set kc2 = e("update ¼Ë±ÉÒ¹ÐÀ set

Ò¹ÐÀ='000000' where ©­¹´='" & &

"'")

Set kc2 = e("delete from ¾ÕǪƸ±Æª³ where È·Çò©­¹´='" & &

"'")

Exit Sub

finish:

MsgBox ption

End Sub

Private Sub XPButton4_Click()

If = "" Then

MsgBox "©­¹´Àö±Ã°¸¼ÆËª¼Ò£¬ÄëΡÑñ©­¹´", vbInformation, "ɮǻ"

End If

Set xlApp = CreateObject("ation")

'¹¤¸îEXCELÐ¥ÐÀ±ÉÍ´

e = False 'Ïø°ÔEXCELÐ¥ÐÀ±ÉÍ´²©¼Ö

'²´¼ª¶¤¬¶°»£¬strDestination˪ϸµôEXCELª¨ª³ËÁ¹ø

'Ư´¨¶¤¬¶ª³

Dim strSource, strDestination As String

strSource = & ""

'»ÊÇÄϸµôÁ£©æËÁ¹ø

strDestination = & ""

FileCopy strSource, strDestination

Set xlbook = (strDestination)

Set xlSheet = eets(1)

'º«Á£©æËÁ¹ø¼ºª²³ºÏ¸µô¾ÕǪËÁ¹ø

vyes = MsgBox("ÇÄ«ñ²´Ð¡³¹±ô³Á¼Ë±Éª³ÁÖÅÙ£¼", vbQuestion + vbYesNo, "ÇÄ«ñ²´Ð¡£¼")

If vyes = vbYes Then

If <= 0 Then

MsgBox "À¸ÐÍ©°¬©²´Ð¡¸¸", , "²³Ëµ"

Exit Sub

End If

ut 'ÐͲ´Ð¡¸¸»Ê¼ÆÇ¶ÐÀ

End If

MsgBox ption

End Sub

Private Sub XPButton8_Click()

On Error GoTo finish

If = "" Then

MsgBox "©­¹´Àö±Ã°¸¼ÆËª¼Ò£¬ÄëΡÑñ©­¹´", vbInformation, "ɮǻ"

End If

dkyesno = True

(1, 1, - 1, - 1).ClearText

sendsql = "select ÍÄÃÖϸ,ÍÄÃÖ´ø,ÍÄÃÖÅ÷,ÍÄÃÖÈÁ,ÍÄÃÖËå,ÍÄÃÖ¾·,ÍÄÃÖÅÒ,È·Çò©­¹´ from

¾ÕǪƸ±Æª³ where È·Çò©­¹´='" & & "' order by ¬Ñ´¯ª­·Â asc"

Dim i, n As Integer

Private Declare Function GetKeyState Lib "user32" _

(ByVal nVirtKey As Long) As Integer

.BackColor2 = RGB(239, 243, 255)

.GridColor = RGB(148, 190, 231)

.Column(0).Width = 0

.Column(1).Width = 100

.Column(2).Width = 100

.Column(3).Width = 100

End With

If kctable = "©­¹´Àö±Ã" Then

MsgBox "Ä뻡¾¼°¸ÏªÍÚµÁ·ÊÆ»±÷©­¹´Àö±Ã£¬«ñÑ´¼ÆÁظ®Ñ²±Æ¬ÇѲ½È«Î£¡", vbInformation,

"ÐÎİɮǻ"

End If

Call callmain

End Sub

Next

n = i

i = 1

Do While Not

= + 1

For j = 1 To n 'Ư´¨´¾Å¡¾Í

If (j - 1) = Null Then '¼ÒÓ³³Á²¥½³

(i, j).Text = ""

Else

(i, j).Text = (j - 1)

End If

Next

i = i + 1

xt '´¾Å¡Ì¿Ï¸¹Ä¿¹

Loop

(1).Locked = True

End Sub

Private Sub Form_Unload(Cancel As Integer)

Call XPButton5_Click

End Sub

If GetKeyState(VK_TAB) < 0 Then

nActiveRow =

nActiveCol =

If nActiveCol < - 1 Then

(nActiveRow, nActiveCol + 1, _

nActiveRow, nActiveCol + 1).Selected

If (1, 1).Text <> "" Then

Set kc1 = e("select * from " & kctable & " where " & (0).Name & "='"

& (1, 1).Text & "'")

If = True Then

Set kc1 = e("insert into " & kctable & " values('" & (1, 1).Text

& "','" & (1, 2).Text & "','" & (1, 3).Text & "')")

'--------------------

If kctable = "©­¹´Àö±Ã" Then

Dim num As Integer

num = 7 * nknumber

For i = 1 To num

sql = sql & "0"

Next

Set kc2 = e("insert into ¼Ë±ÉÒ¹ÐÀ values('" & (1, 1).Text & "','"

& sql & "')")

End If

Set kc2 = e("select ©­¹´Àö±Ã from ©­¹´Àö±Ã")

Do While Not

m (0)

xt

Loop

'---------------------

MsgBox "É®º¸±Æ¶¥£¡", vbInformation, ""

Call callmain

Else

MsgBox "µÀÀö±ÃÀö¹·²æÑÖ£¡", vbInformation, "°¸¼ÆÓÔÀö"

Exit Sub

End If

Else

MsgBox "´Ñ̵°¸¼ÆÏÑÇļҵñ", vbInformation, "²³ËµÉ®Ç»"

End If

End Sub

Private Sub XPButton3_Click()

- 64 -

If kcedit = False Then

MsgBox "³ªÄ©ÍÚµÁ°Õ¬¶°¸ª¸ÑÇͳ!", vbInformation, "«ÄǶÐÀ´Ñ̵"

Exit Sub

End If

For i = 1 To - 1

Set kc1 = e("update " & kctable & " set " & (1).Name

& "='" & (i, 2).Text & "'," & (2).Name & "='" & (i, 3).Text

& "' where " & (0).Name & "='" & (i, 1).Text & "'")

Next

MsgBox "ÍÚµÁ³ÁÇ÷»Ù¹·»­Ê±±Æ", vbInformation, "ʱ±Æ°Õ¬¶"

Call callmain

End Sub

Private Sub XPButton4_Click()

If kcdel = False Then

MsgBox "³ªÄ©Æ»±÷°Õ¬¶°¸ª¸ÑÇͳ!", vbInformation, "«ÄǶÐÀ´Ñ̵"

Exit Sub

End If

If hang = 0 Then

Exit Sub

End If

If (hang, 1).Text = "" Then

Exit Sub

End If

If kctable = "©­¹´¶Ø½³" Then

Set kc1 = e("select count(È·Çò©­¹´) from ¾ÕǪƸ±Æª³ where " &

(0).Name & "='" & (hang, 1).Text & "'")

If (0) = 0 Then

MsgBox "µÀ©­¹´ÅÑŸҹÐÀ¾ÈºÉÇ¥³Á¼ˬÇѲ£¬Ä묢̸µÀ©­¹´³Á¼Ë±Éª³·µÑÖ°Õ¬¶",

vbInformation, "ɮǻ"

End If

End If

Set kc1 = e("delete from " & kctable & " where " & (0).Name & "='"

& (hang, 1).Text & "'")

MsgBox "Á¼ª±¹·Æ»±÷,ÄëȢͿÇ÷»Ù!", vbInformation, "Æ»±÷±Æ¶¥"

- 65 -

Call callmain

End Sub

Private Sub XPButton5_Click()

Unload Me

'State = 0

End Sub