




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
无忧无虑毕设网 ():毕业设计源码下载 毕业设计源码下载: 本文配套程序下载地址 : 无忧无虑毕设网 ()-大学生毕业设计站 ,免费毕业设计论文 ,无忧无虑毕设网 大学生毕业设计 ,出售各类毕业设计源码 ,论文 ,程序源码 ,网站源码 ,免费视频教程 ,我们将竭诚为您服务! 目录 第一章 总体设计 .1 1.1 总体功能设计 .1 1.1.1 系统的主要功能要求 .1 1.1.2 系统主要 模块 .1 1.1.3 系统安全性 .1 口令权限识别 .1 口令存取 .2 1.1.4 主要功能模块描述 .2 课程表信息 .2 总课表信息 .2 教师信息管理 .2 教师 课酬管理 .2 教师课酬发放 .2 教师课酬统计 .2 试卷档案登记 .2 第二章 系统详细设计分析 .3 2.1 需求分析 .3 2.1.1 目标系统功能说明 .3 2.1.2 用户需求分析 .3 2.1.3 系统运行环境简介 .4 硬件环境 .4 软件环境 .4 2.2 系统数据流图 .4 2.3 系统结构 .6 2.4 系统 E-R 图 .6 2.5 数据库设计 .7 2.5.1 主要数据表 .7 2.5.2 基本数据表的实现 .8 第三章 界面设计 . 12 3.1 登录界面 . 12 3.2 用户管理 . 14 计科教务管理系统 1 3.3 角色管理 . 29 第一章 总体设计 1.1 总体功能设计 1.1.1 系统的主要功能要求 根据用户口令判断用户的权限,具有基本的信息录入功能和添加、删除、修改功能,并能根据录入的信息生成课程表、总课表、课酬表、课酬统计表、试卷档案表,并能生成打印报表和 Excel 数据文档等功能。 1.1.2 系统主要 模块 主要功能模块有:用户管理,角色管理,数据字典,课程表信息,总课表信息,教师信息管理,教师课酬管理,教师课酬发放,教师课酬统计,试卷档案管理,课程名称设置,教师信息查询,课程信息查询,教师课酬查询 等。 1.1.3 系统安全性 计算机系统的安全治理是一个庞大、复杂、面广的系统工程。安全的核心是人,必须以人为核心进行安全管理。采用各种先进的安全技术,使系统免受非法攻击,排除没有访问权限的使用者窃取机密信息,确保系统安全可靠的运行。 针对 学校教务 管理系统的特点,为了加强其安全性,系统采用一定的保密措施。 口令权限识别 口令识别是一种低成本,易实现的用户识别技术。在计算机系统内广泛的使用,在口令识别机制中,计算机系统给每个用户分配一个用户标识和一个口令。用户标识唯一确定一个用户是公开的;口令用于证 实用户,是保密的,显示为 *号。 计科教务管理系统 2 口令存取 系统要识别每个用户的口令,就必须把每个用户的口令存放起来,形成口令表,通常以文件或数据库形式存放。如果以明文的形式存放,则很容易被熟悉系统的人偷取,为了提高基于口令的身份识别方案的坚强度,应该在口令方案中引入家密机制。 1.1.4 主要功能模块描述 课程表信息 该设计的功能主要是完成 课程表 的管理,它包括 课程表录入生成和 查询,及其维护和打印 及生成 Excel 文档 等功能。 总课表信息 该设计的功能主要是完成 学期总课表 的管理,它包括 学 期课表录入生成和 查询,及其维护和打印 及生成 Excel 文档 等功能。 该模块的录入量较多,在设计上更加方便用户在较短时间内完成大量的工作。 教师信息管理 该设计的功能主要是完成教师信息的管理和维护 。 教师课酬管理 该设计主要 是对教师课酬的及时登记入库 ,它包括对 教师课酬的登记、录入、查询、 报表打印 、及 Excel 生成 等功能 ,也为后续的教师课酬发放提供数据源 。 教师课酬发放 该设计的功能主要对 教师课酬的发放进行登记和管理 。 它根据教师课程登记表提供的数据加以录入部分信息,进行维 护和管理。提供了录入、查询、 报表打印 、及 Excel 生成 等功能 ,也为后续的教师课酬统计管理提供数据依据。为教师课酬发放提供数据。 教师课酬统计 该设计 完全依据课酬登记表的数据进而进行统计维护、管理和录入部分必须的外加数据。该设计也提供了录入、查询、 报表打印 、及 Excel 生成 等功能 。主要是为学期教师课酬统计工作提供方便。 试卷档案登记 计科教务管理系统 3 该设计 主要是实现对教学考试试卷电子档案的管理,该设计也提供了录入、查询、 报表打印 、及 Excel 生成 等功能 。为日常教学考试工作提供方便。 第二章 系统 详细设计分析 2.1需求分析 2.1.1 目标系统功能说明 本教务管理系统针对客户提供强大的软件功能,主要维护日常教务管理工作的基本信息等,能为教务教学提供更好的数据支持。软件的功能基本是通用的。提供系统用户管理、角色管理、数据字典管理、课程表管理、总课表管理、教师课酬管理统计、试卷档案管理和生成报表 Excel 数据文档,查询帮助等功能。 2.1.2 用户需求分析 本教务管理系统 是基于 Windows 操作系统基础上,通过对 既定数据条件 研究和分析并结合对 学校教务 管理进行分析提出来的。对原有 教务管理系统 的非图形界面操作 和 功能不强的数据库系统的不稳定性、不可扩充性、难以移植等 和 原有系统功能覆盖面不广等缺陷相应提出了一些要求。 1、 求系统目前流行的数据库系统 SQL Server 2000 作为底层数据库,使其具备很强的稳定性、扩充性、移植性等优良性能。 2、 求系统以功能强大的 Windows 系列操作系统作为操作系统平台,使其具备优良的可视化图形操作界面,大力提高系统的可操作性和交互性尽量减少操作员的负担,让他们更方便、更快捷、更简单的进行操作。 3、 求扩大系统功能覆盖面。它的功能要求能进行图书的编目建库、浏览数据、检索与统 计数据、以及打印数据等功能的综合管理。并能实现控制各用户系统权限,从而保证系统的安全性能。 计科教务管理系统 4 4、 求提高系统的可维护性。系统的数据要求能随时进行备份与恢复,基于家庭图书管理系统的局限性这里就不要求数据能与其他数据库进行交流(及共享数据)。 2.1.3 系统运行环境简介 基于以上对系统各种需求的分析和定义,建议系统采用一下配置,已确定系统的稳定、高效运行。 硬件环境 (1) 最低配置 C233 以上 CPU, 32MB 以上内存, 2.1GB 硬盘。 (2) 建议配置 C2.4 以上 CPU, 256MB 内存, 80GB 硬盘。 (3) 打印机一台 (4) UPS 不间断电源一台(避免数据因突然停电等意外情况下的丢失 软件环境 PC 工作站 Win98/2000/xp 操作系统 2.2 系统数据流图 0层数据流图: 用 户计 科 教 务 管 理系 统用 户 命 令用 户 操 作 信 息显 示 信 息显 示 面 板 图 2-1 1层数据流图: 计科教务管理系统 5 用 户 命 令 处 理4系 统 配 置5配 置 命 令用 户 信 息 权 限 记 录配 置 数 据口 令启 动 命 令启 动 / 停 止处 理2口 令 核 对3口 令口 令 有 效口 令 无 效系 统 操 作1启动/停止信息显示用 户 权 限 数 据显 示 信 息用 户 操 作 信 息用 户 命 令 图 2-2 2层数据流图: 操 作 权 限 处 理1 . 1权 限 处 理 信 息操 作 信 息操 作 数 据 记 录权 限 数 据操 作 处 理1 . 2操 作 数 据操 作 信 息显 示 信 息 处 理1 . 3处 理 信 息 显 示 信 息启 动 信 息停 止 信 息 图 2-3 3层数据流图: 用 户 信 息 处理1 . 2 . 1用 户 操 作 信 息用 户 记 录用 户 操 作 数 据角 色 信 息角 色 信 息 处理1 . 2 . 2角 色 记 录角 色 操 作 数 据处 理 信 息功 能 权 限 记 录权 限 操 作 数 据处 理 信 息 图 2-4 信 息 处 理1 . 2 . 3试 卷 档 案 / 课 程 表 / 总课 表 / 教 师 信 息 / 课 程名 操 作 信 息数 据 库 记 录操 作 数 据处 理 信 息 计科教务管理系统 6 图 2-5 课 酬 登 记 信息 处 理1 . 2 . 4课 酬 操 作 信 息课 酬 登 记 记 录课 酬 登 记 操 作 数 据课 酬 登 记 信 息课 酬 发 放 信息 处 理1 . 2 . 5课 酬 信 息 记 录课 酬 发 放 操 作 数 据处 理 信 息课 酬 统 计 记 录课 酬 统 计 操 作 数 据课 酬 统 计信 息 处 理1 . 2 . 6课 酬 发 放 信 息处 理 信 息 处 理 信 息 图 2-6 查 询 信 息 处 理1 . 2 . 7查 询 操 作 信 息 处 理 信 息查 询 信 息 记 录查 询 操 作 数 据 图 2-7 2.3系统结构 计科教务 管理系统结构图 计 科 教 务 管 理 系 统系 统 管理教 务 信息 管 理查 询 帮 助用户管理角色管理数据字典课程表信息总课表信息教师信息管理教师课酬管理教师课酬发放教师课酬统计试卷档案登记课程名称设置教师信息查询课程信息查询教师课酬查询关于帮助 图 2-8 2.4系统 E-R图 计科教务管理系统 7 图 2-9 参 照教 师 课 酬发 放 表统 计教 师 课 酬统 计 表教 师对 应对 应 对 应对 应课 程 表 / 总课 表试 卷 档 案登 记 表教 师 课 酬登 记 表11n 1n1n1n1nn 图 2-10 2.5数据库设计 2.5.1主要数据表 1用 户表 (用户角色表 ) 1)用户编号 2) 用户名 3)用户密码 4)性别 5)生日 6)职务 7)电话 8)邮箱 9)地址 10)备注 2角色表 1)角色编号 2)角色名称 3)备注 3功能表 (角色功能表 ) 计科教务管理系统 8 1)功能编号 2)功能名称 3)父级功能编号 4)子功能编号 5)备注 4教师信息表 1)教师编号 2)教师名称 3)职称 4)性别 5)年龄 6)是否外聘 7)联系地址 8)联系电话 9)备注 10)授课部门 5总课表 1)编号 2)教研室名称 3)教师编号 4)时间 5)课程代码 6)地点 7)必选任 8)教学班号 9)学分 10)起止周 11)优选类别 12)年级 6课程表 1)序号 2)星期 3)时间 4)教师编号 5)地点 7课酬登记表 1)序号 2)教师编号 3)班级 4)课程代码 5)授课时数 6)修读人系数 7)试 /查 8)指导上机或实验课学时 9)授课工作合计 10)享受减免课时 11)个人完成教学工作量总计 12)备注 13)登记时间 8课酬发放表 1)序号 (登记表序号 ) 2)序号 3)标准 4)应发课酬 5)税率 6)代扣税额 7)实发金额 8)备注 9)发放时间 9课酬统计表 1)序号 (课酬登记表 ) 2)序号 (课酬发放表 ) 3)标准 4)应发课酬 5)税率 6)代扣税额 7)实发金额 8)备注 9)发放时间 10)系补发金额 11)签名 12)总课时 13)院系 14)授课教师 15)职称 16)是否外聘 10课名表 1)课程代码 2)课程名称 11试卷登记表 1)卷宗号 2)课程代码 3)教师编号 4)班级名称 5)试卷份数 6)存在问题 7)备注 2.5.2基本数据表的实现 1用户表 CREATE TABLE dbo.TUser ( UNo varchar (10) COLLATE Chinese_PRC_CI_AS NOT NULL , UName varchar (10) COLLATE Chinese_PRC_CI_AS NULL , USex varchar (4) COLLATE Chinese_PRC_CI_AS NULL , UPassWord varchar (10) COLLATE Chinese_PRC_CI_AS NULL , UBirth datetime NULL , UPost varchar (10) COLLATE Chinese_PRC_CI_AS NULL , UPhone varchar (12) COLLATE Chinese_PRC_CI_AS NULL , UEmail varchar (20) COLLATE Chinese_PRC_CI_AS NULL , 计科教务管理系统 9 UAddress varchar (50) COLLATE Chinese_PRC_CI_AS NULL , UMemo varchar (50) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 2角色表 CREATE TABLE dbo.TRole ( Rno varchar (10) COLLATE Chinese_PRC_CI_AS NOT NULL , Rname varchar (100) COLLATE Chinese_PRC_CI_AS NULL , Rpower varchar (10) COLLATE Chinese_PRC_CI_AS NULL , RMemo varchar (50) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 3功能表 CREATE TABLE dbo.TFunction ( Fno varchar (10) COLLATE Chinese_PRC_CI_AS NOT NULL , Fname varchar (50) COLLATE Chinese_PRC_CI_AS NULL , Fpater varchar (50) COLLATE Chinese_PRC_CI_AS NULL , Flevel int NULL , FPage varchar (50) COLLATE Chinese_PRC_CI_AS NULL , FMemo varchar (100) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 4教师信息表 CREATE TABLE dbo.TTeacher ( tno int NOT NULL , tname varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tpost varchar (15) COLLATE Chinese_PRC_CI_AS NULL , tsex varchar (10) COLLATE Chinese_PRC_CI_AS NULL , ttel varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tbool varchar (10) COLLATE Chinese_PRC_CI_AS NULL , tmemo varchar (50) COLLATE Chinese_PRC_CI_AS NULL , tage varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tadress varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tcdepartment varchar (20) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 5总课表 CREATE TABLE dbo.TCoursel ( tclno int NOT NULL , thname varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tweekcount varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tscode int NULL , tclassno varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tadress varchar (30) COLLATE Chinese_PRC_CI_AS NULL , 计科教务管理系统 10 tcredit varchar (10) COLLATE Chinese_PRC_CI_AS NULL , tstarttoend varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tcname varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tgrade varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tselect char (10) COLLATE Chinese_PRC_CI_AS NULL , tcscode varchar (20) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 6课程表 CREATE TABLE dbo.TCoursen ( tcno int NOT NULL , tweek varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tweekcount varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tno varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tadress varchar (50) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 7课酬登记表 CREATE TABLE dbo.TCourse ( tcno int NOT NULL , tcscode int NULL , tcclass varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tscode varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tclessoncount int NULL , tccoefficient char (10) COLLATE Chinese_PRC_CI_AS NULL , tcsc char (10) COLLATE Chinese_PRC_CI_AS NULL , tcclessons int NULL , tcsum varchar (20) COLLATE Chinese_PRC_CI_AS NULL , tcreduce varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tcworksum varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tcmemo varchar (50) COLLATE Chinese_PRC_CI_AS NULL , tctime varchar (20) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 8课酬发放表 CREATE TABLE dbo.TCourseReward ( trno int NOT NULL , tcno int NULL , trstandard varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tremuneration varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trtaxrate varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trtax varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trwages varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trmemo varchar (50) COLLATE Chinese_PRC_CI_AS NULL , 计科教务管理系统 11 trtime varchar (30) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 9课酬统计表 CREATE TABLE dbo.TCourseReward2 ( trno int NOT NULL , tcscode int NULL , trstandard varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tremuneration varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trtaxrate varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trtax varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trwages varchar (30) COLLATE Chinese_PRC_CI_AS NULL , traward varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trsignature varchar (30) COLLATE Chinese_PRC_CI_AS NULL , trlessonscount int NULL ) ON PRIMARY GO 10课名表 CREATE TABLE dbo.TLesson ( tscode int NOT NULL , tlesson varchar (30) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 11试卷登记表 CREATE TABLE dbo.TTestpaper ( ttestno varchar (30) COLLATE Chinese_PRC_CI_AS NOT NULL , tscode varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tno varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tclassname varchar (30) COLLATE Chinese_PRC_CI_AS NULL , ttestcount varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tquestion varchar (30) COLLATE Chinese_PRC_CI_AS NULL , tmemo varchar (50) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 计科教务管理系统 12 第三章 界面设计 3.1 登录界面 图 3-1 系统初始用户: admin 密码: 0 其主要实现细节代码如下: procedure TLogonForm.Button1Click(Sender: TObject); begin if (edit1.text=) then begin application.MessageBox(用户名不能为空 ,错误提示 ,mb_ok); count:=count+1; if (count=3) then begin application.MessageBox(用户名或密码输入错误三次,系统即将退出! ,提示 ,mb_ok); application.Terminate; end; edit2.Text:=; edit1.SetFocus; end else if checkuser(edit1.Text,edit2.Text)=false then begin application.MessageBox(用户名或密码输入有误 ,错误提示 ,mb_ok); count:=count+1; if (count=3) then 计科教务管理系统 13 begin application.MessageBox(用户名或密码输入错误三次,系统即将退出! ,提示 ,mb_ok); application.Terminate; end; edit2.Text:=; edit1.SetFocus; end else if checkuser(edit1.Text,edit2.Text)=true then begin logonForm.Close; end ; end; function TLogonForm.checkuser(uname, upwd: string): boolean; var userquery:TAdoquery; sqlstr:string; begin userquery:=TAdoquery.Create(self); with userquery do begin connection :=dm.ADOConnection1; sqlstr:=select * from Tuser where UName=:uname and UPassWord=:upwd; sql.Text:=sqlstr; parameters.ParamByName(uname).Value:=uname; parameters.ParamByName(upwd).Value:=upwd; active:=true; try if recordcount0 then begin result:=true; dm.uno:=fieldbyname(uno).AsString; dm.uname:=fieldbyname(uname).AsString; end else result:=false; finally close; free; 计科教务管理系统 14 end; end; end; 3.2 用户管理 其主要实现细节代码如下: procedure TUserForm.FormCreate(Sender: TObject); begin enable(self); edNO.Enabled:=true; edName1.Enabled:=true; ControlTheEnablePro(true); adoqUser.Open; StatusBar1.Panels0.Text:= 当前的记录数 : + IntToStr(adoqUser.RecordCount+1) + 条 ; StatusBar1.Panels1.Text := 操作用户管理窗口 ; StatusBar1.Panels2.Text := 请慎重操作 ! ; TControlAccess(DBGrid).OnMouseWheel := GridMouseWheel; end; 计科教务管理系统 15 /鼠标滚动 DBGrid 的数据跟着改变 procedure TUserForm.GridMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin TDBGrid(Sender).DataSource.DataSet.MoveBy(-WheelDelta div WHEEL_DELTA); Handled := True; end; procedure TUserForm.FormShow(Sender: TObject); var userQry: TAdoquery; tvNode: TfcTreeNode; begin /Panel3.Enabled:=false;/ 初始状态置显示框为不可编辑状态 userqry := TAdoquery.Create(nil); userqry.Connection := dm.ADOConnection1; clearText(self); /self 表示自身已经被创建完毕了 GetFieldsToCombox(001, cbSex1, DM.ADOConnection1); /性别 GetFieldsToCombox(001, cbSex2, DM.ADOConnection1); GetFieldsToCombox(002, cbPost, DM.ADOConnection1); /职务 with userqry do begin sql.Text:=SELECT Rname, Rno FROM Trole; Open; While not Eof do begin tvNode := fcTreeView.Items.Add(nil, fieldByName(Rname).AsString); tvNode.CheckboxType :=tvctCheckbox; tvNode.StringData := fieldByName(Rno).AsString; next; end; end; with adoqUser do begin edName2.Text := fieldByname(Uname).AsString; edPwd1.Text := fieldByname(upassWord).AsString; edPwd2.Text := fieldByname(upassWord).AsString; dateDTP.Date := StrToDate(fieldByName(UBirth).AsString); edAdress.Text := fieldByname(UAddress).AsString; edit8.Text := fieldByname(Umemo).AsString; edit10.Text := fieldByname(UEmail).AsString; 计科教务管理系统 16 edit9.Text := fieldByname(UPhone).AsString; end; userqry.Free; / 窗体显示的时候 用户的角色选项 给 fcTreeView 的节点打上钩 CheckTvByField(adoqUser, DM.ADOConnection1, fcTreeView); end; procedure TUserForm.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in State then Exit; /隔行改变网格背景色: if adoqUser.RecNo mod 2 = 0 then (Sender as TDBGrid).Canvas.Brush.Color := clinfobk /定义背景颜色 else (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); /定义背景颜色 /定义网格线的颜色: DBGrid.DefaultDrawColumnCell(Rect,DataCol,Column,State); with (Sender as TDBGrid).Canvas do /画 cell 的边框 begin Pen.Color := $00ff0000; /定义画笔颜色 (蓝色 ) MoveTo(Rect.Left, Rect.Bottom); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画蓝色的横线 Pen.Color := clbtnface; /定义画笔颜色 (兰色 ) MoveTo(Rect.Right, Rect.Top); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画绿色 end; end; procedure TUserForm.btnFindClick(Sender: TObject); var sqlStr: string; begin sqlStr := SELECT DISTINCT a.*, b.Dname as Sex,C.Dname as Post + FROM TUser a + LEFT JOIN TDataParam b on a.Usex=b.Did + LEFT JOIN TDataParam c on a.Upost=c.Did + WHERE 1=1; if edNO.Text then sqlStr := Sqlstr+ AND Uno= + QuotedStr(edNO.Text); if edName1.Text then 计科教务管理系统 17 sqlStr := sqlstr+ AND Uname like % + edName1.Text + %; if cbSex1.ItemIndex 0 then sqlStr := sqlStr + AND b.Dname= + QuotedStr(cbSex1.Text); with adoqUser do begin Sql.Text := sqlStr; Open; end; StatusBar1.Panels0.Text:= 当前的记录数 : + IntToStr(adoqUser.RecordCount) + 条 ; edNO.Text:=; edName1.Text:=; end; procedure TUserForm.edName2KeyPress(Sender: TObject; var Key: Char); begin if(key=#13) and (edName2.Text) then begin / if isName(edit3.Text) then / begin / if isNameExist(edit3.Text) then / application.MessageBox(姓名已经存在 ,提示消息 , mb_iconInformation) / else perform(WM_NEXTDLGCTL, 0, 0) /end /else / begin / if application.MessageBox(姓名含有无效字符 ,提示消息 , mb_iconInformation+mb_ok)=idok then / edit3.Clear; / end; end; end; procedure TUserForm.cbPostChange(Sender: TObject); begin if cbPost.ItemIndex 0 then result := true else Result := false; nameQry.Free; end; procedure TUserForm.cbSex2Change(Sender: TObject); begin perform(WM_NEXTDLGCTL, 0, 0); end; procedure TUserForm.edPwd1KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin if length(edPwd1.Text) 6 then application.MessageBox(密码长度必须不小于六位 , 提示消息 , mb_iconinformation) else perform(WM_NEXTDLGCTL, 0, 0) end; end; procedure TUserForm.edPwd2KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin if edPwd1.TextedPwd2.Text then begin application.MessageBox(两次密码输入不相等 ,请重输 , 提示消息 , mb_iconinformation); edPwd2.Clear; end else perform(WM_NEXTDLGCTL, 0, 0); 计科教务管理系统 19 end; end; procedure TUserForm.dateDTPKeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin if(dateDTP.Date Now) then begin Application.MessageBox(输入日期非法 , 提示消息 , mb_iconInformation); dateDTP.SetFocus; end; end; end; procedure TUserForm.dateDTPChange(Sender: TObject); begin if(dateDTP.Date Now) then begin Application.MessageBox(输入日期非法 , 提示消息 , mb_iconInformation); dateDTP.SetFocus; end; end; procedure TUserForm.edAdressKeyPress(Sender: TObject; var Key: Char); begin if key=#13 then Perform(WM_NEXTDLGCTL, 0, 0); end; procedure TUserForm.Edit9KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin /if(Edit9.Text) and (isFixedTel(Edit9.Text)=false) then / begin / if application.MessageBox(电话号码不合法 , 提示信息 , / mb_iconInformation) = idok then / Edit9.Clear / end / else 计科教务管理系统 20 perform(WM_NEXTDLGCTL, 0, 0); end; end; procedure TUserForm.Edit8KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then Perform(WM_NEXTDLGCTL, 0, 0); end; procedure TUserForm.Edit10KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin / if(edit10.Text) and (isEmail(edit10.Text)=false) then / begin / if application.MessageBox(电子邮件地址不合法 , 提示信息 , / mb_iconInformation) = idok then / edit10.Clear / end / else perform(WM_NEXTDLGCTL, 0, 0); end; end; procedure TUserForm.ControlTheEnablePro(isSaved: Boolean); begin if isSaved = true then begin panel2.Enabled:=true; /Panel3.Enabled:=false; BitBtn2.Enabled:=True; BitBtn3.Enabled:=true; BitBtn4.Enabled:=true; BitBtn7.Enabled:=true; BitBtn5.Enabled:=false; BitBtn6.Enabled:=false; edName2.Enabled:=false; edPwd1.Enabled:=false; edPwd2.Enabled:=false; edAdress.Enabled:=false; edit8.Enabled:=false; edit9.Enabled:=false; 计科教务管理系统 21 edit10.Enabled:=false; cbPost.Enabled:=false; cbSex2.Enabled:=false; dateDTP.Enabled:=false; /* end else begin panel2.Enabled:=false; /Panel3.Enabled:=true; BitBtn2.Enabled:=false; BitBtn3.Enabled:=false; BitBtn4.Enabled:=false; BitBtn7.Enabled:=false; BitBtn5.Enabled:=true; BitBtn6.Enabled:=true; edName2.Enabled:=true; edPwd1.Enabled:=true; edPwd2.Enabled:=true; edAdress.Enabled:=true; edit8.Enabled:=true; edit9.Enabled:=true; edit10.Enabled:=true; cbPost.Enabled:=true; cbSex2.Enabled:=true; dateDTP.Enabled:=true; /* end; end; procedure TUserForm.BitBtn2Click(Sender: TObject); var i:integer; begin unenable(self); for i := 0 to fcTreeView.Items.Count - 1 do fcTreeView.Itemsi.Checked := False; ControlTheEnablePro(false); clearText(self); cbPost.ItemIndex := 0; cbSex2.ItemIndex := 0; edName2.SetFocus; flag:=1; end; procedure TUserForm.BitBtn4Click(Sender: TObject); begin 计科教务管理系统 22 ControlTheEnablePro(false); unenable(self); flag := 2; end; procedure TUserForm.BitBtn5Click(Sender: TObject); begin ControlTheEnablePro(true); enable(self); edNO.Enabled:=true; edName1.Enabled:=true; flag := 0; end; procedure TUserForm.BitBtn6Click(Sender: TObject); var Uno: string; sqlStr: string; begin /* if edName2.Text= then begin if application.MessageBox(姓名 不能为空 ,提示消息 , mb_iconInformation+mb_ok)=idok then edName2.SetFocus; end else / if isName(edit3.Text)=false then / begin / application.MessageBox(姓名含有非法字符 , 提示消息 , MB_ICONINFORMATION); / edit3.SetFocus; / end / else / if isNameExist(edit3.Text) then / begin / Application.MessageBox(该姓名已存在 , 提示消息 , MB_ICONINFORMATION); / edit3.SetFocus; / end / else / if combobox2.ItemIndex 1 then / begin 计科教务管理系统 23 / application.MessageBox(职位不能为空 ,提示消息 , mb_iconInformation+mb_ok); / combobox2.SetFocus; / end / else / if Length(edit5.Text) 6 then / begin / application.MessageBox(密码长度必须位六位以上 ,提示消息 , mb_iconInformation+mb_ok); / edit5.SetFocus; / end / else if edPwd1.Text= then begin application.MessageBox(密码不能为空 ,提示消息 , mb_iconInformation+mb_ok); edPwd1.SetFocus; end else if edPwd2.Text = then begin application.MessageBox(重输密码不能为空 ,提示消息 , mb_iconInformation+mb_ok); edPwd2.SetFocus; end else if edPwd2.Text edPwd1.Text then begin application.MessageBox(两次密码输入不相同 ,提示消息 , mb_iconInformation+mb_ok); edPwd2.SetFocus; end else if(dateDTP.DateNow) then begin application.MessageBox(出生日期不合法 ,提示消息 , mb_iconInformation+mb_ok); dateDTP.SetFocus; end else / if(edit9.Text) and (isFixedTel(edit9.Text)=false) then / begin / application.MessageBox(电话号码不合法 ,提示消息 , mb_iconInformation+mb_ok); / edit9.SetFocus; /end / else if(edit10.Text ) and (isEmail(edit10.Text)=false) then 计科教务管理系统 24 begin application.MessageBox(电子邮件地址不合法 ,提示消息 , mb_iconInformation+mb_ok); edit10.SetFocus; end else if(length(edit10.Text) 30) then begin application.MessageBox(电子邮件地址长度不能超过 30,提示消息 , mb_iconInformation+mb_ok); edit10.SetFocus; end else if isTvChecked(fcTreeView)=false then begin application.MessageBox(必须分配角色 ,提示消息 , mb_iconInformation+mb_ok); fcTreeView.SetFocus; end else begin if flag=1 then / flag=1表示此时是增加状态 begin if isUnameExist(edName2.Text) then begin if Application.MessageBox( 用户名已存在 ,是否继续添加 !, 提示消息 ,MB_ICONINFORMATION + MB_YESNO)= id_yes then begin adoqUser.Close; Uno := GetUno; / 自动获取用户编号 sqlStr := INSERT TUser(Uno, UName, USex, UpassWord, UBirth, + UPost, UPhone, UEmail, UAddress, UMemo) + Values(+QuotedStr(Uno)+,+ QuotedStr(edName2.Text)+, + QuotedStr(GetDIdFromCombox(cbSex2,DM.ADOConnection1)+, + QuotedStr(edPwd1.Text)+, + QuotedStr(DateToStr(dateDTP.Date)+, + QuotedStr(GetDIdFromCombox(cbPost, DM.ADOConnection1) + , + QuotedStr(edit9.Text) + , + QuotedStr(edit10.Text)+, + QuotedStr(edAdress.Text) + , + QuotedStr(edit8.Text) +); ToExecSQL(sqlStr, DM.ADOConnection1); /插入记录到用户表 SaveRnoFromTv(Uno); /保存树的记录到用户角色表 showmessage(添加成功! ); end 计科教务管理系统 25 else edName1.SetFocus; end else begin adoqUser.Close; Uno := GetUno; / 自动获取用户编号 sqlStr := INSERT TUser(Uno, UName, USex, UpassWord, UBirth, + UPost, UPhone, UEmail, UAddress, UMemo) + Values(+QuotedStr(Uno)+,+ QuotedStr(edName2.Text)+, + QuotedStr(GetDIdFromCombox(cbSex2,DM.ADOConnection1)+, + QuotedStr(edPwd1.Text)+, + QuotedStr(DateToStr(dateDTP.Date)+, + QuotedStr(GetDIdFromCombox(cbPost, DM.ADOConnection1) + , + QuotedStr(edit9.Text) + , + QuotedStr(edit10.Text)+, + QuotedStr(edAdress.Text) + , + QuotedStr(edit8.Text) +); ToExecSQL(sqlStr, DM.ADOConnection1); /插入记录到用户表 SaveRnoFromTv(Uno); /保存树的记录到用户角色表 showmessage(添加成功! ); end; end; if flag=2 then / flag=2表示此时是修改状态 begin /更新 TUser表 sqlStr := UPDATE TUser SET UName= + QuotedStr(edName2.Text) +, + USex= + QuotedStr(GetDIdFromCombox(cbSex2,DM.ADOConnection1) +, + UpassWord= + QuotedStr(edPwd1.Text) +, + UBirth= + QuotedStr(DateToStr(dateDTP.date) + , + UPost= + QuotedStr(GetDIdFromCombox(cbPost, DM.ADOConnection1) +, + UPhone= + QuotedStr(edit9.Text) + , + UEmail= + QuotedStr(edit10.Text)+, + UAddress= + QuotedStr(edAdress.Text) + , + UMemo= + QuotedStr(edit8.Text) + WHERE UNo= + QuotedStr(adoqUser.fieldByName(Uno).AsString); ToExecSQL(sqlStr, DM.ADOConnection1); /更新 TUserRole表 ,先删记录,再插入 sqlStr := DELETE TUserRole WHERE UNo= + QuotedStr(adoqUser.fieldByName(Uno).AsString); ToExecSQL(sqlStr,dm.ADOConnection1); SaveRnoFromTv(adoqUser.fieldByName(Uno).AsString); showmessage(修改成功! ); 计科教务管理系统 26 end; adoqUser.Close; adoqUser.Open; flag := 0; ControlTheEnablePro(true); enable(self); edNO.Enabled:=true; edName1.Enabled:=true; end; end; procedure TUserForm.BitBtn7Click(Sender: TObject); begin close; end; procedure TUserForm.adoqUserAfterScroll(DataSet: TDataSet); var roleQry: TAdoquery; i: integer; begin roleQry := TadoQuery.Create(nil); roleQry.Connection := dm.ADOConnection1; for i := 0 to fcTreeView.Items.Count - 1 do begin fcTreeView.Itemsi.Checked := false; end; with adoqUser do begin edName2.Text := fieldByname(Uname).AsString; edPwd1.Text := fieldByname(upassWord).AsString; edPwd2.Text := fieldByname(uPassWord).AsString; dateDTP.Date := StrToDate(fieldByName(UBirth).AsString); edAdress.Text := fieldByname(UAddress).AsString; edit8.Text := fieldByname(Umemo).AsString; edit10.Text := fieldByname(UEmail).AsString; edit9.Text := fieldByname(UPhone).AsString; cbPost.ItemIndex := cbPost.Items.IndexOf(fieldbyname(post).AsString); cbSex2.ItemIndex := cbSex2.Items.IndexOf(fieldByname(Sex).AsString); end; CheckTvByField(adoqUser, DM.ADOConnection1, fcTreeView); 计科教务管理系统 27 roleQry.Free; end; procedure TUserForm.BitBtn3Click(Sender: TObject); var RoleQry: TadoQuery; Sqlstr: String; begin if messagebox(handle,您确定要修改吗? ,提示 ,MB_YESNO + MB_ICONQUESTION)=ID_yes then begin RoleQry := TAdoQuery.Create(nil); with RoleQry do begin Connection := DM.ADOConnection1; sql.Text := SELECT c.Rno FROM TUser a + JOIN TUserRole b On a.Uno=b.Uno + JOIN TRole c On b.Rno=c.Rno + WHERE a.Uno= + QuotedStr(adoqUser.fieldByname(Uno).AsString); Open; end; if(RoleQry.FieldByName(Rno).AsString = 004) then application.MessageBox(系统管理员不能被删除 !,警告 , mb_IconError) else if(adoqUser.fieldByname(Uno).AsString)=DM.uno then begin application.MessageBox(不能删除自己! , 警告 , mb_IconError); end else begin if application.MessageBox(确认删除 , 提示信息 , mb_IconInformation + mb_YesNo)=id_yes then begin /删除 TUserRole里面的记录 Sqlstr := DELETE TUserRole WHERE UNo= + QuotedStr(adoqUser.fieldByname(Uno).AsString); ToExecSQL(Sqlstr, DM.ADOConnection1); /删除 TUser里面的记录 Sqlstr := DELETE TUser WHERE UNo= + QuotedStr(adoqUser.fieldByname(Uno).AsString); ToExecSQL(SqlStr, dm.ADOConnection1); adoqUser.Close; 计科教务管理系统 28 adoqUser.Open; end; end; ControlTheEnablePro(true); enable(self); RoleQry.Free; end; end; function TUserForm.GetUno: string; var UnoQry: TADOQuery; No: string; t: integer; begin UnoQry := TADOQuery.Create(self); with Unoqry do begin Connection := dm.ADOConnection1; sql.Text := SELECT MAX(Uno) as Muno FROM TUser; Open; No := fieldbyName(Muno).AsString; end; t := StrToInt(No); t := t + 1000 + 1; No := Copy(IntToStr(t), 2, 3); Result := No; UnoQry.Free; end; procedure TUserForm.SaveRnoFromTv(Uno: String); var i: integer; sqlStr: string; Node: TfcTreeNode; begin for i := 0 to fcTreeView.Items.Count - 1 do begin Node := fcTreeView.Itemsi; if Node.Checked then begin 计科教务管理系统 29 sqlStr := INSERT TUserRole(Uno, Rno) VALUES( + QuotedStr(Uno) + , + QuotedStr(Node.StringData) +); ToExecSQL(sqlStr, DM.ADOConnection1); end; end; end; function TUserForm.isUnameExist(Uname: string): Boolean; var SqlStr: string; tempQry: TADOQuery; begin sqlStr := SELECT * FROM TUser WHERE Uname= + QuotedStr(edName2.Text); tempQry := ToGetDataSQL(SqlStr, DM.adoconnection1); if tempQry.RecordCount 0 then result := true else result := false; end; 3.3 角色管理 计科教务管理系统 30 其主要实现代码如下: procedure TRoleForm.FormCreate(Sender: TObject); begin adoquery1.Open; ControlTheEnablePro(true); with adoquery1 do begin edit1.Text := fieldByName(Rno).AsString; edit2.Text := fieldByName(Rname).AsString; edit3.Text := fieldByname(Rmemo).AsString; end; TControlAccess(DBGrid1).OnMouseWheel := GridMouseWheel; end; procedure TRoleForm.FormClose(Sender: TObject; var Action: TCloseAction); begin adoquery1.Close; Action := caFree; RoleForm := nil; end; /procedure RoleForm.ControlTheEnablePro(isSaved: Boolean); /begin /end; /自动获取角色编号 /* function TRoleForm.getAutoRno: string; var adoqury: TADOQuery; t: integer; begin adoqury := TADOQuery.Create(self); with adoqury do begin Connection := dm.ADOConnection1; SQL.Text := SELECT MAX(Rno) as Rno FROM TRole; Open; 计科教务管理系统 31 t := StrToInt(fieldbyName(Rno).AsString); t := 1000 + t + 1; result := Copy(IntToStr(t), 2, 3); end; adoqury.Free; end; /* procedure TRoleForm.SaveTvToRoleFunc; var sqlStr: string; Node: TfcTreeNode; i: integer; begin for i := 0 to fcTreeView.Items.Count - 1 do begin Node := fcTreeView.Itemsi; if Node.Checked then begin sqlStr := INSERT TRoleFunction(Rno, Fno) VALUES( +QuotedStr(edit1.Text) + , +QuotedStr(Node.StringData) +); ToExecSQL(sqlStr, DM.ADOConnection1); end; end; end; procedure TRoleForm.FormShow(Sender: TObject); var PNode, CNode: TfcTreeNode; PRoleFunQry, CRoleFunQry: TADOQuery; pFname, pFno, cFname, cFno: string; begin PRoleFunQry := TADOQuery.Create(self); CRoleFunQry := TADOQuery.Create(self); with PRoleFunQry do begin Connection := DM.ADOConnection1; SQL.Text := SELECT FNO, FName From TFunction WHERE Flevel=0; 计科教务管理系统 32 open; while not Eof do begin pFname := fieldByName(FName).AsString; pFno := fieldByName(FNo).AsString; PNode := fcTreeView.Items.Add(nil, pFname); PNode.StringData := pFno; PNode.StringData2 := pFname; PNode.CheckboxType := tvctCheckbox; with CRoleFunQry do begin Connection := DM.ADOConnection1; SQL.Text := SELECT FNO, FName From TFunction + WHERE Flevel=1 AND Fpater= + QuotedStr(pFno); Open; While not Eof do begin cFname := fieldByName(FName).AsString; cFno := fieldByName(FNo).AsString; CNode := fcTreeView.Items.AddChild(PNode, cFname); CNode.StringData := CFno; CNode.StringData2 := cFname; CNode.CheckboxType := tvctCheckbox; Next; end; end; Next; end; end; PRoleFunQry.Free; CRoleFunQry.Free; CheckTv; fcTreeView.FullExpand; end; procedure TRoleForm.fcTreeViewToggleCheckbox(TreeView: TfcCustomTreeView; Node: TfcTreeNode); var i:integer; Ischildnode:integer; begin 计科教务管理系统 33 if isparentnode=true then exit; if node.Parent=nil then begin if node.Checked then for i:=0 to node.Count-1 do node.Itemi.Checked:=true else for i:=0 to node.Count-1 do node.Itemi.Checked:=false; end else begin Ischildnode:=0; for i:=0 to node.Parent.Count - 1 do if node.Parent.Itemi.Checked=true then Ischildnode:=1; isparentnode:=true; if Ischildnode=1 then node.Parent.Checked:=true else node.Parent.Checked:=false; Isparentnode:=false; end; end; procedure TRoleForm.CheckTv; var RoleFunQry: TADOQuery; Fno: string; i: Integer; begin RoleFunQry := TADOQuery.Create(self); with RoleFunQry do begin Connection := DM.ADOConnection1; SQL.Text := SELECT FNO FROM TRoleFunction WHERE Rno= + QuotedStr(adoquery1.fieldByName(Rno).AsString); Open; While not Eof do 计科教务管理系统 34 begin Fno := fieldbyName(Fno).AsString; for i := 0 to fcTreeView.Items.Count - 1 do begin if(fcTreeView.Itemsi.StringData = Fno) and (fcTreeView.Itemsi.Parentnil)then fcTreeView.Itemsi.Checked := True; end; Next; end; end; RoleFunQry.Free; end; procedure TRoleForm.ADOQuery1AfterScroll(DataSet: TDataSet); var i: integer; begin for i := 0 to fcTreeView.Items.Count - 1 do begin fcTreeView.Itemsi.Checked := False; end; CheckTv; with adoquery1 do begin edit1.Text := fieldByName(Rno).AsString; edit2.Text := fieldByName(Rname).AsString; edit3.Text := fieldByname(Rmemo).AsString; end; end; procedure TRoleForm.Edit2KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin if edit2.Text = then application.MessageBox(请输入角色名称 , 提示消息 , MB_ICONINFORMATION) else if isRnameExist(edit2.Text) then Application.MessageBox(角色名已存在 ,角色名不可以重复 !, 提示消息 , MB_ICONINFORMATION) else 计科教务管理系统 35 Perform(WM_NEXTDLGCTL, 0, 0); end; end; procedure TRoleForm.BitBtn1Click(Sender: TObject); var i: integer; begin flag:=1; for i := 0 to fcTreeView.Items.Count - 1 do begin fcTreeView.Itemsi.Checked := false; end; ControlTheEnablePro(false); clearText(self); edit1.Text := getAutoRno; edit2.SetFocus; end; procedure TRoleForm.BitBtn2Click(Sender: TObject); var sqlStr: string; RoleQry:Tadoquery; begin if messagebox(handle,您确定要删除吗? ,提示 ,MB_YESNO + MB_ICONQUESTION)=ID_yes then begin RoleQry:= Tadoquery.Create(self); with RoleQry do begin Connection := DM.ADOConnection1; sql.Text :=select distinct R.Rno from TRole R +inner join TUserRole UR on R.Rno=UR.Rno +inner join TUser U on UR.Uno=U.Uno +where R.Rno =+ QuotedStr(adoquery1.fieldbyname(Rno).AsString); Open; if(adoquery1.FieldByName(Rno).AsString = 001) then application.MessageBox(系统管理员不能被删除 !,警告 , mb_IconError) else if RoleQry.RecordCount0 then begin application.MessageBox(该角色暂时不能被删除 !,警告 , mb_IconError); 计科教务管理系统 36 end else if Application.MessageBox(确认删除 , 删除消息 , MB_ICONQUESTION + MB_YESNO) = ID_YES then begin sqlStr:= DELETE TRoleFunction WHERE Rno= + QuotedStr(adoquery1.fieldbyname(Rno).AsString); ToExecSQL(sqlStr, DM.ADOConnection1); sqlStr := DELETE TRole WHERE Rno= + QuotedStr(adoquery1.fieldbyname(Rno).AsString); adoquery1.Close; ToExecSQL(sqlStr, DM.ADOConnection1); adoquery1.Open; Application.MessageBox(删除成功 , 提示消息 ,MB_ICONINFORMATION); end; end; RoleQry.Free; ControlTheEnablePro(true); end; end; procedure TRoleForm.BitBtn3Click(Sender: TObject); begin /if(adoquery1.FieldByName(Rno).AsString = 001) then / application.MessageBox(系统管理员不能被修改 !,警告 , mb_IconError) / else / begin flag:=2; ControlTheEnablePro(false); edit2.SetFocus; / end; end; procedure TRoleForm.BitBtn4Click(Sender: TObject); begin flag:=0; ControlTheEnablePro(true); adoquery1.Close; adoquery1.Open; CheckTv; end; 计科教务管理系统 37 procedure TRoleForm.BitBtn5Click(Sender: TObject); var sqlStr: string; begin if edit2.Text= then begin Application.MessageBox(输入角色名称 , 提示消息 , MB_ICONINFORMATION); edit2.SetFocus; end else If isTvChecked(fcTreeView)=false then begin application.MessageBox(请选择树分配权限 , 提示消息 , MB_ICONINFORMATION); fcTreeView.SetFocus; end else begin if flag=1 then begin if isRnameExist(edit2.Text) then begin Application.MessageBox(角色名已存在 !, 提示消息 , MB_ICONINFORMATION); edit2.SetFocus; end else begin adoquery1.Close; sqlStr := INSERT TRole(Rno, Rname, RMemo) VALUES( + QuotedStr(edit1.Text) + , + QuotedStr(edit2.Text) + , + QuotedStr(edit3.Text) +); ToExecSQL(sqlStr, DM.adoconnection1); SaveTvToRoleFunc;/对角色 功能表 的编号同时添加上去 adoquery1.Open; Application.MessageBox(角色添加成功 , 提示消息 ,MB_ICONINFORMATION); end; end; 计科教务管理系统 38 if flag=2 then begin adoquery1.Close; sqlStr := UPDATE TRole SET Rname= + QuotedStr(edit2.Text) + , + Rmemo= + QuotedStr(edit3.Text) + WHERE Rno= + QuotedStr(edit1.Text); ToExecSQL(sqlStr, DM.adoconnection1); /删除角色功能 sqlStr := DELETE TRolefunction WHERE Rno= + QuotedStr(edit1.Text); ToExecSQL(sqlStr, DM.adoconnection1); /增加角色功能 SaveTvToRoleFunc; adoquery1.Open; Application.MessageBox(角色修改成功 , 提示消息 ,MB_ICONINFORMATION); end; ControlTheEnablePro(true); flag:=0; end; end; function TRoleForm.isRnameExist(Rname: string): Boolean; var SqlStr: string; tempQry: TADOQuery; begin sqlStr := SELECT * FROM TRole WHERE Rname= + QuotedStr(edit2.Text); tempQry := ToGetDataSQL(SqlStr, DM.adoconnection1); if tempQry.RecordCount 0 then result := true else result := false; end; procedure TRoleForm.BitBtn6Click(Sender: TObject); begin close; 计科教务管理系统 39 end; procedure TRoleForm.ControlTheEnablePro(isSaved: Boolean); begin if isSaved = true then begin panel6.Enabled:=true; Panel2.Enabled:=false; Panel5.Enabled:=false; BitBtn1.Enabled:=True; BitBtn2.Enabled:=true; BitBtn3.Enabled:=true; BitBtn4.Enabled:=false; BitBtn5.Enabled:=false; BitBtn6.Enabled:=true; edit1.Enabled:=false; edit2.Enabled:=false; edit3.Enabled:=false; end else begin panel6.Enabled:=false; Panel2.Enabled:=true; Panel5.Enabled:=true; BitBtn1.Enabled := false; BitBtn2.Enabled:=false; BitBtn3.Enabled:=false; BitBtn4.Enabled:=true; BitBtn5.Enabled:=true; BitBtn6.Enabled:=false; edit2.Enabled:=true; edit3.Enabled:=true; end; end; procedure TRoleForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in State then Exit; /隔行改变网格背景色: if adoquery1.RecNo mod 2 = 0 then (Sender as TDBGrid).Canvas.Brush.Color := clinfobk /定义背景颜色 else (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); /定义背景颜色 /定义网格线的颜色: DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); with (Sender as TDBGrid).Canvas do /画 cell 的边框 begin Pen.Color := $00ff0000; /定义画笔颜色 (蓝色 ) MoveTo(Rect.Left, Rect.Bottom); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画蓝色的横线 计科教务管理系统 40 Pen.Color := clbtnface; /定义画笔颜色 (兰色 ) MoveTo(Rect.Right, Rect.Top); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画绿色 end; end; /鼠标滚动 DBGrid 的数据跟着改变 procedure TRoleForm.GridMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin TDBGrid(Sender).DataSource.DataSet.MoveBy(-WheelDelta div WHEEL_DELTA); Handled := True; end; procedure TRoleForm.Label4Click(Sender: TObject); begin if panel2.Width10 then panel2.Width:=0 else panel2.Width:=176; end; 3.4 总课表 计科教务管理系统 41 其实现代码如下: function TTCourse1Form.GetUno: string; var UnoQry: TADOQuery; id: string; begin UnoQry := TADOQuery.Create(self); with Unoqry do begin Connection := dm.ADOConnection1; sql.Text := select max(tclno) as id from TCoursel; Open; id := fieldbyName(id).AsString; if id= then id:=1 else id:=inttostr(strtoint(id)+1); end; Result := id; UnoQry.Free; end; procedure TTCourse1Form.FormCreate(Sender: TObject); begin adoquery1.Open; ControlTheEnablePro(true); TControlAccess(DBGrid1).OnMouseWheel := GridMouseWheel; end; procedure TTCourse1Form.FormClose(Sender: TObject; var Action: TCloseAction); begin adoquery1.Close; Action := caFree; TCourse1Form := nil; end; procedure TTCourse1Form.ADOQuery1AfterScroll(DataSet: TDataSet); begin with adoquery1 do begin 计科教务管理系统 42 edttclno.Text := fieldByName(tclno).AsString; edtthname.Text := fieldByName(thname).AsString; edttnamen.Text := fieldByName(tnamen).AsString; edttweekcount.Text := fieldByname(tweekcount).AsString; edttcredit.Text := fieldByName(tcredit).AsString; edttclassno.Text:=fieldbyname(tclassno).AsString; edttstarttoend.Text:=fieldbyname(tstarttoend).AsString; edttcname.Text:=fieldbyname(tcname).AsString; edtadress.Text:=fieldbyname(tadress).AsString; edttgrade.Text:=fieldbyname(tgrade).AsString; cbxtselect.Text := fieldbyname(tselect).AsString; cbxtdepartment.ItemIndex := cbxtdepartment.Items.IndexOf(fieldByname(tdepartment).AsString); cbxtscode.ItemIndex := cbxtscode.Items.IndexOf(fieldbyname(tscode).AsString); edttlesson.Text := fieldByname(tlesson).AsString; end; end; procedure TTCourse1Form.GridMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin TDBGrid(Sender).DataSource.DataSet.MoveBy(-WheelDelta div WHEEL_DELTA); Handled := True; end; procedure TTCourse1Form.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in State then Exit; /隔行改变网格背景色: if adoquery1.RecNo mod 2 = 0 then (Sender as TDBGrid).Canvas.Brush.Color := clinfobk /定义背景颜色 else (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); /定义背景颜色 /定义网格线的颜色: DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); with (Sender as TDBGrid).Canvas do /画 cell 的边框 begin Pen.Color := $00ff0000; /定义画笔颜色 (蓝色 ) MoveTo(Rect.Left, Rect.Bottom); /画笔定位 计科教务管理系统 43 LineTo(Rect.Right, Rect.Bottom); /画蓝色的横线 Pen.Color := clbtnface; /定义画笔颜色 (兰色 ) MoveTo(Rect.Right, Rect.Top); /画笔定位 LineTo(Rect.Right, Rect.Bottom); /画绿色 end; end; procedure TTCourse1Form.ControlTheEnablePro(isSaved: Boolean); begin if isSaved = true then begin panel3.Enabled:=true; Panel2.Enabled:=false; BitBtn2.Enabled:=True; BitBtn3.Enabled:=true; BitBtn4.Enabled:=true; BitBtn7.Enabled:=true; BitBtn5.Enabled:=false; BitBtn6.Enabled:=false; edtthname.Enabled:=false; edttnamen.Enabled:=false; edttweekcount.Enabled:=false; edttcredit.Enabled:=false; edttclno.Enabled:=false; edttclassno.Enabled:=false; edttstarttoend.Enabled:=false; edttcname.Enabled:=false; edtadress.Enabled:=false; edttgrade.Enabled:=false; cbxtselect.Enabled:=false; cbxtdepartment.Enabled:=false; edttlesson.Enabled:=false; cbxtscode.Enabled:=false; /* end else begin panel3.Enabled:=false; Panel2.Enabled:=true; BitBtn2.Enabled:=false; BitBtn3.Enabled:=false; BitBtn4.Enabled:=false; BitBtn7.Enabled:=false; BitBtn5.Enabled:=true; BitBtn6.Enabled:=true; edtthname.Enabled:=true; edttnamen.Enabled:=true; edttweekcount.Enabled:=true; edttcredit.Enabled:=true; edttclno.Enabled:=true; 计科教务管理系统 44 edttclassno.Enabled:=true; edttstarttoend.Enabled:=true; edttcname.Enabled:=true; edtadress.Enabled:=true; edttgrade.Enabled:=true; cbxtselect.Enabled:=true; cbxtdepartment.Enabled:=true; cbxtscode.Enabled:=true; /* end; end; procedure TTCourse1Form.FormShow(Sender: TObject); begin adoquery1.Open; with adoquery1 do begin edttclno.Text := fieldByName(tclno).AsString; edtthname.Text := fieldByName(thname).AsString; edttnamen.Text := fieldByName(tnamen).AsString; edttweekcount.Text := fieldByname(tweekcount).AsString; edttcredit.Text := fieldByName(tcredit).AsString; edttclassno.Text:=fieldbyname(tclassno).AsString; edttstarttoend.Text:=fieldbyname(tstarttoend).AsString; edttcname.Text:=fieldbyname(tcname).AsString; edtadress.Text:=fieldbyname(tadress).AsString; edttgrade.Text:=fieldbyname(tgrade).AsString; edttlesson.Text := fieldByname(tlesson).AsString; ControlTheEnablePro(true); end; /自动获取编号 没显示出来 , 添加的时候 要把 tno的值也 添加到表里面 cbxtdepartment.Items.Add(请选择 ); with adoquery2 do begin Open; while not eof do begin cbxtdepartment.Items.Add(fieldByname(dname).AsString); cbxtdepartment2.Items.Add(fieldByname(dname).AsString); next; end; end; 计科教务管理系统 45 adoquery2.Close; cbxtdepartment.ItemIndex:=0; cbxtdepartment2.ItemIndex:=0; with adoquery3 do begin Open; while not eof do begin cbxtscode.Items.Add(fieldByname(tscode).AsString); cbxtlesson2.Items.Add(fieldByname(tlesson).AsString); next; end; end; adoquery3.Close; cbxtscode.ItemIndex:=0; cbxtlesson2.ItemIndex:=0; end; procedure TTCourse1Form.BitBtn2Click(Sender: TObject); begin clearText(self); / cbxsex.ItemIndex := cbxsex.Items.IndexOf(); / cbxpost.ItemIndex := cbxpost.Items.IndexOf(); /cbxbool.ItemIndex := cbxbool.Items.IndexOf(); cbxtselect.ItemIndex := 0; cbxtdepartment.ItemIndex := 0; edttclno.Text:= GetUno; ControlTheEnablePro(false); edttclno.Enabled:=false; edtthname.SetFocus; flag:=1; end; procedure TTCourse1Form.BitBtn3Click(Sender: TObject); begin if messagebox(handle,您确定要删除吗? ,提示 ,MB_YESNO + MB_ICONQUESTION)=ID_yes then begin adoquery1.Delete; end; 计科教务管理系统 46 end; procedure TTCourse1Form.BitBtn4Click(Sender: TObject); begin if messagebox(handle,您确定要修改吗? ,提示 ,MB_YESNO + MB_ICONQUESTION)=ID_yes then begin flag:=2; ControlTheEnablePro(false); end; end; procedure TTCourse1Form.BitBtn5Click(Sender: TObject); begin adoquery1.Open; with adoquery1 do begin edttclno.Text := fieldByName(tclno).AsString; edtthname.Text := fieldByName(thname).AsString; edttnamen.Text := fieldByName(tnamen).AsString; edttweekcount.Text := fieldByname(tweekcount).AsString; edttcredit.Text := fieldByName(tcredit).AsString; edttclassno.Text:=fieldbyname(tclassno).AsString; edttstarttoend.Text:=fieldbyname(tstarttoe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 材料采购招标方案(3篇)
- 口腔门诊无菌管理制度
- DB62T 4447-2021 糖用甜菜品种 SR-411
- 文员劳务承包方案(3篇)
- 工位毛毯改造方案(3篇)
- 路面抢修测绘方案(3篇)
- 工地厂房打扫方案(3篇)
- 建筑保护策划方案(3篇)
- 空调构机安装合同协议书
- 建筑案例改造方案(3篇)
- 铁路项目工程测量培训
- 《动力系统架构介绍》课件
- 特种门(卷帘门)安装工程检验批质量验收记录
- 2024店铺租赁合同个人商铺租赁合同范本
- S7-1200 PLC编程及应用 第4版习题答案
- GB/T 44669-2024残疾人服务机构服务规范
- 2024年陕西省西安市中考地理试题卷(含答案逐题解析)
- 2024年汽车驾驶员(技师)证考试题库附答案
- 辛亥革命胜利的历史意义及其局限性
- 化学高考考前指导讲座
- 新疆维吾尔自治区2024年普通高考第三次适应性检测(三模)英语试卷(含答案详解)
评论
0/150
提交评论