计算机课程设计系统,计算机操作系统课程设计

1、计算机操作系统课程设计班级:计091-1姓名:学号:使用语言:C+指导老师:学院:一、 系统要求1、实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。2、实验内容为linux系统设计一个简单的二级文件系统。要求做到以下几点:(1)可以实现下列几条命令(至少4条);login用户登陆dir 列文件目录create创建文件delete删除文件open 打开文件close关闭文件read 读文件write写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度;(3)源文件可以进行读写保护。二、系统分析1、设计思想本文件为二级文件系统,即要实现对文件的增删改查,同时。

2、又具备登陆系统、注册用户的功能,各个用户之间的文件系统互不干扰。本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。系统采用结构体来存储用户、文件目录、文件数据内容:0 48*5 48*5+44*50 48*5+44*50+264*200文件数据区文件目录区用户区每个分区都是由结构体组成,每个个去的结构体的个数由格式化系统是决定。整个系统的编码构成主要分为:Allstruct.h 定义了每个分区的结构体;Mysys.h 声明了对系统操作的各种方法;Myuserfile.h 声明了对文。

3、件操作的各种方法;Mymain.cpp 整个系统的主函数,操作入口;Mysys.cpp 包含了mysys.h,实现了操作系统的各种方法;Myuserfile.cpp 包含了myuserfile.h,实现了操作文件的各种方法;2、主要数据结构Allstruct.h文件的内容:struct s_user /用户区结构体long isuse; /是否使用char name20; /用户名char psd20; /密码long address; /目录地址;struct s_list /目录结构体long isuse; /是否使用char name20; /文件名字long myaddress; /本。

4、条目录地址long pointaddress; /指向的文件的地址long isfile; /是否锁定long pointsize; /目标文件的大小long nextaddress; /下条目录的地址;struct s_file /文件结构体long isuse; /是否使用char content256; /文件内容long next; /下个文件块地址;三、 系统执行1、 如果首次进入系统,还没有文件系统,则会提示格式化文件系统,创建分区,并初始化分区:2、刚初始化后,没有用户,提示创建用户:3、用户创建成功后出现对系统操作的菜单4、注册用户功能:5、用户登录,登录成功后显示当前用户下的。

5、所有文件及其详细信息,同时显示对文件操作的菜单:6、新注册的用户默认为没有文件,选择创建文件,并且每次对文件操作后显示当前用户的所有文件和操作菜单:7、此次新建的文件为锁定状态,不能被删除:8、对文件查看,默认创建的时候用0填充文件内容:9、修改文件内容:10、对文件的锁定进行装换:11、删除文件:12、注销登录退出系统:四、 功能实现Mysys.h#include #include myuserfile.hclass MSysterm /封装了管理系统的方法/成员变量private:FILE *myfile;MUser myuser;/成员函数public:MSysterm()void ou。

6、tName(); /打印登陆后的用户名int cheack(); /检查虚拟文件系统跟是否存在int myformat(); /初始化虚拟磁盘int createuser(); /创建用户int login(); /用户登录void mymain(); /主控制程序int logout(); /用户注销;Myuserfile.h#include class MUser /封装了管理文件的方法 /成员变量public:FILE *myfile;char name20; /用户名char psd20; /密码long listaddress; /目录地址long myaddress; /此用户的地。

7、址private:long lastaddress; /最后一个目录的地址/成员函数public:int createFile(); /增加文件int delFile(char filename20);/删除文件int revampFile(char filename20);/修改文件int mydir(); /列出当前目录的所有文件(夹)int viewFile(char filename20);/查看文件int myConversion(char filename20);/转换是否锁定状态private:int isSame(char filename_f20,char filename_。

8、s20);Mymain.cpp#include #include #include mysys.h#include using namespace std;int main()char nod1;int n_select = 2 , i_1 =0;MSysterm mysys;/*文件不存在的程序入口*/if(mysys.cheack()=-1)/磁盘空间不存在coutnod1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流if(nod1=Y|nod1=y)coutnod1;return 2;coutnod1。

9、;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流if(nod1=Y|nod1=y)if(mysys.createuser()=1)/创建用户coutn_select;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流if (n_select = 1)for (int i_1=0;i_1nod1;return 5;break;if (n_select = 2)if(mysys.createuser()=1)/创建用户cout#in。

10、clude #include /用于清除残留的输入流using namespace std;int MSysterm:cheack()/检查虚拟空间是否存在myfile=fopen(test1.txt,r);if(myfile=NULL)return -1;/返回-1,代表文件不存在fclose(myfile);return 1;int MSysterm:myformat()int i =1;myfile=fopen(test1.txt,w);if(myfile=NULL)return -1;s_user ms_user;ms_user.isuse=0;s_list ms_list;ms_li。

11、st.isuse=0;s_file ms_file;ms_file.isuse=0;for (i =1 ; ims_user.name;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流fseek(myfile,0,0);for (i=1;i=6)for (;)/输入密码coutms_user.psd;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流coutms_user2.psd;cin.clear(); / 清除流的错误标记c。

12、in.ignore(numeric_limits:max(),n); / 清空输入流for (m =0 ;mms_user.name;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流myfile=fopen(test1.txt,r);for (i = 1;ims_user.psd;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流for (m =0 ;mm_point;cin.clear(); / 清除流的错误标记cin.igno。

13、re(numeric_limits:max(),n); / 清空输入流switch (m_point)case 1:if (myuser.listaddress = 0)coutm_name1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流myget = myuser.viewFile(m_name1);switch (myget)case 1:coutm_name1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流myget。

14、 = myuser.delFile(m_name1);switch (myget)case 1:coutm_name1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流myget = myuser.revampFile(m_name1);switch (myget)case 1:coutm_name1;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流myget = myuser.myConversion(m_name1);swi。

15、tch (myget)case 0:cout#include #include #include /用于清除残留的输入流#include myuserfile.h#include allstruct.husing namespace std;int MUser:createFile()/增加文件s_list ms_list;s_file ms_file;long nowaddress =0 ,f_address10, num_char = 0 ;/目录循环记录变量,数据块地址变量组,字符个数(文件大小)int f_ad_num = 0 , myerr = 0 ,i = 1; /写入的块数,是否。

16、在最终写入时失败(失败置1)char f_name20 = ,m=0,e=0,f_islock;long old_lastaddress = lastaddress ;/上一个目录地址(用于出错回滚)myfile=fopen(test1.txt,r+);if (myfile = NULL) coutf_name;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流fseek(myfile,48*5,0);/文件指针跳到目录区for (i=1;inum_char;cin.clear(); / 清除流的错误标记cin.。

17、ignore(numeric_limits:max(),n); / 清空输入流if (num_char f_islock;cin.clear(); / 清除流的错误标记cin.ignore(numeric_limits:max(),n); / 清空输入流if( f_islock = y | f_islock = Y)ms_list.isfile = 0;elsems_list.isfile =1;fseek(myfile,48*5+44*50,0);/文件指针跳到数据区for ( i=0 ; i 255)/数据太多,一个区块放不了if ( fwrite(&ms_file.isuse,4,1,m。

18、yfile) = 0)/写入已被使用cout数据模块写入isuse失败endl;myerr = 1;for ( k =1 ; k =255 ; k+)/写入数据if ( fwrite(&m,1,1,myfile) =0)cout数据模块写入 内容 失败endl;myerr = 1;if ( fwrite(&e,1,1,myfile) = 0)/写入结束符cout数据模块写入 结束符 失败endl;myerr = 1;if ( fwrite(&ms_file.next,4,1,myfile) = 0)/写入下个数据块地址cout数据模块写入next失败endl;myerr = 1;num_cha。

19、r-=255; else/数据小于一个区块的大小if ( fwrite(&ms_file.isuse,4,1,myfile) = 0)/区块置为已使用cout数据模块写入isuse失败endl;myerr = 1;for ( k =1 ; k =num_char ; k+)if ( fwrite(&m,1,1,myfile) =0)cout数据模块写入 内容 失败endl;myerr = 1;for (k =1 ; k= (256-num_char);k+)/写入数据if ( fwrite(&e,1,1,myfile) = 0)cout数据模块写入 结束符 失败endl;myerr = 1;if ( fwrite(&ms_file.next,4,1,myfile) = 0)/写入下个文件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值