第一篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-職工管理系統(tǒng)
目錄
一、前言--------2
二、需求分析--3
三、概要設(shè)計(jì)--4
四、詳細(xì)設(shè)計(jì)--5
五、調(diào)試分析--6
六、用戶使用說明---------------------------7
七、測(cè)試結(jié)果--8
八、總結(jié)-------11
九、主要參考文獻(xiàn)和附錄-----------------12
前言
員工管理系統(tǒng)是一個(gè)工作單位不可缺少的管理工具,它管理的數(shù)據(jù)對(duì)于公司的決策者和管理者來說都至關(guān)重要,所以員工管理系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄巍5恢币詠砀鱾€(gè)公司基本上都是靠傳統(tǒng)的人工方式來管理員工信息,這種管理方式存在著許多缺點(diǎn),如:效率低、保密性差,另外時(shí)間一長(zhǎng),將產(chǎn)生大量的文件和數(shù)據(jù),這對(duì)于信息的查找、更新和維護(hù)都帶來了不少的困難。
當(dāng)今社會(huì),信息迅速膨脹,隨著各個(gè)公司的規(guī)模增大,有關(guān)信息管理工作所涉及的數(shù)據(jù)量越來越大,員工信息量也大大增加,利用傳統(tǒng)的手工查詢、登記、修改等方法的處理速度遠(yuǎn)遠(yuǎn)跟不上公司的需求,有的公司不得不靠增加人力、物力來進(jìn)行信息管理。
隨著計(jì)算機(jī)技術(shù)的不斷提高,計(jì)算機(jī)作為知識(shí)經(jīng)濟(jì)時(shí)代的產(chǎn)物,其強(qiáng)大的功能已為人們深刻認(rèn)識(shí),它已進(jìn)入人類社會(huì)的各個(gè)行業(yè)和領(lǐng)域并發(fā)揮著越來越重要的作用,成為人們工作和生活中不可缺少的一部分。
而作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)員工進(jìn)行管理,具有手工管理所無(wú)法比擬的優(yōu)點(diǎn)。例如:檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低等。這些優(yōu)點(diǎn)能夠極大地提高員工管理的效率,也是公司的科學(xué)化、正規(guī)化管理和與世界接軌的重要條件。
員工管理系統(tǒng)作為一種管理軟件正在各公司中得到越來越廣泛的應(yīng)用,且已達(dá)到了良好效果。
需求分析
員工信息管理系統(tǒng)是企業(yè)管理中的一個(gè)重要內(nèi)容,隨著時(shí)代的進(jìn)步,企業(yè)也逐漸變得龐大起來。如何管理好企業(yè)內(nèi)部員工的信息,成為企業(yè)管理中的一個(gè)大問題。在這種情況下,開發(fā)一個(gè)人力資源管理系統(tǒng)就顯得非常必要
現(xiàn)在,市場(chǎng)上可以選購(gòu)的應(yīng)用開發(fā)產(chǎn)品很多,流行的也有數(shù)十種。在目前市場(chǎng)上這些眾多的程序開發(fā)工具中,有些強(qiáng)調(diào)程序語(yǔ)言的彈性與執(zhí)行效率;有些則偏重于可視化程序開發(fā)工具所帶來的便利性與效率的得高,各有各的優(yōu)點(diǎn)和特色,也滿足了不同用戶的需求。然而,語(yǔ)言的彈性和工具的便利性是密不可分的,只強(qiáng)調(diào)程序語(yǔ)言的彈性,卻沒有便利的工具作配合,會(huì)使一些即使非常簡(jiǎn)單的界面處理動(dòng)作,也會(huì)嚴(yán)重地浪費(fèi)程序設(shè)計(jì)師的寶貴時(shí)間;相反,如果只有便利的工具,卻沒有彈性的語(yǔ)言作支持,許多特殊化的處理動(dòng)作必需要耗費(fèi)數(shù)倍的工夫來處理,使得原來所標(biāo)榜的效率提高的優(yōu)點(diǎn)失去了作用。
本系統(tǒng)結(jié)合公司實(shí)際的人事、制度,經(jīng)過實(shí)際的需求分析,采用功能強(qiáng)大的Visual C++ 6.0作為開發(fā)工具而開發(fā)出來的管理系統(tǒng)。整個(gè)系統(tǒng)從符合操作簡(jiǎn)便、界面友好、靈活、實(shí)用、安全的要求出發(fā),本管理系統(tǒng)具有如下功能:
1、問題描述
對(duì)單位的員工進(jìn)行管理,包括插入、刪除、查找、排序等功能。
2、要求
員工對(duì)象包括姓名、性別、年齡、職位、工齡等信息。
(1)新增一名員工:將新增員工對(duì)象按姓名以字典方式員工管理文件中,基本信息中的編號(hào)是按照添加順序自動(dòng)增加的。
(2)刪除一名員工:從員工管理文件中刪除一名員工對(duì)象,分為根據(jù)編號(hào)刪除、根據(jù)姓名刪除。
(3)查詢:從員工管理文件中查詢符合某些條件(編號(hào)、姓名)的員工。(4)修改:根據(jù)編號(hào)檢索出對(duì)象,既可以對(duì)整個(gè)對(duì)象修改,也可對(duì)某個(gè)屬性修改。
(5)排序:按照年齡、工齡對(duì)所有的員工排序(降序),也可以回復(fù)排序以前的員工現(xiàn)實(shí)狀態(tài)。
3、實(shí)現(xiàn)提示
員工對(duì)象數(shù)不必很多,便于一次讀入內(nèi)存,所有操作不經(jīng)過內(nèi)外存交換。(1)當(dāng)啟動(dòng)程序是,自動(dòng)從文件(message.txt)中讀出員工信息(2)由鍵盤輸入員工對(duì)象存入鏈表當(dāng)中。
(3)對(duì)員工對(duì)象中的“編號(hào)、年齡、工齡”按字典順序進(jìn)行排序。(4)對(duì)排序后的員工對(duì)象進(jìn)行增、刪、查詢、修改、排序等操作。(5)當(dāng)退出程序時(shí),將此刻單鏈表中存儲(chǔ)的數(shù)據(jù)寫入到文件(message.txt)中去,保存起來。
概要設(shè)計(jì)
(一)數(shù)據(jù)類型定義:
typedef struct{ int num;//編號(hào)
char name[MAX_NUM];//姓名
int age;//年齡
char job[MAX_NUM];//職位;
int workTime;// 工齡
}People;ypedef struct node{ People people;struct node * next;int len;//表示鏈表長(zhǎng)度
}linklist;
(二)流程圖:
(圖1)
(三)各程序模塊之間的層次圖:
(圖2)
詳細(xì)設(shè)計(jì)
1、主菜單模塊:顯示員工管理系統(tǒng)的主菜單,供用戶選擇所需的功能,通過自己定義的void main()函數(shù)來實(shí)現(xiàn)。
2、添加員工模塊:輸入員工的編號(hào)、姓名、年齡、職位、工齡以,通過自己定義的void addMessage()函數(shù)來實(shí)現(xiàn)。
3、查詢員工信息模塊:瀏覽所有員工的相關(guān)信息,通過自己定義的void searchPeople()函數(shù)來實(shí)現(xiàn)。
(1)按員工姓名查詢:可以按員工工號(hào)來查詢員工的相關(guān)信息,通過自己定義的void searchPeopleByName()函數(shù)來實(shí)現(xiàn)。
(2)按員工編號(hào)查詢:可以按員工職務(wù)來查詢員工的相關(guān)信息,通過自己定義的void searchPeopleByNum()函數(shù)來實(shí)現(xiàn)。
(3)退出。
4、刪除員工模塊:刪除需要?jiǎng)h除的員工的所有信息,通過自己定義的void deletePeople()函數(shù)來實(shí)現(xiàn)。
(1)按員工姓名刪除模塊:可以按員工工號(hào)來刪除員工的相關(guān)信息,通過自己定義的void deletePeopleByName()函數(shù)來實(shí)現(xiàn)。
(2)按員工編號(hào)刪除模塊:可以按員工編號(hào)刪除員工的相關(guān)信息,通過自己定義void deletePeopleByNum()函數(shù)來實(shí)現(xiàn)。
(3)退出
5、修改模塊:可以修改需要修改的員工的相關(guān)信息,通過自己定義的 void editMessage()函數(shù)來實(shí)現(xiàn)。
(1)修改整條記錄,可以修改該員工的全部信息,通過自己定義的void editAll()函數(shù)來實(shí)現(xiàn)。
(2)修改部分記錄,可以修改該員工的部分信息,通過自己定義的void editSome()
函數(shù)來實(shí)現(xiàn)。
(3)退出。
6、員工信息排序模塊:可以按照規(guī)定要求對(duì)員工信息排序,通過自己定義的void sort()函數(shù)來實(shí)現(xiàn)。
(1)按年齡排序:可以按員工工號(hào)對(duì)員工信息排序,通過自己定義的void sortByAge()函數(shù)來。
(2)按工齡排序:可以按員工工齡對(duì)員工信息排序,通過自己定義的void sortByWorkTime()函數(shù)來實(shí)現(xiàn)。
(3)回復(fù)原排序:可以回復(fù)排序前的順序,通過自己定義的void sortByNum()函數(shù)來實(shí)現(xiàn)。
(4)退出。
7、退出系統(tǒng)模塊:退出員工信息管理系統(tǒng),通exit(0)函數(shù)來實(shí)現(xiàn)。
函數(shù)調(diào)用圖:
(圖3)
調(diào)試分析
測(cè)試是使用人工或者自動(dòng)手段來運(yùn)行或測(cè)試某個(gè)系統(tǒng)的過程,其目的在于檢驗(yàn)是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。
在調(diào)試查詢修改功能過程中,查詢的結(jié)果顯示,沒有找到員工信息,最后發(fā)現(xiàn)查找的結(jié)點(diǎn)不正確,查詢應(yīng)該與輸入的值和頭結(jié)點(diǎn)next比較。此外查詢結(jié)點(diǎn)不知道如何循環(huán),反復(fù)修改程序才知道如何繼續(xù)查找而不出錯(cuò)誤。
本次課程設(shè)計(jì)是圍繞數(shù)據(jù)結(jié)構(gòu)進(jìn)行。根據(jù)問題描述可知,需要解決問題并不復(fù)雜,整個(gè)問題只需要實(shí)現(xiàn)一個(gè)員工管理系統(tǒng)功能,那就是在這個(gè)系統(tǒng)中實(shí)現(xiàn)對(duì)員工信息的插入、刪除、查詢、排序、修改。但是,為了實(shí)現(xiàn)該功能,卻需要優(yōu)秀的算法和數(shù)據(jù)結(jié)構(gòu)以保證實(shí)現(xiàn)的時(shí)間和空間效率。把員工信息存儲(chǔ)在一個(gè)單鏈表中,利用指針實(shí)現(xiàn)對(duì)員工信息的各項(xiàng)基本操作。
雖然設(shè)計(jì)的程序完成了題目描述所需要實(shí)現(xiàn)的功能,但是仍然存在不如人意的地方。可以排序上面多設(shè)計(jì)幾個(gè)算法,實(shí)現(xiàn)多角度排序。在這個(gè)系統(tǒng)中沒有員工序號(hào)的信息,所以允 6
許員工姓名相同,在一定程度上可能存在員工信息重復(fù)。
經(jīng)過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),我們不僅及時(shí)鞏固的了數(shù)據(jù)結(jié)構(gòu)、算法、以及軟件工程的知識(shí),并明白數(shù)據(jù)結(jié)構(gòu)和算法對(duì)于程序時(shí)間和空間性能的影響,及軟件工程提供的開發(fā)流程和工具對(duì)于實(shí)現(xiàn)特定功能程序的重要意義。
當(dāng)我們面對(duì)一個(gè)實(shí)際問題,應(yīng)該迅速根據(jù)問題性質(zhì)和特點(diǎn)抽象成特定的數(shù)據(jù)結(jié)構(gòu),當(dāng)然每個(gè)問題都有可能能夠抽象成多種數(shù)據(jù)結(jié)構(gòu),每種數(shù)據(jù)結(jié)構(gòu)適應(yīng)于不同的算法。因此應(yīng)該綜合考慮這樣的數(shù)據(jù)結(jié)構(gòu)、算法以及它們的空間和時(shí)間效率,然后從中選擇一個(gè)作為實(shí)現(xiàn)程序的基礎(chǔ)。
用戶使用說明
進(jìn)入員工管理系統(tǒng),首先看到的就是主菜單界面,然后提示:“請(qǐng)選擇主菜單(0---6):” 如果選擇1,進(jìn)入添加員工模塊,按照提示語(yǔ)依次錄入員工對(duì)象信息。選擇2,進(jìn)入展示員工所有的信息模塊,DOS界面顯示剛才錄入的員工信息。選擇3,進(jìn)入員工查詢模塊,在此模塊下: 系統(tǒng)提示:按姓名查詢、按編號(hào)查詢,系統(tǒng)根據(jù)用戶選擇進(jìn)行相應(yīng)的處理,退 出查詢模塊時(shí),系統(tǒng)進(jìn)入主菜單模塊。
選擇4,進(jìn)入刪除員工模塊,在此模塊下: 系統(tǒng)提示:按編號(hào)刪除、按姓名刪除,系統(tǒng)根據(jù)用戶選擇,進(jìn)行相應(yīng)的處理,退出刪除模塊時(shí),系統(tǒng)進(jìn)入主菜單模塊。
選擇5,進(jìn)入修改員工信息模塊,在該模塊下: 系統(tǒng)提示:修改整條信息,修改部分信息,系統(tǒng)根據(jù)用戶選擇,進(jìn)行相應(yīng)的功 能處理。當(dāng)用戶選擇退出修改模塊時(shí),系統(tǒng)進(jìn)入主菜單模塊。
選擇6,進(jìn)入排序模塊,在該模塊下: 系統(tǒng)提示:按年齡排序、按工齡排序、回復(fù)原排序,系統(tǒng)根據(jù)用戶的選擇,進(jìn) 行相應(yīng)的處理。
選擇0,退出系統(tǒng)。
測(cè)試結(jié)果
(一)當(dāng)操作人員運(yùn)行程序時(shí),彈出的DOS界面如下:
(二)根據(jù)提示語(yǔ),輸入1,添加員工信息,操作如下界面:
(三)在主菜單輸入2,進(jìn)入輸出員工功能,操作如下:
添加員工、展示所有員工信息功能實(shí)現(xiàn)。
(四)在主菜單輸入3,查詢員工信息
按編號(hào)查詢,測(cè)試如下:
按姓名查詢,測(cè)試如下:
以上查詢功能測(cè)試功能。
(五)在主菜單,輸入4,刪除員工功能:
按編號(hào)刪除,測(cè)試如下:
按姓名刪除如下:
以上測(cè)試完成。
(六)在主菜單輸入5,進(jìn)入修改信息功能:
上面是對(duì)每一條記錄進(jìn)行的修改。當(dāng)你選擇2的菜單時(shí),則是對(duì)某條信息的某個(gè)字段對(duì)其進(jìn)行內(nèi)容修改,在這里就不做演示了。
(七)在主菜單輸入6,進(jìn)入排序功能:
按年齡排序,測(cè)試如下:
按工齡排序相同操作,測(cè)試成功。回復(fù)排序,回復(fù)到未排序狀態(tài),測(cè)試成功。
(八)退出,將所有的員工信息寫入message.txt 文件中,實(shí)現(xiàn)永久保存。退出系統(tǒng),測(cè)試完成。
總結(jié)
在本系統(tǒng)的開發(fā)過程中由于時(shí)間也比較倉(cāng)促、準(zhǔn)備不充分,系統(tǒng)必然會(huì)存在一些缺陷和不足。對(duì)員工信息管理的整個(gè)流程不夠熟悉,在需求分析時(shí)未能做到完全滿足用戶的需求。
課程設(shè)計(jì)中我們遇到很多問題。我們?cè)陂_發(fā)時(shí),我們查閱了許多資料,了解到即是對(duì)員工的編號(hào)號(hào),姓名,年齡,工齡等復(fù)雜多樣的信息,能夠較清晰,快捷而操作方便的現(xiàn)代化管理系統(tǒng)。弄清了這個(gè)基本概念以后,我們又詳細(xì)理解了老師所講的設(shè)計(jì)要求和注意事項(xiàng),大致確定了總體的設(shè)計(jì)思路,初步提出問題的解決方案,以及系統(tǒng)大致設(shè)計(jì)方案和框架,接下來我們就著手編程。在編程過程中,先是根據(jù)系統(tǒng)所要求,找出所需要知識(shí)點(diǎn)。編完程序,我們?cè)跈C(jī)房進(jìn)行了一次又一次的調(diào)試,找出了其中的錯(cuò)誤,一一糾正,并且修改了其中不太完善的部分,力求做到實(shí)用并且精確
盡管本管理系統(tǒng)存在著很多不足,但其功能全面、易于日后程序更新、數(shù)據(jù)庫(kù)管理容易、界面友好、操作方便、效率高、安全性好等優(yōu)點(diǎn)是本管理系統(tǒng)所必需的。通過開發(fā)這個(gè)系統(tǒng),我組掌握了的項(xiàng)目基本開發(fā)過程,用到的知識(shí)鞏固了我對(duì)C語(yǔ)言的學(xué)習(xí),但在這次設(shè)計(jì)中的最大收獲并不是掌握這幾門開發(fā)工具的應(yīng)用,而是學(xué)會(huì)了設(shè)計(jì)系統(tǒng)的思維方法。
通過本次課程設(shè)計(jì),我們對(duì)數(shù)據(jù)結(jié)構(gòu)知識(shí)掌握了很多,并能將它用以程序編寫中,并且提高了自己的解決實(shí)際問題的能力。
主要參考文獻(xiàn)
[1]李云清,楊慶紅,揭安全.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].北京:人民郵電大學(xué)出版社,2004.6 [2]潘彥.算法設(shè)計(jì)與分析基礎(chǔ)[M].北京:清華大學(xué)出版社,2007.1 [3]軟件工程原理與應(yīng)用/曾強(qiáng)聰,趙歆編著 北京:清華大學(xué)出版社,2011 [4] 呂鳳翥.C++語(yǔ)言程序設(shè)計(jì)(第2版)[M].北京:電子工業(yè)出版社,2007.2 [5] 嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)[M].北京:清華大學(xué)出版社,2002.9----------------------------11
附錄:源代碼
#include
#define MAX_NUM 40
typedef struct{ int num;//編號(hào)
char name[MAX_NUM];//姓名
int age;//年齡
char job[MAX_NUM];//職位;
int workTime;// 工齡
}People;
typedef struct node{ People people;struct node * next;int len;//表示鏈表長(zhǎng)度
}linklist;
void doAddMessage(linklist * s){ int i=0,value1=0,j;char ch;printf(“t請(qǐng)輸入員工的姓名(以#號(hào)鍵結(jié)束):”);scanf(“%c”,&ch);while(ch!='#'){
s->people.name[i]=ch;
i++;
scanf(“%c”,&ch);} for(j=i;j<40;j++){
s->people.name[j]='