家譜管理軟件設(shè)計報告_第1頁
家譜管理軟件設(shè)計報告_第2頁
家譜管理軟件設(shè)計報告_第3頁
家譜管理軟件設(shè)計報告_第4頁
家譜管理軟件設(shè)計報告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、家譜管理軟件設(shè)計報告計算機科學(xué)與技術(shù)04級(2)班蔡少偉200433100067一問題陳述1.1 問題提出背景家譜是記載同一姓氏血緣關(guān)系的世系、重要人物、個人事跡、家族歷史為主要內(nèi)容的譜籍,又稱“族譜”、“家譜”、“家乘”,還有稱作“譜碟”。家譜上可以追本溯源,緬懷先人,下可以辨明關(guān)系,聯(lián)絡(luò)宗親,從而啟孝梯心,喚德善之本,激勵后人,奮發(fā)有為,其作用不可盡述。在社會方面,家譜對于海內(nèi)外華人尋根認(rèn)祖,增強民族凝聚力起著重要作用。在文史工作者,家譜是研究人口學(xué)、社會學(xué)、經(jīng)濟學(xué)、歷史學(xué)、氏族學(xué)、人物傳記,以及研究地方史乃是重要資料。在個人方面家譜又是每個公民身份證明之一。如有些族規(guī)有載,某人若不遵法紀(jì)

2、,為非作歹者,擊鼓鳴公,革出族外,不準(zhǔn)入譜。可見家譜無論在社會在個人都起著重要作用?,F(xiàn)在廣東省已經(jīng)是經(jīng)濟大省,正在向文化大省邁開步伐,家譜的科學(xué)管理不但有助于民族文化和地方文化的發(fā)展,而且有其自身的積極意義。廣州作為廣東的政治經(jīng)濟文化中心,若家譜管理能在廣州得到應(yīng)用,必會促進廣州文化的發(fā)展,進一步推廣應(yīng)用,帶動廣東的文化事業(yè)。1.2 概述設(shè)計目標(biāo)和軟件功能本課程設(shè)計正是以家譜管理為課題,力求通過設(shè)計并實現(xiàn)一個計算機軟件,來支持對家譜的存儲、更新、查詢、統(tǒng)計,打印等操作。本課程設(shè)計要實現(xiàn)的功能詳述如下:一,家譜信息的存儲。將家譜成員的基本信息和各成員的關(guān)系存儲在計算機中,并可永久保存。家譜成員的

3、基本信息包括:編號,輩份,姓名,出生地,出生日期,死亡日期,性別,身高,學(xué)歷,職業(yè),最高職務(wù)/職稱,壽命等。二,家譜信息的更新。主要是對家譜中個人信息的修改,刪除成員,添加成員。三,查詢功能。包括按姓名查詢,按基本信息查詢和按親戚關(guān)系查詢。其中按基本信息查詢包括按身高,姓別,學(xué)歷,壽命,職業(yè)查詢。按親戚關(guān)系查詢中親戚關(guān)系有:家人(三代),所有關(guān)系(三代),爺爺,奶奶,父親,母親,叔伯,姑姑,配偶,兄弟姐妹,堂兄弟姐妹,子女,孫子女等。四,統(tǒng)計功能。統(tǒng)計的項目有:平均(最長/最短)壽命、平均(最高)身高、男女比例、平均(最高/低)學(xué)歷、總?cè)丝?,職業(yè)統(tǒng)計等。五,打印功能。將家譜以較友好的格式在屏幕

4、上顯示。二設(shè)計方法闡述軟件總體框架本軟件的運行方式是程序開始經(jīng)登錄界面進入家譜管理系統(tǒng)。登錄不成功(即登錄信息不正確)則退出程序,登錄成功則進入家譜管理系統(tǒng)。進入家譜管理系統(tǒng)后首先從磁盤讀出家譜信息和各家庭成員的基本信息,以鄰接表的形式把各成員結(jié)點鏈成雙向鏈表。生成鏈表過程中每讀出一個成員的信息就生成一新結(jié)點,并把該結(jié)點加在表尾。信息讀取完畢,建立起鄰接表形式的雙向鏈表,便可以對家譜進行各種操作。程序結(jié)束后再把信息存儲在磁盤上。本軟件的總體運行框架如下:磁盤文件成功生成鏈表不成功退出讀取信息寫回信息注:在打印家譜操作中,實現(xiàn)了支持鼠標(biāo)的功能。軟件設(shè)計思路(1)數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)結(jié)構(gòu)上,家庭成員之間

5、的關(guān)系,用樹形結(jié)構(gòu)(家族樹)表示,這是本家譜管理系統(tǒng)的邏輯結(jié)構(gòu);而家族樹在內(nèi)存中的存儲結(jié)構(gòu)是采用鄰接表。鄰接表的實現(xiàn):家庭成員基本信息設(shè)置數(shù)字編號,用于唯一地標(biāo)識記錄,樹結(jié)點用家庭成員的編號標(biāo)識,通過編號,建立家庭成員的基本信息與樹結(jié)點的聯(lián)系;家庭成員基本信息另設(shè)置鄰接點的數(shù)字編號,包括第一個孩子,父親,配偶和下一個弟弟或妹妹的編號,暫無該關(guān)系的則該關(guān)系編號為0,通過這些編號可以建立起結(jié)一個樹結(jié)點和其它各結(jié)點之間的聯(lián)系。這樣,就建立起鄰接表形式的家族樹。鄰接表的形式如下:本人父親配偶孩子兄弟個人信息31694王仁。00417125王義。0051815031勇000ooo37145100王二勇0

6、003815520139:王三清。39155300王三城。00在設(shè)計家譜管理系統(tǒng)的時候,最重要的是決定使用何種方式組織家族樹,即采用何種數(shù)據(jù)結(jié)構(gòu)。本系統(tǒng)是采用鄰接表來組織家族樹的。這是因為鄰接表可以以鏈表的形式來組織,而在鏈表上進行操作是比較容易實現(xiàn)的,而且鏈表的組織形式簡單,不容易出錯。再者,由于鄰接表中各結(jié)點都記下了其鄰接點的編號,通過編號建立各結(jié)點的聯(lián)系,可以表示樹。這樣,采用鄰接表的數(shù)據(jù)結(jié)構(gòu),在準(zhǔn)確表示家族樹的前提下,使得對家譜的操作變得更簡便易行。(2)類分布本軟件的設(shè)計和實現(xiàn)是基于面向?qū)ο蟮乃枷氲?,為了方便軟件的設(shè)計和管理,我將它的實體對象和管理實體對象的數(shù)據(jù)結(jié)構(gòu)相分離。因此,軟件

7、的類有實體類和應(yīng)用類。各個類的具體功能如下:AppClass應(yīng)用程序類,提供軟件接口。Family家族類,實現(xiàn)家譜管理的各個功能。person成員類,家族中每一個成員都是成員類的一個實體,實現(xiàn)對成員個人的操作。String自定義字符串類,提供字符串各種操作,以便使程序?qū)ψ址牟僮髟诟鱾€編譯器能編譯通過。Menu菜單類,為了軟件的友好,以菜單選擇的方式展示給用戶。(3)具體實現(xiàn)本軟件通過應(yīng)用程序類提供軟件的接口。家譜管理系統(tǒng)的整體控制由應(yīng)用程序類的run函數(shù)負(fù)責(zé)。而應(yīng)用程序類AppClass中有私有成員Family*sept,對家譜的各種操作就是通過sept調(diào)用Family類中的函數(shù)來實現(xiàn)的,

8、應(yīng)用程序類中的函數(shù)只是提供各種操作的接口。run函數(shù)首先將用戶名和密碼從主控文件加載到內(nèi)存,如果用戶登錄成功,則從主文件中加載家譜信息和各成員信息到內(nèi)存,建立以雙向鏈表形式存在的鄰接表來表示家族樹。接著用戶可通過菜單選擇進行各種操作,在程序結(jié)束運行時,把操作后的家譜信息和各成員信息寫回到主文件中。如果用戶名和密碼有所改動,把新的用戶名和密碼寫回主控文件中。家譜的具體操作是在Fmily類中實現(xiàn)的,在這之前首先由person類實現(xiàn)成員個人的相關(guān)操作,如返回各種個人信息,設(shè)置各種個人信息,不同版本的構(gòu)造函數(shù),輸入個人信息,輸出個人信息,修改個人信息,刪除個人信息,把個人信息寫入指定文件等。其中返回各

9、種個人信息和設(shè)置各種個人信息是為了方便對個人進行操作,括個人相關(guān)信息的獲取和賦值。輸入個人信息的操作根據(jù)實際情況由personinput(),childinput(),deathinput()這三個函數(shù)實現(xiàn)。personinput()負(fù)責(zé)一般成員的信息輸入,包括以配偶身分加入家譜的成員的信息輸入;childinput()負(fù)責(zé)剛出生嬰兒的信息輸入;deathinput()負(fù)責(zé)已故成員的信息輸入。分成三個函數(shù)來實現(xiàn)是因為這三種情況所要輸入的信息不全一樣,如childinput()所需輸入的信息較少,而deathinput()所需輸入信息最多,連壽命和死亡日期也要輸入。刪除個人信息是從家譜中刪除該成

10、員的操作,函數(shù)為delinformation(),刪除個人信息時保留指針信息即其在家譜中鄰接點的編號,這樣才能避免因刪除了一個成員導(dǎo)致家譜散落而被破壞。這樣,實現(xiàn)了成員個人的相關(guān)操作后,接下來便是在此基礎(chǔ)上由Fmily類來實現(xiàn)家譜的各種操作,這也是軟件的主體部分。通過Fmily類實現(xiàn)的家譜操作主要分為六大部分:一,家譜的初始化;二,家譜信息的讀取和存儲;三,成員管理,包括添加成員,刪除成員,成員信息修改;四,查詢,包括按姓名查詢,按基本信息查詢和按親戚關(guān)系查詢;五,統(tǒng)計,包括平均(最長/最短)壽命統(tǒng)計、平均(最高)身高統(tǒng)計、男女比例統(tǒng)計、平均(最高/低)學(xué)歷統(tǒng)計、總?cè)丝?在世總?cè)丝诮y(tǒng)計,職業(yè)統(tǒng)

11、計;六,打印家譜。具體實現(xiàn)如下:一,家譜的初始化。每次啟動程序時的初始化主要是對Fmily類中的私有成員賦值,其中成員intcurrentnum記錄下一個成員的編號,初始化為1;其它Fmily類中的私有成員成員全是統(tǒng)計數(shù)字,全部初始化為00當(dāng)從磁盤文件中加載家譜信息時,這些私有成員則賦值為文件中記錄的數(shù)字。而這里指的家譜的初始化更著重于指生成家譜,即第一次使用本軟件時程序會要求用戶先輸入家譜中的第一個成員的信息,一般這第一個人往往是家譜記載中家族的始祖宗。相關(guān)方法:firstperson()函數(shù):voidfirstperson()功能:輸入家譜中的第一個成員的信息,并對家譜信息初始化。家譜信息

12、的讀取和存儲。進入家譜管理系統(tǒng)后,首先從磁盤文件中讀取家譜信息,生成鏈表,這樣才能進行家譜的其它操作;程序運行結(jié)束時,又將家譜信息寫回文件。相關(guān)方法:write函數(shù)原型:boolFamily:write(char*filename)功能實現(xiàn):把家譜信息包括家譜統(tǒng)計信息和各個成員信息寫入指定的文件中,若操作成功,returntrue關(guān)鍵語句:person*p=head;while(p)p->write(file);p=p->next;read函數(shù)原型:boolFamily:read(char*filename)功能實現(xiàn):從指定文件中讀取家譜信息包括家譜統(tǒng)計信息和各個成員信息,每讀取一

13、個成員的信息就生成一person結(jié)點,并以Family類的私有成員person*head作頭指針,將各個成員鏈成雙向鏈表,若操作成功,returntrue成員管理。包括添加成員,刪除成員,成員信息修改。添加成員,按新添成員以何種身份加入家譜分為四種情況:按配偶添加,按一般成員添加,按嬰兒添加和按已故成員添加。添加成員的時候,需要輸入成員信息,這時是調(diào)用person類中輸入個人信息的相關(guān)函數(shù)來實現(xiàn)。再根據(jù)成員加入家譜時的身份和關(guān)系人,給指針信息即鄰接點的編號賦值,最后將該新添成員鏈在表尾完成成員的添加。調(diào)用person類的personinput(),childinput(),deathinput

14、(滸函數(shù)。刪除成員,用戶輸入要刪除的成員的名字,找到該成員并刪除該成員在家譜中的記錄,調(diào)用person類的delinformation()函數(shù)。成員信息修改,用戶輸入要刪除的成員的名字,找到該成員并修改其信息,提供菜單,用戶可選擇其中一項或若干項進行修改。調(diào)用person類的change()函數(shù)。相關(guān)方法:enterspouse()函數(shù)原型:voidFamily:enterspouse()功能實現(xiàn):按配偶添加成員,并根據(jù)新添成員的信息修改相關(guān)的家譜統(tǒng)計信息,如平均身高等。enterchild()函數(shù)原型:voidFamily:enterchild()功能實現(xiàn):按嬰兒添加成員,并根據(jù)新添成員的信

15、息修改相關(guān)的家譜統(tǒng)計信息。entercommon()函數(shù)原型:voidFamily:entercommon()功能實現(xiàn):按一般成員添加成員,并根據(jù)新添成員的信息修改相關(guān)的家譜統(tǒng)計信息。enterdeath()函數(shù)原型:voidFamily:enterdeath()功能實現(xiàn):按已故成員添加成員,并根據(jù)新添成員的信息修改相關(guān)的家譜統(tǒng)計信息。deleteperson()函數(shù)原型:voidFamily:deleteperson()功能實現(xiàn):刪除指定的成員,保留其編號及鄰接點編號,并根據(jù)新添成員的信息修改相關(guān)的家譜統(tǒng)計信息。change()函數(shù)原型:voidFamily:change()功能實現(xiàn):改變成

16、員信息,并根據(jù)成員信息的改動修改相關(guān)的家譜統(tǒng)計信息。四,查詢,包括按姓名查詢,按基本信息查詢和按親戚關(guān)系查詢。按姓名查詢是從鏈表中逐個成員比較,直到找到名字相同的第一個結(jié)點。按基本信息查詢是對鏈表的遍歷,找出所有符合條件的成員。而按親戚關(guān)系查詢,則是按編號查詢的。因家族樹中每個結(jié)點都有記下鄰接點的編號,因此按特定親戚關(guān)系查詢成員時就是按該結(jié)點特定的鄰接點編號去查找成員。相關(guān)方法:(1)namesearch函數(shù)原型:person*Family二namesearchchar*xname)功能實現(xiàn):用戶輸入姓名,查詢成員,返回查找到的結(jié)點。.若查詢失敗,returnNULL。(2)關(guān)于按基本信息查詢

17、的函數(shù)有voidheight_search();voidsex_search();voiddeg_search();voiddegree_range();voidjob_search();函數(shù)比較簡單,不作詳述。numsearch函數(shù)原型:person*numsearch(ntnum)功能實現(xiàn):按編號查詢成員,在雙向鏈表中查詢可采用就近原則,若該編號小于當(dāng)前下一個編號currentnum的二分之一,則從頭指針開始往后查詢,否則從表尾往前查詢。返回查找到的結(jié)點。若查詢失敗,returnNULL.(4)對某成員按親戚關(guān)系查詢其親人就是根據(jù)該成員的相關(guān)鄰接點的編號來調(diào)用numsearch方法,輸出查

18、詢結(jié)果為個人信息。各種親戚關(guān)系查詢均是如此,不作詳述。五,統(tǒng)計,包括平均(最長/最短)壽命統(tǒng)計、平均(最高)身高統(tǒng)計、男女比例統(tǒng)計、平均(最高/低)學(xué)歷統(tǒng)計、總?cè)丝?在世總?cè)丝诮y(tǒng)計,職業(yè)統(tǒng)計。相關(guān)方法:statis_lifeyear函數(shù)原型:voidFamily:statis_lifeyear()功能實現(xiàn):統(tǒng)計家族成員的平0(最長/最短)壽命統(tǒng)計。由Family類中私有成員lifeyear_sum,lifeyear_max,lifeyear_min記下已故成員壽命總和,最長壽命,最短壽命,統(tǒng)計時只需調(diào)出這些成員便可得結(jié)果。要得平均壽命還需Family類的另外兩個私有成員currentnum和p

19、eople_live(記錄家族中在世的總?cè)丝?。statis_height函數(shù)原型:voidFamily:statis_height()功能實現(xiàn):統(tǒng)計家族成員的平土目(最高)身高。Family類中相關(guān)私有成員有height_sum(身高總和),height_max(最高身高),currentnum和people_delete(被逐出家譜的人數(shù))。statis_mentowemen函數(shù)原型:voidFamily:statis_mentowemen()功能實現(xiàn):統(tǒng)計男女比例。由Family類中私有成員man和female分別記錄男性成員人數(shù)和女性成員人數(shù)。統(tǒng)計時將此二成員加以約分即可得男女比例。s

20、tatis_degree函數(shù)原型:voidFamily:statis_degree()功能實現(xiàn):統(tǒng)計平均(最高/向?qū)W歷。平均學(xué)歷的計算與平均身高的計算相似,計算總和時需將學(xué)歷量化,以degreeclass_sum記錄學(xué)歷總和,無學(xué)歷加1,小學(xué)加2,初中加3,oooodegreeclass_maxdegreeclass_mini己錄最高和最彳氐學(xué)歷。statis_peoplecount函數(shù)原型:voidFamily:statis_peoplecount()功能實現(xiàn):由currentnum-1-people_delete得家族總?cè)丝?。people_live即是家族在世人口。statis_job函數(shù)

21、原型:voidFamily:statis_job()功能實現(xiàn):由Family類相關(guān)私有成員數(shù)組intjob15記錄各種職業(yè)的人數(shù)。輸出各種職業(yè)的人數(shù)統(tǒng)計。六,打印家譜。主要算法是用迭代法對家族樹進行深度遍歷,再加上格式控制,就可以把家譜以友好的格式打印出來,顯示在屏幕上。格式如下:爺爺父親兒子1兒子2叔叔兒子1000000兒子2另外,本軟件有支持鼠標(biāo)的功能,體現(xiàn)在打印家譜顯示出來后,可通過鼠標(biāo)在某一成員上的點擊來查看該成員的具體信息。這個功能的實現(xiàn)主要是利用了標(biāo)準(zhǔn)輸入輸出設(shè)備句柄的調(diào)用。打印家譜時用一算法記下每個成員的坐標(biāo),當(dāng)鼠標(biāo)事件為左鍵單擊時,便作出相應(yīng)反應(yīng),用標(biāo)準(zhǔn)輸出設(shè)備句柄清屏之后輸出

22、所點中的成員的具體信息。三后記3.1軟件的優(yōu)缺點及待改進的地方本軟件設(shè)計思路清晰,采用面向?qū)ο蟮乃枷耄褜嶓w對象和管理實體對象的數(shù)據(jù)結(jié)構(gòu)分離,易于系統(tǒng)的管理,不易出錯,所以設(shè)計出來的家譜管理系統(tǒng)較為穩(wěn)定。在數(shù)據(jù)結(jié)構(gòu)上采用鄰接表的形式,既可以正確表達家族樹,又可令操作簡單易行,綜合了樹和鏈表兩種數(shù)據(jù)結(jié)構(gòu)的優(yōu)點。程序的運行時間和占用空間都很合理,算法優(yōu)化。程序提供菜單類,雖不能實現(xiàn)可視化,但界面也算工整,條理清晰,用戶界面友好。另外,本軟件實現(xiàn)了支持鼠標(biāo)的功能,方便用戶。然而在家譜輸出時雖格式友好,但還不能做到以可擴展的樹狀的形式輸出,導(dǎo)致輸出界面還比較粗糙。3.2實踐感想“平時的編程作業(yè)最多是幾百行,這次一下子要寫4000行代碼,真是郁悶”,這是我在知道這次數(shù)據(jù)結(jié)構(gòu)大作業(yè)時的感慨。說實在的,一開始還真有點不知所措,畢竟這是第一次要獨立完成相比以前而言規(guī)模大上好幾倍的程序。不過

溫馨提示

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

評論

0/150

提交評論