版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
千里之行,始于足下讓知識帶有溫度。第第2頁/共2頁精品文檔推薦計算機操作系統(tǒng)課程設(shè)計計算機操作系統(tǒng)課程設(shè)計
班級:計091-1
姓名:
學號:
使用語言:C++
指導(dǎo)教師:
學院:
一、系統(tǒng)要求
1、試驗?zāi)康?/p>
通過一個容易多用戶文件系統(tǒng)的設(shè)計,加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實現(xiàn)。
2、試驗內(nèi)容
為linux系統(tǒng)設(shè)計一個容易的二級文件系統(tǒng)。要求做到以下幾點:
(1)可以實現(xiàn)下列幾條命令(至少4條);
login用戶登陸
dir列文件名目
create創(chuàng)建文件
delete刪除文件
open打開文件
close關(guān)閉文件
read讀文件
write寫文件
(2)列名目時要列出文件名、物理地址、庇護碼和文件長度;
(3)源文件可以舉行讀寫庇護。
二、系統(tǒng)分析
1、設(shè)計思想
本文件為二級文件系統(tǒng),即要實現(xiàn)對文件的增刪改查,同時又具備登陸系統(tǒng)、注冊用戶的功能,各個用戶之間的文件系統(tǒng)互不干擾。
本文件系統(tǒng)采納兩級名目,其中第一級對應(yīng)于用戶賬號,其次級對應(yīng)于用戶帳號下的文件。另外,為了簡便文件系統(tǒng)未考慮文件分享,文件系統(tǒng)平安以及管道文件與設(shè)備文件等特別內(nèi)容。
系統(tǒng)采納結(jié)構(gòu)體來存儲用戶、文件名目、文件數(shù)據(jù)內(nèi)容:
048*548*5+44*5048*5+44*50+264*200
每個分區(qū)都是由結(jié)構(gòu)體組成,每個個去的結(jié)構(gòu)體的個數(shù)由格式化系統(tǒng)是打算。囫圇系統(tǒng)的編碼構(gòu)成主要分為:
Allstruct.h定義了每個分區(qū)的結(jié)構(gòu)體;
Mysys.h聲明白對系統(tǒng)操作的各種辦法;
Myuserfile.h聲明白對文件操作的各種辦法;
Mymain.cpp囫圇系統(tǒng)的主函數(shù),操作入口;
Mysys.cpp包含了mysys.h,實現(xiàn)了操作系統(tǒng)的各種辦法;Myuserfile.cpp包含了myuserfile.h,實現(xiàn)了操作文件的各種辦法;
2、主要數(shù)據(jù)結(jié)構(gòu)
Allstruct.h文件的內(nèi)容:
structs_user//用戶區(qū)結(jié)構(gòu)體
{
longisuse;//是否使用
charname[20];//用戶名
charpsd[20];//密碼
longaddress;//名目地址
};
structs_list//名目結(jié)構(gòu)體
{
longisuse;//是否使用
charname[20];//文件名字
longmyaddress;//本條名目地址
longpointaddress;//指向的文件的地址
longisfile;//是否鎖定
longpointsize;//目標文件的大小
longnextaddress;//下條名目的地址
};
structs_file//文件結(jié)構(gòu)體
{
longisuse;//是否使用
charcontent[256];//文件內(nèi)容
longnext;//下個文件塊地址
};
三、系統(tǒng)執(zhí)行
1、假如首次進入系統(tǒng),還沒有文件系統(tǒng),則會提醒格式化文件系統(tǒng),創(chuàng)建分區(qū),
并初始化分區(qū):
2、剛初始化后,沒實用戶,提醒創(chuàng)建用戶:
3、用戶創(chuàng)建勝利后浮現(xiàn)對系統(tǒng)操作的菜單
4、注冊用戶功能:
5、用戶登錄,登錄勝利后顯示當前用戶下的全部文件及其具體信息,同時顯示
對文件操作的菜單:
6、新注冊的用戶默認為沒有文件,挑選創(chuàng)建文件,并且每次對文件操作后顯示
當前用戶的全部文件和操作菜單:
7、此次新建的文件為鎖定狀態(tài),不能被刪除:
8、對文件查看,默認創(chuàng)建的時候用0填充文件內(nèi)容:
9、修改文件內(nèi)容:
10、對文件的鎖定舉行裝換:
11、刪除文件:
12、注銷登錄退出系統(tǒng):
四、功能實現(xiàn)
Mysys.h
#include
#include"myuserfile.h"
classMSysterm
{//封裝了管理系統(tǒng)的辦法//成員變量
private:
FILE*myfile;
MUsermyuser;
//成員函數(shù)
public:
MSysterm(){}
voidoutName();//打印登陸后的用戶名
intcheack();//檢查虛擬文件系統(tǒng)跟是否存在intmyformat();//初始化虛擬磁盤
intcreateuser();//創(chuàng)建用戶
intlogin();//用戶登錄
voidmymain();//主控制程序
intlogout();//用戶注銷
};
Myuserfile.h
#include
classMUser//封裝了管理文件的辦法
{
//成員變量
public:
FILE*myfile;
charname[20];//用戶名
charpsd[20];//密碼
longlistaddress;//名目地址
longmyaddress;//此用戶的地址
private:
longlastaddress;//最后一個名目的地址
//成員函數(shù)
public:
intcreateFile();//增強文件
intdelFile(charfilename[20]);//刪除文件
intrevampFile(charfilename[20]);//修改文件
intmydir();//列出當前名目的全部文件(夾)
intviewFile(charfilename[20]);//查看文件
intmyConversion(charfilename[20]);//轉(zhuǎn)換是否鎖定狀態(tài)
private:
intisSame(charfilename_f[20],charfilename_s[20]);
};
Mymain.cpp
#include
#include
#include"mysys.h"
#include
usingnamespacestd;
intmain()
{
charnod1;
intn_select=2,i_1=0;
MSystermmysys;
/***********文件不存在的程序入口************/
if(mysys.cheack()==-1)//磁盤空間不存在
{
cout>nod1;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(nod1=='Y'||nod1=='y')
{
cout>nod1;
return2;
}
cout>nod1;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(nod1=='Y'||nod1=='y')
{
if(mysys.createuser()==1)//創(chuàng)建用戶
{
cout>n_select;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(n_select==1)
{
for(inti_1=0;i_1>nod1;
return5;
}
break;
}
if(n_select==2)
{
if(mysys.createuser()==1)//創(chuàng)建用戶
{
cout
#include
#include//用于清除殘留的輸入流
usingnamespacestd;
intMSysterm::cheack()//檢查虛擬空間是否存在{
myfile=fopen("test1.txt","r");
if(myfile==NULL)
{
return-1;//返回-1,代表文件不存在}
fclose(myfile);
return1;
}
intMSysterm::myformat()
{
inti=1;
myfile=fopen("test1.txt","w");
if(myfile==NULL)
{
return-1;
}
s_userms_user;
ms_user.isuse=0;
s_listms_list;
ms_list.isuse=0;
s_filems_file;
ms_file.isuse=0;
for(i=1;i>ms_;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
fseek(myfile,0,0);
for(i=1;i=6)
{
for(;;)//輸入密碼
{
cout>ms_user.psd;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
cout>ms_user2.psd;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
for(m=0;m>ms_;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myfile=fopen("test1.txt","r");
for(i=1;i>ms_user.psd;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
for(m=0;m>m_point;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
switch(m_point)
{
case1:
{
if(myuser.listaddress==0)
{
cout>m_name1;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myget=myuser.viewFile(m_name1);
switch(myget)
{
case1:
{
cout>m_name1;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myget=myuser.delFile(m_name1);
switch(myget)
{
case1:
{
cout>m_name1;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myget=myuser.revampFile(m_name1);
switch(myget)
{
case1:
{
cout>m_name1;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myget=myuser.myConversion(m_name1);
switch(myget)
{
case0:
{
cout
#include
#include
#include//用于清除殘留的輸入流
#include"myuserfile.h"
#include"allstruct.h"
usingnamespacestd;
intMUser::createFile()//增強文件
{
s_listms_list;
s_filems_file;
longnowaddress=0,f_address[10],num_char=0;//名目循環(huán)記錄變量,數(shù)據(jù)塊地址變量組,字符個數(shù)(文件大小)
intf_ad_num=0,myerr=0,i=1;//寫入的塊數(shù),是否在終于寫入時失?。ㄊ≈?)charf_name[20]={''},m='0',e='\0',f_islock;
longold_lastaddress=lastaddress;//上一個名目地址(用于出錯回滾)
myfile=fopen("test1.txt","r+");
if(myfile==NULL)
{
cout>f_name;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
fseek(myfile,48*5,0);//文件指針跳到名目區(qū)
for(i=1;i>num_char;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(num_char>f_islock;
cin.clear();//清除流的錯誤標記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(f_islock=='y'||f_islock=='Y')
{
ms_list.isfile=0;
}
else
{
ms_list.isfile=1;
}
fseek(myfile,48*5+44*50,0);//文件指針跳到數(shù)據(jù)區(qū)
for(i=0;i255)//數(shù)據(jù)太多,一個區(qū)塊放不了
{
if(fwrite(
myerr=1;
}
for(k=1;k>s;
for(x=0;x<100;x++)
{
if(s[x]==0)
{
break;
}
}
if(ms_list.pointsize<x)
return-5;
if(fwrite(
return-4;
}
fclose(myfile);
}
}
if(isfind==0)//找不到指定的文件
{
fclose(myfile);
return-2;
}
return1;
}
intMUser::mydir()//列出當前名目的全部文件(夾)
{
inti=0;
s_listms_list;
if(listaddress==0)
{
lastaddress=0;
cout<<"此用戶沒有創(chuàng)建文件,名目為空!"<<endl;
return0;
}
else
{
cout<<"文件名\t\t\t大小\t是否鎖定\t物理地址"<<endl;
}
myfile=fopen("test1.txt","r");
if(myfile==NULL)
{
cout<<"讀取磁盤失敗!"<<endl;
return-1;
}
ms_list.nextaddress=listaddress;//為進入循環(huán)做預(yù)備
fseek(myfile,48*5,0);
for(;ms_list.nextaddress!=0;)//循環(huán)讀取名目
{
lastaddress=ms_list.nextaddress;
fseek(myfile,ms_list.nextaddress,0);
if(fread(
fclose(myfile);
return-2;
}
for(i=0;ms_[i]!='\0'i++)
{
//僅僅只為計數(shù),便利規(guī)范輸出
}
if(i<=7)//規(guī)范輸出
{
cout<<ms_<<"\t\t\t"<<ms_list.pointsize;
}
else
{
if(i<=15)
{
cout<<ms_<<"\t\t"<<ms_list.pointsize;
}
{
cout<<ms_<<"\t"<<ms_list.pointsize;
}
}
if(ms_list.isfile==1)//是否鎖定
{
cout<<"\tN\t\t"<<ms_list.pointaddress<<endl;
}
else
{
cout<<"\tY\t\t"<<ms_list.pointaddress<<endl;
}
}
fclose(myfile);
return1;
}
intMUser::viewFile(charfilename[20])//查看文件
{
s_listms_list;
s_filems_file;
intisfind=0;
myfile=fopen("test1.txt","r");
if(myfile==NULL)
{
cout<<"讀取磁盤失敗!"<<endl;
return-1;
}
ms_list.nextaddress=listaddress;
for(;ms_list.nextaddress!=0;)
{
fseek(myfile,ms_list.nextaddress,0);
if(fread(
fclose(myfile);
return-2;
}
if(isSame(ms_,filename)==1)
{
isfind=1;
break;
}
}
if(isfind==0)//沒有找到文件
{
fclose(myfile);
return-2;
}
ms_file.next=ms_list.pointaddress;//循環(huán)預(yù)備
for(;ms_file.next!=0;)
{
fseek(myfile,ms_file.next,0);
if(fread(
return-4;
}
cout<<ms_file.content;
}
cout<<endl;
fclose(myfile);
return1;
}
intMUser::isSame(charfilename_f[20],charfilename_s[20])//比較兩個文件名是否相同{
for(inti=0;i<=19;i++)
{
if(filename_f[i]!=filename_s[i])
{
return0;
}
if(filename_f[i]=='\0')
{
return1;
}
}
return1;//相同
}
intMUser::myConversion(charfilename[20])//轉(zhuǎn)換是否鎖定狀態(tài)
{
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版門面裝修工程后期維護服務(wù)合同范本文檔4篇
- 二零二五年長途客運車輛承包管理服務(wù)協(xié)議書3篇
- 煤礦手動葫蘆使用管理規(guī)定、操作規(guī)程
- 2025年度淘寶平臺商家供應(yīng)鏈金融合作合同范本
- 船舶安全管理的科技創(chuàng)新與發(fā)展趨勢
- 二零二五年度酒店餐飲部菜品創(chuàng)新研發(fā)合作協(xié)議3篇
- 區(qū)二手房交易合同2025版6篇
- 2025年度個人房產(chǎn)交易擔保協(xié)議參考4篇
- 2025年度航空航天材料委托加工合同樣本4篇
- 二零二五年度床上用品電商平臺用戶行為研究合同4篇
- 2025年度土地經(jīng)營權(quán)流轉(zhuǎn)合同補充條款范本
- 南通市2025屆高三第一次調(diào)研測試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數(shù)學一模試卷
- 2025中國人民保險集團校園招聘高頻重點提升(共500題)附帶答案詳解
- 0的認識和加、減法(說課稿)-2024-2025學年一年級上冊數(shù)學人教版(2024)001
- 重癥患者家屬溝通管理制度
- 醫(yī)院安全生產(chǎn)治本攻堅三年行動實施方案
- 法規(guī)解讀丨2024新版《突發(fā)事件應(yīng)對法》及其應(yīng)用案例
- 工程項目合作備忘錄范本
- 信息安全意識培訓(xùn)課件
- Python試題庫(附參考答案)
評論
0/150
提交評論