人事檔案管理系統(tǒng)課程設(shè)計(jì)_第1頁(yè)
人事檔案管理系統(tǒng)課程設(shè)計(jì)_第2頁(yè)
人事檔案管理系統(tǒng)課程設(shè)計(jì)_第3頁(yè)
人事檔案管理系統(tǒng)課程設(shè)計(jì)_第4頁(yè)
人事檔案管理系統(tǒng)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、編號(hào): 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)說明書題 目: 人事檔案管理系統(tǒng) 學(xué) 院: 計(jì)算機(jī)科學(xué)與工程學(xué)院 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 唐麟 2013年 9月26號(hào) 摘 要電腦已經(jīng)深入到我們?nèi)粘9ぷ骱蜕畹姆椒矫婷?,比如文字處理、信息管理、輔助設(shè)計(jì)、圖形圖像處理、教育培訓(xùn)以及游戲娛樂等。Windows系統(tǒng)的推出使電腦從高雅的學(xué)術(shù)殿堂走入了尋常百姓家,各行各業(yè)的人們無須經(jīng)過特別的訓(xùn)練就能夠使用電腦完成許許多多復(fù)雜的工作。然而,雖然現(xiàn)在世界上已經(jīng)充滿了多如牛毛的各種軟件,但它們依然不能滿足用戶的各種特殊需要,人們還不得不開發(fā)適合自己特殊需求的軟件。 隨著企事業(yè)單位的發(fā)展,人員

2、會(huì)越來越多,少則幾十人、多則上萬人。例如一個(gè)企業(yè)分很多部門,每個(gè)部門又分為許多科或室等,而其下又分為各級(jí)領(lǐng)導(dǎo)和員工。用筆和紙傳統(tǒng)的手工管理檔案,這中管理方式存在著不易更新、不易存放、不安全、容易丟失、難以備份等重大缺陷,管理起來效率低下而且很可能造成管理上的混亂。而自己建立簡(jiǎn)單的電子文檔對(duì)信息管理進(jìn)行管理雖然克服了以上的缺點(diǎn),但查詢效率較低,特別是當(dāng)數(shù)據(jù)量十分龐大時(shí),劣勢(shì)尤其明顯。因此開發(fā)一個(gè)既可以存儲(chǔ)信息,又可以進(jìn)行更新、查詢、管理等功能,同時(shí)價(jià)格又能為廣大消費(fèi)者接受的多功能電子人事信息管理系統(tǒng)就顯得十分必要。 關(guān)鍵詞:Visual C+6.0;算法;人事管理;類面向?qū)ο?;鏈?目 錄引言1

3、1系統(tǒng)概述22需求分析22.1 系統(tǒng)需求22.2 開發(fā)環(huán)境33詳細(xì)設(shè)計(jì) 43.1類的設(shè)計(jì)及分析 43.2各功能的設(shè)計(jì) 64 所遇到的問題和分析解決 105 系統(tǒng)特色及關(guān)鍵技術(shù) 115.1成員函數(shù)添加的分析 115.2直接選擇排序 146 用戶使用 157 結(jié)論18參考文獻(xiàn)19 引 言隨著全球?qū)χR(shí)和人才的重視,企業(yè)對(duì)人力資源管理重要性的認(rèn)識(shí)逐漸深化,人才的全球化競(jìng)爭(zhēng)使企業(yè)的人力資源管理面臨前所未有的挑戰(zhàn)。在新形勢(shì)下,人事檔案管理系統(tǒng)是一個(gè)企業(yè)單位不可缺少的部分,是適應(yīng)現(xiàn)代企業(yè)制度,推動(dòng)企業(yè)人力資源管理走向科學(xué)化、規(guī)范化、自動(dòng)化的必要條件;是應(yīng)對(duì)挑戰(zhàn)、適應(yīng)環(huán)境變化、提高企業(yè)管理效率、提升核心競(jìng)爭(zhēng)

4、力的關(guān)鍵措施。它所包含內(nèi)容對(duì)于企業(yè)的決策者和管理者來說至關(guān)重要。目前市場(chǎng)上的人事管理系統(tǒng)很多,但要找到一款真正稱心、符合企業(yè)實(shí)際情況的并不容易。由于存在這樣那樣的不足,使企業(yè)浪費(fèi)了大量的人力、物力等大量資源,難以真正提升企業(yè)人力資源的管理水平,提高工作效率及降低管理成本的效果也不明顯。因此,為了加快公司信息化的步伐,提高公司的管理水平,并在激烈的社會(huì)競(jìng)爭(zhēng)中立于不敗之地,建立及完善人力資源管理系統(tǒng)已變得十分必要和迫切。在社會(huì)中,人力資源是企事業(yè)單位的核心,而對(duì)它的管理及管理軟件的選用則是評(píng)價(jià)管理者管理水平的一個(gè)重要標(biāo)志。因此人力資源管理工作是企事業(yè)單位工作的一項(xiàng)重要任務(wù),是提高管理質(zhì)量和保障企事

5、業(yè)單位生產(chǎn)目標(biāo)實(shí)現(xiàn)的一個(gè)重要保證。因此,人力資源管理的內(nèi)容對(duì)企事業(yè)單位的決策者和管理者來說都具有重要意義。當(dāng)規(guī)模擴(kuò)大以后,企事業(yè)單位人員部門增加,給人力資源管理帶來困難。根據(jù)需求,本人事檔案管理系統(tǒng)主要分系統(tǒng)管理、信息登記、信息刪除、信息查詢、信息修改、信息按順序輸出、報(bào)表信息輸出、系統(tǒng)簡(jiǎn)介等八大部分。具體要求實(shí)現(xiàn):對(duì)業(yè)務(wù)模塊相關(guān)信息的添加,修改,刪除以及對(duì)人員調(diào)動(dòng)的管理;對(duì)考勤信息設(shè)置、管理和查詢;對(duì)工資信息設(shè)置;部門,員工工資統(tǒng)計(jì)查詢等等。1 系統(tǒng)概述 本人事檔案管理系統(tǒng)主要分系統(tǒng)管理、信息登記、信息刪除、信息查詢、信息修改、信息按順序輸出、報(bào)表信息輸出、系統(tǒng)簡(jiǎn)介等八大部分。具體要求實(shí)現(xiàn):

6、對(duì)業(yè)務(wù)模塊相關(guān)信息的添加,修改,刪除以及對(duì)人員調(diào)動(dòng)的管理;對(duì)考勤信息設(shè)置、管理和查詢;對(duì)工資信息設(shè)置;部門,員工工資統(tǒng)計(jì)查詢等等。2 需求分析2.1 系統(tǒng)需求在信息技術(shù)高速發(fā)展的今天,傳統(tǒng)的數(shù)據(jù)統(tǒng)計(jì)方式在處理龐大繁雜的信息量時(shí)顯得力不從心,于是,人們對(duì)于運(yùn)用計(jì)算機(jī)來輔助和管理工作的需求正在逐步提高。隨著各個(gè)企業(yè)業(yè)務(wù)的逐步擴(kuò)展,企業(yè)的員工人數(shù)也在迅速增加,由于管理人員水平有限,導(dǎo)致某些員工紀(jì)錄管理并不完善,特別是繁雜的員工工資管理紀(jì)錄,不易查詢、修改,極易導(dǎo)致錯(cuò)誤,而落后的員工管理方法隨著社會(huì)的日益競(jìng)爭(zhēng),必將被淘汰。由計(jì)算機(jī)來管理龐大而繁雜的企業(yè)員工紀(jì)錄是非常合適的,不僅查詢和修改方便,并且效率

7、高,速度快,完全能夠滿足現(xiàn)代化企業(yè)管理的需要,同時(shí)也更利于實(shí)現(xiàn)全面辦公自動(dòng)化。因此開發(fā)一套企業(yè)員工工資管理系統(tǒng)軟件勢(shì)在必行。企業(yè)員工工資管理系統(tǒng)是企業(yè)管理系統(tǒng)中的一個(gè)重要組成部分,它為企業(yè)合理的員工調(diào)配與編制,以及有關(guān)問題的決策能夠提供各種必要的基礎(chǔ)數(shù)據(jù),是公司管理現(xiàn)代化的一個(gè)重要方面。利用微機(jī)對(duì)龐雜而繁鎖的員工工資系統(tǒng)實(shí)現(xiàn)自動(dòng)化管理,是計(jì)算機(jī)公司信息管理系統(tǒng)的重要內(nèi)容。我在陳勇老師指導(dǎo)下開發(fā)了企業(yè)員工工資管理系統(tǒng)。企業(yè)員工工資管理系統(tǒng)旨在為商業(yè)人士及在社會(huì)團(tuán)體、機(jī)構(gòu)中負(fù)責(zé)管理關(guān)系的人士提供一個(gè)功能全面、使用方便的工資管理系統(tǒng),以替代傳統(tǒng)的手工管理工資紀(jì)錄,同時(shí)利用先進(jìn)信息技術(shù)為用戶提供一些更

8、為方便實(shí)用的功能。 本系統(tǒng)實(shí)現(xiàn)五種基本功能:輸入員工工資信息、刪除員工工資信息、修改員工工資信息、查找員工工資信息、列出所有員工工資信息。所以該工資管理系統(tǒng)可以分為5個(gè)模塊,分別為輸入模塊、刪除模塊、修改模塊、查找模塊、列表模塊,每個(gè)模塊都有其對(duì)應(yīng)的功能以及其設(shè)計(jì)。(1)輸入模塊輸入模塊的功能是創(chuàng)建存儲(chǔ)職工工資信息的存儲(chǔ)系統(tǒng)以及添加某職工的工資信息。為實(shí)現(xiàn)輸入的功能,有兩個(gè)方面的任務(wù):定義結(jié)構(gòu)體以及建立鏈表。(2)刪除模塊刪除模塊的功能是刪除某職工的工資信息。(3)修改模塊修改模塊的功能是修改某職工的部分工資信息。(4)查找模塊查找模塊的功能就是:輸出指定編號(hào)職工的工資信息;輸出姓名和部門聯(lián)合

9、查詢的職工工資信息。(5)統(tǒng)計(jì)模塊統(tǒng)計(jì)模塊的功能是:統(tǒng)計(jì)全企業(yè)總?cè)藬?shù)及各部門的人數(shù);統(tǒng)計(jì)企業(yè)的平均工資及部門的平均工資。(6)排序模塊排序的模塊的功能是:對(duì)全企業(yè)的信息表按受教育年限及工資進(jìn)行遞增排序。(7)列表模塊列表模塊的功能是輸出全體職工的工資信息。程序具體功能介紹:2.1.1 功能介紹現(xiàn)在,需要存儲(chǔ)這些人員的人事檔案信息:?jiǎn)T工編號(hào), 員工姓名 ,年齡 ,性別 ,部門 ,職務(wù), 受教育年限 ,工資 ,缺勤(天) ,罰金, 個(gè)稅 ,實(shí)發(fā)數(shù)。其中,人員編號(hào)唯一,不能重復(fù)。添加刪除功能:能根據(jù)學(xué)企業(yè)人事的變動(dòng)情況,添加刪除記錄;查詢功能:能根據(jù)編號(hào)及姓名和部門的復(fù)合查詢進(jìn)行查詢;編輯功能(高級(jí)

10、):根據(jù)查詢對(duì)相應(yīng)的記錄進(jìn)行修改,并存儲(chǔ);統(tǒng)計(jì)功能:能根據(jù)多種參數(shù)進(jìn)行人員的統(tǒng)計(jì)及平均工資,統(tǒng)計(jì)要求同時(shí)顯示被統(tǒng)計(jì)者的信息;排序功能:按照受教育年限、工資進(jìn)行排序;保存功能:能對(duì)輸入的數(shù)據(jù)進(jìn)行相應(yīng)的存儲(chǔ);2 .2 系統(tǒng)框圖系統(tǒng)框架圖在本設(shè)計(jì)中,將主要實(shí)現(xiàn)以下功能:增加記錄功能,修改記錄功能,刪除記錄功能,以及篩選記錄功能等。主菜單輸入員工工資信息刪除指定員工工資信息修改指定員工工資信息查找指定員工工資信息輸出全體員工工資信息退出 圖1 系統(tǒng)框架圖2.2 開發(fā)環(huán)境 本系統(tǒng)是在Visual C+6.0平臺(tái)上運(yùn)行的,主要運(yùn)行C及C+等語(yǔ)言。3 詳細(xì)設(shè)計(jì)具體系統(tǒng)設(shè)計(jì)3.1 結(jié)構(gòu)體及類的設(shè)計(jì)與分析 3.

11、1.1:?jiǎn)T工結(jié)構(gòu)體的建立struct Worker_payint num; /員工編號(hào)string name; /員工姓名int age; /年齡string sex; /性別string department; /部門string title; /職務(wù)int eduage; /學(xué)歷(年)float wage; /工資int day; /缺勤天數(shù)float allowance; /扣發(fā)工資float tax; /個(gè)人所得稅float real_wage; /實(shí)發(fā)數(shù)Worker_pay * next; /鏈表結(jié)點(diǎn)的指針域;3.1.2:?jiǎn)T工類的建立class Workerprotected:Wor

12、ker_pay * head; /鏈表的頭結(jié)點(diǎn)指針public:Worker()head=NULL; /構(gòu)造函數(shù)void Display(Worker_pay *); /輸出函數(shù) Worker_pay * Find(int); /查找函數(shù)int ListCount(); /統(tǒng)計(jì)員工人數(shù)函數(shù) void AddItem(int,string,int,string,string,string,float,float); /創(chuàng)建鏈表并鏈表的插入void RemoveItem(int); /刪除函數(shù)void ReplaceItem(int); /修改函數(shù)void ListL(); /遍歷函數(shù) void

13、Search(int); /查找并輸出某個(gè)員工信息函數(shù)void Real_wage(float,float); /計(jì)算函數(shù)void Recordinfo(int,string,int,string,string,string,float,float,float,float); /存儲(chǔ)函數(shù);3.1.3:相關(guān)的成員函數(shù)表1 Worker類說明表名稱屬性說明head數(shù)據(jù)成員鏈表頭結(jié)點(diǎn)指針Worker()成員函數(shù)缺省的構(gòu)造函數(shù),缺省值為head=NULLvoid Display(Worker_pay *)成員函數(shù)輸出函數(shù)Worker_pay * Find(int)成員函數(shù)查找函數(shù)int ListCou

14、nt()成員函數(shù)統(tǒng)計(jì)員工人數(shù)函數(shù)void AddItem(int,···float,float)成員函數(shù)創(chuàng)建鏈表并鏈表的插入void RemoveItem(int)成員函數(shù)刪除函數(shù)void ReplaceItem(int)成員函數(shù)修改函數(shù)void ListL()成員函數(shù)遍歷函數(shù)void Listavg(string)成員函數(shù)部門查詢及統(tǒng)計(jì)的函數(shù)void load()成員函數(shù)讀取文件void sort_data();對(duì)員工信息進(jìn)行整理的函數(shù)void search(sting ,string)成員函數(shù)復(fù)合查找并輸出員工信息的函數(shù)void Search(int)成員函數(shù)

15、查找并輸出某個(gè)員工信息函數(shù)void Real_wage()成員函數(shù)計(jì)算函數(shù)voidRecoreinfo(int,···,float,float)成員函數(shù)存儲(chǔ)函數(shù)3.1.4非成員函數(shù)的設(shè)計(jì)與分析表2 非成員函數(shù)說明表名稱說明int Menu()用于顯示主菜單char Exit()用于退出程序void Input(int * num,···,float * allowance)用于輸入員工工資信息void AddNew()用于調(diào)用成員函數(shù)AddItem(int,···float,float)Real_wage

16、()和Recoreinfo(int,···,float,float)void DoFind()用于調(diào)用成員函數(shù)Search(int)void DoDelete()用于調(diào)用成員函數(shù)RemoveItem(int)void DoMotify()用于調(diào)用成員函數(shù)ReplaceItem(int)void List()用于調(diào)用成員函數(shù)ListL()int main()主函數(shù)void findtavg()用于調(diào)用成員函數(shù)void Listavg(string)3.2:各功能模塊設(shè)計(jì):(1)、新建數(shù)據(jù)文件模塊:<1>、數(shù)據(jù)結(jié)構(gòu);看各個(gè)數(shù)據(jù)信息,員工編號(hào)(int), 員

17、工姓名 (sting),年齡 (int),性別 (string),部門(string) ,職務(wù)(string), 受教育年限 (int),工資 (string),缺勤(天)(int) ,罰金(int), 個(gè)稅 (int),實(shí)發(fā)數(shù)(int),在文件中以文本形式存放,每條記錄對(duì)應(yīng)一個(gè)人員的信息,可以方便信息的管理;而數(shù)據(jù)讀進(jìn)內(nèi)存中時(shí),可以以結(jié)構(gòu)體的形式,每一個(gè)結(jié)構(gòu)體包含了一個(gè)人員的全部信息,多的人員的信息組成了一個(gè)結(jié)構(gòu)體數(shù)組。定義見結(jié)構(gòu)體及類的設(shè)計(jì)與分析(2)、追加模塊:1需求分析該模塊的功能是擁護(hù)需要增加新的員工記錄,從鍵盤輸入并逐條寫入到原來的文件中去,其中輸入號(hào)碼是要防止號(hào)碼重復(fù),重復(fù)時(shí)報(bào)告

18、錯(cuò)誤,重新輸入。為方便用戶管理和查看,該模塊采用的方式是用先把原來文件中的數(shù)據(jù)讀入內(nèi)存,保存在內(nèi)存中,然后在內(nèi)存中的數(shù)據(jù)后面增加新的數(shù)據(jù),操作完成后用寫的方式打開文件,用覆蓋的方式寫入。2流程圖:略;3對(duì)應(yīng)程序:void AddNew() (3)修改模塊:<1>需求分析:該模塊的功能是顯示所有信息,考慮到記錄較多,采用分屏顯示,顯示完所有的記錄后,由用戶輸入需要修改的人員的號(hào)碼,查找成功后,顯示查找結(jié)果,并詢問擁護(hù)修改人員的哪部分記錄,根據(jù)用戶選擇修改相應(yīng)的信息,然后保存修改后的結(jié)果;用戶選擇要修改的數(shù)據(jù)<2>流程圖:輸入編號(hào)是否有此編號(hào) Y Y N找到調(diào)用修改函數(shù)提示

19、沒有找到詢問用戶是否繼續(xù)修改返回主菜單 Y N <3>對(duì)應(yīng)的函數(shù):void DoMotify();(4)刪除模塊:1需求分析:該模塊的運(yùn)行方式與修改模塊類似,首先分屏顯示所有人員的記錄,顯示完所有的記錄后,由用戶輸入要?jiǎng)h除的人員的號(hào)碼,根據(jù)號(hào)碼查找相應(yīng)的記錄并將結(jié)果顯示出來,經(jīng)用戶確認(rèn)后刪除,刪除的方法是將文件中的數(shù)據(jù)讀入內(nèi)存,賦給相應(yīng)的結(jié)構(gòu)體,并將結(jié)構(gòu)體數(shù)組中將刪除的后面的數(shù)據(jù)賦給前一個(gè)結(jié)構(gòu)體,然后將相應(yīng)數(shù)據(jù)寫入文件并保存;2流程圖:類似添加的流程<3>對(duì)應(yīng)函數(shù): void DoDelete(); (5)、按編號(hào)搜索:1需求分析:該模塊的功能是按照輸入的人員的編號(hào)查找

20、對(duì)應(yīng)的記錄,并將其顯示,查找成功以后,增加刪除和修改等功能,其中刪除和修改功能可以通過調(diào)用相應(yīng)的函數(shù)來實(shí)現(xiàn)。2流程圖;(6)按姓名和部門搜索。<1>需求分析:該模塊的功能是按照輸入的人員的姓名和部門查找對(duì)應(yīng)的記錄,并將其顯示,查找成功以后,增加刪除和修改等功能,其中刪除和修改功能可以通過調(diào)用相應(yīng)的函數(shù)來實(shí)現(xiàn)。<2>該模塊的結(jié)構(gòu)與按號(hào)碼查詢的結(jié)構(gòu)基本相同;<3>對(duì)應(yīng)函數(shù):void DoFindbumen();(7)輸出模塊;需求分析:該模塊的功能是顯示所有保存在文件中的記錄。2、流程圖;略<3>對(duì)應(yīng)函數(shù):void List(); (8)、排序模塊;

21、1、需求分析;該模塊的功能是要求將記錄按照年齡或者來院時(shí)間進(jìn)行排序,總體結(jié)構(gòu)是先用n=load()函數(shù)將文件中的數(shù)據(jù)調(diào)入內(nèi)存,然后按照選擇法排序,并將結(jié)果顯示出來,然后將排序后的結(jié)果保存。 <2>流程圖;略。 <3>對(duì)應(yīng)函數(shù): void sort_data()(9)、統(tǒng)計(jì)模塊1、需求分析;該模塊的功能是按照用戶的要求統(tǒng)計(jì)出滿足符合條件的所有記錄的個(gè)數(shù),并將滿足條件的記錄顯示出來。該模塊是在其他模塊進(jìn)行的同時(shí)進(jìn)行的,沒有單獨(dú)列出,沒有涉及到文件的保存。2流程圖;無;3對(duì)應(yīng)函數(shù):包含在其他函數(shù)內(nèi)4 所遇到的問題和分析解決(1)設(shè)計(jì)初期,先完成初步構(gòu)思,寫出主函數(shù)。然后對(duì)主函

22、數(shù)所涉及的各個(gè)模塊進(jìn)行編程,將各個(gè)模塊利用指針和鏈表聯(lián)系起來。在環(huán)境中進(jìn)行調(diào)試,應(yīng)一邊編譯,一邊調(diào)試,并且要一個(gè)模塊一個(gè)模塊的調(diào)試。直至此模塊完全沒有錯(cuò)誤時(shí),在進(jìn)入下一模塊的調(diào)試。不能直接輸入全部的代碼一次性調(diào),這樣錯(cuò)誤會(huì)很多,并且不易找出和修改。在完成程序的編譯鏈接后,要用多組數(shù)據(jù)進(jìn)行審查,確保做到系統(tǒng)無誤。設(shè)計(jì)過程中,不應(yīng)忽視環(huán)境提示的警告,有時(shí)程序運(yùn)行不正確與警告也有很大的關(guān)系。這次設(shè)計(jì)中遇到很多問題都是提示類型不匹配,這時(shí)就要認(rèn)真檢查前面的代碼,及時(shí)改正并且認(rèn)真仔細(xì),杜絕此類錯(cuò)再次發(fā)生。編寫代碼時(shí)應(yīng)該少用全局變量,全局變量在編寫試看似定義次數(shù)少,很方便。但全局變量出錯(cuò)幾率較大,且不易修

23、改,每次修改時(shí)都要全面考慮,所以應(yīng)避免用到。程序調(diào)試中碰到的錯(cuò)誤可以使自己學(xué)到知識(shí)。養(yǎng)成良好的編程習(xí)慣,可以節(jié)省很多時(shí)間,避免很多不必要的錯(cuò)誤。(2)在編輯完整個(gè)程序后,進(jìn)行調(diào)試階段總是會(huì)數(shù)顯head無定義。解決辦法:再類的定義是忘記聲明指針Worker_pay *head;。 (3)在寫讀入函數(shù)時(shí),總是不能讀入數(shù)據(jù),經(jīng)同學(xué)檢查發(fā)現(xiàn)沒有申請(qǐng)新的空間存放數(shù)據(jù)。 解決辦法:在讀入txt文件時(shí),q=new Worker_pay; q->next=NULL。5 系統(tǒng)特色及關(guān)鍵技術(shù)5.1:Worker類中的成員函數(shù)void AddItem(int,···float,f

24、loat)(1)功能:創(chuàng)建存儲(chǔ)職工工資信息的存儲(chǔ)系統(tǒng)以及添加某職工的工資信息。算法思路:先定義一個(gè)結(jié)構(gòu)體Worker_pay,通過從表尾插入的方法來建立鏈表。首先要先設(shè)立一個(gè)頭指針(head)來存放鏈表的首地址,然后,不斷用new運(yùn)算符生成一個(gè)新的結(jié)點(diǎn),將這個(gè)結(jié)點(diǎn)鏈入已有的鏈表尾部;如果鏈表中還沒有結(jié)點(diǎn),則這個(gè)新結(jié)點(diǎn)將是首結(jié)點(diǎn),否則,將新結(jié)點(diǎn)的地址賦給原有鏈表的尾結(jié)點(diǎn)的next指針。流程圖:StartIF !head員工工資信息賦給headReturn*t=headWhile t&t->num!= num1t=t->nextIF t操作失敗Return*p->head

25、Whilep->nextp->next員工工資信息賦給pReturnEnd(3)代碼:void Worker:AddItem(int num1,string name1 , )if(!head)head=new Worker_pay;head->num=num1; head->next=NULL;return;Worker_pay * t=head;while(t&&t->num!=num1) t=t->next;if(t)cout<<"操作失?。粏T工編號(hào)為"<<num1<<"

26、的信息已經(jīng)存在!"<<endl;return;Worker_pay * p=head;while(p->next)p=p->next;Worker_pay * p1=new Worker_pay; return;5.2:Worker類中的成員函數(shù)void sort_data()(1)功能:創(chuàng)建存儲(chǔ)職工工資信息的存儲(chǔ)系統(tǒng)以及添加某職工的工資信息。算法思路:運(yùn)用算法課本上的直接選擇排序的算法,與課本的不同之處在于,本程序是用指針進(jìn)行排序的,課本使用的數(shù)組。直接選擇排序的比較次數(shù)與文件初始狀態(tài)無關(guān),在第i趟排序中選出最小的記錄,需做n-i次比較,因此總的次數(shù)為:O(

27、N*N),文件初始狀態(tài)為正序時(shí),移動(dòng)0;最壞情況每趟排序都要交換操作,總的移動(dòng)次數(shù)是3(n-1)。直接選擇排序的平均時(shí)間復(fù)雜度為O(n平方)。算法中增加了一個(gè)輔助空間temp,因此輔助空間為S(n)=O(1)。直接選擇排序是不穩(wěn)定的。 主要代碼:Worker_pay * p,*q,*small,*temp; temp= new Worker_pay ; for(p=head;p->next!=NULL;p=p->next)small=p;for(q=p->next ;q!=NULL;q=q->next)if(q->eduage<small->eduag

28、e)small=q;if(small!=p) temp->eduage=p->eduage;p->eduage=small->eduage;small->eduage=temp->eduage; cout<<"員工編號(hào) 員工姓名 年齡 性別 部門 職務(wù) 學(xué)歷 工資 缺勤(天) 罰金 個(gè)稅 實(shí)發(fā)數(shù)"<<endl; while(head!=NULL) Display(head); head=head->next;6 用戶手冊(cè)及測(cè)試結(jié)果6.1用戶手冊(cè)運(yùn)行程序時(shí),界面剛開始出現(xiàn)一個(gè)主菜單及提示信息,用戶通過在鍵盤上輸

29、入來選擇某個(gè)功能。當(dāng)用戶選擇了某個(gè)功能,系統(tǒng)將跳轉(zhuǎn)到所選擇的功能界面,用戶將可以根據(jù)提示信息來使用該功能,當(dāng)用戶通過鍵盤輸入編號(hào)為-1時(shí),系統(tǒng)將返回主界面。 6.2 測(cè)試結(jié)果1,主菜單2,輸入,添加,刪除,修改,查詢:統(tǒng)計(jì)排序7.總結(jié):成功之處:此系統(tǒng)程序雖然簡(jiǎn)單,卻集結(jié)了基本的管理功能。刪除,存儲(chǔ),統(tǒng)計(jì)等功能還是較為成功的。特別是人事檔案的統(tǒng)計(jì)管理功能,使煩瑣的工作變得簡(jiǎn)單輕松。不足之處:由于我們水平和時(shí)間有限,難免有不足和差強(qiáng)人意的地方。尤其是對(duì)于系統(tǒng)應(yīng)該配以保密性的設(shè)置,可是由于我知識(shí)積累不夠,做不出來。還請(qǐng)遲老師海涵。兩周的數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)結(jié)束了,在這幾天的時(shí)間里,我自己獨(dú)立完成

30、了一個(gè)程序從構(gòu)思結(jié)構(gòu),到編寫代碼,然后上機(jī)調(diào)試運(yùn)行的過程,感覺自己收獲很大。通過解決一個(gè)又一個(gè)的問題,熟悉了C+語(yǔ)言的應(yīng)用。在設(shè)計(jì)過程中,在編程時(shí)條理清晰是至關(guān)重要的。主函數(shù),函數(shù),成員函數(shù)之間的層次關(guān)系,調(diào)用關(guān)系一定要有一個(gè)全面的把握,尤其要體會(huì)類的封裝性。另外很重要的一點(diǎn)就是一定要對(duì)鏈表的五種操作熟練的掌握。我理解了對(duì)于一個(gè)較大的程序,不可能一次編寫出一個(gè)較大的系統(tǒng),通常要采取自頂向下的設(shè)計(jì)思想,先設(shè)計(jì)主函數(shù),再通過完善一個(gè)個(gè)的功能模塊來完成程序的設(shè)計(jì)過程,在設(shè)計(jì)過程中要充分理解整個(gè)程序的設(shè)計(jì)思路,采用逐步細(xì)化的方式來完成整個(gè)程序。在編譯,鏈接,調(diào)試的過程中一定要有耐心。因?yàn)橐粋€(gè)程序中會(huì)有

31、很多小的錯(cuò)誤,甚至有的問題要幾個(gè)小時(shí)才能解決。遇到問題,一定要全面分析,有時(shí)候還要向同學(xué)請(qǐng)教??偟脕碚f,編程時(shí)極需要耐心的。 參考文獻(xiàn)C語(yǔ)言大學(xué)實(shí)用教程 電子工業(yè)出版社2、C+程序設(shè)計(jì)教程(第二版)高等教育出版社 3、C語(yǔ)言程序設(shè)計(jì)教程 北京大學(xué)出版社4、C語(yǔ)言程序設(shè)計(jì)實(shí)例精粹 電子工業(yè)出版社 5、6、陳天華編.面向?qū)ο蟪绦蛟O(shè)計(jì)與Visual C+6.0教程M.北京:清華大學(xué)出版社,2006程序清單:#include<iostream>#include<string>#include<fstream>#include<iomanip>using

32、namespace std;/*/*定義一個(gè)員工信息的結(jié)構(gòu)體Worker_pay*/struct Worker_payint num; /員工編號(hào)string name; /員工姓名int age; /年齡string sex; /性別string department; /部門string title; /職務(wù)int eduage; /學(xué)歷(年)float wage; /工資int day; /缺勤天數(shù)float allowance; /扣發(fā)工資float tax; /個(gè)人所得稅float real_wage; /實(shí)發(fā)數(shù)Worker_pay * next; /鏈表結(jié)點(diǎn)的指針域;/*/*定義一

33、個(gè)員工類Worker*/class Workerprotected:Worker_pay * head;/鏈表的頭結(jié)點(diǎn)指針 / Worker_pay * p;public:Worker()head=NULL; /構(gòu)造函數(shù)void Display(Worker_pay *); /輸出函數(shù) Worker_pay * Find(int); /查找函數(shù)Worker_pay * Find(string,string);Worker_pay * Find(string);int ListCount(); /統(tǒng)計(jì)員工人數(shù)函數(shù) void AddItem(int,string,int,string,string

34、,string,int,float,int,float); /創(chuàng)建鏈表并鏈表的插入void RemoveItem(int); /刪除函數(shù)void ReplaceItem(int); /修改函數(shù)void ListL(); /遍歷函數(shù) void Search(int); /查找并輸出某個(gè)員工信息函數(shù) void Search(string,string);void Search(string); void Listavg(string);void Real_wage(float,float); /計(jì)算函數(shù)void Recordinfo(int,string,int,string,string,str

35、ing,int,float,int,float,float,float); /存儲(chǔ)函數(shù)void paixu(string);void load(); void sort_data();/Worker_pay *t;/*/功能:用于統(tǒng)計(jì)員工人數(shù)int Worker:ListCount()if(!head) return 0;Worker_pay * p=head;int n=0;while(p)n+;p=p->next;return n;/*/功能:在鏈表中查找員工的編號(hào)Worker_pay * Worker:Find(int num)if(ListCount=0)cout<<

36、"列表為空,請(qǐng)先輸入數(shù)據(jù)!"<<endl;return NULL;Worker_pay * p=head;while(p)if(p->num=num) break;p=p->next;if(!p)cout<<"錯(cuò)誤,找不到該信息!"<<endl;return NULL;return p;/*/*Worker_pay * Worker:Find(string department)if(ListCount=0)cout<<"列表為空,請(qǐng)先輸入數(shù)據(jù)!"<<endl;r

37、eturn NULL;Worker_pay * p=head;while(p)if(p->department=department) /Worker1.Listavg(department);break;p=p->next;if(!p)cout<<"錯(cuò)誤,找不到該信息!"<<endl;return NULL;return p;*/*/功能:創(chuàng)建鏈表及鏈表的插入void Worker:AddItem(int num1,string name1,int age1,string sex1,string department1,string t

38、itle1,int eduage1,float wage1,int day1,float allowance1)if(!head)head=new Worker_pay;head->num=num1;head->name=name1;head->age=age1;head->sex=sex1;head->department=department1;head->title=title1;head->eduage=eduage1;head->wage=wage1;head->day=day1;head->allowance=allowa

39、nce1;head->next=NULL;return;Worker_pay * t=head;while(t&&t->num!=num1)t=t->next;if(t)cout<<"操作失??;員工編號(hào)為"<<num1<<"的信息已經(jīng)存在!"<<endl;return;Worker_pay * p=head;while(p->next)p=p->next;Worker_pay * p1=new Worker_pay;p1->num=num1;p1->

40、name=name1;p1->age=age1;p1->sex=sex1;p1->department=department1;p1->title=title1;p1->eduage=eduage1;p1->wage=wage1;p1->day=day1;p1->allowance=allowance1;p1->next=NULL;p->next=p1;return;/*/功能:從鏈表中刪除一個(gè)結(jié)點(diǎn)void Worker:RemoveItem(int num)Worker_pay * t=Find(num);if(!t)return;

41、Worker_pay * p=head;if(head=t)head=head->next;delete p;cout<<"成功刪除員工編號(hào)為"<<num<<"的信息!"<<endl;return;while(p->next!=t)p=p->next;Worker_pay * p1=p->next;p->next=p1->next;delete p1;cout<<"成功刪除員工編號(hào)為"<<num<<"的信息

42、!"<<endl;return;/*/功能:修改員工信息void Worker:ReplaceItem(int num)Worker_pay * p=Find(num);if(!p)return;cout<<"請(qǐng)重新輸入相應(yīng)信息"<<endl;cout<<"員工編號(hào):"cin>>p->num;cout<<"員工姓名:"cin>>p->name;cout<<"年齡:"cin>>p->

43、age;cout<<"性別:"cin>>p->sex;cout<<"部門:"cin>>p->department;cout<<"職務(wù):"cin>>p->title;cout<<"學(xué)歷(年):"cin>>p->eduage;cout<<"工資(元):"cin>>p->wage;cout<<"月缺勤天數(shù):"cin>

44、>p->day;/cout<<"津貼(元):"p->allowance=p->wage*p->day*0.01;/cin>>* allowance;return;/*/功能:輸出員工信息void Worker:Display(Worker_pay * p)cout<<setw(3)<<p->num<<setw(9)<<p->name<<setw(9)<<p->age<<setw(5)<<p->sex&l

45、t;<setw(5)<<p->department<<setw(5)<<p->title<<setw(5)<<p->eduage<<setw(6)<<p->wage<<setw(6)<<p->day<<setw(8)<<p->allowance<<setw(4)<<p->tax<<setw(8)<<p->real_wage<<endl;return;/

46、*/功能:遍歷鏈表void Worker:ListL()float sum=0;float aver=0;int n=0;if(ListCount=0)cout<<"當(dāng)前列表為空,請(qǐng)先輸入數(shù)據(jù)!"<<endl;return;Worker_pay * p=head;cout<<"*員工信息*"<<endl;cout<<"共有"<<ListCount()<<"個(gè)員工信息"<<endl;cout<<"員工

47、編號(hào) 員工姓名 年齡 性別 部門 職務(wù) 學(xué)歷 工資 缺勤(天) 罰金 個(gè)稅 實(shí)發(fā)數(shù)"<<endl;while(p!=NULL)Display(p);n+;sum+=p->wage;p=p->next;aver=sum/n;cout<<"員工平均薪水:"<<aver<<endl;return;/*/功能:查找并輸出指定員工信息void Worker:Search(int num)cout<<"Search."<<endl;Worker_pay * p =Find(

48、num);if(p)cout<<"員工編號(hào)為"<<num<<"的員工工資信息:"<<endl;cout<<"員工編號(hào) 員工姓名 年齡 性別 部門 職務(wù) 學(xué)歷 工資 缺勤(天) 罰金 個(gè)稅 實(shí)發(fā)數(shù)"<<endl;Display(p);cout<<endl;return;/*/功能:程序內(nèi)部函數(shù)計(jì)算的信息例如個(gè)人所得稅,實(shí)發(fā)數(shù)void Worker:Real_wage(float tax,float real_wage)if(ListCount()=0)c

49、out<<"當(dāng)前列表為空,請(qǐng)先輸入數(shù)據(jù)!"<<endl;return;Worker_pay * p=head;while(p) float q;q=p->wage-p->allowance-2000;if(q<=0)p->tax=0;else p->tax=q*0.1;p->real_wage=q+2000-p->tax;p=p->next;return;/*/功能:存儲(chǔ)員工信息void Worker:Recordinfo(int num1,string name1,int age1,string se

50、x1,string department1,string title1,int eduage1,float wage1,int day1,float allowance1,float tax1,float real_wage1) ofstream file1("info1.txt",ios:app);file1<<num1<<"t"<<name1<<"t"<<age1<<"t"<<sex1<<"t"&

51、lt;<department1<<"t"<<title1<<"t"<<eduage1 <<"t"<<wage1<<"t"<<day1<<"t"<<allowance1<<"t"<<tax1<<"t"<<real_wage1<<endl;file1.close();void Worker:load()/讀全部數(shù)據(jù) 沒有完善 Worker_pay *t;t=new Worker_pay; ifstream in("info1.txt"); if(!in) cout<<"文件打開失??!"<<endl; Worker_pay *q; head=t;/int ii ; if(!in.eof()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論