胡浩亮课程设计报告Word文件下载.docx
- 文档编号:7396933
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:31
- 大小:188.47KB
胡浩亮课程设计报告Word文件下载.docx
《胡浩亮课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《胡浩亮课程设计报告Word文件下载.docx(31页珍藏版)》请在冰点文库上搜索。
建立一个系统文件(模拟盘),并对此进行盘块的划分,第一个盘块存放文件目录,第二盘块存放盘块位示图,自第三个盘块开始存放各具体文件的内容,文件目录存放文件的名字,文件的扩展名,开始盘块号,所占用的盘块数目,文件的大小;
盘块位示图用来标记盘块是否被占用。
构造这些实体的关系图,数据流图、程序流程图来进行具体的设计。
第二章数据结构、算法和算法流程图
2.1数据结构
数据结构说明:
本程序所运用的主要有两个数据结构,分别如下:
文件目录结构:
structfilename{//文件目录项结构体
charname[9];
//文件名
charext[4];
//扩展名
inti;
//文件所占用磁盘块的第一个磁盘块号
intAmount;
//文件所占用磁盘块的块数
longintsize;
//文件大小
};
盘块结构:
structempty{//盘块结构体
intmap[100];
//盘块位示图
intfilenum;
//文件数量
2.2程序功能图
文件系统提供的文件操作有建立文件(mkfile)、复制文件(copy)、显示文件所有内容(type)、删除文件(delfile)。
可以通过键盘输入命令来模拟文件的操作。
2.3程序流程图
(1)主程序流程图:
(2)初始化模块流程图:
(3)写入磁盘流程图:
(4)显示目录流程图:
(5)显示文件流程图:
(6)删除文件流程图:
(7)复制文件流程图:
(8)创建文件流程图:
第三章程序运行结果及分析
3.1程序运行结果
(1)程序主界面
(2)创建一个文件,输入“3”显示“输入文件内容,按@键保存且退出!
”
(3)往文件里写内容:
HelloWorld!
显示文件长度,并要求给文件命名,命名后保存返回主界面
(4)读取刚才写入的文件,结果正确
(5)删除刚写入的文件,测试成功
对于测试用例,还有很多路径都有测试过,鉴于篇幅,就不再列出所有可能的路径来进行白盒测试。
3.2程序分析
本程序使用一个Windows下的文件来模拟一个磁盘,向磁盘中装入文件并进行相关操作。
采用了以空间换时间的算法,文件的大小在系统中是固定的,虽然会浪费一些空间,但文件的存取速率会加快。
第四章心得体会
通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和知识,加深了对文件系统基本概念的理解,以及磁盘文件系统的文件操作。
还有让我感受挺深的是对软件工程方法的应用。
设计一个软件,先要做好需求分析,这一点很重要,如果没有分析好需求,到软件设计的最后,发现所做的功能不符合要求,那么一切都得重做,前面所有的努力都付诸东流。
还有比较重要的是,画好程流程图。
在程序设计的开始,由于分析工作做得不够深入和细致,吃了点小苦头。
对于这样一个小设计来说,都会吃苦头,要是大工程更是无法想像,有可能会项目失败。
以后得加强对软件工程的学习。
另外在运用C语言的时候,感觉有点生疏,在组织语言时时而出错,在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题的解决方案。
在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。
在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单,可以使我们的查错与纠错变的更方便。
总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。
我相信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展和提高。
参考文献
[1]张尧学编.计算机操作系统教程(第三版)习题解答与实验指导.北京:
清华大学出版社,2006
[2]汤子瀛主编.计算机操作系统(第三版).西安:
西安电子科技大学出版社,2001
[3]CSDN论坛.
附录程序清单
#include"
iostream.h"
string"
stdio.h"
extern"
C"
voidexit(int);
structfilename//文件目录项结构体
{
}file[11];
intnum;
structempty//盘块结构体
{intmap[11];
intfilenum;
}emptytable;
//☆模块说明:
voidSystemInit()//模拟磁盘文件初始化函数
{for(inti=2;
i<
10;
i++)//初始化存放位示图的盘块
emptytable.map[i]=0;
emptytable.map[0]=1;
emptytable.map[1]=1;
emptytable.filenum=0;
FILE*fp;
if((fp=fopen("
filesys"
"
wb+"
))==NULL)//wb+:
为读写建立一个"
新"
文件;
打开系统文件将文件目录盘块和
{//位示图盘块写入系统文件
printf("
cannotopenfile\n"
);
exit(0);
}
fseek(fp,512L,0);
fwrite(&
emptytable,sizeof(structempty),1,fp);
fclose(fp);
printf("
初始化系统成功"
}
voidWriteFile()//将目录以及空闲盘块表写入磁盘
{
rb+"
))==NULL)
{
rewind(fp);
for(inti=0;
num;
i++)
fwrite(&
file[i],sizeof(structfilename),1,fp);
//////////////////////文件目录
////////////////////////////位示图
voiddir()//显示文件目录
{inti,j;
rb"
{printf("
}
//空闲盘块表的定位
fread(&
//文件目录表的定位
num=emptytable.filenum;
for(i=0;
if(num!
=0)
系统文件目录结构:
\n"
for(i=0,j=1;
i++,j++)
{
%s.%s\n"
file[i].name,file[i].ext);
if(j==5)
{printf("
j=1;
}
\n文件数量为%d"
num);
voidtype()//显示文件内容
inti,j;
{fread(&
////////////////////////////
charname[9],ext1[4];
请输入文件名:
gets(name);
//scanf("
%s"
name);
//getchar();
请输入扩展名:
"
gets(ext1);
ext1);
getchar();
if(*(name+0)=='
\0'
)
文件名不能为空!
\n"
return;
if(*ext1=='
)
strcpy(ext1,"
txt"
intsign=0;
for(i=0;
if((strcmp(file[i].name,name)==0)&
&
(strcmp(file[i].ext,ext1)==0))
---找到第%d个文件(从0开始)----\n"
i);
sign=1;
break;
/////////////////////////////////////////////
if(sign==0)
无此文件\n"
//显示文件
intb,m,n;
b=file[i].i;
n=file[i].size;
---该文件位于第%d(从第0块开始)块\n"
b);
///////////////////////
---从文件读出的文件长度为:
%d\n---"
n);
//fseek(fp,b*512L,0);
charcc;
//printf("
---文件内容长度为:
%ld\n"
---文件内容为:
---\n"
for(m=0,j=1;
m<
n;
m++,j++)////////////////////////////////////////////////////
fseek(fp,b*512L+m,0);
//fread(&
cc,sizeof(char),1,fp);
cc=fgetc(fp);
%c"
cc);
if(j%80==0)printf("
voiddelfile()//删除一个文件
{FILE*fp;
r"
charname[9],ext1[3];
gets(ext1);
if(*name=='
if(*ext1=='
)strcpy(ext1,"
charjudge;
是否删除文件%s.%s[y/n]"
name,ext1);
scanf("
&
judge);
getchar();
if((judge=='
y'
)||(judge=='
Y'
))
准备删除文件%s.%s!
elseif((judge=='
n'
N'
return;
else
{
系统默认放弃!
if((strcmp(file[i].name,name)==0)&
(strcmp(file[i].ext,ext1)==0))
break;
文件名错\n"
//回收空间
intb=file[i].i;
intAmount=file[i].Amount;
intj;
for(j=0;
j<
Amount;
j++)
emptytable.map[b++]=0;
for(j=i;
num-1;
{strcpy(file[j].name,file[j+1].name);
strcpy(file[j].ext,file[j+1].ext);
file[j].i=file[j+1].i;
file[j].size=file[j+1].size;
file[j].Amount=file[j+1].Amount;
emptytable.filenum=emptytable.filenum-1;
WriteFile();
voidcopy()//复制一个文件
{FILE*fq;
if((fq=fopen("
exit(0);
fseek(fq,512l,0);
emptytable,sizeof(structempty),1,fq);
rewind(fq);
file[i],sizeof(structfilename),1,fq);
charSourceName[9],DestName[9],ext1[4],ext2[4];
请输入源文件名:
gets(SourceName);
SourceName);
请输入源文件扩展名:
请输入目标文件名:
gets(DestName);
DestName);
请输入目标扩展文件名"
gets(ext2);
ext2);
if(*ext2=='
)strcmp(ext2,"
if((*SourceName)=='
||(*DestName)=='
cout<
<
错误!
文件名不能为空!
;
if(strcmp(SourceName,DestName)==0)
两个文件名不能相等!
i++)
if(strcmp(SourceName,file[i].name)==0)
{
strcpy(file[num].name,DestName);
strcpy(file[num].ext,ext2);
//file[num].i=file[i].i;
file[num].size=file[i].size;
file[num].Amount=file[i].Amount;
/////////////////////
if(i<
num)
输入的文件名与第%d个源文件相等(i从0开始)\n"
////////////////////////
不存在源文件\n"
//空间分配
for(intm=2;
=10-file[num].Amount;
m++)
if(emptytable.map[m]==0)
for(j=file[i].Amount;
j>
0;
j--)//寻找一连续的空闲盘块
if(emptytable.map[m+j-1]==1)
{
sign=1;
break;
}
if(sign==0)break;
m+=j-1;
sign=0;
if(m<
=10-file[num].Amount)
{for(j=0;
j<
file[num].Amount;
emptytable.map[m+j]=1;
file[num].i=m;
没有足够的连续的盘块数"
//写数据
FILE*fq1;
fq1=fq;
fseek(fq,(file[i].i)*512L,0);
\n---源文件的起始盘块号:
%d"
file[i].i);
/////////////////
//rewind(fp1);
fseek(fq1,(file[num].i)*512L,0);
\n---复制文件的起始盘块号:
file[num].i);
//////////////////
\n---源文件内容为:
for(intk=0;
k<
file[i].size;
k++)
fseek(fq,(file[i].i)*512L+k,0);
cc,sizeof(char),1,fq);
////////////////////////////////
fseek(fq1,(file[num].i)*512L+k,0);
cc,sizeof(char),1,fq1);
num=num+1;
emptytable.filenum=num;
//写目录及位示图
fclose(fq);
fclose(fq1);
voidmkfile()//建立一个文件
{structstrNode//数据块
{charword[64];
structstrNode*next;
}*head,*p,*q;
inti=0,j=0;
head=p=q=newstructstrNode;
//申请结构体内存空间
charch;
请输入文件内容,按@键保存且退出!
do{
64;
//ch=getchar();
ch);
p->
word[i]=ch;
if(ch=='
@'
)break
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 胡浩亮 课程设计 报告