版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)系綜合性實(shí)驗(yàn)
實(shí)驗(yàn)報(bào)告
課程名稱________操作系統(tǒng)實(shí)驗(yàn)報(bào)告________________
實(shí)驗(yàn)學(xué)期至年第一學(xué)期
學(xué)生所在系部計(jì)算機(jī)與信息管理系
年級(jí)專業(yè)班級(jí)計(jì)算機(jī)102
學(xué)生姓名王強(qiáng)黃新潮張蒙
學(xué)號(hào)110300821103007011030077
任課教師______________陸麗娜
實(shí)驗(yàn)成績(jī)..........................................
計(jì)算機(jī)系制
一種簡(jiǎn)樸文獻(xiàn)系統(tǒng)詳細(xì)設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)?/p>
(1)閱讀并調(diào)試一種簡(jiǎn)樸文獻(xiàn)系統(tǒng),模仿文獻(xiàn)管理工作過(guò)程。從而對(duì)各種文獻(xiàn)操作命
令實(shí)質(zhì)內(nèi)容和執(zhí)行過(guò)程有比較進(jìn)一步埋解。
(2)理解設(shè)計(jì)一種n個(gè)顧客文獻(xiàn)系統(tǒng),每個(gè)顧客可以保存M個(gè)文獻(xiàn)。顧客在一次運(yùn)營(yíng)
中只能打開(kāi)一種文獻(xiàn),對(duì)文獻(xiàn)必要設(shè)立保護(hù)辦法,且至少有create、deleteopen、close、read、
write等命令。
二、實(shí)驗(yàn)規(guī)定
1、依照流程圖閱讀所給文獻(xiàn)系統(tǒng)源程序,并對(duì)源程序加以注釋(注釋量達(dá)70%以上)。
2、修改、完善該系統(tǒng),指出程序bug。
三、文獻(xiàn)系統(tǒng)功能設(shè)計(jì)
1.功能設(shè)計(jì)
該文獻(xiàn)系統(tǒng)是一種多頤客、多仟?jiǎng)?wù)文獻(xiàn)系統(tǒng)。對(duì)顧客和顧客文獻(xiàn)數(shù)目并沒(méi)有上眼。也就
是說(shuō)該系統(tǒng)容許任何顧客申請(qǐng)空間,并且在其目錄下文獻(xiàn)數(shù)目并不做任何限制。
該系統(tǒng)可以支持操作命令如下:
①bye—顧客注銷命令。當(dāng)使用該命令時(shí),顧客退出系統(tǒng),注銷該顧客功能設(shè)計(jì)并回
到登陸界面。
命令格式:bye
②close——?jiǎng)h除顧客注冊(cè)信息命令。執(zhí)行該命令后,顧客在系統(tǒng)中所有信息,涉及該
顧客目錄下所有文獻(xiàn)都被刑除。命令執(zhí)行完畢后返回登陸界面。
命令格式:close
③create——在當(dāng)前目錄下創(chuàng)立一種文獻(xiàn),且該文獻(xiàn)不能跟當(dāng)前已有文獻(xiàn)重名。該文獻(xiàn)
管理信息登記在顧客文獻(xiàn)信息管理模塊中。執(zhí)行完該命令后回到執(zhí)行命令行。
命令格式:creatofilel
其中:符為提示符,fiiel為要?jiǎng)?chuàng)立文獻(xiàn)名。
④delete——?jiǎng)h除當(dāng)前顧客目錄下一種文獻(xiàn),命令執(zhí)行完畢返回至命令行。
命令格式:dclctofilcl
其中:fiiel為要?jiǎng)h除文獻(xiàn)名。
⑤底1一顯示當(dāng)前注冊(cè)目錄下所有文獻(xiàn)信息,涉及文獻(xiàn)名、文獻(xiàn)長(zhǎng)度、文獻(xiàn)操作權(quán)限。
命令格式:list
⑥chmod——變化某個(gè)文獻(xiàn)執(zhí)行權(quán)限,但前提是該文獻(xiàn)是該顧客目錄下文獻(xiàn)。
命令格式:chmod>fi)clo
其中:fiiel為要授權(quán)文獻(xiàn)名。
⑦open-----在window界面下打開(kāi)某個(gè)文獻(xiàn)。執(zhí)行該命令后,文獻(xiàn)fiiel將用在windows
界面下文獻(xiàn)形式打開(kāi)。顧客可以在這個(gè)方式中對(duì)文獻(xiàn)進(jìn)行修改,并將修改后內(nèi)容保存。
命令格式:open>filel
其中:fiiel為要打開(kāi)文獻(xiàn)名。
⑧read——讀文獻(xiàn)信息。將文獻(xiàn)信息讀入并顯示在終端上。
命令格式:read>fiiel
其中:fiiel為要讀文獻(xiàn)名。
⑨write——向某個(gè)文獻(xiàn)寫入新信息。顧客可以選取用覆蓋本來(lái)內(nèi)容方式或和在文獻(xiàn)末
尾追加新信息方式寫入信息。當(dāng)要退出時(shí)輸入即可。
(2)系統(tǒng)采用二級(jí)文獻(xiàn)目錄。設(shè)立主目錄(MFD)和顧客文獻(xiàn)目錄(UFD),分別以文
獻(xiàn)方式保存在磁盤中。在主目錄中有注冊(cè)顧客顧客名和另一標(biāo)志該顧客目錄下與否有文獻(xiàn)指
針標(biāo)記。顧客文獻(xiàn)目錄采用顧客名作為文獻(xiàn)名保存于磁盤,以便檢索時(shí)以便相應(yīng)。在顧客文
獻(xiàn)目錄中保存著該目錄卜.所有文獻(xiàn)文獻(xiàn)名稱、保護(hù)碼、文獻(xiàn)長(zhǎng)度。
(3)該系統(tǒng)大量使用高檔語(yǔ)言中文獻(xiàn)操作函數(shù),因此能實(shí)際看到文獻(xiàn)創(chuàng)立、寫入、讀
出、刪除等效果。
2.功能設(shè)計(jì)實(shí)現(xiàn)總體流程
員,filename,safecodejength,分別用于存儲(chǔ)顧客文獻(xiàn)名字.文獻(xiàn)保護(hù)碼,文獻(xiàn)長(zhǎng)度,*cuifile=
NULL;,這是一種構(gòu)造體類型指針,開(kāi)始初始化為NULL.
structMFD
{//主文獻(xiàn)模塊
charusername[32];〃存儲(chǔ)顧客名
boolfilepoint;
〃顧客目錄下文獻(xiàn)指針,false表達(dá)目錄為空,true為該顧客目錄中有文獻(xiàn)
}*curuser=NULL,*elscuser=NULL;
這個(gè)是主文獻(xiàn)模塊數(shù)據(jù)構(gòu)造,有兩個(gè)成員,username,filepoint,分別用于存儲(chǔ)顧客名,
顧客目錄下面文獻(xiàn)指針.*curuser=NULL,*elseuser=NULL;這兩個(gè)是主文獻(xiàn)構(gòu)造體變晶,用
于訪問(wèn)構(gòu)造體里面數(shù)據(jù)成員
4.重要功能模塊
1.intLoginDisplay()〃登陸選項(xiàng)操作函數(shù)
2.boolLoginlintSELETE)〃顧客登陸,注冊(cè)函數(shù)
3.voidDisplayUFDO〃打印顧客信息,涉及顧客各個(gè)文獻(xiàn)
4.voidByeFile(boolBOOL)〃注銷函數(shù),調(diào)用次函數(shù)顧客可以退出系統(tǒng)
5.boolClearUserFile()〃顧客要將自己注冊(cè)目錄從系統(tǒng)徹底刪除
6.voidClearUserMes()〃刪除顧客所有信息
7.voidDcleteUser()〃刪除顧客注冊(cè)目錄操作
8.voidCreatFile()〃在當(dāng)前顧客目錄下創(chuàng)立文獻(xiàn)
9.voidDeleteFileO//刪除當(dāng)前目錄下一種文獻(xiàn)操作
10.boolQueryModElse(boolBOOL,bool&flag)
〃查詢其他顧客a錄下文獻(xiàn)文獻(xiàn)
11.boolQueryMod(boolBOOL)〃查詢權(quán)限
12.boolWriteRight(intlen,boolBOOL)
〃查看與否已經(jīng)對(duì)的地寫入到該文獻(xiàn)信息中,是則返回真值
13.voidWriteLengthToFile(intLen,boolBOOL)
//將文獻(xiàn)長(zhǎng)度寫入文獻(xiàn)管理模塊中
14.voidWritcFile()〃向文獻(xiàn)寫入信息操作
15.voidReadFile()〃讀文獻(xiàn)函數(shù)
16.voidChangeMod()〃修改某文獻(xiàn)執(zhí)行雙限
17.voidExecute(inti,intlen,intendset)〃執(zhí)行命令函數(shù)
18.voidCommand()
〃讀取顧客輸入命令,并將其轉(zhuǎn)換成系統(tǒng)能辨認(rèn)命令
5.小構(gòu)成員及分工
負(fù)責(zé)人;
姓名模塊
黃新潮組長(zhǎng)分派任務(wù),總結(jié)實(shí)驗(yàn)心得,分析流程圖,給成員解說(shuō)
王強(qiáng)對(duì)源程序加以注釋、修改
張蒙對(duì)源程序讀取,運(yùn)營(yíng),截圖,完善
四、文獻(xiàn)系統(tǒng)功能模塊詳細(xì)設(shè)計(jì)流程圖
1.intLoginDisplay()〃登陸選項(xiàng)操作函數(shù)
2.boolLogin(intSELETE)〃顧客登陸,注冊(cè)函數(shù)
3.voidDisplayUFDC〃打印顧客信息,涉及顧客各個(gè)文獻(xiàn)
圉2DicnlavIlFD
4.voidByeFile(boolBOOL)〃注銷函數(shù),調(diào)用次函數(shù)顧客可以退出系統(tǒng)
5.boolClearUserFLeO〃顧客要將自己注冊(cè)目錄從系統(tǒng)徹底刪除
6.voidClearUserMes()〃刪除顧客所有信息
圖6PlparlkerMpc
7.intDeleteUserO//刪除顧客注冊(cè)目錄操作
8.voidCreatFile。//在當(dāng)前顧客目錄下創(chuàng)立文獻(xiàn)
9.voidDeleteFileC//刪除當(dāng)前目錄下一種文獻(xiàn)操作
DpIprpFilp
10.boolQueryModElse(boolBOOL,bool&flag)〃查詢其他顧客目錄下文獻(xiàn)文
獻(xiàn)
圖1()f^nprvMndFkp
11.boolQueryMod(boolBOOL)〃查詢權(quán)限
12.boolWriteRight(intlen,boolBOOL)〃查看與否已經(jīng)對(duì)的地寫入到該文
獻(xiàn)信息中,是則返回真值
13.voidWriteLengthToFile(intLen,boolBOOL)〃將文獻(xiàn)長(zhǎng)度寫入文獻(xiàn)管理
模塊中
WriteLenethToFile
14.voidW'riteFileC〃向文獻(xiàn)寫入信息操作
15.voidReadFileO//讀文獻(xiàn)函數(shù)
圖15ReadFile
16.voidChangeModC〃修改某文獻(xiàn)執(zhí)行權(quán)限
17.intExecute(inti,intlen,intcmdset)//執(zhí)行命令函數(shù)
圖17Execute
18.voidCommand。//讀取顧客輸入命令,并將其轉(zhuǎn)換成系統(tǒng)能辨認(rèn)命令
圖18Command
五、實(shí)驗(yàn)運(yùn)營(yíng)成果
/*****************************************************************
文獻(xiàn)名:Simple_file_systcm.c
功能:簡(jiǎn)樸文獻(xiàn)管理系統(tǒng)模仿程序
*******************************************************************/
#inc1udc<iostrcani.h>
#include<s(dio.h>
#include<stdlib.h>
#include<string.h>
#include"conio.h"
#include<dos.h>
#defineNULLO
#definekeynum10
#definegetspace(type)(type*)malloc(sizeof(type))〃宏定義申請(qǐng)內(nèi)存
charcnidl64]:〃存儲(chǔ)顧客輸入命令
charbuffer[36];//
charuser[32];〃存儲(chǔ)當(dāng)前登陸顧客名
typedefcharALFA[12];
ALFAKWORD[keynum];
//-------------------------------------------------------------------------------------------------------
structUFD{//顧客文獻(xiàn)管理模塊
charfilename[32J;〃文獻(xiàn)名
intsafecode;〃文獻(xiàn)保護(hù)碼
longlength:〃文獻(xiàn)長(zhǎng)度
}*curfile=NULL;
//.......................................................................................................................................
structMFD{〃顧客登陸信息管理模塊
charusemame[32];〃顧客名
boolfilepoint://顧客目錄下文獻(xiàn)指針,false表達(dá)H錄為空,true為該顧客目錄中有文
}*curuser=NULL,*elseuser=NULL;
typedefUFDUFD;〃重命名
typedefMFDMFD;
voidmain();
//--------------------------------------------------------------------
voidKeyWord。//初始化命令核心字
strcpy(KWORD[IL"bye");〃顧客注銷命令
strcpy(KWORD[2],"chmod");〃變化文獻(xiàn)執(zhí)行權(quán)限
strcpy(KWORD[3],"close");//刪除顧客注冊(cè)信息
strcpy(KWORD[4|,"create");//在當(dāng)前目錄下創(chuàng)立一種文獻(xiàn)
strcpy(KWORD[5],"delete");〃刪除當(dāng)前顧客目錄下?種文獻(xiàn)
strcpy(KWORD[6],"list");〃顯示當(dāng)前注冊(cè)目錄下所有文獻(xiàn)信息
sticpy(KWORD[7],"opcn");〃打開(kāi)文獻(xiàn)
strcpy(KWORD[8J,"read");〃讀文獻(xiàn)信息
strcpy(KWORD[9L"write");〃向文獻(xiàn)寫入新信息
//--------------------------------------------------------------------
intLoginDisplay?!ǖ顷戇x項(xiàng)操作函數(shù)
(
intSELETE_1=0;〃定義整型數(shù)存儲(chǔ)選項(xiàng)
do〃循環(huán)控制
(
cout?H*****請(qǐng)選取操作*****\nl、顧客登陸2、顧客注冊(cè)0、退出"vvendl;
〃顯示登陸選項(xiàng)界面
cin?SELETE_l:〃輸入要選取命令
}while(SELETE_l<0||SELETE_I>2);〃選項(xiàng)判斷
system("cls");〃清屏
returnSELETE_1;//返回選項(xiàng)數(shù)
//■
boolLogin(intSELETE)〃顧客登陸,注冊(cè)函數(shù)
FILE〃定義文獻(xiàn)
charnamefl2];〃定義數(shù)組存儲(chǔ)登錄名
switch(SELETE)//switch選取
(
case1://顧客登陸
if((fp=fopen(,,LOGIN.exe'\"rb"))==NULL)〃打開(kāi)顧客注冊(cè)目錄管理文獻(xiàn)
cout?"\n錯(cuò)誤:不能打開(kāi)登陸文獻(xiàn)。"<<endl;〃顯示錯(cuò)誤
geich();〃讀取結(jié)束符
systeni("cls");〃清屏
returnfalse;〃返回
)
curuser=getspace(MFD);〃顧客名申請(qǐng)空間
couivv”\n*****登陸*****\n顧客名:”;//顯示
cin?name;〃輸入顧客登陸名
while(!feof(fp))〃檢查該顧客與否合法
fread(curuser,sizeof(MFD),l,fp):〃文獻(xiàn)讀取
if(strcmp(curuser->usemame,name)==O)//比較輸入顧客名與否與存在
顧客名相似
break;
}
if(feof(fp))〃如果沒(méi)有找到跟當(dāng)前登陸顧
客名相似管理信息,執(zhí)行下列代碼
cout?”\n錯(cuò)誤:該顧客不存在。"<<endl;〃顯示“錯(cuò)誤:該顧客不存在”
fclose(fp);〃關(guān)閉文獻(xiàn)
returnfalse:〃返回
)
else
(
fclose(fp);〃關(guān)閉文獻(xiàn)
returntrue;〃返回
)
break;〃跳出
case2://新顧客注冊(cè)
if((fp=fbpen("LOGIN.exe","ab"))==NULL)〃如果登陸信息管理文獻(xiàn)不存在
fp=fopen("LOGIN.exe","wb+");〃創(chuàng)立該信息管理文獻(xiàn)
charname[12];
curuser=getspace(MFD);〃顧客申請(qǐng)空間
while(l)
coul?"\n*****新顧客注冊(cè)*
coutvv”顧客名:
cin?name;〃輸入顧客注冊(cè)名
fpl:fopenCLOGIN.exe"Jrb");〃打開(kāi)登陸文獻(xiàn),只容許讀數(shù)據(jù)
while(!feof(fpl))〃查看該顧客名與否被別顧客占用
fread(curuser,sizeof(MFD),l,fpl):〃文鉞讀取
if(sticnip(cuiuser->useiname,name)==0)
cout?"\n該顧客已經(jīng)存在,請(qǐng)重新輸入!"?endl;〃該名稱已經(jīng)被
使用
getch();〃讀取結(jié)束符
break;〃跳出
)
)
if(feof(fpl))〃該名稱沒(méi)有被別顧客占用
strcpy(curuscr->uscinamc,nanic);〃拷貝輸入顧客名到顧
客名構(gòu)造體
curuser->filepoinl=NULL;//文獻(xiàn)指針置空
fwrite(curuser,sizeof(MFD),1,fp);〃顧客信息寫入文獻(xiàn)
strcpy(user,curuser->username);〃生成顧客文獻(xiàn)管理模塊
strcat(user.".exe");〃用于管理顧客目錄下各個(gè)文獻(xiàn)
fp2=fopcn(user,"wb+");〃打開(kāi)文獻(xiàn),容許讀和寫
fclose(fp2);〃關(guān)閉fp2
cout?'\n注冊(cè)成功!"?endl:〃提示注冊(cè)成功
LoginDisplayO;
fclose(fpi);〃關(guān)閉fpl
fclose(fp):〃關(guān)閉fp
break;
)
)
fp=fopen("LOGIN.exe";,rb");〃顯示當(dāng)前注冊(cè)顧客名稱
while(l)
fread(curuser,sizeof(MFD).I,fp)://文獻(xiàn)讀取
if(feof(fp))〃檢查與否最后顧客
break;
coul?curuser->username?endl;//顯示顧客名
getch();〃讀取結(jié)束符
)
fclose(fp):〃關(guān)閉文獻(xiàn)
returntrue;〃返回
break;
default:
returnfalse://返回
break;〃返回到上一層
//--------------------------------------------------------------------
voidDisplayUFDO〃打印顧客信息,涉及顧客各個(gè)文獻(xiàn)
//名稱、長(zhǎng)度和操作權(quán)限設(shè)立信息
if(curuser->filepoint==false)〃當(dāng)前顧客目錄下沒(méi)有任何文獻(xiàn)存在
cou(?"\n顧客"?cu^user->usemame?'^文獻(xiàn)夾是空"<<endl;
else
{〃存在文獻(xiàn),將所有文獻(xiàn)信息打印在終端
FILE*fp;〃定義文獻(xiàn)
charfilename[12];〃定義文獻(xiàn)名
strcpy(filename,curuser->usemame);〃拷貝顧客名到定義
strcat(filename,'■.exe'");〃擴(kuò)展名.exe
if((fp=fopen(filename,"rb"))==NULL)〃打開(kāi)顧客文獻(xiàn)信息管理模塊
coutvv"\n無(wú)法打開(kāi)顧客:"?curuser->username?"文獻(xiàn)!"Wendi;〃顯示
gctch();〃讀取結(jié)束符
return;
)
else
{〃讀入并將顧客所有文獻(xiàn)信息打印在終端
coutvv"顧客:"v<curuser?>username<<”目錄下文獻(xiàn):"vvendl;
UFD*ufd;//申請(qǐng)文獻(xiàn)模塊
inti=0;
ufd=getspacc(UFD);〃申請(qǐng)存儲(chǔ)顧客文獻(xiàn)模塊空間
while(l)
(
fread(ufd,sizeof(UFD),I,fp);〃文獻(xiàn)讀取,把文獻(xiàn)信息讀到顧客
中
if(feof(fp))〃所有輸出
break;
else〃打印信息
cout?ufd->niename?"\t"?ufd->length?"\t"?ufd->safecode?endl;〃輸出文獻(xiàn)巖息
)
)
fclose(fp);〃關(guān)閉文獻(xiàn)
}
}
//.......................................................................................................................................
voidByeFile(b°olBOOL)”注銷函數(shù),調(diào)用次函數(shù)顧客可以退出系統(tǒng)
(
FILE*infilc,*outfilc;〃定義文獻(xiàn)
charout[50];〃定義數(shù)組out[50]
strcpy(out,"outfilelocate.exe");〃拷貝信息到數(shù)組
if((infile=fopen(”LOGIN.exe","rb"))==NULL)〃檢查與否保存
(
cout?"\n保存錯(cuò)誤。";//fclose(infile);
return;
)
else
(
if((outfile=fopen9ut,"wb+"))==NULL)//申請(qǐng)一種緩沖區(qū)管理模塊
〃存儲(chǔ)顧客更新后所有信息
{
cout?"\n保存錯(cuò)誤。";//fclose(outfHe);
fclose(infile);〃關(guān)閉文獻(xiàn)infile
return;
)
else
(
MFD*mfd=getspace(MFD):〃申請(qǐng)顧客登陸管理并申請(qǐng)空間
while(l)
{〃將舊文獻(xiàn)管理信息讀出,并保存到新文獻(xiàn)信息管理模塊中
fread(mfd,sizeof(MFD),1,infUe);〃文獻(xiàn)讀取,把文獻(xiàn)信息讀到顧客管理中
if(feof(infile))
break;
if((strcmp(mfd->usemame,curuseQ>usemame))==O)〃判斷與否與顧客名相
似
(
if(BOOL)〃更新當(dāng)前顧客信息操作
fwrite(curuser,sizeof(MFD)」,outfile);〃寫文獻(xiàn)
elsecontinue;〃如果顧客想把注冊(cè)目錄從系統(tǒng)中徹底刪除
〃則執(zhí)行該操作
)
else
fwritc(mfd,sizcof(MrD),1,outfilc);〃叮入新模塊
)
fclose(inflle);
fclose(outfile);〃關(guān)閉文獻(xiàn)
removeCLOGIN.exe");〃將舊該顧客文獻(xiàn)管理模塊刪除
rename(out,"LOGIN.exe");//將新顧客文獻(xiàn)管理模塊重命名為顧客目錄
下
〃管理模塊
}
1
}
//-------------------------------------------------------------------------------------
boolClearUserFileO〃顧客要將自己注冊(cè)目錄從系統(tǒng)徹底刪除
〃一方面將該顧客目錄下所有文獻(xiàn)刪除
FILE*fp;
charfile[50];〃定義數(shù)組file[50]
strcpy(file,curuser->us2rnarne);〃指貝信息到數(shù)組
strcaKfile/^exe");〃擴(kuò)展名.exe
if((fp=fopcn(filc,"rb"))==NULL)〃打開(kāi)顧客文獻(xiàn)信息管理模塊
{
//fclose(fp);
cout<<"\n該顧客不存在!";〃顯示該顧客不存在!
returntrue;
1
else
{〃將該顧客目錄下文獻(xiàn)逐個(gè)從磁盤刪除
UFD*ufd=gctspacc(UFD):〃申請(qǐng)顧客文獻(xiàn)管理并申請(qǐng)內(nèi)存
while(l)
(
fread(ufd,sizeof(UFD),1,fp);//文獻(xiàn)讀取,把文獻(xiàn)信息讀到顧客
中
if(fcof(fp))〃判斷與否有文獻(xiàn)
break;
else
remove(ufd->filenanie);〃刪除文獻(xiàn)
}
fclose(fp);
returntrue;
I
voidClearUserMes()//>J除顧客所有信息
charname[50J;〃定義數(shù)組name[50]
strcpy(name,curuser->username);//拷貝顧客名到數(shù)組
strcat(namc,',.exe,');〃擴(kuò)展名.exe
remove(name);〃從磁盤中刪除顧客文獻(xiàn)信息管理模塊
ByeFile(false);〃更新系統(tǒng)顧客登陸信息管理模塊
)
//-------------------------------------------------------------------
voidDeleteUser。〃刪除顧客注冊(cè)目錄操作
(
intSELETE;〃定義SELETE
charch;〃定義ch
cout?"\n該操作將會(huì)是你在系統(tǒng)所有信息刪除,下次登陸時(shí)你必要重新申請(qǐng)顧客名!
"?endl;
cout?"\n你擬定要?jiǎng)h除你在系統(tǒng)中注冊(cè)信息嗎?Y/N"?endl;
cin?ch;〃輸入選取
switch(ch)〃提示顧客確認(rèn)刪除
(
case'Y':
case'y':
if(ClearUserFile())〃如果顧客所有文獻(xiàn)已經(jīng)刪除了
〃則可以將該顧客文獻(xiàn)信息管理模塊也從磁盤中刪除
〃以免在沒(méi)完全刪除文獻(xiàn)卻刪了該文獻(xiàn)信息管理模塊
〃使得這此文獻(xiàn)無(wú)法再進(jìn)行管理導(dǎo)致磁盤空間揮霍
ClearUserMesO;〃刪除文獻(xiàn)信息管理模塊
break;
default:
cout?"\n你取消了此操作!,,;〃顯示
break;
I
)
//.....................................................................................
voidCreatFile?!ㄔ诋?dāng)前顧客目錄下創(chuàng)立文獻(xiàn)
(
FILE*fp;〃定義文獻(xiàn)
curuser->filepoint=true;//顧客目錄下文獻(xiàn)指針置真
if((fp=fopcn(buffcr,"r"))==NULL)〃如果沒(méi)有跟顧客輸入文獻(xiàn)名相似文獻(xiàn)
{
if((fp=fopcn(biiffer,"w0))==NULL)〃判斷文獻(xiàn)與否為空
(
coutvv"\n創(chuàng)立文獻(xiàn)失敗!”:!/顯示
//fclose(fp);
return;
)
fclose(fp);〃關(guān)閉文獻(xiàn)
)
else
{〃顧客要?jiǎng)?chuàng)立文獻(xiàn)已經(jīng)存在
COU1VV、該文獻(xiàn)已經(jīng)存在,創(chuàng)立另一種文獻(xiàn)?Y/N";
charch;
cin?ch;〃輸入選取
switch(ch)
case丫:
casey:
cout?”\n輸入新文獻(xiàn)名:”;
cin?bufter;〃輸入新文獻(xiàn)名
strcat(buffer,".txt");//擴(kuò)展名.txt
fclose(fp):〃關(guān)閉文獻(xiàn)
if((fp=fopen(buffer,"w"))==NULL)//判斷文獻(xiàn)與否為空
(
cout?'\n創(chuàng)立文獻(xiàn)失??!”;〃顯示創(chuàng)立文獻(xiàn)失敗
//fclosc(fp);
return;
)
fclose(fp);〃關(guān)閉文獻(xiàn)
break;
default:
fclose(fp);〃關(guān)閉文獻(xiàn)
return;
)
)
strcpy(user,curuser->usemame);〃復(fù)制顧客名到字符串user(顧客)
strcaUuser/'.exe"):〃擴(kuò)展名.exe
curfile=getspace(UFD);〃申請(qǐng)空間
strcpy(curfile->filenanie.buffer);〃文獻(xiàn)名
curfile->length=O;〃該文獻(xiàn)長(zhǎng)度為零
curfile->safecode=30:〃設(shè)立該文獻(xiàn)默認(rèn)杈限
//H00,文獻(xiàn)上有讀和寫權(quán),其她顧客沒(méi)有讀寫權(quán)
if((fp=fopen(user,"ab',))==NULL)//判斷與否為合法顧客
coutvv"\n錯(cuò)誤:你也許不是合法顧客。"vvendl:
gctch();〃讀取結(jié)束符
I
else
|
fwrite(curfile,sizeof(UFD),1,fp);〃將該文獻(xiàn)信息寫入顧客文獻(xiàn)信息管理模塊中
cout?"\n文獻(xiàn)"?curfile->filename?"創(chuàng)立成功!
)
fclosc(fp);〃關(guān)閉文獻(xiàn)
}
//-------------------------------------------------------------------------------------------------------
voidDeleteFileO〃刪除當(dāng)前目錄下一種文獻(xiàn)操作
(
charch;〃定義字符型變量ch
FILE*infile,*outfile;〃定義文獻(xiàn)
cout?"\n擬定要?jiǎng)h除文獻(xiàn):”<vbufTer?”Y/N"?endl;
cin?ch;〃提示顧客確認(rèn)刪除
switch(ch)
(
case'Y':
caseV:〃更新顧客文獻(xiàn)信息管理模塊,這里同樣使用緩沖區(qū)模塊來(lái)更新
〃辦法與上面將到類似
charout(50],in[50];〃定義數(shù)組
strcpy(out,"outfilelocale.exe");〃拷貝文獻(xiàn)到數(shù)組
strcpy(in,cuniser->username);〃拷貝顧客名到數(shù)組
strcaUin/'.exe");〃擴(kuò)展名.exe
if((infile=fopen(in,"rb"))==NULL)〃打開(kāi)該顧客文獻(xiàn)信息管理模塊
(
cout?、n保存錯(cuò)誤。
//fclose(infile);
return;
)
else
(
if((outfile=fopen(ou(:'wb+"))==NULL)〃打開(kāi)讀寫文獻(xiàn),判斷與否為空
(
cout?”\n保存錯(cuò)誤。";//fclcse(outfilc);
fclose(infile);〃關(guān)閉文獻(xiàn)
return;
)
else
(
UFD*ufd=getspace(UFD);〃申請(qǐng)空間
while(l)
{
fread(ufd,sizeof(UFD),Ijnfile);〃從舊模塊讀出信息
if(feof(infile))
break;
if((strcmp(ufd->filename,buffer))==O)//要進(jìn)行更新信息
continue;
else
fwrite(ufd,sizeof(UFD),1QUtfile);〃寫入新模塊
)
fclose(infile);
fclose(outfile);〃關(guān)閉文獻(xiàn)
rcmove(in);〃在磁盤移除就模塊
rename(ou(,in);//新模塊命名為當(dāng)前顧客文獻(xiàn)信息管理模塊
)
)
remove(buffer);〃從磁盤中刪除該文獻(xiàn)
break;
default:
break;
)
)
//.......................................................................................................................................
voidListAllFile。//顯示當(dāng)前顧客目錄下文獻(xiàn)信息
(
DisplayUFDO;〃調(diào)用打印函數(shù)
)
voidWriteLengthToFile(intLen.boolBOOL);//函數(shù)聲明
//-------------------------------------------------------------------------------------------------------
voidOpenFile?!ㄔ趙indov/模式下打開(kāi)該文獻(xiàn)
(
FILE*fp;〃定義文獻(xiàn)
charch;
inti=0;
system(buffer);//buffer為文獻(xiàn)名,如:filel.ixi
fp=fopen(buffer;,r");〃打開(kāi)文鉞進(jìn)行讀操作
while(l){〃獲取新文獻(xiàn)長(zhǎng)度
if(feof(fp))〃判斷與否最后一種
break;
ch=fgctc(fp);〃按字符讀取
i++;//每讀取一次,長(zhǎng)度+1
)
WriieLengthToFile(ifalse);〃將修改后文獻(xiàn)長(zhǎng)度寫入管理表
}
//.......................................................................................................................................
boolQueryModElse(boolBOOL,bool&flag)〃查詢其他顧客目錄下文獻(xiàn)文獻(xiàn)
〃當(dāng)該文獻(xiàn)權(quán)限容許當(dāng)前顧客對(duì)其執(zhí)行關(guān)于操作時(shí),返回turc
FILE*fp;〃定義文獻(xiàn)
charuser[50];
UFD*ufd=gelspace(UFD);//elseuser表達(dá)除當(dāng)前顧客外所有顧客注冊(cè)目錄
strcpy(user,elseuser->username);〃拷貝顧客名到數(shù)組
strcat(user,".exe");〃擴(kuò)展名.exe
if((fjp=fopen(user」rb"))==NULL){〃打開(kāi)一種其他顧客文獻(xiàn)信息管理模塊
//fclose(fp);
cou(vv”\n操作浮現(xiàn)錯(cuò)誤,對(duì)此咱們表達(dá)歉意!";〃顯示
returnfalse;
)
else{
whilc(l){
fread(ufd,sizeof(UFD),1,fp);〃讀文獻(xiàn)
if(feof(fp))〃判斷與否可讀權(quán)限
fclose(fp);
returnfalse;
)
if(slrcmp(ufd->filename,buffer)==O)〃判斷與否可以進(jìn)去其她顧客文獻(xiàn)管理模塊
(
if(BOOL)〃該顧客祈求寫該文獻(xiàn)
(
if(ufd->safecode==31||ufd->safecode==33)//110Rllll最后,位為1,
有寫權(quán)
rctumtrue;
else
{
cout?"\n你無(wú)權(quán)對(duì)文獻(xiàn)”《buffer<<"執(zhí)行此操作!”;
flag=true;returnfalse;
I
//flag設(shè)立為true,告訴上一層,不必再查找
〃該文獻(xiàn)」經(jīng)找到,但顧客無(wú)權(quán)執(zhí)行有關(guān)操作
)
else〃該顧客祈求讀權(quán)
{
if(ufd->safecode==32||ufd->safecode==33)〃1110、1111倒數(shù)第二位
為1,有讀權(quán)
returntrue;
else
coutc<“\n你無(wú)權(quán)對(duì)文獻(xiàn)y<buffer<<”執(zhí)行此操作!
flag=true;
returnfalse;
I
)
I
)
)
}
//........................................................................................................................................
boolQueryMod(boolBOOL)〃查詢權(quán)限
{〃一方面在顧客目錄下查找,如果找不到顧客當(dāng)前要進(jìn)行操作文獻(xiàn)名
〃則在其他注冊(cè)顧客目錄下查找
FILE*fp,*fpl;〃定義文獻(xiàn)
boolflag=false;〃置旗為false
charuser[50];
UFD*ufd=getspace(UFD);〃申請(qǐng)空間
strcpy(user,curuser->username);〃拷貝顧客名到數(shù)組
strcal(usen".exe");〃擴(kuò)展名.exe
if((fp=fopen(user,”rb"))==NULL){〃打開(kāi)顧客文獻(xiàn)信息管理模塊
//fclose(fp);
cout?"\n操作浮現(xiàn),錯(cuò)誤,對(duì)此咱們表達(dá)歉意!";rcturnfalse;
)
else{〃查找匹配文獻(xiàn)名,顧客目錄下文獻(xiàn)容許顧客送行讀寫操作
whilc(l){
fread(ufd,sizeof(UFD),1,fp);〃讀文獻(xiàn)
if(feof(fp)){〃在當(dāng)前顧客文獻(xiàn)管理模塊中找不到匹配文獻(xiàn)
〃則繼續(xù)在其他顧客注冊(cè)目錄下查找
fclose(fp);〃關(guān)閉文獻(xiàn)
fp1=fopen("LOGIN.exe,,,"rb");〃打開(kāi)文獻(xiàn),只容許讀數(shù)據(jù)
clscuser=gctspace(MFD):〃申請(qǐng)空間
boolBOOL_l=false;〃置旗為false
while(l){
fread(elseuser,sizeof(MFD),1,fpl);〃讀其他顧客信息
if(feof(fpl)&&!BOOL_1)〃所有顧客都查找完
〃但依然沒(méi)找到匹配文獻(xiàn)
returnfalse;
if(clscuscr!=curuscr)
if((BOOL」==QueryModElse(BOOL,flag)))〃查找
returntrue;
if(flag)
returnfalse;
1
if(strcmp(ufd->filename,buffer)==O)
{〃在當(dāng)前顧客注冊(cè)目錄下
〃找到該文獻(xiàn),返回真值
fclose(fp);returntrue;
}
}
//?
boolWriteRight(intlen,boolBOOL)〃查看與否己經(jīng)對(duì)?的他寫入到該文獻(xiàn)信息中
〃是則返回真值
(
charuser[50],outfile[50];
FILE*fp,*fpl;〃定義文獻(xiàn)
strcpy(user,elseuser->username);〃拷貝顧客名到數(shù)組
strcaKuser/'.exe");〃擴(kuò)展名.exe
if((m=fopen(user;Tb"))==NULL)〃判斷文獻(xiàn)與否為空
{
//fclose(fp);
returnfalse;〃返回
}
else{
UFD*ufd=getspace(UFD);〃申請(qǐng)空間
while(l)(〃在此顧客目錄下查找匹配文獻(xiàn)
fread(ufd,sizeof(UFD),1,fp);//讀取文獻(xiàn)
if(feof(fp))〃判斷與否有文獻(xiàn)
{
fclose(fp);//關(guān)閉文獻(xiàn)
returnfalse;
}
if((strcmp(ufd->filename,buffer))==O)〃比較文獻(xiàn)
{〃找到要寫入新長(zhǎng)度文獻(xiàn)
strcpy(outfile,"outfilelocate.exe");〃擴(kuò)展名.exe
if((fp1=fopen(outfile,"wb+"))==NULL)〃打開(kāi)文獻(xiàn)與否為空
cout?"\n錯(cuò)誤:寫入文獻(xiàn)長(zhǎng)度出錯(cuò)_3。
//fclose(fpl);
fclose(fp);〃關(guān)閉文獻(xiàn)
returnfalse;
else{
fclose(fp);
fp=fopen(user,"rb");//文獻(xiàn)指針從新指向此顧客文獻(xiàn)信息管理模
〃塊開(kāi)頭
wliile(l){
fread(ufd,sizeof(UFD),l,fp);〃讀文獻(xiàn)
if(feof(fp))〃判斷與否有文獻(xiàn)
break;
if(strcmp(ufd->filename,buffer)==O)〃對(duì)文獻(xiàn)進(jìn)行比較
{〃找到匹配文獻(xiàn)
if(BOOL)ufd->length+=len;〃在文獻(xiàn)末追加內(nèi)容操作
elseufd->length=len;〃覆蓋原文獻(xiàn)內(nèi)容
1
fwrite(ufd,sizeof(UFD),1,fjpI);〃寫文獻(xiàn)
)
fclose(fp);fclose(fpI);〃關(guān)閉文獻(xiàn)
remove(user);〃移除
rename(outfile,user);〃重命名
returntrue;
}
)
}
//-------------------------------------------------------------------
voidVVriteLengthToFile(intLen,boolBOOL)〃將文獻(xiàn)氏度寫入文獻(xiàn)管理模塊中
{〃由于當(dāng)前顧客可以對(duì)其他顧客文獻(xiàn)進(jìn)行操作(只要權(quán)限容許)
〃因此應(yīng)當(dāng)在整個(gè)文獻(xiàn)系統(tǒng)目錄下查找該文獻(xiàn)位置
FILE*fp;
if((fp=fopen("LOGIN.exe";(rb"))==NULL){〃不能打開(kāi)文獻(xiàn)
cout?"\n寫入文獻(xiàn)長(zhǎng)度錯(cuò)誤」!
//fclose(fp);
return;
I
else{
elseuser=getspace(MFD);〃申請(qǐng)空間
while(l){
fread(elseuser,sizeof(MFD),1,fp);〃讀文獻(xiàn)
if(feof(fp))〃判斷與否可讀
break;
else{
if(WriteRight(Len,BOOL)){〃查看與否已經(jīng)對(duì)的地寫入到該文獻(xiàn)信
息中
fclose(fp);return;
)
}
coutvv”\n寫入文獻(xiàn)長(zhǎng)度錯(cuò)誤_2!
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 劇作家解聘合同證明
- 消防設(shè)備租賃協(xié)議模板
- 2024年項(xiàng)目評(píng)估與審計(jì)協(xié)議3篇
- 橋梁涂料施工合同
- 2025版綠色生態(tài)住宅區(qū)規(guī)劃設(shè)計(jì)合同3篇
- 市場(chǎng)營(yíng)銷策略組織管理辦法
- 玩具行業(yè)售后服務(wù)管理策略
- 2025版礦山土方運(yùn)輸及環(huán)保處理一體化合同3篇
- 2025版旅游度假合同管理規(guī)范建議合同3篇
- 2024年戶外拓展食堂租賃合同含野外生存技能培訓(xùn)3篇
- AQ/T 1023-2006 煤礦井下低壓供電系統(tǒng)及裝備通 用安全技術(shù)要求(正式版)
- 餐館食材訂購(gòu)合同
- 小學(xué)高學(xué)段學(xué)生課堂消極沉默現(xiàn)象及應(yīng)對(duì)的研究
- 康復(fù)科發(fā)展規(guī)劃方案(2篇)
- 精神病院感染管理
- 2024河北工業(yè)職業(yè)技術(shù)大學(xué)教師招聘考試筆試試題
- 地震應(yīng)急演練實(shí)施方案村委會(huì)(2篇)
- 2024年合肥市梅山飯店有限公司招聘筆試沖刺題(帶答案解析)
- 基礎(chǔ)有機(jī)化學(xué)實(shí)驗(yàn)智慧樹(shù)知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 幼兒園進(jìn)餐案例及分析總結(jié)
- 2024年中考英語(yǔ)第一次模擬考試(南京卷)
評(píng)論
0/150
提交評(píng)論