计算机操作系统课程设计.docx
- 文档编号:26810258
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:62
- 大小:115.73KB
计算机操作系统课程设计.docx
《计算机操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《计算机操作系统课程设计.docx(62页珍藏版)》请在冰豆网上搜索。
计算机操作系统课程设计
计算机操作系统课程设计
班级:
计091—1
姓名:
学号:
使用语言:
C++
指导老师:
学院:
一、系统要求
1、实验目得
通过一个简单多用户文件系统得设计,加深理解文件系统得内部功能及内部实现。
2、实验内容
为linux系统设计一个简单得二级文件系统。
要求做到以下几点:
(1)可以实现下列几条命令(至少4条);
loginﻩﻩ用户登陆
dirﻩﻩ 列文件目录
create创建文件
delete删除文件
openﻩﻩ 打开文件
closeﻩﻩ关闭文件
readﻩﻩ 读文件
write写文件
(2)列目录时要列出文件名、物理地址、保护码与文件长度;
(3)源文件可以进行读写保护.
二、系统分析
1、设计思想
本文件为二级文件系统,即要实现对文件得增删改查,同时又具备登陆系统、注册用户得功能,各个用户之间得文件系统互不干扰。
本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下得文件.另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。
系统采用结构体来存储用户、文件目录、文件数据内容:
0 48*5 48*5+44*50 48*5+44*50+264*200
每个分区都就是由结构体组成,每个个去得结构体得个数由格式化系统就是决定.
整个系统得编码构成主要分为:
Allstruct、h 定义了每个分区得结构体;
Mysys、h 声明了对系统操作得各种方法;
Myuserfile、h 声明了对文件操作得各种方法;
Mymain、cpp 整个系统得主函数,操作入口;
Mysys、cpp包含了mysys、h,实现了操作系统得各种方法;
Myuser包含了myuserfile、h,实现了操作文件得各种方法;
2、主要数据结构
Allstruct、h文件得内容:
structs_userﻩ //用户区结构体
{
ﻩlongisuse; //就是否使用
charname[20];//用户名
charpsd[20]; //密码
ﻩlong address; //目录地址
};
structs_listﻩ //目录结构体
{
longisuse;//就是否使用
charname[20]; //文件名字
long myaddress;//本条目录地址
ﻩlongpointaddress; //指向得文件得地址
long isfile; //就是否锁定
longpointsize; //目标文件得大小
ﻩlongnextaddress; //下条目录得地址
};
structs_file //文件结构体
{
ﻩlongisuse; //就是否使用
ﻩcharcontent[256];//文件内容
ﻩlongnext; //下个文件块地址
};
三、系统执行
1、如果首次进入系统,还没有文件系统,则会提示格式化文件系统,创建分区,并初始化分区:
2、刚初始化后,没有用户,提示创建用户:
3、用户创建成功后出现对系统操作得菜单
4、注册用户功能:
5、用户登录,登录成功后显示当前用户下得所有文件及其详细信息,同时显示对文件操作得菜单:
6、新注册得用户默认为没有文件,选择创建文件,并且每次对文件操作后显示当前用户得所有文件与操作菜单:
7、此次新建得文件为锁定状态,不能被删除:
8、对文件查瞧,默认创建得时候用0填充文件内容:
9、修改文件内容:
10、对文件得锁定进行装换:
11、删除文件:
12、注销登录退出系统:
四、功能实现
Mysys、h
#include #include"myuserfile、h" classMSysterm { //封装了管理系统得方法 ﻩ//成员变量 private: FILE*myfile; ﻩMUsermyuser; //成员函数 public: MSysterm(){} voidoutName();//打印登陆后得用户名 intcheack(); //检查虚拟文件系统跟就是否存在 int myformat(); //初始化虚拟磁盘 ﻩintcreateuser();//创建用户 intlogin();//用户登录 voidmymain();//主控制程序 int logout(); //用户注销 }; Myuserfile、h #include classMUser //封装了管理文件得方法 { //成员变量 public: ﻩFILE*myfile; ﻩcharname[20]; //用户名 ﻩcharpsd[20]; //密码 longlistaddress; //目录地址 ﻩlongmyaddress; //此用户得地址 private: longlastaddress; //最后一个目录得地址 //成员函数 public: intcreateFile(); //增加文件 int del[20]);//删除文件 ﻩintrevamp[20]);//修改文件 intmydir(); //列出当前目录得所有文件(夹) ﻩint view[20]);//查瞧文件 ﻩint myConversion(char [20]);//转换就是否锁定状态 private: ﻩintisSame(char[20],char[20]); }; Mymain、cpp #include <stdio、h> #include #include"mysys、h” #include usingnamespacestd; intmain() { charnod1; ﻩintn_select= 2,i_1=0; ﻩMSysterm mysys; ﻩ/***********文件不存在得程序入口************/ ﻩif(mysys、cheack()==—1)//磁盘空间不存在 ﻩ{ ﻩcout〈<”虚拟磁盘文件不存在,就是否生成? Y/N ”〈〈endl; ﻩcin>>nod1; ﻩcin、clear(); //清除流得错误标记 ﻩcin、ignore(numeric_limits : max(),'\n'); //清空输入流 ﻩﻩif(nod1=='Y'||nod1=='y') { ﻩcout<〈"正在创建.。 .。 ”< ﻩﻩif(mysys、myformat()! =1)//创建磁盘空间 { ﻩcout<<"创建磁盘空间失败! 即将退出。 "〈 ﻩﻩﻩcin>〉nod1; ﻩﻩreturn2; ﻩﻩ} ﻩcout<〈”创建完成! 就是否创建用户? Y/N”〈〈endl; ﻩcin>>nod1; ﻩﻩﻩcin、clear();// 清除流得错误标记 ﻩﻩcin、ignore(numeric_limits〈streamsize>: : max(),'\n');//清空输入流 ﻩﻩif(nod1==’Y'||nod1=='y’) { ﻩﻩif(mysys、createuser()==1)//创建用户 ﻩﻩ{ ﻩﻩﻩcout〈〈”创建用户成功。 "<<endl; ﻩﻩ} ﻩﻩelse ﻩﻩ{ ﻩﻩﻩﻩcout<<”创建用户失败! 即将退出。 "< ﻩﻩﻩreturn3; ﻩﻩﻩ} ﻩ} ﻩﻩelse { ﻩﻩﻩcout<<”匿名用户无法进入系统,正在退出。 。 。 "< ﻩﻩﻩreturn4; ﻩﻩ} ﻩ} ﻩelse { ﻩcout〈<"程序已结束! 按任意键退出。 .。 。 ”<<endl; ﻩﻩﻩreturn1; ﻩ} ﻩ} /***********文件存在得程序入口**************/ ﻩfor(;;) ﻩ{ ﻩcout<〈"*********************"〈〈endl; ﻩcout〈<"请选择: ”<<endl; ﻩﻩcout<〈”1、登录"<<endl〈<" 2、注册"〈〈endl<<”3、 退出"<〈endl; cout〈<"*********************"<〈endl; ﻩcin〉〉n_select; ﻩﻩcin、clear();//清除流得错误标记 cin、ignore(numeric_limits<streamsize>: : max(),'\n');//清空输入流 ﻩif(n_select ==1) ﻩ{ ﻩfor(inti_1=0;i_1<=3;i_1++)//登录 ﻩﻩ{ ﻩﻩif(mysys、login()==1) ﻩ{ ﻩﻩﻩcout<<"登陆成功! 欢迎您”; ﻩﻩmysys、outName(); ﻩﻩﻩbreak; ﻩﻩﻩ} ﻩﻩelse ﻩﻩﻩ{ﻩ ﻩﻩﻩcout<<"用户名不存在或密码错误! "<〈endl; ﻩﻩ} ﻩﻩ} ﻩﻩif (i_1==4) ﻩﻩ{ ﻩcout<<"非法用户! ”〈〈endl<<”输入任意键退出."<〈endl; ﻩﻩﻩcin>〉nod1; ﻩﻩreturn5; ﻩﻩﻩ} ﻩﻩbreak; ﻩﻩ} ﻩﻩif(n_select== 2) ﻩ{ ﻩﻩif(mysys、createuser()==1)//创建用户 { ﻩﻩcout<<"创建用户成功。 ”〈<endl; ﻩﻩﻩ} ﻩelse ﻩﻩ{ ﻩﻩﻩcout<〈”创建用户失败! "〈 ﻩ} ﻩ} if(n_select==3) ﻩﻩ{ ﻩreturn 6; ﻩﻩ} ﻩ} ﻩmysys、mymain(); return0; } Mysys、cpp #include"mysys、h" #include"allstruct、h" #include〈iostream> #include〈stdio、h〉 #include usingnamespacestd; int MSysterm: : cheack()//检查虚拟空间就是否存在 { ﻩmy("test1、txt",”r"); ﻩif(my) { return—1;//返回—1,代表文件不存在 ﻩ} ﻩfclose(myfile); return1; } intMSysterm: : myformat() { ﻩinti=1; ﻩmy(”test1、txt",”w"); ﻩif(my) { ﻩﻩreturn -1; } s_user ms_user; ﻩms_user、isuse=0; ﻩs_listms_list; ms_list、isuse=0; s_; ms_; for(i=1;i〈=5; i++) { ﻩif(fwrite(&ms_user,sizeof(ms_user),1,my)//用户区格式化 ﻩ{ ﻩcout〈〈”用户格式信息写入失败! "〈<endl; ﻩfclose(myfile); ﻩﻩﻩreturn-2; } } ﻩfor (i=1;i〈=50;i++) ﻩ{ if(fwrite(&ms_list,sizeof(ms_list),1,my)//目录区格式化 ﻩ{ ﻩﻩﻩcout〈<”目录格式信息写入失败! ”〈<endl; ﻩﻩﻩfclose(myfile);ﻩ ﻩﻩreturn-3; ﻩ} } for (i=0;i<=199;i++) ﻩ{ ﻩﻩif(fwrite(&ms_(ms_)! =1)//数据区格式化 ﻩﻩ{ cout<〈"数据格式信息写入失败! "<〈endl; fclose(myfile);ﻩ return-4; } ﻩ} ﻩfclose(myfile); return1; } intMSysterm: : createuser()//创建用户 { ﻩs_user ms_user,ms_user2; ﻩintnowaddress=0 ,issame=0,m=0,i=1 ;//记录当前得扫描指针,密码比对标志位,循环使用得变量 cout<<”正在检查用户空间就是否足够。 。 .。 ”<〈endl; my("test1、txt”,"r”); for(i=1;i<=5;i++,fseek(my),nowaddress++)//检查用户空间就是否足够 { ﻩif(fread(&ms_user2、isuse,4,1,my) ﻩ{ ﻩﻩcout<<"读取用户空间失败,虚拟磁盘格式错误,可能已被损坏"<〈endl; ﻩﻩfclose(myfile);ﻩ ﻩﻩreturn—1; } ﻩif(ms_user2、isuse==0) ﻩ{ ﻩﻩbreak; ﻩ} } ﻩif (i==6) { ﻩcout<<”用户空间已满! 创建用户失败”<〈endl; return-2; ﻩ} ﻩfor(;;) ﻩ{ cout<<"请输入新用户得用户名: ”<<endl; cin>>ms_user、name; ﻩcin、clear();// 清除流得错误标记 ﻩcin、ignore(numeric_limits〈streamsize>: : max(),'\n');//清空输入流 ﻩfseek(my); for(i=1;i<=5;i++)//检查用户名 ﻩ{ ﻩﻩif (fread(&ms_user2、isuse,4,1,my)//找到被使用得用户区,下一步读取名字 ﻩ{ ﻩcout〈<”读取用户空间失败,虚拟磁盘格式错误,可能已被损坏"< ﻩﻩﻩfclose(myfile);ﻩ ﻩﻩreturn —1; ﻩ} ﻩif (ms_user2、isuse==0) ﻩﻩ{ ﻩfseek(my); } ﻩelse ﻩﻩﻩ{ ﻩif(fread(&ms_user2、name,20,1,my)//读取用户区得名字 ﻩ{ ﻩﻩﻩcout<<”读取用户空间失败,虚拟磁盘格式错误,可能已被损坏”<〈endl; ﻩﻩﻩﻩﻩfclose(myfile);ﻩ ﻩﻩﻩﻩreturn-1; ﻩ} ﻩﻩfor(m=0;m〈=19;m++) ﻩ{ ﻩﻩﻩif(ms_user、name[m] ! =ms_user2、name[m]) ﻩﻩ{ ﻩﻩﻩﻩissame=0; ﻩﻩﻩbreak; ﻩﻩ} ﻩﻩﻩelse ﻩ{ ﻩissame=1; ﻩif(ms_user、name[m]=='\0') ﻩﻩﻩ{ ﻩﻩﻩbreak; ﻩﻩﻩﻩﻩ} ﻩﻩﻩﻩﻩ} ﻩ} ﻩﻩif(issame==1) ﻩﻩ{ ﻩﻩcout<<”用户名重复! 请重新输入: "〈〈endl; ﻩbreak; ﻩ} ﻩﻩﻩfseek(my); ﻩ} } ﻩif (i>=6) { ﻩfor(;;)//输入密码 ﻩﻩ{ ﻩﻩcout<<”请输入密码,最多19位。 "〈〈endl; ﻩﻩﻩcin>〉ms_user、psd; ﻩcin、clear();//清除流得错误标记 ﻩﻩcin、ignore(numeric_limits<streamsize〉: : max(),'\n’);//清空输入流 ﻩﻩcout〈〈"请再次输入密码: "<〈endl; ﻩcin〉>ms_user2、psd; ﻩﻩcin、clear(); //清除流得错误标记 ﻩcin、ignore(numeric_limits<streamsize>: : max(),'\n’);//清空输入流 ﻩfor(m=0;m<=19;m++) ﻩﻩ{ ﻩﻩﻩﻩif (ms_user、psd[m]! =ms_user2、psd[m]) ﻩﻩﻩﻩ{ ﻩﻩﻩﻩissame =0; ﻩﻩﻩﻩcout<<”两次密码不匹配"<〈’’<<ms_user、psd<<""〈〈ms_user2、psd〈<""<<m<<endl; ﻩﻩﻩﻩbreak; ﻩ} ﻩﻩﻩelse ﻩﻩﻩ{ ﻩﻩﻩissame=1; ﻩﻩﻩﻩif(ms_user、psd[m]=='\0’) ﻩﻩﻩﻩ{ ﻩﻩﻩﻩbreak; ﻩﻩﻩﻩﻩ} ﻩﻩﻩ} ﻩﻩ} ﻩﻩﻩif(issame== 1) ﻩﻩ{ ﻩﻩﻩbreak; ﻩﻩﻩ} ﻩﻩ} cout〈〈"进入存储。 。 。 ."〈〈endl; ﻩﻩﻩms_user、isuse =1;//空间使用置为使用(1); ﻩms_user、address =0;//默认不存在目录 fclose(myfile); my(”test1、txt”,"r+”); fseek(my*nowaddress,0); ﻩif(fwrite(&ms_user,sizeof(ms_user),1,myfile) == 0) ﻩ{ ﻩcout〈〈”写入用户信息失败! "<<endl; ﻩ} ﻩﻩelse ﻩ{ ﻩﻩbreak; ﻩ} } } fclose(myfile); ﻩreturn1; } intMSysterm: : login()//用户登录 { s_userms_user,ms_user2; intissame =0,m=0,i=0;//比较标记,循环使用得变量 cout<<"请输入用户名: ”<〈endl; ﻩcin>>ms_user、name; cin、clear();//清除流得错误标记 cin、ignore(numeric_limits〈streamsize>: : max(),’\n'); //清空输入流 ﻩmy(”test1、txt","r”); for (i=1;i<=5;i++) ﻩ{ ﻩif(fread(&ms_user2、isuse,4,1,my)//读取被使用得用户区 ﻩ{ ﻩﻩﻩcout〈<"读取用户空间失败,虚拟磁盘格式错误,可能已被损坏"<〈endl; fclose(myfile); ﻩﻩreturn-1; ﻩ} ﻩif(ms_user2、isuse==0) ﻩﻩ{ ﻩfseek(my); ﻩﻩﻩcontinue; } else ﻩﻩ{ ﻩﻩﻩif(fread(&ms_user2、name,20,1,my)//读取名字 ﻩ{ ﻩﻩcout<〈”读取用户空间失败,虚拟磁盘格式错误,可能已被损坏"<〈endl; ﻩﻩﻩfclose(myfile);ﻩ ﻩﻩﻩﻩreturn—1; ﻩﻩﻩ} ﻩfor(m=0;m<=19;m++) ﻩﻩﻩ{ ﻩﻩif(ms_user、name[m] ! =ms_user2、name[m]) ﻩﻩ{ ﻩﻩﻩissame = 0; ﻩﻩﻩbreak; ﻩﻩﻩ} ﻩelse ﻩ{ ﻩﻩﻩﻩissame=1; ﻩﻩif(ms_user、name[m]== '\0') ﻩﻩ{ ﻩﻩﻩbreak; ﻩﻩ} ﻩﻩﻩ} } if (issame== 1) { ﻩif (fread(&ms_user2、psd,20,1,my)//读取密码 ﻩﻩﻩﻩ{ ﻩﻩﻩﻩﻩcout〈〈"读取密码失败! 磁盘错误."〈〈endl; ﻩﻩfclose(myfile); ﻩreturn—1; ﻩﻩ} ﻩﻩﻩfor (int k=0;k<=2;k++) ﻩﻩﻩ{ ﻩﻩcout〈<"请输入密码: "<〈endl; ﻩﻩcin〉>ms_user、psd; ﻩﻩcin、clear();//清除流得错误标记 ﻩﻩcin、ignore(numeric_limits<streamsize>: : max(),'\n’);// 清空输入流 ﻩﻩﻩfor(m=0;m<=19;m++) ﻩﻩﻩﻩ{ ﻩﻩﻩﻩﻩif(ms_user、psd[m] ! =ms_user2、psd[m]) { ﻩﻩissame =0; ﻩﻩbreak; ﻩﻩ} ﻩﻩﻩﻩelse ﻩﻩﻩ{ ﻩﻩﻩﻩﻩﻩissame= 1; ﻩﻩﻩif(ms_user、psd[m]==’\0') ﻩﻩﻩ{ ﻩbreak; ﻩﻩ} ﻩ} ﻩﻩﻩﻩ} ﻩﻩﻩﻩif(issame==0) { ﻩﻩcout<<"密码错误,请重新输入.”<〈endl; ﻩﻩ} ﻩelse ﻩﻩ{ ﻩﻩﻩif(fread(&ms_user2、address,4,1,my)//读取目录地址 ﻩﻩﻩ{ ﻩﻩﻩﻩcout<<"读取目录失败! 磁盘错误。 "<〈endl; ﻩﻩfclose(myfile); ﻩﻩreturn-1; ﻩﻩﻩ} ﻩfor(m=0;m〈=19;m++)//对对象 myuser赋值 ﻩﻩ{ ﻩﻩmyuser、name[m]=ms_user2、name[m]; ﻩﻩﻩﻩﻩﻩmyuser、psd[m]=ms_user2、psd[m]; ﻩﻩ} ﻩﻩﻩmyuser、listaddress =ms_user2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)