




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
千里之行,始于足下讓知識(shí)帶有溫度。第第2頁/共2頁精品文檔推薦計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)
班級:計(jì)091-1
姓名:
學(xué)號:
使用語言:C++
指導(dǎo)教師:
學(xué)院:
一、系統(tǒng)要求
1、試驗(yàn)?zāi)康?/p>
通過一個(gè)容易多用戶文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn)。
2、試驗(yàn)內(nèi)容
為linux系統(tǒng)設(shè)計(jì)一個(gè)容易的二級文件系統(tǒng)。要求做到以下幾點(diǎn):
(1)可以實(shí)現(xiàn)下列幾條命令(至少4條);
login用戶登陸
dir列文件名目
create創(chuàng)建文件
delete刪除文件
open打開文件
close關(guān)閉文件
read讀文件
write寫文件
(2)列名目時(shí)要列出文件名、物理地址、庇護(hù)碼和文件長度;
(3)源文件可以舉行讀寫庇護(hù)。
二、系統(tǒng)分析
1、設(shè)計(jì)思想
本文件為二級文件系統(tǒng),即要實(shí)現(xiàn)對文件的增刪改查,同時(shí)又具備登陸系統(tǒng)、注冊用戶的功能,各個(gè)用戶之間的文件系統(tǒng)互不干擾。
本文件系統(tǒng)采納兩級名目,其中第一級對應(yīng)于用戶賬號,其次級對應(yīng)于用戶帳號下的文件。另外,為了簡便文件系統(tǒng)未考慮文件分享,文件系統(tǒng)平安以及管道文件與設(shè)備文件等特別內(nèi)容。
系統(tǒng)采納結(jié)構(gòu)體來存儲(chǔ)用戶、文件名目、文件數(shù)據(jù)內(nèi)容:
048*548*5+44*5048*5+44*50+264*200
每個(gè)分區(qū)都是由結(jié)構(gòu)體組成,每個(gè)個(gè)去的結(jié)構(gòu)體的個(gè)數(shù)由格式化系統(tǒng)是打算。囫圇系統(tǒng)的編碼構(gòu)成主要分為:
Allstruct.h定義了每個(gè)分區(qū)的結(jié)構(gòu)體;
Mysys.h聲明白對系統(tǒng)操作的各種辦法;
Myuserfile.h聲明白對文件操作的各種辦法;
Mymain.cpp囫圇系統(tǒng)的主函數(shù),操作入口;
Mysys.cpp包含了mysys.h,實(shí)現(xiàn)了操作系統(tǒng)的各種辦法;Myuserfile.cpp包含了myuserfile.h,實(shí)現(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;//目標(biāo)文件的大小
longnextaddress;//下條名目的地址
};
structs_file//文件結(jié)構(gòu)體
{
longisuse;//是否使用
charcontent[256];//文件內(nèi)容
longnext;//下個(gè)文件塊地址
};
三、系統(tǒng)執(zhí)行
1、假如首次進(jìn)入系統(tǒng),還沒有文件系統(tǒng),則會(huì)提醒格式化文件系統(tǒng),創(chuàng)建分區(qū),
并初始化分區(qū):
2、剛初始化后,沒實(shí)用戶,提醒創(chuàng)建用戶:
3、用戶創(chuàng)建勝利后浮現(xiàn)對系統(tǒng)操作的菜單
4、注冊用戶功能:
5、用戶登錄,登錄勝利后顯示當(dāng)前用戶下的全部文件及其具體信息,同時(shí)顯示
對文件操作的菜單:
6、新注冊的用戶默認(rèn)為沒有文件,挑選創(chuàng)建文件,并且每次對文件操作后顯示
當(dāng)前用戶的全部文件和操作菜單:
7、此次新建的文件為鎖定狀態(tài),不能被刪除:
8、對文件查看,默認(rèn)創(chuàng)建的時(shí)候用0填充文件內(nèi)容:
9、修改文件內(nèi)容:
10、對文件的鎖定舉行裝換:
11、刪除文件:
12、注銷登錄退出系統(tǒng):
四、功能實(shí)現(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;//最后一個(gè)名目的地址
//成員函數(shù)
public:
intcreateFile();//增強(qiáng)文件
intdelFile(charfilename[20]);//刪除文件
intrevampFile(charfilename[20]);//修改文件
intmydir();//列出當(dāng)前名目的全部文件(夾)
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();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(nod1=='Y'||nod1=='y')
{
cout>nod1;
return2;
}
cout>nod1;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(nod1=='Y'||nod1=='y')
{
if(mysys.createuser()==1)//創(chuàng)建用戶
{
cout>n_select;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
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();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
fseek(myfile,0,0);
for(i=1;i=6)
{
for(;;)//輸入密碼
{
cout>ms_user.psd;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
cout>ms_user2.psd;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
for(m=0;m>ms_;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myfile=fopen("test1.txt","r");
for(i=1;i>ms_user.psd;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
for(m=0;m>m_point;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
switch(m_point)
{
case1:
{
if(myuser.listaddress==0)
{
cout>m_name1;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myget=myuser.viewFile(m_name1);
switch(myget)
{
case1:
{
cout>m_name1;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myget=myuser.delFile(m_name1);
switch(myget)
{
case1:
{
cout>m_name1;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
myget=myuser.revampFile(m_name1);
switch(myget)
{
case1:
{
cout>m_name1;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
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()//增強(qiáng)文件
{
s_listms_list;
s_filems_file;
longnowaddress=0,f_address[10],num_char=0;//名目循環(huán)記錄變量,數(shù)據(jù)塊地址變量組,字符個(gè)數(shù)(文件大?。?/p>
intf_ad_num=0,myerr=0,i=1;//寫入的塊數(shù),是否在終于寫入時(shí)失?。ㄊ≈?)charf_name[20]={''},m='0',e='\0',f_islock;
longold_lastaddress=lastaddress;//上一個(gè)名目地址(用于出錯(cuò)回滾)
myfile=fopen("test1.txt","r+");
if(myfile==NULL)
{
cout>f_name;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
fseek(myfile,48*5,0);//文件指針跳到名目區(qū)
for(i=1;i>num_char;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
cin.ignore(numeric_limits::max(),'\n');//清空輸入流
if(num_char>f_islock;
cin.clear();//清除流的錯(cuò)誤標(biāo)記
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ù)太多,一個(gè)區(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()//列出當(dāng)前名目的全部文件(夾)
{
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;//為進(jìn)入循環(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++)
{
//僅僅只為計(jì)數(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])//比較兩個(gè)文件名是否相同{
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)容里面會(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年份四月裝修合同門檻石與地暖伸縮縫處理?xiàng)l款
- 教師個(gè)人教育教學(xué)總結(jié)
- 初中物理教研組期末工作總結(jié)
- 分布式光伏發(fā)電項(xiàng)目EPC合同
- 2025人工智能技術(shù)外包服務(wù)合同范本
- 跟著學(xué)管理課件
- 初五迎財(cái)神課件
- 業(yè)務(wù)咨詢類合同標(biāo)準(zhǔn)文本
- 低價(jià)轉(zhuǎn)讓電車合同范例
- 2003漯河購房合同標(biāo)準(zhǔn)文本
- 【+初中語文+】《山地回憶》課件+統(tǒng)編版語文七年級下冊
- 五年級英語下冊 Unit 3 My school calendar Part B第二課時(shí)教學(xué)實(shí)錄 人教PEP
- 2025-2030中國建筑裝飾行業(yè)十四五發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃研究報(bào)告
- 2025-2030中國奶牛智能項(xiàng)圈標(biāo)簽行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析研究報(bào)告
- (一模)2025年廣東省高三高考模擬測試 (一) 語文試卷語文試卷(含官方答案)
- 9.3-撒哈拉以南非洲 第2課時(shí)課件 七年級地理下冊 人教版
- 2024年浙江省中考英語試題卷(含答案解析)
- 中醫(yī)內(nèi)科學(xué)智慧樹知到答案2024年浙江中醫(yī)藥大學(xué)
- PEP人教版英語五年級下冊 Unit 2 My favourite season大單元作業(yè)設(shè)計(jì)
- 8.6《林黛玉進(jìn)賈府》課本劇劇本
- 發(fā)電機(jī)整體氣密試驗(yàn)的要求
評論
0/150
提交評論