渠道水力计算在delphi上的实现_第1页
渠道水力计算在delphi上的实现_第2页
渠道水力计算在delphi上的实现_第3页
渠道水力计算在delphi上的实现_第4页
渠道水力计算在delphi上的实现_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、渠道水力计算在delphi上的实现摘要:渠道水力计算一直以来在渠道设计中就是一件烦琐的事情,因为其涉及到大量的试算工作,在水利工程灌溉渠系设计中常令人不胜其烦。为化繁为简,减少设计中的工作量,考虑使用计算机技术实现试算工作的程序化。我局正使用delphi编程技术进展管理信息系统(IS)的开发建立工作,故决定将其纳入IS系统建立中,成为本局IS系统的一局部。Delphi技术是美国Inprise公司开发的基于pasal语言的程序开发软件,其不仅在数据库编程方面有卓越表现,而且在数学计算中也成绩斐然。关键词:水力计算Delphi谢才系数流量模数业务效劳器客户端一、水力计算简介将渠道内水流视作明渠均匀

2、流这是渠道水力计算的前提,故计算公式采用明渠均匀流公式。主要任务是解决渠道的过水才能问题,即设计渠道的断面尺寸,以保证通过所需的流量,或校核渠道是否满足输水流量的要求等。总体而言,渠道水力计算的问题主要分两类:1、校核渠道过水才能;2、计算渠道的断面尺寸。校核渠道的过水才能主要指在渠道的断面形式、尺寸、糙率、底坡等都已确定的情况下,计算其过水才能。计算步骤为:先根据水深h,底宽b及边坡系数计算出过水断面面积、湿周、水力半径R。再根据糙率n及水力半径R计算或查表求出谢才系数。最后用明渠均匀流公式Q=(Ri)1/2计算出流量。计算渠道的断面尺寸是渠系工程设计中遇到最多的问题。在规划设计新渠道时,设

3、计流量由工程要求而定,坡度一般是由渠道大小根据地形条件确定,边坡系数及糙率n,那么由土质及渠壁材料与施工、管理运用等条件而定。也即Q、n、i,求渠道的水深h及底宽b。此问题有两个未知数b及h,故须经过试算才能确定。计算步骤为:1、根据的流量Q及渠道底坡i,求出流量模数k0标准流量模数;2、初步假定一水深,计算其相应的过水断面、湿周、水力半径R,并根据糙率n及水力半径R计算或查表求出相应的谢才系数值。然后,按公式K=R1/2求出相应的流量模数值设计流量模数;3、将计算出的设计流量模数与标准流量模数比拟,假设两者相等,那么所设水深即为所求。假设不等,那么可另设一水深,重复上述步骤,直到计算出的设计

4、流量模数与标准流量模数相等为止。然后经综合考虑各方面因素,如施工便利,防洪超高和其他用处后最终确定渠道断面尺寸。二、delphi技术简介Delphi是由美国Inprise公司前Brland公司推出的可视化编程环境,它提供了一种方便、快捷的inds应用程序开发工具。Delphi使用了irsftinds图形用户界面的许多先进特性和设计思想,采用了可重复利用的完好的面向对象程序语言bjet-rientedLanguage、当今世界上最快的编辑器、最为领先的数据库技术。Delphi技术的根底源自pasal语言,是对pasal语言编程的可视化、面向对象化开展,从早期的对TurbPasal的inds化到如

5、今对网络化编程拥有强大功能,Delphi已经晋级到了如今的第七个版本,功能更加强大,对网络开发的需求更为适应,对数据库开发的技术更为成熟与稳定。三、程序实现的方法本程序作为我局管理信息系统(IS)的一局部外挂于我局管理信息系统的主界面上,属于水利常用计算模块。我局管理信息系统采用客户端、业务效劳器、数据库管理系统DBS三级构造,客户端和业务效劳器采用dephi开发实现,数据库管理系统DBS选择美国irsft公司倍受业界好评的sqlserver2000。因此,本程序的数据计算、数据添加和数据删除功能以函数的形式建于业务效劳器中,在客户端通过函数调用到达功能的实现。为实现数据的保存与查询,相应地在

6、我局管理信息系统的业务数据库lsdata中建立一个数据库表ateralulatintable。客户端除实现业务效劳器相关函数的调用外,还承当程序外观界面设置和局部简单功能的实现。用户只能通过程序客户端实现对软件的操作。1、功能设计本程序设计的主要目的在于实现对渠道水力计算的程序化和智能化,主要功能包括计算、成果显示、数据打印,另外为方便数据输入参加重置功能,为便于数据管理参加删除功能,另外为实现计算界面的退出而参加界面退出功能。2、界面设计为实现计算成果的显示功能在界面上添加一个dxdbgrid控件,作为成果显示的载体。为方便数据的录入和计算成果的单条显示添加十五个astedit控件,为逐一说

7、明各个astedit控件代表的数据而增入十五个与之对应的label控件,为程序美观用一个grupbx将所有astedit控件和label控件归为一组。为了实现计算、删除、重置、打英退出功能,引入五个buttn控件其中计算按钮除在单击时触发计算功能外,在计算完毕后自动执行数据添加功能,将计算数据添参加数据库中;删除按钮实现对库内单条数据的删除;重置按钮主要对astedit控件中的数据进展去除,以利于新数据的输入;打印功能作用在于将计算所得的成果通过外接打印机打印出来;退出按钮的功能在于实现界面的退出,返回主界面。程序界面中渠道名称、试算次序数、渠道底宽、渠道水深、渠道比降、边坡系数、渠道糙率、设

8、计流量等数据可以手动输入,其他数据不能在界面上输入,由程序自动计算,并显示。根据渠道水力计算原理,可输入的数据除设计流量外均不允许为空,此外渠道糙率和渠道比降不能为零,出现上述情况,计算时程序将予以提示。为实现程序的打印功能,特增加一打印界面,在点击打印按钮时自动弹出,打印界面可以实现打英打印预览功能,在此界面可以调用inds打印程序。详细界面设计图样见图1。图一3、数据库表设计本程序只有一张库表,即渠道水力计算表ateralulatintable,经过慎密的数据分析,设计该表共包含十五个字段,分别为:渠道名称、试算次序数、渠道宽度、渠道水深、渠道比降、边坡系数、设计流量、渠道糙率、湿周、标准

9、流量模数、过水断面面积、水力半径、谢才系数、设计断面过水流量、设计流量模数。详细库表设计见表一:渠道水力计算表ateralulatintable表一编号中文名字段名数据类型数据长度可否为空备注1渠道名称Dithnaehar20否主键2试算次序数alulatinnhar8否3渠道底宽DithidthNuer8否4渠道水深dithhEightNuer8否5渠道比降DithslpeNuer8否6边坡系数SlpenuerNuer8否7设计流量PlanvlueNuer8可8渠道糙率DithrughNuer8否9湿周XnuerNuer12可10标准流量模数KstandardNuer12可11过水断面面积F

10、lareaNuer12可12水力半径aterradiusNuer12可13谢才系数nuerNuer12可14过水流量DesignvlueNuer12可15设计流量模数KdesignNuer12可4、内置代码设计内置代码主要是针对程序中相关控件触发的事件而设定的相应响应。本程序包含的事件主要有各buttn控件引发的单击事件、单击dxdbgrid控件引发的事件(dxdbgridlik)、数据集控件滚动事件(ADDataSet1AfterSrll)和程序界面建立时的事件(frreat)。另外,业务效劳器(teperatinserver)中包含的两个函数addateralulatin和deleteat

11、eralulatin也用程序代码建立。各事件代码分别如下:1addateralulatin函数,代码为:funtinTTeperatinServer.addateralulatin(nstdithnae:ideString;dithidth,dithheight,dithslpe,slpenuer,dithrugh,planvlue:urreny;nstalulatinn:ideString):Lngrd;varstrSql:string;dAffeted:Integer;kstandard,flarea,aterradius,nuer,designvlue,kdesign,xnuer:urr

12、eny;beginResult:=akeResult(Sev_Errr,Faility_Aunt,Err_Su);kstandard:=strtflat(fratflat(0.00,(planvlue/sqrt(dithslpe);flarea:=strtflat(fratflat(0.00,(dithidth+slpenuer*dithheight)*dithheight);xnuer:=strtflat(fratflat(0.00,(dithidth+2*dithheight*sqrt(1+sqr(slpenuer);aterradius:=strtflat(fratflat(0.000,

13、(flarea/xnuer);nuer:=strtflat(fratflat(0.00,(1/dithrugh*per(aterradius,1/6);kdesign:=strtflat(fratflat(0.00,(flarea*nuer*sqrt(aterradius);designvlue:=strtflat(fratflat(0.00,(flarea*nuer*sqrt(aterradius*dithslpe);strsql:=insertintateralulatintable(dithnae,dithidth,dithheight,+dithslpe,slpenuer,planvl

14、ue,dithrugh,kstandard,+flarea,aterradius,nuer,designvlue,Kdesign,xnuer,alulatinn)+values(+dithnae+,+flattstr(dithidth)+,+flattstr(dithheight)+,+flattstr(dithslpe)+,+flattstr(slpenuer)+,+flattstr(planvlue)+,+flattstr(dithrugh)+,+flattstr(kstandard)+,+flattstr(flarea)+,+flattstr(aterradius)+,+flattstr

15、(nuer)+,+flattstr(designvlue)+,+flattstr(kdesign)+,+flattstr(xnuer)+,+alulatinn+);ExeuteSQL(strSql,dAffeted);ifdAffeted=0thenbeginResult:=akeResult(SEV_Errr,Faility_Aunt,err_Insert);exit;end;end;2deleteateralulatin函数的代码为:funtinTTeperatinServer.deleteateralulatin(nstdithnae,alulatinn:ideString):Lngrd

16、;varstrSql:string;dAffeted:Integer;beginResult:=akeResult(Sev_Errr,Faility_Aunt,Err_Su);StrSql:=Deletefrateralulatintable+heredithnae=+dithnae+andalulatinn=+alulatinn+;ExeuteSQL(strSql,dAffeted);ifdAffeted0thenbeginResult:=akeResult(SEV_Errr,Faility_Aunt,err_Delete);exit;end;end;3)计算按钮(Buttn1lik)的代码

17、为:predureTFrPrie.Buttn1lik(Sender:Tbjet);varresultde:hresubeginresultde:=-1;ifastedit1.text=thenbeginappliatin.essagebx(对不起,渠道名称不能为空.,提示,b_k+b_inarning);astedit1.setfus;exit;end;ifastedit2.text=thenbeginappliatin.essagebx(对不起,渠道底宽,不能为空,提示,b_k+b_inarning);astedit2.SetFus;exit;end;ifastedit3.text=then

18、beginappliatin.essagebx(对不起,渠道水深,不能为空,提示,b_k+b_inarning);astedit3.SetFus;exit;end;ifastedit4.text=thenbeginappliatin.essagebx(对不起,边坡系数,不能为空,提示,b_k+b_inarning);astedit4.SetFus;exit;end;ifastedit5.text=thenbeginappliatin.essagebx(对不起,渠道糙率,不能为空,提示,b_k+b_inarning);astedit5.SetFus;exit;end;ifastedit6.tex

19、t=thenbeginappliatin.essagebx(对不起,渠道比降,不能为空,提示,b_k+b_inarning);astedit6.SetFus;exit;end;ifastedit15.text=thenbeginappliatin.essagebx(对不起,试算次序数,不能为空,提示,b_k+b_inarning);astedit15.SetFus;exit;end;ifastedit2.value=0thenbeginappliatin.essagebx(对不起,渠道底宽,不能为零,提示,b_k+b_inarning);astedit2.SetFus;exit;end;ifa

20、stedit3.value=0thenbeginappliatin.essagebx(对不起,渠道水深,不能为零,提示,b_k+b_inarning);astedit3.SetFus;exit;end;ifastedit6.value=0thenbeginappliatin.essagebx(对不起,渠道比降,不能为零,提示,b_k+b_inarning);astedit6.SetFus;exit;end;ifastedit5.value=0thenbeginappliatin.essagebx(对不起,渠道糙率,不能为零,提示,b_k+b_inarning);astedit5.SetFus;

21、exit;end;tryteperatinserver.begintrans;resultde:=teperatinserver.Addateralulatin(astedit1.text,astedit2.value,astedit3.value,astedit6.value,astedit4.value,astedit5.value,astedit7.value,astedit15.text);finallyifHResultde(Resultde)=0thenbeginteperatinserver.it;Refresh;astedit1.text:=;astedit2.text:=;a

22、stedit3.text:=;astedit4.text:=;astedit5.text:=;astedit6.text:=;astedit7.text:=;astedit8.text:=;astedit9.text:=;astedit10.text:=;astedit11.text:=;astedit12.text:=;astedit13.text:=;astedit14.text:=;astedit15.text:=;astedit1.setfus;endelsebeginteperatinserver.rllbak;appliatin.essageBx(添加失败,提示,b_k+b_ina

23、rning);astedit1.SetFus;end;end;end;4打印按钮(Buttn2lik)的代码为:predureTFrPrie.Buttn2lik(Sender:Tbjet);varsvdata:string;Iheader:integer;Iheaderbjet:integer;strsql:string;Rerdset10:_Rerdset;beginSvDatafile:=GetParentDir(ExtratFilePath(ParaStr(0)+dataateralulatin.txt;ppReprt1.lseDataPipelines;ifHFile0thenFIle

24、Lse(HFile);ifFileExists(svdatafile)thenDeletefile(svdatafile);hFile:=Filereate(svDatafile);strSQL:=selet*frlsdata.db.ateralulatintable;svdata:=teperatinServer.ResultStrrder(strSQL);Filerite(hFile,Pinter(SvData),Length(SvData);Filelse(HFile);ppTextPipeline1.FileNae:=SvDataFile;ppReprt1.DataPipeline:=

25、pptextPipeLine1;/处理表尾ifppReprt1.bjetByNae(iHeader,iHeaderbjet,ppLabel8)thenTPpLabel(PpReprt1.Bandsiheader.bjetsiHeaderbjet).aptin:=Fainfraebjet.peratrnae;ithTfrReprtPrevie1.reate(self)dtryppVieer1.Reprt:=ppReprt1;ppVieer1.FirstPage;sh;exeptfree;end;ppReprt1.lseDataPipelines;filelse(hfile);end;5)重置按钮

26、(Buttn5lik)的代码为:predureTFrPrie.Buttn5lik(Sender:Tbjet);beginastedit1.text:=;astedit2.text:=;astedit3.text:=;astedit4.text:=;astedit5.text:=;astedit6.text:=;astedit7.text:=;astedit8.text:=;astedit9.text:=;astedit10.text:=;astedit11.text:=;astedit12.text:=;astedit13.text:=;astedit14.text:=;astedit15.t

27、ext:=;end;end.6)删除按钮(Buttn4lik)的代码为:predureTFrPrie.Buttn4lik(Sender:Tbjet);varresultde:Hresubeginresultde:=-1;ifappliatin.essageBx(您确实要删除吗?,删除确认,B_YesN+B_INARNING+B_DefButtn2+B_Systedal)=IdNthenexit;tryteperatinServer.BeginTrans;resultde:=teperatinServer.deleteateralulatin(astedit1.text,astedit15.te

28、xt);finallyifHResultde(Resultde)=0thenbeginappliatin.essageBx(删除成功,提示,B_K+B_INARNING);teperatinServer.it;Refresh;astedit1.text:=;astedit2.text:=;astedit3.text:=;astedit4.text:=;astedit5.text:=;astedit6.text:=;astedit7.text:=;astedit8.text:=;astedit9.text:=;astedit10.text:=;astedit11.text:=;astedit12

29、.text:=;astedit13.text:=;astedit14.text:=;astedit15.text:=;endelsebeginappliatin.essageBx(删除失败,提示,B_K+B_INARNING);teperatinServer.RllBak;end;end;end;7)退出按钮(Buttn4lik)的代码为:predureTFrPrie.Buttn3lik(Sender:Tbjet);beginlse;end;8)程序界面创立事件(frreat)的代码为:predureTFrPrie.Frreate(Sender:Tbjet);varstrsql:string;

30、destring1:string;beginteperatinServer:=getserver(teperatinServer);Refresh;astedit1.text:=;astedit2.text:=;astedit3.text:=;astedit4.text:=;astedit5.text:=;astedit6.text:=;astedit7.text:=;astedit8.text:=;astedit9.text:=;astedit10.text:=;astedit11.text:=;astedit12.text:=;astedit13.text:=;astedit14.text:=;astedit15.text:=;end;9)单击dxdbgrid事件和数据集控件滚动事件的代码(两事件代码根本一样):beginif(addataset1.rerdsetnil)and(addataset1.rerdunt0)thenbeginastEdit1.text:=AdDataset1.Fields0.Value;astEdit2.value:=AdDataset1.Fields1.Value;astEdit3.value:=AdDataset1.Fields2.Value;astEdit4.value:=AdDataset1.Fields3.Value;a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论