课程设计论文:基于delphi7的教务管理系统的设计与实现.doc_第1页
课程设计论文:基于delphi7的教务管理系统的设计与实现.doc_第2页
课程设计论文:基于delphi7的教务管理系统的设计与实现.doc_第3页
课程设计论文:基于delphi7的教务管理系统的设计与实现.doc_第4页
课程设计论文:基于delphi7的教务管理系统的设计与实现.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1 课课 程程 设设 计计 论论 文文 基于基于 Delphi7Delphi7 的教务管理系统的设计与实现的教务管理系统的设计与实现 2 基于基于 Delphi7Delphi7 的教务管理系统的设计与实现的教务管理系统的设计与实现 摘摘 要要:随着计算机技术的飞速发展和高等教育体制改革的不断深入,传统教育管理 方法、手段以及工作效率已不能适应新的发展需要,无法很好地完成教学管理工作。提高 教务管理水平的主要途径是更新管理者的思想,增强对管理活动的科学认识。基于 Delphi 7 与数据库技术建立一个高校教务管理系统该系统为学生和教师提供了查询、修改、存储、 增加记录、选课等功能,功能比较落齐全,基本上能满足学生和老师的要求。 目 录 摘摘 要要.2 前言 4 1 需求分析 4 1.1 功能需求分析4 1.2 性能需求分析5 1.3 数据库需求分析数据流图6 1.4 数据库需求分析数据流图.6 2 概要结构设计.12 2.1 系统功能结构设计.12 2.2 数据库概念结构设计14 3 逻辑结构设计18 4 详细设计及功能实现 23 4.1 用户登录模块设计与实现.23 5 总结41 参考文献 .41 3 前言 教务管理工作是高等学校教育工作的一项重要内容,是整个学校管理的核 心和基础。教务管理工作是指学校管理人员按照一定教育方针,运用先进的管 理手段,组织 、协调 、指挥并指导各方面人员的活动,以便高效率、高质量 地完成各项教学任务,完成国家所制定的教育目标。教务管理工作是学校教学 工作的中枢,是保证高校教学机制正常运转的枢纽,它是一项目的性、计划性、 适用性、创造性和科学性很强的工作。教务管理工作关系到高校教学秩序的稳 定和教学质量的提高,关系到高校的发展和人才的培养,教务管理高校中占有 相当重要的地位。 随着计算机技术的飞速发展和高等教育体制改革的不断深入,传统教育管 理方法、手段以及工作效率已不能适应新的发展需要,无法很好地完成教学管 理工作。提高教务管理水平的主要途径是更新管理者的思想,增强对管理活动 的科学认识。同时,运用先进的信息技术,开发高校综合教务管理信息系统, 是深化教务体制改革的有利措施。 Delphi7 是以组件化的编程方式、面向对象的程序设计、快速的 Pascal 编译 器、众多的组件和强大的数据库及网络应用开发支持,在竞争激励的开发工具 市场中越来越羸得程序设计者的青睐。Delphi7 是 Windows 系统下的可视化集 成开发工具,提供了强大的可视化组件功能,使程序员能够快速、高效地开发 出 Windows 系统下的应用程序,特别是在数据库和网络方面,Delphi7 与其它 开发工具相比更是胜出一筹。可视化主要是指开发图形用户界面时,不需编写 大量程序代码以描述界面的外观特性,而只需把所需的组件加入窗体相应位置 即可。 1 需求分析 1.1 功能需求分析 该教务管理系统具备两方面的功能:一方面是学生用户,学生通过输入学号 和密码进下该系统后,可以进行一些基础维护(学生信息维护、班级信息维护、 课程信息维护) 、教学管理(课表查询、学生选课) 、报表统计(打印成绩单) 、 4 用户维护;另一方面老师进入该系统则比学生多一个权限:成绩输入。 具体功能的详细描述如下 1.1.1 选择基础维护 班级信息维护菜单命令,即可进入 班级信息维护功 能窗体,在其中输入学校班级相关的信息,如果需要新增或修改班级信息,则 单击相应的按纽,输入新信息后单击保存就可以了。需要删除一条信息,则 只要选择这条信息再点击 删除。在搜索条件中输入相关的条件,单击 搜索 就可查找信息。 1.1.2 选择基础维护 学生信息维护菜单命令,即可进入 学生信息维护功 能窗体,在其中输入学号姓名信息。其中班级编号、政治面貌编号民族编 号籍贯编号和学籍编号列表框是通过和数据库中相应的代码表相联而生成 的。 1.1.3 选择基础维护 课程信息维护菜单命令,即可进入 课程信息维护功 能窗体。 1.1.4 选择教学管理 学生选课菜单命令,即可进入 学生选课功能窗体, 在学号框中输入学号。然后在课程信息 组合框中输入条件,查询并选择要选 的课程,单击选课,系统将会检查该门课程是否已选择,其中班级编号、 政治面貌编号民族编号籍贯编号和学籍编号列表框是通过和数据库中相 应的代码表相联而生成的。 1.1.5 选择教学管理课表查询 界面,学生输入学号等信息就可以看到自己 的课表。 1.1.6 选择教学管理成绩输入 界面此界面对学生是不可见的,按中止选课 按纽后,再选择一门课程,在下面的表格中将显示所有选了这门课的学生信息, 教师将学生的成绩输入或修改,按最终提交后成绩不能再修改。 1.1.7 选择报表统计 打印成绩单 输入学号等信息就可打印成绩。 H 选择用户维护 修改密码 用户可根据界面的提示信息修改自己的密码;选 择退出将退出整个系统。 1.2 性能需求分析 时间特性要求:在软件方面,响应时间,更新处理时间都要求比较快而且 5 迅速,这就需要采用存储过程技术,才能够满足用户的需要,在这个系统中用 到了两个存储过程,它们分别是成绩提交 、终止选课, 其中成绩提交用来存 储教师在修改成绩后提交的结果,终止选课用来存储结束选课。 安全性:设立口令号和密码验证方式,防止非法用户登录进行操作。也就 是用户只有学生和教师才能进入这个系统,此系统没有高及到管理员的操作, 用户凭学生的口令号 即 学号进入;教师的口令号和密码进入此系统。 1.3 数据库需求分析数据流图 在教务系统中功能模块主要牵涉到的信息包括:是学生信息(XSXX) 、课 程信息(KCXX)、选课信息(XKXX)、籍贯代码表(JGDMB)、政治面貌代码表 (ZZMMDMB)、成绩表(CJB)、课程表(KCB)、班级信息(BJXX)、民族代码表 (MZDMB)、登陆表(DLB)和学籍代码表(XJDMB)。 学生信息:包含学号(xh)、姓名(xm)、班级编号(bjbh)、性别(xb)、政治面貌编 号(zzmmbh)、身份证号(sfzh)、籍贯编号(jgbh)、学籍编号(xjbh)、民 族编号(mzbh)。 课程信息:包括课程编号(kcbh)、课程名称(kcmc)、本学期课程(bxqkc)、教师(js)、 开课系别(kkxb)、学分(xf)、课程简称(kcjc)、拼音码(pym)。 选课信息包括:编号(bh)、学号(xh)、课序号(kxh)。 籍贯代码表包括:籍贯编号(jgbh)、籍贯(jg)。 政治面貌代码表包括:政治面貌编号(zzmmbh)、政治面貌(zzmm)。 成绩表包括:编号(bh)、学号(xh)、课程编号(kcbh)、成绩(cj)、考试次数(kscs)、 是否补修(sfbx)、是否重考(sfck)、是否已确定成绩(sfyqdcj)。 课程表包括:编号(bh)、课序号(kxh)、课程编号(kcbh)、上课时间天(sksjt)、上 课时间节(sksjj)、上课地点(skdd)。 班级信息包括:班级编号(bjbh)、年级(nj)、班级名称(bjmc)、人数(rs)、班主任 (bzr)。 民族代码表包括:民族编号(mzbh)、民族(mz)。 登陆表包括:口令号(klh)、密码(mm)、权限(qx)。 学籍代码表包括:学籍编号(xjbh)、学籍(xj)。 根据以上划分的具体数据信息,得到数据流图如 1.1 所示: 用 户 登 录操 作 登陆信息 错误信息 返回信息 寻找信息 数 据 库 6 1.1 数据库需求分析数据流图 1.4.1 数据项:数据项: 表 1-1 FieldTypeNullKeyComment Xhchar(14)PRI学号 Xmchar(10)YES姓名 BjbhChar(14)班级编号 XbChar(2)YES性别 NjChar(4)YES年级 ZzmmbhChar(2)政治面貌编号 MzbhChar(2)民族编号 JgbhChar(2)籍贯编号 XjbhChar(2)学籍编号 SfzhChar(18)YES身份证号 BjbhChar(14)PRI班级编号 BjmcChar(30)YES班级名称 NjChar(4)YES年级 RsChar(5)YES人数 BzrChar10)YES班主任 KcbhChar(14)PRI课程编号 KcmcChar(30)YES课程名称 BxqkcChar(4)YES本学期课程 KkxbChar(5)YES开课系别 JsChar10)YES教师 XfInt(4)YES学分 KcjcChar(10)YES课程简称 PymChar(10)YES拼音码 7 BhInt(4)PRI编号 XhChar(14)YESPRI学号 KxhChar(14)YESPRI课序号 BhChar(2)PRI编号 kcbhChar(10)YESPRI课程编号 KxhChar(14)YESPRI课序号 sksjjChar(4)YES上课时间节 sksjtChar(4)YES上课时间天 skddChar(20)YES上课地点 BhChar(2)PRI编号 kcbhChar(10)YESPRI课程编号 XhChar(14)YESPRI学号 CjInt(4)YES成绩 kscsint(4)YES考试次数 sfbxChar(10)YES是否补修 sfckChar(10)YES是否重考 sfyqdcjChar(10)YES是否已确定成绩 mzbhChar(2)PRI民族编号 Mz Char(18)YES民族 zzmmbhChar(2)PRI政治面貌编号 zzmm Char(14)YES政治面貌 jgbhChar(2)PRI籍贯编号 JgChar(18)YES籍贯 xjbhChar(2)PRI学籍编号 xj Char(10)YES学籍 KlhChar(12)PRI口令号 Mm Char(10)YES密码 QxChar(50)YES权限 8 1.4.2 数据结构:数据结构: 学生信息=组成: 学号(xh)、姓名(xm)、班级编号(bjbh)、性别(xb)、政治面 貌编号(zzmmbh)、身份证号(sfzh)、籍贯编号(jgbh)、学籍编号(xjbh)、 民族编号(mzbh) 课程信息=组成: 课程编号(kcbh)、课程名称(kcmc)、本学期课程(bxqkc)、教 师(js)、开课系别(kkxb)、学分(xf)、课程简称(kcjc)、拼音码(pym) 选课信息=组成:编号(bh)、学号(xh)、课序号(kxh) 籍贯代码表=组成:籍贯编号(jgbh)、籍贯(jg) 政治面貌代码表=组成:政治面貌编号(zzmmbh)、政治面貌(zzmm) 成绩表包括=组成:编号(bh)、学号(xh)、课程编号(kcbh)、成绩(cj)、考试次数 (kscs)、是否补修(sfbx)、是否重考(sfck)、是否已确定成绩(sfyqdcj) 课程表包括=组成:编号(bh)、课序号(kxh)、课程编号(kcbh)、上课时间天 (sksjt)、上课时间节(sksjj)、上课地点(skdd) 班级信息=组成:班级编号(bjbh)、年级(nj)、班级名称(bjmc)、人数(rs)、班主 任(bzr) 民族代码表=组成:民族编号(mzbh)、民族(mz) 登陆表=组成:口令号(klh)、密码(mm)、权限(qx) 学籍代码表=组成:学籍编号(xjbh)、学籍(xj) 1.4.3 数据流:数据流: 对图对图 1.1 中所涉及的数据流描述如下:中所涉及的数据流描述如下: 1) 数据流名:学号信息 说明:根据这个口令号定位到用户管理数据库,以便进行身份验证。 数据流来源:登陆界面输入的口令号和密码。 数据流去向:其中用户口令信息将存在于整个操作过程中,防止非法登陆。 数据流组成:口令号(文本) ;密码(文本) 9 2)数据流名:寻找信息 说明:根据学生在班级信息维护的时候所填写的信息。 数据流来源:班级信息维护界面学生输入包含班级编号、班级名称、年级、 人数、班主任。 数据流去向:班级编号将存在整个操作,其它的存入数据库。 数据流组成:班级编号(文本) ;班级名称(文本) ;年级(文本) ;人数 (文本) ;班主任(文本) ; 3)数据流名:寻找信息 说明:根据学生在学生信息维护的时候所填写的信息。 数据流来源:学生信息维护界面学生输入包含学号、姓名、班级编号、性 别、政治面貌编号、身份证号码、籍贯编号、学籍编号、民族编号。 数据流去向:学号将存在整个操作,其它的存入数据库。 数据流组成:学号(文本) 、姓名(文本) 、班级编号(文本) 、性别(文本) 、政治面貌编号(文本) 、身份证号码(文本) 、籍贯编号(文本) 、 学籍编号(文本) 、民族编号(文本) 。 4)数据流名:寻找信息 说明:根据课程在班级维护的时候所填写的信息。 数据流来源:课程信息维护界面学生输入包含课程编号、课程名称、本学 期课程、教师、开课系别、学分、课程简称、拼音码。 数据流去向:课程编号将存在整个操作,其它的存入数据库。 数据流组成:课程编号(文本) 、课程名称(文本) 、本学期课程(文本) 、 教师(文本) 、开课系别(文本) 、学分(整型) 、课程简称(文本) 、拼音 码(文本) 。 5)数据流名:返回信息 说明:根据课程在学生维护的时候所填写的信息存入数据库后。 数据流来源:由课程信息维护界面学生输入的包含课程编号、课程名称、 本学期课程、教师、开课系别、学分、课程简称、拼音码存入数据库后。 数据流去向:课程信息维护界面。 数据流组成:课程编号(文本) 、课程名称(文本) 、本学期课程(文本) 、 教师(文本) 、开课系别(文本) 、学分(整型) 、课程简称(文本) 、拼音 10 码 (文本) 。 6)数据流名:返回信息 说明:根据学生在学生信息维护的时候所填写的信息存入了数据库之后。 数据流来源:由学生信息维护界面学生输入的包含学号、姓名、班级编号、 性别、政治面貌编号、身份证号码、籍贯编号、学籍编号、民族编 号存入数据库的。 数据流去向:学生信息维护界面。 数据流组成:学号(文本) 、姓名(文本) 、班级编号(文本) 、性别(文本) 、政治面貌编号(文本) 、身份证号码(文本) 、籍贯编号(文本) 、 学籍编号(文本) 、民族编号(文本) 。 7)数据流名:返回信息 说明:根据学生在班级维护的时候所填写的信息存入数据库后。 数据流来源:由班级信息维护界面学生输入的包含班级编号、班级名称、 年级、人数、班主任存入数据库的。 数据流去向:班级信息维护界面。 数据流组成:班级编号(文本) ;班级名称(文本) ;年级(文本) ;人数 (文本) ;班主任(文本) ; 1.4.4 数据存储数据存储: sf成绩提交=输入数据流:成绩, 数据流去向:成绩输入 sf终止选课=输入数据流:选择一门课程,数据流去向:数据库 1.4.5 数据处理过程数据处理过程: 对图对图 1.1 中所涉及的处理过程描述如下:中所涉及的处理过程描述如下: 1)处理过程名:登陆 输入数据流:口令号、密码 输出数据流:不符合输入条件的错误信息 处理过程逻辑:用 IF 条件进行判断。 2)处理过程名:班级信息维护 输入数据流:班级编号、班级名称、年级、人数、班主任。 输出数据流:班级编号、班级名称、年级、人数、班主任,其中班级编号 11 将存在整个操作。 处理过程号:民族编号,其中学号将存在整个操作。 3)处理过程名:班级信息维护 输入数据流:课程编号、课程名称、本学期课程、教师、开课系别、学分、 4)处理过程名:学生信息维护 输入数据流:学号、姓名、班级编号、性别、政治面貌编号、身份证号码、 籍贯编号、学籍编号、民族编号。 输出数据流:学号、姓名、班级编号、性别、政治面貌编号、身份证号码、 籍贯编号、学籍编课程简称、拼音码。 输出数据流:课程编号、课程名称、本学期课程、教师、开课系别、学分、 课程简称、拼音码。其中课程编号将存在整个操作。 5)处理过程名:学生选课 输入数据流:学号、姓名、班级、课程拼音、课程编号、课程名称、课序 号 输出数据流:学号、课序号、课程编号、课程名称、拼音码、开课系别、 教师、其中课程编号将存在整个操作。 6)处理过程名:课表查询 输入数据流:学号、姓名、班级 输出数据流:学号、课序号、班级名称、课程名称、上课时间节、上课时 间天、上课地点、其中课程编号将存在整个操作。 7)处理过程名:成绩输入 输入数据流:课程编号、课程名称、拼音码 输出数据流:编号、学号、 、课程名称、成绩 、其中编号和学号将存在整 个操作。 12 2 概要结构设计 2.1 系统功能结构设计 2.1.1 模块的功能设计模块的功能设计 根据需求分析阶段得到的功能需求,学生和教师用户通过输入口令号(学号) 和密码进下该系统后,可以进行一些基础维护(学生信息维护、班级信息维护、 课程信息维护) 、教学管理(课表查询、学生选课、成绩输入) 、报表统计(打 印成绩单) 、用户维护(修改密码、退出) ; 模块功能大概可以分为如下 4 个方面:这几个模块基础维护、教学管理、 报表统计、用户维护。其中基础维护还要包括学生信息维护、班级信息维护、 课程信息维护。教学管理包括课表查询、学生选课、成绩输入。报表统计包括 打印成绩单。综上所述,得到客户端功能模块图如下 2.1 所示。 学生登陆 基础维护 教学管理 报表统计 用户维护 班级信息维护 学生信息维护 课程信息维护 课表查询 学生选课 打印成绩单 图 2.1 客户模块系统功能模块图 修改密码 退出 13 2.2 数据库概念结构设计 根据需求分析阶段得到的数据字典以及数据流图,由以上分析可以得到系 统中出现的实体有:学生信息实体、课程信息实体、班级信息实体等等。 可 以画出对应的 E-R 图如下: 用户信息实体的 E-R 图如图 2.4 所示 登陆表 口令号密码 图 2.3 登陆表实体 E-R 图 老师登陆 基础维护 教学管理 报表统计 用户维护 班级信息维护 学生信息维护 课程信息维护 课表查询 学生选课 成绩输入 打印成绩单 图 2.2 客户模块系统功能模块图 学籍编 号 民族编 号 修改密码 退出 14 学生信息 学号 性别 图 2.4 学生信息实体 E-R 图 姓名 班级编号 政治面 貌编号 籍贯编 号 身份证 号码 人数 班级信息 班级名称 学号 图 2.5 班级信息实体 E-R 图 班主任 年级 班级编 号 课程信息 课程编号 课程名称 图 2.6 课程信息实体 E-R 图 教师 本学期课程 开课 系别 学分 课程简 称 拼音 码 课程 编号 考试次 数 是否补 修 15 图 2.7 成绩表实体 E-R 图 图 2.8 课程表实体 E-R 图 人数 成绩表 学号 成绩 编号 是否重 考 是否已确定 成绩 上课地 点 课程表 课序号 上课时 间节 编号 课程 编号 上课时间 天 选课表 编号学号 图 2.9 选课表实体 E-R 图 课序号 16 学籍代码表 学籍编号学籍 图 2.10 学籍代码表实体 E-R 图 籍贯代码表 籍贯编号籍贯 图 2.11 籍贯代码表实体 E-R 图 政治面貌代码表 政治面貌编号 政治面貌 图 2.12 政治面貌代码表实体 E-R 图 民族代码表 民族编号民族 图 2.13 民族代码表实体 E-R 图 17 对以上得到的各分 E-R 进行合并,得到总 E-R 图 2.14 如下: 3 逻辑结构设计 根据上面概念结构设计阶段得到的 E-R 图,下一步应该将它转化为关系模 型。可以得到对应的关系模式为: 学生信息(学号、姓名、班级编号、性别、政治面貌编号、身份证号码、籍贯 编号、学籍编号、民族编号) 课程信息(课程编号、课程名称、本学期课程、教师、开课系别、学分、课程 简称、拼音码) 选课信息(编号、学号、课序号) 籍贯代码表(籍贯编号、籍贯名称) 政治面貌代码表(政治面貌编号、政治面貌名称) 成绩表(编号、学号、课程编号、成绩、考试次数、是否补修、是否重考、是 否 已确定成绩) 课程表(编号、课序号、课程编号、上课时间天、上课时间节、上课地点) 班级信息(班级编号、年级、班级名称、人数、班主任) 籍贯代码 表 课程表 成绩表选课表 学籍代码 表 政治面貌 代码表 学生信息 民族代码 表 课程信息 班级信息 18 民族代码表(民族编号、民族) 登陆表(口令号、密码、权限) 学籍代码表(学籍编号、学籍) 采用的 Microsoft SQL Server 2000 数据库,根据得到的关系建立起对应 的二维表。首先建立一个学生信息量。该表记录每个学生的具体信息。表的 结构如表 3.1 所示: 表 3.1 学生信息详细列表 FieldTypeNullKeyComment xhchar(14)PRI学号 xmchar(10)YES姓名 bjbhChar(14)班级编号 xbChar(2)YES性别 njChar(4)YES年级 zzmmbhChar(2)政治面貌编号 mzbhChar(2)民族编号 jgbhChar(2)籍贯编号 xjbhChar(2)学籍编号 sfzhChar(18)YES身份证号 建立一个班级信息。该表记录各个班级的详细信息。如表 3-2 所示。 FieldTypeNullKeyComment bjbhChar(14)PRI班级编号 bjmcChar(30)YES班级名称 njChar(4)YES年级 rsChar(5)YES人数 bzrChar10)YES班主任 19 建立一个课程信息。该表记录每门课程的详细信息。如表 3-3 所示。 FieldTypeNullKeyComment kcbhChar(14)PRI课程编号 kcmcChar(30)YES课程名称 bxqkcChar(4)YES本学期课程 kkxbChar(5)YES开课系别 jsChar10)YES教师 xfInt(4)YES学分 kcjcChar(10)YES课程简称 pymChar(10)YES拼音码 建立一个选课表。该表记录了哪个学生选修了哪门课程。如表 3-4 所示。 FieldTypeNullKeyComment bhInt(4)PRI编号 xhChar(14)YESPRI学号 kxhChar(14)YESPRI课序号 建立一个课程表。该表记录了哪个学生选修了哪门课程。如表 3-5 所示。 FieldTypeNullKeyComment bhChar(2)PRI编号 kcbhChar(10)YESPRI课程编号 kxhChar(14)YESPRI课序号 sksjjChar(4)YES上课时间节 sksjtChar(4)YES上课时间天 skddChar(20)YES上课地点 建立一个成绩表。该表记录了哪个学生选修了哪门课程。如表 3-6 所示。 FieldTypeNullKeyComment 20 bhChar(2)PRI编号 kcbhChar(10)YESPRI课程编号 xhChar(14)YESPRI学号 cjInt(4)YES成绩 kscsint(4)YES考试次数 sfbxChar(10)YES是否补修 sfckChar(10)YES是否重考 sfyqdcjChar(10)YES是否已确定成绩 建立一个民族代码表。该表记录了哪个学生选修了哪门课程。如表 3-7 所 示。 FieldTypeNullKeyComment mzbhChar(2)PRI民族编号 mz Char(18)YES民族 建立一个政治面貌代码表。该表记录了哪个学生选修了哪门课程。如表 3-8 所示。 FieldTypeNullKeyComment zzmmbhChar(2)PRI政治面貌编号 zzmmChar(14)YES政治面貌 建立一个籍贯代码表。该表记录了哪个学生选修了哪门课程。如表 3-9 所 示。 FieldTypeNullKeyComment jgbhChar(2)PRI籍贯编号 jgChar(18)YES籍贯 建立一个学籍代码表。该表记录了哪个学生选修了哪门课程。如表 3-10 所 示。 21 FieldTypeNullKeyComment xjbhChar(2)PRI学籍编号 xj Char(10)YES学籍 建立一个登陆表。该表记录了哪个学生选修了哪门课程。如表 3-11 所示。 FieldTypeNullKeyComment klhChar(12)PRI口令号 mm Char(10)YES密码 qxChar(50)YES权限 根据系统需求,应该基于用户表定义一个视图,其定义用 SQL 语句描述如 下: CREATE VIEW dbo.VIEW1 AS SELECT TOP 100 PERCENT dbo.XSXX.xh AS 学号, dbo.XSXX.xm AS 姓名, dbo.KCB.kxh AS 课弃号, dbo.KCB.sksjt, dbo.KCB.sksjj, 单位 dbo.KCB.skdd, dbo.BJXX.bjmc, dbo.KCXX.kcmc, dbo.CJB.cj, dbo.KCXX.kcbh, dbo.BJXX.bjbh FROM dbo.XSXX INNER JOIN dbo.XKB ON dbo.XSXX.xh = dbo.XKB.xh INNER JOIN dbo.KCB ON dbo.XKB.kxh = dbo.KCB.kxh INNER JOIN dbo.BJXX ON dbo.XSXX.bjbh = dbo.BJXX.bjbh INNER JOIN dbo.CJB ON dbo.XSXX.xh = dbo.CJB.xh AND dbo.XSXX.xh = dbo.CJB.xh INNER JOIN dbo.KCXX ON dbo.CJB.kcbh = dbo.KCXX.kcbh AND dbo.CJB.kcbh = dbo.KCXX.kcbh ORDER BY dbo.XSXX.xh DESC, dbo.KCXX.kcbh DESC, dbo.BJXX.bjbh DESC 22 根据系统需求,可以定义两个存储过程,其定义语句用 SQL 语句描述如下: 成绩提交存储过程: CREATE proc sf_CJTJ courseid int as begin tran update CJB set sfyqdcj=Ywhere kcbh=courseid and cj0 commit GO 终止选课存储过程: CREATE proc sf_ZZXK as begin tran insert into CJB(xh,kcbh,cj,kscs,sfbx,sfck,sfyqdcj) select distinct a.xh ,b.kcbh,0,1,N,N,Nfrom XKB as a,KCB as b where a.kxh=b.kxh and rtrim(a.xh)+rtrim(b.kcbh) not in ( select rtrim(a.xh)+rtrim(b.kcbh)from CJB ) commit GO 23 4 详细设计及功能实现 4.1 用户登录模块设计与实现 设计思路:为了检验登录用户是否是一个合法用户,当用户输入用户名和 密码后,需要查询数据库以便验证该用户是否为非法用户。同时通过用户输入 的口令号就可知道用户是学生,还是教师,学生和教师的权限不同。 实现功能:用户可以从登陆界面进入到教务管理系统界面,然后进行一些 操作。 图 4.1 为系统运行时的截图: 该模块的核心代码如下: 判断用户是否合法和用户权限。 procedure Tmain.Button1Click(Sender: TObject); begin if(edit1.Text=)or(edit2.Text=)then showmessage(用户名密码不能为空!) else begin DM_Login.ADOQuery1.Close; DM_Login.ADOQuery1.SQL.Clear; 图 4.1 用户登录模块的系统截图 24 DM_Login.ADOQuery1.SQL.Add(select * from DLB where klh=+edit1.Text+and mm=+edit2.Text+); DM_Login.ADOQuery1.Open; User_Number:=DM_Login.ADOQuery1.FieldByName(klh).AsString; User_Password:=DM_Login.ADOQuery1.FieldByName(mm).AsString; User_Rright:=DM_Login.ADOQuery1.FieldByName(qx).AsString; if(DM_Login.ADOQuery1.RecordCount=0)then begin showmessage(用户名或密码错误,请重新输入!); edit1.Text:=; edit2.Text:=; end else begin Main.Caption:=教务管理系统; Main.Width:=820; Main.Height:=660; label1.Visible:=false; label2.Visible:=false; button1.Visible:=false; button2.Visible:=false; edit1.Visible:=false; edit2.Visible:=false; if(trim(User_Rright)=学生)then Main.N8.Visible:=false; end; end; end; 25 由于上面的二个模块都是由一个父窗体继承而来,则它们的核心代码都一致。 该模块的核心代码: /-根据窗口中查询条件的设置来查询- procedure TParent.BitBtn1Click(Sender: TObject); var (*设置一个整数,其二进制的三位分别代表查询条件 1 到 3 当某一个查询条件可见,也就是要使用这个条件时,相应的位置为 1,否则置 0 图 4.2 班级信息维护模块的系统截图 图 4.3 学生信息维护模块的系统截图 图 4.4 课程信息维护模块的系统截图 26 例如第 1,2 个条件要使用而第 3 个不使用时,该整数二进制的值为 110,也就 是 6*) condition:integer; begin /初始化该参数,设为 7,二进制数为 111 condition:=7; /如果第 1 个条件不可用,则将该位置 0,方法是和整数 3(二进制 011)进行 与操作 if label3.Visible=false then condition:=(condition)and(3); /如果第 2 个条件不可用,则将该位置 0,方法是和整数 5(二进制 101)进行 与操作 if label4.Visible=false then condition:=(condition)and(5); /如果第 3 个条件不可用,则将该位置 0,方法是和整数 6(二进制 110)进行 与操作 if label5.Visible=false then condition:=(condition)and(6); if condition=7 then/三个查询条件都存在的情况 begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add(select * from +adotable1.TableName); adoquery1.SQL.Add( where(+label3.Caption+ like %+edit1.Text+%); adoquery1.SQL.Add(and(+label4.Caption+ like %+edit2.Text+%); adoquery1.SQL.Add(and(+label5.Caption+ like %+edit3.Text+%); adoquery1.Open; /将查询得到的数据通过 clone 命令复制到 adotable 中去 adotable1.Clone(adoquery1,ltUnspecified); end; if condition=6 then/只存在两个查询条件的情况 27 begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add(select * from +adotable1.TableName); adoquery1.SQL.Add( where(+label3.Caption+ like %+edit1.Text+%); adoquery1.SQL.Add(and(+label4.Caption+ like %+edit2.Text+%); adoquery1.Open; /将查询得到的数据通过 clone 命令复制到 adotable 中去 adotable1.Clone(adoquery1,ltUnspecified); end; if condition=4 then /只存在一个查询条件的情况 begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add(select * from +adotable1.TableName); adoquery1.SQL.Add( where(+label3.Caption+ like %+edit1.Text+%); adoquery1.Open; /将查询得到的数据通过 clone 命令复制到 adotable 中去 adotable1.Clone(adoquery1,ltUnspecified); end; end; 28 学生选课界面的核心代码: procedure TCourseElect.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in 09,#8,#13) then /该文本框中只能输入数字 begin key:=#0; exit; end; /回车输入,将在籍学生的信息显示在文本框中 if key=#13 then begin id:=trim(edit1.Text); /清除上一次的数据 edit2.Clear; edit3.Clear; adoquery2.Close; 图 4.5 学生选课模块的系统截图 29 adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add(select XSXX.xm,BJXX.bjmc,XSXX.xjbh from XSXX,BJXX); adoquery1.SQL.Add(where (XSXX.xh=+id+)and(XSXX.bjbh=BJXX.bjbh); adoquery1.Open; if trim(adoquery1.FieldByName(xjbh).AsString)=01then begin edit2.Text:=trim(adoquery1.fieldbyname(xm).AsString); edit3.Text:=trim(adoquery1.fieldbyname(bjmc).AsString); listcourse(id); /列出已选课程 /允许开始选课 bitbtn2.Enabled:=true; bitbtn3.Enabled:=true; /bitbtn4.Enabled:=true; end else begin /只有在籍学生才能选课 showmessage(该生非在籍学生,不能选课); bitbtn2.Enabled:=false; bitbtn3.Enabled:=false; id:=; end; end; end; /-显示学生已经选的课程- procedure TCourseElect.listcourse(id: string); begin /将符合选课条件的学生已经选过的课程列在表中 adoquery2.Close; 30 adoquery2.SQL.Clear; adoquery2.SQL.Add(select XSXX.xh,XKB.kxh,KCXX.kcmc,js,kkxb,KCB.sksjt,sksjj,skdd from KCB,XSXX,KCXX,XKB where XKB.kxh=KCB.kxh and XKB.xh=XSXX.xh and KCXX.kcbh=KCB.kcbh); adoquery2.Open; end; /-课程查询- procedure TCourseElect.BitBtn1Click(Sender: TObject); begin if(edit4.Text=)and(edit5.Text=)and(edit6.Text=)and(edit7.Text=)then showmessage(请输入查询条件!) else begin adoquery3.Close; adoquery3.SQL.Clear; adoquery3.SQL.Add(select KCB.kxh,KCXX.kcbh,kcmc,js,kkxb,pym,KCB.sksjt,sksjj,skdd from KCB,XSXX,KCXX,XKB); adoquery3.SQL.Add(where (XKB.kxh=KCB.kxh and XKB.xh=XSXX.xh and KCXX.kcbh=KCB.kcbh) and (KCXX.pym=+edit4.Text+or KCXX.kcmc=+edit5.Text+or KCXX.kcbh=+edit6.Text+or XKB.kxh=+edit7.Text+); Adoquery3.Open; if(Adoquery3.RecordCount=0)then showmessage(找不到这门课程!) else begin DBGrid2.DataSource.DataSet:=Adoquery3; DBGrid2.DataSource.DataSet.Active:=false; DBGrid2.DataSource.DataSet.Active:=true; 31 end; end; end; /-将选择的课程添加到学生的选课表中- procedure TCourseElect.BitBtn2Click(Sender: TObject); var num:string; day,section:integer; begin /未选择课程时,不允许提交 if adoquery3.RecordCount=0 then begin showmessage(请先选择一门课程); exit; end; num:=trim(dbgrid2.Fields0.Text);/保存课序号 /判断所选的课程是否已选和是否与其他已经选的课程有时间冲突 adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add(select sksjt,sksjj from KCB); adoquery1.SQL.Add(where kcbh=+dbgrid2.Fields1.Text+); adoquery1.Open; while not adoquery1.Eof do begin day:=adoquery1.fieldbyname(sksjt).AsInteger; section:=adoquery1.fieldbyname(sksjj).AsInteger; adoquery2.First; while not adoquery2.Eof do begin /判断课程是否已选 if (trim(adoquery2.fieldbyname(kxh).AsString)=num) then 32 begin showmessage(所选的课程:+trim(adoquery2.fieldbyname(kcmc).AsString) + 已在课表中,请选择其他课程); exit; end; /判断课程是否与已选课程有时间冲突 if (adoquery2.fieldbyname(sksjt).AsInteger=day)and(adoquery2.fieldbyname(sksjj).A sInteger=section) then begin showmessage(所选课程的上课时间与已选的 +trim(adoquery2.fieldbyname(kcmc).AsString)+ 冲突!); exit; end; adoquery2.Next; end; adoquery1.Next; end; /选课 adocommand1.CommandText:=insert into XKB(xh,kxh) values(+id+,+trim(dbgrid2.Fields0.Text)+); adocommand1.Execute; listcourse(id);/刷新数据表 end; /-删除已选课程- procedure TCourseElect.BitBtn3Click(Sender: TObject); be

温馨提示

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

评论

0/150

提交评论