📄 form3.frm
字号:
VERSION 5.00
Object = "{67397AA1-7FB1-11D0-B148-00A0C922E820}#6.0#0"; "MSADODC.OCX"
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 8070
ClientLeft = 60
ClientTop = 390
ClientWidth = 10500
LinkTopic = "Form1"
ScaleHeight = 8070
ScaleMode = 0 'User
ScaleWidth = 10500
StartUpPosition = 3 '窗口缺省
Begin VB.TextBox Text1
BeginProperty Font
Name = "宋体"
Size = 14.25
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 855
Left = 960
TabIndex = 3
Text = "Text1"
Top = 6000
Width = 4935
End
Begin MSAdodcLib.Adodc Adodc1
Height = 495
Left = 7920
Top = 6480
Visible = 0 'False
Width = 2175
_ExtentX = 3836
_ExtentY = 873
ConnectMode = 0
CursorLocation = 3
IsolationLevel = -1
ConnectionTimeout= 15
CommandTimeout = 30
CursorType = 3
LockType = 3
CommandType = 8
CursorOptions = 0
CacheSize = 50
MaxRecords = 0
BOFAction = 0
EOFAction = 0
ConnectStringType= 1
Appearance = 1
BackColor = -2147483643
ForeColor = -2147483640
Orientation = 0
Enabled = -1
Connect = ""
OLEDBString = ""
OLEDBFile = ""
DataSourceName = ""
OtherAttributes = ""
UserName = ""
Password = ""
RecordSource = ""
Caption = "Adodc1"
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "宋体"
Size = 9
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
_Version = 393216
End
Begin VB.CommandButton Command5
Caption = "前推回代"
BeginProperty Font
Name = "宋体"
Size = 14.25
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 855
Left = 8520
TabIndex = 2
Top = 2880
Width = 1575
End
Begin VB.CommandButton Command4
Caption = "绘 图"
BeginProperty Font
Name = "宋体"
Size = 14.25
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 855
Left = 8520
TabIndex = 1
Top = 960
Width = 1575
End
Begin VB.CommandButton Command2
Caption = "结 束"
BeginProperty Font
Name = "宋体"
Size = 14.25
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 855
Left = 8520
TabIndex = 0
Top = 4680
Width = 1575
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim lin As Integer
Dim t As Variant, n As Integer, p As Integer 't绘图时标记序号的点/n,p绘图和计算时用到的变量
Dim dq As Integer, z As Integer, w As Integer, f As Integer '定义dq为当前点/z为间隔/w为步进/f为符号标记
Dim n0 As Integer, n1 As Integer, n2 As Integer '定义n0,n1,n2为前推回代中用于标记数组元素个数的变量
Dim Ia(69) As Double, Ib(69) As Double '定义ia,ib为注入节点的电流的实部和虚部
Dim Ua(69) As Double, Ub(69) As Double '定义ua和ub为赋给的节点电压
Dim Ila(69) As Double, Ilb(69) As Double '定义ila,ilb为支路电流
Dim Ua1(69) As Double, Ub1(69) As Double '定义ua1,ub1为迭代的节点电压
Dim Ua2(69) As Double, Ub2(69) As Double '定义ua1,ub1为迭代的节点电压
Dim Sa(69) As Double, Sb(69) As Double
Dim Ploss As Double
Dim rr(1 To 68) As Double, xx(1 To 68) As Double, pp(1 To 68) As Double, qq(1 To 68) As Double '定义支路电阻,电抗/节点有功和无功功率
Dim a(69, 4) As Integer, b(69, 4) As Integer, table(68, 68) '定义后续数组a,前继数组b和连接表table
Dim DL(69) As Integer, FF(20) As Integer, cc(69) As Integer, s(3) As Integer '定义dl为队列和存放叶子节点的数组/ff为绘图数组/cc为标记已算完支路电流的数组/s为记录当前点的后续的数组
Private Sub Command2_Click() 'command2,结束按钮
End
End Sub
Private Sub Command4_Click()
n = 1: DL(0) = 0 'n:队列dl中元素的个数;dl队列,首元素是根节点
For i = 0 To 68 '给数组a,b第0列赋值,即序号
a(i, 0) = i
b(i, 0) = i
Next
Do
p = 1 'p记录叶子节点的个数
For i = DL(0) To 68
If table(DL(0), i) = 1 Then '队列的首元素如果有后续
a(DL(0), p) = i '队列首元素的后续为后续数组a赋值
p = p + 1 'p标记数组a的下标
DL(n) = i '扩展/入队
n = n + 1
End If
Next
For j = 0 To 68
DL(j) = DL(j + 1) '首元素出队
Next
n = n - 1
Loop While (n <> 0) '队列空,则跳出循环
For i = 1 To 68 '得到前继数组b
For j = 0 To 68
For p = 1 To 3
If a(j, p) = i Then
b(i, 1) = j
End If
Next
Next
Next
p = 0 '得到存放叶子节点的数组dl,p标记叶子节点的个数
For i = 0 To 68
If a(i, 1) = 0 Then
DL(p) = i
p = p + 1
End If
Next
z = p \ 2 '上半个平面分z个间距
w = (5000 - 1000) / z / 2 '绘图空间的上限和下限分别是1000和5000,w表示纵向的步进值
q = 0 'q标记支链上的分支点个数
For i = 0 To DL(0)
For j = 2 To 3
If a(i, j) <> 0 Then
FF(q) = a(i, j) 'ff数组存放支链上的分支点
q = q + 1
End If
Next
Next
For i = 0 To DL(0) '主链:先划点(单位是50的圆),再序号,最后连线(其中重叠)
Circle (i * 300, 3000), 50
Line (0, 3000)-(i * 300, 3000)
CurrentX = i * 300 - 20: CurrentY = 3000 + 20: Print i
Next
f = 1
For i = 0 To q - 1
Circle (b(FF(i), 1) * 300, 3000 - f * z * w), 50 'b(ff(i),1)找到支链上的分支点的前继
CurrentX = b(FF(i), 1) * 300 - 20: CurrentY = 3000 - f * z * w + 20: Print FF(i)
Line (b(FF(i), 1) * 300, 3000)-(b(FF(i), 1) * 300, 3000 - f * z * w) '画竖线
t = FF(i) '由支链上的分支点开始
j = 1
Do While a(t, 1) <> 0 '分支点的后续不为0,则按主链画法,绘横线
Circle (b(FF(i), 1) * 300 + j * 300, 3000 - f * z * w), 50
CurrentX = b(FF(i), 1) * 300 + j * 300 - 20: CurrentY = 3000 - f * z * w + 20: Print t + 1
Line (b(FF(i), 1) * 300, 3000 - f * z * w)-(b(FF(i), 1) * 300 + j * 300, 3000 - f * z * w)
t = t + 1
j = j + 1
Loop
f = -f 'f只有正负两个值,即在画支链是,保证上面一条,下面一条
If f > 0 Then
z = z - 1 '在f经过两次变换后,支链纵坐标的值需要加上或减去一个步进值
End If
Next
End Sub
Private Sub Command5_Click()
Adodc1.ConnectionString = "Provider=Microsoft.jet.OLeDB.3.51;Data Source=" & App.Path & "\db2.mdb;" '数据库名
Adodc1.RecordSource = "select * from data" '查询语句
Adodc1.Refresh
Adodc1.Recordset.MoveFirst '数据读取
For i = 1 To 68
rr(i) = Adodc1.Recordset.Fields(4)
xx(i) = Adodc1.Recordset.Fields(5)
pp(i) = Adodc1.Recordset.Fields(6)
qq(i) = Adodc1.Recordset.Fields(7)
If Not Adodc1.Recordset.BOF Then '判断是否到达记录集的尾部
Adodc1.Recordset.MoveNext '指针向下移一行
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -