操作系統(tǒng)課程設(shè)計(jì)報(bào)告模擬文件管理系統(tǒng)附源程序_第1頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告模擬文件管理系統(tǒng)附源程序_第2頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告模擬文件管理系統(tǒng)附源程序_第3頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告模擬文件管理系統(tǒng)附源程序_第4頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告模擬文件管理系統(tǒng)附源程序_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、源程序代碼,聯(lián)系153893706操作系統(tǒng)課程設(shè)計(jì)報(bào)告題目: 模擬文件管理系統(tǒng)學(xué) 院 計(jì)算機(jī) 專 業(yè) 網(wǎng)絡(luò)工程 年級(jí)班別 1班 學(xué) 號(hào) 學(xué)生姓名 指導(dǎo)教師_ _ 成 績 2007 年 1 月 一、課程設(shè)計(jì)題目:編寫并調(diào)試一個(gè)樹型目錄結(jié)構(gòu)的文件系統(tǒng),模擬文件管理工作流程。要求:(1)設(shè)計(jì)多用戶文件系統(tǒng),采用多級(jí)文件目錄。(2)至少要有十個(gè)以上的實(shí)用命令,應(yīng)設(shè)置文件保護(hù)措施。(3)設(shè)計(jì)一個(gè)較實(shí)用的用戶界面,方便用戶使用,界面要為用戶提供足夠的選擇信息,不需用戶打入打入冗長的命令。二、設(shè)計(jì)思想說明:1. 使用可視化環(huán)境編程,程序界面模仿windows系統(tǒng)的資源管理器程序(左邊為目錄樹形結(jié)構(gòu),顯示多級(jí)

2、文件目錄,右邊為目錄內(nèi)容顯示)。2. 使用鼠標(biāo),鍵盤,快捷鍵及拖動(dòng)作各種文件的操作。3. 文件操作功能有:用戶登錄,新建文件夾,新建文件,文件重命名,剪切文件/文件夾,復(fù)制文件/文件夾,粘貼,查看文件內(nèi)容,修改文件內(nèi)容,查看文件屬性,修改文件權(quán)限等。4. 為了便于操作,系統(tǒng)內(nèi)的所有文件文件類型默認(rèn)為文本文件,用戶可以直接編輯其文字內(nèi)容。三、系統(tǒng)結(jié)構(gòu)的說明1.開發(fā)環(huán)境: c+ builder 6.02.運(yùn)行環(huán)境: windows 98/nt4.0 以上3.使用控件:tmenu 菜單欄控件timagelist 圖表集控件 ttreeview 樹形結(jié)構(gòu)顯示控件 tlistview 對象顯示控件 tp

3、opupmenu 反健菜單控件 tsplitter 工具欄按鈕分割控件 tstatusbar 狀態(tài)欄控件 ttoolbutton 工具欄按鈕控件 ttoolbar 工具欄菜單控件4.窗體結(jié)構(gòu): 如下圖,窗體分為三個(gè),分別是form1,form2,form3。其中form1位程序主界面窗體,為始終顯示狀態(tài);form2為文件內(nèi)容顯示及修改窗體,打開文件時(shí)顯示,其他時(shí)候?yàn)殡[藏狀態(tài);form3為文件屬性窗體,查看文件屬性時(shí)為顯示狀態(tài),其他時(shí)候?yàn)殡[藏狀態(tài)。form1,form2,form3之間互相包含頭文件,以便于傳遞數(shù)據(jù)。 圖表一 form1 圖表二 form2 圖表三 form35. 函數(shù)設(shè)置:fo

4、rm1:int all_size(); /統(tǒng)計(jì)listview中所有文件的大小int check_file_name(ufd *start,ansistring filename,int type); /尋找重名節(jié)點(diǎn)ufd *create_file(); /遞歸復(fù)制各節(jié)點(diǎn)void create_up_link(ufd *up,ufd *p); /復(fù)制后填寫每個(gè)節(jié)點(diǎn)中的up指針void createfile(ansistring filename); /新建文件void createfolder(ansistring filename); /新建目錄ufd *copy_file(ufd *del

5、); /遞歸復(fù)制各節(jié)點(diǎn)void delete_f(ufd *del); /遞歸刪除節(jié)點(diǎn)void delete_file(ufd *del); /刪除文件/文件夾void destory_ft(); /銷毀 文件-tree 鏈表void destory_fv(); /銷毀 文件-list 鏈表void disable_all(); /禁止控件ft_connect *draw_tree(ttreenode *tree_p,ufd *p); /遞歸生成樹狀結(jié)構(gòu)void enable_all(); /激活控件void file_copy_paste(ufd *directory); /復(fù)制后的粘貼vo

6、id file_cut(ufd *pcut); /剪切文件/文件夾void file_paste(ufd *directory); /剪切后粘貼ansistring file_path(ufd *p); /計(jì)算文件路徑void folder_view_ini(); /初始化目錄顯示void item_view_ini(); /初始化文件顯示void login(); /登錄void mfd_in(); /初始化用戶文件鏈表,并賦予用戶文件數(shù)據(jù)void per_copy(ufd *p); /復(fù)制void refrash(); /刷新void reset(); /重置int subrelative

7、(ufd *a,ufd *b); /判斷a是否從屬于b a在b里?void ufd_in(); /初始化用戶文件鏈表,并賦予用戶文件數(shù)據(jù)6. 組件列表form1: ttreeview *treeview1; tlistview *listview1; timagelist *imagelist1; timagelist *imagelist2; tmainmenu *mainmenu1; tmenuitem *n5; tmenuitem *n6; tmenuitem *n7; tmenuitem *n8; tstatusbar *statusbar1; ttoolbar *toolbar1;

8、ttoolbutton *toolbutton1; ttoolbutton *toolbutton2; ttoolbutton *toolbutton3; tpopupmenu *popupmenu1; tmenuitem *n9; tmenuitem *n10; tmenuitem *a1; tmenuitem *n11; tmenuitem *n12; tmenuitem *n13; tmenuitem *n14; tmenuitem *n15; tmenuitem *n17; tmenuitem *n18; tmenuitem *n1; tmenuitem *n2; tmenuitem

9、*n3; tmenuitem *n4; tmenuitem *n20; tmenuitem *n21; tmenuitem *n22; tmenuitem *n23; tmenuitem *n19; tmenuitem *n24; tmenuitem *n25; tmenuitem *n27; tmenuitem *n28; tmenuitem *n29; tmenuitem *n30; tmenuitem *n16; tpopupmenu *popupmenu2; tmenuitem *n26; tmenuitem *n33; tmenuitem *n31; tmenuitem *n34;

10、tmenuitem *n35; tsplitter *splitter1; tsplitter *splitter2; ttoolbutton *toolbutton4; ttoolbutton *toolbutton5;form2: tmemo *memo1; tbutton *button1; tbutton *button2;form3: tbutton *button1; tgroupbox *groupbox1; tcheckbox *read_mark; tcheckbox *write_mark; tcheckbox *execute_mark; tgroupbox *group

11、box2; tlabel *label1; tlabel *label2; tlabel *label3; tedit *path; tedit *filename; tedit *size;7. 響應(yīng)事件列表form1: void _fastcall formcreate(tobject *sender); void _fastcall treeview1change(tobject *sender, ttreenode *node); void _fastcall n9click(tobject *sender); void _fastcall a1click(tobject *sende

12、r); void _fastcall n2click(tobject *sender); void _fastcall listview1dblclick(tobject *sender); void _fastcall toolbutton1click(tobject *sender); void _fastcall n30click(tobject *sender); void _fastcall n14click(tobject *sender); void _fastcall n15click(tobject *sender); void _fastcall n21click(tobj

13、ect *sender); void _fastcall n22click(tobject *sender); void _fastcall n23click(tobject *sender); void _fastcall n17click(tobject *sender); void _fastcall n25click(tobject *sender); void _fastcall n29click(tobject *sender); void _fastcall listview1selectitem(tobject *sender, tlistitem *item, bool se

14、lected); void _fastcall n26click(tobject *sender); void _fastcall n24click(tobject *sender); void _fastcall n19click(tobject *sender); void _fastcall n16click(tobject *sender); void _fastcall n28click(tobject *sender); void _fastcall n33click(tobject *sender); void _fastcall n35click(tobject *sender

15、); void _fastcall n34click(tobject *sender); void _fastcall popupmenu2popup(tobject *sender); void _fastcall n11click(tobject *sender); void _fastcall n13click(tobject *sender); void _fastcall n27click(tobject *sender); void _fastcall n31click(tobject *sender); void _fastcall listview1dragdrop(tobje

16、ct *sender, tobject *source,int x, int y); void _fastcall listview1dragover(tobject *sender, tobject *source,int x, int y, tdragstate state, bool &accept); void _fastcall listview1keydown(tobject *sender, word &key,tshiftstate shift); void _fastcall listview1keyup(tobject *sender, word &

17、key, tshiftstate shift); void _fastcall treeview1dragover(tobject *sender, tobject *source, int x, int y, tdragstate state, bool &accept); void _fastcall treeview1dragdrop(tobject *sender, tobject *source, int x, int y); void _fastcall n8click(tobject *sender); void _fastcall n12click(tobject *s

18、ender); void _fastcall n3click(tobject *sender); void _fastcall n4click(tobject *sender); void _fastcall toolbutton2click(tobject *sender); void _fastcall toolbutton4click(tobject *sender); void _fastcall n10click(tobject *sender); void _fastcall toolbar1click(tobject *sender);form2: void _fastcall

19、button2click(tobject *sender); void _fastcall button1click(tobject *sender);form3: void _fastcall button1click(tobject *sender);四、數(shù)據(jù)結(jié)構(gòu)的說明程序的所有數(shù)據(jù)存儲(chǔ)由以下四個(gè)鏈表組成:struct ufd /文件目錄了鏈表 int sign; /標(biāo)志 0-file /1-folder ansistring filename; /文件/目錄名 char protect3; /文件保護(hù)碼 int length; /文件大小 ansistring content; /文件內(nèi)

20、容 ufd *up; /父節(jié)點(diǎn)指針 struct ufd *next; /下一節(jié)點(diǎn)指針 struct ufd *folder; /目錄下一層指針*ufd_head,*ufd_p,*current_ufd;struct ft_connect /treeview 與ufd關(guān)系鏈表 struct ufd *folder; /ufd指針 ttreenode *tree; /treeview節(jié)點(diǎn)指針 ft_connect *next; /下一節(jié)點(diǎn)指針*ft_head=null,*ft_p,*ft_q;struct fv_connect /listview 與ufd關(guān)系鏈表 struct ufd *fil

21、e; /ufd指針 tlistitem *item; /listview節(jié)點(diǎn)指針 fv_connect *next; /下一節(jié)點(diǎn)指針*fv_head=null,*fv_p=null,*fv_q=null;struct mfd /用戶鏈表 ansistring username; /用戶名 struct ufd *ufd; /用戶目錄指針 struct mfd *link; /下一節(jié)點(diǎn)指針*mfd_head,*mfd_p,*current_user;五、各模塊的算法流程圖1.用戶登錄模塊流程圖:2.刷新/初始化流程圖:3.treeview change事件 處理流程圖:4.打開操作流程圖5.新建

22、文件/文件夾 流程圖6.文件/文件夾 重命名流程圖:7.刪除文件/文件夾流程圖:8. 復(fù)制文件/文件夾流程圖:六、程序源代碼清單:project1.bpr 工程文件project1.cpp 工程源文件unit1.cpp form1 源文件unit1.dfm form1 窗體文件unit2.cpp form2 源文件unit2.dfm form2 窗體文件unit3.cpp form3 源文件unit3.dfm form3 窗體文件七、關(guān)鍵源代碼核心函數(shù)源代碼:void _fastcall tform1:formcreate(tobject *sender)/form1初始化函數(shù) mfd_in(

23、); login();/-void _fastcall tform1:treeview1change(tobject *sender, ttreenode *node) /記錄當(dāng)前數(shù)-文件夾鏈接 ft_p=ft_head; while(ft_p) if(ft_p->tree=treeview1->selected) break; ft_p=ft_p->next; if(ft_p) now_ft=ft_p; item_view_ini(); /-void _fastcall tform1:n9click(tobject *sender) /刪除按鈕響應(yīng) tlistitem *p

24、; if(p=listview1->selected) if(application->messageboxa("確定刪除"+p->caption+"嗎?").c_str(),"刪除",mb_okcancel) delete_file(now_fv->file); refrash();/-void refrash() /刷新顯示 form1->treeview1->items->clear(); form1->listview1->items->clear(); destor

25、y_ft(); drag_copy=0; folder_view_ini();ufd *create_file(ufd *perv,ansistring filename) /新建單個(gè)文件的數(shù)據(jù)結(jié)構(gòu) ufd *q; q=new(ufd); q->filename=filename; q->sign=0; strcpy(q->protect,"111"); q->length=12; q->folder=null; q->up=null; q->content="事例文件內(nèi)容" q->next=null; r

26、eturn q;void login() /登錄 ansistring username="user1" int sign=0; mfd *p,*q; reset(); disable_all(); if(!inputquery("用戶登錄","請輸入用戶名(系統(tǒng)默認(rèn)為user1-user3)",username) return; p=mfd_head; while(p) if(p->username=username) break; q=p; p=p->link; if(!p) sign=application->

27、messageboxa("用戶不存在,是否創(chuàng)建?","登錄提示",mb_yesno); if(sign=idyes) p=new(mfd); p->username=username; p->link=null; p->ufd=create_file(null,"原始文件"); q->link=p; else return; current_user=p; form1->statusbar1->panels->items0->text="當(dāng)前用戶:"+username

28、; enable_all(); folder_view_ini();/-void folder_view_ini() /初始化目錄顯示 ft_connect *p; ttreenode *tree_p; form1->treeview1->items->clear(); tree_p=form1->treeview1->items->addchild(null,current_user->username+" 的根目錄"); ft_head=new(ft_connect); ft_head->next=null; ft_hea

29、d->folder=0; ft_head->tree=tree_p; ft_p=ft_head; draw_tree(tree_p,current_user->ufd); p=ft_head; while(p&&now_ft) if(p->folder=now_ft->folder) break; p=p->next; if(p) p->tree->selected=1; else ft_head->tree->selected=1;ft_connect *draw_tree(ttreenode *tree_p,ufd

30、 *p) /遞歸生成樹狀結(jié)構(gòu) ttreenode *tree_q; while(p) if(p->sign=1) tree_q=form1->treeview1->items->addchild(tree_p,p->filename); ft_q=new(ft_connect); ft_q->next=null; ft_q->tree=tree_q; ft_q->folder=p; ft_p->next=ft_q; ft_p=ft_p->next; if(p->folder) draw_tree(tree_q,p->fol

31、der); p=p->next; void item_view_ini() /初始化文件顯示 ansistring str; ufd *p; tlistitem *list_p; form1->listview1->items->clear(); if(!now_ft->tree) /無當(dāng)前選擇文件夾 p=current_user->ufd; else ft_p=ft_head; if(now_ft->folder=0) p=current_user->ufd; else p=now_ft->folder->folder; desto

32、ry_fv(); /先銷毀原鏈表 fv_p=new(fv_connect); fv_p->next=null; fv_head=fv_p; while(p) /顯示并建立關(guān)系鏈表 list_p=form1->listview1->items->add(); list_p->caption=p->filename; if(p->sign=0) list_p->imageindex=1; fv_q=new(fv_connect); fv_q->item=list_p; fv_q->file=p; fv_q->next=null; f

33、v_p->next=fv_q; fv_p=fv_p->next; p=p->next; fv_p=fv_head; fv_head=fv_head->next; free(fv_p); str=(string)form1->listview1->items->count+" 個(gè)對象" form1->statusbar1->panels->items1->text=str; if(now_ft->folder) str=now_ft->folder->filename; else str=&q

34、uot;根目錄" form1->statusbar1->panels->items3->text="當(dāng)前位置:"+str; form1->statusbar1->panels->items2->text="總大?。?quot;+(string)all_size()+"字節(jié)"void destory_fv() /銷毀 文件-list 鏈表 fv_p=fv_head; while(fv_p) fv_head=fv_p; fv_p=fv_p->next; free(fv_head); f

35、v_head=null;void destory_ft() /銷毀 文件-tree 鏈表 ft_p=ft_head; while(ft_p) ft_head=ft_p; ft_p=ft_p->next; free(ft_head); ft_head=null;void _fastcall tform1:listview1dblclick(tobject *sender) /listview上雙擊圖表事件響應(yīng) tlistitem *p; p=listview1->selected; if(p) fv_p=fv_head; while(fv_p) /已知list指針,通過 文件-lis

36、t 鏈表 獲取文件鏈表節(jié)點(diǎn)指針 if(fv_p->item=p) break; fv_p=fv_p->next; if(fv_p) ufd_p=fv_p->file; if(ufd_p->sign=1) ft_p=ft_head; while(ft_p) /已知文件鏈表節(jié)點(diǎn)指針,通過 文件-tree 鏈表 獲取tree節(jié)點(diǎn)指針 if(ft_p->folder=ufd_p) break; ft_p=ft_p->next; if(ft_p) ft_p->tree->selected=true; /通過節(jié)點(diǎn)選中屬性 展開tree(并激活之前定義的選中后

37、更改右邊項(xiàng)目框顯示) else return; else if(!ufd_p->protect0) application->messageboxa("權(quán)限不足,無法讀取文件","錯(cuò)誤",mb_iconerror); return; if(!ufd_p->protect1) form2->memo1->readonly=1; form2->button1->enabled=0; else form2->button1->enabled=1; form2->memo1->readonly=0

38、; edit=ufd_p; form2->show(); form2->caption="編輯文件 "+ufd_p->filename; form2->memo1->text=ufd_p->content; int all_size() /統(tǒng)計(jì)listview中所有文件的大小 int size=0; ufd *p; if(now_ft->folder=0) p=current_user->ufd; else p=now_ft->folder->folder; while(p) size+=p->length; p=p->next; return size;void _fastcall tform1:n29click(tobject *sender) /listview中重命名按鈕 ttreenode *tree_p; ansistring filename; ufd *p; if(listview1->selected) filename=now_fv->file-&

溫馨提示

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

評論

0/150

提交評論