__医疗保险信息系统的类的设计__
有一段Delphi代码,做的很不好,拿出来只是为了抛砖引玉,希望与同行讨论。
//这是医疗保险信息系统的一个类:企业档案EnterpriseArchive 类
//它定义了一些属性与方法:觉得定义得不好,没法调用,如果有人觉得有好方法,可以试试修改一下。
//我的邮箱:enterprise0@263.net
////////////////////////////////////////////
unit Unit_Class_EnterpriseArchive;//单位档案
interface//类接口声明
type //Begin Of class 自定义的类
EnterpriseArchive=class(TObject)
public
Constructor Create; //构造函数
function New():Boolean; //新建
function Locate(_EntID:String):Boolean;//定位
function Open():Boolean; //打开
function Edit(_EntName:String;_EntTel:String;_EntAddress:String):Boolean; //修改
function Fill():Boolean; //填写
function Query():Boolean; //查询
function Verify():Boolean; //验证
function Delete(_EntID:String):Boolean; //删除
function Save():Boolean; //保存
Destructor Destroy;
protected //属性
EntID:String; //单位编号
EntName:String; //单位名称
Tel:String; //电话
Address:String; //地址
private
End;//end of class
implementation//类具体实现
uses
Windows, Messages,Dialogs,DBtables,SysUTils,StdCtrls,Controls;
VAR db1:TDataBase;//为了让类自己实现存取,动态创建数据访问控件
query1:TQuery;//
Constructor EnterpriseArchive.Create;
Begin
Inherited;
db1:=Tdatabase.Create(nil);
db1.AliasName:='Insurance'; //ODBC数据源名称:Insurance
db1.DatabaseName:='db_EntArc';
db1.LoginPrompt:=false;
query1:=Tquery.Create(nil);
query1.databasename:='db_EntArc';
End;
function EnterpriseArchive.Locate(_EntID:String):Boolean;/////定位
Begin
if(query1.Active=true) then query1.Active:=false;
query1.SQL.Text:='Select * from EnterpriseArchive where EntID='''+_EntID+'''';
try
query1.Active:=true;
Except
showmessage('Except:Select * from EnterpriseArchive wher失败!');
REsult:=false;
exit;
End;
if(query1.Bof )and (query1.eof ) then
Begin
showmessage('没有 找到单位!');
Result:=false;
End
Else
Begin
EntID:=query1.fieldByname('EntID').asstring;
EntName:=query1.fieldbyname('EntName').asstring;
Tel:=query1.fieldByName('EntTel').asString;
Address:=query1.fieldByname('EntAddress').asstring;
showmessage('找到单位!!!!!!!!!!!!');
Result:=true;
End;
End;
function EnterpriseArchive.New():Boolean;
Begin
ShowMessage('EnterpriseArchive.New');
Result:=true;
End;
function EnterpriseArchive.Open():Boolean;
Begin
End;
function EnterpriseArchive.Edit(_EntName:String;_EntTel:String;_EntAddress:String):Boolean;
Begin
if query1.Active=true then query1.Active:=false;
query1.SQL.Text:='Update Enterprise Set EntName='''+_EntName+''' and EntTel='''+_EntTel+''' and EntAddress='''+_EntAddress+'''';
showmessage('Update Enterprise Set EntName='''+_EntName+''' and EntTel='''+_EntTel+''' and EntAddress='''+_EntAddress+'''');
try
query1.ExecSQL;
Except
showmessage('Except:Update Enterprise Set EntName=失败!');
exit;
End;
showmessage('修改成功!');
//query1.Refresh;
End;
function EnterpriseArchive.Fill():Boolean;
Begin
End;
function EnterpriseArchive.Query():Boolean;
Begin
End;
function EnterpriseArchive.Verify():Boolean;
Begin
End;
function EnterpriseArchive.Delete(_EntID:String):Boolean;
Begin
if MessageDlg('你确定要删除吗?'+EntID+','+EntName,mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
if query1.Active=true then query1.Active:=false;
query1.SQL.Text:='Delete From EnterpriseArchive where EntID='''+_EntID+'''';
try
query1.ExecSQL;
Except
showmessage('Except :Delete From EnterpriseArchive where 失败!');
exit;
End;
showmessage('删除成功!');
End;
End;
function EnterpriseArchive.Save():Boolean;
VAR Int:Integer;
Begin
if query1.Active=true then query1.Active:=false;
query1.SQL.text:='select EntID FRom EnterpriseArchive';
try
query1.Active:=true;
Except
exit;
End;
iNT:=0;
if nOT((query1.Bof ) and (query1.eof )) then
BEGIN
query1.First;
while Not (query1.Eof ) do
Begin
if StrToInt(query1.FieldByName('EntID').asstring)>Int then
Int:=StrToInt(query1.FieldByName('EntID').asstring);
query1.Next;
End;
Int:=Int+1;
eND;
if query1.Active=true then query1.Active:=false;
query1.SQL.text:='Insert Into EnterpriseArchive VAlues ('''+IntToStr(Int)+''','''+EntName+''','''+Tel+''','''+Address+''')';
try
query1.ExecSQL;
except
showmessage('Except: Insert Into EnterpriseArchive VAlues失败!');
Result:=false;
exit;
End;
showmessage('保存单位成功!');
End;
destructor EnterpriseArchive.Destroy;
begin//有问题:由于要销毁动态创建的Query,DataBase,所以必须有以下代码,否则会报错,能否在Free方法中销毁Query,DataBase???
db1.Destroy;
query1.Destroy;
End;
end.//单元Unit的结束
//问题:
1)本来要实现类的打印功能:但是如果动态生成快速报表控件,就没法对报表的布局做安排,只好取消这个功能,由程序设计。不知道有没有好办法?
2)这只是系统的一个类,类本身做起来觉得很麻烦,但(在按钮事件里)调用类的方法的时候,就觉得很方便。这算不算OOP??