1、 江苏大学京江学院JIANGSU UNIVERSITY 操 作 系 统 课 程 设 计文件管理系统学 院 名 称 : 京江学院 专 业 班 级 : J计算机1401 学 号 : 学 生 姓 名 : 潘 庆 指 导 教 师 : 林 琳 年 1 月 一、 课设目标操作系统是计算机专业一门专业课,也是计算机专业考研课程,但操作系统比较抽象,有同学一学期完了全部还极难了解进程、内存管理等部分概念和原理,操作系统课程设计目标就是经过设计试验,让同学们真正了解进程实现,内存管理机制,达成了解概念,了解实现原理。同时也深入巩固程序设计和数据结构实践技能,实现整个大学阶段实践技能不停线目标。二、 课设题目实现
2、一个简单文件管理系统(1)含有文件目录(一级或多级)(2)对指定大小磁盘(设共1GB,每个块为1MB),建立位示图进行管理(3)文件操作,包含新建、查看属性、删除新建文件:给出文件名、大小、建立时间等信息,系统为其分配硬盘空间,并统计在文件目录中查看属性:给出文件名,能够输出该文件全部属性,和该文件所占用物理块号。删除文件:给出文件名,实现文件删除(4)文件系统操作:显示文件列表、显示磁盘空间剩下大小、输出位示图。三、系统功效结构 四、 关键数据结构创建文件:creatfile,即创建一个指定名字新文件,在目录中增加一项,不考虑文件内容,对于重名文件,给犯错误信息。删除文件:deltefile
3、,即删除一个指定名字已创建文件,若文件不存在则给犯错误信息。输出文件列表:disp(),即显示指定目录下全部文件和第一级子目录,若无指定目录,则显示目前目录下对应内容。输出文件属性:disp2(),即给出文件名,能够输出该文件全部属性,和该文件所占用物理块号。输出位示图:bit_map(),即输出目前状态下磁盘盘块使用情况。五、 系统使用说明 文件管理系统主菜单界面(经过输入对应数字进入对应功效子菜单)“新建文件”功效(需要输入文件名、文件大小和创建时间)“查看属性”功效(输入文件名后,会显示其大小,所占盘块数,所占盘块号和创建时间)“显示文件列表”功效“显示磁盘空间剩下大小”功效“输出位示图
4、”功效“删除文件”功效(输入文件名即可将其删除)六、 课程设计中碰到问题及处理方法 刚开始做这个试验时,考虑原因并没有很周全,比如创建文件和删除文件均没有考虑例外原因,全部是在后期检验时发觉疏漏,另外,将文件管理理论用C+来实现也需要自己从巩固书本概念做起,即使书上并没有给出完整算法,不过经过类比及网上查阅相关算法,自己也便能够写出以C+实现各个功效模块,然后将其整合到文件类和文件库类两个大类中,使整个程序结构更清楚,主函数用来实现界面和选择功效,用简单switch-case语句便能够实现,值得注意是,这边很轻易会忽略清屏,造成输出结果很繁杂,用简单system(cls)命令即可实现清屏。 这
5、次课程设计不仅是对自己掌握操作系统知识检验,更是对实践能力检验,在这次课程设计过程中,我发觉了很多课堂上或考试中并没有留心知识点,经过翻阅书本,查阅网络才将它们重拾,这充足说明了我在学习这门课时还是偏向了课堂上关键点,但毕竟课堂上老师不可能强调全部知识点,自己还是要注意课后复习和动手实践,才能愈加好地巩固知识点,而且我也意识到自己并不能仅仅拘泥于书本上知识,很多学科前沿知识也要去了解,这么对以后就业才有帮助。七、带注释代码#include#include#includeusing namespace std;int i=0,j=0,sum=0,tt=0,ii,ss;/i,j是位视图行列,sum
6、是位视图存放到盘块数,tt是文件已占用块数,ii是文件编号,ss是磁盘剩下块数int a3232;/*class file /文件类private:string name; /文件名public:int tag_delete; /删除标识 1:已删 0:未删int length; /文件大小 int blocknum; /盘块数 int blocksum1; /所占盘块号起点 int blocksum2; /所占盘块号终点string time; /文件建立时间file() string getname()return name; /获取文件名 int gettag_delete()retur
7、n tag_delete; /获取删除标识 int getblocksum1() /磁盘块号起点 return blocksum1; int getblocksum2() /磁盘块号终点 return blocksum2; void creatfile(string na,int length,string time) /创建文件 tag_delete=0; name=na;this-time=time; blocknum=length; /盘块数=文件大小/盘块大小if(j+blocknum)=32) /全部盘块数只占用一行,直接赋值 位视图赋值 for(;j(sum+blocknum);j
8、+)aij=1;sum=sum+blocknum; /再进行下面文件盘块数累加else /占用多行,先赋值整行for(;j32;j+)aij=1;:i=i=i+1;for(j=0;j(sum+blocknum)-32*i;j+)/再进行剩下项赋值 aij=1;:sum=sum=sum+blocknum; :tt=tt=tt+blocknum; /输出文件已占用盘块号blocksum1=sum-blocknum;blocksum2=sum-1;void disp() /输出文件列表coutnameendl;void disp2() /输出文件属性coutsetw(8)name setw(8)bl
9、ocknumsetw(18)blocknumsetw(10)blocksum1 to blocksum2setw(15)timeendl;/*class fdatabase /文件库类 private: file f50;public:fdatabase() /结构函数 int search(string fname) /按文件名查找判定是否存在for (int i=0;i50;i+)if (fi.getname()=fname) & (fi.tag_delete=0)/文件名一样而且未删return 0;return 1;int creatfile(string na,int length,
10、string time) int p; p=search(na); /创建文件时先查找是否存在if (p=1) fii.creatfile(na,length,time);/创建文件:ii+; return 1;elsecoutn!该文件已存在,不能创建!nn;return 0; int deltefile(string na) /删除文件int x=0,n1,n2,q1,q2,k;for(int i=0;i50;i+)if(getname(i)=na) /进行删除文件赋值 fi.tag_delete=1; tt=tt-fi.blocknum; if(i=0) /位视图中删除文件从第一盘块开始
11、 for(k=0;kfi.blocknum;k+) axk=0; else /位视图中删除文件从其它盘快开始 n1=(fi-1.blocksum2+1)/32; /被查找文件之前文件所占用盘块数/32, /n1表示位视图开始操作行 n2=(fi.blocksum2+1)/32; /全部文件所占用盘块数/32, /大于0表示跨行 /n2表示位视图结束操作行 q1=fi.blocksum1%32; / 位视图开始列 q2=fi.blocksum2%32; /位视图结束列 if(n1=n2) /若n2和n1相等,表明目前全部被占用盘块在同一行 for(k=q1;kq2+1;k+) an1k=0; e
12、lse for(;n1n2-1;n1+) for(int l=0;l32;l+) /循环进行整行赋值 an1l=0; for(k=0;kq2+1;k+) /对剩下项赋值an2k=0;return 1;return 0;void disp() /输出全部文件列表for (int i=0;i=ii;i+)if(fi.tag_delete=0)fi.disp();void disp2(file f) /输出文件属性f.disp2();string getname(int n)return fn.getname();file File(int n)return fn;/*void bit_map()
13、/位视图 int s=0;cout-endl;for(int p=0;p32;p+)for(int q=0;q32;q+)coutapq ;coutendl;cout-endl; for(int p1=0;p132;p1+)for(int q1=0;q132;q1+)if(ap1q1=1)s=s+1;/*void main() int I,l,sum=0;string time;string fname; fdatabase p;I=1024/32; for(int i=0;iI;i+)for(int j=0;j32;j+)aij=0;char choice;char choice2;char
14、 choice3;while(choice!=0)choice=1;choice2=1;choice3=1; cout 文 件 管 理 系 统 n; cout *n;cout1.文 件 操 作nn;cout2.文 件 系 统 操 作nn;cout3.退出文件管理系统nn;cout *n; coutendl choice; system(cls);switch(choice)case 1:while(choice2!=0)cout文 件 操 作:n; cout*n; cout1.新 建 文 件nn; cout2.查 看 属 性nn; cout3.删 除 文 件nn; cout4.返 回 主 菜
15、单nn; cout*n;coutendl choice2; coutendl; switch (choice2) case 1:cout fname; coutendl; cout l;coutendl;couttime; p.creatfile(fname,l,time); break;case 2:coutfname;coutendl; int q; q=p.search(fname); if (!q=0) cout !该文件不存在,无法查看!nn ;break; cout 文件属性以下:n;for(int n=0;n50;n+)if(p.getname(n)=fname)coutsetw
16、(8)文件名setw(15)文件大小(MB)setw(15)所占盘块数setw(15)所占盘块号setw(15)文件创建时间endl; p.disp2(p.File(n);break;coutendl;break;case 3:cout fname; coutendl; int q; q=p.search(fname); if (!q=0) cout !该文件不存在,无法删除!nn ;break; p.deltefile(fname);break;case 4:choice2=0;break;default:cout输入错误,请重新输入: nn;cin.get(); cin.get(); sy
17、stem(cls);break; case 2: while(choice3!=0) cout文 件 系 统 操 作:n; cout*n; cout1.显 示 文 件 列 表nn; cout2.显 示 磁 盘 空 间 剩 余 大 小nn; cout3.输 出 位 视 图nn; cout4.返 回 主 菜 单nn; cout*n; coutendl choice3; coutendl; switch (choice3) case 1: cout *文件列表以下*n; cout文件名endl;p.disp(); coutendl; break; case 2:cout剩下磁盘空间为:1024-ttendl;break; case 3:cout *显示位示图以下*n;bit_map(); break; case 4: choice3=0; break; default:cout输入错误,请重新输入: nn; cin.get(); cin.get(); system(cls);break;case 3:cout成功退出系统n; exit(0); break; default:cout输入错误,请重新输入!n;break;