论文百事通 设为主页 会员登录 |  免费注册
代写论文 代发表论文 定制论文 毕业设计定制 期刊目录 黄金会员  
加入收藏 设为首页 |  收藏本站
首页 | 计算机 | 建筑工程 | 医药学 | 经济类 | 文学 | 英语 | 其它类别论文 | 计算机毕业设计 | 课程设计 | 毕业系统演示 | 投稿中心 | 下载中心 | 留言板
  查找论文

操作系统之文件系统

作者:论文百事通  来源:lwbst.com    【2006-09-28】    编辑:Admin

实验要求:设计一个n 个用户的文件系统,每次用户可保存m 个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施。至少要有create,delete,open,close,read,write等命令。


概要设计:
TForm1 *Form1;
MFD Mfd; //用户内存块
UFD Ufd; //用户文件内存块
AFD Afd; //打开文件内存块

FILE *Mfp; //用户列表文件
FILE *Ufp; //当前用户文件指针
String CurrUser;//当前用户
添加用户模块:
void TForm1::InserMFD(String User, String FilePointer,MFD &Mfd)
添加文件目录模块:
void TForm1::InserUFD(String FileName, int ProtectCode, int FileLen,UFD &UFd)
添加运行文件目录模块:
void TForm1::InserAFD(String OpenFile, int OpenCode, int RWPointer,AFD &Afd)
保存文件模块:
void TForm1::SaveUFD(UFD & Ufd, FILE * UfdFile)
删除文件模块:
bool TForm1::DeleteUfd(String FileName,UFD & Ufd)
。。。。。。
运行界面和过程如下:

源程序如下:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "stdio.h"
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

MFD Mfd; //用户内存块
UFD Ufd; //用户文件内存块
AFD Afd; //打开文件内存块

FILE *Mfp; //用户列表文件
FILE *Ufp; //当前用户文件指针
String CurrUser;//当前用户

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------

 

void TForm1::InserMFD(String User, String FilePointer,MFD &Mfd)
{
MFD tail;
MFD NewUser;
NewUser=new mfd;

NewUser->user=User;
NewUser->FilePointer=FilePointer;
NewUser->Next=NULL;
tail=Mfd;
while (tail->Next!=NULL)
tail=tail->Next;
tail->Next=NewUser;
//TODO: Add your source code here
}

void TForm1::InserUFD(String FileName, int ProtectCode, int FileLen,UFD &UFd)
{ UFD tail;
UFD NewFile;

NewFile=new ufd;
NewFile->FileName=FileName;
NewFile->ProtectCode=ProtectCode;
NewFile->FileLen=FileLen;
NewFile->Next=NULL;

tail=UFd;
while (tail->Next!=NULL)
tail=tail->Next;
tail->Next=NewFile;
Ufd->Next->ProtectCode;
}

void TForm1::InserAFD(String OpenFile, int OpenCode, int RWPointer,AFD &Afd)
{ AFD tail;
AFD NewOpen;

NewOpen=new afd;
NewOpen->OpenFile=OpenFile;
NewOpen->OPenCode=OpenCode;
NewOpen->RWPointer=RWPointer;
NewOpen->Next=NULL;

tail=Afd;
while (tail->Next!=NULL)
tail=tail->Next;
tail->Next=NewOpen;
//TODO: Add your source code here
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Mfd= new mfd;
Afd= new afd;
Ufd= new ufd;
Mfd->Next=NULL;
Ufd->Next=NULL;
Afd->Next=NULL;

MFD Trail;

if(!FileExists("MFD"))
{
int f=FileCreate("MFD");
FileClose(f);
Mfp=fopen("MFD","r+");

}
else
{ Mfp=fopen("MFD","r+");
int N;
fseek(Mfp,0L,2);
N=ftell(Mfp);
if(N>=21)
N=N/40+1;
else N=0;
InitialMFD(Mfp,Mfd,N);
Trail=Mfd->Next;
TListItem *Item;

while (Trail)
{
Item=User->Items->Add();
Item->Caption=Trail->user;
Item->ImageIndex=-1;
Item->StateIndex=2;
Trail=Trail->Next;
}
}
}
//--------------------------------------------------------------------------

bool TForm1::Login(String UserName, MFD & Mfd)
{ MFD tail;
tail=Mfd;
while (tail!=NULL){
if (UserName==tail->user)
return true;
tail=tail->Next;
}
return false;
//TODO: Add your source code here
}

bool TForm1::Rigister(String User, MFD & Mfd)
{
if(Login(User,Mfd))
{ShowMessage("该用户名已经被注册,请重新输入");
return false;
}
else
{
InserMFD(User,User,Mfd);
return true;
}
//TODO: Add your source code here
}

bool TForm1::Create(String FileName, int ProtectCode, int FileLen,UFD &Ufd)
{
if( ExistFile(FileName,Ufd))
{ShowMessage("该文件名已经存在,请重新命名");
return false;
}
else
{ InserUFD(FileName,ProtectCode,FileLen,Ufd);
return true;
} //TODO: Add your source code here
}

bool TForm1::ExistFile(String FileName, UFD & Ufd)
{ UFD trail;
trail=Ufd;
while(trail!=NULL)
{if (FileName==trail->FileName)
return true;
trail=trail->Next;
}
return false;
//TODO: Add your source code here
}
bool TForm1::ExistFile(String FileName, AFD& Afd)
{ AFD trail;
trail=Afd->Next;
while (trail!=NULL)
{if (FileName==trail->OpenFile)
return true;
trail=trail->Next;
}
return false;
}
bool TForm1::OpenFile(String FileName, UFD & Ufd, AFD& Afd)
{
if( !ExistFile(FileName,Ufd)) //搜索文件是否存在
{ ShowMessage("文件不存在!请检查!");
return false;
}

 

else {
if(ExistFile(FileName,Afd))
{ShowMessage("文件已经打开!请选择其它文件");
return false;
}

UFD trail;
trail=Ufd->Next;
while(trail!=NULL)
{if (FileName==trail->FileName)
{InserAFD(FileName,trail->ProtectCode,trail->FileLen,Afd);//插入打开文件
}
trail=trail->Next;
}
return true;
}
//TODO: Add your source code here
}

bool TForm1::InitialMFD(FILE * MFP, MFD & Mfd,int N) //初始化用户列表
{
if(N<=0)
return false;

String userName;
String filePtr;
char ChUser[20]; //定义文件名和指针长度为20个字符。
char FilePtr[20];

for (int i=0;i<N;i++)
{
fseek(MFP,i*40,0);
fread(& ChUser,20,1,MFP);

fseek(MFP,i*40+20,0);
fread(& FilePtr,20,1,MFP);

userName=ChUser;
filePtr=FilePtr;
filePtr=filePtr.SubString(1,20);
InserMFD(userName,filePtr,Mfd);
}
return true; //TODO: Add your source code here
}

bool TForm1::InitialUFD(FILE * UFP, UFD & Ufd, int N)
{ if(N<=0)
return false;

String FileName;
int ProCode;
int FLen;

char fileName[20];
for(int i=0;i<N;i++)
{

fseek(UFP,i*28,0);
fread(&fileName,20,1,UFP);

fseek(UFP,i*28+20,0);
fread(&ProCode,sizeof(int),1,UFP);

fseek(UFP,i*28+24,0);
fread(&FLen,sizeof(int),1,UFP);

FileName=fileName;
InserUFD(FileName,ProCode,FLen,Ufd);
}
return true;
//TODO: Add your source code here
}

void TForm1::SaveMFD(MFD & Mfd, FILE *File,int N)
{ MFD Trail;
int i=0;
Trail=Mfd->Next;
char User[20];
char Ptr[20];

while(Trail)
{

StrPCopy(User,Trail->user);
StrPCopy(Ptr,Trail->FilePointer);
fseek(File,i*40,0);
fwrite(User,Trail->user.Length(),1,File);
fseek(File,i*40+20,0);
fwrite(Ptr,Trail->FilePointer.Length(),1,File);
Trail=Trail->Next;
i++;
}
//TODO: Add your source code here
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Panel3->Visible=true;
Panel3->Left=Button1->Left+Button1->Width;
Panel3->Top=Button1->Top;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::EnterClick(TObject *Sender)
{ Panel3->Visible=false;
if(Rigister(Input->Text,Mfd))
ShowMessage(" 注册成功 ");
MFD trail;
trail=Mfd->Next;

TListItem *Item;
User->Clear();
while (trail)
{
Item=User->Items->Add();
Item->Caption=trail->user;
Item->ImageIndex=-1;
Item->StateIndex=2;
trail=trail->Next;
}

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button8Click(TObject *Sender)
{
if(ListView2->Items->Count>0 )
if(MessageDlg("尚有打开的文件没有关闭,要关闭所有文件吗",mtWarning,
TMsgDlgButtons()<<mbOK<<mbNo,0)==mrOk)
{ while (ListView2->Items->Count>0)
{ListView2->ItemIndex=0;
Button9Click(this);
}

}

Form3->Show();
Form1->Visible=false;
Form3->Refresh();
Form3->Label1->Caption="正在保存文件!,请稍候...";
for(int i=0;i<=100;i+=5)
{
Form3->ProgressBar1->Position=i;
Sleep(100);
}
Form3->Label1->Caption="现在你可以安全地退出系统了";
Form3->Refresh();
Sleep(1000);
Form3->Close();

 

fclose(Mfp);
fclose(Ufp);

DeleteFile("MFD");
DeleteFile(CurrUser);

int M=FileCreate("MFD");
int U=FileCreate(CurrUser);
FileClose(M);
FileClose(U);

Mfp=fopen("MFD","r+");
char File[20];
StrPCopy(File,CurrUser);
Ufp=fopen(File,"r+");

SaveMFD(Mfd,Mfp,0);
SaveUFD(Ufd,Ufp);
fclose(Mfp);
fclose(Ufp);
Close();

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Panel4->Visible=true;
Button4->Enabled=true;
Button8->Enabled=true;

Panel4->Left=Button2->Left+Button2->Width;
Panel4->Top=Button2->Top;
Button2->Enabled=false;
Button10->Enabled=true;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnLoginClick(TObject *Sender)
{ Panel4->Visible=false;
if(Login(ediLogin->Text,Mfd))
ShowMessage(" 登录成功 ");
else
{ShowMessage("该用户不存在,请检查!");
return;
}
Char FName[20];
StrPCopy(FName,ediLogin->Text+".UFD");
CurrUser=ediLogin->Text+".UFD";

if(!FileExists(FName))
{ int Uf=FileCreate(FName);
FileClose(Uf);
Ufp=fopen(FName,"r+");
}
else
{Ufp=fopen(FName,"r+");
int N;
fseek(Ufp,0L,2);
N=ftell(Ufp);

if(N>22)
N=N/28 ;
else N=0 ;
InitialUFD(Ufp,Ufd,N);
ShowUfd(Ufd);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
Panel5->Visible=true;
Panel5->Left=Button4->Left+Button4->Width;
Panel5->Top=Button4->Top;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnCreateClick(TObject *Sender)
{ Panel5->Visible=false;

Create(ediFile->Text,radCode->ItemIndex,0,Ufd);
ListView1->Clear();
ShowUfd(Ufd);
}
//---------------------------------------------------------------------------
void TForm1::SaveUFD(UFD & Ufd, FILE * UfdFile)
{ UFD Trail;
int i=0;
Trail=Ufd->Next;
char FileName[20];
int ProCode;
int FileLen;

while (Trail)
{
StrPCopy(FileName,Trail->FileName);
ProCode=Trail->ProtectCode;
FileLen=Trail->FileLen;

fseek(Ufp,i*28,0);
fwrite(FileName,Trail->FileName.Length(),1,Ufp);

fseek(Ufp,i*28+20,0);
fwrite(&ProCode,sizeof(int),1,Ufp);
Form1->Caption=Form1->Caption+ String(ProCode);

fseek(Ufp,i*28+24,0);
fwrite(&FileLen,sizeof(int),1,Ufp);

i++;
Trail=Trail->Next;
}
//TODO: Add your source code here
}
void TForm1::ShowUfd(UFD Ufd)
{
TListItem *ListItem;
UFD Trail;
Trail=Ufd->Next;

while(Trail)
{
ListItem=ListView1->Items->Add();
ListItem->Caption=Trail->FileName;
if(Trail->ProtectCode==0)
{
ListItem->SubItems->Add("只读");
}
else
{
ListItem->SubItems->Add("允许读写");
}
ListItem->SubItems->Add(String(Trail->FileLen)+"字节");
Trail=Trail->Next;
}
//TODO: Add your source code here
}
void __fastcall TForm1::ListView1SelectItem(TObject *Sender,
TListItem *Item, bool Selected)
{
Form1->Caption=Item->Caption;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{

String FileName= ListView1->Selected->Caption;
OpenFile(FileName,Ufd,Afd);
ListView2->Clear();
ShowAfd(Afd);
}
//---------------------------------------------------------------------------

UFD TForm1::SearchUfdFile(String FileName)
{ UFD Trail;
Trail=Ufd;
while(Trail)
{
if(Trail->FileName==FileName)
return Trail;
Trail=Trail->Next;
}
return 0;
//TODO: Add your source code here
}

AFD TForm1::SearchAfdFile(String FileName)
{ AFD Trail;
Trail=Afd;
while(Trail)
{
if(Trail->OpenFile==FileName)
return Trail;
Trail=Trail->Next;
}
return NULL;
//TODO: Add your source code here
}

void TForm1::ShowAfd(AFD Afd)
{ TListItem *ListItem;
AFD Trail;
Trail=Afd->Next;

while(Trail)
{
ListItem=ListView2->Items->Add();
ListItem->Caption=Trail->OpenFile;
if(Trail->OPenCode==0)
{
ListItem->SubItems->Add("只读");
}
else
{
ListItem->SubItems->Add("允许读写");
}
ListItem->SubItems->Add(String(Trail->RWPointer)+"字节");
Trail=Trail->Next;
}

//TODO: Add your source code here
}
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
AFD Ptr;
Ptr=SearchAfdFile(Edit1->Text);
if(R1->Checked)
Ptr->OPenCode=0;
else Ptr->OPenCode=1;
Ptr->RWPointer+=Edit2->Text.ToInt();
Panel10->Visible=false;
ListView2->Clear();
ShowAfd(Afd);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)
{
String FileName= ListView2->Selected->Caption;
Edit1->Text=FileName;
Panel10->Visible=true;
Panel10->Top=Button7->Top;
Panel10->Left=Button7->Left+Button7->Width;

AFD Ptr;
Ptr=SearchAfdFile(FileName);
if(Ptr->OPenCode==0)
R1->Checked=true;
else R2->Checked=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
String FileName =ListView2->Selected->Caption;
AFD Ptr= SearchAfdFile(FileName);
Form2->Label4->Caption=Ptr->OpenFile;
if(Ptr->OPenCode==0)
Form2->Label5->Caption="只读";
else Form2->Label5->Caption="允许读写";
Form2->Label6->Caption=String(Ptr->RWPointer)+"字节";
Form2->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button9Click(TObject *Sender)
{
String FileName =ListView2->Selected->Caption;
AFD APtr= SearchAfdFile(FileName);
UFD UPtr= SearchUfdFile(FileName);

if(APtr->OpenFile!=UPtr->FileName||APtr->OPenCode!=UPtr->ProtectCode||
APtr->RWPointer!=UPtr->FileLen)
{
if(MessageDlg("< "+APtr->OpenFile+">"+"文件已经被修改!关闭前要保存吗?",
mtInformation,TMsgDlgButtons() << mbOK<<mbNo,2)==mrOk)
{
UPtr->ProtectCode=APtr->OPenCode;
UPtr->FileLen=APtr->RWPointer;
ListView1->Clear();
ShowUfd(Ufd);
}
}
DeleteAfd(FileName,Afd);
ListView2->Clear();
ShowAfd(Afd);
}
//---------------------------------------------------------------------------
bool TForm1::DeleteAfd(String FileName,AFD & Afd)
{ AFD Head,Trail;
Head=Afd;
Trail=Afd->Next;
if(Trail==NULL)
return false;
else {
while(Trail)
{ if(FileName==Trail->OpenFile)
{Head->Next=Trail->Next;
delete Trail;
return true;
}
Head=Trail;
Trail=Trail->Next;
}
}
return false;
//TODO: Add your source code here
}
bool TForm1::DeleteUfd(String FileName,UFD & Ufd)
{ UFD Head,Trail;
Head=Ufd;
Trail=Ufd->Next;
if(Trail==NULL)
return false;
else {
while(Trail)
{ if(FileName==Trail->FileName)
{Head->Next=Trail->Next;
delete Trail;
return true;
}
Head=Trail;
Trail=Trail->Next;
}
}
return false;
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{ String FileName=ListView2->Selected->Caption;

if(MessageDlg("确定要删除文件吗",
mtInformation,TMsgDlgButtons() << mbOK<<mbNo,3) ==mrOk)
{
DeleteUfd(FileName,Ufd);
DeleteAfd(FileName,Afd);
ListView1->Clear();
ListView2->Clear();
ShowAfd(Afd);
ShowUfd(Ufd);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListView2Change(TObject *Sender, TListItem *Item,
TItemChange Change)
{
if(Item->Selected)
{Button6->Enabled=true;
Button7->Enabled=true;
Button9->Enabled=true;
Button5->Enabled=true;

}
else
{
Button6->Enabled=false;
Button7->Enabled=false;
Button9->Enabled=false;
Button5->Enabled=false;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListView1Change(TObject *Sender, TListItem *Item,
TItemChange Change)
{
if(Item->Selected)
{Button3->Enabled=true;

StaBar->Panels->Items[0]->Text="当前文件:"+Item->Caption+"\t"+Item->SubItems->Strings[1];
StaBar->Panels->Items[1]->Text=Item->SubItems->Strings[1];
}
else
{Button3->Enabled=false;

UFD Ptr=Ufd->Next;
int sum=0;
while(Ptr)
{sum+=Ptr->FileLen;
Ptr=Ptr->Next;
}
StaBar->Panels->Items[0]->Text="共有"+String(ListView1->Items->Count)+"个文件\t"+String(sum)+"字节";
StaBar->Panels->Items[1]->Text=String(sum)+"字节";

 

}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
int i=ListView1->ItemIndex;
if(i>=0&&i<=ListView1->Items->Count)
Button3Click(this);
}
//---------------------------------------------------------------------------

void TForm1::Logout()
{ UFD Utem,UPtr=Ufd->Next ;
AFD Atem,APtr=Afd->Next;

Utem=Ufd;
Atem=Afd;
while(UPtr)
{Utem->Next=UPtr->Next;
delete UPtr;
UPtr=Utem->Next ;
}
while (APtr)
{
Atem->Next=APtr->Next;
delete APtr;
APtr=Atem->Next;
}

 

//TODO: Add your source code here
}
void __fastcall TForm1::Button10Click(TObject *Sender)
{

Logout();
ListView1->Clear();
ListView2->Clear();
Button2->Enabled=true;
Button10->Enabled=false;
}

  本课程设计包含完整源程序、可执行程序、设计文档。

 上一篇:操作系统之存储管理课程设计
 下一篇:编译原理课程设计报告
本文版权归本站所有,欢迎转载。转载该文章时,请注明“来源:论文百事通 Http://www.lwbst.com”。
 
Copyright (C) 2008 Lwbst.com, All Rights Reserved 版权所有 论文百事通