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 + -
显示快捷键?