操作系统课程设计.docx

上传人:b****0 文档编号:17129188 上传时间:2023-07-22 格式:DOCX 页数:22 大小:190.20KB
下载 相关 举报
操作系统课程设计.docx_第1页
第1页 / 共22页
操作系统课程设计.docx_第2页
第2页 / 共22页
操作系统课程设计.docx_第3页
第3页 / 共22页
操作系统课程设计.docx_第4页
第4页 / 共22页
操作系统课程设计.docx_第5页
第5页 / 共22页
操作系统课程设计.docx_第6页
第6页 / 共22页
操作系统课程设计.docx_第7页
第7页 / 共22页
操作系统课程设计.docx_第8页
第8页 / 共22页
操作系统课程设计.docx_第9页
第9页 / 共22页
操作系统课程设计.docx_第10页
第10页 / 共22页
操作系统课程设计.docx_第11页
第11页 / 共22页
操作系统课程设计.docx_第12页
第12页 / 共22页
操作系统课程设计.docx_第13页
第13页 / 共22页
操作系统课程设计.docx_第14页
第14页 / 共22页
操作系统课程设计.docx_第15页
第15页 / 共22页
操作系统课程设计.docx_第16页
第16页 / 共22页
操作系统课程设计.docx_第17页
第17页 / 共22页
操作系统课程设计.docx_第18页
第18页 / 共22页
操作系统课程设计.docx_第19页
第19页 / 共22页
操作系统课程设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统课程设计.docx

《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(22页珍藏版)》请在冰点文库上搜索。

操作系统课程设计.docx

操作系统课程设计

江苏大学京江学院

JIANGSUUNIVERSITY

操作系统课程设计

 

文件管理系统

 

学院名称:

京江学院

专业班级:

J计算机1401

学号:

4141110020

学生姓名:

潘庆

指导教师:

林琳

 

2017年1月

一、课设目的

操作系统是计算机专业的一门专业课,也是计算机专业考研课程,但操作系统比较抽象,有的同学一学期完了都还很难理解进程、内存管理等一些概念和原理,操作系统课程设计的目的就是通过设计的实验,让同学们真正理解进程的实现,内存管理的机制,达到理解概念,了解实现原理。

同时也进一步巩固程序设计与数据结构的实践技能,实现整个大学阶段实践技能不断线的目的。

二、课设题目

实现一个简单的文件管理系统

(1)具有文件目录(一级或者多级)

(2)对指定大小的磁盘(设共1GB,每个块为1MB),建立位示图进行管理

(3)文件操作,包括新建、查看属性、删除

新建文件:

给出文件名、大小、建立时间等信息,系统为其分配硬盘空间,并记录在文件目录中

查看属性:

给出文件名,可以输出该文件的所有属性,以及该文件所占用的物理块号。

删除文件:

给出文件名,实现文件的删除

(4)文件系统操作:

显示文件列表、显示磁盘空间剩余大小、输出位示图。

三、系统功能结构

四、主要数据结构

创建文件:

creatfile<文件名>,即创建一个指定名字的新文件,在目录中增加一项,不考虑文件的内容,对于重名文件,给出错误信息。

删除文件:

deltefile<文件名>,即删除一个指定名字的已创建文件,若文件不存在则给出错误信息。

输出文件列表:

disp(),即显示指定目录下的全部文件和第一级子目录,若无指定目录,则显示当前目录下的相应内容。

输出文件属性:

disp2(),即给出文件名,可以输出该文件的所有属性,以及该文件所占用的物理块号。

输出位示图:

bit_map(),即输出当前状态下磁盘盘块的使用情况。

五、系统使用说明

文件管理系统主菜单界面(通过输入对应数字进入相应功能子菜单)

“新建文件”功能(需要输入文件名、文件大小和创建时间)

 

“查看属性”功能(输入文件名后,会显示其大小,所占盘块数,所占盘块号和创建时间)

“显示文件列表”功能

 

“显示磁盘空间剩余大小”功能

“输出位示图”功能

“删除文件”功能(输入文件名即可将其删除)

六、课程设计中遇到的问题及解决方法

刚开始做这个实验时,考虑的因素并没有很周全,比如创建文件和删除文件均没有考虑例外因素,都是在后期检查时发现的疏漏,另外,将文件管理的理论用C++来实现也需要自己从巩固书本概念做起,虽然书上并没有给出完整的算法,但是通过类比及网上查阅相关算法,自己也便可以写出以C++实现的各个功能模块,然后将其整合到文件类和文件库类两个大类中,使整个程序的结构更清晰,主函数用来实现界面和选择功能,用简单的switch-case语句便可以实现,值得注意的是,这边很容易会忽视清屏,导致输出结果很繁杂,用简单的system("cls")命令即可实现清屏。

这次课程设计不仅是对自己掌握的操作系统知识的检验,更是对实践能力的检验,在这次课程设计过程中,我发现了许多课堂上或考试中并没有留意的知识点,通过翻阅书本,查阅网络才将它们重拾,这充分说明了我在学习这门课时还是偏向了课堂上的要点,但毕竟课堂上老师不可能强调所有知识点,自己还是要注意课后的复习以及动手实践,才能更好地巩固知识点,而且我也意识到自己并不能仅仅拘泥于课本上的知识,很多学科前沿的知识也要去了解,这样对以后的就业才有帮助。

 

七、带注释的代码

#include

#include

#include

usingnamespacestd;

inti=0,j=0,sum=0,tt=0,ii,ss;//i,j是位视图行列,sum是位视图存储到的盘块数,tt是文件已占用块数,ii是文件编号,ss是磁盘剩余块数

inta[32][32];

//*****************************************************************************************************

classfile//文件类

{

private:

stringname;//文件名

public:

inttag_delete;//删除标记1:

已删0:

未删

intlength;//文件大小

intblocknum;//盘块数

intblocksum1;//所占盘块号的起点

intblocksum2;//所占盘块号的终点

stringtime;//文件建立时间

file(){}

stringgetname(){returnname;}//获取文件名

intgettag_delete(){returntag_delete;}//获取删除标记

intgetblocksum1()//磁盘块号的起点

{

returnblocksum1;

}

intgetblocksum2()//磁盘块号的终点

{

returnblocksum2;

}

voidcreatna,intlength,stringtime)//创建文件

{

tag_delete=0;

name=na;

this->time=time;

blocknum=length;//盘块数=文件大小/盘块大小

if((j+blocknum)<=32)//所有盘块数只占用一行,直接赋值位视图赋值

{

for(;j<(sum+blocknum);j++)

{

a[i][j]=1;

}

sum=sum+blocknum;//再进行下面文件的盘块数累加

}

else

{//占用多行,先赋值整行

for(;j<32;j++)

{

a[i][j]=1;

}

:

:

i=i=i+1;

for(j=0;j<(sum+blocknum)-32*i;j++)//再进行剩余项赋值

{

a[i][j]=1;

}

:

:

sum=sum=sum+blocknum;

}

:

:

tt=tt=tt+blocknum;//输出文件已占用的盘块号

blocksum1=sum-blocknum;

blocksum2=sum-1;

}

voiddisp()//输出文件列表

{

cout<

}

voiddisp2()//输出文件属性

{

cout<

}

};

//*****************************************************************************************************

classfdatabase//文件库类

{

private:

filef[50];

public:

fdatabase()//构造函数

{

}

intsearch(stringfname)//按文件名查找判断是否存在

{

for(inti=0;i<50;i++)

{

if((f[i].getname()==fname)&&(f[i].tag_delete==0))//文件名一样而且未删

{

return0;

}

}

return1;

}

intcreatna,intlength,stringtime)

{

intp;

p=search(na);//创建文件时先查找是否存在

if(p==1)

{

f[ii].creat);//创建文件

:

:

ii++;

return1;

}

else

{

cout<<"\n!

!

!

该文件已存在,不能创建!

!

!

\n\n";

return0;

}

}

intdeltena)//删除文件

{

intx=0,n1,n2,q1,q2,k;

for(inti=0;i<50;i++)

{

if(getname(i)==na)

{//进行删除文件赋值

f[i].tag_delete=1;

tt=tt-f[i].blocknum;

if(i==0)//位视图中删除文件从第一盘块开始

{

for(k=0;k

{

a[x][k]=0;

}

}

else//位视图中删除文件从其它盘快开始

{

n1=(f[i-1].blocksum2+1)/32;//被查找的文件之前文件所占用的盘块数/32,//n1表示位视图开始操作的行

n2=(f[i].blocksum2+1)/32;//所有文件所占用的盘块数/32,//大于0表示跨行//n2表示位视图结束操作的行

q1=f[i].blocksum1%32;//位视图开始的列

q2=f[i].blocksum2%32;//位视图结束的列

if(n1==n2)//若n2与n1相等,表明当前所有被占用盘块在同一行

{

for(k=q1;k

{

a[n1][k]=0;

}

}

else

{

for(;n1

{

for(intl=0;l<32;l++)//循环进行整行赋值

{

a[n1][l]=0;

}

}

for(k=0;k

{

a[n2][k]=0;

}

}

}

return1;

}

}

return0;

}

voiddisp()//输出所有文件列表

{

for(inti=0;i<=ii;i++)

{

if(f[i].tag_delete==0)

{

f[i].disp();

}

}

}

voiddisp2(filef)//输出文件属性

{

f.disp2();

}

stringgetname(intn)

{

returnf[n].getname();

}

(intn)

{

returnf[n];

}

};

//*****************************************************************************************************

voidbit_map()//位视图

{

ints=0;

cout<<"---------------------------------------------------------------"<

for(intp=0;p<32;p++)

{

for(intq=0;q<32;q++)

{

cout<

}

cout<

}

cout<<"----------------------------------------------------------------"<

for(intp1=0;p1<32;p1++)

{

for(intq1=0;q1<32;q1++)

{

if(a[p1][q1]==1)

{

s=s+1;

}

}

}

}

//*****************************************************************************************************

voidmain()

{

intI,l,sum=0;

stringtime;

stringfname;

fdatabasep;

I=1024/32;

for(inti=0;i

{

for(intj=0;j<32;j++)

{

a[i][j]=0;

}

}

charchoice;

charchoice2;

charchoice3;

while(choice!

='0')

{

choice='1';

choice2='1';

choice3='1';

cout<<"文件管理系统\n";

cout<<"************************************************\n";

cout<<"1.文件操作\n\n";

cout<<"2.文件系统操作\n\n";

cout<<"3.退出文件管理系统\n\n";

cout<<"************************************************\n";

cout<

";

cin>>choice;

system("cls");

switch(choice)

{

case'1':

{

while(choice2!

='0')

{

cout<<"文件操作:

\n";

cout<<"*******************************************\n";

cout<<"1.新建文件\n\n";

cout<<"2.查看属性\n\n";

cout<<"3.删除文件\n\n";

cout<<"4.返回主菜单\n\n";

cout<<"*******************************************\n";

cout<

";

cin>>choice2;

cout<

switch(choice2)

{

case'1':

{

cout<<"请输入文件名:

";

cin>>fname;

cout<

cout<<"请输入文件大小MB:

";

cin>>l;

cout<

cout<<"请输入文件创建时间:

";

cin>>time;

p.creat);

break;

}

case'2':

{

cout<<"请输入需要查看的文件名:

";

cin>>fname;

cout<

intq;

q=p.search(fname);

if(!

q==0)

{

cout<<"!

!

!

该文件不存在,无法查看!

!

!

\n\n";

break;

}

cout<<"文件属性如下:

\n";

for(intn=0;n<50;n++)

{

if(p.getname(n)==fname)

{

cout<

p.disp2(p.File(n));

break;

}

}

cout<

break;

}

case'3':

{

cout<<"请输入要删除的文件名:

";

cin>>fname;

cout<

intq;

q=p.search(fname);

if(!

q==0)

{

cout<<"!

!

!

该文件不存在,无法删除!

!

!

\n\n";

break;

}

p.delte);

break;

}

case'4':

choice2='0';

break;

default:

cout<<"输入错误,请重新输入:

\n\n";

}

cin.get();

cin.get();

system("cls");

}

break;

}

case'2':

{

while(choice3!

='0')

{

cout<<"文件系统操作:

\n";

cout<<"*******************************************\n";

cout<<"1.显示文件列表\n\n";

cout<<"2.显示磁盘空间剩余大小\n\n";

cout<<"3.输出位视图\n\n";

cout<<"4.返回主菜单\n\n";

cout<<"*******************************************\n";

cout<

";

cin>>choice3;

cout<

switch(choice3)

{

case'1':

{

cout<<"*************文件列表如下************************\n";

cout<<"文件名"<

p.disp();

cout<

break;

}

case'2':

{

cout<<"剩余磁盘空间为:

"<<1024-tt<

break;

}

case'3':

{

cout<<"**************显示位示图如下*********************\n";

bit_map();

break;

}

case'4':

choice3='0';

break;

default:

cout<<"输入错误,请重新输入:

\n\n";

}

cin.get();

cin.get();

system("cls");

}

break;

}

case'3':

cout<<"成功退出系统\n";

exit(0);

break;

default:

cout<<"输入错误,请重新输入!

!

!

\n";

break;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2