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

📄 account.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "Account.h"
#include "EditAcc.h"
#include "option.h"
#include "dido.h"
#include "Param.h"
#include "gridtool.h"
#include "right.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

//设置编辑、链表
static void SetEditText(TAccountForm *ta);
//设置Grid标题
static void SetGridTitle(TStringGrid *pGrid);
//设置Grid内容
static void SetGridText(TStringGrid *pGrid,void *pHead);
//帐号节点排序
static int SortAccountOnTList(void *pHead,int nIndex);
//比较两帐号节点
static int CompAccountDot(void *p1,void *p2);

//---------------------------------------------------------------------------
__fastcall TAccountForm::TAccountForm(TComponent* Owner)
        : TForm(Owner)
{
 m_pHead = new TList;
}
//---------------------------------------------------------------------------
void __fastcall TAccountForm::FormDestroy(TObject *Sender)
{
 DelTList(m_pHead);
 delete m_pHead;
 m_pHead=NULL;
}
//---------------------------------------------------------------------------
//设置帐号
int SetAccount(TObject *Owner)
 {
  TAccountForm *Acc;
  int rc;

  rc=FALSE;
  Acc = new TAccountForm((TComponent*)Owner);
  if(Acc!=NULL){
    Acc->m_nDone=FALSE;
    SetEditText(Acc);
    Acc->ShowModal();
    rc=Acc->m_nDone;
    delete Acc;
   }
  return(rc);
 }
//设置编辑、链表
void SetEditText(TAccountForm *ta)
 {
  ReadAllAccount(ta->m_pHead);

  SetGridTitle(ta->m_TextGrid);
  SetGridText(ta->m_TextGrid,ta->m_pHead);

  if(LookCount(ta->m_pHead)>0)
    ta->m_DelBut->Enabled=TRUE;
  else ta->m_DelBut->Enabled=FALSE;
  ta->m_SaveBut->Enabled=FALSE;
 }

//设置Grid标题
void SetGridTitle(TStringGrid *pGrid)
 {
  static char *pszTitle[]={"No.","用户名","密码","用户级别"};
  int x[10];
  int i,n,nWidth;

  nWidth = pGrid->ClientRect.Width();
  n = pGrid->ColCount;
  ZeroMemory(x,sizeof(x));
  x[0]=25;
  if(n>1)nWidth = (nWidth-x[0]-n)/(n-1);
  for(i=1;i<n;i++)x[i]=nWidth;
  for(i=0;i<n;i++){
    pGrid->ColWidths[i]=x[i];
    pGrid->Cells[i][0]=pszTitle[i];
   }
 }
//显示Grid的内容
void SetGridText(TStringGrid *pGrid,void *pHead)
 {
  void *pCur;
  ACCOUNT *a;
  TStringList *t;
  int i,n;
  char szBuf[50];

  ClearGridAllText(pGrid,FALSE);
  try{ t = new TStringList;}
  catch(...){return;}

  for(i=0;;i++){
    pCur = GetDotOnTList(pHead,i);
    if(pCur==NULL)break;

    a=LookAccount(pCur);
    t->Clear();
    wsprintf(szBuf,"%02d",i+1);
    t->Add(szBuf);
    t->Add(a->szName);
    n = lstrlen(a->szPassword);
    FillMemory(szBuf,n,'*');szBuf[n]=0;
    t->Add(szBuf);
    t->Add(GetAccTextWithLevel(a->nLevel));
     //显示Grid的nIndex行内容
    DispGridText(pGrid,t,i);
   }
  delete t;
 }
//---------------------------------------------------------------------------

void __fastcall TAccountForm::m_TextGridSelectCell(TObject *Sender,
  int ACol,int ARow, bool &CanSelect)
{
 int n;
 n =LookCount(m_pHead);
 if(ARow>n){
   CanSelect=FALSE;
   m_TextGrid->Row=n>0?n:1;
  }
 else CanSelect=TRUE;
}
//---------------------------------------------------------------------------

void __fastcall TAccountForm::m_CloseButClick(TObject *Sender)
{
  static char pszText[]="数据还没有保存!\n\n是否保存?";
  int rc;

  if( m_SaveBut->Enabled){
    rc= Application->MessageBox(pszText,GetMainTitle(),
       MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1|MB_APPLMODAL);
    if(rc==IDYES) m_SaveButClick(Sender);
   }
 ModalResult=IDOK;
}
//---------------------------------------------------------------------------

void __fastcall TAccountForm::m_AddButClick(TObject *Sender)
 {
  int nIndex,rc;
  void *pHead;

  rc=((TControl *)Sender)->Tag-100;
  if(rc>0) nIndex= m_TextGrid->Row-1;
  else nIndex=-1;
  pHead = m_pHead;
  rc=ReworkAccount(this,pHead,nIndex);
  if(rc>=0){//显示Grid的nIndex行内容
    nIndex = SortAccountOnTList(pHead,rc);//排序
    if(rc>nIndex)rc=nIndex;
    if(rc>=0){
      SetGridText(m_TextGrid,pHead);
      m_TextGrid->Row=nIndex+1;
     }
    m_SaveBut->Enabled=TRUE;
    m_DelBut->Enabled=TRUE;
   }
 }

void __fastcall TAccountForm::m_DelButClick(TObject *Sender)
{
  static char
    pszText[]="是否真的删除\n\n用户名为:\"%s\"的帐号?";
  void *p,*pHead;
  char szBuf[100];
  int rc,nIndex,nCount;

  pHead = m_pHead;
  nIndex= m_TextGrid->Row-1;
  p = GetDotOnTList(pHead,nIndex);
  if(p!=NULL){
    wsprintf(szBuf,pszText,LookAccount(p)->szName);
    rc= Application->MessageBox(szBuf,GetMainTitle(),
       MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
    if(rc==IDYES){
       DelDotOnTList(pHead,nIndex);
       nCount = LookCount(pHead);
       SetGridText(m_TextGrid,pHead);//删除最后行显示
       if(nCount<=0)nIndex=1;
       if(nIndex>nCount)nIndex=nCount;
       m_TextGrid->Row=nIndex;

       if(nCount<=0) m_DelBut->Enabled=FALSE;
       m_SaveBut->Enabled=TRUE;
      }
   }
}

void __fastcall TAccountForm::m_SaveButClick(TObject *Sender)
{
 SaveAllAccount(m_pHead);
 m_SaveBut->Enabled=FALSE;
 m_nDone=TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TAccountForm::m_TextGridDrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
  if(State.Contains(gdFixed))//显示格栅标题
    DispGridTitle(Sender,ACol,ARow,Rect,clRed);
  else if(ACol>1)//设置格栅文字颜色,文字居中
    SetGridTextColor(Sender,ACol,ARow,Rect,-1,DT_CENTER);
}
//帐号节点排序
int SortAccountOnTList(void *pHead,int nIndex)
 {
  nIndex=SortDotOnTList(pHead,nIndex,CompAccountDot);
  return(nIndex);
 }
//比较两帐号节点
int CompAccountDot(void *p1,void *p2)
 {
  return(lstrcmpi(LookAccount(p1)->szName,LookAccount(p2)->szName));
 }


⌨️ 快捷键说明

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