⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 right.cpp

📁 停车场用
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Right.h"
#include "dido.h"
#include "logfile.h"
#include "syspassword.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
struct tagITEMTEXT{
    WORD nItem;
    char *pszText;
   };
static tagITEMTEXT AllDones[]={
  {DONE_LOGFILE,"日志资料管理"},
  {DONE_PRINT, "打印数据"},
  {DONE_VIEWRECORD,"停车记录查询"},
  {DONE_TOTAL,     "统计报表"},
  {DONE_PAUSECR,"暂停/继续通讯控制器"},
  {DONE_MANAULBARR,"手动开闸"},

  {DONE_EDITCARD,  "设置卡片资料"},
  {DONE_EDITUSER,  "设置车主资料"},
  {DONE_EDITCONTROLER,"设置通讯控制器"},
  {DONE_EDITROADWAY,  "设置车道资料"},
  {DONE_EDITPRICE,"设置停车收费"},
  {DONE_EDITPARK,"设置停车场资料"},

  {DONE_DATABASE,  "数据库管理"},
  {DONE_EDITACCOUNT,"用户帐号密码管理"},
  {DONE_EDITSYSPASSWORD,"设置系统密码"},
  };

//获取单项权限
static int GetOneRightWithDone(DWORD nRight,int nDone);

//获取用户级别的文本
char *GetAccTextWithLevel(int nItem)
 {
  static char *pszText[]={"普通用户","超级用户",
       "管理员","自定义"};
  char *p;

  if(nItem>=0 && nItem<sizeof(pszText)/sizeof(char *))
    p=pszText[nItem];
  else p=NULL;
  return(p);
 }
//获取默认帐号
void *GetDefAccount(void)
 {
  static ACCOUNT DefAccount=
      {"Administrator","",RIGHT_MANAGE};
  return(&DefAccount);
 }
//获取当前帐号参数
long GetCurAccParam(int nMode)
 {
  static ACCOUNT CurAccount;
  long lParam;

  if(nMode==1)//名称
    lParam=(long)CurAccount.szName;
  else if(nMode==2)//密码
    lParam=(long)CurAccount.szPassword;
  else if(nMode==3)//权限
    lParam=(long)CurAccount.nRight;
  else if(nMode==4)//级别
    lParam=(long)CurAccount.nLevel;
  else //帐号
    lParam=(long)&CurAccount;
  return(lParam);
 }
//设置当前帐号
void SetCurAccount(void *pAccount)
 {
  ACCOUNT *pCurAcc;
  DWORD nRight;

  pCurAcc = (ACCOUNT *)GetCurAccount();
  MoveMemory(pCurAcc,pAccount,sizeof(ACCOUNT));

  SetCurDefRight();//设置当前帐号默认权限
 }
//设置当前帐号默认权限
void SetCurDefRight(void)
 {
  ACCOUNT *pCurAcc;
  DWORD nRight;

  pCurAcc = (ACCOUNT *)GetCurAccount();
  nRight = GetDefaultRight(pCurAcc->nLevel);
  if(nRight!=0)//系统默认的权限
    pCurAcc->nRight = nRight;
 }
//验证用户级别
int ValidateLevel(int nDoneItem,int nLevel)
 {
  static char pszText[]=
     "对不起! \n\n您的权限级别, 不能进行此操作...";
  ACCOUNT *pCurAcc;
  int rc;

  rc=FALSE;
  pCurAcc = (ACCOUNT *)GetCurAccount();
  if((int)pCurAcc->nLevel >= nLevel)rc=TRUE;
  if(rc) rc= GetOneRightOnAcc(pCurAcc,nDoneItem);//获取帐号单项权限许可
  if(rc==FALSE){
    MessageBeep(MB_ICONHAND);
    Application->MessageBox(pszText,GetPasswordTitle(),
      MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL);
   }

  return(rc);
 }
//验证用户级别和密码(nPass<0忽略密码,nMost=0 管理员用户可忽略密码)
int CheckAccountRight(int nDoneItem,int nLevel,int nPass,int nMost)
 {
  int rc,n;

  rc= ValidateLevel(nDoneItem,nLevel); //验证用户权限
  if(rc){
    n = GetCurAccLevel();
    if(nMost || n!=RIGHT_MOST)//检查nPass级密码
      rc= CheckSysPassword(Screen->ActiveForm,nPass);
   }
  return(rc);
 }
//根据项目编号获取权限名称
char *GetRightTextWithDone(int nDone)
 {
  char *p;
  int i,n;

  n = sizeof(AllDones)/sizeof(tagITEMTEXT);
  for(i=0;i<n;i++)
    if((int)(AllDones[i].nItem)==nDone)break;
  if(i<n)p=AllDones[i].pszText;
  else p=NULL;
  return(p);
 }
//根据序号获取权限名称
char *GetRightTextWithItem(int nItem)
 {
  char *p;
  int n;

  n = sizeof(AllDones)/sizeof(tagITEMTEXT);
  if(nItem>=0 && nItem<n)
    p=AllDones[nItem].pszText;
  else p=NULL;
  return(p);
 }
//根据序号获取权限编号
int GetRightWithItem(int nItem)
 {
  int n;

  n = sizeof(AllDones)/sizeof(tagITEMTEXT);
  if(nItem>=0 && nItem<n)
    n=AllDones[nItem].nItem;
  else n=-1;
  return(n);
 }
//根据级别获取系统默认的权限
DWORD GetDefaultRight(int nLevel)
 {
  DWORD nRight;

    //定义权限
  if(nLevel==RIGHT_USER)nRight = 0x0ff;  //一般用户
  else if(nLevel==RIGHT_POWER)nRight= 0x0ffff; //超级用户
  else if(nLevel==RIGHT_MANAGE)nRight = MAXDWORD; //管理员
  else nRight=0;
  return(nRight);
 }
//获取单项权限许可
int GetOneRightWithDone(DWORD nRight,int nDone)
 {
  DWORD n;
  int rc;

  if(nDone>=0 || nDone <sizeof(DWORD)*8){
    n = 1<<nDone;
    rc = nRight & n;

    if(rc!=0)rc=TRUE;
    else rc=FALSE;
   }
  else rc=TRUE;
  return(rc);
 }
//设置帐号单项权限许可
int SetOneRightOnAcc(void *pAcc,int nDone,int nMode)
 {
  ACCOUNT *t;
  DWORD n;
  int rc;

  t = (ACCOUNT *)pAcc;
  if(t==NULL)return(0);
  if(nDone<0 || nDone>=sizeof(t->nRight)*8)return(0);

  n = 1<<nDone;
  rc = t->nRight & n;
  if(nMode>0) t->nRight |= n;
  else if(nMode==0)t->nRight &= ~n;

  if(rc!=0)rc=TRUE;
  return(rc);
 }
//设置帐号所有权限许可
int SetAllRightOnAcc(void *pAcc,DWORD nRight)
 {
  ACCOUNT *t;
  DWORD n;

  t = (ACCOUNT *)pAcc;
  if(t==NULL)return(0);

  n = t->nRight;
  t->nRight=nRight;
  return(n);
 }
//保存一个日志
int SaveOneLogToFile(int nDone)
 {
  char *pszAccName,*pszDone;
  int rc;

  pszAccName = GetCurAccName();//获取当前帐号名
  pszDone = GetRightTextWithDone(nDone);

  //保存帐号日志
  rc=SaveAccountLog(pszAccName,pszDone);
  return(rc);
 }
//查看日志
int LookAppLog(TObject *Owner)
 {
  static char pszTitle[]="停车场管理系统日志";
  int rc;

  rc=LookLog(Owner,pszTitle);  //查看日志
  return(rc);
 }
//设置当前帐号为无(自定义,且无任何权限)
int SetCurAccToNone(void)
 {
  static char pszNoneAcc[]="(None Operator)";
  ACCOUNT a;

  ZeroMemory(&a,sizeof(a));

  lstrcpy(a.szName,pszNoneAcc);
  a.nLevel = RIGHT_DEFINE;  //自定义

  SetCurAccount(&a);//设置当前帐号
  return(TRUE);
 }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -