计算渠道的断面尺寸是渠系工程设计中遇到最多的问题。在规划设计新渠道时,设计流量由工程要求而定,坡度一般是由渠道大小根据地形条件确定,边坡系数
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))) + 'data/watercalculation.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)打印成果
点击“打印”按钮,则程序自动弹出打印界面,从此可以预览计算成果,并完成打印功能。打印操作界面见图

(图三)
结束语
渠道水力计算作为水利工程中常遇到的问题尽管其计算难度不算高,但由于计算涉及多次试算,因而计算量大,且较为单调烦琐。但由于其计算步骤明确,没有过多的非公式化计算数据,故可以考虑用计算机代替人工手算。作为当前编程工具的一种优秀产品,
[责任编辑:tuzhi]
| ·浅谈Excel、AutoCAD在渠道设计中 (2006-03-06) |
| ·浅谈Excel、AutoCAD在渠道设计中 (2006-03-01) |
| ·渠道水力计算在delphi上的实现 (2006-03-01) |
| ·运用EXCEL软件计算梯形渠道流量 (2006-03-01) |
| ·《大型渠道混凝土机械化衬砌成型 (2006-02-16) |
| ·陕西省宝鸡峡灌区渠道防渗技术探 (2006-02-07) |
| ·浅谈Excel、AutoCAD在渠道设计中 (2006-01-25) |
| ·渠道水力计算在delphi上的实现 (2006-01-25) |
| ·运用EXCEL软件计算梯形渠道流量 (2006-01-25) |
| ·渠道冻胀处理方式的选择 (2006-01-25) |