当前位置:文档之家› 新操作系统课程设计

新操作系统课程设计

江苏大学京江学院JIANGSU UNIVERSITY 操作系统课程设计文件管理系统学院名称:京江学院专业班级:J计算机1401学号:4141110020学生姓名:潘庆指导教师:林琳2017年 1 月一、课设目的操作系统是计算机专业的一门专业课,也是计算机专业考研课程,但操作系统比较抽象,有的同学一学期完了都还很难理解进程、内存管理等一些概念和原理,操作系统课程设计的目的就是通过设计的实验,让同学们真正理解进程的实现,内存管理的机制,达到理解概念,了解实现原理。

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

二、课设题目实现一个简单的文件管理系统(1)具有文件目录(一级或者多级)(2)对指定大小的磁盘(设共1GB,每个块为1MB),建立位示图进行管理(3)文件操作,包括新建、查看属性、删除新建文件:给出文件名、大小、建立时间等信息,系统为其分配硬盘空间,并记录在文件目录中查看属性:给出文件名,可以输出该文件的所有属性,以及该文件所占用的物理块号。

删除文件:给出文件名,实现文件的删除(4)文件系统操作:显示文件列表、显示磁盘空间剩余大小、输出位示图。

三、系统功能结构四、主要数据结构创建文件:creatfile<文件名>,即创建一个指定名字的新文件,在目录中增加一项,不考虑文件的内容,对于重名文件,给出错误信息。

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

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

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

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

五、系统使用说明文件管理系统主菜单界面(通过输入对应数字进入相应功能子菜单)“新建文件”功能(需要输入文件名、文件大小和创建时间)“查看属性”功能(输入文件名后,会显示其大小,所占盘块数,所占盘块号和创建时间)“显示文件列表”功能“显示磁盘空间剩余大小”功能“输出位示图”功能“删除文件”功能(输入文件名即可将其删除)六、课程设计中遇到的问题及解决方法刚开始做这个实验时,考虑的因素并没有很周全,比如创建文件和删除文件均没有考虑例外因素,都是在后期检查时发现的疏漏,另外,将文件管理的理论用C++来实现也需要自己从巩固书本概念做起,虽然书上并没有给出完整的算法,但是通过类比及网上查阅相关算法,自己也便可以写出以C++实现的各个功能模块,然后将其整合到文件类和文件库类两个大类中,使整个程序的结构更清晰,主函数用来实现界面和选择功能,用简单的switch-case语句便可以实现,值得注意的是,这边很容易会忽视清屏,导致输出结果很繁杂,用简单的system("cls")命令即可实现清屏。

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

七、带注释的代码#include<iostream>#include<iomanip>#include<string>using namespace std;int i=0,j=0,sum=0,tt=0,ii,ss;//i,j是位视图行列,sum是位视图存储到的盘块数,tt是文件已占用块数,ii是文件编号,ss是磁盘剩余块数int a[32][32];//***************************************************************************** ************************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(){return 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++){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;}void disp() //输出文件列表{cout<<name<<endl;}void disp2() //输出文件属性{cout<<setw(8)<<name<<setw(8)<<blocknum<<setw(18)<<blocknum<<setw(10)<<blocksum1<<" to"<<blocksum2<<setw(15)<<time<<endl;}};//***************************************************************************** ************************class fdatabase //文件库类{private:file f[50];public:fdatabase() //构造函数{}int search(string fname) //按文件名查找判断是否存在{for (int i=0;i<50;i++){if ((f[i].getname()==fname) && (f[i].tag_delete==0))//文件名一样而且未删{return 0;}}return 1;}int creatfile(string na,int length,string time){int p;p=search(na); //创建文件时先查找是否存在if (p==1){f[ii].creatfile(na,length,time);//创建文件::ii++;return 1;}else{cout<<"\n!!!该文件已存在,不能创建!!!\n\n";return 0;}}int deltefile(string na) //删除文件{int x=0,n1,n2,q1,q2,k;for(int i=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<f[i].blocknum;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<q2+1;k++){a[n1][k]=0;}}else{for(;n1<n2-1;n1++){for(int l=0;l<32;l++) //循环进行整行赋值{a[n1][l]=0;}}for(k=0;k<q2+1;k++) //对剩余项赋值{a[n2][k]=0;}}}return 1;}}return 0;}void disp() //输出所有文件列表{for (int i=0;i<=ii;i++){if(f[i].tag_delete==0){f[i].disp();}}}void disp2(file f) //输出文件属性{f.disp2();}string getname(int n){return f[n].getname();}file File(int n){return f[n];}};//***************************************************************************** ************************void bit_map() //位视图{int s=0;cout<<"---------------------------------------------------------------"<<endl;for(int p=0;p<32;p++){for(int q=0;q<32;q++){cout<<a[p][q]<<"";}cout<<endl;}cout<<"----------------------------------------------------------------"<<endl;for(int p1=0;p1<32;p1++){for(int q1=0;q1<32;q1++){if(a[p1][q1]==1){s=s+1;}}}}//***************************************************************************** ************************void main(){int I,l,sum=0;string time;string fname;fdatabase p;I=1024/32;for(int i=0;i<I;i++){for(int j=0;j<32;j++){a[i][j]=0;}}char choice;char choice2;char choice3;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<<endl<<"请输入选择项:";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<<endl<<"请输入选择项: ";cin >> choice2;cout<<endl;switch (choice2){case '1':{cout <<"请输入文件名:";cin>>fname;cout<<endl;cout <<"请输入文件大小MB:";cin>>l;cout<<endl;cout<<"请输入文件创建时间:";cin>>time;p.creatfile(fname,l,time);break;}case '2':{cout<<"请输入需要查看的文件名:";cin>>fname;cout<<endl;int q;q=p.search(fname);if (!q==0){cout<<" !!!该文件不存在,无法查看!!!\n\n ";break;}cout <<"文件属性如下:\n";for(int n=0;n<50;n++){if(p.getname(n)==fname){cout<<setw(8)<<"文件名"<<setw(15)<<"文件大小(MB)"<<setw(15)<<"所占盘块数"<<setw(15)<<"所占盘块号"<<setw(15)<<"文件创建时间"<<endl;p.disp2(p.File(n));break;}}cout<<endl;break;}case '3':{cout <<"请输入要删除的文件名:";cin>>fname;cout<<endl;int q;q=p.search(fname);if (!q==0){cout<<" !!!该文件不存在,无法删除!!!\n\n ";break;}p.deltefile(fname);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<<endl<<"请输入选择项: ";cin >> choice3;cout<<endl;switch (choice3){case '1':{cout <<"*************文件列表如下************************\n";cout<<"文件名"<<endl;p.disp();cout<<endl;break;}case '2':{cout<<"剩余磁盘空间为:"<<1024-tt<<endl;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;}}}。

相关主题