




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
...wd......wd......wd...人事管理系統的設計摘要隨著計算機技術的飛速開展,計算機在企業管理中應用的普及,利用計算機實現企業人事管理勢在必行。本系統結合公司實際的人事管理制度,經過實際的需求分析,采用功能強大的VisualBasic6.0作為開發工具而開發出來的單機版人事管理系統。整個系統從符合操作簡便、界面友好、靈活、實用、安全的要求出發,完成人事管理的全過程,包括新進員工參加時人事檔案的建設、老員工的轉出、職位等的變動引起職工信息的修改、員工信息查詢、統計等人事管理工作以及新進員的新增、老員工修改等管理工作。經過實際使用證明,本文所設計的人事管理系統可以滿足公司人事管理方面的需要。關鍵詞:信息管理、人事管理、人事管理系統目錄第一章概述……………11、本課題的來源………12、本文的目的、內容及作者主要奉獻………………1第二章開好發工具的選擇……………2第三章系統調研及可行性分析………61、系統調研……………62、可靠性分析概述……………………63、技術可行性分析……………………7第四章系統分析………81、系統需求分析…………92、數據流程圖…………9第五章系統總體設計………………101、功能描述……………102、系統操作流程圖……………………11第六章系統詳細設計………………121、數據庫設計…………122、系統主要界面………13第七章系統測試……………………161、測試舉例……………162、測試工程……………173、測試方法……………18附錄原程序清單…………………20第一章概述本課題的來源隨著計算機技術的飛速開展,計算機在企業管理中應用的普及,利用計算機實現企業人事管理勢在必行。對于大中型企業來說,利用計算機支持企業高效率完成勞動人事管理的日常事務,是適應現代企業制度要求、推動企業勞動人事管理走向科學化、標準化的必要條件;計算機管理所無法比較的優點檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優點能夠極大地提高人事管理的效率,也是企業的科學化、正規化管理,與世界接軌的重要條件。不同的企業具有不同的人事管理制度,這就決定了不同的企業需要不同的人事管理系統。2、本論文的目的、內容及作者主要奉獻(1)目的:目前市面上流行的人事管理系統不少。但是,對于企、事業單位的人事管理系統來說,不需要大型的數據庫系統。只需要一個操作方便,功能實用,能滿足本中心對數據的管理及需求的系統。我們的目標就是在于開發一個功能實用、操作方便,簡單明了的人事管理系統。(2)內容能夠錄入人事的基本資料,在操作上能夠完成諸如添加、修改、刪除、按各種條件進展查詢、新用戶的設置及密碼修改等方面的工作,基本滿足人事日常業務的需要。(3)作者的主要奉獻本人獨立完成了此課題的研究與開發,包括調研、分析、設計、編碼、測試、文檔編寫等內容。第二章開發工具的選擇現在,市場上可以選購的應用開發產品很多,流行的也有數十種。目前在我國市場上最為流行、使用最多、最為先進的可用作企業級開發工具的產品有:Microsoft公司的VisualBasicMicrosoft公司的VisualCBorland公司的DelphiJava等等在目前市場上這些眾多的程序開發工具中,有些強調程語言的彈性與執行效率;有些則偏重于可視化程序開發工具所帶來的便利性與效率的得高,各有各的優點和特色,也滿足了不同用戶的需求。然而,語言的彈性和工具的便利性是密不可分的,只有便利的工具,卻沒有彈性的語言作支持,許多特殊化的處理動作必需要消耗數倍的工夫來處理,使得原來所標榜的效率提高的優點失去了作用;相反,如果只強調程續語言的彈性,卻沒有便利的工具作配合,會使一些即使非常簡單的界面處理動作,也會嚴重地浪費程序設計師的珍貴時間。作為數據庫系統的開發,VisualBasic是一個非常理想選擇。數據庫是MIS中的重要支持技術,在MIS開發過程中,若何選擇數據庫管理是一個重要的問題,目前,數據庫產品較多,每種產品都具有各自的特點和適用范圍,因此,在選擇數據庫時,應考慮數據庫應用的特點及適用范圍,本系統選用的數據庫語言VisualBasic語言,該開發工具具有很多長處:VisualBasic是一種可視化的、面對對象和條用事件驅動方式的構造化高級程序設計,可用于開發Windows環境下的種類應用程序。它簡單易學、效率高,且功能強大,可以與Windows的專業開發工具SDK相媲美,而且程序開發人員不必具有C/C++編程根基。在VisualBasic環境下,利用事件驅動的編程機制、新穎易用的可視化設計工具,使用Windows內部的應用程序接口(API)函數,以及動態鏈接庫(DLL)、動態數據交換(DDE)、對象的鏈接與嵌入(OLE)、開放式數據訪問(ODBC)等技術,可以高效、快速地開發出Windows環境下功能強大、圖形界面豐富的應用軟件系統。總的來說,VisualBasic具有以下特點:可視化編程:用傳統程序設計語言設計程序時,都是通過編寫程序代碼來設計用戶界面,在設計過程中看不到界面的實際顯示效果,必須編譯后運行程序才能觀察。如果對界面的效果不滿意,還要回到程序中修改。有時候,這種編程-編譯-修改的操作可能要反復屢次,大大影響了軟件開發效率。VisualBasic提供了可視化設計工具,把Windows界面設計的復雜性“封裝〞起來,開發人員不必為界面設計而編寫大量程序代碼。只需要按設計要求的屏幕布局,用系統提供的工具,在屏幕上畫出各種“部件〞,即圖形對象,并設置這些圖形對象的屬性。VisualBasic自動產生界面設計代碼,程序設計人員只需要編寫實現程序功能的那局部代碼,從而可以大大提高程序設計的效率。面向對象的程序設計4.0版以后的VisualBasic支持面向對象的程序設計,但它與一般的面向對象的程序設計語言(C++)不完全一樣。在一般的面向對象程序設計語言中,對象由程序代碼和數據組成,是抽象的概念;而VisualBasic則是應用面向對象的程序設計方法(OOP),把程序和數據封裝起來作為一個對象,并為每個對象賦予應有的屬性,使對象成為實在的東西。在設計對象時,不必編寫建設和描述每個對象的程序代碼,而是用工具畫在界面上,VisualBasic自動生成對象的程序代碼并封裝起來。每個對象以圖形方式顯示在界面上,都是可視的。構造化程序設計語言VisualBasic是在BASIC語言的根基上開展起來的,具有高級程序設計語言的語句構造,接近于自然語言和人類的邏輯思維方式。VisualBasic語句簡單易懂,其編輯器支持彩色代碼,可自動進展語法錯誤檢查,同時具有功能強大且使用靈活的調試器和編譯器。VisualBasic是解釋型語言,在輸入代碼的同時,解釋系統將高級語言分解翻譯成計算機可以識別的機器指令,并判斷每個語句的語法錯誤。在設計VisualBasic程序的過程中,隨時可以運行程序,而在整個程序設計好之后,可以編譯生成可執行文件(.EXE),脫離VisualBasic環境,直接在Windows環境下運行。事件驅動編程機制VisualBasic通過事件來執行對象的操作。一個對象可能會產生多個事件,每個事件都可以通過一段程序來響應。例如,命令按鈕是一個對象,當用戶單擊該按鈕時,將產生一個“單擊〞(CLICK)事件,而在產生該事件時將執行一段程序,用來實現指定的操作。在用VisualBasic設計大型應用軟件時,不必建設具有明顯開場和完畢的程序,而是編寫假設干個微小的子程序,即過程。這些過程分別面向不同的對象,由用戶操作引發某個事件來驅動完成某種特定的功能,或者由事件驅動程序調用通用過程來執行指定的操作,這樣可以方便編程人員,提高效率。訪問數據庫VisualBasic具有強大的數據庫管理功能,利用數據控件和數據庫管理窗口,可以直接建設或處理MicrosoftAccess格式的數據庫,并提供了強大的數據存儲和檢索功能。同時,VisualBasic還能直接編輯和訪問其他外部數據庫,如DBASE,FoxPro,Paradox等,這些數據庫格式都可以用VisualBasic編輯和處理。VisualBasic提供開放式數據連接,即ODBC功能,可通過直接訪問或建設連接的方式使用并操作后臺大型網絡數據庫,如SQLServer,Oracle等。在應用程序中,可以使用構造化查詢語言SQL數據標準,直接訪問服務器上的數據庫,并提供了簡單的面向對象的庫操作指令和多用戶數據庫訪問的加鎖機制和網絡數據庫的SQL的編程技術,為單機上運行的數據庫提供了SQL網絡接口,以便在分布式環境中快速而有效地實現客戶/服務器(client/server)方案。動態數據交換(DDE)利用動態數據交換(DynamicDataExchange)技術,可以把一種應用程序中的數據動態地鏈接到另一種應用程序中,使兩種完全不同的應用程序建設起一條動態數據鏈路。當原始數據變化時,可以自動更新鏈接的數據。VisualBasic提供了動態數據交換的編程技術,可以在應用程序中與其他Windows應用程序建設動態數據交換,在不同的應用程序之間進展通信。對象的鏈接與嵌入(OLE)對象的鏈接與嵌入(OLE)將每個應用程序都看作是一個對象(object),將不同的對象鏈接(link)起來,再嵌入(embed)某個應用程序中,從而可以得到具有聲音、影像、圖像、動畫、文字等各種信息的集合式的文件。OLE技術是Microsoft公司對象技術的戰略,它把多個應用程序合為一體,將每個應用程序看作是一個對象進展鏈接和嵌入,是一種應用程序一體化的技術。利用OLE技術,可以方便地建設復合式文檔(compounddocument),這種文檔由來自多個不同應用程序的對象組成,文檔中的每個對象都與原來的應用程序相聯系,并可執行與原來應用程序完全一樣的操作。動態鏈接庫(DLL)VisualBasic是一種高級程序設計語言,不具備低級語言的功能,對訪問機器硬件的操作不太容易實現。但它可以通過動態鏈接庫技術將C/C++或匯編語言編寫的程序參加到VisualBasic應用程序中,可以像調用內部函數一樣調用其他語言編寫的函數。此外,通過動態鏈接庫,還可以調用Windows應用程序接口(API)函數,實現SDK所具有的功能。第三章系統調研及可行性分析3.1系統調研正式開發管理信息系統之前進展調研是非常必要的,其必要性主要表現在以下幾個方面。〔1〕明確用戶的要求,以根據調查結果進展可行性分析,確認系統的開發是否可行。〔2〕提出新系統的人員并不都是系統研究人員,有些人對于其功能和處理數據的方法沒有明確的認識。它們只是根據自己業務工作的需要提出了要求,系統開發人員要對此進展詳細的調查和分析,確認用戶的要求可以通過現有的計算機技術實現,保證開發的管理信息系統的功能與用戶提出的要求相吻合。〔3〕企業的現行系統可能是手工系統,也可能是使用和計算機的系統,無論是何種情況,都要詳細地調查現行系統中信息處理的具體情況,系統內部功能構造,以便設計出一個合理的、好的新系統邏輯模型,為新系統的設計工作打好根基,保證整個系統開發的質量。總之,必要對現行系統進展詳細的調查,明確用戶需求,保證開發的新系統的功能與用戶的要求相吻合,防止消耗大量的人力、物力、財力,新系統的開發卻失敗的悲劇發生。3.2可行性分析概述可行性分析是在用戶的要求和系統調研的根基上進展的,對新系統的開發從社會、技術、經濟、管理等方面進展分析,并得出新系統的開發工作可行、不可行、需要修改、追加投資、暫緩開發、分步實施等方案和結論,最后完成可行性分析。可行性分析一般可定義為:可行性分析是在建設的前期對工程工程的一種考察和鑒定,對擬議中的工程進展全面與綜合的技術、經濟能力的調查,判斷它是否可行。(1)可行性分析階段的主要工作包括以下幾個方面:①新系統目標可行性分析:分析新系統的目標是否符合企業的現狀和開展的需要。②社會可行性分析:社會可行性分析主要是指管理信息系統的開發是否符合國家法律、下策,是否能夠與社會大系統實現良好的對接。③技術可行性分析:技術可行性分析是根據新系統的目標來衡量是否具備所需要的技術,包括系統開發人員數量和水平,硬件方面,軟件方面及其它應用技術。④經濟可行性分析經濟可行性分析主要是對開發新系統所投入的資金與系統投入使用后所帶來的經濟效益進展比較,確認新系統是否會給企業帶來一定的經濟效益。⑤管理可行性分析:管理可行性分析主要是分析企業現行的管理體制和企業領導是否具有現代化的管理意識和管理水平。3.3技術可行性分析技術可行性分析主要包括四個方面:目前有關的技術能否支持所開發的新系統;新系統開發人員的數量和水平,即人力資源;硬件和軟件資源。〔1〕技術支持:首先根據新系統的目標,考慮目前有關的技術能否支持所開發的新系統。這里討論的技術必須是已經普遍使用的,而不是待研究的或正在研究的。〔2〕硬件資源:開發管理信息系統所需的硬件資源包含以下兩個方面:系統開發人員在管理信息系統的開發過程中所需要的計算機設備及其有關的外部設備;管理信息系統開發成功投入使用后,使用單位所應具備的計算機設備及其有關的外圍設備。對硬件資源進展可行性分析時主要考慮計算機的主機內存、類型、功能、聯網能力、安全保護措施以及輸入/輸出設備,外存儲器和聯網數據通信設備的配置、功能、效率等指標是否符合系統方案設計要求,同時還要考慮計算機的性能/價格比。〔3〕軟件資源軟件資源的可行性分析主要考慮以下幾點是否滿足用戶的要求:①操作系統的選擇;②編譯系統的選擇;③數據庫管理系統的選擇;④高級編程語言的選擇;⑤漢字處理系統的選擇;⑥應用軟件包的選擇。本系統在開發前,與中心的領導和有關的操作人員密切溝通,認真聽取他們的意見,并吸收他們的積極觀點,使本系統的開發在相當大的程度上具有一定的先進性和合理性。第四章系統分析4.1系統需求分析系統分析是開發管理信息系統的關鍵性階段,是一個從不斷認識和逐步細化的過程,是下一階段的工作根基,是為下一階段進展物理方案設計、解決“若何做〞提供依據,基關鍵性主要表達在“理解需求〞和“表達需求〞兩方面。通過對現行系統的詳細調研,主要是從系統的角度理解用戶的需要,確定新系統的綜合要求,并提出這些需求的實現條件以及需求應到達的標準,也就是確定新系統要做什么,做到什么程度。這些需求包括:〔1〕功能需求。確定新系統應做什么,這是最主要的需求。〔2〕性能需求。給出所開發的新系統的技術性能指標,包括存儲容量限制、運行時間限制、安全保密性等。〔3〕環境需求。這是對系統運行以及所處環境的要求。例如,在硬件方面采用什么機型、有什么硬件設備等;在軟件方面,采用什么支持系統運行的系統軟件〔指操作系統、數據庫管理系統〕。〔4〕未來需求。這類要求是指目前不屬于系統開發的范圍,但將來隨著外界環境的變化以及系統的開展可能會提出的要求。了解這類要求的目的是在開發過程中,可對系統將來可能的擴展與修改做準備。一旦需要時,就比較容易進展補充和修改了。4.2數據流程圖數據流程圖是描述系統邏輯模型的主要工具,通過幾個特定的符號,可以綜合地反映出信息在系統中的使用、加工處理、傳遞、存儲的整體情況。數據流程圖是系統構造化分析行之有效的工具,它抽象地描述了系統數據處理的情況,但卻無法表達各個處理的詳細內容,因此還要對數據流程圖中出現的數據流和處理等做進一步的補充說明,這就是數據字典和變換邏輯說明。數據流圖人事主管人事主管員工基本信息員工基本信息工資管理假條信息檔案管理管理員工資管理假條信息檔案管理管理員會計員會計員圖4。1系統數據流圖第五章系統總體設計5.1.功能描述:該信息管理系統可以在Windows2000Server平臺上運行,開發工具采用VisualBasic語言開發。其工作流程為:用戶登錄通過權限判斷,普通用戶不能瀏覽、閱讀和查詢信息,指定用戶可以操作,可以進展信息錄入、修改和刪除的操作。系統的主要功能特點有:(1)系統登錄表單該表單的功能是在系統被訪問之前,要對進入系統的用戶進展安全性檢查,防止非法用戶進展系統破壞數據及威脅系統安全,防止不必要的損失。只有合法的用戶在輸入正確的密碼前方可進入系統。(2)主界面在該界面窗口中,共有文件、數據、關于等所有系統功能,用戶可以操作菜單的方式快捷地使用系統。(3)更改密碼:使用本表單可以方便地修改用戶的密碼,以防密碼泄露后對數據的安全性造成威脅。5.2系統操作流程圖:錯誤信息系統主界面錯誤信息系統主界面系統登錄界面系統登錄界面系統管理系統管理輸入操作員及密碼輸入操作員及密碼數據庫檢查密碼錯誤數據庫檢查密碼錯誤密碼正確密碼正確功能界面功能界面功能處理功能處理圖5-1系統操作流程圖第六章系統詳細設計6.1數據庫設計〔1〕職工信息數據表:字段字段名類型寬度小數位索引排序Nulls1職工編號數值型11否2姓名字符型20否3身份證號字符型18否4民族字符型10否5性別字符型4否6出生日期字符型20否7畢業學校字符型20否8學歷字符型20否9部門字符型20否10職稱字符型20否11上司字符型20否12字符型20否13EMAIL字符型20否14EDIT數值型11否15EDITTIME日期型8否16備注備注型50否〔2〕請假信息數據表:字段字段名類型寬度小數位索引排序Nulls1假條編號字符型6否2職工編號數值型11否3起始日期字符型20否4中止日期字符型20否5天數數值型6否6原由字符型50否7狀態字符型20否8批準人字符型20否9EDIT數值型11否10EDITTIME日期型8否11備注備注型10否〔3〕員工工資數據表:字段字段名類型寬度小數位索引排序Nulls1工資編號字符型50否2職工編號數值型11否3年份數值型6否4月份數值型6否5基本工資數值型11否6加班工資數值型11否7交通補助數值型11否8總工資數值型11否9考勤扣除數值型11否10保險扣除數值型11否11扣稅數值型11否12總扣除數值型11否13實際工資數值型11否14EDIT數值型11否15EDITTIME日期型8否16備注備注型10否6.2系統主要界面設計因為人事資料管理牽涉到個人隱私及公司密秘等多方面因素,所以一定要保密,并有專人管理,使用前身份確認就顯得非常重要,故在運行前要進展管理權限確認.以防止他人無意或惡意篡改.(圖6-1)圖6-1主界面圖其中登記表的界面如下:圖6-2登記表的界面密碼的修改:圖6-3密碼的修改界面登陸成功界面:圖6-4登陸成功界面查詢界面:圖6-5查詢界面第七章系統測試為了確保本系統能夠正常運行,需要在發布之后做一次較全面的測試。現將具體操作及過程舉例說明如下:7.1測試舉例〔1〕.測試用戶登陸是否成功:翻開人事管理系統,在“用戶名〞里填入root,“密碼〞框里我們填入root作為用戶登錄密碼。填寫完成點擊“確定〞按鈕,將會出現操作程序頁面,即該用戶已經登陸成功了。再運行程序,會有提示頁面出現:程序已經運行,不能再次裝載!〔2〕.測試其他用戶是否能夠登錄:翻開人事管理系統登錄頁面,輸入任意密碼,點擊“登錄〞按鈕。將出現密碼出錯提示頁面。然后點“確定〞返回人事管理系統登錄頁面。〔3〕.測試編輯功能是否成功:編輯功能:在登錄成功之后,即可進入相應的管理頁面,點擊“編輯〞,即出現編輯頁面,即可以修改和刪除員工的個人信息資料。最后保存。〔4〕.測試查詢功能是否成功:查詢功能:在登錄成功之后,點擊“查詢〞,在彈出的文本框,在里面輸入想要查找的資料,點擊“查詢〞按鈕,成功即可出現結果頁面,頁面內顯示查詢出來的員工資料內容,表示測試成功。〔5〕.用戶登出系統的測試:在管理操作已全部完成,需要退出程序的時候,在系統頁面“系統設置〞下拉菜單的有一個“退出〞的選項,點擊之后便可退出。也可以點“關閉〞退出。〔6〕.測試密碼更改:在以超級用戶登錄的情況下,在程序中打密碼設置,彈出文本框,顯示用戶列表。可以添加新的普通用戶,也可以刪除和制止普通用戶使用程序。在以普通用戶登陸情況下,翻開密碼設置選項,系統會提示該用戶為普通用戶,只可以修改自己的密碼。經過以上各項的測試,證明本系統完全可以正常運行,至此測試成功!7.2測試工程在MIS開發過程中采用了多種措施保證軟件質量,但是實際開發過程中還是不可防止地會產生過失,系統中通常可能隱藏著錯誤和缺陷,不經周密測試的系統投入運行,將會造成難以想象的后果,因此系統測試是MIS開發過程中為保證軟件質量必須進展的工作。大量統計資料說明,系統測試的工作量往往占MIS開發總工作量的40%以上。因此,我們必須重視測試工作。由于程序中隱藏的缺陷只在特定的環境下才有可靠顯露,系統缺陷通常是由于對某些特定情況考慮不周造成的。因此測試不是為了說明程序正確;成功的測試也不是沒有發現錯誤的測試。有意義的軟件測試應該是從“破壞〞軟件系統的角度出發,精心設計最有可以暴露程序系統缺陷的測試方案。因此軟件測試的目標應該是以盡可能少的代價和時間找出軟件系統中潛在的錯誤和缺陷。從產品角度看,測試方案中的測試工程包括軟件構造中的分系統層、子系統層、功能模塊層、程序模塊層中的各類模塊,從測試本身看,分為單元測試,組合測試,確認測試等。測試對象是隨不同階段而異的,最基本、最初的測試是單元測試,后面的組合測試、確認測試都是以被測過的模塊作為測試對象的。(1)單元測試:單元測試也稱模塊測試或程序測試,單元測試是對每個模塊單獨進展的,驗證模塊接口與設計說明書是否一致,對模塊的所有主要處理路徑進展測試且與預期的構造進展對照,還要對所有錯誤處理路徑進展測試。對源碼進展審查,對照設計說明書,表態地檢查源程序是否符合功能的邏輯要求,是進展單元測試前的重要工作工。單元測試一般是由程序員完成,也稱程序調試。(2)組合測試組合測試也稱集成測試或子系統測試,通常采用自頂向下測試和自底向上測試兩種測試方法。組合測試的對象是指已經通過單元測試的模塊,不是對零散模塊進展單個測試,而是用系統化的方法裝配和測試軟件系統,是一個嚴格的過程,必須認真地進展,其方案的產生和單元模塊測試的完成日期要協調起來,這種測試應在系統目標機上進展,造成系統應用的環境條件,除了開發局部工程負責人參加以外,還應該有相應系統的用戶參加,給評審員進展演示。(3)確認測試確認測試是對通過組合測試的軟件進展的,這些軟件已經存于系統目標設備的介質上,確認測試的目的是說明軟件是可以工作的,并且符合“軟件需求說明書〞中規定的全部功能和性能要求。確認測試是按照這些要求定出的“確認測試方案〞進展的。測試工作是由一個獨立的組織進展,而且測試要從用戶的角度出發。(4)系統測試系統測試是對整體性能的測試,主要解決各子系統之間的數據通信和數據共享問題以及檢測系統是否到達用戶的實際要求,系統測試的依據是系統分析報告。系統測試應在系統的整個范圍內進展,這種測試不只對軟件進展,而是對構成系統的硬、軟件一起進展。系統測試與建構同時進展或略慢。系統測試需要確認從頭到尾的功能正常才算完成,應當盡量防止系統測試延到工程末尾進展。(5)用戶驗收測試在系統測試完成后,進展用戶的驗收測試,它是用戶在實際應用環境中所進展的真實數據測試。在具體的測試中,一般應遵循以下原則:由程序設計者之外的人進展測試;測試用例應由兩局部組成:輸入數據和預期輸出結果;應選用不合理的輸入數據與非法輸入測試;不僅要檢驗程序是否實現預期功能,還應檢查程序是否做了不應該做的工作;集中測試容易出錯的程序模塊;對程序修改以后,必須重新進展測試。7.3測試方法一般來說,對程序測試有兩種測試方法:如果已經知道了軟件系統應具有的功能,可通過測試來對每個功能是否都能正常使用;如果知道程序的內部工作過程,可以通過測試來檢測程序內部是否按照規格說明書的規定正常進展。前一種方法稱為黑盒測試,后一種方法稱為白盒子測試。黑盒測試又稱為功能測試,白盒子測試又稱為構造測試。經過幾個月的設計,因為時間和任務的性質的關系,沒有完全按照上述的測試方法進展系統的測試,但經過一些簡單的步驟的測試,證明本系統具有相當程序的穩定性。附錄源程序清單OptionExplicitDimBupdataAsBooleanDimiAsIntegerPrivateSubCmbdegree_Click()IfCmbdegree.Text="定制"ThenFrmTable.ShowCmbdegree.ListIndex=0EndIfEndSubPrivateSubCmbdepart_Click()IfCmbdepart.Text="定制"ThenFrmTable.ShowCmbdepart.ListIndex=0EndIfEndSubPrivateSubCmdAddNew_Click()IfCmdAddNew.Caption="添加"ThenCmdAddNew.Caption="確認"CmdDel.Enabled=FalseCmdOK.Enabled=FalseDataA.ReadOnly=FalseFori=1To12IfTxt(i).Text=""ThenTxt(i).Text=0'DataA.Recordset.Fields(i)=0NextiDataA.Recordset.AddNewTxt(0).Locked=FalseIfFrmMain.cutable="employee"ThenDataA.Recordset.Fields(13)=frmLogin.EmploIDDataA.Recordset.Fields(14)=NowIfOpsex(0)ThenDataA.Recordset.Fields(4)="男"ElseDataA.Recordset.Fields(4)="女"EndIfDataA.Recordset.Fields(7)=Cmbdegree.TextDataA.Recordset.Fields(8)=Cmbdepart.TextElseIfFrmMain.cutable="leave"ThenDataA.Recordset.Fields(8)=frmLogin.EmploIDDataA.Recordset.Fields(9)=NowElseDataA.Recordset.Fields(13)=frmLogin.EmploIDDataA.Recordset.Fields(14)=NowEndIfTxt(0).SetFocusElse'OKIfTxt(0).Text=""ThenMsgBox"不可以為空"Txt(0).SetFocusExitSubEndIfFori=1To12IfTxt(i).Text=""ThenTxt(i).Text=0'DataA.Recordset.Fields(i)=0NextiIfFrmMain.cutable="employee"ThenDataB.Recordset.FindFirst"職工編號="+Txt(0).TextIfNotDataB.Recordset.NoMatchThenMsgBox"職員編號重復"Txt(0).Text=""Txt(0).SetFocusExitSubEndIfElseIfFrmMain.cutable="leave"ThenDataB.Recordset.FindFirst"假條編號="+Txt(0).TextIfNotDataB.Recordset.NoMatchThenMsgBox"假條編號重復"Txt(0).Text=""Txt(0).SetFocusExitSubEndIfElseFori=4To10IfNotIsNumeric(Txt(i).Text)ThenMsgBox"notanumber"Txt(i).SetFocusExitSubEndIfNextiDataB.Recordset.FindFirst"工資編號="+Txt(0).TextIfNotDataB.Recordset.NoMatchThenMsgBox"工資編號重復"Txt(0).Text=""Txt(0).SetFocusExitSubEndIfEndIfDataA.Recordset.UpdateDataA.Recordset.MoveLastFrmMain.DataA.RefreshFrmMain.DataB.RefreshDataB.RefreshCmdAddNew.Caption="添加"CmdDel.Enabled=TrueCmdOK.Enabled=TrueEndIfEndSubPrivateSubCmdCacel_Click()IfCmdAddNew.Caption="確認"ThenDataA.Recordset.CancelUpdateEndIfFrmMain.Enabled=TrueFrmMain.SetFocusUnloadMeFrmMain.DataA.RefreshIfFrmMain.cutable="employee"ThenFrmMain.DBGA.Columns("性別").Button=TrueFrmMain.DBGA.Columns("學歷").Button=TrueFrmMain.DBGA.Columns("部門").Button=TrueEndIfEndSubPrivateSubCmdDel_Click()DataA.ReadOnly=FalseDataA.Recordset.DeleteDataA.Recordset.MoveNextIfDataA.Recordset.EOFThenDataA.Recordset.MoveLastEndIfFrmMain.DataA.RefreshEndSubPrivateSubcmdOK_Click()IfTxt(0).Text=""ThenMsgBox"不可以為空"Txt(0).SetFocusExitSubEndIfBupdata=FalseDataA.Recordset.EditIfFrmMain.cutable="leave"ThenDataA.Recordset.Fields(8)=frmLogin.EmploIDDataA.Recordset.Fields(9)=NowElseIfFrmMain.cutable="employee"ThenDataA.Recordset.Fields(13)=frmLogin.EmploIDDataA.Recordset.Fields(14)=NowIfOpsex(0)ThenDataA.Recordset.Fields(4)="男"ElseDataA.Recordset.Fields(4)="女"EndIfDataA.Recordset.Fields(7)=Cmbdegree.TextDataA.Recordset.Fields(8)=Cmbdepart.TextDataA.Recordset.Fields(13)=frmLogin.EmploIDDataA.Recordset.Fields(14)=NowElseFori=4To10IfNotIsNumeric(Txt(i).Text)ThenMsgBox"notanumber"Txt(i).SetFocusExitSubEndIfNextiDataA.Recordset.Fields(13)=frmLogin.EmploIDDataA.Recordset.Fields(14)=NowEndIfFori=1To12IfTxt(i).Text=""ThenTxt(i).Text=0'DataA.Recordset.Fields(i)=0NextiDataA.Recordset.UpdateFrmMain.DataA.RefreshDataB.RefreshEndSubPrivateSubDataA_Validate(ActionAsInteger,SaveAsInteger)IfAction=11AndBupdataThenSave=0EndIfEndSubPrivateSubLab_Click(IndexAsInteger)EndSubPrivateSubTxt_KeyPress(IndexAsInteger,KeyAsciiAsInteger)If(KeyAscii<48OrKeyAscii>57)AndKeyAscii<>vbKeyBackAndIndex=0ThenKeyAscii=0ExitSubEndIfIfFrmMain.cutable="leave"AndIndex=1ThenIf(KeyAscii<48OrKeyAscii>57)AndKeyAscii<>vbKeyBackThenKeyAscii=0ExitSubEndIfEndIfIfFrmMain.cutable="salary"ThenIfIndex<=3ThenIf(KeyAscii<48OrKeyAscii>57)AndKeyAscii<>vbKeyBackThenKeyAscii=0ExitSubEndIfEndIfIfIndex=13ThenExitSubIf(KeyAscii<48OrKeyAscii>57)AndKeyAscii<>vbKeyBackAndKeyAscii<>46ThenKeyAscii=0ExitSubEndIfEndIfEndSubPrivateSubTxt_change(IndexAsInteger)IfBupdata=FalseThenBupdata=TrueIfFrmMain.cutable="salary"ThenIfTxt(Index).Text=""ThenExitSubIfIndex>=4AndIndex<=6ThenTxt(7).Text=Val(Txt(4).Text)+Val(Txt(5).Text)+Val(Txt(6).Text)Txt(12).Text=Val(Txt(7).Text)-Val(Txt(11).Text)EndIfIfIndex>=8AndIndex<=10ThenTxt(11).Text=Val(Txt(8).Text)+Val(Txt(9).Text)+Val(Txt(10).Text)Txt(12).Text=Val(Txt(7).Text)-Val(Txt(11).Text)EndIfEndIfEndSubPrivateSubForm_Load()DataA.DatabaseName=App.Path+"\sm.mdb"DataB.DatabaseName=App.Path+"\sm.mdb"DataA.Caption=FrmMain.cutableDataA.RecordSource="select*from"+FrmMain.cutableDataB.RecordSource="select*from"+FrmMain.cutableDataA.RefreshTxt(0).Locked=True'IfFrmMain.DBGA.Row=0ThenExitSubIfFrmMain.cutable="employee"Then'employeeFori=0To12Lab(i).Caption=DataA.Recordset.Fields(i).NameNextiTxt(0).DataField=DataA.Recordset.Fields(0).NameTxt(1).DataField=DataA.Recordset.Fields(1).NameTxt(2).DataField=DataA.Recordset.Fields(2).NameTxt(3).DataField=DataA.Recordset.Fields(3).NameTxt(4).Visible=FalseTxt(5).DataField=DataA.Recordset.Fields(5).NameTxt(6).DataField=DataA.Recordset.Fields(6).NameTxt(7).Visible=FalseTxt(8).Visible=FalseTxt(9).DataField=DataA.Recordset.Fields(9).NameTxt(10).DataField=DataA.Recordset.Fields(10).NameTxt(11).DataField=DataA.Recordset.Fields(11).NameTxt(12).DataField=DataA.Recordset.Fields(12).NameTxt(13).DataField=DataA.Recordset.Fields(15).NameIfFrmMain.cuAp>-1ThenDataA.Recordset.Move(FrmMain.cuAp)ElseDataA.Recordset.MoveFirstEndIfIfDataA.Recordset.Fields(4)="男"ThenOpsex(0).Value=TrueElseOpsex(1).Value=TrueEndIf'設置lsdegree的顯示項Fori=0ToFrmMain.LsDegree.ListCount-2Cmbdegree.AddItemFrmMain.LsDegree.List(i)IfFrmMain.LsDegree.List(i)=DataA.Recordset.Fields(7)ThenCmbdegree.ListIndex=iEndIfNextiIfCmbdegree.ListIndex=-1ThenCmbdegree.AddItemDataA.Recordset.Fields(7)Cmbdegree.ListIndex=Cmbdegree.ListCount-1EndIfCmbdegree.AddItem"定制"'設置lsdepart的顯示項Fori=0ToFrmMain.LsDepart.ListCount-2Cmbdepart.AddItemFrmMain.LsDepart.List(i)IfFrmMain.LsDepart.List(i)=DataA.Recordset.Fields(8)ThenCmbdepart.ListIndex=iEndIfNextiIfCmbdepart.ListIndex=-1ThenCmbdepart.AddItemDataA.Recordset.Fields(8)Cmbdepart.ListIndex=Cmbdepart.ListCount-1EndIfCmbdepart.AddItem"定制"'設置完畢ElseIfFrmMain.cutable="leave"Then'leaveTxt(7).Visible=TrueCmbdegree.Visible=FalseCmbdepart.Visible=FalseFrame1.Visible=FalseFori=8To12Lab(i).Visible=FalseTxt(i).Visible=FalseNextiFori=0To7Lab(i).Caption=DataA.Recordset.Fields(i).NameTxt(i).DataField=DataA.Recordset.Fields(i).NameNextiTxt(13).DataField=DataA.Recordset.Fields(10).NameIfFrmMain.cuAp>-1ThenDataA.Recordset.Move(FrmMain.cuAp)ElseDataA.Recordset.MoveFirstEndIfElse'salaryFrame1.Visible=FalseCmbdegree.Visible=FalseCmbdepart.Visible=FalseFori=0To12Lab(i).Caption=DataA.Recordset.Fields(i).NameTxt(i).DataField=DataA.Recordset.Fields(i).NameNextiTxt(13).DataField=DataA.Recordset.Fields(15).NameTxt(7).Locked=TrueTxt(11).Locked=TrueTxt(12).Locked=TrueIfFrmMain.cuAp>-1ThenDataA.Recordset.Move(FrmMain.cuAp)ElseDataA.Recordset.MoveFirstEndIfEndIfEndSubPrivateSubForm_Unload(CancelAsInteger)FrmMain.Enabled=TrueFrmMain.SetFocusUnloadMeFrmMain.DataB.RefreshEndSubOptionExplicitConstMxUser=100PublicEmploIDAsIntegerPublicCurUserAsStringPublicCurIdAsStringPublicCurPswAsStringDimuser(MxUser),pws(MxUser),state(MxUser),Emplo(MxUser)AsStringPrivateSubForm_Load()DimiAsIntegerIfApp.PrevInstanceThenMsgBox("程序已經運行,不能再次裝載。"),vbExclamationUnloadMeEndIf'本段代碼用于判定本程序是否已經裝載于內存中,以防止程序的多重啟動i=0OpenApp.Path+"\user.ini"ForInputAs#1DoWhileNotEOF(1)Input#1,user(i),pws(i),state(i),Emplo(i)Ifstate(i)="A"ThenCombo1.AddItemuser(i)EndIfi=i+1LoopClose#1Combo1.ListIndex=1'在窗口裝載階段讀取用戶設置文件獲取用戶信息并裝載于用戶列表框中EndSubPrivateSubCmdCancel_Click()UnloadMeEndEndSubPrivateSubcmdOK_Click()IftxtPassword=pws(Combo1.ListIndex)ThenCurId=Combo1.ListIndexEmploID=Emplo(CurId)CurUser=user(CurId)CurPsw=pws(CurId)Me.Hide'LoadFrmMainFrmMain.ShowElseMsgBox"InvalidPassword,tryagain!",,"Login"txtPassword.SetFocusSendKeys"{Home}+{End}"EndIfEndSubPrivateSubForm_Unload(CancelAsInteger)UnloadMeEndEndSubOptionExplicitPubliccuTabChAsBooleanPubliccutableAsStringPubliccuApAsInteger'當前指針位置DimiAsIntegerPublicPwinAsStringPublicSubshowemployee()DataA.RecordSource="select*fromemployee"DataA.RefreshDBGA.Columns("性別").Button=TrueDBGA.Columns("學歷").Button=TrueDBGA.Columns("部門").Button=TrueFori=0To2Mtab(i).Checked=FalseNextiMtab(0).Checked=Truecutable="employee"cuTabCh=TrueEndSubPublicSubshowleave()DataA.RecordSource="select*fromleave"DataA.RefreshFori=0To2Mtab(i).Checked=FalseNextiMtab(1).Checked=Truecutable="leave"cuTabCh=TrueEndSubPublicSubshowsalary()DataA.RecordSource="select*fromsalary"DataA.RefreshFori=0To2Mtab(i).Checked=FalseNextiMtab(2).Checked=Truecutable="salary"cuTabCh=TrueEndSubPrivateSubForm_Load()Dimfil,tbcount,iAsIntegerDimTbstr(50),Tbnam(50)AsStringDataA.DatabaseName=App.Path+"\sm.mdb"DataB.DatabaseName=App.Path+"\sm.mdb"DataB.RecordSource="select*fromemployee"CallshowemployeeIfDir(App.Path+"\table.ini")=""ThenLsDegree.AddItem"定制"LsDepart.AddItem"定制"Elsefil=FreeFile()OpenApp.Path+"\table.ini"ForInputAs#filDoWhileNotEOF(fil)Input#fil,Tbnam(i),Tbstr(i)i=i+1LoopClose#filtbcount=iFori=0TotbcountIfTbnam(i)="lsdegree"ThenLsDegree.AddItemTbstr(i)ElseIfTbnam(i)="lsdepart"ThenLsDepart.AddItemTbstr(i)EndIfNextiLsDegree.AddItem"定制"LsDepart.AddItem"定制"EndIfEndSubPrivateSubForm_Unload(CancelAsInteger)EndEndSubPrivateSubDBGA_ButtonClick(ByValColIndexAsInteger)DimCoAsColumnSetCo=DBGA.Columns(ColIndex)SelectCaseColIndexCase4Lssex.Left=DBGA.Left+Co.Left+Co.WidthLssex.Top=DBGA.Top+DBGA.RowTop(DBGA.Row)Lssex.Visible=TrueLssex.ZOrder0Lssex.SetFocusCase7'degreeLsDegree.Left=DBGA.Left+Co.Left+Co.WidthLsDegree.Top=DBGA.Top+DBGA.RowTop(DBGA.Row)LsDegree.Visible=TrueLsDegree.ZOrder0LsDegree.SetFocusCase8'departmentLsDepart.Left=DBGA.Left+Co.Left+Co.WidthLsDepart.Top=DBGA.Top+DBGA.RowTop(DBGA.Row)LsDepart.Visible=TrueLsDepart.ZOrder0LsDepart.SetFocusEndSelectEndSubPrivateSubDBGA_HeadClick(ByValColIndexAsInteger)DBGA.ClearSelColsEndSubPrivateSubDBGA_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=2ThenFrmMain.PopupMenuMpEndIfEndSubPrivateSubDBGA_RowColChange(LastRowAsVariant,ByValLastColAsInteger)cuAp=DataA.Recordset.AbsolutePositionIfcuAp>-1ThenDataB.Recordset.FindFirst"職工編號="+CStr(DataA.Recordset.Fields("職工編號"))IfDataB.Recordset.NoMatchThenLab.Caption="沒有此職員"ElseWithDataB.RecordsetLab.Caption="工號:"+CStr(.Fields(0))+"姓名:"+CStr(.Fields(1))+"性別:"+CStr(.Fields(4))+"部門:"+CStr(.Fields(8))+"職位:"+CStr(.Fields(9))+":"+CStr(.Fields(11))EndWithEndIfEndIfEndSubPrivateSubLsDegree_Click()IfLsDegree.Text="定制"ThenFrmTable.ShowElseDataA.Recordset.EditDataA.Recordset.Fields(7)=LsDegree.TextDataA.Recordset.Fields(13)=CStr(frmLogin.CurId)DataA.Recordset.Fields(14)=CStr(Now)DataA.Recordset.UpdateDataB.RefreshEndIfEndSubPrivateSubLsDepart_Click()IfLsDepart.Text="定制"ThenFrmTable.ShowElseDataA.Recordset.EditDataA.Recordset.Fields(8)=LsDepart.TextDataA.Recordset.Fields(13)=CStr(frmLogin.CurId)DataA.Recordset.Fields(14)=CStr(Now)DataA.Recordset.UpdateDataB.RefreshEndIfEndSubPrivateSubLssex_Click()DataA.Recordset.EditDataA.Recordset.Fields(4)=Lssex.TextDataA.Recordset.Fields(13)=CStr(frmLogin.CurId)DataA.Recordset.Fields(14)=CStr(Now)DataA.Records
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度中小企業貸款擔保合作協議
- 獨家合同:兩個單位聯合體投標協議
- 環境樣本中微生物的檢驗試題及答案
- 注冊會計師備考方法分享試題及答案
- 醫院保安工作總結計劃
- 開展社團特色活動的思路計劃
- 增強品牌知名度的戰略規劃計劃
- 新型微生物檢測方法的研究進展試題及答案
- 2025年注冊會計師考試成功之路反思試題及答案
- 2025年證券從業資格證重要考點清理試題及答案
- 中華人民共和國關稅法
- 山西同文職業技術學院嬰幼兒托育服務與管理人才培養方案
- 2025人教版高中物理必修一學考知識點復習指導課件
- 部編版(2024)三年級道德與法治上冊第12課《生活離不開規則》教學課件
- 初級家政服務員近年考試真題題庫(含真題、典型題)
- 書法測評基礎理論知識單選題100道及答案解析
- 河南省多校聯考2023-2024學年高一下學期4月期中物理試題
- Endat編碼器在AX5000系列伺服上使用說明
- 第十一章-新聞事業管理-《新聞學概論》課件
- 湘潭、成都工廠VDA63-2023審核員培訓考核附有答案
- 部編版語文六年級下教學設計(含二次備課和教學反思)
評論
0/150
提交評論