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

📄 parkspace.cpp

📁 停车场用
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <math.h>
#pragma hdrstop

#include "ParkSpace.h"
#include "Gridtool.h"
#include "dido.h"
#include "option.h"
#include "CBuilder.h"
#include "param.h"
#include "dynamic.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//设置显示内容
static void SetEditText(TParkForm *te);

//设置Grid内容
static void SetParkGridText(TStringGrid *pGrid,void *pPark);
//---------------------------------------------------------------------------
//设置假日格栅宽度
static void SetParkGridWidth(TStringGrid *pGrid);
//设置显示收费并保存已显示收费
static int ShowParkText(TParkForm *te,int nPark);
//设置一个显示收费
static void SetOneParkText(TParkForm *te,void *pParkList,int nPark);
//获取一个显示收费
static int GetOneParkText(TParkForm *te,void *pParkList,int nPark);
//获取相同编号(-1=>无,0=>原来,1=>其它记录)
static int GetOtherOnTList(void *pHead,PARKDATA *Sour,int nOld);
//设置收费方式组合框
static void SetParkTypeCoBox(TComboBox *pBox);
//设置收费金额子控件
static int SetParkControl(TParkForm *te);
//设置状态栏
static void SetStatusBar(TStatusBar *pBar,int nMode);

//---------------------------------------------------------------------------
__fastcall TParkForm::TParkForm(TComponent* Owner)
    : TForm(Owner)
{
 m_pHead = new TList;
}
//---------------------------------------------------------------------------
void __fastcall TParkForm::FormDestroy(TObject *Sender)
{
 DelTList(m_pHead);
 delete m_pHead;
}
//---------------------------------------------------------------------------
//设置停车场
int SetParkData(TObject *Owner)
 {
  TParkForm *se;
  int rc;

  rc=FALSE;
  se = new TParkForm((TComponent*)Owner);
  if(se!=NULL){
    SetEditText(se);
    se->ShowModal();
    rc=se->m_nDone;
    delete se;
   }
  return(rc);
 }
//设置显示内容
void SetEditText(TParkForm *te)
 {
  void *pList;
  int n;

  pList = te->m_pHead;
  te->m_nEdit = -1;
  te->m_nDone=0;

      //拷贝TList链,nSize:节点内容尺寸
  CopyTList(pList,GetParkList(),sizeof(PARKDATA));
  SetParkGridWidth(te->m_TextGrid);  //设置格栅宽度
  SetParkGridText(te->m_TextGrid,pList);

  if(LookCount(pList)<=0)n=FALSE;
  else n=TRUE;
  te->m_DelBut->Enabled=n;
  te->m_EditBut->Enabled=n;
  te->m_SaveBut->Enabled=FALSE;
  te->m_CurGBox->Enabled=FALSE;
  SetStatusBar(te->m_StatusBar,FALSE);
 }

//设置Grid内容
void SetParkGridText(TStringGrid *pGrid,void *pHead)
 {
  void *pCur;
  PARKDATA *a;
  TStringList *t;
  int i,n;
  char szBuf[50],*p;

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

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

    t->Clear();
    a = LookPark(pCur);
    wsprintf(szBuf,"%02d",a->nParkNo);
    t->Add(szBuf);
    t->Add(a->szName);//描述
    wsprintf(szBuf,"%d",a->nSpace);
    t->Add(szBuf);

     //显示Grid的nIndex行内容
    DispGridText(pGrid,t,i);
   }
  delete t;
 }
//设置假日格栅宽度
void SetParkGridWidth(TStringGrid *pGrid)
 {
  static char *pszTitle[]={"No.","停车场名称","车位数"};
  int x[10];
  int i,m,n,nWidth;

  nWidth = pGrid->ClientRect.Width();
  n = pGrid->ColCount;
  ZeroMemory(x,sizeof(x));
  x[0]=30;  x[2]=55;
  for(i=0;i<n;i++)nWidth-=x[i]+1;
  x[1]=nWidth;
  for(i=0;i<n;i++){
    pGrid->ColWidths[i]=x[i];
    pGrid->Cells[i][0]=pszTitle[i];
   }
 }

void __fastcall TParkForm::m_TextGridDrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
  PARKDATA a;
  int n;

  if(State.Contains(gdFixed))//显示格栅标题
    DispGridTitle(Sender,ACol,ARow,Rect,clRed);
  else if(ACol>1)//设置格栅文字颜色,文字居中
    SetGridTextColor(Sender,ACol,ARow,Rect,-1,DT_CENTER);
  else if(State.Contains(gdSelected) && ACol==1){//显示
    n = ARow-1;  m_nEdit=n;//显示一个停车场
    GetDotTextOnTList(m_pHead,n,&a,sizeof(a));
    m_NameEdit->SetTextBuf(a.szName);
    m_SpaceUpDown->Position=a.nSpace;
   }
}
//---------------------------------------------------------------------------
void __fastcall TParkForm::m_TextGridSelectCell(TObject *Sender,
      int ACol, int ARow, bool &CanSelect)
{
 int rc,n;

 rc=TRUE;
 n = LookCount(m_pHead);
 if(ARow>n){
   rc=FALSE;
   m_TextGrid->Row=n>0?n:1;
  }
 CanSelect=rc;
}
//获取一个显示收费
int GetOneParkText(TParkForm *te,void *pParkList,int nPark)
 {
  static char pszText[]="修改的停车场名称:\"%s\"\n\n"
      "已经有重复!";
  PARKDATA a;
  char szBuf[100];
  int rc;

  rc=FALSE;
  if(nPark>=0){
    GetDotTextOnTList(pParkList,nPark,&a,sizeof(a));
      //获取编辑内容
    te->m_NameEdit->GetTextBuf(a.szName,sizeof(a.szName));
    a.nSpace=te->m_SpaceUpDown->Position;

    rc=GetOtherOnTList(pParkList,&a,nPark);
    if(rc>0){ //重复,提示错误
      wsprintf(szBuf,pszText,a.szName);
      Application->MessageBox(szBuf,GetMainTitle(),
          MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
      rc=FALSE;
     }
    else rc=SetDotTextOnTList(pParkList,nPark,&a,sizeof(a));
   }
  return(rc);
 }
//---------------------------------------------------------------------------//获取相同编号(-1=>无,0=>原来,1=>其它记录)
int GetOtherOnTList(void *pHead,PARKDATA *Sour,int nOld)
 {
  void *pCur;
  int i,rc;
  char *pszOld,*pszNew;

  rc=-1;
  pszOld= Sour->szName;
  for(i=0;;i++){
    pCur = GetDotOnTList(pHead,i);
    if(pCur==NULL)break;

    pszNew=LookPark(pCur)->szName;
    if(lstrcmpi(pszNew,pszOld)==0){
       if(i!=nOld){rc=1;break;}//有不同的记录,则停止搜索
       else rc=0;  //相同的记录,则继续搜索
      }
   }
  return(rc);
 }
//---------------------------------------------------------------------------
void __fastcall TParkForm::m_CurGBoxExit(TObject *Sender)
{
 int rc,nOld;

  nOld = m_nEdit;

  //获取其它收费的编辑内容
  rc=GetOneParkText(this,m_pHead,nOld);
  if(rc || nOld<0){
    m_CurGBox->Enabled=FALSE;
    SetStatusBar(m_StatusBar,FALSE);
   }
  else m_CurGBox->SetFocus();
  if(rc)
    SetParkGridText(m_TextGrid,m_pHead);//重新显示
 }
//---------------------------------------------------------------------------
void __fastcall TParkForm::m_AddButClick(TObject *Sender)
 {
  static char pszType[]="停车场%d";
  void *pCur;
  PARKDATA a;
  int n;

  n=0;
  pCur = GetLastDotOnTList(m_pHead);//获取LOOKLIST链上的最后一个节点
  if(pCur!=NULL)n=LookPark(pCur)->nParkNo+1;
  else n=0;

  ZeroMemory(&a,sizeof(a));
  a.nParkNo = n;
  wsprintf(a.szName,pszType,n);

  pCur=AddContentToTList(m_pHead,&a,sizeof(a));//增加内容到TList链末尾
  if(pCur!=NULL){//增加成功
    SetParkGridText(m_TextGrid,m_pHead);//重新显示
    m_TextGrid->Row=LookCount(m_pHead);
    m_DelBut->Enabled=TRUE;
    m_EditBut->Enabled=TRUE;
    m_EditButClick(m_EditBut);
   }
 }
//---------------------------------------------------------------------------
void __fastcall TParkForm::m_EditButClick(TObject *Sender)
{
  SetStatusBar(m_StatusBar,TRUE);
  m_CurGBox->Enabled=TRUE;
  m_NameEdit->SetFocus();
}
//设置状态栏
void SetStatusBar(TStatusBar *pBar,int nMode)
 {
  static char *pszText[]={"正在浏览数据","正在编辑数据"};

  if(nMode!=0)nMode=1;
  pBar->Panels->Items[1]->Text=pszText[nMode];
 }

void __fastcall TParkForm::m_StatusBarDrawPanel(TStatusBar *StatusBar,
      TStatusPanel *Panel, const TRect &Rect)
{
  TCanvas *tc;
  int nColor;

  nColor=clBlue;
  tc = StatusBar->Canvas;
  RectText(tc,Rect,Panel->Text,nColor,DT_LEFT);
}

//---------------------------------------------------------------------------
void __fastcall TParkForm::m_SaveButClick(TObject *Sender)
{
 SaveAllPark(m_pHead);
 CopyTList(GetParkList(),m_pHead,sizeof(PARKDATA));
 m_SaveBut->Enabled=FALSE;
 m_nDone=TRUE;

}
//---------------------------------------------------------------------------

void __fastcall TParkForm::EditTextChange(TObject *Sender)
{
 if(m_CurGBox->Enabled) m_SaveBut->Enabled=TRUE;
}
//---------------------------------------------------------------------------

void __fastcall TParkForm::m_DelButClick(TObject *Sender)
{
  static char
    pszText[]="是否真的删除\n\n名称为\"%s\"\n\n"
             "的停车场?",
    pszDefault[]="不能删除编号为 \"0\"\n的停车场!";
  void *p,*pHead;
  PARKDATA *t;
  char szBuf[100];
  int rc,nIndex,nCount;

  rc=FALSE;
  nIndex= m_TextGrid->Row-1;
  pHead = m_pHead;
  p = GetDotOnTList(pHead,nIndex);
  if(p!=NULL){
    t = LookPark(p);
    if(t->nParkNo==0){
       Application->MessageBox(pszDefault,GetMainTitle(),
              MB_OK|MB_ICONSTOP|MB_APPLMODAL);
      }
    else{
      wsprintf(szBuf,pszText,t->szName);
      rc= Application->MessageBox(szBuf,GetMainTitle(),
         MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
      if(rc==IDYES)rc=TRUE;
      else rc=FALSE;
     }
   }
  if(rc){
     DelDotOnTList(pHead,nIndex);
     nCount = LookCount(pHead);
     if(nIndex>=nCount)nIndex=nCount-1;
     if(nIndex<0)nIndex=0;
     m_TextGrid->Row=nIndex+1;
     SetParkGridText(m_TextGrid,pHead);//重新显示

     if(nCount<=0){
       m_DelBut->Enabled=FALSE;
       m_EditBut->Enabled=FALSE;
      }
     m_SaveBut->Enabled=TRUE;
   }
 }
//---------------------------------------------------------------------------
void __fastcall TParkForm::m_CloseButClick(TObject *Sender)
{
  int rc;

  rc= m_SaveBut->Enabled;
  if(rc)rc=AskSaveData();
  if(rc) m_SaveButClick(Sender);
  ModalResult=IDOK;
}

⌨️ 快捷键说明

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