__医疗保险信息系统的类的设计__

enterprise 2001-07-26 10:59:08
有一段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??
...全文
166 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
subsky 2001-08-08
  • 打赏
  • 举报
回复
绝对的OOP
j_xuhome 2001-07-27
  • 打赏
  • 举报
回复
关注

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧