C語言程序設(shè)計 通訊錄程序_第1頁
C語言程序設(shè)計 通訊錄程序_第2頁
C語言程序設(shè)計 通訊錄程序_第3頁
C語言程序設(shè)計 通訊錄程序_第4頁
C語言程序設(shè)計 通訊錄程序_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

目錄:

課程設(shè)計任務(wù)書.......................

目錄:.......................................................1

一、目的......................................................................2

二、基本情況.................................................................2

三、時間安排.................................................................3

四、設(shè)計和調(diào)試過程規(guī)范化要求................................................3

五、設(shè)計內(nèi)容和設(shè)計要求.......................................................4

六、考核方式.................................................................5

-通訊錄的主要功能:.......................................6

一、問題描述:.................................................................6

二、功能要求:.................................................................6

三、算法提示:.................................................................7

四、測試數(shù)據(jù):.................................................................7

二、課題的主要功能模塊劃分:...............................7

三、主要功能的實現(xiàn)..........................................8

一、按名字查找顯示函數(shù)voidsearch().........................................................................15

二、快速查找函數(shù):voidqseek()...............................................................................................15

四、程序調(diào)試:..............................................16

五、總結(jié)....................................................18

六、源程序..................................................19

機(jī)械工程學(xué)院課程設(shè)計評分表................

-A-

刖B

《c語言程序設(shè)計》課程設(shè)計是對學(xué)生的一種全面綜合訓(xùn)練,它包括問題分

析,總體結(jié)構(gòu)設(shè)計,用戶界面設(shè)計,程序設(shè)計基本技能和技巧,多人合作,以至

一整套軟件工作規(guī)范的訓(xùn)練和科學(xué)作風(fēng)的培養(yǎng)。是與課堂聽講、自學(xué)和練習(xí)相輔

相成的必不可少的一個教學(xué)環(huán)節(jié)。通常,課程設(shè)計的課題比平時的習(xí)題復(fù)雜得多,

也更接近實際。課程設(shè)計著眼丁理論與應(yīng)用的結(jié)合點,使學(xué)生學(xué)會如何把書上學(xué)

到的知識用于解決實際問題,培養(yǎng)程序設(shè)計工作所需要的知識綜合能力和動手能

力;另一方面,能使書上的知識變“活”,使學(xué)生更好地深化理解和靈活掌握教

學(xué)內(nèi)容。為了達(dá)到上述目的,本課程設(shè)計安排了15個設(shè)計課題,訓(xùn)練重點在于

基本的程序設(shè)計方法和分析問題的能力,而不強(qiáng)調(diào)面面俱到。學(xué)生選其中一題進(jìn)

行設(shè)計,設(shè)計完畢寫出課程設(shè)計報告,用A4紙打印成冊;并將課程設(shè)計報告與

源程序存盤。學(xué)習(xí)委員將課程設(shè)計報告與磁盤(缺一不可)收齊后交指導(dǎo)老師。

一、目的

全面熟悉、掌握C語言基本知識,掌握C程序設(shè)計中的順序、分支、循環(huán)三

種結(jié)構(gòu)及數(shù)組、函數(shù)和C語言基本圖形編程等方法,把編程和實際結(jié)合起來,增

強(qiáng)對不同的問題運(yùn)用和靈活選擇合適的數(shù)據(jù)結(jié)構(gòu)以及算法描述的本領(lǐng),熟悉編制

和調(diào)試程序的技巧,掌握分析結(jié)果的若干有效方法,進(jìn)一步提高上機(jī)動手能力,

培養(yǎng)使用計算機(jī)解決實際問題的能力,養(yǎng)成提供文檔資料的習(xí)慣和規(guī)范編程的思

想,為以后在專業(yè)課程中應(yīng)用計算機(jī)系統(tǒng)解決計算、分析、實驗和設(shè)計等學(xué)習(xí)環(huán)

節(jié)打下較扎實的基礎(chǔ)。

二、基本情況

課程類別:必修課

課程學(xué)分:1學(xué)分

課程學(xué)時:1周

課程對象:汽服0901

三、時間安排

第一周周日上午8:00-12:00(查閱相關(guān)資料并開始編寫源程

序)

第二周周一下午14:00-18:00(完成源程序編寫調(diào)試運(yùn)行課

程設(shè)計報告)

周三上午8:00-12:00(完成課程設(shè)計報告以及答辯)

四、設(shè)計和調(diào)試過程規(guī)范化要求

1)需求分析

2)分析系統(tǒng)功能需求以及用戶操作流程。

3)概要設(shè)計

4)在需求分析的基礎(chǔ)上,確定系統(tǒng)總體框架(系統(tǒng)功能結(jié)構(gòu)圖)。

5)詳細(xì)設(shè)計

6)定義數(shù)據(jù)存儲結(jié)構(gòu),并設(shè)計實現(xiàn)系統(tǒng)功能的具體算法,畫出各算法的工作流

程圖。

7)代碼設(shè)計

8)根據(jù)所設(shè)計的算法,定義相應(yīng)函數(shù)分別實現(xiàn)系統(tǒng)的各子功能模塊,同時由主

程序提供友好的用戶界面,使用戶可通過選搭主菜單來調(diào)用課程設(shè)計中要求

完成的各個功能模塊,子程序執(zhí)行完后還可以返回到主菜單,繼續(xù)選擇其他

功能執(zhí)行。源程序要求書寫規(guī)范,結(jié)構(gòu)清晰。重點函數(shù)的重點變量,重點功

能部分均要求給出清晰的程序注釋。

9)程序調(diào)試

10)程序編譯、鏈接成功后,自己設(shè)計實現(xiàn)程序功能的一組或多組測試數(shù)據(jù),并

嚴(yán)格按照此測試數(shù)據(jù)進(jìn)行測試,然后分析測試結(jié)果。如果程序不能正常運(yùn)行

或結(jié)果不正確,則需對程序進(jìn)行單步調(diào)試,在調(diào)試過程中認(rèn)真查找算法實現(xiàn)

中存在的問題,并加以分析和改正。如果程序能夠基本正確地運(yùn)行,可考慮

增加若干基本的容錯功能(如避免用戶操作錯誤時程序出現(xiàn)死循環(huán)等);另

外盡量對現(xiàn)有算法給出改進(jìn)方案,并比較不同算法之間的優(yōu)缺點。

五、設(shè)計內(nèi)容和設(shè)計要求

1.設(shè)計內(nèi)容:

設(shè)計與開發(fā)一個通訊錄管理系統(tǒng),對通訊錄中的姓名、單位、

電話、QQ、mail等基本信息進(jìn)行管理、主要功能如下:

1).輸入記錄;

2).顯示記錄;

3).按姓名查找顯示記錄;

4).刪除記錄;

5).插入記錄;

6).記錄保存為文件;

7).從文件中讀記錄;

8).按姓名排序;

9).顯示單條記錄;

2.設(shè)計要求:

1).設(shè)II正確,方案合理。

2).界面友好,使用方便。

3).程序精煉,結(jié)構(gòu)清晰。

4).設(shè)計報告5000字以上,含程序設(shè)計說明、系統(tǒng)的功能框圖、

流程圖、源程序清單等。

5).實際操作過程中遇到的問題及解決方法:設(shè)計總結(jié)及心得體會.

6).上機(jī)演示。

附:

課程設(shè)計報告裝訂順序:封面、任務(wù)書、目錄、正文、評分、附件(A4大小的圖紙及程序清單)。

正文的格式:一級標(biāo)題用3號黑體,二級標(biāo)題用四號宋體加粗.正文用小四號宋體:行距為22?

正文的內(nèi)容:一'課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實現(xiàn)

(至少要有一個主要模塊的流程圖);四、程序調(diào)試;五、總結(jié);六、附件(所有程序的原代碼,要求對程

序?qū)懗霰匾淖⑨專?/p>

正文總字?jǐn)?shù)要求在5000字以上(不含程序原代碼)。

六、考核方式

指導(dǎo)老師負(fù)貢驗收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實際動手能力、

創(chuàng)新精神和設(shè)計報告等進(jìn)行綜合考評,并按優(yōu)秀、良好、中等、及格和不及格五

個等級給出每位同學(xué)的課程設(shè)計成績。具體考核標(biāo)準(zhǔn)包含以下幾個部分:

1)平時出勤(占期)

2)系統(tǒng)需求分析、功能設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計及程序總體結(jié)構(gòu)合理與否(占10%)

3)程序能否完整、準(zhǔn)確地運(yùn)行,個人能否獨(dú)立、熟練地調(diào)試程序(占40盼

4)設(shè)計報告(占30猊

5)獨(dú)立完成情況(占10%)。

通訊錄的主要功能:

一.問題描述:

-有個通訊錄,要求該系統(tǒng)對通訊錄的姓名,單位,電話,進(jìn)行輸入.顯

示,查找,刪除,插入,保存等操作的管理。

二.功能要求:

1,本系統(tǒng)采用一個結(jié)構(gòu)體數(shù)組,每個數(shù)據(jù)的結(jié)構(gòu)應(yīng)包括;姓名,單位電

話名稱。

2,本系統(tǒng)顯示這樣的菜單

請選擇系統(tǒng)功能項

a輸入記錄;

b顯示全部紀(jì)錄;

c查找記錄;

d刪除記錄;

e插入記錄;

f保存文件;

g讀文件:

(1)按序號顯示記錄;

(2)按姓名排序;

(3)快速查找記錄;

(4)復(fù)制文件。

三算法提示:

1.數(shù)據(jù)結(jié)構(gòu);結(jié)構(gòu)體類型數(shù)組。

2.數(shù)據(jù)庫結(jié)構(gòu);下表構(gòu)成該系統(tǒng)的基本數(shù)據(jù)庫。

姓名電話單位

、、、、、、、、、、、、、、、、、、

四測試數(shù)據(jù):

姓名電話單位

Zhang

152-?

9■*

■?■

二、課題的主要功能模塊劃分:

同學(xué)錄

三、主要功能的實現(xiàn)

程序設(shè)計一般由兩部分組成算法和數(shù)據(jù)結(jié)構(gòu),合理地選擇和實現(xiàn)一個數(shù)據(jù)

結(jié)構(gòu)和處理這些數(shù)據(jù)結(jié)構(gòu)具有同樣的重要性,在通訊錄管理程序中由于預(yù)計

記錄數(shù)相對于一個單位的學(xué)生人數(shù)或職工人數(shù)來說不會太大除了能夠增加、刪

除、保存等外更多的情況是查詢,且能夠?qū)崿F(xiàn)快速查詢。所以選用靜態(tài)數(shù)組

保存數(shù)據(jù)實現(xiàn)多種查詢方式。

I數(shù)據(jù)結(jié)構(gòu)

由于使用靜態(tài)數(shù)組需要預(yù)先估計記錄數(shù),所以先預(yù)定義一個常數(shù)M表示

記錄,也就是數(shù)組的大小,記錄聯(lián)系人的信息至少應(yīng)有姓名、單位、電

話。所以定義每個數(shù)組元素的類型為結(jié)構(gòu)體。由于數(shù)組存儲是采用順序存放

在內(nèi)存空間中占用連續(xù)空間,所以若干條記錄通訊錄的管理實質(zhì)就是對順序

存儲的線性表的管理結(jié)點結(jié)構(gòu)如下:

#defineM50/*估計的記錄數(shù)*/

typedefstruct

(

charname[20|;/*姓名*/

charunits;30];/*單位*/

chartele[10];/*

電話*/

}ADDRESS;/*結(jié)構(gòu)體類型名*/

2main。主函數(shù)

程序采用模塊化設(shè)計,主函數(shù)是程序的入口各模塊獨(dú)立??煞謮K調(diào)試均由

主函數(shù)控制調(diào)用控制功能的實現(xiàn)通過循環(huán)執(zhí)行一個開關(guān)語句,該語句的條件值

是通過調(diào)用主菜單函數(shù)得到的返回值,根據(jù)該值調(diào)用相應(yīng)的各功能函數(shù)。同

時設(shè)置一個斷點。即當(dāng)返回值為一定條件時運(yùn)行exil()函數(shù)結(jié)束程序,以免

造成死循環(huán)。

???uaKIII**??A?

III\

0.Enterrecord

1.Listthefile

2.Searchrecordonname

3.Deletearecord

4.addrecord

5.Savethefile

6.Loadthefile

7.displayrecordonorder

8.sorttomakenewfile

9.Quickseekrecord

10.copythefiletonewfile

11.Quit

9^9U>?1?

<^?w^w<^w?■??^?u^9?■><??^w?^ww???/wu?^?^w?<^?<^??■??■■?^??■??^\?■■

EnteryouchoiceCO^ll):

了]

10-1圖

輸出界面

3menu_select()主菜單

直接利用輸出函數(shù)printf輸出字符串在屏幕上顯示一個菜單并顯示一個

提示輸入選項輸入0-11之間的數(shù)字,將此數(shù)字作為菜單函數(shù)的返回值返回

主函數(shù),主函數(shù)根據(jù)這個數(shù)字調(diào)用相應(yīng)的功能函數(shù),制作簡便,操作簡單界

面如圖10-2所示:

IFvIII

*V>1IIMV^S

EereCor

0.1LStthefe

Shrecodn

2.3i

?a

4.addrd

sthf

6C.5■veee

Loadthefie

67dl

*spayrcrdon

5otomakenwfile

109ikkd

-Cseeec0r

copXthefl.letonew

1luit

.u

EnteryouchoiceCQ^ll):

圖10-2

主菜單界面

由于程序中很多地方用到了字符串輸入語句會造成下一個字符不能正確讀

入為了在程序調(diào)用執(zhí)行了各個函數(shù)后能夠清晰地看到菜單并輸入新的選項。

首先寫了一條輸出信息printf(”pressanykeyentermenu......\n”)表示按任意鍵

繼續(xù)一條讀字符語句getch。等待輸入字符,按任意鍵即可進(jìn)入主菜單,讀者

可以將這兩條語句加上注釋不執(zhí)行來體會它的功能。

按照所見即所得的方式直接設(shè)計輸出函數(shù)輸出字符串達(dá)到菜單效果將精力

主要放在程序功能的實現(xiàn)上利用do循環(huán)語句一直執(zhí)行scanf("%s",s)語句。讓

用戶輸入0~11之間的數(shù)按照字符串形式輸入。然后執(zhí)行?二210?。⒆址?/p>

轉(zhuǎn)化為數(shù)字,返回主函數(shù)。如.果輸入范圍不是0~11,則循環(huán)等待重新輸入。

既然是數(shù)字選項為什么不用整數(shù)格式輸入而要按字符串輸入。再將其轉(zhuǎn)換呢,

如果按照整數(shù)格式輸入,當(dāng)用戶輸入了非數(shù)字字符。例如a和b等由于

類型不同將導(dǎo)致程序出錯。所以對于不參與運(yùn)算的數(shù)據(jù)表面上看是數(shù)字也應(yīng)

將其設(shè)為字符處理。例如電話號碼,千萬不要設(shè)為整數(shù)類型,程序設(shè)計技巧很

多。所以讀者在編程調(diào)試中應(yīng)注意并仔細(xì)體會。

4enter。輸入記錄

輸入記錄時按照一條一行的格式輸入,每個數(shù)據(jù)之間用空格分隔,較為清晰且

能直接反映數(shù)據(jù)之間的關(guān)系,但由于scanf函數(shù)的特性,在輸入時數(shù)據(jù)用回車分

隔也是可以的,但與界面設(shè)計不吻合界面.

由于記錄并不是一次性全部輸入而是隨時填加和刪除的,而預(yù)先開辟的空

間數(shù)往往大于實際的記錄數(shù)。所以程序設(shè)計為首先輸入準(zhǔn)備輸入的記錄數(shù)n,

然后用for循環(huán)語句循環(huán)n次輸入記錄,通訊錄的每一條記錄有三個字

段都是字符串類用格式輸入scanf("%s%s%s”,t[i].name,t[i].units,t[i].tele)完成

輸入三個字段用空格分隔輸入完一條按回車鍵繼續(xù)輸入下一條達(dá)到規(guī)定

的記錄數(shù)輸入停止,返回記錄數(shù)到主函數(shù)。

5list。顯示所有記錄

通訊錄建立好后更頻繁的操作是顯示和查找記錄本函數(shù)實現(xiàn)顯示所有記

錄功能輸出界面如圖10-3所示

pleaseinputnum

01

pleaseinputrecord

nameunittelephone

zhanghugong155296660

圖10-3

輸出界面

將主函數(shù)傳遞過來的數(shù)組輸出用for循環(huán),循環(huán)次數(shù)由參數(shù)長度決定,輸

出時,為了格式美觀清晰設(shè)計一定的樣式輸出,注意利用格式輸出函數(shù)根據(jù)

字段的長度設(shè)定輸出的長度,每輸出10個記錄暫停一下,按任意鍵繼續(xù)C

6search。和find。查找記錄

查找指定姓名的記錄采用順序查找法,首先輸入要查找記錄的姓名;然后

順序查找結(jié)點,如果沒找到,則輸出沒找到信息。否則,顯示找到的記錄信息

因為程序多次用到了查找和顯示記錄,例如刪除記錄中,所以編寫了一個

find。函數(shù)專門進(jìn)行查找,從第一條記錄開始將記錄中的姓名字段和待比較

的姓名字符串s進(jìn)行比較一旦相等程序結(jié)束,返回該記錄的下標(biāo)號i也就是記

錄所在的序號記錄別人的信息就免不了要記錄其姓名,地址,電話為了方便以后

及時輸入信息需要設(shè)立一個輸入記錄欄,為了顯示所存內(nèi)容設(shè)立一個顯示記錄

欄,有時插入一些新的信息就在設(shè)立一個插入記錄欄,同時為去掉過時的信息,

這是刪除欄就必不可少,有時記錄的信息比較多E寸,如果一個一個地用人力來找

不僅難找,還要發(fā)費(fèi)很多時間,顯然不符合人們的要求,就必須要有一個查找方式,

對設(shè)計了兩中普通方式和一種快速的查找方式,兩種普通方式其一是按姓名查

找記錄,其二是按姓名查找顯示紀(jì)錄,快速查找顧名思義其速度要比普通查找快,

但是其要求比普通查找要克扣既在查找前必須按姓名排好序,最后是文件的復(fù)

制,

如果不相等則繼續(xù)下一條比較所有記錄比較完畢循環(huán)結(jié)束返回,此時的下

標(biāo)變量i值,search。函數(shù)通過調(diào)用find。得到了整數(shù)i,判斷i的值如果大于

n-I已超過實際記錄數(shù)說明所有記錄都進(jìn)行過比較沒有找到查找不成功,否

則說明找調(diào)用輸出函數(shù)prim。顯示該第i條記錄。

7delele。冊IJ除記,錄

輸入要刪除記錄的姓名,調(diào)用End函數(shù)如果沒有該記錄,顯示沒找到信息,

否則,調(diào)用prim函數(shù)顯示記錄信息,接著顯示是否確實要刪除,請輸入確認(rèn)

信息整數(shù)0或11表示是0表示否如果輸入了1,則系統(tǒng)刪除信,要刪除數(shù)組

中的某一條元素實際所做的操作是將其后繼記錄依次前移一條,所以刪除

第i條記錄用for語句從i+1開始依次將每個字段拷貝到前一條記錄的相應(yīng)字

E殳,即覆蓋了前一條記錄達(dá)到前移的目的,直到最后一條記錄。注意前移記錄

的時候是逐個字段賦值,不能一個記錄整體賦值。由于刪除了一條記錄,記

錄數(shù)減1,返回記錄數(shù)程序結(jié)束,假如刪除前則刪除第i條記錄。

8add()插入記

輸入要插入記錄的信息保存到臨時變量temp然后再輸入一個姓名,用字

符串s表示確定新記錄插入在該記錄之前調(diào)用find。函數(shù)查找姓名為s的記錄

得到該記錄所在的序號,從最后一條記錄開始向后移動,即第n-1條移動到

第n條第n-2條移動到第n-1條直到第i條移動到第i+1條將新信息存入

到第i條記錄位置注意移動必須從后倒,否則從第i條開將會覆蓋后面的信息

數(shù)據(jù)而出錯,如果沒有指定的記錄則End函數(shù)返回的i值為n,實際上一條

記錄也不會移動新信息將插入到最后一個位置錄插入在i位置。、

9save。保存記錄到文件

然后確定文件的打開方式如果文件不能正常打開則退出程序否則先寫入記

錄數(shù)n然后用循環(huán)語句文件格式輸出語句

「printf(fp,"%-20s%-30s%-name,l[i].units,l[i].tele)逐條寫入記錄每輸出

一條寫入一個換行符號寫入后record.lxl文件可以用Windows下的記事本打

開。

10load。從文件中讀取記錄

數(shù)據(jù)一旦輸入保存到磁盤文件中后更多的操作是將數(shù)據(jù)從文件讀入內(nèi)

存進(jìn)行顯示查找等各項操作先定義一個指向文件的指針按照rb的方

式打開已經(jīng)保存好的文件record.txt,用語句fp=fopen("record.txt"Jrb”)。同

時判斷是否正常打開,則退出程序。否則,利用格式輸入函數(shù)先讀出記錄

數(shù)。然后利用循環(huán)語句用格式輸入函數(shù)

fscanf(fpJ%20s%30s%10s\t[i].name,t[i].units,tele)將記錄逐條讀入讀出的

記錄保存在結(jié)構(gòu)體數(shù)組中。由丁結(jié)構(gòu)體數(shù)組是用數(shù)組名作為參數(shù)而數(shù)組名是

數(shù)組存放的單元首地址,所以它是一種地址傳遞方式數(shù)據(jù)的變動直接反映在

參數(shù)所指的數(shù)組而記錄數(shù)是按值傳遞其值的改變不會影響到主函數(shù)為了

保證數(shù)據(jù)的正確性所以將記錄數(shù)、返回主函數(shù)C

Ildisplay。按序號查找記錄

由于數(shù)組是按照順序存儲且對數(shù)組元素的訪問可以直接按照其下標(biāo)號實現(xiàn)

隨機(jī)訪問C所以設(shè)計了按照記錄位置也就是記錄的序號)訪問記錄本函

數(shù)實現(xiàn)的是從文件中查找。所以先用rb方式打開記錄文件record.txt,輸入

序號id,從文件讀入記錄數(shù)判斷序號位置在記錄數(shù)范圍之內(nèi)。由于記錄是順

序存放所以指定序號id的存儲位置首地址應(yīng)為(id-l)*sizeof(ADDRESS)利用

函數(shù)fseek將記錄指針移動到該位置讀出記錄,調(diào)用print。函數(shù)顯示它。

12sort。排序

冒泡排序是一種匕較簡單且常用的排序方法具體的做法是假設(shè)待排序

記錄的排序碼為klk2...kn,先比較kl和k2如果kl>k2,則交換kl

和k2所代表的記錄,然后對k2可能是剛交換來的)和k3進(jìn)行同樣的處理

,重復(fù)此過程直到處理完kn?l和kn這樣從kl、k2到kn-1、kn的n-1

次比較和交換的過程稱為一次冒泡這一步將最大的k值記錄傳到了最后也

是最終排序的位置重復(fù)這樣的步驟不過第二次只需從kl、k2到kn-2、kn-1

作n-2次比較這樣最多作n-1次冒泡,為了減少不必要的循環(huán),設(shè)置一個

flag表示本次冒泡是否出現(xiàn)過交換,如果沒有交換則說明本次比較已經(jīng)

達(dá)到排序要求可以結(jié)束程序了。

本函數(shù)采用了冒泡排序方法按照姓名排序,所以排序碼為記錄的姓名對

語言來說數(shù)組的下標(biāo)是從0開始的。所以n條記錄的比較是從t[O].name

tfl].name開始到t[n-2].namet[n-l].name的因為姓名是字符串比較用字

符串比較函數(shù)strcmp實現(xiàn)移動記錄借助于第三者臨時結(jié)構(gòu)體變量temp移動

要保持整條記錄的移動所以三個字段都要移動。對于字符串賦值便捷的方式

是用strcpy復(fù)制函數(shù),否則就要用循環(huán)語句逐字符移動冒泡排序的缺點

是移動記錄次數(shù)多。所以對于記錄字段數(shù)較多記錄長度較長的不宜選擇冒

泡排序。

13qseek??焖俨檎?/p>

排序是一種較為費(fèi)時的運(yùn)算,所以經(jīng)過了排序而不加以利用未免可惜為比設(shè)

計了一種在排序基礎(chǔ)上實現(xiàn)的快速查找算二分查找法二分查找法是一種效率

較高的檢索方法檢索時要求記錄按檢索碼值的大小排序并且要求順序存儲對

于我們這個線性存儲的通訊錄經(jīng)過排序后,就可以實施二分查找法、按姓

名查找將姓名字段作為檢索碼。

二分查找法首先用檢索的姓名值與中間位置的結(jié)點的姓名相比較這

個中間結(jié)點。將所有記錄分成了前后兩個區(qū)叵比較結(jié)果。如果相等,則檢

索完成調(diào)用print函數(shù)顯示結(jié)點信息若不相等再根據(jù)姓名比較該中間結(jié)點

的姓名字段的大小確定下一步檢索的范圍。若大在后一個區(qū)間中檢索

若小在前一個區(qū)間中檢索,重復(fù)這樣的步驟直到或者找到滿足條件

的記錄或者確定沒有這樣的結(jié)點。范圍的具體劃分設(shè)置變量1和r分

別代表左邊界和右邊界,初值1=0,r=n-l當(dāng)l<=i*(即左邊界<=右邊界)

時。計算中間結(jié)點m=(l+r)/2然后進(jìn)行比較如到前一區(qū)間中檢索,則修改右

邊界r=m-l如到后一個區(qū)間中檢索則修改左邊界l=m+l若l>r,

則說明左邊界已大于右邊界這樣的區(qū)間不可能存在,查找失

敗。

14c叩y()復(fù)制文件

為了保存數(shù)據(jù)防止意外發(fā)生為數(shù)據(jù)做備份是很有必要的本函數(shù)是將文件讀寫功能結(jié)合到

一起的應(yīng)用,將事先保存的記錄文件record.txt按「b方式打開輸入目標(biāo)文件名然后利

用文件格式讀寫函數(shù)將源文件中的信息寫到目標(biāo)文件中。

--按名字查找顯示函數(shù)voidsearch()

算法:通過調(diào)用名字查找函數(shù),輸入要查找的姓名.再調(diào)用find函數(shù)通過這一函

數(shù)的循環(huán)找到與之姓名相應(yīng)的的字符竄返回其所在序行數(shù),然后調(diào)用輸出函數(shù)顯

示指定的一條記錄.

二.快速查找函數(shù):voidqseek()

通過調(diào)用快速查找函數(shù),確認(rèn)再查找之前,記錄以排好序,然后輸入待查

找姓名,利用折半查找,m=(I+r)/2如果中間接點姓名與待找姓名相等,則調(diào)用

printf函數(shù)顯示記錄,并返回,if(strcmp(t[in].name,s)<0)則I=m+1,否則

r=m-l,繼續(xù)尋找,如果I>r,現(xiàn)是沒找到。

四、程序調(diào)試:

一、先進(jìn)行人工檢查,即靜態(tài)檢查。

在寫好一個程序以后,不要匆匆忙忙上機(jī),而應(yīng)對程序進(jìn)行人工檢查。

這一步十分重要,它能發(fā)現(xiàn)程序設(shè)計人員由于疏忽而造成的多數(shù)錯誤。這一步往

往容易被人忽視,總希望把一切都推給計算機(jī)去做,但這樣會多占用機(jī)器時間,

作為一個程序人員應(yīng)當(dāng)養(yǎng)成嚴(yán)謹(jǐn)?shù)淖黠L(fēng),每一步都要嚴(yán)格把關(guān),不把問題留給后

面的工序。

為了更有效地進(jìn)行人工檢查,所編的程序應(yīng)力求做到以下幾點:

①應(yīng)當(dāng)采用結(jié)構(gòu)化程序方法編程,以增加可讀性;

②盡可能多加注釋,以幫助理解每段程序的作用;

③在編寫復(fù)雜的程序時不要將全部語句都寫在main函數(shù)中,而要多

利用函數(shù),用一個函數(shù)來實現(xiàn)一個單獨(dú)的功能。各函數(shù)之間除用參數(shù)傳遞數(shù)據(jù)外,

盡量少出現(xiàn)耦合關(guān)系,這樣便于分別檢查和處理。

二、在人工檢查無誤后,再上機(jī)調(diào)試。

通過上機(jī)發(fā)現(xiàn)錯誤稱為動態(tài)檢查。在編譯時會給出語法錯誤的信息,

調(diào)試時可以根據(jù)提示信息具體找出程序中出錯之處并改正。應(yīng)當(dāng)注意的是有時提

示出錯的地方并不是真正出錯的位置,如果在提示出錯的行找不到錯誤的話應(yīng)當(dāng)

到上一行再找。有時提示出錯的類型并非絕對準(zhǔn)確,由于出錯的情況繁多且各種

錯誤互有關(guān)聯(lián),因此要善于分析,找出真正的錯誤,而不要只從字面意義上找出

錯信息,鉆牛角尖。

如果系統(tǒng)提示的出錯信息很多,應(yīng)當(dāng)從上到下逐一改正。有時顯示出

一大片出錯信息往往使人感到問題嚴(yán)重,無從下手。其實可能只有一二個錯誤。

例如,對使用的變量未定義,編譯時就會對所有含該變量的語句發(fā)出出錯信息。

這時只要加上一個變量定義,就所有錯誤都消除了。

三、在改正語法錯誤(包括"錯誤(error)"和"警告(warning)”)

后,程序經(jīng)過連接(link)就得到可執(zhí)行的目標(biāo)程序。運(yùn)行程序,輸入程序所需

數(shù)據(jù),就可得到運(yùn)行結(jié)果。應(yīng)當(dāng)對運(yùn)行結(jié)果作分析,看它是否符合要求。有的初

學(xué)者看到運(yùn)行結(jié)果就認(rèn)為沒問題了,不作認(rèn)真分析,這是危險的。

有時,數(shù)據(jù)比較復(fù)雜,難以立即判斷結(jié)果是否正確??梢允孪瓤紤]好

一批“試驗數(shù)據(jù)”,輸入這些數(shù)據(jù)可以很容易判斷結(jié)果正確與否。例如解方程。

事實上,當(dāng)程序復(fù)雜時很難把所有的可能情況全部都試到,選擇典型的臨界數(shù)據(jù)

作試驗即可。

四、運(yùn)行結(jié)果不對,大多屬于邏輯錯誤。對這類錯誤往往需要仔細(xì)檢

查和分析才能發(fā)現(xiàn)??梢圆捎靡韵罗k法:

1.將程序與流程圖仔細(xì)對照,如果流程圖是正確的,程序?qū)戝e了,是

很容易發(fā)現(xiàn)的。例如,復(fù)合語句忘記寫花括弧,只要一對照流程圖就能很快發(fā)現(xiàn)。

2.如果實在找不到錯誤,可以采用“分段檢查”的方法。在程序不同

的位置設(shè)幾個printf函數(shù)語句,輸出有關(guān)變量的值,逐段往下檢查。直到找到

在某一段中數(shù)據(jù)不對為止。這時就已經(jīng)把錯誤局限在這一段中了。不斷減小“查

錯區(qū)”,就能發(fā)現(xiàn)錯誤所在。

3.也可以用“條件編譯”命令進(jìn)行程序調(diào)試(在程序調(diào)試階段,若干

printf函數(shù)語句就要進(jìn)行編譯并執(zhí)行。當(dāng)調(diào)試完畢,這些語句不用再編譯了,

也不再被執(zhí)行了)。這種方法可以不必一一去掉printf函數(shù)語句,以提高效率。

4.如果在程序中沒有發(fā)現(xiàn)問題,就要檢查流程圖有無錯誤,即算法有

無問題。如有則改正之,接著修改程序。

5.有的系統(tǒng)還提供debug(調(diào)試)工具,跟蹤程序并給出相應(yīng)信息,

使用更為方便,請查閱有關(guān)手冊。

總之,程序調(diào)試是一項細(xì)致深入的工作,需要下功夫,動腦子,善于

積累經(jīng)驗。在程序調(diào)試過程中往往反映出一個人的水平,經(jīng)驗和態(tài)度。希望大家

給以足夠的重視。上機(jī)調(diào)試程序的目的決不是為了“驗證程序的正確”,而是“掌

握調(diào)試的方法和技術(shù)二要學(xué)會自己找問題,這欄慢慢自己就會寫出錯誤較少的

實用程序。

五、總結(jié)

課程設(shè)計是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,

鍛煉實踐能力的重要環(huán)節(jié),是對我們的實際工作能力的具體訓(xùn)練和考察過程.隨

著科學(xué)技術(shù)發(fā)展的日新月異,當(dāng)今計算機(jī)應(yīng)用在生活中可以說得是無處不在。因

此作為二十一世紀(jì)的大學(xué)來說掌握程序開發(fā)技術(shù)患十分重要的,而C語言又是最

常見,功能最強(qiáng)大的一種高級語言,因此做好C語言課程設(shè)計是十分必要的c回

顧起此次課程設(shè)計,至今我們?nèi)愿锌H多,的確,自從拿到題目到完成整個編程,

從理論到實踐,在整整半個月的日子里,可以學(xué)到很多很多的東西,同時不僅可

以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通

過這次課程設(shè)計使我們懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)

遠(yuǎn)不夠的,只后把所學(xué)的埋論知識與實踐相結(jié)合起米,從埋論中得出結(jié)論,才能

真正為社會服務(wù),從而提高自己的實際動手能力和獨(dú)立思考的能力。在設(shè)計的過

程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各

樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學(xué)過的知識

理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體,指針,鏈表……通過這次課

程設(shè)計之后,我們把前面所學(xué)過的知識又重新溫故了一遍。

我做的是通訊錄系統(tǒng),雖然是很簡單的一個小的程序,但對我一個初學(xué)者來

說卻是一個很大的困難。更加是第一次做課程設(shè)計,所以第一天下午在機(jī)房做了

一個下午卻絲毫沒有進(jìn)展,最主要是不知從何開始,這個時候才知道上課老師們

不厭其煩的教導(dǎo)是多么的寶貴,這個時候才后悔二課的時候沒有認(rèn)真的聽講???/p>

是現(xiàn)在一切都晚了,還好時間還算是充裕,只好拿出書本重新復(fù)習(xí)一下。特別是

結(jié)構(gòu)體,指針的部分,幾乎是一片空白。不過經(jīng)過幾天的努力,大體上把課本上

的知識點看了一遍,知識點也都基本是撐握了,所以下一步就是開始正式的編程

序了。不過畢竟是個新手,還是不知如何下手,于是就在網(wǎng)上下了一篇類似的程

序,經(jīng)過仔細(xì)的研究,終于讀懂了C語言編程的基本過程和方法。經(jīng)過一波三

折,終于開始正式編程。

編程是一件很枯燥很無聊的事情,但是出于完成作業(yè),得到學(xué)分的壓力,還

必須強(qiáng)迫自己堅持下去,按照老師所說的模塊化思想,分部分的進(jìn)行編寫。而且

編程是一件高精度、模范化的事情,稍有疏乎都會影響全局,也可能因為某一處

的小的錯誤而導(dǎo)致整個程序的無法運(yùn)行。所以認(rèn)真仔細(xì)就是非常重要的了。開始

的時候真的感覺編程是一件很無聊的事情,不過當(dāng)一個程序運(yùn)行成功的時候那種

喜悅是無法言語的,那種成就感是無法比擬的。又經(jīng)過幾天的努力,終于把程序

完成了,盡管程序還是有很多錯誤和漏洞,不過還是很高興的。無論如何是自己

的勞動成果,是自己經(jīng)過努力得到的成績,同時也是學(xué)習(xí)C語言的一次實踐作業(yè),

自己進(jìn)步的證明。

通過這次課桂設(shè)計,使我對C語言有了更進(jìn)一步的認(rèn)識和了解,要想學(xué)好它

要重在實踐,要通過不斷的上機(jī)操作才能更好地學(xué)習(xí)它,我也發(fā)現(xiàn)我的好多不足

之處,首先是自己在指法上還不行,經(jīng)常按錯字母,通過學(xué)習(xí)也有所改進(jìn);再有

對C語言的一些標(biāo)準(zhǔn)庫函數(shù)不太了解,還有對函數(shù)調(diào)用的正確使用不夠熟悉,還

有對C語言中經(jīng)常出現(xiàn)的錯誤也不了解,通過實踐的學(xué)習(xí),我認(rèn)識到學(xué)好計算機(jī)

要重視實踐操作,不僅僅是學(xué)習(xí)C語言,還是其它的語言,以及其它的計算機(jī)方

面的知識都要重在實踐,所以后在學(xué)習(xí)過程中,我會更加注視實踐操作,使自己

便好地學(xué)好計算機(jī)。

在課程設(shè)計過程中,收獲知識,提高能力的同時,我也學(xué)到了很多人生的哲

理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎

么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過程中,我一定會把

課程設(shè)計的精神帶到生活中,不畏艱難,勇往直前。

六、源程序

/******頭文件(.h)***********/

#include"stdio.h"/*I/O函數(shù)*/

#incIude"stdIib.h"/*標(biāo)準(zhǔn)庫函數(shù)*/

#include“string.h"/*字符串函數(shù)*/

#include“ctype.h"/*字符操作函數(shù)*/

#defineM50/*定義常數(shù)表示記錄數(shù)*/

typedefstruct/*定義數(shù)據(jù)結(jié)構(gòu)*/

(

charname[20];/*姓名*/

charunits[30];/*單位*/

chartele[10];/*電話*/

)ADDRESS;

/******以下是函數(shù)原型*******/

intenter(ADDRESSt[]);/*輸入記錄*/

voidIist(ADDRESSt[],intn);/*顯示記錄*/

voidsearch(ADDRESSt[],intn);/*按姓名查找顯示記錄*/

intdelete(ADDRESSt[],intn);/*刪除記錄*/

intadd(ADDRESSt[],intn);/*插入記錄*/

voidsave(ADDRESSt[],intn);/*記錄保存為文件*/

intload(ADDRESSt[j);/*從文件中讀記錄*/

voiddisplay(ADDRESSt[]);/*按序號查找顯示記錄*/

voidsort(ADDRESSt[],intn);/*按姓名排序*/

voidqseek(ADDRESSt[],intn);/*快速查找記錄*/

voidcopy();/*文件復(fù)制*/

voidprint(ADDRESStemp);/*顯示單條記錄*/

intfind(ADDRESSt[j,intn,char*s);/*查找函數(shù)*/

intmenu_select();/*主菜單函數(shù)*/

/木木木木木木主函數(shù)開夕價木木木木木木木/

main()

(

inti;

ADDRESSadr[M];/*定義結(jié)構(gòu)體數(shù)組*/

intlength;/*保存記錄長度*/

clrscr();/*清屏*/

for(;;)/*無限循環(huán)*/

(

SWitch(menu_select())/*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的

條件*/

(

case0:length二enter(adr);break;/*輸入記錄*/

case1:Iist(adr,length);break;/*顯示全部記錄*/

case2:search(adr,length);break;/*查找記錄*/

case3:Iength=deIete(adr,length);break;/*刪除記錄*/

case4:Iength=add(adr,length);break;/*插入記錄*/

case5:save(adr,length);break;/*保存文件*/

case6:length=load(adr);break;/*讀文件*/

case7:display(adr);break;/*按序號顯示記錄*/

case8:sort(adr,length);break;/*按姓名排序*/

case9:qseek(adr,length);break;/*快速查找記錄*/

case10:copy();break;/*復(fù)制文件*/

case11:exit(0);/*如返回值為11則程序結(jié)束*/

)

)

)

/*菜單函數(shù),函數(shù)返回值為整數(shù),代表所選的菜單項*/

menu_select()

(

chars[80];

intc;

gotoxy(1.25);/*將光標(biāo)定為在第25行,第1列*/

printf("pressanykeyentermenu.....\n");/*提示壓任意鍵繼續(xù)*/

getch();/*讀入任意字符*/

clrscr();/*清屏*/

gotoxy(1,1);

prjntf(”********************MENU*******x*************\n\rT);

printf("0.Enterrecord\n");

printf("1.ListthefiIe\n");

printf("2.Searchrecordonname\n");

printf("3.DeIetearecord\n");

printf("4.addrecord\n");

printf("5.SavethefiIe\n");

printf("6.Loadthefile\n");

printf("7.displayrecordonorder\n");

printf("8.sorttomakenewfile\n");

printf("9.Quickseekrecord\n");

printf("10.copythenewfiIe\n");

printf("11.Quit\n");

printf(=***********************************************\門");

do{

printf("\nEnteryouchoice(O'11):");/*提示輸入選項*/

scanf("%s",s);/*輸入選擇項*/

c=atoi(s);/*將輸入的字符串轉(zhuǎn)化為整型數(shù)*/

}whiIe(c<011c>11);/*選擇項不在0~11之間重輸*/

returnc;/*返回選擇項,主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/

1

/***輸入記錄,形參為結(jié)構(gòu)體數(shù)組,函數(shù)值返回類型為整型表示記錄長度*/

intenter(ADDRESSt[])

inti,n;

char*s;

clrscr();/*清屏*/

printf("\npleaseinputnum\n");/*提示信息*/

scanf("%d”,&n);/*輸入記錄數(shù)*/

printf("pleaseinputrecord\n");/*提示輸入記錄*/

printf("nameunitteIephone\n");

printfC----------------------------------------------------------\n");

for(i=0;i<n;i++)

(

scanf("%s%s%s",t[i].name,t[i].units,t[i].tele);/*輸入記錄*/

printf("-------------------------------------------------------\n");

)

returnn;/*返回記錄條數(shù)*/

)

/*顯示記錄,參數(shù)為記錄數(shù)組和記錄條數(shù)*/

voidIist(ADDRESSt[],intn)

inti;

cIrscr();

printf("\n\n*******************ADDRESS******************\n");

printf("nameunittelephone、—);

printfC----------------------------------------------------------\n");

for(i=0;i<n;i++)

',

printf(%-20s%-30s%-10s\n"rt[i].name,t[i].units,t[i].tele);

if((i+1)%10==0)/*判斷輸出是否達(dá)到10條記錄*/

{_

printf("Pressanykeycontinue...\n");/*提示信息*/

getch();/*壓任意鍵繼續(xù)*/

)

printf("************************end*******************\n");

)

/*查找記錄*/

voidsearch(ADDRESSt[],intn)

(

chars[20];/*保存待查找姓名字符串*/

inti;/*保存查找到結(jié)點的序號*/

clrscr();/*清屏*/

printf("pleasesearchname\n");

scanf("%s",s);/*輸入待查找姓名*/

i=find(t,n,s);/*調(diào)用find函數(shù),得到一個整數(shù)*/

if(i>n-1)/*如果整數(shù)i值大于n-1,說明沒找到*/

printf("notfound\n");

eIse

print(t[i]);/*找到,調(diào)用顯示函數(shù)顯示記錄*/

1

/*顯示指定的一條記錄*/

voidprint(ADDRESStemp)

cIrscr();

printf("\n\n********************************************\n");

printf("nameunit

teIephone\n");

printf("——

printf("%-20s%-30s%-1Os\n",temp,name,temp,units,temp,teIe);

printf("**********************end***********************\n");

)

/*查找函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)以及姓名s*/

\ntfind(ADDRESSt[',intn,char*s)

inti;

for(i=0;i<n;i++)/*從第一條記錄開始,直到最后一條*/

(

if(strcmp(s,t[i].name)==0)/*記錄中的姓名和待比較的姓名是否相

等*/

returni;/*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/

)

returni;/*返回i值*/

)

/*刪除函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)*/

intdelete(ADDRESSt[],intn)

(

chars[20];/*要刪除記錄的姓名*/

intch=0;

inti,j;

printf("pleasedeIetedname\n");/*提示信息*/

scanf("%s",s);/*輸入姓名*/

i=find(t,n,s);/*調(diào)用find函數(shù)*/

if(i>n-1)/*如果i>n-1超過了數(shù)組的長度*/

printf("nofoundnotdeleted\n");/*顯示沒找到要刪除的記錄*/

eIse

(

print(t[i]);/*調(diào)用輸出函數(shù)顯示該條記錄信息*/

printf("Areyousuredeleteit(1/0)\n");/*確認(rèn)是否要刪除*/

scanf("%d",&ch);/*輸入一個整數(shù)0或1*/

if(ch-1)/*如果確認(rèn)刪除整數(shù)為1*/

(

for(j=i+1;j<n;j++)/*刪除該記錄,實際后續(xù)記錄前移*/

{

strcpy(t[j-1].name,t[j],name);/*將后一條記錄的姓名拷貝到

前一條*/

strcpy(t[j-1].units,t[J].units);/*將后一條記錄的單位拷貝

到前一條*/

strcpytele,t[j].tele);/*將后一條記錄的電話拷貝到

前一條*/

)

n—;/*記錄數(shù)減1*/

)

)

returnn;/*返回記錄數(shù)*/

)

/*插入記錄函數(shù),參數(shù)為結(jié)構(gòu)休數(shù)組和記錄數(shù)*/

intadd(ADDRESSt[],intn)/*插入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

(

ADDRESStemp;/*新插入記錄信息*/

inti,J;

chars[20];/*確定插入在哪個記錄之前*/

printf("pleaseinputrecord\n");

printf("nameunit

teIephone\n");

printf("----------------------------------------------------\n");

scanf("%s%s%s",temp,name,temp,units,temp,tele);/*輸入插入信息*/

printf("--------------------------------------------------\n");

printf("pleaseinputlocatename\n");

scanf("%s",s);/*輸入插入位置的姓名*/

i=find(t,n,s);/*調(diào)用find,確定插入位置*/

for(j=n-1;j>=i;j-)/*從最后一個結(jié)點開始向后移動一條*/

strcpy(t[j+1].name,t[j].name);"當(dāng)前記錄的姓名拷貝到后一條,

strcpy(t[j+1].units,t[j].units);/*當(dāng)前記錄的單位拷貝到后一條*/

strcpy(t[j+1].tele,t[j].tele);/*當(dāng)前記錄的電話拷貝到后一條*/

)

strcpy(t[i].name,temp,name);/*將新插入記錄的姓名拷貝到第i個位置*/

strcpyunits,temp.units);/*將新插入記錄的單位拷貝到第i個位置

*/

strcpytele,temp,tele);/*將新插入記錄的電話拷貝到第i個位置*/

n++;/*記錄數(shù)加1*/

returnn;/*返回記錄數(shù)*/

)

/*保存函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

voidsave(ADDRESSt[],intn)

inti;

FILE*fp;/*指向文件的指針*/

if((fp=fopen("record,txt","wb"))==NULL)/*打開文件,并判斷打開是否

正常*/

printf("cannotopenfiIe\n");/*沒打開*/

exit(1);/*退出*/

)

printf("\nSavingfile\n");/*輸出提示信息*/

fprintf(fp,"%d",n);/*將記錄數(shù)寫入文件*/

fprintf(fp,"\r\n");/*將換行符號寫入文件*/

for(i=0;i<n;i++)

(

fprintf(fp,"%-20s%-30s%-1Os",t[i].name,t[i].units,t[i].tele);/*

格式寫入記錄*/

fprintf(fp,"\r\n");/*將換行符號寫入文件*/

)

fcIose(fp);/*關(guān)閉文件*/

printf("****savesuccess***\n")

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論