操作系统优秀课程设计.docx
《操作系统优秀课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统优秀课程设计.docx(27页珍藏版)》请在咨信网上搜索。
江苏大学京江学院 JIANGSU UNIVERSITY 操 作 系 统 课 程 设 计 文件管理系统 学 院 名 称 : 京江学院 专 业 班 级 : J计算机1401 学 号 : 学 生 姓 名 : 潘 庆 指 导 教 师 : 林 琳 年 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; } } }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 优秀 课程设计
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文