大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實(shí)用模板_第1頁
大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實(shí)用模板_第2頁
大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實(shí)用模板_第3頁
大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實(shí)用模板_第4頁
大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實(shí)用模板_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、中南林業(yè)科技大學(xué)課程設(shè)計報告設(shè)計名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計姓 名: 周云輝學(xué) 號:20104483專業(yè)班級:2010級軟件工程系(院):計算機(jī)與信息工程學(xué)院設(shè)計時間:2012學(xué)年春學(xué)期設(shè)計地點(diǎn):電子信息樓602機(jī)房成績:指導(dǎo)教師評語:簽名:1. 課程設(shè)計目的1. 訓(xùn)練學(xué)生靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識,獨(dú)立完成問題分析,結(jié)合數(shù)據(jù)結(jié)構(gòu)理論知識,編寫程序求解 指定問題。2. 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能;3. 提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決問題的能力;4. 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),鞏固、深化學(xué)生的理論知識,提高編程水平, 并

2、在此過程中培養(yǎng)他們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度和良好的工作作風(fēng)。2. 課程設(shè)計任務(wù)與要求:任務(wù)任務(wù)磁盤瀏覽器的設(shè)計與實(shí)現(xiàn)問題描述:使用二叉樹或四叉樹描述磁盤結(jié)構(gòu),通過解析分區(qū)表項指針數(shù)組,實(shí)現(xiàn)磁盤的劃分和管理的分析?;疽?(1)建議的功能如圖 29.1所示。訂蘭環(huán)11 *c:f堆想屯ft: IS3 1 W4. S QBQ.rHi? a i34爲(wèi)1El D GfiD Q 嘟二丹L-:右總IJ鮭1和oob 伽 do 趣nrrnnn inrnOf HPcoIP-nr ?rFrr1-口 COMtlUlKClIFat atAL-at odO曲HQamooooso05IQ P:Dfl30.A .cinatKiiaQ

3、D E:卩宦0?31.-oi acFfi4” si ceKE2二! 01T513.9 .annanmiiFriqi hf於祐-M Pi=冋GOn inn,ITLojauiaijguiUL 751LfG千i-i 1:BEoat U. a .i.At .aDooaoooDsc aeflE50SC a* 9A.J6C5.1 1nrm: nniiAi5? 8E弼oe-0* P?FE4?B刑i ZLBr 36MDE-DL曲EQCOl.e .4gcngomnin|9 1 IFgiqhr-Tr rf01nrn1.acoaoaauLj匚177C55-0 PA噩DuIKIi衛(wèi) J.acuooooco! t ae

4、GE03DT AC2QCfloc首 UJ tacnnnoan-n貶04B37-凸R?EB-TR(1s0CO3CO30S0OC 7COC:訓(xùn)-ot at oo血0.1acmomnmAT 巧 71T3-p :T祁in吃NfciriCperacoanaatiLuG7 2C73T9-GE BL QD*F- 5 ft1BTI.Daco-jcojiLOT4 K膽新T TBT4.粘PM取譏acmawnni69 6P67znT: 6PT2onmila Is: d i r r -rrnr口他mno 00 aoonm at oona苗I acooiQi.wQC QQ asaoQC Q匚 DODQooaCO30l3

5、1.EJDi 0G 00D-ql an0LibIXIaaoooooieooc aooo00 M 00oa他acmnnu-innr 口! an an-nr ar anonnn麗im直ntuuo cil an uu-m C1L uuduUUocooqooiwQC QD ac DO-QC ac DO0Qooocoaoiiaij0數(shù)據(jù)關(guān)系:R1=| a i-1 ,a i D,i=1,2,3, n基本操作:In sert(&L,i,j)初始條件:線性表 L已存在,1 w i w n+1。操作結(jié)果:在L中第i個位置之前插入新的數(shù)據(jù)元素j,L的長度加1。Del(&L,i,j)初始條件:線性表 L已存在,1w

6、 i w n。操作結(jié)果:刪除L的第i個數(shù)據(jù)元素丄的長度減1Xg(&L,i,j)初始條件:線性表L已存在。操作結(jié)果:用新的輸入數(shù)據(jù)項j代替原有的指定要修改的數(shù)據(jù)項i。Search(&L,i,e)初始條件:線性表L已存在。操作結(jié)果:查找指定的某元素i,并將值賦給e,用e輸出。三詳細(xì)設(shè)計1) 宏定義,定義全局變量、結(jié)構(gòu)體:#define LEN sizeof(struct student)/* 宏定義 */static int n;/*n為靜態(tài)全局變量,本文件模塊中各函數(shù)均可使用它*/char numstr100;/* 全局變量 */struct student/* 定義結(jié)構(gòu)體 */Io ng nu

7、m;char n ame10;double marks; stu1000,temp;2) 主函數(shù)的算法如下:void mai n()/定義一個我們造的類Disk mydisk;這是文件名,是我們電腦的硬盤char* drive name=.PhysicalDriveO;int flag=1, n;sig ned int a,b;In terface();while(flag)cout請您選擇您要的服務(wù)項(03):;cinn;coute ndle ndl;switch( n)case 1:z on e();break;case 2:cpjg();break;case 3:cout a;sca n

8、f(%X,&a);cout b;mydisk.ShowSectors(drive name,a,b);break;case 0:cout謝謝您的使用!endl;flag=0;break;default:break;3) 創(chuàng)建學(xué)生信息的算法如下: creat(void)/*創(chuàng)建學(xué)生成績信息*/while(ch=Y|ch=y)gets( nu mstr);/ 輸入學(xué)號stu n. num=atoi( nu mstr); gets(stu n. name);/ 輸入姓名 gets( nu mstr);/ 輸入成績 stu n+.marks=atof( nu mstr); ch=getchar();g

9、etchar();/*用于輸入y或者n*/4) 排序函數(shù)的算法如下:int print(void)/* 排序輸出 */ch=getchar();/* 輸入 a,b,c 的語句 */ switch(ch)/*選擇排序的方式*/ case a:funname();/*調(diào)用按姓名查找的函數(shù) */ getchar();break;case b:funmarks();/*週用按成績查找的函數(shù)_*/ getchar();break;case c:funnum();/*調(diào)用按學(xué)號查找的函數(shù) */ getchar();break;funname(void)/*按照姓名排序*/ if(n1)printf(tt

10、該文件為空!n);elsefor(i=0;i n; i+) for(j=i+1;j0) temp=stui;stui=stuj; stuj=temp;funmarks(void)/*按照成績排序*/if(n 1)printf(tt 該文件為空!n);elsefor(i=0;i n; i+)for(j=i+1;jstuj.marks)temp=stui;stui=stuj;stuj=temp;funnum(void)/*按照學(xué)號排序*/if(n 1)printf(tt 該文件為空!n);elsefor(i=0;i n; i+)for(j=i+1;jstuj. num)temp=stui;stui

11、=stuj;stuj=temp;5) 寫入文件的算法如下:wfile(void)/* 寫入文件 */FILE *fptr;if(n1)printf(t文件為空,無法寫操作!n);else fwrite(stu,sizeof(stu0), n,fptr); fclose(fptr);6) 讀取文件的算法如下:frile(void)/* 讀出文件 */FILE *fptr;while(fread( &stui,sizeof(stu0),1,fptr)=1)i+; n=i;fclose(fptr);7) 查找的算法如下:search(void)/* 查找 */flag=0;for(i=0;i n;i

12、+)if(strcmp( nu mstr,stui. name)=0)|atol( nu mstr)=stui. num)prin tf(%ld,stui. num);prin tf(%s ,stui. name);prin tf(%.2f ,stui.marks);flag=1;getchar(); retur n 0;8) 插入的算法如下:insert(void)/* 插入 */gets( nu mstr);stu n. num=atoi( nu mstr);gets(stu n. name);gets( nu mstr);stu n+.marks=atof( nu mstr); funn

13、 ame();9) 刪除的算法如下:del(void) /* 刪除 */printf(tt請輸入要刪除的學(xué)號:n); gets (nu mstr);for(i=0;i n; i+)if(stui. num=atol( nu mstr)j=i;flag=1;if(flag=1) for(i=j;i n;i+)stui=stui+1;n-;10) 修改的算法如下:xg(void)/* 修改 */flag=0;char ch;gets (nu mstr);for(i=0;i n;i+) if(stui. num=atol( nu mstr) j=i;flag=1; if(flag=1) switch

14、(ch)case 1:printf(t請輸入修改后的姓名:); gets(stuj. name);break;case 2:printf(t請輸入修改后的成績:);gets (nu mstr);stuj.marks=atof( nu mstr);break;case O: return 0; 四設(shè)計與調(diào)試分析五用戶手冊1本程序可以在 VC+5.0和VC+6.0的環(huán)境下運(yùn)行。2將源程序復(fù)制到.cpp中,編譯鏈接就可以。3選擇編譯、運(yùn)行以后會出現(xiàn)運(yùn)行界面,選擇相應(yīng)的選項,根據(jù)提示即可進(jìn)行演示。界面如下:六測試成果運(yùn)行程序打開界面后如圖所示:查詢磁盤分區(qū)情況如圖:分區(qū)信息盤符卷標(biāo)總空間 剩余空間c

15、D/ Ci i i T i 也乜也也M 也 K不呑呑Tjg”本- 5? G - B -J c H - *F ( S酩39.07GB 122.95GB05GB 182.54GB a.aoGB 3.7BGBL 50GB740GB 83.15GB 100.7MB 15245GB0.00GB3.73GBS.5SGB青您選擇您!查詢磁盤結(jié)構(gòu)情況如圖:磁盤結(jié)構(gòu)點(diǎn)丄點(diǎn)2點(diǎn)?點(diǎn)吩區(qū) 結(jié)善齧舊塊扁 理輯理輯理輯理輯余 管邏管邏管邏管邏剩00009009 0009903?04E22CEC04E22D2B14249B2C 14249BGB 2367996C 2367B?ftB3fi3aiGll0000003FO4E

16、22CAD0F42GEB1 0000003F 0F426EQ1 0600003F 16014276您選擇您要的服務(wù)項佃惰您選擇您娶的服務(wù)項03:3請贛人您要查詢的起始扇區(qū)浦 遠(yuǎn)裁入恿要愛詢的扇區(qū)巍目=1 第0陽Q眄呂騎區(qū);600006006006060082BS00QS0030080680040MM)0OB5O060000BG 0 000060070 006060080 一胸的DM9 033 GO 8E D0 % B9 09 熨DD BE 07 9E2 FlB4 41F7 CL2G 67C 689F S3咔7G0aa胴10BCFC7ES5574酗SS9E4E00SG000C0H00OG0 0E

17、00OQO600F0 -0000100 00600110 00QQ0QO1200eeoi3008600150 aRS60Q16a 008060170 000000180 B80S0Q1?Q 0RQ0601AQ 0060601B0esaesQiDa 0RQ00Q1E0 0060601F04E 11 5 32 AA 75Eg 6300 FB43 50& 6653 6661 681& A0OS &1U EH24 0274 6?2& 6G6E 6767 2fJ65 6D 肛& Cl FF w on 00 ad75 0CE4 9A E FF83 B9B9 0S41 756S 0000 00B7 07 a

18、? 8BF2 F4G3 4? &F 6E6P &1za ?36F ?0 00 0007 FE0F FE do no 00 00Stl5676 DP BB3202&907EBF0EB6E2064?65 0FF HF 朋0000P30056 CD 陰 0010EB027E0000EG CD ai so00CD 08ACFD76746973?2&3 FF FF 朋 007CA4000013FE0B師14QA90CDEB&Q1AF?00001Aas3CSB61616E74617B3FEC00038E507C555D4GGB4B8GE80138DE8G02600SAB600C96C6267659A002

19、C0000C0 &8QBCfi7210FF420103QF5DQ07C23016800320774E46?6C206D69B200E2000081CBF40F 陽 7fc 腫 02CDB4EB7S0fiCO720fi甜F6EB0966哼656F066EFE06040606D8 BE 06 CB 碼BE 11跖SI FB M 60QS 856 W BB 60 13皿SA S0 9E 81 17 FAB6 FF ?5 3B 2C 66Q6 6068 eeIA 00 63 A6Bfi 07 Efi SS20 7080 4570 65 4D 69 6? 2061 85 AD 2C 55 IF80 SO

20、80 866S 7C TB B? 01 S3C655的 7E 1060 00 8B F4 vc sn“ ?3 2 se 3E FE BQ Di 昭64 6 8168 07 ee砒 7C的 7C朋IS 0760 B4Z 叫(1261 7272 7272 6173 73 73 ? ee 00T2 04 56 35R0 RO es osBF04C5107500&8CD罔1CEB7DE6E0FBBB530000320EE0746F7469?3800000RQ55001U0974FE60MW7bG40066666?72S9fcE7401an上圖為分析一個扇區(qū)的運(yùn)行圖七附錄(源程序清單)/*2010級軟件

21、工程1班 周云輝的課程設(shè)計題目,選題是:磁盤瀏覽器的設(shè)計和實(shí)現(xiàn) */#in clude#in clude#i ncludevioma nip#in clude#i nclude #include using n amespace std;class Diskpublic:獲取硬盤信息結(jié)構(gòu)體BOOL GetDriveGeometry(char* deviceFile,DISK_GEOMETRY * pdg);顯示對應(yīng)pDiskString硬盤的扇區(qū)信息,起始扇區(qū) sectorOffset,顯示多少扇區(qū)sectorNum void ShowSectors(char* pDiskStri ng, D

22、WORD sectorOffset, DWORD sectorNum);讀硬盤文件,從扇區(qū)號 dwStartSector開始,讀取wSectors個扇區(qū)至緩沖區(qū)lpSectBuff中BOOL ReadSectors(char* devName, DWORD dwStartSector, DWORD wSectors, unsigned char* lpSectBuff);signed int dwsC(DWORD s,int n,int len);構(gòu)造函數(shù)Disk();析構(gòu)函數(shù)virtual Disk();;Disk:Disk()Disk:Disk()lllllllllllllllllllll

23、lllllllllllllllllllllllllllllllllllllllllllllllllllll/讀硬盤文件,從扇區(qū)號 dwStartSector開始,讀取wSectors個扇區(qū)至緩沖區(qū)IpSectBuff中 llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllBOOL Disk:ReadSectors(char* devName, DWORD dwStartSector, DWORD wSectors, unsigned char *lpSectBuff)HANDLE hDev = Cr

24、eateFile(devName,/文件名GENERIC_READ,FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);if (hDev = INVALID_HANDLE_V ALUE)ll 無效的返回值文件讀取失敗cout讀取錯誤!=0x800000)判斷起始扇區(qū)號低3個字節(jié)X 512后是否進(jìn)位 x=(x-0x800000)*0x200;有進(jìn)位則減去進(jìn)位的值,再乘以0x0200,計算出字節(jié)偏移li.HighPart=li.HighPart+1; 進(jìn)位累加到高位上else/ sectorOffset=sectorOffse

25、t;/無進(jìn)位則直接乘以0x0200,計算出字節(jié)偏移 li.HighPart=li.HighPart;SetFilePoi nter(hDev,li.LowPart,&li.HighPart,FILE_BEGIN);/ SetFilePointer(設(shè)備或文件句柄,起始字節(jié)偏移低雙字,起始字節(jié)偏移高雙字,字節(jié)偏 移的類型);DWORD dwBytesRead=0;/ 一個參數(shù)而已BOOL bResult=ReadFile(hDev, lpSectBuff,0x0200 * wSectors, & dwBytesRead, NULL);(文件的句柄),(用于保存讀入數(shù)據(jù)的一個緩沖區(qū)),(要讀入的字

26、節(jié)數(shù)),(指向?qū)嶋H讀取字 節(jié)數(shù)的指針),(是否引用一個特殊的結(jié)構(gòu))/關(guān)閉句柄CloseHa ndle(hDev);retur n bResult;/顯示對應(yīng)pDiskString硬盤的扇區(qū)信息,起始扇區(qū) sectorOffset,顯示多少扇區(qū)sectorNum/void Disk:ShowSectors(char* pDiskStri ng, DWORD sectorOffset, DWORD sectorNum)/定義一個多個扇區(qū)的緩沖區(qū)un sig ned char *bBuf= new un sig ned charsectorNum*0x0200;將sectorNum這么多個扇區(qū)寫入b

27、Buf緩沖區(qū)中ReadSectors(pDiskStri ng,sectorOffset,sectorNum,bBuf);又遇到LARGE_INTEGER這個結(jié)構(gòu)體了,這里是為了顯示邏輯偏移地址LARGE_INTEGER li;li.QuadPart = sectorOffset*0x200;for (DWORD i=0;i=n;i-)if(i=n+le n-1)dw=dw+bBufi*16777216;if(i=n+le n-2)dw=dw+bBufi*65536;if(i=n+le n-3)dw=dw+bBufi*256;if(i=n+le n-4)dw=dw+bBufi;/prin tf

28、(%02X,dw);return dw;/磁盤結(jié)構(gòu)分析函數(shù)void cpjg()/磁盤結(jié)構(gòu)Disk mydisk;char* drive name=.PhysicalDriveO;sig ned int dw=OxOOOOOOOO;un sig ned char *bBuf= new un sig ned char512;sig ned int ch仁 0x00, ch2=0x00 ,ch3=0x00;signed int gl=0x00;/管理節(jié)點(diǎn)的跳轉(zhuǎn)|偏移sig ned int f,he,cha;bool bo=true,b1,b2,b3,b4;int i=1,j=1;/i作為管理結(jié)點(diǎn)序

29、號,j作為邏輯塊序號,k作為分區(qū)間隙序號cout* *e ndl;cout*磁盤結(jié)構(gòu)*e ndl;coutvv * *e ndl;cout* 結(jié)點(diǎn)coutvv*起始扇區(qū)扇區(qū)數(shù)*e ndl;*vendl;分析第0行ch2=mydisk.dwsC(gl,454,4);coutvv*管理結(jié)點(diǎn);coutvvivv 00000000; printf(%08X,ch2)coute ndl;i+; while(bo)b1=0;b2=0;b3=0;b4=0;/分析第一行int w=0;while(w4)mydisk.ReadSectors(drive name,gl,1,bBuf);if(bBuf450+w*

30、16=05 | bBuf450+w*16=0x0F)if(i=3)ch仁gl+mydisk.dwsC(gl,454+w*16,4);elsech1=f+mydisk.dwsC(gl,454+w*16,4);gl=ch1;ch2=mydisk.dwsC(ch1,454,4);cout*管理結(jié)點(diǎn);coutvvivv ; printf(%08X,ch1);coutprin tf(%08X,ch2);coute ndl;if(i=2)f=ch1;b仁true;i+;else if( bBuf450+w*16=00)coutvv; /輸出空字符串elsech仁gl+mydisk.dwsC(gl,454+

31、w*16,4);ch2=mydisk.dwsC(gl,458+w*16,4);coutvvcoutvv* 邏輯塊;coutvvjvv; printf(%08X,ch1);pri ntf(%08X,ch2) ;coute ndl;j+;if(w3 & bBuf450+w*16+16!=00)if(i=3)ch3=gl+mydisk.dwsC(gl,454+w*16+16,4);elsech3=f+mydisk.dwsC(gl,454+w*16+16,4);if(ch3=ch2+ch1)cout;elsecoutvv* 分區(qū)間隙;coutvv ; printf(%08X,ch1+ch2);cout

32、prin tf(%08X,ch3-ch2-ch1);coute ndl;w+;bo=b1 | b2 | b3 | b4;輸出剩余扇區(qū)數(shù),以及計算未分配扇區(qū)數(shù)coutvvcoutvv* 剩余扇區(qū);coutvv; printf(%08X,ch1+ch2);pri ntf(%08X,0) ;coute ndl;coutvve ndl;void Volume()/輸出磁盤大小函數(shù)DWORD Disk Info = GetLogicalDrives();int DSLe ngth = GetLogicalDriveStri ngs(0,NULL); char* DStr = new charDSLe n

33、gth;GetLogicalDriveStri ngs(DSLe ngth,/*(LPTSTR)*/DStr); int DType;int si=0;bool fResult;unsigned _int64 i64FreeBytesToCaller;unsigned _int64 i64TotalBytes;un sig ned _in t64 i64FreeBytes;for(int i=0;iDSLength/4;+i)char dir3=DStrsi,:;cout dir;DType = GetDriveType(DStr+i*4);if(DType = DRIVE_FIXED)coutvv本地磁盤(dir);else if(DType = DRIVE_REMOV ABLE)coutvv可移動磁盤(dir);else if(DType = DRIVE_CDROM)coutDVD-RAM 驅(qū)動器vv(vvdirv);else if(DType =DRIVE_REMOTE)coutvv 網(wǎng)絡(luò)磁盤vv(vvdirv

溫馨提示

  • 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

提交評論