計(jì)算機(jī)操作系統(tǒng)專業(yè)課程設(shè)計(jì)_第1頁
計(jì)算機(jī)操作系統(tǒng)專業(yè)課程設(shè)計(jì)_第2頁
計(jì)算機(jī)操作系統(tǒng)專業(yè)課程設(shè)計(jì)_第3頁
計(jì)算機(jī)操作系統(tǒng)專業(yè)課程設(shè)計(jì)_第4頁
計(jì)算機(jī)操作系統(tǒng)專業(yè)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)

班級(jí):計(jì)091-1

姓名:

學(xué)號(hào):

使用語言:C++

指導(dǎo)老師:

學(xué)院:

一、系統(tǒng)要求

1、試驗(yàn)?zāi)繕?biāo)

經(jīng)過一個(gè)簡(jiǎn)單多用戶文件系統(tǒng)設(shè)計(jì),加深了解文件系統(tǒng)內(nèi)部功效及內(nèi)部實(shí)現(xiàn)。

2、試驗(yàn)內(nèi)容

為linux系統(tǒng)設(shè)計(jì)一個(gè)簡(jiǎn)單二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn):

(1)能夠?qū)崿F(xiàn)下列幾條命令(最少4條);

login用戶登陸

dir列文件目錄

create創(chuàng)建文件

delete刪除文件

open打開文件

close關(guān)閉文件

read讀文件

write寫文件

(2)列目錄時(shí)要列出文件名、物理地址、保護(hù)碼和文件長(zhǎng)度;

(3)源文件能夠進(jìn)行讀寫保護(hù)。

二、系統(tǒng)分析

1、設(shè)計(jì)思想

本文件為二級(jí)文件系統(tǒng),即要實(shí)現(xiàn)對(duì)文件增刪改查,同時(shí)又含有登陸系統(tǒng)、

注冊(cè)用戶功效,各個(gè)用戶之間文件系統(tǒng)互不干擾。

本文件系統(tǒng)采取兩級(jí)目錄,其中第一級(jí)對(duì)應(yīng)于用戶賬號(hào),第二級(jí)對(duì)應(yīng)于用戶

帳號(hào)下文件。另外,為了簡(jiǎn)便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全和管道文

件和設(shè)備文件等特殊內(nèi)容。

系統(tǒng)采取結(jié)構(gòu)體來存放用戶、文件目錄、文件數(shù)據(jù)內(nèi)容:

048*548*5+44*5048*5+44*50+264x200

用戶區(qū)文件目錄區(qū)文件數(shù)據(jù)區(qū)

每個(gè)分區(qū)全部是由結(jié)構(gòu)體組成,每個(gè)個(gè)去結(jié)構(gòu)體個(gè)數(shù)由格式化系統(tǒng)是決定。

整個(gè)系統(tǒng)編碼組成關(guān)鍵分為:

唱Workspace'file':1project^

-@filefiles

HSSourceFiles

國(guó)mymain.cpp

盟mysys.cpp

囪myuserfile.cpp

-PjHeaderFiles

Blallstruct.h

i]mysys.h

i]myuserfile.h

"1ResourceFiles

Allstruct.h定義了每個(gè)分區(qū)結(jié)構(gòu)體;

Mysys.h申明了對(duì)系統(tǒng)操作多種方法;

Myuserfile.h申明了對(duì)文件操作多種方法;

Myrnain.cpp整個(gè)系統(tǒng)主函數(shù),操作入口;

Mysys.cpp包含了mysys.h,實(shí)現(xiàn)了操作系統(tǒng)多種方法;

Myuserfile.cpp包含了myuserfile.h,實(shí)現(xiàn)了操作文件多種方法;

2、關(guān)鍵數(shù)據(jù)結(jié)構(gòu)

Allstruct.h文件內(nèi)容:

structs_user〃用戶區(qū)結(jié)構(gòu)體

longisuse;〃是否使用

charname[2()];〃用戶名

charpsd[20];//密碼

longaddress;//目錄地址

(;

structs_list〃目錄結(jié)構(gòu)體

lungisuse;〃是否使用

charname[20];〃文件名字

longmyaddress;//本條目錄地址

longpointaddress;//指向文件地址

longisfile;〃是否鎖定

longpointsize;〃目標(biāo)文件大小

longnextaddress;〃下條目錄地址

};

structs_file〃文件結(jié)構(gòu)體

{

longisuse;〃是否使用

charcontent[256];//文件內(nèi)容

longnext;〃下個(gè)文件塊地址

);

三、系統(tǒng)實(shí)施

1、假如首次進(jìn)入系統(tǒng),還沒有文件系統(tǒng),則會(huì)提醒格式化文件系統(tǒng),創(chuàng)建分區(qū),

并初始化分區(qū):

陛想爆盤文件小存在,是臺(tái)生成?V/N

底在創(chuàng)建。jj。、____

2、剛初始化后,沒有用戶,提醒創(chuàng)建用戶:

序擬磁盤文件不存在,是否生成?丫/N

y

正在創(chuàng)建。。。。

闞建完成!是否創(chuàng)建用戶?Y/N

府輸入新用戶的用戶名:

情輸入密碼

123

情再次輸入密碼

123

品入存儲(chǔ)。。。。

前建用戶成功。

3、用戶創(chuàng)建成功后出現(xiàn)對(duì)系統(tǒng)操作菜單

4、注冊(cè)用戶功效:

2

請(qǐng)輸入新用戶的用戶名:

adnin

請(qǐng)輸入密碼

123

請(qǐng)?jiān)俅屋斎朊艽a:

123

進(jìn)入存儲(chǔ)。、。。。

創(chuàng)建用戶成功。

XXXXXXXXX*XXXXXMXXXXX

請(qǐng)選擇:

1.

2.

3.

5、用戶登錄,登錄成功后顯示目前用戶下全部文件及其具體信息,同時(shí)顯示對(duì)

文件操作菜單:

情輸入用戶名:

情輸入密碼

123

圖陸成功!歡迎您川

當(dāng)前目錄下的文件:

此用戶沒有創(chuàng)建文件,目錄為空!

““

再)EK)

>澤

/??

內(nèi)

1文

?看

2件

?建

3除

?文

4?改

定狀

態(tài)轉(zhuǎn)

5?否

退

程序

0?銷

6、新注冊(cè)用戶默認(rèn)為沒有文件,選擇創(chuàng)建文件,而且每次對(duì)文件操作后顯示目

前用戶全部文件和操作菜單:

p

請(qǐng)輸入文件名<字母和數(shù)字,最多19個(gè)字符〉:

aa

文件由多少個(gè)字符n組成?<必須小于2550個(gè)字符〉

128

文件是否鎖定?9鎖定/n〈或其他〉自由讀寫

隹前目錄下的文件:

區(qū)件名大小是否鎖定物理地址

128V2440

XXXXXXXXXXXXXXXXX

7、此次新建文件為鎖定狀態(tài),不能被刪除:

8、對(duì)文件查看,默認(rèn)創(chuàng)建時(shí)候用0填充文件內(nèi)容:

XXXXXXX**XXX*XXXX?XXVXXXXXXX

蔣輸入要查看的文件的名字:(僅限當(dāng)前目錄)

aa

0000000000000000000000000000000000000000000000000000000000000003QQQ0I

000000000000000000000000000000000000000000000000

文件查看成功!

文件名大小是否鎖定物理地址

aa128丫2440

MMMMMMMMMM-M-M-M-M-M-M-M-M-M-M-M-M-M-MMMMMMMMMMMMMM

9、修改文件內(nèi)容:

餐輸入要修改的文件的名字:(僅限當(dāng)前目錄)

蓄入內(nèi)容:

sdfsdfsfsdfsdfsdfsdfsdfsdfsdfsdf

文件修改成功!

當(dāng)前目錄下的文件:

文件名大小是否鎖定物理地址

31a128¥2440

10、對(duì)文件鎖定進(jìn)行裝換:

同輸入要轉(zhuǎn)換是否鎖定的文件的名字:(僅限當(dāng)前目錄〉

aa

反件己轉(zhuǎn)換為自由讀寫!

性前目錄下的文件:

因件名大小是否鎖定物理地址

aa128N2440

11、刪除文件:

清輸入要?jiǎng)h除的文件的名字:〈僅限當(dāng)前目錄〉

文件刪除成功!

當(dāng)前目錄下的文件:

此用戶沒有創(chuàng)建文件,目錄為空!

12、注銷登錄退出系統(tǒng):

主輸

的選

AS擇

CD/.

內(nèi)

查看

文4

1M

2新建

文M

3刪除

文M

4修改L

狀態(tài)

轉(zhuǎn)換

是否

5定

退

程序

0注銷

,

如銷!

Messanykeytocontinue

四、功效實(shí)現(xiàn)

Mysys.h

#include<stdio.h>

#include"myuserfile.h"

classMSystenn

{"封裝了管理系統(tǒng)方法

〃組員變量

private:

FILE*myfile;

MUserniyuser;

〃組員函數(shù)

public:

MSysterm(){)

voidoutNameO;〃打印登陸后川戶名

intchcack();〃檢驗(yàn)虛擬文件系統(tǒng)跟是否存在

intmyformatO;〃初始化虛擬磁盤

intcreateuser();〃創(chuàng)建用戶

intlogin();〃用戶登錄

voidiiiyinainO;〃主控制程序

intlogout();〃用戶注銷

);

Myuserfile.h

#includc<stdio.h>

classMUser〃封裝了管理文件方法

{

〃組員變量

public:

FILE*myfile;

charname[20];〃用戶名

charpsd[2O];〃密碼

longlistaddress;〃目錄地址

longmyaddress;〃此用戶地址

private:

longlastaddress;〃最終一個(gè)目錄地址

〃組員函數(shù)

public:

intcrea(eFile();〃增加文件

intdelFile(charfilename[20]);//刪除文件

intrevampFile(charfHename[20]);〃修改文件

intmydir();〃列出目前目錄全部文件:夾)

intviewFile(charfilename[20]);〃查看文件

intmyConversion(charfilename[20]);〃轉(zhuǎn)換是否鎖定狀態(tài)

private:

intisSanie(charfilename_f[20],charfilename_s[2O]);

Mymain.cpp

#include<stdio.h>

#includc<iostrcam>

#include"mysys.h"

#include<limits>

usingnamespacestd;

intmain()

(

charnod1;

intn_select=2,i_l=0;

MSystermmysys;

/***********文件不存在程序人口************/

if(mysys.cheack()==?l)〃磁盤空間不存在

{

COUIVV”虛擬磁盤文件不存在,是否生成?Y/Nu?endl;

cin?nodl;

cin.clcar();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),'\n');//清空輸入流

if(nod1=='Y'||nodl=='y')

couivv"正在創(chuàng)建。。。。"vvendl;

if(mysys.myfbrmal()!=l)〃創(chuàng)建磁盤空間

{

cuuiW創(chuàng)建磁盤空間失??!立即退出。"v<cndl;

cin?nodl;

return2;

)

coui?”創(chuàng)建完成!是否創(chuàng)建用戶?Y/N”《endl;

cin?nodl;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(nuiTieric_limits<streanisize>::max(),,\n,);//清空輸入流

if(nodl=='Y1|nod1=='y')

{

if(mysys.createuser()==1)〃創(chuàng)建用戶

(

cout<〈"創(chuàng)建用戶成功。"?endl;

)

else

|

cout?”創(chuàng)建用戶失??!立即退出。"vvendl;

return3;

)

)

else

coutvv,匿名用戶無法進(jìn)入系統(tǒng),正在退;|[。。。"?endl;

return4;

else

couivv”程序已結(jié)束!按任意鍵退出…。yvcmll;

returnI;

/***********文件存在程序入口**************/

for(;;)

cout<v"^****木*功*水*木*木木***木*木”?end卜

coui<v"請(qǐng)選擇:"?endl;

cou(?"1.登錄"vvendlvv”2.注冊(cè)”<<endlvv”3,退出""endl;

coutvv"*******才*水***木**木****“v<end卜

cin?n_select;

cin.clearO;//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignorc(nuincric_liinits<strcamsizc>::max(),'\n');//清空輸入流

if(n_select==1)

for(imi_l=0;i」v=3;i」++)〃登錄

if(mysys.login()==l)

coutw”登陸成功!歡迎您

mysys.outNameO;

break;

I

else

(

cout?"ffl戶名不存在或密碼錯(cuò)誤!"?endl;

)

I

if(i_l==4)

(

coutvvFF法用戶!Zvendk〈”輸入任意鍵退出°Nvendl;

cin?nod1;

return5;

)

break;

)

if(n_select==2)

(

if(mysys.crcatcuscr()==1)//創(chuàng)建用戶

(

coutvv,創(chuàng)建用戶成功。"vvendl;

)

else

(

coutw,創(chuàng)建用戶失敗!"?endl;

if(n_select==3)

return6;

mysys.mymain();

return0;

}

Mysys.epp

#include"mysys.h"

#include"allstruct.h"

#include<iostream>

#inciudc<stdio.h>

#include<limils>〃用于清除殘留輸入流

usingnamespacestd;

in(MSysterm::cheack?!z驗(yàn)虛擬空間是否存在

{

inyfiic=fopcn("tcstI.txt","r");

if(myfile==NULL)

(

return-1;〃返回代表文件不存在

)

fclose(myfile);

return1;

intMSys(erm::myformat()

inti=l;

inyfile=fopcn(ntesiI.txt","\v");

if(myfile==NULL)

{

return-1;

)

s_uscrms_uscr;

ms_user.isuse=O;

s_listms」ist;

ms_list.isuse=O;

s_filcms_file;

ms_tlle.isuse=O;

for(i=1;i<=5;i++)

{

if(fwrite(&ms_user,sizeof(ms_user),l,myfile)!=l)〃用戶區(qū)格式化

{

cout<v”用戶格式信息寫入失??!"vvendl;

fclose(myfile);

return-2;

)

)

for(i=1;i<=50;i++)

if(fwrite(&ms」isi,sizeof(ms」ist)」,myfile)!=l)〃H錄區(qū)格式化

coui<<”目錄格式信息寫入失??!”《endl;

fclose(myfile);

return-3;

)

)

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

(

if(fwrite(&ms_file,sizeof(ms_fne),1,myfile)!=l)〃數(shù)據(jù)區(qū)格式化

{

cout<<“數(shù)據(jù)格式信息寫入失??!”《cndl;

fclose(inyfile);

return-4;

)

)

fclose(myfile);

return1;

I

intMSystenn::createuser()〃創(chuàng)建用戶

{

s_userms_user,ms_user2;

intnowaddress=0,issame=0,m=0,i=1;〃統(tǒng)計(jì)H前掃描指針,密碼比對(duì)標(biāo)志位,循環(huán)使用

變量

coutvv”正在檢驗(yàn)用戶空間是否足夠…?!薄秂ndl;

myfilc=fopcn("tcst1.txt","r");

for(i=1;iv=5;i++,fseek(myfile,44,1),nowaddress++)〃檢驗(yàn)用戶空間是否足夠

(

if(fread(&ms_user2.isuse,4,l尸=0)

(

couiv<”讀取用戶空間失敗,虛擬磁盤格式錯(cuò)誤,可能己被損壞”<vendl;

fclose(myfile);

return-1;

)

if(ms_user2.isuse==0)

{

break;

)

I

if(i==6)

{

cout<<”用戶空間已滿!創(chuàng)建用戶失敗”《endl;

return-2;

)

for(;;)

(

coutvv”請(qǐng)輸入新用戶用戶名:"vvendl;

cin?ms_;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),'\n,'i;//清空輸入流

fseek(myfile,0,0);

for(i=l;iv=5;i++)〃檢驗(yàn)用戶名

if(fread(&ms_user2.isuse,4,1,myfile)==O)〃找到被使用用戶區(qū),下一步讀取名字

(

cout<<,讀取用戶空間失敗,虛擬磁盤格式錯(cuò)誤,可能已被損壞”<<endl;

fck)su(inyfilc);

return-I;

)

if(ms_user2isuse==O)

{

fseek(myfile,44,l);

)

else

{

if(fread(&ms_,20,1,myfile)==O)〃讀取用戶區(qū)名字

(

讀取用戶空間失敗,虛擬磁盤格式錯(cuò)誤.可能已被損壞

"?endl;

fclose(myfile);

return-1;

)

for(m=0;m<=19;m++)

(

if(ms_[m]!=ms_[m])

{

issame=0;

break;

else

issame=I;

if(ms_[m]=='\0')

{

break;

)

I

)

if(issame==I)

(

coutvv"用戶名反復(fù)!請(qǐng)重新輸入:"Wendi;

break;

)

fseek(myfile,24.1);

)

)

if(i>=6)

{

for(;;)〃輸入密碼

(

coutvv,請(qǐng)輸入密碼,最多19位。"?endl;

cin?ms_user.psd;

cin.clearO;//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),,\n');//清空輸入流

cout<<,請(qǐng)?jiān)俅屋斎朊艽a:"?endl;

cin?ms_user2.psd;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numericjimits<streamsize>::max(),,\n');//清空輸入流

for(in=0;m<=19;m++)

{

if(ms_user.psd[m]!=ms_user2.psc[ml)

(

issame=0;

couivv"兩次密碼不匹配"?',?ms_user.psd?,,

"?ms_user2.psd?,r"?m?endl;

break;

)

else

(

issame=1;

if(ms_uscr.psd[m]=='\0')

{

break;

if(issame==1)

(

break;

)

}

cout<<"進(jìn)入存放。。。。"<<cndl;

ms_user.isus?=1;〃空間使用置為使用(1);

ms_user.address=0;〃默認(rèn)不存在目錄

fclose(myfile);

myfile=fopen("test1.txt,\"r+");

fseck(myfHe,48*nowaddrcss,0);

if(fwrite(&ms_user,sizeof(ms_user),I,myfile)==0)

(

cout?,寫入用戶信息失??!"《endl;

}

else

(

break;

)

I

I

fclose(myfile);

return1;

)

intMSysterm::login()〃用戶登錄

(

s_userms_user,ms_user2;

intissamc=0,m=0,i=0;//比較標(biāo)識(shí),循環(huán)使用變量

couivv”請(qǐng)輸入用戶名:"?endl;

cin?ins_;

cin.clear。;〃清除流錯(cuò)誤標(biāo)識(shí)

cin.ignorc(numcric_liinits<strcamsizc>::max(),'\n');//清空輸入流

myfile=fopen("test1.txt","'r");

for(i=1;i<=5;i++)

if(fread(&ms_user2.isuse,4,1,myfile)==0)〃讀取被使用用戶區(qū)

cout<〈”讀取用戶空間失敗,虛擬磁盤格式錯(cuò)誤,可能已被損壞“<<cndl;

fclose(myfile);

return-1;

)

if(nis_user2.isusc==0)

{

fseek(myfile,44,1);

continue;

)

else

{

if(fread(&ms_,20.1.myfile尸=0)〃讀取名字

{

coutv<,讀取用戶空間失敗,虛擬磁盤格式錯(cuò)誤,可能已被損壞"<<endl;

fclose(myfile);

return-I;

)

for(m=0;m<=19;m++)

(

if(ms_[m]!=nis_[m])

{

issame=0;

break;

)

else

issame=I;

if(ms_[ml=='\0')

break;

1

)

}

if(issame==1)

(

if(fread(&ms_user2.psd,20』.myfile)==O)〃讀取密碼

{

COUIVV”讀取密碼失??!磁盤錯(cuò)誤。,'?endl;

fclose(myfile);

return-1;

)

for(intk=0;k<=2;k++)

(

cony〈”請(qǐng)輸入密碼:”〈Vendl;

cin?ms_user.psd;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::maxOAn');//清空輸入流

foi(m=0;m<=19;m++)

(

if(ms_user.psd[m]!=ms_user2.psd[m])

{

issame=0;

break;

else

issamc=1;

if(ms_user.psd[m]==*\0')

{

break;

)

)

I

if(issame==0)

{

couivv"密碼錯(cuò)誤,請(qǐng)重新輸入。"<<end];

I

else

{

if(fread(&ms_user2.address,4,1,myfile)==0)〃讀取目錄地址

{

ccnit<<"讀取目錄失??!磁盤錯(cuò)誤c"〈Vendl;

fclose(inyfile);

return-1;

)

for(m=0;m<=19;m++)〃對(duì)對(duì)象myuser賦值

{

fm]-ms_[m];

myuser.psd[m]=ms_usei2.psd[m];

)

myuser.lisiaddress=ms_user2.address;

myuser.myaddress=(i-1)*48;

fclose(myfile);

return1;〃返回登錄成功

)

fclose(myfile);

return-2;〃密碼錯(cuò)誤

}

fseek(myfile,24,l);

fclose(myfile);

return-1;

voidMSyslerm::mymain()〃主控制程序

intm_point=9,myget=0;〃統(tǒng)計(jì)使用第幾層控制臺(tái),接收函數(shù)返回值

charni_nameI[2()],m_nanic2l20J;

for(;;)

if(m_point==0)

myget=logout();

break;

couivvendlw”**************************************************************

*木木木木*木***木*木****?end卜

cout<<”目前目錄下文件:“<<cndl;

myget=myuser.mydir();

**********"?endl;

coutw"*******今************************?endl:

coutv〈”請(qǐng)輸入您選擇:"v<endl;

coul?"1.查看文件內(nèi)容”vvendl;

cout?"2.新建文件"<<endl;

cout?u3.刪除文件"wendl;

cout?M4.修改文件"<<endl;

cout?,'5.是否鎖定狀態(tài)轉(zhuǎn)換"<vendl;

cout?"0.注銷,退出程序"wendl;

coutw"*******才***********************"<<end卜

cin?m_point;

cin.clcar();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),,\n,);//清空輸入流

switch(m_point)

(

caseI:

if(myuser.listaddress==0)

(

couivv"您還沒有創(chuàng)建文件!"?endl;

break;

)

cout?,請(qǐng)輸入要查看文件名字:(僅限目前目錄)”<<endl;

cin?m_namel;

cin.clear();〃清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),'\n,);//清空輸入流

myget=myuser.viewFile(m_nanie1);

switch(myget)

{

caseI:

{

以)111?”文件查看成功!"<vcndl;

break;

1

case-1:

{

couivv"磁盤打開失??!"?endl;

break;

}

case-2:

{

coutvv”文件不存在!"?endl;

break;

)

default:

(

break;

)

I

break;

}//case1文件打開

case2:

myget=myuser.createFile();

switch(myget)

|

caseI:

{

couivv”創(chuàng)建成功!

break;

1

case-1:

{

couivv"磁盤打開失敗!n?endl;

break;

}

case-2:

{

coutvv"目錄空間已滿!"vvendl;

break;

}

case-3:

{

cout?"數(shù)據(jù)空間已滿!M?endl;

break;

}

case-4:

{

coutvv"文件名已存在!”<vendl;

break;

default:

〃cout<v”創(chuàng)建文件失敗,原因未知!M?endl;

break;

I

)

break;

}//case2新建文件

case3:

(

if(myuser.1istaddrcss-0)

(

couivv"您還沒有創(chuàng)建文件!"?endl;

break;

)

cout?,請(qǐng)輸入要?jiǎng)h除文件名字:(僅限目前目錄)“<vendl;

cin?m_name1;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),,\n');//清空輸入流

myget=myuser.delFile(m_nameI);

switch(myget)

(

case1:

(

couivv"文件刪除成功!n?endl;

break;

case-1:

cout?"磁盤打開失敗!H?endl;

break;

1

case-2:

(

coul<<"文件不存在!"?endl;

break;

}

case-4:

(

coutvv”文件鎖定!不能刪除!"?endl;

break;

}

default:

{

cciit<〈”未知原因,刪除失??!"vvendl;

break;

)

)

break;

}//case3刪除文件

case4:

(

if(myuscr.listaddrcss==0)

{

coinvv”您還沒有創(chuàng)建文件!"?endl;

break;

cout?,請(qǐng)輸入要修改文件名字:(僅限目前目錄)“<<cndl;

cin?m_namel;

cin.clear。;〃清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),'\n,);//清空輸入流

inygcl=myuscr.ruvaiiipFilc(iii_iianic1);

switch(mygel)

(

case1:

{

couivv"文件修改成功!"?endl;

break;

}

case-1:

{

coutvv"磁盤打開失??!"?endl;

break;

1

case-2:

{

cout<<”文件不存在!"?endl;

break;

1

case-4:

{

//coutvv"文件鎖定!無法修改!"?endl;

break;

case-5:

cout<〈”輸入內(nèi)容過多!無法修改!"?endl;

break;

I

default:

{

//coutvv"未知原因,修改失??!"Wendi;

break;

)

I

break;

}//case4修改文件

case5:

|

if(myuser.listaddress==0)

(

cout<<"您還沒有創(chuàng)建文件!M?endl;

break;

)

cout?,請(qǐng)輸入要轉(zhuǎn)換是否鎖定文件名字:(僅限目前目錄)”<<endl;

cin?m_naniel;

cin.clear();〃清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_liinits<streamsize>::max(),'\n');//清空輸入流

inygct=myuser.myConversion(m_namc1);

switch(mygel)

case0:

cout?"文件已轉(zhuǎn)換為鎖定!"?cndl;

break;

)

case1:

(

coui<v"文件已轉(zhuǎn)換為自由讀寫!"vvendl;

break;

}

case-1:

(

coutvv"磁盤打開失敗!"?endl;

break;

}

case-2:

{

ccut<〈"文件不存在!"vvendl;

break;

)

default:

{

COUKV”未知原因,修改失?。 ?lt;vendl;

break;

)

)

break;

}//case5轉(zhuǎn)換是否鎖定狀態(tài)

default:

break;

}//switch

}

)

intMSysteim::logout()〃用戶注銷

{

charword[20]={'O'J;

for(inti=0;i<=19;i++)

(

[i]=word[i];

myuser.psd[i]=word[i];

)

fclose(myfile);

coutvv"已注銷!"?endl;

return1;

)

voidMSyslerm::oulName()//打印登陸后用戶名

(

cout?myuscr.namc?cndl;

)

Myuserfile.cpp

#include<iostream>

#include<stdio.h>

#includc<iomanip>

#include〈limits〉〃用于清除殘留輸入流

#includc"myuserfile.h"

#include"allstruct.h"

usingnamespacestd;

intMUser::createFile()〃增加文件

|

s」ist

s_filems_file;

longnowaddress=0,(address[10],num_char=0;//E錄循環(huán)統(tǒng)計(jì)變量,數(shù)據(jù)塊地址變量

組,字符個(gè)數(shù)(文件大小)

intf_ad_num=0,myerr=0,i=1;〃寫入塊數(shù),是否在最終寫入時(shí)失敗(失敗置1)

charfLname[20]={''},m='0',e='\0',f_islock;

longold_lastaddress=lastaddress;〃上一個(gè)R錄地址(用于犯錯(cuò)回滾)

myfile=fopcn("tcst1.txt","r+");

if(myfile==NULL)

(

coutvv"讀取磁盤失??!,'?endl;

fclose(myfile);

return-1;

I

fseek(myfile,48*5.0);//文件指針跳到目錄區(qū)

for(i=l;i<=50;i++,fseck(myfile,40,l),nowaddress++)〃檢驗(yàn)?zāi)夸浛臻g是否足夠

(

if(fread(&ms」ist.isuse4Lmyfile)==0)〃讀取是否使用

{

cout<<”讀取目錄空間失敗,虛擬磁盤格式錯(cuò)誤,可能已被損壞“<<cndl;

fclose(mytile);

return-1;

if(ms」ist.isuse==O)〃假如讀取到未使用則跳出檢測(cè)

{

break;

}

I

if(i==51)

|

cout?n目錄空間已滿!創(chuàng)建文件失敗"<<endl;

fclose(myfile);

return-2;

1

上eek(myfile,48*5+44*50,0);〃文件指針跳到數(shù)據(jù)區(qū)

fo「(i=l;iv=200;i++1seek(myfile,260,l))〃檢驗(yàn)數(shù)據(jù)空間是否足夠(初步檢驗(yàn))

{

if(fread(&ms_fi1e.isiiqe,4,l,myfi1e)==0)〃讀取是否使用

(

COUIVV”讀取數(shù)據(jù)空間失敗,虛擬磁盤格式錯(cuò)誤,可能已被損壞“vvendl;

fclose(myfile);

return-1;

)

if(ms_file.isuse==0)〃假如有空白數(shù)據(jù)塊則跳出

{

break;

)

I

if(i==201)

cout<<“數(shù)據(jù)空間已滿!創(chuàng)建文件失敗"<<cndl;

tclose(myfile);

return-2;

}

coutw”請(qǐng)輸入文件名(字母和數(shù)字,最多19個(gè)字符):"vvendl;

cin?Lname;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_liniits<streainsize>::max(),'\n');//清空輸入流

fseek(myfile,48*5,0);〃文件指針跳到目錄區(qū)

for(i=l;iv=50;i++)〃檢驗(yàn)文件名是否被使用

{

if(fread(&ms_Hs[,sizeof(ms」ist)」,myfile)==0)〃讀取目錄

{

coutvv”讀取目錄空間失敗,虛擬磁盤格式錯(cuò)誤,可能已被損壞“Wendi;

fclose(myfilc):

return-1;

I

if(msjist.isuse=1)〃假如讀取到未使用則跳出檢測(cè)

(

if(isSame(Lname,ms_)==I)

(

fclose(myfile);

return-4;

for(;;)

coutw"文件由多少個(gè)字符m組成?(必需小于2550個(gè)字符)"wendl;

cin?nuni_char;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_limits<streamsize>::max(),'\n,);//清空輸入流

if(num_char<=2550)

{

break;

)

couivv”文件長(zhǎng)度必需小于2550個(gè)字符?!?lt;<endl;

)

ms_list.pointsize=num_char;

coutw”文件是否鎖定?y鎖定/n(或其它)自由讀寫"wendl;〃確定是否鎖定

cin?Lislock;

cin.clear();//清除流錯(cuò)誤標(biāo)識(shí)

cin.ignore(numeric_]imits<streainsize>::max(),'\n');//清空輸入流

if(f_islock==y||Uslock==,Y')

{

msjist.isfile=0;

}

else

msjist.isfile=1;

fseek(myfile,48*5+44*50,0);〃文件指針跳到數(shù)據(jù)區(qū)

for(i=0;i<=199&&f_ad_num<=(num_char/255);i++,fseek(inyfile,260,l))〃檢驗(yàn)數(shù)據(jù)空

間是否足夠

{

if(fread(&ms_file.isuse,4,1,myfile)==O)

{

cout<〈”讀取數(shù)據(jù)空間失敗,虛擬磁盤格式錯(cuò)誤,可能已被損壞”《endl;

fclose(inyfile);

return-I;

}

if(ms_file.isuse-0)〃假如有空白區(qū)塊

(

f_address[f_ad_num]=i*264+48*5+44*50;〃統(tǒng)計(jì)下目前空白區(qū)塊絕對(duì)物理地址

f_ad_num++;〃先用后加

)

)

if(f_ad_num<=(num_char/255))〃空白地址不足

{

coutvv"沒有足夠磁盤空間,創(chuàng)建失??!"?endl;

fclose(niyfilc);

return-3;

)

ms_file.isuse=1;

inik=(V/for循環(huán)變量

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

if(i<(f_ad_num-1))〃對(duì)下個(gè)數(shù)據(jù)塊進(jìn)行鏈接

rns_file.next=Caddress[i+1];

else

ms_file.next=0;

fseek(myfne,fladdress[i],O);〃跳轉(zhuǎn)到空白數(shù)據(jù)塊

if(num_char>255)〃數(shù)據(jù)太多,一個(gè)區(qū)塊放不了

if(fwrite(&ms_file.isuse,4,l,niyfile)==())〃寫入已被使用

coutvv'數(shù)據(jù)模塊寫入isuse失敗"《endl;

mycrr=1;

for(k=1;k<=255;k++)〃寫入數(shù)據(jù)

if(fwrite(&m,1,1,myfile)==0)

coutvv"數(shù)據(jù)模塊寫入內(nèi)容失敗"vvendl;

myerr=1;

if(fwrite(&e,1,1,myfile)==0)//寫入結(jié)束符

cout?,數(shù)據(jù)模塊寫入結(jié)束符失敗”《cndl;

myerr=1;

if(fwritc(&nis_filc.ncxt,4,1jnyfilc)==0)〃寫入F個(gè)數(shù)據(jù)塊地址

coutvv'數(shù)據(jù)模塊寫入next失敗"vvendl;

myerr=1;

)

num_char-=255;

)

else//數(shù)據(jù)小于一個(gè)區(qū)塊大小

(

if(fwrite(&ms_file.isuse,4,l,myfile)==0)〃區(qū)塊置為己使用

(

cout?'數(shù)據(jù)模塊寫入isusc失敗"<<endl;

myerr=1;

)

for(k=1;k<=num_char;k++)

(

if(fwrite(&in,I,I,myfile)==0)

(

cout<<”數(shù)據(jù)模塊寫入內(nèi)容失敗”《endl;

myerr=1;

}

)

for(k=l;k<=(256-num_char);k++)〃寫入數(shù)據(jù)

{

if(fwrite(&e,l,l,myfile)==0)

coutvv”數(shù)據(jù)模塊寫入結(jié)束符失敗"<<endl;

niyerr=1;

)

if(fwrite(&ms_file.next,4,l,myfile)==0)〃寫入下個(gè)文件鏈接地址,就是寫入0

(

COUIVV,數(shù)據(jù)模塊寫入ncxl失敗,yvcndl;

myerr=I;

)

}〃判定是否最終一個(gè)數(shù)據(jù)塊結(jié)束

}〃數(shù)據(jù)塊寫入結(jié)束

〃開始寫入目錄區(qū)

ms」ist.isuse=1;

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

(

[i]=Lname[i];

I

ms_list.niyaddress=nowaddress*44+48*5;〃計(jì)算出地址

ms_list.pointaddress=f_address[0];〃賦值首個(gè)文件塊池址

msjist.nextaddress=0;〃因?yàn)?/p>

if(lastaddress==0)〃被寫入目錄是首目錄

{

fseek(myfile,msJist.rnyaddress,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論