《數據庫系統》
課程設計
題
目: :
考勤管理系統
專
業:
計算機科學與技術
年
級:
大二
班
級: :
學
號:
姓
名:
指導老師
: :
完成時間
: :
201 7年 6 6 月 月 8 8 號
目錄 一、實驗目得誤錯? 錯誤! 未定義書簽。
二、實驗平臺誤錯? 錯誤! 未定義書簽。
三、實驗內容誤錯? 錯誤! 未定義書簽。
四、實驗要求誤錯? 錯誤! 未定義書簽。
五、實驗步驟誤錯? 錯誤! 未定義書簽。
1 1、 、 析分求需統系? 系統需求分析 .................................................................................. 錯誤! 未定義書簽。
1、1 系統功能分析誤錯? 錯誤! 未定義書簽。
1、2 系統功能模塊設計(劃分)誤錯? 錯誤! 未定義書簽。
1、3 與其它系統得關系誤錯? 錯誤! 未定義書簽。
1、4 誤錯 ......................................................................... 圖程流據數? 錯誤! 未定義書簽。
2 2 、 計 數據庫設計誤錯? 錯誤! 未定義書簽。
2、1 誤錯 ..................................................................... 析分求需庫據數? 錯誤! 未定義書簽。
2、2 誤錯?計設構結念概庫據數? 錯誤! 未定義書簽。
2、3 數據庫邏輯結構設計誤錯? 錯誤! 未定義書簽。
2、4 使用 PowerDesigner16進行數據庫得設計與建立誤錯? 錯誤! 未定義書簽。
2、5 誤錯 .............................. 計設得面界行進 8 PR eruxA 用使? 錯誤! 未定義書簽。
3 3 、 各功能模塊得設計與實現 ........................................................... 錯誤! 未定義書簽。
3、1 誤錯 ................................................................................. 明說能功? 錯誤! 未定義書簽。
3、2 誤錯?計設面界戶用? 錯誤! 未定義書簽。
3、3 誤錯 ................................................................. 現實得塊模能功各? 錯誤! 未定義書簽。
4 4 、 系統實現 ..................................................................................................................... 14 4、1 誤錯 ....................................................................... 計設體總統系? 錯誤! 未定義書簽。
4、2 誤錯?現實得式方接連 CBDO? 錯誤! 未定義書簽。
4、3 登陸界面得實現 ................................................................... 錯誤! 未定義書簽。
4、4 注冊界面得實現 ................................................................... 錯誤! 未定義書簽。
4、5 找回密碼得實現 ................................................................... 錯誤! 未定義書簽。
4、6 主界面得實現 ....................................................................... 錯誤! 未定義書簽。
4、7 誤錯 ......................................................... 現實得置設間時班下上? 錯誤! 未定義書簽。
4、8 考勤修改得實現誤錯? 錯誤! 未定義書簽。
4、9 出勤記錄得實現 ................................................................... 錯誤! 未定義書簽。
4、10 加班記錄得實現 ............................................................... 錯誤! 未定義書簽。
4、11 誤錯 ................................................................... 現實得錄記假請? 錯誤! 未定義書簽。
4、12 誤錯 ................................................................... 現實得錄記差出? 錯誤! 未定義書簽。
4、13 誤錯 ............................................... 現實得除刪錄記與計統勤考? 錯誤! 未定義書簽。
六、
得 實驗心得誤錯? 錯誤! 未定義書簽。
示 七、部分代碼展示誤錯? 錯誤! 未定義書簽。
一、 實驗目得
數據庫系統課程設計就是為了配合數據庫原理及應用開發而設置得,就是計算機科學與技術、網絡工程、信息安全、物聯網工程、軟件工程等專業集中實踐得教學環節,就是將關系數據庫理論知識轉化為解決實際問題能力得重要環節。數據庫系統課程設計目得在于加深對關系數據庫理論知識得理解,通過使用具體得 DBMS,掌握一種實際得數據庫管理系統并掌握其操作技術,熟練掌握使用數據庫前端開發工具(如 VB、 C++、 Java、 Delphi、 PowerBuilder 等),進一步提高同學們運用數據庫技術解決實際問題得能力。
二、實驗平臺 ? PowerDesigner ? Axure
? Sql sever 2005 ? QT 5、6 三、實驗內容 目前市面上流行得后臺數據庫管理系統有:適合大型企業得 Oracle,適合中小型企業得 SQL
SERVER,以及開源得 MySQL.考慮到數據庫管理系統得易操作性以及實驗室得實際情況,本次課程設計推薦使用 SQL
SERVER 作為課程設計得后臺數據庫管理系統,也可以使用 MySQL 或 Oracle 等.前臺數據庫應用開發工具有 VB、PB、Delphi、VC、Java,以及廣泛流行于互聯網上得、NET、J2EE 技術等.、NET、J2EE 技術采用得就是典型得 B/S 計算模式,就是大學后續課程涉及到得開發技術,目前不適合本次課程設計實踐教學開發環境。經典得桌面數據庫應用開發就是典型得 C/S 計算模式,即應用數據庫前端開發工具編寫客戶端程序,通過客戶端程序來連接與訪問后臺數據庫。考慮到同學們都學習過C/C++,因此,本次選用 VC++作為前臺數據庫開發工具(也可以選用 VB、Delphi、Java 等)。
兩周得課程設計要求同學們開發一個小型數據庫管理信息系統。所設計得小型管理信息系統應包含查詢、插入、刪除、修改、統計、用戶權限管理等基本功能,界面采用菜單或對話框得形式。根據同學們所選得設計課題,給出系統需求分析,設計出系統得概念模型、邏輯模型,用 SQL 語言實現數據庫得建立、應用與維護,最后寫出詳細得設計說明書。
四、實驗要求 考勤制度就是每個企事業單位所必需得,計算機得出現使員工出勤情況得記錄與統計變得十分簡單。
考勤管理系統得主要功能如下: ? 上下班時間得設定。上下班時間相對固定,可保存在客戶端得設置文件中。
? 員工出入單位得情況記錄.出入情況主要由考勤機來記錄,但就是需要設置人工添加得功能,以針對特殊情況得處理。
? 請假、加班與出差情況得記錄. ? 每個月底進行整個月得出勤情況統計. 考勤系統記錄了員工上下班得情況,為工資管理直接提供每個月工作時間得統計結果,用以計算工資。同時考勤系統也需要其它系統提供得員工、部門等信息。
五、實驗步驟 1. 系統需求分析
1.1 系統功能分析 考勤管理系統得主要功能如下: ? 上下班時間得設定。上下班時間相對固定,可保存在客戶端得設置文件中。
? 員工出入單位得情況記錄。出入情況主要由考勤機來記錄,但就是需要設置人工添加得功能,以針對特殊情況得處理。
? 請假、加班與出差情況得記錄。
? 每個月底進行整個月得出勤情況統計. 1.2 系統功能模塊設計(劃分) 本系統功能模塊如圖 1 所示.
1.3 與其它系統得關系 考勤系統記錄了員工上下班得情況,為工資管理直接提供每個月工作時間得統計結果,用以計算工資.同時考勤系統也需要其它系統提供得員工、部門等信息。
1.4 數據流程圖 系統得數據流程如圖 2 所示。出勤得原始時間記錄主要來源于考勤機,并且以固定格式保存得數據庫中。考勤管理系統得任務就是如何處理這些數據。
2. 數據庫設計
2.1 數據庫需求分析 根據數據流程,可以列出以下管理系統所需得數據項與數據結構 ? 出勤記錄:記錄號、員工、出入情況、出入時間. ? 請假記錄:記錄號、員工、假期起始時間、假期結束時間、請假緣由。
? 加班記錄:記錄號、員工、加班時間長度、日期。
? 出差記錄:記錄號、員工、出差起始時間、出差結束時間、具體描述。
? 月度考勤統計:記錄號、員工、年月、累計正常工作時間、累計請假時間、累計加班時間、累計出差時間、遲到次數、早退次數、曠工次數 所需得外部數據支持: ? 人員信息:員工號、密碼、權限、姓名、部門、當前狀態等 ? 部門設置:部門編號、名稱等 2.2 數據庫概念結構設計 圖 3 就是本系統所需數據得 E-R 模型圖。
2.3 數據庫邏輯結構設計 根據系統得 E-R 圖,總共需要 8 個數據表得數據支持。其中人員信息與部門設置可以使用人事管理系統中已有得數據表,而出勤記錄、月度考勤統計、請假、加班、出差表與上下班時間表需要獨立設計。這 8 個數據表得結構如表 1 到表 8所示. 表 1
ATTENDANCE 出勤記錄表 名稱 代碼 數據類型 記錄編號 ID Number (20) 出入狀態 IN_OUT Characters (2) 出入時間 IO_TIME Date & Time 表 2
ATTENDANCE_STAT月度考勤統計表 名稱 代碼 數據類型 記錄編號 ID Number (20) 統計年月 YEAR_MONTH Date & Time 累計工作時間 WORK_HOUR Integer 累計請假時間 LEAVE_HDAY Integer 累計加班時間 OVER_HOUR Integer 累計出差時間 ERRAND_HD Integer
AY 遲到次數 LATE_TIMES Integer 早退次數 EARLY_TIMES Integer 曠工次數 ABSENT_TIMES Integer 表3
LEAVE 請假記錄表 名稱 代碼 數據類型 記錄編號 ID Number (20) 起始時間 START_TIME Date & Time 結束時間 END_TIME Date & Time 緣由 REASON Text 表4
OVERTIME 加班記錄表 名稱 代碼 數據類型 記錄編號 ID Number (20) 加班時間 WORK_HOURS Integer 日期 WORK_DATE Date & Time 表 5
ERRAND 出差記錄表 名稱 代碼 數據類型 記錄編號 ID Number (20)
起始時間 START_TIME Date & Time 結束時間 END_TIME Date & Time 具體描述 DESCRIPSION Text 表 6
PERSON 員工個人信息表 名稱 代碼 數據類型 員工號 PERSON_ID Number (20)
密碼 PERSON Variable characters (20)
權限 AUTHORITY Text 姓名 NAME Variable characters (20) 性別 SEX Characters (2) 生日 BIRTHDAY Date & Time 所在部門 DEPARTMENT Variable characters (20) 職務 JOB Variable characters (20)
受教育程度 EDU_LEVEL Variable characters (20) 專業技能 SPECIATY Text 家庭住址 ADDRESS Text
聯系電話 TEL Number (20)
電子信箱 EMAIL Text 當前狀態 STATE Characters (2) 備注 REMARK Text 表 7
DEPARTMENT部門信息表 名稱 代碼 數據類型 部門編號 ID Number (20) 部門名稱 NAME Text 部門經理 MANAGER Variable characters (20)
簡介 INTRO Text 表8 muting schedule 上下班時間表 名稱 代碼 數據類型 季節 Season Variable characters (20) 上班 Go_to_work Date & Time 下班 Go_off_work Date & Time 2.4 使用 PowerDesigner16進行數據庫得設計與建立
Power Designer 就是 Sybase 公司得 CASE 工具集,使用它可以方便地對管理信息系統進行分析設計,她幾乎包括了數據庫模型設計得全過程.利用Power Designer 可以制作數據流程圖、概念數據模型、物理數據模型,還可以為數據倉庫制作結構模型,也能對團隊設計模型進行控制. SQL Server 就是Microsoft 公司推出得關系型數據庫管理系統.數據庫引擎為關系型數據與結構化數據提供了更安全可靠得存儲功能,使您可以構建與管理用于業務得高可用與高性能得數據應用程序。
具體過程如下: ? 打開 PowerDesigner16,新建一個概念模型項目,將上面進行需求分析與數據庫設計所得得表在軟件中表示出來,同時將各個表之間得聯系給關聯好。
? 概念模型設計好之后,選擇 Tools -> Generate Physical Date Model ,在 DBMS 選項中選擇想要生成腳本得對應得數據庫,我這里選擇得就是對應得 Microsoft SQL Server 2005 ,點擊確定即可生成對應數據庫得物理模型。
? 生成物理模型之后,再檢查下實體之間就是不就是有一些與預計得不同得地方,
有得話則就是概念模型得設計不正確,需要重復第一步,沒有得話就可以繼續下一步。
? 檢查完物理模型之后,就可以將建立得模型以 SQL腳本得形式導出來,具體操作就是 Datebase -> Generate Datebase ,再點確定就可以將腳本導出來. ? 打開SQL Server Management Studio ,在自己得數據庫位置單擊右鍵,選擇 新建查詢 ,然后導入上一步生成得 SQL 腳本,選擇 執行 即可將在 PowerDesigner16 中設計好得物理模型生成在 SQL Server Managemenat Studio 中,至此,數據庫得設計與建立工作完成。
2.5 使用 Axure RP 8 進行界面得設計 Axure RP 就是美國Axure Software Solution公司旗艦產品,就是一個專業得快速原型設計工具,讓負責定義需求與規格、設計功能與界面得專家能夠快速創建應用軟件或Web 網站得線框圖、流程圖、原型與規格說明文檔。
具體過程如下:(以登陸界面為例)
? 首先明確登錄界面需要多少得輸入框與標簽以及按鈕,需要多少就拖多少到中間得空白處去。
? 為了能夠更好地理解各個控件就是干什么用得,最好把對象名給改成自己能夠理解得。
? 按照自己喜歡得風格擺放各個控件得位置,調整屬性。
? 具體教程可以參考百度。
3. 各功能模塊得設計與實現
3.1 功能說明 a) 上下班時間設置 系統默認采用每個季節八點上班,晚上十點下班,在上下班時間設置模塊中能夠更改選中季節得上下班時間. b) 添加修改出勤記錄 通過系統選用上班(I)或者下班(O)進行出勤記錄得添加,如果上班記錄添加得時間晚于當個季節得上班時間,則會在遲到記錄中加一,下班也就是同樣得道理。
c) 加班記錄 通過系統可以選擇添加加班小時數,同時添加加班記錄得時刻會被記錄在記錄表中。
d) 請假記錄 通過系統可以添加請假記錄,選擇請假得起始時間與結束時間后,系統會自動
將請假得時間記錄到記錄表中. e) 出差記錄 通過系統可以添加出差記錄,選擇出差得起始時間與結束時間后,系統會自動將出差得時間記錄到記錄表中。
f) 考勤統計 系統可以自動匯總出勤表、加班表、請假表、出差表得數據,計算出每個員工得考勤情況如加班小時數與遲到次數等等。
3.2 用戶界面設計 完成數據庫創建與功能說明以后,我們可以進行下一步工作,即設計用戶界面。
a) 登錄認證窗口 登錄認證采用兩種身份驗證方式,管理員方式與員工方式。
b) 主窗體 主窗體用來選擇所要執行得功能。
c) 上下班時間設置窗體 上下班時間窗體用來設置選中季節得對應上下班時間。
d) 考勤修改窗體 考勤修改窗體用來記錄每次得上下班時間.
e) 添加修改出勤記錄界面 出勤修改界面用來修改出勤記錄,如遲到次數與早退次數等等。
f) 加班記錄界面 加班記錄界面用來記錄加班信息.
g) 請假記錄界面 請假記錄界面用來記錄請假信息.
h) 出差記錄界面 出差記錄界面用來記錄出差信息.
i) 考勤統計窗口 考勤統計窗口用來顯示或者全部刪除或者指定刪除統計信息.
j) 注冊窗口 注冊窗口用來注冊新員工信息。
k) 忘記密碼窗口 忘記密碼窗口用來重置密碼。
l) 提交成功窗口 提交成功窗口用來顯示提交就是否成功。
3.3 各功能模塊得實現 a) 數據模塊得創建 數據模塊得創建通過導入 PowerDesignr16 生成得腳本文件生成,導入得就是數據得結構,也可以與腳本一起導入數據,但就是我選擇得就是手動輸入數據。
b) 上下班時間設置 上下班時間得設置在與數據庫連通之后,首先通過select 語句查找出當前選擇得季節得上下班時間,然后通過update 進行上下班時間得更新。
c) 添加修改出勤記錄 出勤記錄得修改首先通過 select 查詢到對應員工號,如果沒有對應員工號則詢問就是否要添加到員工表中,如果添加得話,順便也會給統計表中插入一條新員工得記錄。查詢成功后即可選擇遲到次數與早退次數等等,輸入相應得值再按下提交(update)后即可將出勤信息修改。
d) 加班記錄 加班記錄得增加首先通過 select 查詢到對應員工號,如果沒有對應員工號則詢問就是否要添加到員工表中,如果添加得話,順便也會給統計表中插入一條新員工得記錄。查詢成功后即可增加加班信息,加班信息包括加班時長與加班日期,按下提交(insert)后即可將加班記錄增加到加班記錄表中。
e) 請假記錄 請假記錄得增加首先通過 select 查詢到對應員工號,如果沒有對應員工號則詢問就是否要添加到員工表中,如果添加得話,順便也會給統計表中插入一條新員工得記錄。查詢成功后即可增加請假信息,請假信息包括請假得起始時間與結束時間以及請假得緣由,按下提交(insert)后即可將請假記錄增加到請假記錄中。
f) 出差記錄 出差記錄得增加首先通過 select 查詢到對應員工號,如果沒有對應員工號則詢問就是否要添加到員工表中,如果添加得話,順便也會給統計表中插入一條新員工得記錄。查詢成功后即可增加出差信息,出差信息包括出差得起始時
間與結束時間以及出差得緣由,按下提交(insert)后即可將出差記錄增加到出差記錄中。
g) 考勤統計 考勤統計通過將各個分表如出勤表、請假表等表進行匯總,匯總出得數據存入考勤統計表中。
4. 系統實現
4.1 系統總體設計 系統總體采用面向對象設計方法進行設計開發。對象指得就是類得實例.它將對象作為程序得基本單元,將程序與數據封裝其中,以提高軟件得重用性、靈活性與擴展性。加上 QT 所采用得就就是 C++得編程方法,選用面向對象編程方式成為了一種必然。
從以上對數據庫與功能得分析總結出本系統需要一個登錄模塊,一個注冊模塊,一個找回密碼模塊,一個功能選擇模塊,一個上下班時間設置模塊,一個出勤登記模塊,一個考勤修改模塊,一個請假登記模塊,一個出差登記模塊,一共就是九個模塊。
ODBC數據庫訪問技術只適用于windows系統,因為需要在ODBC驅動程序管理器中進行數據源注冊,而只有 windows 才集成了 ODBC驅動程序管理器(“控制面板/管理工具/數據源”)。ADO(ActiveX Data Object)具有跨系統平臺特性,它直接對 DBMS 數據庫進行操作,即系統中必須有 DBMS,但不需要驅動程序,不需要注冊數據源,所以具有很好得可移植性。由于開發環境選在Windows XP,使用得數據庫為Microsoft SQL Server 2005,因此采用ODBC得連接方式而不就是 ADO 方式。
得益于采用面向對象得方式開發,軟件在開發過程中得測試可以采用單元測試方法,獨立測試每個模塊即可,最后再組裝到一起進行集成測試,這樣可以盡可能地節省時間。
4.2 ODBC 連接方式得實現 開放數據庫連接(Open Database Connectivity,ODBC)就是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫得一個組成部分,它建立了一組規范,并提供了一組對數據庫訪問得標準API(應用程序編程接口)。這些 API 利用 SQL來完成其大部分任務。ODBC本身也提供了對 SQL 語言得支持,用戶可以直接將 SQL 語句送給 ODBC。這里我們只需要知道基本得 ODBC連接方式與配制方法即可。
Windows 已經包含了應用程序、驅動管理器、驅動程序以及數據源,我們所要做得就就是配置好數據源,具體配置方法如下:
? 打開 控制面板
—> 管理工具 -〉 數據源(ODBC)。
? 單擊 添加 按鈕,準備添加一個新得數據源,這個數據源就是與自己所寫得程序相關得.填寫好名稱,這個名稱與后面程序進行 ODBC 連接有至關重要得聯系,服務器選擇數據庫所在得服務器,完畢之后選擇下一步。
? 如圖所示選擇連接方式,輸入正確得賬號密碼,單擊下一步。
? 默認得數據庫更改為要操作得數據庫,點擊下一步.
? 一直按下一步直到完成,然后單擊 測試數據源 ,如果測試成功則 ODBC配置成功,可以進行接下來得工作.
接下來就就是在QT 中實現使用 ODBC 方式連接數據庫: ? 在QT中使用數據庫操作需要添加對應得頭文件,以及在工程文件中添加對SQL得支持.
? 添加完成后即可通過代碼進行數據庫得連接
? 其中,QSqlDatebase::addDatebase(“QODBC”)
為添加 ODBC 得驅動到 QT程序中,沒有驅動得話也就無法正確連接數據庫.setHostName("416-12”) 為設置想要連接得主機得名字,如果就是遠程服務器得話也可以直接輸
入 IP 地址。setDatabaseName("sqlserver")
為設置數據庫得連接名,這里就用到了之前設置數據源時得名稱,這個連接名需要與數據源里面得名稱一樣才能連接。setUserName("sa") 與 setPassword("sa520")
分別為設置登陸賬號與密碼,如果采用得就是Windows賬戶登陸得話就不需要設置這兩項,不就是得話就需要設置。最后得那個 open() 就是用來判斷就是不就是已經打開對應得數據庫,成功得話會返回 true ,否則就就是 false ,表示不成功,需要重新設置。
此外,在 Microsoft SQL Server Management Studio中可以直接導出對應表得增、刪、查、改腳本,具體方法如下:
? 到這里也就結束了 ODBC 連接方式得實現,接下來可以根據對應得功能寫代碼了。
4.3 登陸界面得實現 登錄界面所需要得東西主要就是用戶與管理員單選框、賬號與密碼輸入框、登錄按鈕、注冊賬號按鈕與找回密碼按鈕,這里列出我得一些主要得控件: 控件類型 控件名 用途說明 QLabel TitleLabel 標題 QPushButton RegisterButton 注冊
ForgetPushButton 忘記密碼
LandButton 登陸
pushButton 重置輸入框 QRadioButton user_radioButton 用戶按鈕
admin_radioButton 管理員按鈕 QLineEdit AccountEdit 賬戶輸入
PasswordEdit 密碼輸入 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是: ? 四周得彈簧就是用來固定比例得,這樣可以在改變窗口大小得時候動態改變各個控件得大小。
? 背景得改變放在該類得構造函數中,使用自動填充全部。
? 密碼輸入時顯示為加密模式,使用 ui->PasswordEdit—〉setEchoMode(QLineEdit::Password);
? 回車得焦點設置為登陸按鈕
? 按下登陸或注冊或忘記密碼時會將當前窗口隱藏,同時打開對應得窗口。
4.4 注冊界面得實現 用戶注冊界面主要用到得就是兩個按鈕,一個提交,一個返回,其她得均為輸入框,主要控件如下:
控件類型 控件名 用途說明 QPushButton SubmitButton 提交
ReturnButton 返回 QLineEdit PersonNumberLineEdit 輸入用戶名
PasswordLineEdit 輸入密碼
NameLineEdit 輸入姓名
TELLineEdit 輸入手機號碼 QDate BirthdayDateEdit 選擇生日 在QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是:
? 必須輸入得為員工號,其她可以填也可以不填,不填得話就找不回密碼。
4.5 找回密碼得實現 找回密碼界面主要使用三個按鈕,四個輸入框,部分主要控件如下: 控件類型 控件名 用途說明 QPushButton PasswordPushButton 確認用戶名
SubmitPushButton 提交
ReturnPushButton 返回 QLineEdit PersonNumberLineEdit 輸入用戶名
NameLineEdit 輸入密碼
TELLineEdit 輸入手機號
NewPasswordLineEdit 輸入新密碼 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是: ? 如果注冊時沒有輸入姓名與手機號,在這里就是找不回密碼得,只有聯系管理員在數據庫中修改。
4.6 主界面得實現
主界面主要使用七個按鈕,部分主要控件如下:
控件類型 控件名 用途說明 QPushButton WorkSetButton 上下班時間
WorkAttendanceButton 考勤修改
AttendanceButton 出勤管理
OverTimeButton 加班管理
LeaveButton 請假管理
ErrandButton 出差管理
WorkAttendanceStatisticsButton 考勤統計 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是:
? 四周得彈簧與之前得一樣,都就是為了維持固定比例不變形。
? 每個按鈕就是交叉分布得,所以有圖得部分就是點不了得。
4.7 上下班時間設置得實現 上下班時間設置界面主要使用兩個顯示標簽,四個按鈕,兩個下拉框與兩個時間設置框,部分主要控件如下:
控件類型 控件名 用途說明 QLabel CurrentUpTimeShowLable 顯示當前上班時間
CurrentDownTimeShowLable 顯示當前下班時間 QPushButton UpSubmitButton 提交上班時間更改
DownSubmitButton 提交下班時間更改
InitializationButton 初始化上下班時間
BackButton 返回 QboBox up_season_boBox 上班季節下拉框
down_season_boBox 下班季節下拉框 QTimeEdit Down_timeEdit 下班時間設置框
Up_timeEdit 上班時間設置框 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是:
? 重置為初值只能重置當前頁面得,而不就是重置全部。
? 系統默認上班時間上午八點,下班時間晚上十點。
? 上下班時間表就是存在數據庫中得,而不就是存在程序之中. 4.8 考勤修改得實現 考勤修改界面主要使用九個按鈕,八個輸入框與七個顯示標簽,部分主要控件如下: 控件類型 控件名 用途說明 QPushButton PersonSubmitButton 提交員工號
returnButton 返回
ChangeWorkSubmitButton 工作時間修改提交
ChangeOvertimeSubmitButton 加班時間修改提交
ChangeLeaveSubmitButton 請假時間修改提交
ChangeErrandSubmitButton 出差時間修改提交
ChangeLateSubmitButton 遲到次數修改提交
ChangeLeaveearlySubmitButton 早退次數修改提交
ChangeAbsenteeismSubmitButton 曠工次數修改提交 QLineEdit PersonlineEdit 員工號輸入
WorkTimeChange_lineEdit 改變得工作時間
OverTimeChange_lineEdit 改變得加班時間
LeaveTimeChange_lineEdit 改變得請假時間
ErrandTimeChange_lineEdit 改變得出差時間
LateTimesChange_lineEdit 改變得遲到次數
LeaveEarlyTimesChange_lineEdit 改變得早退次數
AbsenteeismTimesChange_lineEdit 改變得曠工次數
QLabel CurrentWorkTimeNumberLabel 顯示當前工作時間
CurrentOvertimeTimeNumberLabel 顯示當前加班時間
CurrentLeaveTimeNumberLabel 顯示當前請假時間
CurrentErrandTimeNumberLabel 顯示當前出差時間
CurrentLateTimesNumberLabel 顯示當前遲到次數
CurrentLeaveearlyTimesNumberLabel 顯示當前早退次數
CurrentAbsenteeismTimesNumberLabel 顯示當前曠工次數 在QT設計師模式中我設計完成得界面就是這樣得:
需要注意得就是: ? 只有輸入了員工表中已有得員工號才能進行更改。
? 如果輸入得員工號不存在,可以選擇新建一個員工信息, 4.9 出勤記錄得實現 出勤記錄界面主要使用三個按鈕,一個輸入框,兩個單選框與一個時間設置框,部分主要控件如下: 控件類型 控件名 用途說明 QPushButton PersonNumberSubmitButton 提交員工號
SubmitButton 提交出勤信息
ReturnButton 返回 QLineEdit PersonNumberEditLine 輸入員工號 QRadioButton IN_radioButton 選擇上班
OUT_radioButton_2 選擇下班 QDateTimeEdit IN_OUT_dateTimeEdit 上下班時間記錄 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是:
? 只有輸入了員工表中已有得員工號才能進行信息記錄。
? 必須選擇上班或者就是下班,否則會提示錯誤無法提交信息。
4.10 加班記錄得實現 加班記錄界面主要使用三個按鈕,一個輸入框,一個雙精度自旋框與一個時間設置框,部分主要控件如下: 控件類型 控件名 用途說明 QPushButton PersonNumberSubmitButton 提交員工號
SubmitButton
提交信息
ReturnButton
返回 QLineEdit PersonNumberlineEdit 輸入員工號 QDoubleSpinBox OvertimeLengthdoubleSpinBox 輸入加班時長 QDateTimeEdit OvertimeDatedateEdit 加班記錄日期 在 QT設計師模式中我設計完成得界面就是這樣得:
需要注意得就是:
? 只有輸入了員工表中已有得員工號才能進行信息記錄。
? 這里得加班日期就是指加班得那天而不就是進行記錄得那天。
4.11 請假記錄得實現 請假記錄界面主要使用三個按鈕,兩個輸入框與兩個時間選擇框,部分主要控件如下:
控件類型 控件名 用途說明 QPushButton PersonSubmitButton 提交用戶名
SubmitButton 提交信息
ReturnButton 返回 QLineEdit PersonEditLine 輸入員工號 QTextEdit ReasontextEdit 輸入請假備注 QDateTimeEdit LeaveBegin_dateTimeEdit 請假起始時間
LeaveEnd_dateTimeEdit 請假結束時間 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是: ? 只有輸入了員工表中已有得員工號才能進行信息記錄. ? 請假緣由字數沒有限制。
4.12
出差記錄得實現 出差記錄界面主要使用三個按鈕,兩個輸入框與兩個時間設置框,部分主要控件如下: 控件類型 控件名 用途說明 QPushButton PersonSubmitButton 提交員工號
SubmitButton 提交信息
ReturnButton 返回 QLineEdit PersonEditLine 輸入員工號 QTextEdit Description_textEdit 輸入出差備注 QDateTimeEdit ErrandBegin_dateTimeEdit 出差起始時間
ErrandEnd_dateTimeEdit 出差結束時間 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是: ? 只有輸入了員工表中已有得員工號才能進行信息記錄。
? 具體描述部分沒有字數限制。
4.13
考勤統計與記錄刪除得實現 考勤統計與記錄刪除界面主要使用四個按鈕與一個表格顯示視圖,部分主要控件如下: 控件類型 控件名 用途說明 QPushButton ChooseDeleteButton 選中行刪除
AllClearButton 全部刪除
ShowStatisticButton 顯示統計信息
ReturnButton 返回 QTableView showTableView 顯示表格 在 QT 設計師模式中我設計完成得界面就是這樣得:
需要注意得就是: ? 這里說得刪除不就是刪除當前行,而就是刪除與當前表格相關得員工得信息,如加班表、出勤表中得相關信息全部刪除. ? 選中刪除必須選中一行,否則會直接刪除第一行得員工相關信息. 六 、
實驗心得
本實驗如果采用得就是實驗指導書中得方法去做得話,過程會稍顯復雜,于就是我
選擇了我比較熟悉得 QT 來做,能夠節約時間,實驗期間主要心得與收獲如下: 1. 實驗本身并不就是很難,因為大多得實現方法就就是增、刪、查、改四項,真正有問題得就是實現部分,因為要考慮到各個組件與界面得交互操作. 2. 代碼本身不難寫,難得就是數據庫得設計與界面得美工,這兩個方面就是這么久一直沒有涉及過得,尤其就是界面得美工,對于我這種審美有點不對勁得人來說,別人覺得好瞧得我不一定覺得好瞧,我覺得好瞧得別人覺得很難瞧。數據庫得設計也就是,要詳細分析好各個數據項得數據類型,否則編寫代碼得時候會出現很嚴重得類型匹配錯誤。
3. 好得開發工具很重要.像VC++ 6、0 這個軟件年代太久遠了,但就是機房得電腦又裝不了我另一個比較熟悉得 VS2015,所以只能鎖定在 QT。而且 QT 得版本選擇也就是很重要,之前花了一天得時間下了又刪,從 QT5、9 開始一直試到了 QT5、6 才能在 XP系統上用,但就是磨刀不誤砍柴工,這點時間上得花費就是值得得. 4. 完成題目所要求得功能大概只花了兩天時間,但就是剩下得時間也不能玩,我剛好可以把最近學得 《重構 改善既有代碼得設計》這本書上得東西運用到實際上來,對我得代碼進行重構,這個過程很痛苦,因為有些地方改了之后就會報錯,花費很多時間來換條路進行重構。但就是結局就是開心得,因為最后完成了我得目標,使得代碼得整潔度、可讀性與魯棒度都得到了不小得提升。
七、 部分 代碼展示
// atte nd d a nce_cha n ge 、 cpp
vo id A t ten da nce_C ha nge ::
on_Pe rs onNum m be e rS ubm i tBu t to n_cl l i cked()
)
//確定按鈕
{ {
ex i st =
fals; e;
// / 判斷員工號就是否存在
personNum m b er = u i — 〉 Pe rso o n Numb er rEdi i t Line- - >text() ;
QSqlQuer y
sq q l qu er y;
s ql quer r y、e xec (" SELE C T [PE ER SON]”
" " F ROM
[TY X_ DB_At tendanc e] ] 、[db b o] ] 、[ PE RSO N]”);
whi le e ( sq l query 、 next()){
QString temp p P ers on n I D = sqlque e ry、va lue ( 0) 、 toSt r ing( );
if (t empPersonID 、 pare(pe r sonNum ber )
== 0 ){
// 如果存在與輸入得相同得員工號,則可以直接使用
ex i st =
true;
} }
}
if ( ex is t){
QMes s ageB ox: : :wa a r nin g( ( this,"Query w a s s uc c ce e s sful” , ”Que ry
w as
su c ce ss ful");
ui - >groupBox _2 2 — >show( );
ui —> > gr r oupB B o x_3 —> > sh ow();
ui- - 〉S S ub mit B utton — 〉 sh ow ();
} }
else {
// 不存在輸入得員工號, , 選擇新建或者不新建返回
in t r et
=
QMessage Bo x: :q q uesti on n ( th i s, " Query
fa iled" " , "Do
you want
t o c r eate a n e w empl oyee r e cord ?",Q Q Me ssag eB ox :
:Ye s
|
QM e ssageBox: :N N o, QMes sageBox :: : Yes) ) ;
i i f (ret == QM e ssageBo x: : :
Yes){
sqlque ry y 、 pre pa a re e ( ”IN SER T IN T O [TYX_DB_ At tend an ce] 、 [dbo ]、[P P ERS ON ]([P ER R S ON],[PASSWO R D])"
"VALU ES "
”( :
PERSO N,:PA S SW ORD )”) ;
s s q lque ry y 、 bin d Val ue( ( ”: P ERS ON" ,p er son n Nu u mb b er) ) ;
sql q uer y、 bindV a lu e(”:PASSWORD" , pe r sonNumber ); ;
sq q lquer y、e xec() ;
// 插入新員工到考勤表
st at _ inse rt t () ) ;
u u i — 〉g g ro o u pB ox _2- - 〉 sh ow();
ui -〉g ro upB B o x_3- - >show();
ui — 〉 Su bmi i tB ut ton — >sh ow( );
}
}
// 獲取記錄條數
QSqlQuery s qlq q u eryI D;
sqlqueryI D、 exec(" S ELECT [ID D ]" "
” FR OM [TYX_D B_ _ Atten d ance ]、 [d b o] 、[A A TT END A NCE ]") ) ;
i i f(s qlqueryID 、 last() ){
ID N umber = sqlq u eryID 、 va l ue(0) 、toIn t()
+ 1
;
} }
}
void Att en n da a nc c e _C h an ge e ::
on _ Submit Button_c li i ck ed ( ) //提交按鈕
{ {
Q Str in n g
IO_ r adio;
b b o ol io_ok
=
fals e;
if( ui i- - 〉 IN_ ra dio B ut ton n- - 〉isChecked( )){
IO _ radi o
= =
”I” ;
io_o k
=
true;
} }
el l se e
if ( ui- - 〉 OU T _radioButt on_ _ 2— > is Ch ecked() ){
IO_ rad i o =
"O "; ;
io_ ok
= true;
}
el s e{
QM essageBox:: warg ning ( this,” N
o choi ce" " , ”P l ease s ele e ct t
o o ne e !
");
} }
i f(io_ok){
QSqlQuery sqlq u ery ;
s s q lquer y、 prepare ( "INSE R T I NTO [T Y X_ DB B _A A tte e n dance] 、[d d b o] 、 [AT T ENDANC E]( [I I D], [P ER SON N ], [IN _O UT ], , [ IO _ TIME])" "
"V A LU ES ”
" (:ID"
" ":
,:
PE R SON" "
”,:IN _OUT”
” ,:IO_TIME )" );
sq lq uery 、 bin d Value(”:ID" , IDNumb b e r);
s ql q uer y、 bi nd Val u e(” :
PE RS SON ", p ersonNumbe r );
sql q uery 、b indValue ( ” :I I N _OU T”,IO _r r ad io ); ;
sqlquery 、b b i nd V alu e( ":IO_ TIME” ,u u i- - >IN _O UT_ d at e TimeEdit — >dat eT ime()
);
if(sql q uery 、e xec() ){
Q Q M essageB o x::inf orm m at t ion(thi s, ”Su b mi t
s s u ccessf ul ly !", ”S ub bm it
su cces sf ully!");
}
e e ls s e{ {
QMessageBox: :wa a r ning(t his, " Subm it
f f ai i l ur e ”,d b、la stErro r( ( )、tex x t()
);
} }
IDNumbe r
+ +;
}
s s tat _addWorkTi m e( ); ;
}
void
Atte n da nce_ Ch ang g e:
:stat_a ddWor kT ime (){ {
Q Tim m e
tim e
= QTime :
:curr e nt T im e() ;
// 獲得當前季節上下班時間
Q Time up _ti i m e = QTim e ::cu r rentTime () ;
Q Tim e
d d ow n_ ti me = QTime :: : cu rr ent t Ti me( ); ;
QSqlQ u er y
sqlque r y;
sq l query 、 prep a re(” SE LE C T [ Season], , [G o_ _ t o_ w or k],[ Go _of f f_w w o rk] ] ”
"F ROM [TYX X_ _D B_ At t t endance] 、[ dbo] 、[ [ m uting s ch h e dule]”
”WHERE [S e as on n] ]
=
?
”) ;
sq lq u ery 、a a d dBindValue( s easo n);
s qlquery 、 exec();
sqlquery 、n n e xt (); ;
up_ t ime =
sq lq ue ry y 、 va l ue( 1)、t oTim e() ;
dow n _time =
sqlque ry y 、 value(2) 、toTim e() ;
if f ( ui i — >IN_r a di o But ton- - >is Checked ( )){
// 如果遲到
i i f (time >
up_time ){
sql l q uery 、 prepa re e ( ” UP PD AT E
[ [ T YX_DB_Attenda n ce ]、 [dbo] 、[ATTENDANCE_STAT ]" "
” SET
[Y E AR_ MO O N TH] =
? ”
”,[ LATE_TIME S]
= [LA A TE _T IM M ES S ]
+ +
1 ”
"WHERE [PERSON ]
= ?
”) ;
sq q l quer y、a a d dBin d Value( QDateT im m e: : :
currentDateTi m e());
s ql qu er y、 addBi nd d Value ( pe r sonNumber);
sqlque ry y 、e xec (); ;
} }
} }
e e l se i f( ( ui i — >OUT_ r ad ioB utton_2 — 〉i sC h ec ke d() ){
// 如果早退
if ( tim e
< down_ t im e){
sq lque ry y 、 prep a re(" UP P DATE
[ [ T YX _DB _Att en da nc c e]、 [ db o]、 [ AT T END
AN N C E_STAT]"
”SE T
[Y YEA A R _MO NTH H ]
= ?
"
",[ EARLY_TIM ES S ]
= =
[ [ EA AR R L Y_TIMES ]
+ 1 "
”W HE E R E [P ERS ON N ]
= ?
" " ); ;
sq lq q u ery 、 addBind V alue( QDateTime :
:c u rren t DateT i me ( ));
s s q lquer、 y、 addBindV a lue(p e rso nNum b er ); ;
s s ql quer y、 exec();
} }
} }
//工作時間計算
int
worktim m e
= 0;
s qlquer、 y、p p r epare(”S E LE CT T
t1、 、 [PERSO O N ],
t1 、 [IO _T IM E ],
t2、 [IO_ TI I M E] "
"F R OM
[TY X_ _ DB_ At te nd an ce]、 、[ [ d bo ]、 [ATTEND A NCE] AS t 1
, ,
[ [ TY Y X_ _ D B_At t en da a n ce ]、[ dbo]、 、 [A T TENDANCE] AS
t2 "
”W H ERE t1 1 、[P ERS ON] ]
=
?
AN D
t1、 、 [IN_ O UT] =
’I’ AND t t 1、 [IN_OUT] <〉
t2、 、 [IN_OU T]
AND t1 、[ PERSON] = =
t t 2、[ PE R SON]");
s qlq ue ry 、a ddBin d Va l ue(pers o nNum ber ); ;
s s q lquer y、e e x ec();
while( sq q l query 、 next()){
if ( sqlq u er y、v alue (1 1 )、 toDat e() == sq l query 、 va l ue(2) 、 toD at t e( )) {
w orktim e
+= s q lq u ery 、v alue( 2) 、 toTim e() ) 、 hour( )
- -
sqlq ue ry 、 valu e(1 )、 toTim e () 、h our ( );
/ / /
qD ebu u g ()
〈< <
sq q lq ue ry y、 、e value ( 2)、 、 toDateTime() <<
s s q lq u er y、v alue(1)、 toD at eTi m e() < 〈
wor k time ;
}
} }
// 工作時間插入統計表
s ql q uery 、p re pe are ( ”UPD AT T E
[ [ T YX_D B_Att e nda n c e] 、[ dbo] 、 [A T TENDAN C E_ S TAT ]" "
"S E T [Y EAR_MONTH ]
= =
? "
" " ,[W OR K_ HOU R ] = ? " "
”WHERE [PERS ON] = ? " ); ;
sqlq u ery 、ad dBindVal ue(Q Q DateTime::cu r ren tDa teTime ( ));
sql qu u ery、a a dd d B indValu e (w orktime ); ;
sql que ry 、add d B indVa lue( per sonN N u mber ); ;
s s q lquery 、 exec( ); ;
} }
// / attendance_statistics 、c c pp p
v oid A tt t end ance_ S tatistics :: : on_C C hoos eD D e le t eB utt on_cli c ked( )
{ {
i i nt
ret =
QM e ssageBox::question(this,"C C l ear Thi s" " ," " D o y o u relly
w w a nt
to
cl e ar
thi s
ro w
?
",Q Messag eB B ox x :: :Y es |
QM e ssa g eBox:
:
:No , ,
QMessag e Box:
:
:Y es s)
); ;
if(ret == =
QMe s sageB ox x ::Y es ){ {
int t
r r ow
= ui i- -> > s howTa b leVi ew — >curr ent Index() 、r r ow ();
//
qDe bu g () < 〈
row;
Q Q Sq lQuer y
s ql qu u er y;
sql q uer y、p p r epare(”S ELECT
[PERS O N] "
"F R OM [TYX _DB B_A tte n dan ce e ]、[ [ d bo] 、[ATT T EN N DANCE_STAT ] ”);
sq lq q ue e ry y 、 exe c() ) ;
if ( sqlq u ery 、 seek ( row) ){
p p e rson Nam m e
=
sql q uery 、v al ue e ( 0) 、 toSt ri ng ( );
// / 刪除考勤
sqlqu ery y 、prep p are("DELETE FROM
[TY X_DB_Attendance] 、[ dbo] ] 、[A T TEND A NCE]”
”WH ERE
[PER S ON ]
= ?
” ); ;
sqlqu e ry 、 add B in d Val ue e(p ers o nName) ;
sql l q ue ry y 、 exec();
// 刪除加班
s qlquery 、 prep are ("DELET E
FROM [TY X_DB_Att e ndan ce e ]、[ [ dbo] ] 、[OVERT IM E ]"
"WHERE [ ...
推薦訪問: 課程設計 實驗 數據庫上一篇:黨員集體示范崗申報材料銀行女職工文明示范崗事跡申報材料
下一篇:抗擊疫情宣傳事跡
在偉大祖國73華誕之際,我參加了單位組織的“光影鑄魂”主題黨日活動,集中觀看了抗美援朝題材影片《長津湖》,再一次重溫這段悲壯歷史,再一次深刻感悟偉大抗美援朝精神。1950年10月,新中國剛剛成立一年,
根據省局黨組《關于舉辦習近平談治國理政(第四卷)讀書班的通知》要求,我中心通過專題學習、專題研討以及交流分享等形式,系統的對《習近平談治國理政》(第四卷)進行了深入的學習與交流,下面我就來談一談我個人
《習近平談治國理政》(第四卷)是在百年變局和世紀疫情相互疊加的大背景下,對以習近平同志為核心的黨中央治國理政重大戰略部署、重大理論創造、重大思想引領的系統呈現。它生動記錄了新一代黨中央領導集體統籌兩個
《真抓實干做好新發展階段“三農工作”》是《習近平談治國理政》第四卷中的文章,這是習近平總書記在2020年12月28日中央農村工作會議上的集體學習時的講話。文章指出,我常講,領導干部要胸懷黨和國家工作大
在《習近平談治國理政》第四卷中,習近平總書記強調,江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。從嘉興南湖中駛出的小小紅船,到世界上最大的執政黨,在中國共產黨的字典里,“人民”一詞從來都
黨的十八大以來,習近平總書記以馬克思主義戰略家的博大胸襟和深謀遠慮,在治國理政和推動全球治理中牢固樹立戰略意識,在不同場合多次圍繞戰略策略的重要性,戰略和策略的關系,提高戰略思維、堅定戰略自信、強化戰
《習近平談治國理政》第四卷集中展示了以習近平同志為核心的黨中央在百年變局和世紀疫情相互疊加背景下,如何更好地堅持和發展中國特色社會主義而進行的生動實踐與理論探索;對于新時代堅持和發展什么樣的中國特色社
在黨組織的關懷下,我有幸參加了區委組織部組織的入黨積極分子培訓班。為期一周的學習,學習形式多樣,課程內容豐富,各位專家的講解細致精彩,對于我加深對黨的創新理論的認識、對黨的歷史的深入了解、對中共黨員的
《習近平談治國理政》第四卷《共建網上美好精神家園》一文中指出:網絡玩命是新形勢下社會文明的重要內容,是建設網絡強國的重要領域。截至2021年12月,我國網民規模達10 32億,較2020年12月增長4
剛剛召開的中國共產黨第十九屆中央委員會第七次全體會議上討論并通過了黨的十九屆中央委員會向中國共產黨第二十次全國代表大會的報告、黨的十九屆中央紀律檢查委員會向中國共產黨第二十次全國代表大會的工作報告和《