访问控制系统之用户访问部分

 // 用户访问.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<stdio.h>
#include <Windows.h>
#include<iostream>
#include<string>
#include<stdlib.h>
#include<fstream>
#include "md5.h"
using namespace std;

struct inf  //用户存储的信息结构
{
	char uid[50]; //用户名
	char password[100]; //密码
};
inf infor[300];  //最多有300个用户 
int i,m=0; 

struct STO  //主体对5个客体的访问权限 
{
	char uid[50];  
	int r1;//对第一个文件的访问权限
	int r2;//对第二个文件的访问权限
	int r3;//对第三个文件的访问权限 
	int r4;//对第四个文件的访问权限
	int r5;//对第五个文件的访问权限
};

STO p[300];  //最多有300个主体对客体的访问条数 
int n=0;   //访问控制矩阵中主体的个数

void init1()    
{
	char uid[50],password[50];
	fstream file; 
	file.open("d:\\lib.txt",ios::in);
	if(!file);
	else
	{
		while(file>>uid>>password)     //将文件中的uid、password赋值给结构体 
		{
			strcpy(infor[m].uid,uid);
			strcpy(infor[m].password,password);
			//cout<<infor[n].uid<<"  "<<infor[n].password<<"  "<<endl;  //读出原来文件的uid、password
			m++;
		}
	}
	file.close();
}

void init2()    
{
	char uid[50]={'\0'};
	int r1,r2,r3,r4,r5;
	
	 
	
	ifstream in("d:\\right.txt", ios::in);
	while(!in.eof())
	{
		in >> p[n].uid >> p[n].r1 >> p[n].r2 >> p[n].r3 >> p[n].r4 >> p[n].r5;
		n++;
	}
	
}


int _tmain(int argc, _TCHAR* argv[])
{
	int i,j,p1,p2,p3,p4,p5;
	p1=p2=p3=p4=p5=0;
	 init1();
	 init2();
	 FILE *fp;
	 char uid[10]={'\0'},password[100]={'\0'}, fname[10]={'\0'};
	 
	 fp=fopen("d:\\id.txt","r");
	 fscanf(fp,"%s",uid) ;
	 fclose(fp);
	 fp=fopen("d:\\pwd.txt","rb");	
	 fscanf(fp,"%s",password);
	 fclose(fp);
	 fp=fopen("d:\\fname.txt","rb");	
	 fscanf(fp,"%s",fname);
	 fclose(fp);
	 for(j=0;j<m;j++)           //循环逐一匹配寻找用户名 
	 {
		 if(strcmp(infor[j].uid,uid)==0)
		 {
			 if(strcmp(MD5String(password),infor[j].password)==0)
			 {

	 for(i=0;i<n;i++)     //循环逐一匹配寻找用户名 
	 {
		 if(strcmp(p[i].uid,uid)==0)
		 {
			  
			 if (strcmp(fname,"r1")==0)
			 {
				 if(p[i].r1==1)
				 {
					 ShellExecute(NULL, "open","cmd.exe", "/c   D:\\文件1.txt",NULL, 0);
					 break;

				 }
				 else
				  p1++;
				 break;

			 }
			 if (strcmp(fname,"r2")==0)
			 {
				 if(p[i].r2==1)
				 {
					 ShellExecute(NULL, "open","cmd.exe", "/c   D:\\文件2.txt",NULL, 0);
					 break;

				 }
				 else
					 p2++;break;
				 

			 }
			 if (strcmp(fname,"r3")==0)
			 {
				 if(p[i].r3==1)
				 {
					 ShellExecute(NULL, "open","cmd.exe", "/c   D:\\文件3.txt",NULL, 0);
					 break;

				 }
				 else
					 p3++;break;

			 }
			 if (strcmp(fname,"r4")==0)
			 {
				 if(p[i].r4==1)
				 {
					 ShellExecute(NULL, "open","cmd.exe", "/c   D:\\文件4.txt",NULL, 0);
					 break;

				 }
				 else
					 p4++;break;

			 }
			 if (strcmp(fname,"r5")==0)
			 {
				 if(p[i].r5==1)
				 {
					 ShellExecute(NULL, "open","cmd.exe", "/c   D:\\文件5.txt",NULL, 0);
                     break;
				 }
				 else
					 p5++;break;

			 }
			
		 }

	 }

			 break;}
			 else
				 MessageBox(NULL,TEXT("用户名或密码错误"),TEXT("提示"),MB_OK | MB_SYSTEMMODAL); 
		 }

	 }
	 if(j==m)
	 {
		 MessageBox(NULL,TEXT("该用户不存在!"),TEXT("提示"),MB_OK | MB_SYSTEMMODAL);
	 }
	 if(p1||p2||p3||p4||p5==1)
	 {
		 MessageBox(NULL,TEXT("您没有权限访问该文件"),TEXT("提示"),MB_OK | MB_SYSTEMMODAL);
	 }


	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值