




已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
無憂無慮畢設網(wǎng) ():畢業(yè)設計源碼下載 畢業(yè)設計源碼下載: 本文配套程序下載地址 : 無憂無慮畢設網(wǎng) ()-大學生畢業(yè)設計站 ,免費畢業(yè)設計論文 ,無憂無慮畢設網(wǎng) 大學生畢業(yè)設計 ,出售各類畢業(yè)設計源碼 ,論文 ,程序源碼 ,網(wǎng)站源碼 ,免費視頻教程 ,我們將竭誠為您服務! 目錄 第一章 總體設計 .1 1.1 總體功能設計 .1 1.1.1 系統(tǒng)的主要功能要求 .1 1.1.2 系統(tǒng)主要 模塊 .1 1.1.3 系統(tǒng)安全性 .1 口令權限識別 .1 口令存取 .2 1.1.4 主要功能模塊描述 .2 課程表信息 .2 總課表信息 .2 教師信息管理 .2 教師 課酬管理 .2 教師課酬發(fā)放 .2 教師課酬統(tǒng)計 .2 試卷檔案登記 .2 第二章 系統(tǒng)詳細設計分析 .3 2.1 需求分析 .3 2.1.1 目標系統(tǒng)功能說明 .3 2.1.2 用戶需求分析 .3 2.1.3 系統(tǒng)運行環(huán)境簡介 .4 硬件環(huán)境 .4 軟件環(huán)境 .4 2.2 系統(tǒng)數(shù)據(jù)流圖 .4 2.3 系統(tǒng)結構 .6 2.4 系統(tǒng) E-R 圖 .6 2.5 數(shù)據(jù)庫設計 .7 2.5.1 主要數(shù)據(jù)表 .7 2.5.2 基本數(shù)據(jù)表的實現(xiàn) .8 第三章 界面設計 . 12 3.1 登錄界面 . 12 3.2 用戶管理 . 14 計科教務管理系統(tǒng) 1 3.3 角色管理 . 29 第一章 總體設計 1.1 總體功能設計 1.1.1 系統(tǒng)的主要功能要求 根據(jù)用戶口令判斷用戶的權限,具有基本的信息錄入功能和添加、刪除、修改功能,并能根據(jù)錄入的信息生成課程表、總課表、課酬表、課酬統(tǒng)計表、試卷檔案表,并能生成打印報表和 Excel 數(shù)據(jù)文檔等功能。 1.1.2 系統(tǒng)主要 模塊 主要功能模塊有:用戶管理,角色管理,數(shù)據(jù)字典,課程表信息,總課表信息,教師信息管理,教師課酬管理,教師課酬發(fā)放,教師課酬統(tǒng)計,試卷檔案管理,課程名稱設置,教師信息查詢,課程信息查詢,教師課酬查詢 等。 1.1.3 系統(tǒng)安全性 計算機系統(tǒng)的安全治理是一個龐大、復雜、面廣的系統(tǒng)工程。安全的核心是人,必須以人為核心進行安全管理。采用各種先進的安全技術,使系統(tǒng)免受非法攻擊,排除沒有訪問權限的使用者竊取機密信息,確保系統(tǒng)安全可靠的運行。 針對 學校教務 管理系統(tǒng)的特點,為了加強其安全性,系統(tǒng)采用一定的保密措施。 口令權限識別 口令識別是一種低成本,易實現(xiàn)的用戶識別技術。在計算機系統(tǒng)內廣泛的使用,在口令識別機制中,計算機系統(tǒng)給每個用戶分配一個用戶標識和一個口令。用戶標識唯一確定一個用戶是公開的;口令用于證 實用戶,是保密的,顯示為 *號。 計科教務管理系統(tǒng) 2 口令存取 系統(tǒng)要識別每個用戶的口令,就必須把每個用戶的口令存放起來,形成口令表,通常以文件或數(shù)據(jù)庫形式存放。如果以明文的形式存放,則很容易被熟悉系統(tǒng)的人偷取,為了提高基于口令的身份識別方案的堅強度,應該在口令方案中引入家密機制。 1.1.4 主要功能模塊描述 課程表信息 該設計的功能主要是完成 課程表 的管理,它包括 課程表錄入生成和 查詢,及其維護和打印 及生成 Excel 文檔 等功能。 總課表信息 該設計的功能主要是完成 學期總課表 的管理,它包括 學 期課表錄入生成和 查詢,及其維護和打印 及生成 Excel 文檔 等功能。 該模塊的錄入量較多,在設計上更加方便用戶在較短時間內完成大量的工作。 教師信息管理 該設計的功能主要是完成教師信息的管理和維護 。 教師課酬管理 該設計主要 是對教師課酬的及時登記入庫 ,它包括對 教師課酬的登記、錄入、查詢、 報表打印 、及 Excel 生成 等功能 ,也為后續(xù)的教師課酬發(fā)放提供數(shù)據(jù)源 。 教師課酬發(fā)放 該設計的功能主要對 教師課酬的發(fā)放進行登記和管理 。 它根據(jù)教師課程登記表提供的數(shù)據(jù)加以錄入部分信息,進行維 護和管理。提供了錄入、查詢、 報表打印 、及 Excel 生成 等功能 ,也為后續(xù)的教師課酬統(tǒng)計管理提供數(shù)據(jù)依據(jù)。為教師課酬發(fā)放提供數(shù)據(jù)。 教師課酬統(tǒng)計 該設計 完全依據(jù)課酬登記表的數(shù)據(jù)進而進行統(tǒng)計維護、管理和錄入部分必須的外加數(shù)據(jù)。該設計也提供了錄入、查詢、 報表打印 、及 Excel 生成 等功能 。主要是為學期教師課酬統(tǒng)計工作提供方便。 試卷檔案登記 計科教務管理系統(tǒng) 3 該設計 主要是實現(xiàn)對教學考試試卷電子檔案的管理,該設計也提供了錄入、查詢、 報表打印 、及 Excel 生成 等功能 。為日常教學考試工作提供方便。 第二章 系統(tǒng) 詳細設計分析 2.1需求分析 2.1.1 目標系統(tǒng)功能說明 本教務管理系統(tǒng)針對客戶提供強大的軟件功能,主要維護日常教務管理工作的基本信息等,能為教務教學提供更好的數(shù)據(jù)支持。軟件的功能基本是通用的。提供系統(tǒng)用戶管理、角色管理、數(shù)據(jù)字典管理、課程表管理、總課表管理、教師課酬管理統(tǒng)計、試卷檔案管理和生成報表 Excel 數(shù)據(jù)文檔,查詢幫助等功能。 2.1.2 用戶需求分析 本教務管理系統(tǒng) 是基于 Windows 操作系統(tǒng)基礎上,通過對 既定數(shù)據(jù)條件 研究和分析并結合對 學校教務 管理進行分析提出來的。對原有 教務管理系統(tǒng) 的非圖形界面操作 和 功能不強的數(shù)據(jù)庫系統(tǒng)的不穩(wěn)定性、不可擴充性、難以移植等 和 原有系統(tǒng)功能覆蓋面不廣等缺陷相應提出了一些要求。 1、 求系統(tǒng)目前流行的數(shù)據(jù)庫系統(tǒng) SQL Server 2000 作為底層數(shù)據(jù)庫,使其具備很強的穩(wěn)定性、擴充性、移植性等優(yōu)良性能。 2、 求系統(tǒng)以功能強大的 Windows 系列操作系統(tǒng)作為操作系統(tǒng)平臺,使其具備優(yōu)良的可視化圖形操作界面,大力提高系統(tǒng)的可操作性和交互性盡量減少操作員的負擔,讓他們更方便、更快捷、更簡單的進行操作。 3、 求擴大系統(tǒng)功能覆蓋面。它的功能要求能進行圖書的編目建庫、瀏覽數(shù)據(jù)、檢索與統(tǒng) 計數(shù)據(jù)、以及打印數(shù)據(jù)等功能的綜合管理。并能實現(xiàn)控制各用戶系統(tǒng)權限,從而保證系統(tǒng)的安全性能。 計科教務管理系統(tǒng) 4 4、 求提高系統(tǒng)的可維護性。系統(tǒng)的數(shù)據(jù)要求能隨時進行備份與恢復,基于家庭圖書管理系統(tǒng)的局限性這里就不要求數(shù)據(jù)能與其他數(shù)據(jù)庫進行交流(及共享數(shù)據(jù))。 2.1.3 系統(tǒng)運行環(huán)境簡介 基于以上對系統(tǒng)各種需求的分析和定義,建議系統(tǒng)采用一下配置,已確定系統(tǒng)的穩(wěn)定、高效運行。 硬件環(huán)境 (1) 最低配置 C233 以上 CPU, 32MB 以上內存, 2.1GB 硬盤。 (2) 建議配置 C2.4 以上 CPU, 256MB 內存, 80GB 硬盤。 (3) 打印機一臺 (4) UPS 不間斷電源一臺(避免數(shù)據(jù)因突然停電等意外情況下的丟失 軟件環(huán)境 PC 工作站 Win98/2000/xp 操作系統(tǒng) 2.2 系統(tǒng)數(shù)據(jù)流圖 0層數(shù)據(jù)流圖: 用 戶計 科 教 務 管 理系 統(tǒng)用 戶 命 令用 戶 操 作 信 息顯 示 信 息顯 示 面 板 圖 2-1 1層數(shù)據(jù)流圖: 計科教務管理系統(tǒng) 5 用 戶 命 令 處 理4系 統(tǒng) 配 置5配 置 命 令用 戶 信 息 權 限 記 錄配 置 數(shù) 據(jù)口 令啟 動 命 令啟 動 / 停 止處 理2口 令 核 對3口 令口 令 有 效口 令 無 效系 統(tǒng) 操 作1啟動/停止信息顯示用 戶 權 限 數(shù) 據(jù)顯 示 信 息用 戶 操 作 信 息用 戶 命 令 圖 2-2 2層數(shù)據(jù)流圖: 操 作 權 限 處 理1 . 1權 限 處 理 信 息操 作 信 息操 作 數(shù) 據(jù) 記 錄權 限 數(shù) 據(jù)操 作 處 理1 . 2操 作 數(shù) 據(jù)操 作 信 息顯 示 信 息 處 理1 . 3處 理 信 息 顯 示 信 息啟 動 信 息停 止 信 息 圖 2-3 3層數(shù)據(jù)流圖: 用 戶 信 息 處理1 . 2 . 1用 戶 操 作 信 息用 戶 記 錄用 戶 操 作 數(shù) 據(jù)角 色 信 息角 色 信 息 處理1 . 2 . 2角 色 記 錄角 色 操 作 數(shù) 據(jù)處 理 信 息功 能 權 限 記 錄權 限 操 作 數(shù) 據(jù)處 理 信 息 圖 2-4 信 息 處 理1 . 2 . 3試 卷 檔 案 / 課 程 表 / 總課 表 / 教 師 信 息 / 課 程名 操 作 信 息數(shù) 據(jù) 庫 記 錄操 作 數(shù) 據(jù)處 理 信 息 計科教務管理系統(tǒng) 6 圖 2-5 課 酬 登 記 信息 處 理1 . 2 . 4課 酬 操 作 信 息課 酬 登 記 記 錄課 酬 登 記 操 作 數(shù) 據(jù)課 酬 登 記 信 息課 酬 發(fā) 放 信息 處 理1 . 2 . 5課 酬 信 息 記 錄課 酬 發(fā) 放 操 作 數(shù) 據(jù)處 理 信 息課 酬 統(tǒng) 計 記 錄課 酬 統(tǒng) 計 操 作 數(shù) 據(jù)課 酬 統(tǒng) 計信 息 處 理1 . 2 . 6課 酬 發(fā) 放 信 息處 理 信 息 處 理 信 息 圖 2-6 查 詢 信 息 處 理1 . 2 . 7查 詢 操 作 信 息 處 理 信 息查 詢 信 息 記 錄查 詢 操 作 數(shù) 據(jù) 圖 2-7 2.3系統(tǒng)結構 計科教務 管理系統(tǒng)結構圖 計 科 教 務 管 理 系 統(tǒng)系 統(tǒng) 管理教 務 信息 管 理查 詢 幫 助用戶管理角色管理數(shù)據(jù)字典課程表信息總課表信息教師信息管理教師課酬管理教師課酬發(fā)放教師課酬統(tǒng)計試卷檔案登記課程名稱設置教師信息查詢課程信息查詢教師課酬查詢關于幫助 圖 2-8 2.4系統(tǒng) E-R圖 計科教務管理系統(tǒng) 7 圖 2-9 參 照教 師 課 酬發(fā) 放 表統(tǒng) 計教 師 課 酬統(tǒng) 計 表教 師對 應對 應 對 應對 應課 程 表 / 總課 表試 卷 檔 案登 記 表教 師 課 酬登 記 表11n 1n1n1n1nn 圖 2-10 2.5數(shù)據(jù)庫設計 2.5.1主要數(shù)據(jù)表 1用 戶表 (用戶角色表 ) 1)用戶編號 2) 用戶名 3)用戶密碼 4)性別 5)生日 6)職務 7)電話 8)郵箱 9)地址 10)備注 2角色表 1)角色編號 2)角色名稱 3)備注 3功能表 (角色功能表 ) 計科教務管理系統(tǒng) 8 1)功能編號 2)功能名稱 3)父級功能編號 4)子功能編號 5)備注 4教師信息表 1)教師編號 2)教師名稱 3)職稱 4)性別 5)年齡 6)是否外聘 7)聯(lián)系地址 8)聯(lián)系電話 9)備注 10)授課部門 5總課表 1)編號 2)教研室名稱 3)教師編號 4)時間 5)課程代碼 6)地點 7)必選任 8)教學班號 9)學分 10)起止周 11)優(yōu)選類別 12)年級 6課程表 1)序號 2)星期 3)時間 4)教師編號 5)地點 7課酬登記表 1)序號 2)教師編號 3)班級 4)課程代碼 5)授課時數(shù) 6)修讀人系數(shù) 7)試 /查 8)指導上機或實驗課學時 9)授課工作合計 10)享受減免課時 11)個人完成教學工作量總計 12)備注 13)登記時間 8課酬發(fā)放表 1)序號 (登記表序號 ) 2)序號 3)標準 4)應發(fā)課酬 5)稅率 6)代扣稅額 7)實發(fā)金額 8)備注 9)發(fā)放時間 9課酬統(tǒng)計表 1)序號 (課酬登記表 ) 2)序號 (課酬發(fā)放表 ) 3)標準 4)應發(fā)課酬 5)稅率 6)代扣稅額 7)實發(fā)金額 8)備注 9)發(fā)放時間 10)系補發(fā)金額 11)簽名 12)總課時 13)院系 14)授課教師 15)職稱 16)是否外聘 10課名表 1)課程代碼 2)課程名稱 11試卷登記表 1)卷宗號 2)課程代碼 3)教師編號 4)班級名稱 5)試卷份數(shù) 6)存在問題 7)備注 2.5.2基本數(shù)據(jù)表的實現(xiàn) 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 , 計科教務管理系統(tǒng) 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 , 計科教務管理系統(tǒng) 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課酬發(fā)放表 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 , 計科教務管理系統(tǒng) 11 trtime varchar (30) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY GO 9課酬統(tǒng)計表 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 計科教務管理系統(tǒng) 12 第三章 界面設計 3.1 登錄界面 圖 3-1 系統(tǒng)初始用戶: admin 密碼: 0 其主要實現(xiàn)細節(jié)代碼如下: 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(用戶名或密碼輸入錯誤三次,系統(tǒng)即將退出! ,提示 ,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 計科教務管理系統(tǒng) 13 begin application.MessageBox(用戶名或密碼輸入錯誤三次,系統(tǒng)即將退出! ,提示 ,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; 計科教務管理系統(tǒng) 14 end; end; end; 3.2 用戶管理 其主要實現(xiàn)細節(jié)代碼如下: procedure TUserForm.FormCreate(Sender: TObject); begin enable(self); edNO.Enabled:=true; edName1.Enabled:=true; ControlTheEnablePro(true); adoqUser.Open; StatusBar1.Panels0.Text:= 當前的記錄數(shù) : + IntToStr(adoqUser.RecordCount+1) + 條 ; StatusBar1.Panels1.Text := 操作用戶管理窗口 ; StatusBar1.Panels2.Text := 請慎重操作 ! ; TControlAccess(DBGrid).OnMouseWheel := GridMouseWheel; end; 計科教務管理系統(tǒng) 15 /鼠標滾動 DBGrid 的數(shù)據(jù)跟著改變 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;/ 初始狀態(tài)置顯示框為不可編輯狀態(tài) userqry := TAdoquery.Create(nil); userqry.Connection := dm.ADOConnection1; clearText(self); /self 表示自身已經(jīng)被創(chuàng)建完畢了 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; 計科教務管理系統(tǒng) 16 edit9.Text := fieldByname(UPhone).AsString; end; userqry.Free; / 窗體顯示的時候 用戶的角色選項 給 fcTreeView 的節(jié)點打上鉤 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; /隔行改變網(wǎng)格背景色: 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); /定義背景顏色 /定義網(wǎng)格線的顏色: 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 計科教務管理系統(tǒng) 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:= 當前的記錄數(shù) : + 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(姓名已經(jīng)存在 ,提示消息 , 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); 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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; 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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表示此時是增加狀態(tài) begin if isUnameExist(edName2.Text) then begin if Application.MessageBox( 用戶名已存在 ,是否繼續(xù)添加 !, 提示消息 ,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 計科教務管理系統(tǒng) 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表示此時是修改狀態(tài) 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(修改成功! ); 計科教務管理系統(tǒng) 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); 計科教務管理系統(tǒng) 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(系統(tǒng)管理員不能被刪除 !,警告 , 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; 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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 角色管理 計科教務管理系統(tǒng) 30 其主要實現(xiàn)代碼如下: 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; 計科教務管理系統(tǒng) 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; 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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 計科教務管理系統(tǒng) 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(系統(tǒng)管理員不能被刪除 !,警告 , mb_IconError) else if RoleQry.RecordCount0 then begin application.MessageBox(該角色暫時不能被刪除 !,警告 , mb_IconError); 計科教務管理系統(tǒng) 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(系統(tǒng)管理員不能被修改 !,警告 , 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; 計科教務管理系統(tǒng) 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; 計科教務管理系統(tǒng) 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; 計科教務管理系統(tǒng) 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; /隔行改變網(wǎng)格背景色: 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); /定義背景顏色 /定義網(wǎng)格線的顏色: 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); /畫藍色的橫線 計科教務管理系統(tǒng) 40 Pen.Color := clbtnface; /定義畫筆顏色 (蘭色 ) MoveTo(Rect.Right, Rect.Top); /畫筆定位 LineTo(Rect.Right, Rect.Bottom); /畫綠色 end; end; /鼠標滾動 DBGrid 的數(shù)據(jù)跟著改變 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 總課表 計科教務管理系統(tǒng) 41 其實現(xiàn)代碼如下: 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 計科教務管理系統(tǒng) 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; /隔行改變網(wǎng)格背景色: 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); /定義背景顏色 /定義網(wǎng)格線的顏色: DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); with (Sender as TDBGrid).Canvas do /畫 cell 的邊框 begin Pen.Color := $00ff0000; /定義畫筆顏色 (藍色 ) MoveTo(Rect.Left, Rect.Bottom); /畫筆定位 計科教務管理系統(tǒng) 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; 計科教務管理系統(tǒng) 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; 計科教務管理系統(tǒng) 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; 計科教務管理系統(tǒng) 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 顱內壓力監(jiān)測芯片行業(yè)技術發(fā)展策略研究
- 紡織企業(yè)生產(chǎn)設備安全操作規(guī)程
- 綠色環(huán)保貓砂行業(yè)深度解析
- 2025至2030中國自行車部件行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 文化遺產(chǎn)保護工程質量保證措施
- 健康養(yǎng)生:中草藥產(chǎn)品開發(fā)策略
- 2025至2030中國膳食纖維糖果行業(yè)市場發(fā)展分析及商業(yè)模式與投融資報告
- 2025至2030中國腦膜炎奈瑟菌感染藥物行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國能源和公用事業(yè)分析行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國胃癌藥物行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 婚前協(xié)議(保護女方利益)
- 奉賢區(qū)教育系統(tǒng)師德師風建設學習測試附有答案
- 西方經(jīng)濟學(第二版)完整整套課件(馬工程)
- 扶貧農(nóng)產(chǎn)品購銷合同協(xié)議(農(nóng)產(chǎn)品購銷合同模板)
- 汽車維修高級工考試試題及參考答案
- 檢驗科安全管理制度匯總
- GB/T 5782-2016六角頭螺栓
- GB/T 23445-2009聚合物水泥防水涂料
- GB/T 13451.2-1992著色顏料相對著色力和白色顏料相對散射力的測定光度計法
- GB/T 11264-2012熱軋輕軌
- 山東省中小學校檔案管理暫行辦法
評論
0/150
提交評論