一、 水力计算简介
计算渠道的断面尺寸是渠系工程设计中碰到最多的问题。在规划设计新渠道时,设计流量由工程要求而定,坡度一般是由渠道大小根据地形条件确定,边坡系数
Delphi是由美国Inprise公司(前
三、程序实现的方法
本程序作为我局治理信息系统
1、功能设计
本程序设计的主要目的在于实现对渠道水力计算的程序化和智能化,主要功能包括计算、成果显示、数据打印,另外为方便数据输入加入重置功能,为便于数据治理加入删除功能,另外为实现计算界面的退出而加入界面退出功能。
2
为实现计算成果的显示功能在界面上添加一个
程序界面中渠道名称、试算次序数、渠道底宽、渠道水深、渠道比降、边坡系数、渠道糙率、设计流量等数据可以手动输入,其他数据不能在界面上输入,由程序自动计算,并显示。根据渠道水力计算原理,可输入的数据除设计流量外均不答应为空,此外渠道糙率和渠道比降不能为零,出现上述情况,计算时程序将予以提示。
为实现程序的打印功能,特增加一打印界面,在点击打印按钮时自动弹出,打印界面可以实现打印、打印预览功能,在此界面可以调用
具体界面设计图样见图

3
渠道水力计算表(watercalculationtable)
表一
|
编号 |
中文名 |
字段名 |
数据类型 |
数据长度 |
可否为空 |
备注 |
|
1 |
渠道名称 |
Ditchname |
Char |
20 |
否 |
主键 |
|
2 |
试算次序数 |
Calculationno |
Char |
8 |
否 |
|
|
3 |
渠道底宽 |
Ditchwidth |
Numer |
8 |
否 |
|
|
4 |
渠道水深 |
ditchheight |
Numer |
8 |
否 |
|
|
5 |
渠道比降 |
Ditchslope |
Numer |
8 |
否 |
|
|
6 |
边坡系数 |
Slopenumer |
Numer |
8 |
否 |
|
|
7 |
设计流量 |
Planvolume |
Numer |
8 |
可 |
|
|
8 |
渠道糙率 |
Ditchrough |
Numer |
8 |
否 |
|
|
9 |
湿周 |
Xnumer |
Numer |
12 |
可 |
|
|
10 |
标准流量模数 |
Kstandard |
Numer |
12 |
可 |
|
|
11 |
过水断面面积 |
Flowarea |
Numer |
12 |
可 |
|
|
12 |
水力半径 |
Waterradius |
Numer |
12 |
可 |
|
|
13 |
谢才系数 |
Cnumer |
Numer |
12 |
可 |
|
|
14 |
过水流量 |
Designvolume |
Numer |
12 |
可 |
|
|
15 |
设计流量模数 |
Kdesign |
Numer |
12 |
可 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4
内置代码主要是针对程序中相关控件触发的事件而设定的相应响应。本程序包含的事件主要有各
各事件代码分别如下:
waterradius:=strtofloat(formatfloat('0.000',(flowarea/xnumer))); cnumer:=strtofloat(formatfloat('0.00',(1/ditchrough*power(waterradius,1/6))));
2
function TTeOperationServer.deletewatercalculation(constditchname,
calculationno: WideString): LongWord;
var
strSql :string;
dwAffected :Integer;
begin
Result :=MakeResult(Sev_Error,Facility_Account,Err_Suc);
StrSql := 'Delete from watercalculationtable '
' where ditchname= ' '''' ditchname ''''
' and calculationno = ' '''' calculationno '''';
ExecuteSQL(strSql,@dwAffected);
if dwAffected< 0 then
begin
Result := MakeResult(SEV_Error,Facility_Account,err_Delete);
exit;
end;
end;
3)
procedureTFormPrice.Button1Click(Sender: TObject);
var
resultcode:hresult;
begin
resultcode:=-1;
if coastedit1.text='' then
begin
application.messagebox('对不起
coastedit1.setfocus;
exit;
end;
ifcoastedit2.text='' then
begin
application.messagebox('对不起
coastedit2.SetFocus;
exit;
end;
ifcoastedit3.text='' then
begin
application.messagebox('对不起
coastedit3.SetFocus;
exit;
end;
ifcoastedit4.text='' then
begin
application.messagebox('对不起
coastedit4.SetFocus;
exit;
end;
ifcoastedit5.text='' then
begin
application.messagebox('对不起
coastedit5.SetFocus;
exit;
end;
ifcoastedit6.text='' then
begin
application.messagebox('对不起
coastedit6.SetFocus;
exit;
end;
ifcoastedit15.text='' then
begin
application.messagebox('对不起
coastedit15.SetFocus;
exit;
end;
ifcoastedit2.value=0 then
begin
application.messagebox('对不起
coastedit2.SetFocus;
exit;
end;
ifcoastedit3.value=0 then
begin
application.messagebox('对不起
coastedit3.SetFocus;
exit;
end;
ifcoastedit6.value=0 then
begin
application.messagebox('对不起
coastedit6.SetFocus;
exit;
end;
ifcoastedit5.value=0 then
begin
application.messagebox('对不起
coastedit5.SetFocus;
exit;
end;
try
teoperationserver.begintrans; resultcode:=teoperationserver.Addwatercalculation(coastedit1.text,coastedit2.value,coastedit3.value,coastedit6.value,coastedit4.value,
coastedit5.value,coastedit7.value,coastedit15.text);
finally
if HResultCode(ResultCode) = 0 then
begin
teoperationserver.commit;
Refresh;
coastedit1.text:='';
coastedit2.text:='';
coastedit3.text:='';
coastedit4.text:='';
coastedit5.text:='';
coastedit6.text:='';
coastedit7.text:='';
coastedit8.text:='';
coastedit9.text:='';
coastedit10.text:='';
coastedit11.text:='';
coastedit12.text:='';
coastedit13.text:='';
coastedit14.text:='';
coastedit15.text:='';
coastedit1.setfocus;
end
else
begin
teoperationserver.rollback;
application.MessageBox('添加失败
coastedit1.SetFocus;
end;
end;
end;
4
procedure TFormPrice.Button2Click(Sender:TObject);
var
svdata:string;
Iheader:integer;
IheaderObject: integer;
strsql:string;
Recordset10:_Recordset;
begin
SvDatafile:=GetParentDir(ExtractFilePath(ParamStr(0))) 'datawatercalculation.txt';
ppReport1.CloseDataPipelines;
if HFile<> 0 then FIleCLose(HFile);
ifFileExists(svdatafile) then
Deletefile(svdatafile);
hFile :=FileCreate(svDatafile);
strSQL :='select * from lsdata.dbo.watercalculationtable' ;
svdata:=teOperationServer.ResultStrOrder(strSQL);
FileWrite(hFile, Pointer(SvData)^, Length(SvData));
FileClose(HFile);
ppTextPipeline1.FileName := SvDataFile;
ppReport1.DataPipeline := pptextPipeLine1;
//
ifppReport1.ObjectByName(iHeader, iHeaderObject, 'ppLabel8') then
TPpLabel(PpReport1.Bands[iheader].Objects[iHeaderObject]).caption :=Fmainframeobject.operatorname;
withTfrmReportPreview1.Create(self) do
try
ppViewer1.Report := ppReport1;
ppViewer1.FirstPage;
show;
except
free;
end;
ppReport1.CloseDataPipelines;
fileclose(hfile);
end;
5)
procedureTFormPrice.Button5Click(Sender: TObject);
begin
coastedit1.text:='';
coastedit2.text:='';
coastedit3.text:='';
coastedit4.text:='';
coastedit5.text:='';
coastedit6.text:='';
coastedit7.text:='';
coastedit8.text:='';
coastedit9.text:='';
coastedit10.text:='';
coastedit11.text:='';
coastedit12.text:='';
coastedit13.text:='';
coastedit14.text:='';
coastedit15.text:='';
end;
end.
6)
procedureTFormPrice.Button4Click(Sender: TObject);
var
resultcode:Hresult;
begin
resultcode:=-1;
ifapplication.MessageBox(' 您确实要删除吗?
exit;
try
teOperationServer.BeginTrans;
resultcode:=teOperationServer.deletewatercalculation(coastedit1.text,coastedit15.text);
finally
if HResultCode(ResultCode) = 0 then
begin
application.MessageBox('删除成功
teOperationServer.Commit;
Refresh;
coastedit1.text:='';
coastedit2.text:='';
coastedit3.text:='';
coastedit4.text:='';
coastedit5.text:='';
coastedit6.text:='';
coastedit7.text:='';
coastedit8.text:='';
coastedit9.text:='';
coastedit10.text:='';
coastedit11.text:='';
coastedit12.text:='';
coastedit13.text:='';
coastedit14.text:='';
coastedit15.text:='';
end
else
begin
application.MessageBox('删除失败
teOperationServer.RollBack;
end;
end;
end;
7)
procedureTFormPrice.Button3Click(Sender: TObject);
begin
close;
end;
8)
procedureTFormPrice.FormCreate(Sender: TObject);
var
strsql:string;
codestring1:string;
begin
teOperationServer:=getserver('teOperationServer');
Refresh;
coastedit1.text:='';
coastedit2.text:='';
coastedit3.text:='';
coastedit4.text:='';
coastedit5.text:='';
coastedit6.text:='';
coastedit7.text:='';
coastedit8.text:='';
coastedit9.text:='';
coastedit10.text:='';
coastedit11.text:='';
coastedit12.text:='';
coastedit13.text:='';
coastedit14.text:='';
coastedit15.text:='';
end;
9)
begin
if (adodataset1.recordset<>nil) and (adodataset1.recordcount>0 ) then
begin
CoastEdit1.text:=AdoDataset1.Fields[0].Value;
CoastEdit2.value:=AdoDataset1.Fields[1].Value;
CoastEdit3.value:=AdoDataset1.Fields[2].Value;
CoastEdit4.value:=AdoDataset1.Fields[3].Value;
CoastEdit5.value:=AdoDataset1.Fields[4].Value;
CoastEdit6.value:=AdoDataset1.Fields[5].Value;
CoastEdit7.value:=AdoDataset1.Fields[6].Value;
CoastEdit8.value:=AdoDataset1.Fields[7].Value;
CoastEdit9.value:=AdoDataset1.Fields[8].Value;
CoastEdit10.value:=AdoDataset1.Fields[9].Value;
CoastEdit11.value:=AdoDataset1.Fields[10].Value;
CoastEdit12.value:=AdoDataset1.Fields[11].Value;
CoastEdit13.value:=AdoDataset1.Fields[12].Value;
CoastEdit14.value:=AdoDataset1.Fields[13].Value;
CoastEdit15.text:=AdoDataset1.Fields[14].Value;
end;
10)refresh
procedureTFormPrice.refresh;
var
strsql:string;
begin
strSQL := 'select * from watercalculationtable' ;
ADODataset1.Recordset:=Vartorecordset(teOperationServer.query(strsql));
end;
四、程序最终成果
1)计算成果
点击“计算”按钮,则程序根据输入的已知值自动进行计算,并将计算所得以一条数据的形式,自动添加入数据库,并在

(图二)
2)打印成果
点击“打印”按钮,则程序自动弹出打印界面,从此可以预览计算成果,并完成打印功能。打印操作界面见图

(图三)
结束语
渠道水力计算作为水利工程中常碰到的问题尽管其计算难度不算高,但由于计算涉及多次试算,因而计算量大,且较为单调烦琐。但由于其计算步骤明确,没有过多的非公式化计算数据,故可以考虑用计算机代替人工手算。作为当前编程工具的一种优秀产品,