• 588.10 KB
  • 33页

基础沉降计算系统项目报告

  • 33页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'XX尢曇《数据库技术及应用》实验报告实验报告题目:基础沉降计算系统 报告索引1.项口设计的内容和意义2.项口功能3・成员分工4.计算功能的实现◊Functioncoef◊存储过程Ultimate◊插值函数5.数据库设计6.窗休设计及数据库连接项目设计报告内容一.项冃设计的内容和意义随着现代社会的进一步发展,高层建筑、桥梁和地下工程越来越多,越來越复杂,其中所涉及的土力学问题也越来越繁琐。其中土在受力状态在的沉降问题,一直是岩土工程中最重要却最繁琐的一个环节。总要原因是在计算时盂要查阅大屋的表格内容,进行插值计算。如果我们能用这学期所掌握的数据库知识对这些数据进行管理和计算,那么土在受力状态在的沉降问题的计算效率将大大提高二.项目功能1.用户及管理员用户的管理普通用户可以获得正常的计算、使用权限。普通用户可以自己注册,但管理员可以添加、删除和管理用户。管理员可以增添新的管理员,但不能删除管理员。并且管理员拥有更改数据库原始数据的权限。2.基础沉降的计算这一系统可以对矩形独立基础在沙质粘土上受力的称将计算。三.成员分工>崔巍:组长,负责项目的策划,数据库的建立,触发器、存储过程的编写,计算程序的编‘耳和调试>常颖瑞:所有用户及管理员的管理、添加功能的窗体、代码的设计、编写>李书涛:所有窗体的艺术设计,美化,还有画图程序代码的编写 卩q.计算功能的实现基础沉降功能的实现:♦Functioncoef这一程序主要负责对数据库中存储过程的调用,输出两个参数ml,m2,得到一个参数coef,这一参数在土力学中成为附加应力参数。代码如下:Functioncoef(ByVaimlAsSingle,ByVaim2AsSingle)AsSingleDimmycoonAsNewSqlClient.SqlConnection(/zInitialCatalog二tlx;DataSource=sunthree;IntegratedSecurity二SSPI;“)DimmycommAsSqlClient.SqlCommand=NewSqlClient.SqlConwmd("ULTIMATE",mycoon)DimadapterAsSqlClient.SqlDeitaAdapterDimaaaAsNewSystem・Data.DataTablemycomm.CommandType=CommandTypc.StorodProcedureDimpara1AsSqlClient・SqlParameter=m^^comin.Parameters.Add(z,@nil/z,System.Data.SqlDbType.Float,8)Dimpara_2AsSqlClient.SqlParameter二mycomm.Parameters.Add("@m2〃,System.Data.SqlDbType.Float,8)para_1.Value=mlpara_2・Value=m2DimmyreaderAsSqlClient.SqlDataReadermycoon.Open()myreader=myconim・ExecuteReader()Ifmyreader.RoadThencoef=myreader.Item(0)coef=coef/1000EndTfmycoon.Close()EndFunction♦存储过程存储过程ULTIMATE主要功能是对从前台获得的两个值ml,m2进行计算,并从表【附加应力系数】中进行插值计算,最后返回一个值计算示意图为: fm2m:lm2)Coeffmlmlfl1ml1112注:fml@ml)BEGINSELECTTOP1@fml=[M]FROM附加应力系数WHERE[M]>=@mlORDERBY[M]SELECTTOP1FROM附加应力系数WHERE[M]<=@mlORDERBY[M] DESCENDELSEIFEXISTS(SELECT[M]FROM附加应力系数WHERE[M]=@ml)BEGINSELECTTOP1@fml=[M]FROM附加应力系数WHERE[M]=@mlORDERBY[M]SELECTTOP1@lml=[M]FROM附加应力系数WHERE[M]=©mlORDERBY[M]DESCEND,获取行号@fml与@lml"IFEXISTS(SELECT[LM]FROM[附加应力系数(列名表)]WHERE[LM]>@m2)BEGINSELECTTOP1@fm2=[LM]FROM[附加应力系数(列名表)]WHERE[LM]>=©m2ORDERBY[LM]SELECTTOP1@lm2=[LM]FROM[附加应力系数(列名表)]WHERE[LM]<=©m2ORDERBY[LM]DESCENDELSEIFEXISTS(SELECT[LM]FROM[附加应力系数(列名表)]WHERE[LM]=@m2)BEGINSELECTTOP1@fm2=[LM]FROM[附加应力系数(列名表)]WHERE[LM]=@m2ORDERBY[LM]SELECTTOP1@lm2=[LM]FROM[附加应力系数(列名表)]WHERE[LM]=@m2ORDERBY[LMjDESCEND获取列号@伽1与@lml"BEGINset@strsql3=str3,1)beginif@fml>=10beginset@strsql3二"10"endendENDBEGINset@strsql4=str(@lml,3,1)beginif@lml>=10beginset@strsql4=,10"endendENDBEGINset@strsqll=str(@fm2,3,1)begin if@伽2>=10beginset@strsql1二"10"endendENDBEGINset@strsql2=str(@1m2,3,1)beginif@lm2>=10beginset@strsql2=,10"endendEND"利用动态查询,即列名是一个变量"begincreatetable#1inshi(Areal,Breal);BEGINinsertinto#1inshiexecCselect["+@strsql2+"],["+@strsql1+"]from附加应力系数where[M]="+@strsql4)ENDselect@fl二Afrom#linshiselect@11=Bfrom#1inshidroptable#linshiend"建立临时表#linshi,利用动态査寻,给ttlinshi表复制,并传值给©fl@11"begincreatetable#linshil(Areal,Breal);BEGINinsertinto#linshilexecCselect["+@strsql2+"],["+@strsql1+"]from附加应力系数where[M]="+@strsql3)ENDselect@f2=Afrom#linshilselect@12=Bfrom#1inshi1droptable#linshilend "建立临时表ttlinshil利用动态查寻,给#linshi表复制,并传值给蛀2和@12"set@templ=dbo.inter(@fml,@f1,©lml,@11,@ml)set@temp2=dbo.inter(@fml,@f2,@lml,@12,@ml)set@temp3=dbo.inter(@lm2,@temp2,@fm2,@templ,©m2)select@temp3end"利用函数dbo.inter对@门,@11,@f2,@12进行线性插值运算,得到@temp,♦函数dbo.inter函数功能示意图:代码如下:CREATEfunctioninter(@firstasfloat,1asfloat,@lastasfloat,@f2asfloat,©midasfloat)returnsfloatasbegindeclare@tempasfloatif@last=@firstbeginset@temp=©flendelsebegin set@temp=©fl+(@mid-@first)*(@f2-@f1)/(@last-@first)endreturn@tempend五.数据库设计数据库名:tlx基本表:【附加应力系数】【附加应力系数(列名表)】【基础】(用于管理所有基础的信息)【位移】(用丁•管理所有位移的信息)【用户】(管理所有用户信息)所有建立表的代码如F:【附加应力系数】ifexists(select*fromdbo.sysobjectswhereid=objcct_id(N"[dbo].[附加应力系数]")andOBJECTPROPERTY(id,N"lsUserTable")=1)droptable[dbo].[附加应力系数]GOCREATETABLE[dbo],[附加应力系数]([M][float][1.0][1.2][1.4][1.6][1.8][2.0][3.0][4.0][5.0][int][int][int][int][int][int][int][int][int]XOTNOTNOTNOTNOTNOTNOTNOTNOTNOTNULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,[10][int]NOTNULL)ON[PRIMARY]GO【附加应力系数(列名表)】ifexists(select*fromdbo.sysobjectswhereid=object_id(N"[dbo].[附加应力系数(列名表)]")andOBJECTPROPERTY(id,N"lsUserTable")=1)droptable[dbo].[附加应力系数(列名表)]GOCREATETABLE[dbo].[附加应力系数(列名表)]([LM][float]NULL)ON[PRIMARY]GO 【基础】createtable基础(基础编号char(4)check(基础编号like"JC[0-9][0-9]")primarykey,长floatcheck(长>0),宽floatchock(宽>0),荷载floatcheck(荷载〉0),基础深度floatcheck(基础深度〉0),)【位移】createtable位移(基编号char(4)foreignkeyreferences基primarykey,总位移floatcheck(总位移>0),)【用户】createtable用户(用户名char(10)primarykey,密码char(10),用户等级intcheck(用户等级=0or用户等级二1),)♦触发器为了使数据更加符合工程的实际情况,避免垃圾数据进入数据库。我们设计了触发器,代码如下:◊createtrigger长宽约束on基础forinsert,updateasdeclare@长intdeclare@宽intbeginseiect@长=皿.长frominsertedinsselect@宽二ins.宽frominsertedinsif@长<@宽beginprint"长必须人于宽"rollbackendend♦存储过程存储过程已在上文陈述,这里不再赘述。六.窗体设计及数据库连接1.共用Module设计ModuleModulelPublicflAsNewFormlPublicf2AsNewForm2 Publicf3AsNewForm3Publicf4AsNewEormd Publicf5AsNewForm5Publicf6AsNewForm6Publicf7AsNewForm7Publicf8AsNewForm8Publicf9AsNowForm9Publicf10AsNewFormlOPublicfl1AsNewForml1PublicmydatasetAsNewData.DataSetPublicadapterAsNewSqlClient.SqlDataAdapterPublicmycormAsNewSqlClient.SqlConncction("InitialCatalog二tlx;DataSource二sunthree;IntegratedSecurity二SSPI;〃)PublicmybindAsBindingManagerBaseEndModule2.欢迎界而PrivateSubTimerlTick(ByVaisenderAsSystem・0bject,ByVaieAsSystem.EventArgs)HandiesTimerl.TickLabel1.Left=Label1.Left+10IfLabel1.Left>Me.Width-Me.WidthMod10ThenLabel1.Left=0EndIf"添加timet使Label1在窗体中移动EndSubPrivateSubForm6_Load(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)HandlesMyBase.LoadFormBorderStyle=FormBorderStyle.FixodSingleAxWindowsMediaPlayerl.URL=Application.StartupPath+"\526665916.mp3"AxWindowsMediaPlayer1.Hide0 AxWindowsMecliaP1ayer1.Ctlcontrols.play0"添加AxWindowsMediaP1ayer控件后指定播放路径EndSubPrivateSubLabe12_Click(ByVa1senderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesLabel2.ClickMe.Hide()fl.Show()Timerl.Stop()AxWindowsMediaP1ayer1.Ctlcontrols.stopO"EndSub1.登录界面PrivateSubButton1Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesButtonl.ClickDim用户名,密码,sqlAsStringDimadapterAsNewSqlCIient.SqlDataAdaptorDimdatasetcuiweiAsNewData.DataSet用户名=Me.TextBoxl.Text密码=Me.TextBox2.Textsql="select*from用户where用户名二""+用户名+〃‘and密码=""+密码+〃‘〃IfMe.TextBoxl.Text="OrMe.TextBox2.Text=ThenMsgBox(,z请填写用户名和密码!〃,,〃注意〃)ExitSubEndIfdatasetcuiwei.Clear()adapter=NewSqlClient.SqlDataAdapter(sql,mycorm) Tryadapter.Fill(datasetcuiwei)"按指定的川户名和密码金找川户,并填充数据集CatchexAsExceptionMsgBox(ex.Message)EndTryIfdatasetcuiwei.Tables(0).Rows.Count=0Then"若指定用户名和密码错,则数据集为空MsgBox(〃用户名或密码错误!“,,〃警告")Me.TextBoxl.Text=Me.TextBox2.Text=Me.TextBoxl.Focus()Elselfdatasetcuiwei.Tables(0).Rows(0)(2)="1"ThenMe.Hide()f2.Show()Elselfdatasetcuiwei.Tables(0).Rows(0)(2)="0〃Then"根据用户等级的不同,登录到不同的窗体Me.Hide()f3.Show()EndIfTextBoxl.Text=TextBox2.Text=”"EndSubPrivateSubButton2_Click(ByValsenderAsSystem.Object,ByVaieAsSystem.EvcntArgs)HandiesButton2.ClickTextBoxl.Text="”TextBox2.Text="”EndSubPrivateSubForml_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadTextBoxl.Text=TextBox2.Text=FormBorderStyle二FonnBorderStyle.FixedSingleEndSubPrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.ClickMe.Hide()f8.Show() EndSub1.管理员界面 PrivateSubMenultem2_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)HandlesMonultem2.ClickMe.Hide()f5.Show()EndSubPrivateSubMenultem3_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)Me.Hide0HandlesMenu!tem3.Clickf4.Show()EndSubPrivateSubMenultem4_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)Me.Hide0HandlesMenultom4.Clickf3.Show()EndSubPrivateSubMenuItcm5_CIick(ByVaisenderAsSystem.Object,ByVaieAsSystem・EvenlArgs)Me.Hide()HandiesMenuItem5.Clickfl.Show()EndSubPrivateSubMenultem7Click(ByValsenderAsSystem.Object,ByVaieAsSystem.EventArgs)IlandlesMenuTtem7.ClickMeJIideO f7.Show()EndSubPrivateSubMonuItem6_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EvcntArgs)HandiesMenuClickMe.Hide0f9.Show()EndSubPrivateSubForm2_Load(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesMyBase.LoadFormBorderStyle=FormBorderStyle.FixedSingleEndSub1.新用户注册界面用户管理我们在实现用户管理的各项功能时,没有采用界而化的操作,不管是数据库的连接,还是数据库的绑定,全部都采用代码形式,这样使老师在阅读程序吋比较方便,而且增加了程序的可移植性。以下我们分别说明各个功能的实现。用八注册界血是用八笫一次使用本系统时完成用八注册的界血,用户输入用八名、密码和密码确认后点击注册按钮,若密码和密码确认的输入不一•致,则提示错误,然后在数据库屮检索,若无重复的用户名,则注册成功,反冋登陆界面,否则提示重新输入。点击“从置”清空文本框中的内容重新输入,点击“返回”至登陆界面。为实现登陆界面的功能,我们首先连接数据库,然后用sqlconunand命令将用户名、密码用户等级写入数据库。为实现用户名重复的报错功能,我们新建了一个dataset:mydataset,将用户表中用户名为文本框內容的写入mydataset中,若mydataset有内容时,说明用户已存在,提示重新输入。窗体设计代码如下:PublicClass注册新用户TnheritsSystem.Windows.Forms.FormPrivateSubButtonl_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesButtonl.Click DimmycmdAsNewSqlClient.SqlCommandmycmd.Connection二myconnDim用八名,密码,密码确认AsString用户名=Me.TextBoxl.Text密码=Me.TextBox2.Text密码确认=Me.TextBox3.Text"定义commandtext的内容为插入新纪录mycmd.CommandText="insertinto用户values(,"&用户名&〃","〃&密码&〃,,〃&0&〃)〃Dimmysql2AsString="select用户名from用户where用户名二""+用户名+〃‘〃Dimmydataset2AsNewData.DataSetDimadapter2AsNewSqlClient.SqlDataAdaptei(mysql2,myconn)adapter2.Fill(mydataset2,"用户")"提示输入用户名和密码IfMe.TextBoxl.Text=OrMe.TextBox2.Text=OrMe.TextBox3.Text=ThenMsgBoxC请填写用户名和密码!”,,〃注意〃)ExitSubEndIf"确认用户名的唯一性Ifmydataset2.Tables(0).Rows.Count二1ThenMsgBoxC用户已存在!〃,,〃警告〃)Me.TextBoxl.Text=""Me.TextBox2.Text=Me.TextBox3.Text=Me.TextBoxl.Focus()"若密码与密码确认不一致吋,出现报错信息Elself密码<>密码确认ThenMsgBox("两次密码输入不一致!〃,,〃警告〃)Me.TextBox2.Text=Me.TextBox3.Text="”Me.TextBox2.Focus()Elsemycorm.Open()"用sqlcommand语句插入一条新纪录Trymycmd.ExecuteNonQuery()CatchexAsExceptionMsgBox(ex.Message)EndTry MsgBox(/z中请用户成功,请登陆〃,,〃成功〃)Me.Hide()fl.Show()Me.TextBoxl.Text="”Me.TextBox2.Text=""Me.TextBox3.Text=myconn.Close0EndIfEndSubPrivateSubForm8Load(ByValsenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesMvBase.LoadFormBorcIerStyle=FormBorderStyle.FixedSingleMe.TextBoxl.Text=Me.TextBox2.Text="”Me.TextBox3.Text="”Me.TextBoxl.Focus()EndSubPrivateSubButton3_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EvcntArgs)HandiesButtoClickMe.Hide0fl.Show()EndSubPrivateSubButton2_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesButton2.ClickMe.TextBoxl.Text="”Me.TextBox2.Text=Me.TextBox3.Text=Me.TextBoxl.Focus()EndSubEndClass新用八注册好了之后,便可以背录了,山于普通用户只能背陆到计算界血,而管理员能够实现的功能包含用户的功能,当然也可以登录到计算界面,在以后的叙述屮只针对管理员。1.普通用户管理界面在管理员界面点击用户管理可以弹出用户管理界面: 用户名密码用戶等级添加新用戶|q1lq[False删除此用門返回l<1更新1宦用户管理口回区]在这个窗口屮可以实现对普通用户的管理,川户等级为“false",说明其为普通用户,点击下面相应的按钮可以实现用户的翻页,若要删除当前用户,点击“删除该用户”,再点击“更新”,更新用户表,完成用户的删除,如果要添加一个新用户,点击“添加新用户”,弹出“添加新用户对话框”,进行相应的操作完成新用户的添加。点击“返回”返回管理员界面。为实现用户管理的各项功能,我们在连接成功数据库后,用dataadapter将川户等级为0的用户填充dataset,分别将用户名,密码,用户等级进行相应的绑定,并用comniadbuilder生成sql语句,并在相应的按钮上填写代码。代码如下:TnheritsSystem.Windows.Forms.Form"定义绑定PublicmybindAsBindingManagerBaseDimmysqlAsString="select*from用户where用户等级二0〃DimmyconnAsNewSqlClient.SqlConnection(〃InitialCatalog=TLXJS;DataSource=0284C5CD57654E0;IntegratedSecurity=SSPT;“)DimmydatasetAsNewData・DataSetDimadapterAsNewSqlClient・SqlDataAdapter(mysql,myconn)PrivateSubForm7_Load(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)HandiesMyBasc.Load"将用户等级为0的用户填充入mydatasetadapter.Fill(mydataset,"用户")"创建commandbui1derDimmycbAsNewSqlClient.SqlCommandBuiIder(adapter)mybind=Me.BindingContext(mydataset,〃用户〃)"用代码实现绑定TextBoxl.DataBindings.AddCztextz,,mydataset,"用户.用户名")TextBox2.DataBindings.Add("text",mydataset,"用丿、".密码")TextBox3.DataBindings.Add(z,text,/,mydataset,"用户.用户等级")EndSubPrivateSubButtonlClick(ByValsenderAsSystem.0bject,ByVaieAsSystem.EventArgs)IlandlesButtonl.Click"第一条记录 mybind.Position二0EndSubPrivateSubButton2_Click(ByVaisenderAsSystem.0bject,System・EvcntArgs)HandlesButton2・Click"上一条记录mybind.Position=mybincLPosition一1EndSubPrivateSubButton3Click(ByValsenderAsSystem.0bject,System.EventArgs)HandiesButton3・Click"下一条记录mybind.Position二mybind.Position+1EndSubPrivateSubButton4Click(ByVaisenderAsSystem.0bject,System.EventArgs)IlandlesButton4.Click"最后一条记录mybind.Position=mybind.Count-1EndSubPrivateSubButton5_Click(ByVaisenderAsSystem.Object,System.EventArgs)HandlesButtons.Click"在dataset屮删除当前记录mybind.RemovoAt(mybind・Position)EndSubPrivateSubButton6_Click(ByValsenderAsSystem.Object,System・EventArgs)HandlesButton6.ClickMe.HideOf2.Show()EndSubPrivateSubButton7_Click(Bj^ValsenderAsSystem・0bject,System.EventArgs)HandlesButton7・ClickMe.HideOf8.Show()EndSubPrivateSubButton8Click(ByVaisenderAsSystem.0bject,System.EventArgs)HandlesButton8.Click ByVaieAsByVaieAsByVaieAsByVaieAsByVaieAsByVaieAsByVaieAsmybind.EndCurrentEdit() "更新物理数据库adapter.Update(mydataset,"用丿"")EndSub1.添加用八界而在用户管理界面中点击“添加新用户按钮”弹出添加新用户界面此界血的实质与注册新用户界面完全相同,实现功能的方式也是一样的,只是“返回”按钮的返回界面是不同的。故在这里不再从述。&管理员管理界面在管理员界而屮点击管理员管理可以弹岀管理员管理界而:其中相应的按钮与用户管理类似,用户等级为true表示其为管理员,在填充dataset时,将用户等级为1的用户填充,其他为用户管理界面完全和同,在这里不再赘述。9.添加管理员界面在管理员管理界而中点击添加管理员,弹出如卜-的添加管理员界面: 此界而与添加用户的方式相同,只是再用command命令写入数据库时,将用户等级写入1,其他与新用户实现的方式相同。这里也不在从述。10.计算数据修改界面画数据修改界面1保存修改返回PrivateSubForm4_Load(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandiesMyBase・LoadFormBordcrStyle=FormBordcrStyle.FixodSingleadapter=NewSqlClient.SqlDataAdapter(z,select*from附加应力系数",myconn)DimmycbAsNewSqlClient.SqlCommandBuiIder(adapter)adapter.Fill(mydataset,〃附加应力系数")Me.DataGridl.CaptionText=〃附加应力系数表"TryMe.DataGridl.DataSource=mydataset.Tables(,z附加应力系数〃)CatchexAsException MsgBox(ex・Message)EndTryEndSubPrivateSubMenuItern1_C1ick(ByVa1senderAsSystem.Object,ByVaieAsSystem・EventArgs)HandlesMenuTtern1・ClickDimresponseAsMsgBoxResult=MsgBox(,z该操作将会永久更改数据参数,请问是否继续MsgBoxStyle.YesNo,"警告")Ifresponse=MsgBoxResult.YesThenadapter.Update(mydataset,"附加应力系数〃)EndIfEndSubPrivateSubMenultem2_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)HandlesMenultem2・ClickMe.Hide0f2.Show()EndSub11.基础信息管理及基础沉降计算界而①进入见面后,首先出现棊础信息管理界面PrivateSubForm3_Load(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)HandiesMyBase.LoadFormBorderStyle=FormBorderStyle.FixedSingleMe.Width=640Me.Height=400Label1.Hide()Label6.HideO Label7.HideOLabel8.HideOLabe19.HideOLabel10.HideOLabel11.HideOButton7.Hide()ButtonS.Hide()ButtonlO.Hide()Buttonll.HideO"登录界面后,先把与计算有关的空间隐藏adapter=NewSqlClicnt.SqlDataAdapter(z,select*from基础",mycorm)Tryadapter.Fill(mydataset,"基础")CatchexAsExceptionMsgBox(ex.Message)"把基础信息填充到数据集mydatasetEndTrymybind=Me.BindingContext(mydataset,"基础”)mybind.Position二0mybindl=Me.BindingContext(mydataset,"位移")"基础〃基础〃基础〃基础〃基础基础编号〃)长〃)宽〃)荷载〃)基础深度〃)TextBoxl.DataBindings.Add("text",mydataset,TextBox2.DataBindings.Add("text",mydataset,TextBox3.DataBindings.Add("text",mydataset,TextBox4.DataBindings.Add("text",mydataset,TextBox5.DataBindings.Add("text",mydataset,mybind与mydataset绑定,使相关控件绑定mydatasetadapterl=NewSqlClient.SqlDataAdapter(z,select*from位移〃,adapterl.Ei11(mydataset,"位移")"建立myconn)Label11.DataBindings.Add(,ztext,z,mydataset,"位移.棊础编号")Label10.DataBindings.Add(^text^,mydataset,位移.总位移")"把位移填充到数据集mydataset,并与相关控件绑定EndSubPrivateSubButton1Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesButtonl.Clickmybind.Position二0EndSubPrivateSubButton2Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesButton2.ClickIfmybind.Position二0ThenMsgBox(“已到最前")Elsemybind.Position二mybind.Position-1EndTfEndSub PrivateSubButton3_Clickl(ByVaisenderAsSystem.Object,ByVaieAsSystem・EventArgs)HandlesButton3.ClickIfmybind.Position=mybind.Count-1ThenMsgBox("已到最后")Elsemybind.Position二mybind.Position+1EndIfEndSubPrivateSubButton4Click(ByValsenderAsSystem.0bject,ByVaieAsSystem・EventArgs)HandlesButton4.Clickmybind.Position二mybincl.Count-1EndSubPrivateSubButton5Click(ByVaisenderAsSystem.0bject,ByVaieAsSystem.EventArgs)HandlesButton5.ClickDimresponseAsMsgBoxResult二MsgBox(z/添加新基础信息,您确定吗?MsgBoxStyle.YesNo,〃警告〃)EndEndSubPrivateSubButton6_Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesButton6.ClickDimresponseAsMsgBoxResult=MsgBoxC永久删除基础信息,您确定吗?"、MsgBoxStyle.YesNo,"警告")Ifresponse=MsgBoxResult-YesThenMe.mybind・RomoveAt(mybind.Position)Dim基础信息AsString基础信息=Me.TextBoxl.TextDimmycmdAsNewSqlClient.SqlCommmidDimmycmd1AsNewSqlClient.SqlCommandmycmdeConnection=myconnmycmdl.Connection=myconnmycmd.CommandText="deletefrom基础where基础编号二""+基础信mycmd1.CommandText二"deletefrom位移where基础编号二+基础信mycorm.0pon()在SqlCommand添加删除命令,并删除相mycmd・ExecuteNonQuery()mycmd1.ExecuteNonQuery()myconn.Close()关信息Me.mybind.RemoveAt(mybind.Position)"在mydind中删除当前行EndIf EndSubPrivateSubButton9_C1ick(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesButton9.ClickDim基础编号,长,宽,荷载,基础深度AsString基础编号=Me.TextBoxl.Text长=Me.TextBox2.Text宽=Me.TextBox3.Text荷载=Me.TextBox4.Text基础深度=Me.TextBoxS.TextDimmycmdAsNewSqlClient.SqlComniandmycmd.Connection二myconnmycmd.CommandTcxt="insertinto基础valuesC"&基础编号&长&〃‘,‘〃&宽&〃‘,‘〃&荷载&〃","〃&基础深度&”冷”mycorm.Open()mybind.EndCurrentEdit()mycmd.ExecuteNonQuery()myconn.Close()"在Sq1Command添加插入命令,并在数据库的表中添加新信息EndSub①点击沉降计算后,出现计算界而PrivateSubMenultem2Click(ByVaisenderAsSystem.Object,ByVaieAsSystem.EventArgs)HandlesMenultem2.ClickTextBoxl.Hide()TextBox2.HideO TextBox3.Hide()TextBox4.Hide()TextBox5.HideOButtonl.HideOButton2.Hide()Button3.Hide()Button4.Hide()Button5.HideOButton6.HideOButton9.Hide()Label12.HideOLabel2.HideOLabe13.HideOLabel4.HideOLabel5.HideOLabel1.Show()Label6.Show()Labe17.Show()Label8.Show()Labe19.Show()Label10.Show()Label11.Show()Button7.Show()Button8.Show()ButtonlO.Show()Buttonl1.Show()mybindl.AddNew()Label1.Text=〃长度&TextBox2.Text&Labe16.Text="宽度&TextBox3.Text&〃nTLabel7.Text="荷载&TextBox4.Text&〃KN〃Labels.Text="基础深度"&TextBox5.Text&Label11.Text="基础编号"&TextBoxl.Text"点击菜单麻,基础信息管理界面隐藏,出现计算相关空间,并把Textbox的值赋给LabelEndSubFunctionef(ByVaimAsSingle)AsIfin<50Thenef=0.651Elself(m>500.625>1000.608>2000.587ef=Elselfmef=Elselfmef=-(50-m)*Anditi<100)-(100-m)Andm<200-(200-m)Andm<300一(300-m)Single(0.651-0.625)/50Then*(0.625Then*(0.608Then*(0.5870.608)/50-0.587)/1000.57)/100Else ef=0.57EndIf"利用计算得到的附加应力,算出每一层的沉降量EndFunctionPrivateSubButton8_Click(ByVaisonderAsSystem.Object,ByVaieAsSystem.EventArgs)HandiesButton8.ClickDim基础编号,位移AsString基础编号=Me.TextBoxl.Text位移=Label10.TextDimmysqlAsString="select基础编号from位移where基础编号二’"+基础编号+〃‘〃DimmydatasetAsNewData.DataSetDimadapterAsNewSqlClient.SqlDataAdapter(mysql,myconn)adapter.Fill(mydataset,"位移〃)DimmycmdAsNewSqlClient.SqlCommandmycmd.Connection=mycormmycmd.CommandText="insertinto位移valuesC"&基础编号&"&Vai(位移)&”丫‘Ifmydataset・Tables(0).Rows.Count=1ThenMsgBoxC该基础沉降已保存!〃,,〃警告〃)’如呆计算结果已在位移表中,那不能重复添加信息ElselfLabel10.Text二ThenMsgBox(,z请先计算基础沉降〃,,〃警告〃)ElseTrymyconn.Open()mybind.EndCurrentEdit()mycmd.ExecuteNonQuery()myconn.Close()CatchexAsExceptionMsgBox(ex.Message)EndTryMsgBox(,z成功!“,,"成功")’利用SqlCommand^位移表屮添加新信息EndIfEndSub ①点击“显示基础形状”按钮后致崔巍——关于画图程序的说明为了使沉降位移的计算更加直观,同时也增加使用者对计算过程了解度和信任度,我们决定添加画图程序。该画图程序包括两部分:基础的形状示意图和地基土的受力状态示意图。最初的设计构思是利用VB.NET良好的外部兼容性导入AUTOCAD画图程序进行图形的绘制,但该方案由于在实际操作过程屮存在问题较多且在有限的时间内无法解决而最终被否定,转而采用.NET程序自带的Microsoft图形设备接口GDI(GraphicsDeviceInterface)进行图形绘制。GDI图形操作代码简单易懂,具冇良好的操作性和可读性,但过于简单的画图命令带来了其它问题:基础的立体形状难以清楚表达。最终我们经过研究决定,利用画法几何知识编制程序对drawline事件的画图起始点进行计算处理,用12条直线首尾相连组成冇立体感的地基式样,解决了基础形状示意图的问题。在此需要特别说明的是,我们应该把此画图程序定义为子过程,以便进一步使程序模块化,增加可读性。但遗憾的是,由于吋间和粹力的原因,该项工作最终未能完成。解决了基础形状示意图的问题后,地基土的应力状态图就显得很容易了。在此要特别感谢崔巍同学编写的关于地基土应力计算的程序,该程序由于使用了二维数组,增加了可读性,人人减轻了我们调用地基十-应力数值画应力状态图时的工作量。程序编好以后,在调试过程中乂出现了意想不到的问题:原有图形无法被新的图形覆盖。这个问题一度困扰我们,但经过大家的努力,戢终还是用clear方法得到了很好的解决。至此,沉降位移的计算问题处理完毕。基础形状画图代码: "此处対回窗程啓DimgAsGraphicsg=Label9.CreateGraphicsLabel9・Creat«eGraghic£.Clear(Color・WhiteSmoke)g.TranslateTransform(60,120)DimpAsNewPen(Color.Red,1)Dim£xAsNewFont("宋体"丿10,FontStyle.Bold)DimsbAsNewSolidBrush(Color.Black)p.S^tLineCap(Drawing2D・LineCap・Flat,Drawing2D・LineCap・ArrowAnchor」g.DrawLine(p?a*2/3,-b/4-20,a*2/3,-b/4)g.DrawString基础示意團"丿£x»sb,6h+20)p.EndCap=Drawing2D.LineCap・Flatg.DrawLine(p?0?0?a?0)g.DrawLine(p?b/2?~b/2?b/2+-b/2)g・DrawLine(p?0,ha,h)g.DrawLine(p?b/g.DrawLine(p?0?g.DrawLine(p?a,g.DrawLine(p?0,g.DrawLine(p丿a,g.DrawLine(p?0?g.DrawLine(p?b/g.DrawLine(p?b/Drawing2D・DashCap・Flat)乙-b/2+h,b/2+a,-b/2+h)I,b/2?-b/2)b/2+a,-b/2)bb/2?-b/2+h)l,b/2+a,-b/2+h)L0,h)2?-b/2,b/2,-b/2+h)2+%-b/2,b/2+a,-b/2+h)g.DrawLine(p?0,a,h)p.Dispose():g.Dispose()"画圉程序结束④点击“显示应力图”按钮后地基土中的丿应力图代码: "插入画因程序Dimk丿jAsSingleDimaAsGraphicsa=Label9.CreateGraphicsLabel9・CreateGraphics・Clear(Color.WhiteSmoke)Dim£xAsNewFont宋体"丿10,FontStyle.Bold)DimpxAsNewPen(Color.Red^2)DimsbAsNewSolidBrush(Color.Black)a.TranslateTransform(40,40)"画地基土中的应力Ifp(l,7)>250Thena.DrawStringC地基土中的应力过大,国形无法显示"丿£x,sb,0,-20)Fori=0To7Step1_a.DrawStringC第"&i+1&"层中土的应力为"&p(l,i),fx,s,20*i)NextElsea.DrawString("地基土中的应力图Jfx,sb,0,-20)Fori=0To7Step1a.DrawLine(px?0?20*i?p(1?i),20*i)a.DrawString(p(1,i)&"KN:fx?sb^p(1?i)+5丿20*i"5)NextiFori=0To6a.DrawLine(px,p(1,i),20*p(1^i+1)丿20*(i+1))Nexta.DrawLine(px?0?0丿0,140)Fori=0To6j=20*ia.DrawLine(px,j»一5‘j)a.DrawString(i+1?fx?sb?"10?j+2)Nexta.Dispose0:sb.Dispose():fx.Dispose()学习心得今天上午,我终于把所冇的代码和窗体全部完成,这时离建立项FI已经有两个多星期了。回想着两个多星期与数据库的每一天都可以说充满艰辛的同时也充满了希望。想想开学时,被迫无奈地选上了数据库这门课,到现在写出了长达120多行的存储过程代码;从刚开始使对vb.net和SQLServer的一窍不通,到现在运用这两门软件开发出自己的项冃。这期间的口口夜夜都是不断的翻书,查资料,问老师,问同学,在网上和许多初学者、编程高手们的讨论,无论是哪-行代码的写出,都充满了辛劳和不断对白己说“我行!”的勇气。数据库建立之初是很简单的,只用了儿个小时,所有的表,触发器就已经建好了,也只用了几小时就完成了“登录窗体”的所有代码,完成了几乎除了计算系统外所有的用户管理初步创立。但是当我面临最因难的计算系统时,终于体会到了寸步不前的滋味。没冇思路,没有先例,只有一个人不断的尝试着新代码的一次次编写,和一次次失败后代码的删除,整整一个晩上,没有丝毫的进步。第二天,我找到了网络,这个信息最庞大,也是最让人迷茫的地方。看着高手们写出的代码,和他们的讨论。我掌握了“动态列名”,“临时表的创建”。也就是利用这两项利器,我成功地创建了项FI中最复杂的存储过程。现在项冃完成了,我对数据库这一网络时代授重要的应川软件冇了更深刻的知识,了解数据库在未来的各个领域的深刻影响。今后我会努力把数据库的技术运用到£|己所将从事的行业,更加熟练地运用它。 我一次次地遇到困难,又一次次地解决困难。在这期间,我得到的不仅仅是知识,更是获取知识,攻克难题的勇气和信心。'