




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、山东理工大学计算机学院程设计(操作系统)级名指导教师年六月二十四日课程设计任务书及成绩评定课题名称基于多级文件目录的文件管理系统设计I、题目的目的和要求:巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。II、设计进度及完成情况12346.13-6.15选取参考书,查阅有关文献资料,完成课程设计说明书内容1部分。完成课程设计说明书内容2-4部分6.166.20创建相关数据结构,录入源程序6.216.22调试程序并记录调试中的问题
2、,完成课程设计说明书第5部分。6.23系统测试,演示设计成果,考核成绩。6.24整理课程设计说明书,上午 11时,由学习委员交课程设计说明书(计算机科学系9#213或直接交给指导教师)m、主要参考文献及资料汤子赢等.计算机操作系统(第二版).西安电子科技大学出版社,2006.8冯耀霖等.操作系统,西安电子科技大学出版社.1992张尧学等.计算机操作系统教程(第2版).清华大学出版社,2001.4谭耀铭.操作系统.中国人民大学出版社,2003.4刘坤起.操作系统学习辅导与习题详解M .北京:电子工业出版社,2003:58-67孙钟秀等编着,操作系统教程M ,高等教育出版社,2003:46-78W
3、、成绩评定:设计成绩:(教师填写)指导老师:(签字)年六月二十四日第一章概述第二章系统分析第三章系统设计第四章程序设计流程图或N-S图第五章第六章调试过程中的问题及系统测试情况结束语附录10第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程 相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学对所学的课程 更全面的学习和应用,理解和掌握课程的相关知识。计算机操作系统一门重要的专 业课,是开发操作系统和软件系统的理论和应用基础。本课程设计要求设计一个基于多级文件目录的文件管理系统。通过具体的文件存储 空间的管理、文件的物理结构、目录结构和文件操作的实现
4、,加深对文件系统内部功能 和实现过程的理解。第二章系统分析在其上实现一个多级文件目录的文件1 .在内存中开辟一个虚拟磁盘空间作为文件存储器,管理系统。2. 文件物理结构可采用显式链接或其他方法。4. 文件目录结构采用多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。5. 设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:第三章系统设计1 .文件的操作char p rotect;/保护码(1)文件的创建:文件的打开:(3)文件的读:read(4)文件的写:w
5、rite(5)文件关闭:close2.数据结构体1)文件夹数据结构体:typedef struct MFD/ 主文件目录char user name100;char p assword100;FILE *fp;/文件目录指针MFD;2)用户文件数据结构体: typedef struct UFD /用户文件目录char file name256;int len gth;/文件长度UFD;3)功能实现命令数据结构体: typedef struct COMM / 命令串char string256;/ 用户命令串struct COMM *next; /后继指针:指向命令各参数所在的结点COMM;MF
6、D mai nfdN;/主文件目录数组UFD userfdM;/用户文件目录数组OFD open fdL;/打开文件目录数组COMM *comma nd;/命令串指针 int next;DISK;3. 主要模块组成1)头文件:#in elude <io.h>#in elude vconi o.h>/里面有clrscr()青屏函数#in elude <stdio.h>#in elude <stdlib.h>#in elude <malloc.h>/内存分配函数#in elude <stri ng.h>#in elude <e
7、t yp e.h>#defi ne N 30/用户数#defi ne M 20/ 一个用户可保存M个文件#defi ne L 5/用户只能一次打开L个文件2)功能模块实现函数:void ini t();/初始化主文件目录数组void init_ufd(char *username);/ 初始化用户文件目录void mesg(ehar *str); / 输出函数char *getuser();/设置用户函数声明char *get pass();/设置口令函数声明COMM *readcommand();/读命令串函数声明void logi n();/用户登录void set pass();/
8、设置口令void create();/创建用户文件void mydeleteO;/删除void myread();/读void myopenO;/打开void myclose();/关闭void mywrite();/写void hel p();/帮助第四章程序设计流程图或N-S图图1程序流程图第五章 调试过程中的问题及系统测试情况1 .运行后主界面显示图2主界面2输入login命令 用户登陆,当用户账号不存在时,即可创建:图3创建用户3创建用户下文件功能实现:图4创建用户4打开文件open命令功能的实现图5打开文件5读文件read命令功能实现图6.读文件6. 写文件write命令功能实现,及
9、对内容中添加实现图7写文件8.退出文件logout操作图8退出文件第六章结束语这次操作系统课程设计,在编写过程中,遇到很多难题,特别是在操作系统实验中不曾注意到的问题,也有许多新的问题,在实际反复调试运行中,不断加深了对操作系统的理解,也很大地程度上提高了编程的能力,由于对重要概念的把握程度还不够深入, 在实际理解编写时遇到很多不该发生的问题。不过,都很好的解决并牢牢地掌握住了。通过做多级目录文件系统,我知道了多级目录文件系统的工作原理,在打开文件时系统 是如何进行操作的,并加深了理解。希望在以后的学习中,继续保持这份昂扬的斗志, 继续努力学习计算机方面的知识,永不懈怠。通过这次课程设计,不仅
10、让我了解了多级目录文件系统,更重要的还让我学会了、 或者说是验证了“做事一定要有次序和对事物的总体把握”这句话。开始我一味的进行 调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没没有成 功,我仔细的分析题目,分析材料,在原由的基础上我进行了改正,我最后还是调试成 功了,虽然还是经过了一翻努力,当然汗水还是留的很值,这次操作系统实习,不仅让 我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握,还给了 我今后做事的启示。做事要塌实,不能想着一步登天,要有计划,有目的的进行做事。盲目真的不应该再在我们新一代的大学生身上出现了,我们应该认真找到自己的缺点并 且及
11、时改正。在这里,我如果不说感谢的话,不知道要说些什么好;首先感谢学校和父 母,然后更重要的是感谢老师的教导。“活到老,学到老”,这也是我整个学习过程中 的一次经验、一次总结,我相信它肯定会给我今后的学习有所启示和指导作用。附录:源程序代码:#in elude <io.h>#i nclude <stdio.h>#in elude <stdlib.h>#in elude <malloc.h>/内存分配函数#i nclude <stri ng.h>#in elude <ct yp e.h>#defi ne N 30/用户数#de
12、fi ne M 20/ 一个用户可保存M个文件#defi ne L 5/用户只能一次打开L个文件typedef struct MFD/ 主文件目录char user name100;char p assword100;FILE *fp;/文件目录指针MFD;typedef struct UFD /用户文件目录char file name256;char p rotect;/保护码int len gth;/文件长度UFD;typ edef struct OFD/打开文件目录char file name256;char open code;/打开保护码int *fp;/读写指针OFD;typ ed
13、ef struct COMM/命令串char stri ng256;/用户命令串struct COMM *next; /后继指针:指向命令各参数所在的结点COMM;MFD mai nfdN;/主文件目录数组UFD userfdM;/用户文件目录数组OFD open fdL;/打开文件目录数组COMM *comma nd;/命令串指针void logi n();/用户登录char user name100;int user nu m,save num,opennum;int workfile;void ini t();/初始化主文件目录数组void init_ufd(char *username
14、);/ 初始化用户文件目录void mesg(char *str); / 输出函数char *getuser();/设置用户函数声明char *get pass();/设置口令函数声明COMM *readcommand();/读命令串函数声明void set pass();/设置口令void createO;/创建用户文件void mydeleteO;/删除void myread();/读void myopenO;/打开void myclose();/关闭void mywrite();/写void hel p();/帮助void mai n()ini t();prin tf("ntt
15、计科0804班 0812103773张超");prin tf("nttprin tf("ntt多级文件目录的文件管理系统prin tf("ntt");");");prin tf("ntt选择命令:")prin tf("nttlogi nset passcreate");prin tf("nttopenreadwritedelete");prin tf("ntthel pexitcopyren ame");prin tf("ntt首次使用
16、请输入help命令请求帮助"prin tf("ntt使用中欢迎以help vcomma nd>请求帮助"));while(1)readcomma nd();if(strc mp (comma nd->stn ng,"create")=O)create();else if(strc mp (comma nd->stn ng,"delete")=O)mydelete();else if(strc mp (comma nd->stn ng,"o pen ")=0)myopenO;else
17、 if(strcm p( comma nd->stn ng,"close")=0)mycloseO;else if(strc mp( comma nd->stn ng,"read")=0)myread();else if(strcm p( comma nd->stn ng,"wnte")=0)mywrite();else if(strcm p( comma nd->stn ng,"logi n")=0)logi n();else if(strcm p( comma nd->stn ng
18、,"set pass")=0)set pass();else if(strcm p( comma nd->stn ng,"hel p")=0)helpO;else if(strc mp( comma nd->stn ng,"exit")=0)break;elsemesg("Bad comma nd!");void mesg(char *str)prin tf("n %sn",str);void init()/初始化主文件目录数组FILE *fp;/文件指针char tempn ame
19、20,te mpp ass20;user num=0;/全局变量初始化save num=0;opennum=0;strc py(usemame,"");/用户使用时,建立一个 mainfile.txt文件,包括每个用户的用户名和口令 /然后,才能运行此程序if(fp=fopen("mainfile.txt","r")!=NULL)/以读方式打开文件 mainfile.txtwhile(!feof(fp)/若不是文件尾strcpy(tempname,"");/ 清空数组操作fgets(tempname,20,fp);
20、 / 读用户名if(strc mp (te mpn ame,"")!=0)fgets(te mpp ass,20,fp);tempnamestrlen(tempname)-1='0'/ 设置串结束符tempp assstrle n(te mpp ass)-1-0'strcpy(mainfdusernum.username,tempname);/ 生成 mainfd 数组strcpy(mainfdusernum.password,temppass);/ 生成 userfd数组user nu m+;/生成user num 的值if(user num>
21、;=N)break;fclose(fp);void init_u fd(char *user name)/初始化用户文件目录FILE *fp;char temp file100,te mpp rot;int templen gth;save num=0;usefdsave nu m.le ngth=te mplen gth;/文件长度opennum=0;workfile=-1;if(fp=fo pen (usemame,"r+")!=NULL)while(!feof(fp)strc py(te mp file,"");fgets(te mp file,5
22、0,fp);if(strc mp (te mp file,"")!=0)fsca nf(fp,"%c", &tempp rot);fsca nf(fp,"%d", &te mp le ngth);temp filestrle n(te mp file)-1='0'strcpy(userfdsavenum.filename,tempfile);/ 文件名save nu m+;fgets(te mp file,50,fp);char *getuser()/设置用户函数声明char user name20;c
23、har temp;int i;user name0='0'for(i=0;i<20;)while(!kbhit();/按用户名规则输入用户名temp=getch();if(isal nu m(tem p)|te mp=-_'|te mp=(char)13)user namei=te mp;if(user namei=(char)13)usernamei='0'break;pu tchar(te mp);i+;user namei='O'return user name;char *get pass()/设置口令函数声明char p
24、assword20;char temp;int i;p assword0-0'for(i=0;i<20;)while(!kbhit();/等待按键temp=getch();if(isal nu m(tem p)|te mp=-_'|te mp=(char)13)p asswordi=te mp;if(p asswordi=(char)13)p asswordi-0'break;putchar('*');i+;p asswordi='0'return p assword;COMM *readcomma nd()/读命令串函数声明cha
25、r tem p256;char lin e256;un sig ned int i,e nd;COMM *newp ,* p;comma nd=NULL;strcpy(li ne,"");while(strc mp (li ne,"")=0)prin tf("nc:>");i+;gets(l in e);/输入一个命令串for(i=0;i<=strle n(l in e);i+)if(li nei='')en d=0;while(li nei!='O'&&li nei!=
26、39;')tempen d=li nei;en d+;i+;if(e nd>0)/对命令行中的子串进行处理temp e nd='O'new p=(COMM*)malloc(sizeof(COMM*);strc py(newp->stn ng,te mp);newp->n ext=NULL;if(comma nd=NULL)comma nd=newp; /把各子串链成一个链表elsep=comma nd;while( p-> next!=NULL)p=p->n ext;p->n ext=newp;p=comma nd;return co
27、mma nd;void logi n()/用户注册FILE *fp;int i;char p assword20,c on firm20,te mpn ame20;if(comma nd->n ext=NULL)prin tf("n User Name:");strc py(te mpn ame,getuser();/输入用户名并且返回之else if(comma nd->n ext- >n ext!=NULL)mesg("Too many p arameters!");return;else strc py(te mpn ame,co
28、mma nd->n ext->stri ng);for(i=0;i<user nu m;i+)if(strc mp(main fdi.user name,te mpn ame)=0)break;/从mainfd表中查找要注册的用户if(i>=usemum)/新用户printf("n新用户账号,输入你的密码两次!");prin tf("n密码:");strc py(p assword,get pass();/输入口令并且返回之prin tf("n密码:");strc py(c on firm,get pass()
29、;/第二次输入口令if(strc mp(p assword,c on firm)=0)/两次输入的口令是否相同的处理情if(user num>=N)/用户数不能超过NmesgC创建新账号错误!用户账号字符超过限制.n登陆失败!");elsestrcpy(mainfdusernum.username,tempname);/ 把新用户和口令填入mainfd 中strc py(mai nfdusemum. password, password);user nu m+;strc py(usemame,te mpn ame);/初始化用户文件mesg(创建新用户!n登陆成功恭喜!&quo
30、t;);ini t_ufd(username);目录/把新用户填入fp=fo pen ("ma in file.txt","w+");mai nfile.txt 文件中for(i=0;i<user nu m;i+)fputs(mai nfdi.username,fp);fputs("n",fp);fpu ts(ma in fdi. passwordp);fputs("n",fp);fclose(fp);elseelse/两次输入的口令是否相同的处理情况mesg(创建新用户失败!两次输入密码不一致!"
31、);mesg(登陆失败!");else/注册过的用户登陆prin tf("n密码:");strc py(p assword,get pass();if(strcm p( mai nfdi. password, password)!=0)mesg(登陆失败!输入密码错误!");mesg(登陆成功恭喜你!");strc py(usemame,te mpn ame);ini t_ufd(username);void set pass()/重新设置口令int i;FILE *fp;char old pass20, newp ass20,co nfirm
32、20;if(strc mp (usemame,"")=0)mesg("No user log in!");printf("n旧密码:");strc py( old pass,get pass();for(i=0;i<user nu m;i+)if(strcm p(main fdi.user name,user name)=0)break;if(strcm p( mai nfdi. password,old pass)!=0)mesg("日密码错误!");elseprintf("n新密码:"
33、);strc py(newp ass,get pass();printf("n确认密码:");strc py(c on firm,get pass();if(strc mp(newp ass,co nfirm)!=0)mesgC密码修改错误!确认密码错误.请重新输入”);elsestrc py(mai nfdi. password, newp ass);mesg(" Password cha nged!");fp=fo pen ("ma in file.txt","w+");for(i=0;i<user nu
34、 m;i+)/ 写回到 ma in file.txtfputs(mai nfdi.username,fp);fputs("n",fp);fpu ts(ma in fdi. passwordp);fputs("n",fp);fclose(fp);void createO mesg("File open success!");void myopen()/打开文件int i;int typ e=0;char temp code;char tem pfile1OO;if(strc mp (usemame,"")=0)mes
35、g("No user log in!");elseif(comma nd->n ext=NULL)mesg("Too few p arameters!");else/存在2个或3个参数的处理strc py(te mp file,"");temp code='r'if(strcm p( comma nd->n ext->stri ng,"/r")=O)temp code='r'typ e=1;else if(strc mp (comma nd->n ext-&g
36、t;stri ng,"/w")=0)temp code='w'typ e=1;else if(strc mp (comma nd->n ext->stn ng,"/d")=O)temp code='d'typ e=1;else if(comma nd->n ext->stri ng0=7')mesg("Error! /r /w /d request!");else if(comma nd->n ext- >n ext!=NULL)mesg("Too
37、many p arameters!");elsestrc py(te mp file,comma nd-> next->stn ng);if(typ e=1)/三个参数的情况补充if(comma nd->n ext- >n ext!=NULL)if(comma nd->n ext- >n ext- >n ext!=NULL)mesg("Too many p arameters!");else strc py(te mp file,comma nd->n ext- >n ext->stri ng);else
38、 mesg("Too few p arameters!");if(strc mp (te mp file,"")!=O)for(i=0;i<save nu m;i+)if(strc mp (te mp file,userfdi.file name)=0)break;if(i>=save num)mesg("File not existed!");else/文件存在的情况for(i=0;i< opennu m;i+)if(strc mp (te mp file, open fdi.file name)=0)break;
39、if(iv opennum)/文件已经打开mesg("File already open ed!");if(open fdi.o pen code!=te mp code)open fdi.o pen code=te mp code;mesg("File p ermissi on cha nged!");else if(opennum>=L)/打开的文件已经占满了 5个名额mesg("Error! cannot open file! ni mber of opened files limited!");else/打开处理strc
40、 py(open fdo pennu m.file name,te mp file);openfdopennu m.o pen code=te mp code;workfile=opennum;opennu m+;mesg("File open success!");/关闭文件void myclose()int i,j;char tem pfile1OO;if(strc mp (username,"")=0)mesg("No user log in!");elseif(comma nd->n ext=NULL)mesg(&quo
41、t;Too few p arameters!");else if(comma nd->n ext- >n ext!=NULL)mesg("Too many p arameters!");elsestrc py(te mp file,comma nd->n ext->stri ng);for(i=0;i<save nu m;i+)if(strc mp (userfdi.file name,te mp file)=0)break;if(i>=save num)/文件不存在mesgC文件不存在!");elsefor(j=0;
42、jv opennu m;j+)if(strc mp(open fdj.file name,te mp file)=0)break;if(j>=opennum)/文件存在了但是没有打开mesg(文件存在了但是没有打开!");else/文件存在并且打开strc py(o pen fdj.file name,"");open fdj.o pen code=''opennu m-;mesg(文件关闭成功!");void mydeleteO/删除文件int i,j;int temp save;/用于确定被删除文件在数组usefdM中的位置ch
43、ar tem pfile1OO;FILE *fp;if(strc mp (usemame,"")=0)mesgC没有用户登陆!");elseif(comma nd->n ext=NULL)mesg("Too few p arameters!");else if(comma nd->n ext- >n ext!=NULL)mesg("太多参数导致错误 门;elsestrc py(te mp file,comma nd->n ext->stn ng);for(i=0;ivsave nu m;i+)if(str
44、c mp (userfdi.file name,te mp file)=0)break;temp save=i;if(te mp save>=save num)/文件不存在mesg("the file donot existed!");elsefor(j=0;j< opennu m;j+)if(strc mp(open fdj.file name,te mp file)=0)break;if(j< opennum)/文件存在了但是打开mesg(文件不能删除!");mesg(首先需要关闭它!");else/文件存在并且没有打开strc p
45、y(userfdte mp save.file name,"");userfdte mp save. protect-'userfdte mp save.le ngth=O;save nu m-;for(i=te mp save;i<=save nu m;i+)/从新将数组userfdM排strc py(userfdi.file name,userfdi+1.file name);userfdi. protect=userfdi+1. protect;usefdi.le ngth=usefdi+1. protect;mesg("File delete
46、!");fp二fopen( user name,"w+");/写回到文件usernamefor(i=0;i<save nu m;i+)fputs(userfdi.file name,fp);fputs("n",fp);fprin tf(fp,"%c n%dn",userfdi. protect,userfdi.le ngth);fclose(fp);void myread() / 读操作int i;int temp save;char tem pfile100;if(strc mp (usemame,"&qu
47、ot;)=0)mesg('没有用户登陆!");else if(comma nd->n ext=NULL)mesg(参数太少导致错误!");else if(comma nd->n ext- >n ext!=NULL)mesg(参数太多导致错误门;elsestrc py(te mp file,comma nd->n ext->stri ng);for(i=0;ivsave nu m;i+)if(strcm p(te mp file,userfdi.file name)=0)break;if(i>=save num)mesg(文件不存在
48、!");elsetemp save=i;for(i=0;i< opennu m;i+)if(strc mp (te mp file, open fdi.file name)=0)break;if(i>=opennum)mesgC文件没有打开!");elseif(userfdtem psave.le ngthvlOOO)prin tf("n The file size is %d B",userfdte mp save.le ngth);elseif(userfdtem psave.le ngth=1000)prin tf("n Th
49、e file size is 1000 B");elseprin tf("n The file size is %d,%d KB", userfdtem psave.le ngth/1000,userfdte mp save.le ngth%1000);mesg(文件读取成功!");void mywrite() / 写操作int i;int temp save;char tem pfile100;if(strc mp (usemame,"")=0)mesgC没有用户登陆!");else if(comma nd->n e
50、xt=NULL)mesg(参数太少导致错误!");else if(comma nd->n ext- >n ext!=NULL)mesg(参数太多导致错误");elsestrc py(te mp file,comma nd->n ext->stri ng);for(i=0;i<save nu m;i+)if(strcm p(te mp file,userfdi.file name)=0)break;if(i>=save num)mesgC文件不存在!");elsetemp save=i;for(i=0;i< opennu m
51、;i+)if(strc mp (te mp file, open fdi.file name)=0)break;if(i>=opennum)mesgC文件没有打开!");elseif(userfdtem psave.le ngthv1000)prin tf("n The file size is %d KB",userfdte mp save.le ngth);elseif(userfdtem psave.le ngth=1000)prin tf("n The file size is 1000KB");elseprin tf("
52、;n The file size is %d,%d KB", userfdtem psave.le ngth/1000,userfdte mp save.le ngth%1000);mesg(文件写成功!");void help()/帮助说明 system("CLS");/清屏static char *cmd="logi n","set pass","create"."open ","read","write","delete"."hel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织服饰品牌文化传播规划
- 2025浙江温州龙港市市属国有企业面向社会招聘工作人员21人笔试备考题库及答案解析
- 企业管理中的领导力发挥
- 印刷品质量管理细则
- 2025云南丽江市古城区司法局招聘司法行政辅助人员1人考试备考试题及答案解析
- 2025信息安全工程师招聘题库及答案
- 员工职业道德修养课程
- 2025年碳资产管理师考试题库(附答案和详细解析)
- 2025年天津上半年房地产估价师制度与政策商品房销售中禁止的行为试题
- 2025年流行病学流行病调查与预防控制计划模拟卷答案及解析
- 摩托车整车采购合同范本
- 托管班合伙人合同协议书
- 9《犟龟》公开课一等奖创新教学设计
- 2025劳动合同补充协议
- 社区节水节电知识培训课件
- 防火墙行业知识培训课件
- 2025版全新升级二手房买卖合同模板下载
- 乡镇执法证考试题及答案
- 2025年监理工程师继续教育试卷及答案
- 2025滨海投资(天津)有限公司校园招聘考试备考题库及答案解析
- 2024-2025学年度江西建设职业技术学院单招《职业适应性测试》题库试题【名师系列】附答案详解
评论
0/150
提交评论