注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘邓

每天收获一点点-目标:富足

 
 
 

日志

 
 

合工大OS课设  

2012-06-18 10:45:51|  分类: 操作系统类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
要求:
 访问控制技术:建立基于访问控制表的系统安全管理。(1人)                  4

建立以用户组为管理域的访问控制表基本数据结构;

模拟操作系统中的若干对象,并可添加到访问控制表中;

建立操作系统的用户模型;

模拟用户登录及切换,访问对象时的受限情况。

运行结果:

合工大OS课设 - 刘邓 - 刘邓
 
合工大OS课设 - 刘邓 - 刘邓
数据文件如下:
ROOT.txt

root admin

CONTROL.txt

CC
ER WE WER
GG
RE WE RE
DD
RE ER WER
PRINTER
ER WE ER
MOUSE
ER WER ER
VV
ER WE WER


FGROUP.txt

20092675 20092675
20092676 20092676

SGROUP.txt

20092686 20092686
20092687 20092687

TGROUP.txt

20092696 20092696
20092697 20092697



代码和文件如下:

//OS.cpp
#include"OSDATA.h"
#include"FUNCTION.h"
int main()
{
//下面读取用户组相信
//读取root组相信
USER ROOT;
ifstream fin("ROOT.txt",ios::in);
fin>>ROOT.first;
fin>>ROOT.second;
fin.close();
vector<USER> FGROUP;//用户组一
vector<USER> SGROUP;//用户组二
vector<USER> TGROUP;//用户组三
USER tmpUSER;
//读取用户组一
ifstream fin1("FGROUP.txt",ios::in);
while(!fin1.eof())
{
fin1>>tmpUSER.first;
fin1>>tmpUSER.second;
FGROUP.push_back(tmpUSER);
}
fin1.close();
//读取用户组二
ifstream fin2("SGROUP.txt",ios::in);
while(!fin2.eof())
{
fin2>>tmpUSER.first;
fin2>>tmpUSER.second;
SGROUP.push_back(tmpUSER);
}
fin2.close();
//读取用户组三
ifstream fin3("TGROUP.txt",ios::in);
while(!fin3.eof())
{
fin3>>tmpUSER.first;
fin3>>tmpUSER.second;
TGROUP.push_back(tmpUSER);
}
fin3.close();
//用户组读取完成 下面读取访问控制表
vector<object> OBJCTRL;//对象控制表
string objname;
vector<string> ctrllist(3);
ifstream fin4("CONTROL.txt",ios::in);
while(1)
{
fin4>>objname;
fin4>>ctrllist[0];
fin4>>ctrllist[1];
fin4>>ctrllist[2];
if(fin4.eof())break;
OBJCTRL.push_back(object(objname,ctrllist));
}
fin4.close();
//下面进行登录操作
cout<<"欢迎使用LDOS!请登录:"<<endl;
while(1)
{
cout<<"**********************"<<endl;
cout<<"请输入用户名:";
string username;
cin>>username;
cout<<"请输入密码:";
string password;
cin>>password;
if(username == "root")
{
if(password == ROOT.second) {tag = 3;}
else {cout<<"用户名或者密码错误请重新登录。"<<endl;continue;}
}
size_t i = 0;
for(i =0;i<FGROUP.size();++i)
{
if(FGROUP[i].first == username&&FGROUP[i].second ==password)
{tag = 0;break;}
}
for(i =0;i<SGROUP.size();++i)
{
if(SGROUP[i].first == username&&SGROUP[i].second ==password)
{tag = 1;break;}
}
for(i =0;i<TGROUP.size();++i)
{
if(TGROUP[i].first == username&&TGROUP[i].second ==password)
{tag = 2;break;}
}
if(tag == 4)
{
cout<<"用户名或者密码错误,请重新输入。"<<endl;
continue;
}
//普通用户操作
if(tag!=3)
{
cout<<"欢迎"<<username<<"登录使用!"<<endl;;
while(1)
{
int flag = -1;
while(1)
{
cout<<"请输入要操作的对象名称:";
string objname;
cin>>objname;
for(size_t g = 0;g<OBJCTRL.size();++g)
{
if(OBJCTRL[g].m_objname == objname)
{flag = g;break;}
}
if(flag == -1) {cout<<"对象"<<objname<<"不存在,请重新输入";
continue;}
break;
}
cout<<"1.读取文件 2.向文件中写入 3.执行文件"
<<endl<<"4.切换用户 5.清屏 6.退出"<<endl;
int choice1;
cout<<"请出入选择(1—6):";
cin>>choice1;
switch(choice1)
{
case 1:OBJCTRL[flag].read();break;
case 2:OBJCTRL[flag].write();break;
case 3:OBJCTRL[flag].execute();break;
case 4:break;
case 5:system("cls");break;
case 6:exit(0);
default:cout<<"选择输入错误,请重新输入"<<endl;
}
if(choice1 == 4) break;
}
}
//管理员操作
if(tag == 3)
{
cout<<"欢迎管理员登录,请选择操作类型:"<<endl;
while(1)
{
cout<<"*************************************"<<endl;
cout<<"1.添加对象 2.显示对象 3.删除对象 4.修改对象"<<endl;
cout<<"5.切换用户 6.退出 7.清屏"<<endl;
int choice;
cout<<"请输入选择(1-7):";
cin>>choice;
switch (choice)
{
case 1:addobject(OBJCTRL);break;
case 2:listobject(OBJCTRL);break;
case 3:eraseobject(OBJCTRL);break;
case 4:changeobject(OBJCTRL);break;
case 6:exit(0);
case 5:tag =4 ;break;
case 7:system("cls");break;
default:cout<<"输入错误请重新输入!"<<endl;
}
if(choice == 5) break;
}
}
}

}

//OSDATA.h
#ifndef OSDATA_H
#define OSDATA_H
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<Windows.h>
using namespace std;
typedef pair<string,string> USER;
int tag = 4; //所在用户组的标记
struct object
{
string m_objname;
vector<string> m_ctrllist;
public:
object(const string& name,const vector<string> &ctrllist)
:m_objname(name),m_ctrllist(ctrllist){}
~object(){}
void read();
void write();
void execute();
};
void object::read()
{
if(m_ctrllist[tag].find('R') != -1)
{
cout<<"正在读取中..."<<endl;;
Sleep(1000);
cout<<"3..."<<endl;
Sleep(1000);
cout<<"2..."<<endl;
Sleep(1000);
cout<<"1"<<endl;
cout<<"成功读取!!!";
return;
}
cout<<"读取失败,你对"<<m_objname<<"对象没有读权限"<<endl;
}
void object::write()
{
if(m_ctrllist[tag].find('W') != -1)
{
cout<<"正在写入中..."<<endl;;
Sleep(1000);
cout<<"3..."<<endl;
Sleep(1000);
cout<<"2..."<<endl;
Sleep(1000);
cout<<"1"<<endl;
cout<<"成功写入!!!";
return;
}
cout<<"写入失败,你对"<<m_objname<<"对象没有写权限"<<endl;
}
void object::execute()
{
if(m_ctrllist[tag].find('E') !=-1)
{
cout<<"正在执行中..."<<endl;;
Sleep(1000);
cout<<"3..."<<endl;
Sleep(1000);
cout<<"2..."<<endl;
Sleep(1000);
cout<<"1"<<endl;
cout<<"成功执行!!!";
return;
}
cout<<"执行失败,你对"<<m_objname<<"对象没有执行权限"<<endl;
}

#endif


 

//FUNCTION.h
#ifndef FUNCTION_H
#define FUNCTION_H
#include"OSDATA.h"
//向访问控制表中添加对象
void addobject(vector<object> &objctrl)
{
string name;
vector<string> ctrllist(3);
cout<<"请输入对象名称:";
cin>>name;
for(size_t i = 0;i<objctrl.size();i++)
{
if(name == objctrl[i].m_objname)
{
cout<<"对象名已存在,本系统不支持同名。"<<endl;
return;
}
}
cout<<"可供选择的权限包括:R,W,E或者是三者的组合如RW,RE等"<<endl;
cout<<"请输入"<<name<<"对象对用户组一权限:";
cin>>ctrllist[0];
cout<<"请输入"<<name<<"对象对用户组二权限:";
cin>>ctrllist[1];
cout<<"请输入"<<name<<"对象对用户组三权限:";
cin>>ctrllist[2];
objctrl.push_back(object(name,ctrllist));
ofstream fout("CONTROL.txt",ios::app);
fout<<name<<endl;
fout<<ctrllist[0]<<" "<<ctrllist[1]<<" "<<ctrllist[2]<<endl;
fout.close();
cout<<"添加成功"<<endl;
}
//从访问控制表中删除对象
void eraseobject(vector<object> &objctrl)
{
string name;
cout<<"请输入要删除的对象名称:";
cin>>name;
vector<object>::iterator i,j;
for(i = objctrl.begin();i!=objctrl.end();++i)
{
if(name == (*i).m_objname)
{
objctrl.erase(i,i+1);
ofstream fout("CONTROL.txt",ios::out);
for(j = objctrl.begin();j!=objctrl.end();++j)
{
fout<<(*j).m_objname<<endl;
fout<<(*j).m_ctrllist[0]<<" "<<(*j).m_ctrllist[1]<<" "
<<(*j).m_ctrllist[2]<<endl;
}
fout.close();
cout<<"对象"<<name<<"已被成功删除"<<endl;
return ;
}
}
cout<<"对象不存在"<<endl;

}
//将访问控制表中的对象名列出来
void listobject(vector<object> &objctrl)
{
cout<<"系统存在对象如下:"<<endl;
for(size_t i = 0;i<objctrl.size();++i)
cout<<objctrl[i].m_objname<<" ";
cout<<endl;
}
//修改对象姓名或者权限
void changeobject(vector<object>& objctrl)
{
string name;
cout<<"请输入要修改的对象名:";
cin>>name;
for(size_t i = 0;i<objctrl.size();++i)
{
if(name == objctrl[i].m_objname)
{
cout<<"是否修改对象名称?Y/N:";
char c;
cin>>c;
if(c == 'Y')
{
string tmpname;
while(1)
{
cout<<"请输入新名称:";
cin>>tmpname;
int tmp = 0;
for(size_t k = 0;k<objctrl.size();++k)
{
if(tmpname == objctrl[k].m_objname)
{
cout<<"对象名已经存在,请重新输入"<<endl;;
tmp = 1;break;
}
}
if(tmp == 0)break;
}
objctrl[i].m_objname = tmpname;
}
cout<<"可供选择的权限包括:R,W,E或者是三者的组合如RW,RE等"<<endl;
cout<<"请输入"<<name<<"对象对用户组一权限:";
cin>>objctrl[i].m_ctrllist[0];
cout<<"请输入"<<name<<"对象对用户组二权限:";
cin>>objctrl[i].m_ctrllist[1];
cout<<"请输入"<<name<<"对象对用户组三权限:";
cin>>objctrl[i].m_ctrllist[2];
cout<<"修改成功!";
ofstream fout("CONTROL.txt",ios::out);
for(size_t j = 0;j<objctrl.size();++j)
{
fout<<objctrl[j].m_objname<<endl;
fout<<objctrl[j].m_ctrllist[0]<<" "<<objctrl[j].m_ctrllist[1]
<<" "<<objctrl[j].m_ctrllist[2]<<endl;
}
fout.close();
return;
}
}
cout<<"对象不存在!"<<endl;
}
#endif


  评论这张
 
阅读(140)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017