操作系统课程设计报告.docx
- 文档编号:4570077
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:19
- 大小:189.56KB
操作系统课程设计报告.docx
《操作系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
操作系统课程设计报告
一、概述
课程设计目的、意义:
课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。
通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
主要任务:
模拟文件系统设计是设计和实现一个简单的文件系统。
内容包括:
1.建立文件存储介质的管理机制
2.建立目录(采用一级目录结构)
3.文件系统功能(显示目录、创建、删除、打开、关闭、读、写)
4.文件操作接口(显示目录、创建、删除、打开、关闭、读、写)
二、系统设计
课程设计的系统设计:
本系统模拟一个文件管理系统,要完成对文件的基本操作,文件的基本操作有文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。
系统建立了文件目录树,存储文件系统中的所有文件。
对于用户名下的文件,用文件目录树的分枝来存贮。
采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作就行了。
整体设计框架:
系统初始化界面是由创建用户存储空间,管理文件,退出系统三个模块组成。
用户创建由创建用户存储空间,进入目录,删除用户存储空间,显示所有用户存储空间,等模块组成。
然后各个模块再由一些小模块组成。
其中创建文件,打开关闭文件,读写文件等文件操作模块包括在进入目录模块里面。
三、系统实现
课程设计主要内容的实现程序代码:
#include
#include
#include
typedefstructfile{
charname[10];
structfile*next;
}File;
typedefstructcontent{
charname[10];
File*file;
intf_num;
structcontent*next;
}Content;
typedefstructuser{
charname[10];
charpsw[10];
Content*con;
structuser*next;
}User;
charcur_user[20];
User*user;
intuser_num=0;
voidwrite(charname[]){
FILE*p;
charch;
p=fopen(name,"w");
ch=getchar();
while
(1){
fputc(ch,p);
ch=getchar();
if(ch=='#')break;
}
fclose(p);
}
voidread(charname[]){
FILE*p;
inti=0;
p=fopen(name,"r");
while(!
feof(p)){
i++;
printf("%c",fgetc(p));
}
if(i==0)printf("文件是空的!
\n");
fclose(p);
}
intdisplay_files(Content*con){
inti=0;
File*file;
file=con->file;
file=file->next;
while(file!
=NULL){
i++;
printf("文件%d:
%s\n",i,file->name);
file=file->next;
}
printf("文件总数:
%d\n",i);
returni;
}
intis_exist_file(File*f,charname[]){
intexist=0;
File*file=f->next;
while(file!
=NULL){
if(strcmp(file->name,name)==0){
exist=1;
break;
}
file=file->next;
}
returnexist;
}
voidadd_file(Content*con){
intexist;
charf_name[10];
chartail[]=".txt";
FILE*q;
File*file=con->file;
File*new_f;
if(con->f_num==10){
printf("已存在10个文件!
\n");
return;
}
do{
exist=0;
printf("输入新文件名:
");
scanf("%s",f_name);
strcat(f_name,tail);
if(is_exist_file(con->file,f_name))
exist=1;
if(exist==1)
printf("文件已存在!
\n");
}while(exist==1);
q=fopen(f_name,"w");
fclose(q);
while(file->next!
=NULL)
file=file->next;
new_f=(File*)malloc(sizeof(File));
strcpy(new_f->name,f_name);
new_f->next=NULL;
file->next=new_f;
con->f_num++;
printf("添加文件%s成功!
\n",f_name);
}
voidread_file(Content*con){
charname[10];
chartail[]=".txt";
intfind=0;
File*file=con->file->next;
printf("输入需要读取的文件名:
");
scanf("%s",name);
strcat(name,tail);
while(file!
=NULL){
if(strcmp(name,file->name)==0){
find=1;
break;
}
file=file->next;
}
if(find==0){
printf("读取错误或文件不存在!
---ReadFile\n");
return;
}
printf("文件已打开...\n");
read(name);
printf("\n文件%s读取成功!
\n",name);
}
voidwrite_file(Content*con){
charname[10];
chartail[]=".txt";
intfind=0;
File*file=con->file->next;
printf("输入需要编辑的文件名:
");
scanf("%s",name);
strcat(name,tail);
while(file!
=NULL){
if(strcmp(name,file->name)==0){
find=1;
break;
}
file=file->next;
}
if(find==0){
printf("写入错误或文件不存在!
---WriteFile\n");
return;
}
printf("文件被打开...\n");
printf("结尾输入#完成输入\n");
write(name);
printf("\n文件%s写入成功!
\n",name);
}
voiddelete_file(Content*con){
intexist;
charname[10];
File*file,*f;
chartail[]=".txt";
if(display_files(con)==0)printf("无内容!
\n");
else{
do{
exist=1;
printf("输入需要删除的文件名:
");
scanf("%s",name);
strcat(name,tail);
if(!
is_exist_file(con->file,name))
exist=0;
if(exist==0)printf("文件不存在!
\n");
}while(exist==0);
printf("文件正在删除...");
file=con->file;
f=file->next;
while(f!
=NULL){
if(strcmp(f->name,name)==0)break;
file=f;
f=f->next;
}
file->next=f->next;
printf("文件删除成功!
\n");
}
}
voidmove_file(User*u,Content*con){
intexist;
charname[10];
charc_name[10];
chartail[]=".txt";
File*file,*f,*temp_f;
Content*c;
do{
exist=1;
printf("输入需要移动文件名:
");
scanf("%s",name);
strcat(name,tail);
if(!
is_exist_file(con->file,name))exist=0;
if(exist==0)printf("此文件不存在!
\n");
}while(exist==0);
printf("移动中...\n");
file=con->file;
f=file->next;
while(f!
=NULL){
if(strcmp(f->name,name)==0)break;
file=file->next;
f=f->next;
}
temp_f=f;
file->next=f->next;
printf("输入目标存储空间名:
");
scanf("%s",c_name);
c=u->con;
while(c->next!
=NULL){
if(strcmp(c->name,c_name)==0)break;
c=c->next;
}
f=c->file;
while(f->next!
=NULL)f=f->next;
f->next=temp_f;
temp_f->next=NULL;
printf("移动成功!
\n");
}
intdisplay_contents(User*u){
inti=0;
Content*con;
con=u->con->next;
while(con!
=NULL){
i++;
printf("存储空间%d:
%s\n",i,con->name);
con=con->next;
}
printf("显示存储空间为%d\n",i);
returni;
}
intis_exist_con(Content*c,charname[]){
intexist=0;
Content*con=c->next;
while(con!
=NULL){
if(strcmp(con->name,name)==0){
exist=1;
break;
}
con=con->next;
}
returnexist;
}
voidadd_content(User*u){
charname[10];
intexist=0;
Content*con,*c;
File*file;
do{
exist=0;
printf("输入存储空间名称:
");
scanf("%s",name);
if(is_exist_con(u->con,name))
exist=1;
if(exist==1)
printf("此存储空间已存在!
\n");
}while(exist==1);
printf("新建中...\n");
con=u->con;
while(con->next!
=NULL)
con=con->next;
c=(Content*)malloc(sizeof(Content));
c->next=NULL;
file=(File*)malloc(sizeof(File));
file->next=NULL;
c->file=file;
strcpy(c->name,name);
c->f_num=0;
con->next=c;
printf("\n新建成功!
\n");
}
voiddel_content(User*u){
intexist;
charname[10];
Content*con,*c;
if(display_contents(u)==0)printf("无内容!
\n");
else{
do{
exist=1;
printf("输入删除存储空间名称:
");
scanf("%s",name);
if(!
is_exist_con(u->con,name))exist=0;
if(exist==0)printf("TheContentNotExist!
\n");
}while(exist==0);
printf("文件夹删除中...");
con=u->con;
c=con->next;
while(c!
=NULL){
if(strcmp(c->name,name)==0)break;
con=c;
c=c->next;
}
con->next=c->next;
printf("删除成功!
\n");
}
}
voidinto_content(User*u){
intchoice;
intexist;
charname[10];
Content*con;
do{
exist=1;
printf("输入存储空间名称:
");
scanf("%s",name);
if(!
is_exist_con(u->con,name))exist=0;
if(exist==0)printf("存储空间不存在!
\n");
}while(exist==0);
con=u->con->next;
while(con!
=NULL){
if(strcmp(con->name,name)==0)break;
con=con->next;
}
do{
printf("1.显示所有文件\n");
printf("2.新建文件\n");
printf("3.写入文件\n");
printf("4.读取文件\n");
printf("5.删除文件\n");
printf("6.移动文件\n");
printf("0.返回上层\n");
printf("输入以上选项:
");
scanf("%d",&choice);
switch(choice){
case1:
display_files(con);
break;
case2:
add_file(con);
break;
case3:
write_file(con);
break;
case4:
read_file(con);
break;
case5:
delete_file(con);
break;
case6:
move_file(u,con);
break;
}
}while(choice!
=0);
}
voidlogin(){
intchoice;
intfind=0;
intlogin=0;
User*p;
Content*con;
User*head=user->next;;
p=(User*)malloc(sizeof(User));
con=(Content*)malloc(sizeof(Content));
con->next=NULL;
p->con=con;
head=p;
do{
printf("1.显示所有存储空间\n");
printf("2.新建存存储空间\n");
printf("3.删除存储空间\n");
printf("4.写入存储空间\n");
printf("0.退出\n");
printf("输入以上选项:
");
scanf("%d",&choice);
switch(choice){
case1:
display_contents(head);break;
case2:
add_content(head);break;
case3:
del_content(head);break;
case4:
into_content(head);break;
}
}while(choice!
=0);
}
intmain(){
user=(User*)malloc(sizeof(User));
user->next=NULL;
login();
printf("谢谢使用!
\n");
return0;
}
四、系统测试
系统功能模块测试、性能测试结果:
进入系统菜单:
add_content(User*u)新建存储空间:
display_contents(User*u)显示所有存储空间状态:
del_content(User*u)删除存储空间:
into_content(User*u)写入存储空间:
进入文件系统菜单:
write(charname[])写入文件:
read(charname[])读取文件:
display_files(Content*con)显示所有文件状态:
add_file(Content*con)新建文件:
delete_file(Content*con)删除文件:
move_file(User*u,Content*con)移动文件:
五、结论
课程设计的主要成果、体会:
课程设计是对我们平时学习的一种考察,我们要正确地对待。
不断地锻炼自己动手动脑的能力、把知识赋予实践就是我们学习的目标。
既然学校给我们这么好的机会,让我们自己在实验室作操作,我们应该好好抓住机会,把我们平时学习的东西用自己的作品展现出来。
这次,我做的是《模拟linux二级文件系统设计》的课程主题,这给了我充分锻炼的机会。
我会用自己学到的东西的设计出一副好的作品。
通过2周的制作,我以基本完成了自己的作品。
从中我明白:
《操作系统》是一门非常有趣味的学科,只要你学得好再加上你的编程能力,你就可以开发出很好的软件作品。
同时我觉得要学好基本的操作系统知识,首先要有一颗坚毅的心,有恒心,有信心,在学习过程中,坎坷是避免不了的,但千万不要灰心,不要气馁,要继续努力,刚开始是会感到很无助的,也许会产生放弃的念头,千万顶住,只要克服了开始的难关,以后的路才会充满阳光,充满快乐。
而且,在程序设计过程中我也遇到了很多问题。
但是在老师和同学的帮助下,我一次次将难题解决。
对此,我由衷地感谢那些在我开发过程中帮助过我的人。
我相信通过我以后很加刻苦的学习,我会更加热爱我的专业课程。
六、参考文献
计算机操作原理(第四版)庞丽萍编著
计算机操作系统,中国人民大学出版社,谭耀铭主编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告