鱼C论坛

 找回密码
 立即注册
查看: 424|回复: 1

本人手中有一个vb的程序,需要用python写出来,我实在没有时间,有能提供者,重金...

[复制链接]
发表于 2018-9-20 10:21:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Public X1, X2, X3 As Integer

Private Sub Form_Load()
    MakeWindow Me, False
    imgTitleMaxRestore.Picture = imgTitleMaximize.Picture
    LoadSkinz Me
    List1.AddItem ("格式为:时段,来流量")
    List2.AddItem ("格式为:水位,库容")
    List3.AddItem ("格式为:水位,泄流量")
End Sub
'输入设计洪水过程
Private Sub Cmd1_Click()
On Error Resume Next
Dim File1 As String
Dim LineIn As String
filenum = FreeFile
CD1.DialogTitle = "打开设计洪水过程文件"
CD1.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CD1.ShowOpen
Text1.Text = CD1.FileName
If CD1.FileName <> "" Then
&nbsp;&nbsp;&nbsp; File1 = CD1.FileName
&nbsp;&nbsp;&nbsp; List1.Clear
&nbsp;&nbsp;&nbsp; Open File1 For Input As #filenum
&nbsp;&nbsp;&nbsp; Do While Not EOF(filenum)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Line Input #filenum, LineIn
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List1.AddItem LineIn
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X1 = X1 + 1
&nbsp;&nbsp;&nbsp; Loop
&nbsp;&nbsp;&nbsp; Close #filenum
Else
&nbsp;&nbsp;&nbsp; Exit Sub
End If
End Sub
'输入水库库容曲线
Private Sub Cmd2_Click()
On Error Resume Next
Dim File2 As String
Dim LineIn As String
filenum = FreeFile
CD2.DialogTitle = "打开水库库容曲线文件"
CD2.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CD2.ShowOpen
Text2.Text = CD2.FileName
If CD1.FileName <> "" Then
&nbsp;&nbsp;&nbsp; File2 = CD2.FileName
&nbsp;&nbsp;&nbsp; List2.Clear
&nbsp;&nbsp;&nbsp; Open File2 For Input As #filenum
&nbsp;&nbsp;&nbsp; Do While Not EOF(filenum)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Line Input #filenum, LineIn
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List2.AddItem LineIn
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X2 = X2 + 1
&nbsp;&nbsp;&nbsp; Loop
&nbsp;&nbsp;&nbsp; Close #filenum
Else
&nbsp;&nbsp;&nbsp; Exit Sub
End If
End Sub
'输入泄流能力曲线
Private Sub Cmd3_Click()
On Error Resume Next
Dim File3 As String
Dim LineIn As String
filenum = FreeFile
CD3.DialogTitle = "打开泄流能力曲线文件"
CD3.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CD3.ShowOpen
Text3.Text = CD3.FileName
If CD3.FileName <> "" Then
&nbsp;&nbsp;&nbsp; File3 = CD3.FileName
&nbsp;&nbsp;&nbsp; List3.Clear
&nbsp;&nbsp;&nbsp; Open File3 For Input As #filenum
&nbsp;&nbsp;&nbsp; Do While Not EOF(filenum)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Line Input #filenum, LineIn
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List3.AddItem LineIn
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X3 = X3 + 1
&nbsp;&nbsp;&nbsp; Loop
&nbsp;&nbsp;&nbsp; Close #filenum
Else
&nbsp;&nbsp;&nbsp; Exit Sub
End If
End Sub
'调洪演算计算核心代码
Private Sub Command3_Click()
On Error Resume Next
'读入文件并保存在数组中
Dim SD As Single&nbsp; '时段长度
Dim WC, Hu1, Hu2, Z2, H, Q1 As Single
Dim LineString As String
Dim HS(), KR(), XL(), TH(), VTQ1(), VTQ2() As Single
Dim WZ, Lenth As Integer
WC = Val(TextWC.Text)
SD = Int(Val(TextSD.Text)) * 3600
Dim File1, File2, File3, File4 As String
File1 = Text1.Text
File2 = Text2.Text
File3 = Text3.Text
ReDim HS(X1 + 1, 2)
ReDim KR(X2 + 1, 2)
ReDim XL(X3 + 1, 2)
ReDim TH(X1 + 1, 3)
ReDim VTQ1(X1 + 1, 2)
ReDim VTQ2(X1 + 1, 2)
'读洪水过程数据,保存数据于数组中
Open File1 For Input As #1
For i = 1 To X1
&nbsp;&nbsp;&nbsp; Line Input #1, LineString
&nbsp;&nbsp;&nbsp; Lenth = Len(LineString)
&nbsp;&nbsp;&nbsp; WZ = InStr(1, LineString, ",")
&nbsp;&nbsp;&nbsp; HS(i, 0) = Left(LineString, WZ - 1)
&nbsp;&nbsp;&nbsp; HS(i, 1) = Mid(LineString, WZ + 1, Lenth - WZ)
Next i
Close #1
'读水库库容曲线并赋值
Open File2 For Input As #2
For i = 1 To X2
&nbsp;&nbsp;&nbsp; Line Input #2, LineString
&nbsp;&nbsp;&nbsp; Lenth = Len(LineString)
&nbsp;&nbsp;&nbsp; WZ = InStr(1, LineString, ",")
&nbsp;&nbsp;&nbsp; KR(i, 0) = Left(LineString, WZ - 1)
&nbsp;&nbsp;&nbsp; KR(i, 1) = Mid(LineString, WZ + 1, Lenth - WZ)
Next i
Close #2
'读泄水能力曲线并赋值
Open File3 For Input As #3
For i = 1 To X3
&nbsp;&nbsp;&nbsp; Line Input #3, LineString
&nbsp;&nbsp;&nbsp; Lenth = Len(LineString)
&nbsp;&nbsp;&nbsp; WZ = InStr(1, LineString, ",")
&nbsp;&nbsp;&nbsp; XL(i, 0) = Left(LineString, WZ - 1)
&nbsp;&nbsp;&nbsp; XL(i, 1) = Mid(LineString, WZ + 1, Lenth - WZ)
Next i
Close #3
'计算起调水位Hu1
Dim VarHu1 As Single
For j = 1 To X3 - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If HS(1, 1) >= Val(XL(j, 1)) And HS(1, 1) <= Val(XL(j + 1, 1)) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = (XL(j + 1, 0) - XL(j, 0)) / (XL(j + 1, 1) - XL(j, 1))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VarHu1 = K * (HS(1, 1) - XL(j, 1)) + XL(j, 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If
Next j
'生成数组VTQ1()和VTQ2()
For i = 1 To X2
&nbsp;&nbsp;&nbsp; Dim VarH, VarV, VarQ As Single
&nbsp;&nbsp;&nbsp; VarH = KR(i, 0)
&nbsp;&nbsp;&nbsp; '插值求库容
&nbsp;&nbsp;&nbsp; For j = 1 To X2 - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If VarH >= Val(KR(j, 0)) And VarH <= Val(KR(j + 1, 0)) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = (KR(j + 1, 1) - KR(j, 1)) / (KR(j + 1, 0) - KR(j, 0))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VarV = K * (VarH - KR(j, 0)) + KR(j, 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; Next j
&nbsp;&nbsp;&nbsp; '插值求泄流量
&nbsp;&nbsp;&nbsp; For j = 1 To X3 - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If VarH >= Val(XL(j, 0)) And VarH <= Val(XL(j + 1, 0)) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = (XL(j + 1, 1) - XL(j, 1)) / (XL(j + 1, 0) - XL(j, 0))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VarQ = K * (VarH - XL(j, 0)) + XL(j, 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; Next j
&nbsp;&nbsp;&nbsp; '赋值到VTQ1()和VTQ2()
&nbsp;&nbsp;&nbsp; VarV = VarV * 10000 / SD
&nbsp;&nbsp;&nbsp; VarQ = VarQ / 2
&nbsp;&nbsp;&nbsp; VTQ1(i, 0) = VarH
&nbsp;&nbsp;&nbsp; VTQ1(i, 1) = VarV - VarQ
&nbsp;&nbsp;&nbsp; VTQ2(i, 0) = VarH
&nbsp;&nbsp;&nbsp; VTQ2(i, 1) = VarV + VarQ
Next i
'输出数组VTQ1()和VTQ2()到文件
filenum = FreeFile
If Right(App.Path, 1) = "\" Then
&nbsp;&nbsp;&nbsp; File1 = App.Path + "pyeVTQ1.txt"
&nbsp;&nbsp;&nbsp; File2 = App.Path + "pyeVTQ2.txt"
Else
&nbsp;&nbsp;&nbsp; File1 = App.Path + "\pyeVTQ1.txt"
&nbsp;&nbsp;&nbsp; File2 = App.Path + "\pyeVTQ2.txt"
End If
&nbsp;&nbsp;&nbsp; Open File1 For Output As #filenum
&nbsp;&nbsp;&nbsp; Write #filenum, "时段 VTQ1"
&nbsp;&nbsp;&nbsp; For i = 1 To X2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write #filenum, Val(VTQ1(i, 0)), Val(VTQ1(i, 1))
&nbsp;&nbsp;&nbsp; Next i
&nbsp;&nbsp;&nbsp; Close #filenum
&nbsp;&nbsp;&nbsp; filenum = FreeFile
&nbsp;&nbsp;&nbsp; Open File2 For Output As #filenum
&nbsp;&nbsp;&nbsp; Write #filenum, "时段 VTQ2"
&nbsp;&nbsp;&nbsp; For i = 1 To X2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write #filenum, Val(VTQ2(i, 0)), Val(VTQ2(i, 1))
&nbsp;&nbsp;&nbsp; Next i
&nbsp;&nbsp;&nbsp; Close #filenum
'开始调洪演算,双辅助线法计算
'赋初值
If TextHu1.Text = "" Then
&nbsp;&nbsp;&nbsp; Hu1 = VarHu1
Else
&nbsp;&nbsp;&nbsp; Hu1 = Val(TextHu1.Text)
End If
TH(1, 0) = 1
TH(1, 1) = Hu1
&nbsp;&nbsp;&nbsp; For j = 1 To X3 - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Hu1 >= Val(XL(j, 0)) And Hu1 <= Val(XL(j + 1, 0)) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = (XL(j + 1, 1) - XL(j, 1)) / (XL(j + 1, 0) - XL(j, 0))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VarQ = K * (Hu1 - XL(j, 0)) + XL(j, 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; Next j
TH(1, 2) = VarQ
OutString = "时段&nbsp;&nbsp;&nbsp; 上游水位&nbsp;&nbsp;&nbsp; 下泄流量"
List4.AddItem (OutString)
OutString = CStr(TH(1, 0)) + " , " + CStr(TH(1, 1)) + " , " + CStr(TH(1, 2))
List4.AddItem (OutString)
Dim IPJ, VarVTQ1, VarVTQ2, VarHu2 As Single
'循环计算
For i = 2 To X1
&nbsp;&nbsp;&nbsp; TH(i, 0) = i
&nbsp;&nbsp;&nbsp; IPJ = (Val(HS(i, 1)) + Val(HS(i - 1, 1))) / 2 '平均入流量
&nbsp;&nbsp;&nbsp; For j = 1 To X2 - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If TH(i - 1, 1) >= Val(VTQ1(j, 0)) And TH(i - 1, 1) <= Val(VTQ1(j + 1, 0)) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = (VTQ1(j + 1, 1) - VTQ1(j, 1)) / (VTQ1(j + 1, 0) - VTQ1(j, 0))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VarVTQ1 = K * (TH(i - 1, 1) - VTQ1(j, 0)) + VTQ1(j, 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; Next j
&nbsp;&nbsp;&nbsp; VarVTQ2 = IPJ + VarVTQ1
&nbsp;&nbsp;&nbsp; For j = 1 To X2 - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If VarVTQ2 >= Val(VTQ2(j, 1)) And VarVTQ2 <= Val(VTQ2(j + 1, 1)) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = (VTQ2(j + 1, 0) - VTQ2(j, 0)) / (VTQ2(j + 1, 1) - VTQ2(j, 1))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VarHu2 = K * (VarVTQ2 - VTQ2(j, 1)) + VTQ2(j, 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; Next j
&nbsp;&nbsp;&nbsp; TH(i, 1) = VarHu2
&nbsp;&nbsp;&nbsp; For j = 1 To X3 - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If VarHu2 >= Val(XL(j, 0)) And VarHu2 <= Val(XL(j + 1, 0)) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = (XL(j + 1, 1) - XL(j, 1)) / (XL(j + 1, 0) - XL(j, 0))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VarQ = K * (VarHu2 - XL(j, 0)) + XL(j, 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; Next j
&nbsp;&nbsp;&nbsp; TH(i, 2) = VarQ
&nbsp;&nbsp;&nbsp; WZ = InStr(1, CStr(TH(i, 1)), ".")
&nbsp;&nbsp;&nbsp; If WZ <> 0 Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TH(i, 1) = Val(Left(TH(i, 1), WZ + 2))
&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; WZ = InStr(1, CStr(TH(i, 2)), ".")
&nbsp;&nbsp;&nbsp; If WZ <> 0 Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TH(i, 2) = Val(Left(TH(i, 2), WZ + 2))
&nbsp;&nbsp;&nbsp; End If
&nbsp;&nbsp;&nbsp; OutString = CStr(TH(i, 0)) + " , " + CStr(TH(i, 1)) + " , " + CStr(TH(i, 2))
&nbsp;&nbsp;&nbsp; List4.AddItem (OutString)
Next i
End Sub
'保存计算结果
Private Sub Command4_Click()
If List4.ListCount = 0 Then
&nbsp;&nbsp;&nbsp; Dim ret4 As VbMsgBoxResult
&nbsp;&nbsp;&nbsp; ret4 = MsgBox("没有数据需要保存,请先计算!", vbInformation, "提示")
&nbsp;&nbsp;&nbsp; Exit Sub
End If
CDSave.DialogTitle = "保存计算结果"
CDSave.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*"
CDSave.ShowSave
filenum = FreeFile
If CDSave.FileName <> "" Then
&nbsp;&nbsp;&nbsp; File4 = CDSave.FileName
&nbsp;&nbsp;&nbsp; Open File4 For Output As #filenum
&nbsp;&nbsp;&nbsp; Write #filenum, "时段 上游水位 下泄流量"
&nbsp;&nbsp;&nbsp; For i = 1 To List4.ListCount - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT = Split(List4.List(i), ",")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write #filenum, Val(OUT(0)), Val(OUT(1)), Val(OUT(2))
&nbsp;&nbsp;&nbsp; Next i
&nbsp;&nbsp;&nbsp; Close #filenum
&nbsp;&nbsp;&nbsp; ret4 = MsgBox("结果保存完毕!", vbInformation, "提示")
&nbsp;&nbsp;&nbsp; Exit Sub
Else
&nbsp;&nbsp;&nbsp; Exit Sub
End If
End Sub
'清空数据
Private Sub Command5_Click()
List1.Clear
List2.Clear
List3.Clear
List4.Clear
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
TextHu1.Text = ""
End Sub
Private Sub Command6_Click()
Mbox "确实要退出吗?", vbInformation, "注意保存结果"
End Sub
'界面部分代码(开始)
Private Sub imgTitleClose_Click()
&nbsp;&nbsp;&nbsp; Unload Me
End Sub
Private Sub imgTitleLeft_MouseDown(p_intButton As Integer, p_intShift As Integer, p_sngX As Single, p_sngY As Single)
&nbsp;&nbsp;&nbsp; DoDrag Me
End Sub
Private Sub imgTitleMain_MouseDown(p_intButton As Integer, p_intShift As Integer, p_sngX As Single, p_sngY As Single)
&nbsp;&nbsp;&nbsp; DoDrag Me
End Sub
Private Sub imgTitleMinimize_Click()
&nbsp;&nbsp;&nbsp; Me.WindowState = vbMinimized
End Sub
Private Sub imgTitleRight_MouseDown(p_intButton As Integer, p_intShift As Integer, p_sngX As Single, p_sngY As Single)
&nbsp;&nbsp;&nbsp; DoDrag Me
End Sub

Private Sub lblTitle_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
DoDrag Me
End Sub
'界面部分代码(结束)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-9-20 10:22:46 | 显示全部楼层
有意者可以联系我,提供源代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 06:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表