欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    模拟一个简单二级文件管理系统方案.docx

    • 资源ID:14121839       资源大小:35.96KB        全文页数:28页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    模拟一个简单二级文件管理系统方案.docx

    1、模拟一个简单二级文件管理系统方案模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统部功能和实现过程的理解。设计容:模拟一个简单二级文件管理系统一、实验容描述1 实验目标本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的部功能及部实现.2 实验要求为DOS系统设计一个简单的二级文件系统.要求做到以下几点:可以实现下列命令:login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件列目录时要列出文件名、物理地址、保

    2、护码和文件长度.源文件可以进行读写保护.二、程序主要容1设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统.在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的及密码;用户文件,以用户名作为文件名,容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,容为文件容.2 数据结构

    3、file结构体系统文件数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式 0.只读;1.可写;2.可读写;3.保护、 fnamechar,文件名;filemode结构体文件状态数据结构:isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式 0.只读;1.可写;2.可读写;3.初始化;user结构体用户信息数据结构:unamechar,用户名、upasswordchar,用户密码;userfile结构体用户文件数据结构:unamechar,用户名、ufilefile,用户拥有的文件数组.cpp view plainc

    4、opyprint?1.#include 2.#include 3.#include 4.#include 5.#include 6.#define MaxUser 100 /定义最大MDF主目录文件 7.#define MaxDisk 512*1024 /模拟最大磁盘空间 8.#define commandAmount 12 /对文件操作的指令数 9./存储空间管理有关结构体和变量 10.char diskMaxDisk; /模拟512K的磁盘存储空间 11.typedef struct distTable /磁盘块结构体 12. 13.int maxlength; 14.int start;

    5、 15.int useFlag; 16.distTable *next; 17.diskNode; 18.diskNode *diskHead; 19.struct fileTable /文件块结构体 20. 21.char fileName10; 22.int strat; /文件在磁盘存储空间的起始地址 23.int length; /文件容长度 24.int maxlength; /文件的最大长度 25.char fileKind3; /文件的属性读写方式 26.struct tm *timeinfo; 27.bool openFlag; /判断是否有进程打开了该文件 28./fileT

    6、able *next; 29.; 30.31./两级目录结构体 32.typedef struct user_file_directory /用户文件目录文件UFD 33. 34./char fileName10; 35.fileTable *file; 36.user_file_directory *next; 37.UFD; 38./UFD *headFile; 39.typedef struct master_file_directory /主文件目录MFD 40. 41.char userName10; 42.char password10; 43.UFD *user; 44.MFD;

    7、 45.MFD userTableMaxUser; 46.int used=0; /定义MFD目录中用已有的用户数 47.48./文件管理 49.void fileCreate(char fileName,int length,char fileKind); /创建文件 50.void fileWrite(char fileName); /写文件 51.void fileCat(char fileName); /读文件 52.void fileRen(char fileName,char rename); /重命名文件 53.void fileFine(char fileName); /查询文

    8、件 54.void fileDir(char UserName); /显示某一用户的所有文件 55.void fileClose(char fileName); /关闭已打开的文件 56.void fileDel(char fileName); /删除文件 57.void chmod(char fileName,char kind); /修改文件的读写方式 58.int requestDist(int &startPostion,int maxLength); /磁盘分配查询 59.void initDisk(); /初始化磁盘 60.void freeDisk(int startPostio

    9、n); /磁盘空间释放 61.void diskShow(); /显示磁盘使用情况 62.63./用户管理 64.void userCreate(); 65.int login(); 66.int userID=-1; /用户登录的ID号,值为-1时表示没有用户登录 67.68.int main() 69. 70.char ordercommandAmount10; 71.strcpy(order0,create); 72.strcpy(order1,rm); 73.strcpy(order2,cat); 74.strcpy(order3,write); 75.strcpy(order4,fi

    10、ne); 76.strcpy(order5,chmod); 77.strcpy(order6,ren); 78.strcpy(order7,dir); 79.strcpy(order8,close); 80.strcpy(order9,return); 81.strcpy(order10,exit); 82.strcpy(order11,df); 83.char command50,command_str110,command_str210,command_str35,command_str43; 84.int i,k,j; 85.int length; 86.initDisk(); /初始化

    11、磁盘 87.for(i=0;inext=NULL; 91. 92.while(1) 93. 94.printf(*/n); 95.printf( 1、Creat user/n); 96.printf( 2、login/n); 97.printf(*/n); 98.printf(Please chooce the function key:); 99.int choice; 100.scanf(%d,&choice); 101.if(choice=1) userCreate(); 102.else if(choice=2) userID=login(); 103.else printf(您的输入

    12、有误,请重新选择/n); 104.while(userID!=-1) 105. 106.fflush(stdin); 107.printf(/n); 108.printf( create-创建 格式:create a1 1000 rw,将创建名为a1,长度为1000字节可读可写的文件/n); 109.printf( rm-删除 格式:rm a1,将删除名为a1的文件/n); 110.printf( cat-查看文件容 格式:cat a1,显示a1的容/n); 111.printf( write-写入 格式:write a1/n); 112.printf( fine-查询 格式:fine a1

    13、,将显示文件 a1的属性/n); 113.printf( chmod-修改 格式:chmod a1 r,将文件a1的权限改为只读方式/n); 114.printf( ren-重命名 格式:ren a1 b1 ,将a1改名为b1/n); 115.printf( dir-显示文件 格式:dir aaa,将显示aaa用户的所有文件/n); 116.printf( df-显示磁盘空间使用情况 格式:df/n); 117.printf( close-关闭文件 格式:close a1,将关闭文件a1/n); 118.printf( return-退出用户,返回登录界面/n); 119.printf( ex

    14、it-退出程序/n); 120.printf(/n); 121.printf(please imput your command:); 122.gets(command); 123.int select; 124.for(i=0;commandi!= &commandi!=/0;i+) /command_str1字符串存储命令的操作类型 mand_str1i=commandi; 126.k=i; mand_str1k=/0; 128.for(i=0;i=0;i-) /把字符串转换为十进制 154. 155.length+=(command_str3i-48)*j; 156.j*=10; 157

    15、. 158.for(i=k+1,k=0;commandi!= &commandi!=/0;i+,k+) mand_str4k=commandi; mand_str4k=/0; 161.fileCreate(command_str2,length,command_str4);break; 162.case 1:fileDel(command_str2);break; 163.case 2:fileCat(command_str2);break; 164.case 3: 165.fileWrite(command_str2);break; 166.case 4:fileFine(command_s

    16、tr2);break; 167.case 5:for(i=k+1,k=0;commandi!= &commandi!=/0;i+,k+) mand_str3k=commandi; mand_str3k=/0; 170.chmod(command_str2,command_str3);break; 171.case 6:for(i=k+1,k=0;commandi!=/0;i+,k+) mand_str3k=commandi; mand_str3k=/0; 174.fileRen(command_str2,command_str3);break; 175.case 7:fileDir(comma

    17、nd_str2);break; 176.case 8:fileClose(command_str2);break; 177.case 9:UFD *p; 178.for(p=userTableuserID.user-next;p!=NULL;p=p-next) /退出用户之前关闭所有打的文件 179.if(p-file-openFlag) 180.p-file-openFlag=false; 181.system(cls); 182.userID=-1;break; 183.case 10:exit(0);break; 184.case 11:diskShow();break; 185. 18

    18、6. 187. 188.return 0; 189. 190.191.void userCreate() 192. 193.char c; 194.char userName10; 195.int i; 196.if(usedMaxUser) 197. 198.printf(请输入用户名:); 199.for(i=0;c=getch();i+) 200. 201.if(c=13) break; 202.else 203.userNamei=c; 204.printf(%c,c); 205. 206.userNamei=/0; 207.for(i=0;iused;i+) 208. 209.if(

    19、!strcmp(userTablei.userName,userName) 210. 211.printf(/n); 212.printf(该用户名已存在,创建用户失败/n); 213.system(pause); 214.return; 215. 216. 217.strcpy(userTableused.userName,userName); 218.printf(/n); 219.printf(请输入密码:); 220.for(i=0;c=getch();i+) 221. 222.if(c=13) break; 223.else 224.userTableused.passwordi=c

    20、; 225.printf(*); 226. 227.userTableuserID.passwordi=/0; 228.printf(/n); 229.printf(创建用户成功/n); 230.used+; 231.system(pause); 232. 233.else 234. 235.printf(创建用户失败,用户已达到上限/n); 236.system(pause); 237. 238.fflush(stdin); 239. 240.241.int login() 242. 243.char name10,psw10; 244.char c; 245.int i,times; 24

    21、6.printf(请输入用户名:); 247.for(i=0;c=getch();i+) 248. 249.if(c=13) break; 250.else 251.namei=c; 252.printf(%c,c); 253. 254.namei=/0; 255.for(i=0;iused;i+) 256. 257.if(!strcmp(userTablei.userName,name) 258.break; 259. 260.if(i=used) 261. 262.printf(/n您输入的用户名不存在/n); 263.system(pause); 264.return -1; 265.

    22、266.for(times=0;times3;times+) 267. 268.memset(psw,/0,sizeof(psw); 269.printf(/n请输入密码:); 270.for(i=0;c=getch();i+) 271. 272.if(c=13) break; 273.else 274.pswi=c; 275.printf(*); 276. 277.printf(/n); 278.for(i=0;imaxlength=MaxDisk; 302.diskHead-useFlag=0; 303.diskHead-start=0; 304.diskHead-next=NULL; 3

    23、05. 306.int requestDist(int &startPostion,int maxLength) 307. 308.int flag=0; /标记是否分配成功 309.diskNode *p,*q,*temp; 310.p=diskHead; 311.while(p) 312. 313.if(p-useFlag=0&p-maxlengthmaxLength) 314. 315.startPostion=p-start; 316.q=(diskNode *)malloc(sizeof(diskNode); 317.q-start=p-start; 318.q-maxlength=

    24、maxLength; 319.q-useFlag=1; 320.q-next=NULL; 321.diskHead-start=p-start+maxLength; 322.diskHead-maxlength=p-maxlength-maxLength; 323.flag=1; 324.temp=p; 325.if(diskHead-next=NULL) diskHead-next=q; 326.else 327. 328.while(temp-next) temp=temp-next; 329.temp-next=q; 330. 331.break; 332. 333.p=p-next; 334. 335.return flag; 336. 337.338.void fileCreate(char fileName,int length,char fileKind) 339. 340./int i,j; 341.time_t rawtime; 342.int startPos; 343.UFD *fileNode,*p; 344.for(p=userTableuserID.user-next;p!=NULL;p=p-next) 345. 346


    注意事项

    本文(模拟一个简单二级文件管理系统方案.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开