1课程设计报告文件管理系统计算机操作系统.docx
《1课程设计报告文件管理系统计算机操作系统.docx》由会员分享,可在线阅读,更多相关《1课程设计报告文件管理系统计算机操作系统.docx(20页珍藏版)》请在冰豆网上搜索。
1课程设计报告文件管理系统计算机操作系统
第一部分概述
1.1系统开发背景
1.1.1文件系统的意义
在现代计算机系统中,要用到大量的程序和数据,由于内存容量有限,且不能长期保存,故而平时总是把他们以文件的形式存放在外存中,需要时可随时将它们调入内存。
如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,还必须能保持数据的安全性和一直性。
显然,这是用户所不能胜任的工作。
取而代之的,便是在操作系统中增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取,共享和保护等手段提供给用户。
这不仅方便了用户,保证了文件的安全性,还有效的提高了系统资源利用率。
1.1.2开发背景
(1)所设计软件名称:
文件管理系统
(2)本软件的提出者:
(3)本软件的设计者:
1.1.3软件开发工具
(1)MICROSOFTWINDOWS2000
(2)BORLANDC++BUILDER6.0
1.1.4软件开发技术
(1)C++程序设计
(2)软件工程开发过程各阶段分析
(3)
1.2系统功能介绍及目标
1.2.1系统实现功能
(1)多用户、多级目录(注:
本设计最多10个用户,实现3级目录)。
设置目录MFD和用户文件目录UFD,另外还为打开文件设置了运行文件目录AFD。
(2)至少有10个实用的文件操作命令(注:
本设计可实现创建和删除目录,创建和删除文件,以及打开和关闭文件等功能)。
(3)设计一个既简单又实用的用户界面。
第二部分需求分析
2.1项目概述及数据流图
2.1.1系统的一般概述
使用高级语言编写简单的文件系统,模拟文件管理的工作过程。
实现多用户文件管理,允许创建和删除文件,对文件属性设置保护。
采用多级文件目录。
2.1.2系统的功能数据流图
层次框图
系统顶层数据流图
系统二层数据流图
2.2功能需求分析
2.2.1功能划分
用户管理功能
身份验证功能
目录管理功能
文件管理功能
文件属性管理功能
帮助功能
2.2.2功能描述
(1)用户管理功能
允许用户进行注册,管理不同用户。
允许注销用户,即删除该用户。
(2)身份验证功能
用户登陆,系统验证其合法性。
(3)目录管理功能
目录管理,进行创建,删除…..等操作。
(4)文件管理功能
管理文件,可进行创建文件,删除,打开,关闭,读,写等操作。
(5)文件属性管理功能
设置文件属性,如读写文件,只读文件,可写文件。
(6)帮助功能
为用户提供使用帮助。
2.3外部接口需求分析
2.3.1用户界面
采用WINDOWS的通用图形界面,对用户友好,且对鼠标和键盘提供帮助,界面的设计遵循以下规则:
a.界面要具有一致性,界面规范遵循WINDOWS软件的界面规范;
b.提供简单的错误处理
c.提供信息反馈,用信息提示用户当前用户软件运行状态,软件界面元件的功能;
d.操作可逆,其动作可以是单个的操作,或是一个相对独立的操作序列;
e.显示启动画面,画面简洁明快,富有时代气息,不太过花哨;
f.遵循国家关于计算机词汇的标准,用词准确,无二义,图形意义明朗;
2.3.2接口需求
(1)硬件接口
支持一般的PⅡ或更高档微机,笔记本电脑。
(2)软件接口
运行于WINDOWS95/98/ME/2000/NT/XP,且具有WIN32API的操作系统上。
(3)故障处理
正常使用时不应出错,就算出现出错,也应该保证数据库无损。
2.4性能需求及软件属性需求
2.4.1性能需求
(1)数据精确性
(2)时间特性:
对一般操作的响应时间不超过1-2秒。
(3)适应性:
满足用户使用需求,对运行环境应不存在困难。
2.4.2软件属性要求
(1)正确性:
所开发软件达到预期目标,运行不出错。
(2)可靠性:
不应出现故障。
(3)完整性:
在出现错误情况下,保证数据不丢失。
(4)易用性:
几面使用当前流行规范,方便用户。
(5)安全性:
提供身份验证,保证安全。
(6)其他特性:
可维护性,可理解性,可测试性等。
第三部分概要设计
3.1总体设计
3.1.1处理流程
系统运行的处理流程如下:
(1)系统启动时,激活身份验证模块。
A.若用户不存在,则进行注册。
B.若用户已存在,则登录系统。
(2)通过身份验证后,系统初始化。
根据系统配置将数据导入。
(3)进入消息循环状态,通过事件驱动机制激活功能模块,并执行指定模块。
(4)各功能执行完毕后,重新进入消息循环状态。
(5)由关闭事件激活关闭功能,退出系统。
3.1.2总体结构和模块外部设计
A.总体结构图(见2页)
B.模块设计表
模块编号
模块名称
备注
M1.1
系统初始化模块
系统初始化
M1.2
关闭系统模块
关闭并退出系统
M1.3
身份验证模块
验证用户身份
M1.4
用户管理模块
管理系统用户
M2
目录管理模块
创建,删除目录
M3
文件管理模块
创建,删除文件
M4
文件属性管理模块
修改文件属性
M5
帮助模块
增加,删除,修改记录
3.2结构设计
3.2.1控件的关联
void__fastcallTfrmMain:
:
mmuExitClick(TObject*Sender)
{
}
关联退出事件;
void__fastcallTfrmMain:
:
FormCreate(TObject*Sender)
{
}
主窗体的创建生成;
void__fastcallTfrmMain:
:
mmuRegClick(TObject*Sender)
{
}
用户注册的关联;
void__fastcallTfrmMain:
:
mmuLogClick(TObject*Sender)
{
}
用户登陆关联;
void__fastcallTfrmMain:
:
PageControl1Change(TObject*Sender)
{
}
用户登陆页;
void__fastcallTfrmMain:
:
btnRegClick(TObject*Sender)
{
}
对注册单击事件的实现;
void__fastcallTfrmMain:
:
btnLogClick(TObject*Sender)
{
}
对用户登陆单击事件的实现;
void__fastcallTfrmMain:
:
mmuCreateDirClick(TObject*Sender)
{
}
目录创建的关联;
void__fastcallTfrmMain:
:
mmuDelDirClick(TObject*Sender)
{
}
删除目录的关联;
void__fastcallTfrmMain:
:
update()
{
}
返回上层目录;
void__fastcallTfrmMain:
:
DisplayFile()
{
}
显示文件;
void__fastcallTfrmMain:
:
DisplayDir()
{
}
显示目录;
void__fastcallTfrmMain:
:
ListView1DblClick(TObject*Sender)
{
}
列表显示双击的实现;
void__fastcallTfrmMain:
:
pmuDelClick(TObject*Sender)
{
}
目录搜索删除然后修改列表;
3.2.2存储结构
在secret.txt文件中,unum为当前用户数,占2个字符;每个用户的用户名和用户密码各用10个字符来表示。
在user1.txt文件,dnum为该用户下的目录数;fnum为该用户下的文件数;dir1……dir10为该用户下的目录,每个用户名占10个字符,剩下的5个字符用以存放这个目录下一级的文件数;sfile1……sfile10为dir1下的文件,每个文件名用10个字符,文件类型用10个字符;sfile11……sfile20为dir2下的文件,sfile21……sfile30为dir3下的文件,依此类推。
3.2.3程序的主要结构
(1)用户登陆
FILE*fp=fopen();//分配空间
for()
{//查找用户名,如不存在,需先注册;
}
if(){} //用户名正确,如果密码错误
if(){}//显示提示消息
else{
//进入该用户目录;
}
fclose();//关闭文件流
(2)目录的创建和删除
if(){}//c_d是标识是创建还是删除目录;
for()//不允许同名目录的存在;
{}
if(){
}//如果目录已经存在,显示提示消息
else{//创建文件目录
}
elseif()//如果是删除
{
for()//查找已有目录;
{ //如果目录不存在,删除操作失败;
for()
if()//如果目录不存在改变标识
}
if(){}//目录不存在显示提示消息
else{//查找到文件夹删除它
}
(3)文件的创建和删除
if()//sub是标示是创建一级还是二级文件
FILE*fp4=fopen();
//查找已有文件;
for()//不允许同名文件的存在;
{}
if(){}//如果存在提示
else{//由此创建新文件;
fwrite();//写如文件流
}
fclose();//关闭文件流
}
删除文件与此类似。
第四部分详细设计
1.头文件和全局变量的定义
//////////////////////////////////////////////////////
//头文件
//////////////////////////////////////////////////////
#include
#include"main.h"
#include
//////////////////////////////////////////////////////
#pragmahdrstop
#pragmapackage(smart_init)
#pragmaresource"*.dfm"
TfrmMain*frmMain;
//////////////////////////////////////////////////////
//全局变量定义
//////////////////////////////////////////////////////
intunum;//用户号
intNO=1;//用户id
intdnum;//目录号
intfnum;//文件号
intsfnum;
intc_d=0;
intsub=0;
inttop;
2.用户的注册和登陆
void__fastcallTfrmMain:
:
btnRegClick(TObject*Sender)
{
N2->Enabled=true;
N5->Enabled=true;
if(unum==10)
{
ShowMessage("用户人数己满!
");
}
else
{
FILE*fp=fopen("secret.txt","r+");
intj=unum;intlog=0;
charbuf[10];AnsiStringtmp1,tmp2;
tmp2=Trim(edtName->Text);
for(;j>0;j--)////////////////////////名字搜索
{
fseek(fp,100L*j,0);
for(inti=0;i<10;i++)
{
buf[i]='\0';
}
fread(buf,sizeof(char),tmp2.Length(),fp);
tmp1=AnsiString(buf);
if(tmp1==tmp2)
{
log=1;
}
}
if(log==1)
{
ShowMessage("用户名已经存在!
");
}
else
{
tmp1=Trim(edtName->Text);///////////////////注册
j=unum+1;
fseek(fp,100L*j,0);
fwrite(tmp1.c_str(),sizeof(char),tmp1.Length(),fp);
tmp1=Trim(edtSec->Text);
fseek(fp,100L*j+10,0);
fwrite(tmp1.c_str(),sizeof(char),tmp1.Length(),fp);
unum++;///////////////////////用户增加
tmp2=compute(unum);
fseek(fp,0L,0);
fwrite(tmp2.c_str(),sizeof(char),2,fp);
////////////////////////////////进入该用户目录
NO=unum;
dnum=0;
fnum=0;
TabSheet2->Caption="用户:
"+edtName->Text;
TabSheet2->TabVisible=true;
StatusBar2->Panels->Items[1]->Text=edtName->Text;
StatusBar2->Panels->Items[3]->Text="";
StatusBar2->Panels->Items[5]->Text="";
StatusBar2->Panels->Items[7]->Text="";
edtSec->Text="";
PageControl1->ActivePage=TabSheet2;
}
fclose(fp);
}
}
3.文件夹的创建和删除
if(c_d==0)//////////////判断是创建还是删除目录;
{
TListItem*ListItem;
charbuf[10];
AnsiStringtmp1,tmp2;intlog=0;
tmp1=compute2(NO);
FILE*fp2=fopen(tmp1.c_str(),"r+");
tmp1=edtUserName->Text; //////查找已存在的目录;
for(intj=dnum;j>0;j--)//////////不允许同名目录的存在;
{
for(inti=0;i<10;i++)
{
buf[i]='\0';
}
fseek(fp2,100L+15*(j-1),0);
fread(buf,sizeof(char),tmp1.Length(),fp2);
tmp2=AnsiString(buf);
if(tmp1==tmp2)
{
log=1;
}
}
if(log==1)ShowMessage("目录已经存在!
");
else{
ListItem=ListView1->Items->Add();///////由此创建新目录;
ListItem->Caption=edtUserName->Text;
ListItem->ImageIndex=0;
ListView1->Selected=ListItem;
fseek(fp2,100L+15*dnum,0);
fwrite(ListItem->Caption.c_str(),sizeof(char),ListItem->Caption.Length(),fp2);
tmp1=compute(0);
fseek(fp2,100L+15*dnum+10,0);
fwrite(tmp1.c_str(),sizeof(char),2,fp2);
dnum++;
tmp1=compute(dnum);
fseek(fp2,0L,0);
fwrite(tmp1.c_str(),sizeof(char),2,fp2);
}
fclose(fp2);
}
elseif(c_d==1)
{
chardir[15];AnsiStringtmp1,tmp2;intlog=0;
tmp1=compute2(NO);
tmp2=edtUserName->Text;
FILE*fp3=fopen(tmp1.c_str(),"r+");
for(intj=dnum-1;j>=0;j--)////////////////查找已有目录;
{ /////////////////////////////如果目录不存在,删除操作失败;
for(inti=0;i<15;i++)dir[i]='\0';
fseek(fp3,100L+15*j,0);
fread(dir,sizeof(char),tmp2.Length(),fp3);
tmp1=AnsiString(dir);
if(tmp2==tmp1)log=j+1;
}
if(log==0){ShowMessage("目录名不存在!
!
!
");
}
else{
for(intj=1;j<=dnum-log;j++)///////////由此删除目录;
{
fseek(fp3,100L+15*(log+j-1),0);
for(inti=0;i<15;i++)dir[i]='\0';
fread(dir,sizeof(char),15,fp3);
fseek(fp3,100L+15*(log+j-2),0);
fwrite(dir,sizeof(char),15,fp3);
}
dnum--;
tmp1=compute(dnum);
fseek(fp3,0L,0);
fwrite(tmp1.c_str(),sizeof(char),2,fp3);
update();
}
fclose(fp3);
}
4.文件的创建和删除
if(sub==0)
{//sub是标示是创建一级还是二级文件;
AnsiStringtmp1,tmp2;charbuf[10];intlog=0;
tmp1=compute2(NO);
FILE*fp4=fopen(tmp1.c_str(),"r+");
tmp2=edtFileName->Text;//////////查找已有文件;
for(intj=fnum-1;j>=0;j--)///////////////不允许同名文件的存在;
{
for(inti=0;i<10;i++)
{
buf[i]='\0';
}
fseek(fp4,3000L+20*j,0);
fread(buf,sizeof(char),tmp2.Length(),fp4);
tmp1=AnsiString(buf);
if(tmp2==tmp1)log=j+1;
}
if(log!
=0){ShowMessage("文件已存在!
");}
else{
TListItem*ListItem;/////////////由此创建新文件;
ListItem=ListView1->Items->Add();
ListItem->Caption=edtFileName->Text;
ListItem->ImageIndex=2;
ListView1->Selected=ListItem;
fseek(fp4,3000L+20*fnum,0);fwrite(ListItem->Caption.c_str(),sizeof(char),ListItem->Caption.Length(),fp4);
fseek(fp4,3000L+20*fnum+10,0);
tmp1=compute(cbxStyle->ItemIndex);
fwrite(tmp1.c_str(),sizeof(char),2,fp4);
fnum++;
tmp1=compute(fnum);
fseek(fp4,2L,0);
fwrite(tmp1.c_str(),sizeof(char),2,fp4);
}
fclose(fp4);
}
else{
AnsiStringtmp1,tmp2;charbuf[10];intlog=0,log2=0;
tmp1=compute2(NO);
FILE *fp4=fopen(tmp1.c_str(),"r+");
tmp2=StatusBar2->Panels->Items[1]->Text;
for(intj=dnum-1;j>=0;j--)///////////////查找已有文件;
{
for(inti=0;i<10;i++)buf[i]='\0';
fseek(fp4,100L+15*j,0);
fread(buf,sizeof(char),tmp2.Length(),fp4);
tmp1=AnsiString(buf);
if(tmp2==tmp1)log=j;
}
tmp2=edtFileName->Text;
for(intj=sfnum-1;j>=0;j--)
{
for(inti=0;i<10;i++)buf[i]='\0';
fseek(fp4,1000L+200*log+20*j,0);
fread(buf,sizeof(char),tmp2.Length(),fp4);
tmp1=AnsiString(buf);
if(tmp2==tmp1)log2=j+1;
}
if(log2!
=0){ShowMessage("文件已经存在!
!
!
");
}
else{
TListItem*ListItem;////////////////////由此创建新文件
ListItem=ListView1->Items->Add();
ListItem->Caption=edtFileName->Text;
ListItem->ImageIndex=2;
ListView1->Selected=ListItem;
fseek(fp4,1000L+200*log+20*sfnum,0);fwrite(ListItem-