版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年中醫(yī)藥學(xué)專家中藥藥理學(xué)研究新進(jìn)展考點(diǎn)題
- 上消化道腫瘤患者的護(hù)理
- 外陰損傷課件
- 2026年贛州職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試模擬試題含詳細(xì)答案解析
- 2026年上海杉達(dá)學(xué)院?jiǎn)握芯C合素質(zhì)考試參考題庫含詳細(xì)答案解析
- 眼外傷的緊急處理
- 2026年牡丹江大學(xué)高職單招職業(yè)適應(yīng)性測(cè)試模擬試題及答案詳細(xì)解析
- 2026年濰坊工商職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考試題及答案詳細(xì)解析
- 2026年鄭州電力高等??茖W(xué)校單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026年山西體育職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試備考題庫含詳細(xì)答案解析
- 公共衛(wèi)生間洗清消毒制度
- 2025-2026學(xué)年河北省保定市蓮池區(qū)九年級(jí)(上)期末化學(xué)試卷(含答案)
- 2026年廣州中考物理創(chuàng)新題型特訓(xùn)試卷(附答案可下載)
- 值班人員在崗情況檢查記錄表周一
- 西充縣山永家庭農(nóng)場(chǎng)生豬養(yǎng)殖項(xiàng)目(擴(kuò)建)環(huán)評(píng)報(bào)告
- 赤峰南臺(tái)子金礦有限公司金礦2022年度礦山地質(zhì)環(huán)境治理計(jì)劃書
- 徐州市銅山區(qū)法院系統(tǒng)書記員招聘考試真題
- 氣穴現(xiàn)象和液壓沖擊
- GB/T 33598.3-2021車用動(dòng)力電池回收利用再生利用第3部分:放電規(guī)范
- 江蘇省泰州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- 文言文入門課課件
評(píng)論
0/150
提交評(píng)論