reg.cpp

来自「C++ Builder数据库开发经典案例解析 示例程序都是在C++ Build」· C++ 代码 · 共 230 行

CPP
230
字号
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Reg.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmReg *fmReg;
//---------------------------------------------------------------------------
__fastcall TfmReg::TfmReg(TComponent* Owner)
    : TForm(Owner)
{
    // 设置combobox列表值
    // 先设置挂号类型并保存相应的挂号费用
    pQuery->DatabaseName = "db";
    pQuery->SQL->Clear();
    pQuery->SQL->Add("select 挂号类型,挂号费 from 门诊挂号类型");
    pQuery->Open();
    while(!pQuery->Eof)
    {
        // 用 addobjects的方法添加combobox的itesm
        // 其中objects存储保存挂号费用信息的AnsiString
        // 注意下面的用法
        TObject* pRegFee = (TObject*)new AnsiString;
        // 赋予指针变量挂号费用值
        *((AnsiString*) pRegFee) = pQuery->FieldByName("挂号费")->AsString;
        ComboBox4->Items->AddObject(pQuery->FieldByName("挂号类型")->AsString, pRegFee);
        pQuery->Next();
    }
    // 设置挂号科室combobox
    pQuery->SQL->Clear();
    pQuery->SQL->Add("select 名称 from 科室资料");
    pQuery->Open();
    while(!pQuery->Eof)
    {
        ComboBox5->Items->Add(pQuery->FieldByName("名称")->AsString);
        pQuery->Next();
    }
    // 设置医生combobox
    pQuery->SQL->Clear();
    pQuery->SQL->Add("select 姓名 from 医生资料");
    pQuery->Open();
    while(!pQuery->Eof)
    {
        ComboBox6->Items->Add(pQuery->FieldByName("姓名")->AsString);
        pQuery->Next();
    }

    // 新建一挂号信息
    btNewClick(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TfmReg::btNewClick(TObject *Sender)
{
    // 清空新建挂号信息
    Edit1->Text = "";
    Edit2->Text = "";
    Edit3->Text = "";
    Edit4->Text = "";
    ComboBox1->Style = csDropDownList;
    ComboBox2->Style = csDropDownList;
    ComboBox3->Style = csDropDownList;
    ComboBox4->Style = csDropDownList;
    ComboBox5->Style = csDropDownList;
    ComboBox6->Style = csDropDownList;

    ComboBox3->ItemIndex = 0;
    ComboBox4->ItemIndex = 0;
    ComboBox4Select(NULL);
    ComboBox5->ItemIndex = 0;
    ComboBox6->ItemIndex = 0;
    // 时间
    TDateTime dt;
    dt = dt.CurrentDateTime();
    Edit4->Text = dt.DateTimeString() ;
    // 焦点
    if(Visible) Edit1->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TfmReg::FormClose(TObject *Sender, TCloseAction &Action)
{
    // 删除挂号类型中new分配的AnsiString的空间
    for(int i=0; i<ComboBox4->Items->Count; i++)
    {
        if(!ComboBox4->Items->Objects[i])
            delete ComboBox4->Items->Objects[i];
    }
    // 删除窗体并回收空间
    Action = caFree;
}
//---------------------------------------------------------------------------

void __fastcall TfmReg::ComboBox4Select(TObject *Sender)
{
    // 设置挂号费用
    // 注意指针的引用方法
    Edit3->Text =
        *((AnsiString*)ComboBox4->Items->Objects[ComboBox4->ItemIndex]);
}
//---------------------------------------------------------------------------

void __fastcall TfmReg::StatusBar1DrawPanel(TStatusBar *StatusBar,
      TStatusPanel *Panel, const TRect &Rect)
{
    TColor color;
    // 保存原来的颜色
    color = StatusBar->Canvas->Brush->Color;
    // 依次填充相应的颜色,说明颜色对应字段的要求
    if(Panel->Index == 0)
    {
        StatusBar->Canvas->Brush->Color = clSkyBlue;
        StatusBar->Canvas->FillRect(Rect);
        StatusBar->Canvas->TextOut(Rect.left +1,Rect.top +1, "必填");
    }
    else if(Panel->Index == 1)
    {
        StatusBar->Canvas->Brush->Color = clWindow;
        StatusBar->Canvas->FillRect(Rect);
        StatusBar->Canvas->TextOut(Rect.left +1,Rect.top +1, "选填");
    }
    else if(Panel->Index == 2)
    {
        StatusBar->Canvas->Brush->Color = cl3DLight;
        StatusBar->Canvas->FillRect(Rect);
        StatusBar->Canvas->TextOut(Rect.left +1,Rect.top +1, "自动");
    }
    // 恢复原来的颜色
    StatusBar->Canvas->Brush->Color = color;
}

//---------------------------------------------------------------------------

void __fastcall TfmReg::btCancelClick(TObject *Sender)
{
    btNewClick(NULL);
}
//---------------------------------------------------------------------------

void __fastcall TfmReg::btExitClick(TObject *Sender)
{
    Close();    
}
//---------------------------------------------------------------------------

void __fastcall TfmReg::btSaveClick(TObject *Sender)
{
    // 保存
    // 先保存病人信息库
    pQuery->DatabaseName = "db";
    AnsiString sql;
    //获得最大编号
    TDateTime dt;
    dt = dt.CurrentDate();
    unsigned short nyear, nmonth, nday;
    int nID = 1;
    AnsiString szID;
    dt.DecodeDate(&nyear, &nmonth, &nday);
    // 编号带年份
    sql = "select max(编号) as 编号 from 病人信息库 where 编号 like '";
    sql += IntToStr(nyear) + "%'";
    pQuery->SQL->Clear();
    pQuery->SQL->Add(sql);
    pQuery->Open();
    if(pQuery->RecordCount > 0 && !pQuery->FieldByName("编号")->AsString.IsEmpty())
    {
        szID = pQuery->FieldByName("编号")->AsString;
        nID = StrToInt(szID.SubString(5,7));
        nID ++;
    }
    szID = IntToStr(nID);
    // 编号补足7位
    while(szID.Length()<7)
        szID = "0" + szID;
    szID = IntToStr(nyear) + szID;
    // 插入病人信息库
    sql = "insert into 病人信息库(编号, 姓名, 性别, 年龄, 民族, 费用类型)";
    sql += " values('" + szID;
    sql += "','" + Edit1->Text;
    sql += "','" + ComboBox1->Text;
    sql += "','" + Edit2->Text;
    sql += "','" + ComboBox2->Text;
    sql += "','" + ComboBox3->Text;
    sql += "')";
    pQuery->SQL->Clear();
    pQuery->SQL->Add(sql);
    pQuery->ExecSQL();
    // 保存挂号信息
    nID = 1;
    AnsiString szID1;
    sql = "select max(编号) as 编号 from 门诊挂号 where 编号 like '";
    sql += IntToStr(nyear) + "%'";
    pQuery->SQL->Clear();
    pQuery->SQL->Add(sql);
    pQuery->Open();
    if(pQuery->RecordCount > 0 && !pQuery->FieldByName("编号")->AsString.IsEmpty())
    {
        szID1 = pQuery->FieldByName("编号")->AsString;
        nID = StrToInt(szID1.SubString(5,7));
        nID ++;
    }
    szID1 = IntToStr(nID);
    // 编号补足7位
    while(szID1.Length()<7)
        szID1 = "0" + szID1;
    szID1 = IntToStr(nyear) + szID1;
    sql = "insert into 门诊挂号(编号, 病人编号, 姓名, 性别, 挂号科室, ";
    sql += "费用类型, 挂号类型, 挂号费用, 医生, 时间, 是否已划价)";
    sql += " values('" + szID1;
    sql += "','" + szID;
    sql += "','" + Edit1->Text;
    sql += "','" + ComboBox1->Text;
    sql += "','" + ComboBox5->Text;
    sql += "','" + ComboBox3->Text;
    sql += "','" + ComboBox4->Text;
    sql += "','" + Edit3->Text;
    sql += "','" + ComboBox6->Text;
    sql += "','" + Edit4->Text;
    sql += "','否')";
    pQuery->SQL->Clear();
    pQuery->SQL->Add(sql);
    pQuery->ExecSQL();
    // 保存成功, 清除界面
    btNewClick(NULL);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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