VB的第一個項目


    前言-----本人也是剛剛接觸VB,企業的VB代碼基本能看的懂,但是自己開發,只能呵呵。一般在剛學習一門新的語言時,很容易發生一些自己相當然的認識錯誤,so,記下並分享開發學習的過程,望指正。-----------世界因分享而精彩,安卓因開源更強大。

 


 

           不知道是否有人和我一樣,看不下去那些VB的書籍,既然這樣,不如就在項目中學習,我在學習java的時候做的第一個項目就是---fuck的學生信息管理系統,屁話說了一大堆,直接開始。

  首先對這個little的project進行一下分析,就很不正式的直接意淫一下大概是什么樣子的了,(一般正規的公司都要做一大堆的圖啊,表啊的什么的,一個案子的60%的時間就這么燒了)。

       功能模塊划分

  • 登錄注冊(IndexForm)    共分實現四個階段 :1.比對字符串,字符串層次上的實現(一個人) 。    2.比對對象,對象層次的實現(一個人)。3 數組,集合,列表層次的實現(多個人)。4.數據庫層次上的實現(多個人),連接oracle和Access數據庫。
  • 顯示及增刪改查(Mainform)。顯示學生的基本信息,實現學生信息數據的基本維護。

 

  一個基本簡單的Excel級別的管理系統就是這樣了。在開始代碼之前要解決以下一些問題。

     問題一:VB代碼的文件是什么樣子的。

 

       一般情況會有以下一些文件的產生,正常的話至少是3個。

     

   首先.vbp  .vbw  .frm是必須的,其中.vbp保存的是版本版權等信息,.vbw保存的是離開工程時的一些信息,.frm中保存的窗體代碼,一般當它還沒修煉成.exe文件是,要想運行都是要運行.vbp文件的。那個黑色箭頭的.scc文件是只有外接團隊協同軟件VSS的時候才會生成。.cls是class module的產物,.bas是module的產物,其他的.pag是屬性文件的后綴,.ctl是用戶控制文件的后綴。是不是很煩,java中就只有.java和.class文件。

  

  問題二:VB中怎么去調試程序。

  老師傅在我進公司的第一天告訴我的,F8 單步執行,正常的按F8,會直接到達程序的入口。shift+F8,不會進入函數方法直接得到返回值。F5全速前進,一般配合斷點使用,直接在循環的結束位置設斷點,然后全速。

  VB中好像沒有控制台輸出,我找了很久,試了很多也沒能在控制台輸出,有人知道的,賜教一下,就像就java中System.out.println和c#中的Console.WriteLine()。我的解決方案是打開''立即"窗口,?+“從代碼中復制的變量”+enter,會輸出值。

       立即窗口在“視圖”下面的‘立即’,快捷鍵是ctrl+G。最low的方法就是鼠標點到變量上去。

 

 問題三:文件夾架構是怎樣的。

  在我不知道什么spring,mybits等等這些被業界吹得神乎其神的javaEE框架時,我總感覺這些框架好屌,等我真正掌握這些框架時,它給我的感覺就是文件夾和配置文件也就是XML的裝X而已,當然這是我的戲謔之言,框架還是很屌的。相比而言VB中的文件夾好像被限定死了,這讓我很不習慣。雖然有三層架構也就是模型--控制器--視圖的文件分法,但是在實際的項目中文件怎么分還是我自己說了算,但是VB中,好像變了,只有個命名權。

   只能在project下面點擊添加這些東西,其中三個非常重要的就是form,module,和class module。很自然就有了問題四。

  問題四:module和class module的區別以及這2者里面的標准是怎么定義的,比如javaBean是有很嚴格的格式的,包括屬性的權限,空參構造,有參構造,set/get函數等。

  

 

  大概的意思就是module中定義的對象不可實例化,class module中定義的可以實例化,還有作用域的區別。還有就是module中存放的一些公用的Sub(方法)和函數(function)。而類中存放的大概就是標准的類吧!

      先看2個標准的module和class module的例子,看看其中定義了一些什么,以及是怎么定義的,具體的區別我將在自己實際定義的時候,去嘗試總結。

       module:

復制代碼
  1 Public fMainForm As frmMain
  2 Private IsConnect As Boolean    ' 標記數據庫是否連接
  3 
  4 Private cnn As ADODB.Connection   '連接數據庫的Connection對象
  5 Private rs As ADODB.Recordset     '保存結果集的Recordset對象
  6 Public strSQL As String     '保存執行SQL語句的字符串
  7 Public Conn As String   '連接字符串
  8 Public MyUser As New clsUser            '用戶對象
  9 Public CurUser As New clsUser            '當前用戶對象
 10 Public strDB As String  '數據庫名稱
 11 Public Pension_Rate As Single   '養老保險交費比例
 12 Public Medi_Rate As Single   '醫療保險交費比例
 13 Public Tax_Start As Currency     '個稅起征點
 14 Sub Main()
 15     Dim fLogin As New frmLogin
 16     strDB = "\DATA\工資.mdb"
 17     Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
 18     App.Path + strDB + ";Persist Security Info=False"
 19     
 20     fLogin.Show vbModal
 21     If Not fLogin.OK Then
 22         '登錄失敗,退出應用程序
 23         End
 24     End If
 25     Unload fLogin
 26     frmSplash.Show
 27     frmSplash.Refresh
 28     Set fMainForm = New frmMain
 29     Load fMainForm
 30     Unload frmSplash
 31     fMainForm.Show
 32 End Sub
 33 
 34 Public Sub Connect() '連接數據庫
 35     If IsConnect = True Then  '如果連接標記為真,則返回。否則會出錯
 36         Exit Sub
 37     End If
 38     Set cnn = New ADODB.Connection  '關鍵New用於創建新對象cnn
 39     cnn.ConnectionString = Conn  '設置連接字符串ConnectionString屬性
 40     cnn.Open  '打開到數據庫的連接
 41     
 42     If cnn.State <> adStateOpen Then  '判斷連接的狀態
 43         MsgBox "數據庫連接失敗", vbOKOnly + vbCritical, "警告"    '如果連接不成功,則顯示提示信息,退出程序
 44         End
 45     End If
 46     
 47     IsConnect = True  '設置連接標記,表示已經連接到數據庫
 48 End Sub
 49 
 50 Public Sub Disconnect() '斷開與數據庫的連接
 51     Dim rc As Long
 52     If IsConnect = False Then Exit Sub '如果連接標記為假,標明已經斷開連接,則直接返回
 53     cnn.Close  '關閉連接
 54     
 55     Set cnn = Nothing
 56     IsConnect = False
 57 End Sub
 58 '
 59 'Public Sub DB_Connect() '使用Connect_Num控制數據庫連接
 60 '    Connect_Num = Connect_Num + 1
 61 '    Connect
 62 'End Sub
 63 'Public Sub DB_Disconnect()
 64 '    If Connect_Num >= CONNECT_LOOP_MAX Then
 65 '        Connect_Num = 0
 66 '        Disconnect
 67 '    End If
 68 'End Sub
 69 'Public Sub DB_Disconnect_Forced() '強制關閉數據庫,計數器復位
 70 '    Connect_Num = 0
 71 '    Disconnect
 72 'End Sub
 73 
 74 Public Sub SQLExt(ByVal strSQLstmt As String)   '執行數據庫操作語句
 75     Dim cmd As New ADODB.Command  '創建Command對象cmd
 76     Connect    '連接到數據庫
 77     Set cmd.ActiveConnection = cnn  '設置cmd的ActiveConnection屬性,指定與其關聯的數據庫連接
 78     cmd.CommandText = strSQLstmt  '設置要執行的命令文本
 79     cmd.Execute
 80     Set cmd = Nothing
 81     Disconnect
 82 End Sub
 83 
 84 Public Function QueryExt(ByVal strSQLstmt As String) As ADODB.Recordset '執行數據庫查詢語句
 85     Dim rst As New ADODB.Recordset
 86     Connect    '連接到數據庫
 87     
 88     Set rst.ActiveConnection = cnn    '設置rst的ActiveConnection屬性,指定與其關聯的數據庫連接
 89     rst.CursorType = adOpenDynamic    '設置游標類型
 90     rst.LockType = adLockOptimistic   '設置鎖定類型
 91     rst.Open strSQLstmt    '打開記錄集
 92     Set QueryExt = rst    '返回記錄集
 93 End Function
 94 
 95 Public Function CountTax(curPay As Currency)                '定義過程,用於計算所得稅
 96     Dim curTemp As Currency, curTax As Currency
 97     curTemp = curPay - Tax_Start
 98     Select Case curTemp
 99     Case Is <= 0
100         curTax = 0
101     Case 0.01 To 500
102         curTax = curTemp * 0.05
103     Case 500.01 To 2000
104         curTax = curTemp * 0.1 - 25
105     Case 2000.01 To 5000
106         curTax = curTemp * 0.15 - 125
107     Case 5000.01 To 20000
108         curTax = curTemp * 0.2 - 375
109     Case 20000.01 To 40000
110         curTax = curTemp * 0.25 - 1375
111     Case 40000.01 To 60000
112         curTax = curTemp * 0.3 - 3375
113     Case 60000.01 To 80000
114         curTax = curTemp * 0.35 - 6375
115     Case 80000.01 To 100000
116         curTax = curTemp * 0.4 - 10375
117     Case Is > 100000
118         curTax = curTemp * 0.45 - 15375
119     End Select
120     CountTax = curTax
121 End Function
122 
123 Public Function MakeStr(ByVal Str As String) As String
124     MakeStr = Trim(Replace(Str, "'", "''"))
125 End Function
復制代碼

  class module:

復制代碼
 1 Public strName As String    '用戶名
 2 Public strPWD As String '密碼
 3 Public iUserClass As Integer    '用戶類型
 4 Public Sub Init()
 5     strName = ""
 6     strPWD = ""
 7     iUserClass = 0
 8 End Sub
 9 
10 Public Sub DeleteUser(ByVal UserName As String) '刪除用戶數據
11     If UserName = "Admin" Then
12         Exit Sub
13     End If
14     strSQL = "DELETE FROM [User] WHERE name='" + Trim(UserName) + "'"
15     SQLExt (strSQL)
16 End Sub
17 
18 Public Function GetInfo(ByVal UserName As String) As Boolean
19     Dim rs As New ADODB.Recordset
20     strName = UserName
21     strSQL = "SELECT * FROM [User] WHERE name='" + Trim(UserName) + "'"
22     Set rs = QueryExt(strSQL)
23     If rs.EOF Then
24         Init    '調用該類的初始化方法
25         GetInfo = False
26         Exit Function
27     Else
28         strPWD = Trim(rs.Fields(1))
29         iUserClass = rs.Fields(2)
30         GetInfo = True
31     End If
32 End Function
33 
34 Public Function ExistUser(ByVal UserName As String) As Boolean '存在用戶
35     Dim rs As New ADODB.Recordset
36     strSQL = "SELECT * FROM [User] WHERE Name='" + Trim(UserName) + "'"
37     Set rs = QueryExt(strSQL)
38     If Not rs.EOF Then
39         ExistUser = True
40     Else
41         ExistUser = False
42     End If
43 End Function
44 
45 Public Sub AddUser() '增加用戶
46     strSQL = "INSERT INTO [User] Values('" + Trim(strName) + "','" + Trim(strPWD) _
47         + "'," + Trim(Str(iUserClass)) + ")"
48     SQLExt (strSQL)
49 End Sub
50 Public Sub UpdateUser(ByVal UserName As String) '更改用戶信息
51     strSQL = "Update [User] Set name='" + Trim(strName) _
52         + "',PWD='" + Trim(strPWD) + "',UserClass=" + Trim(Str(iUserClass)) _
53         + " WHERE name='" + Trim(UserName) + "'"
54     SQLExt (strSQL)
55 End Sub
56 
57 Public Sub UpdatePassword(ByVal UserName As String) '更改用戶密碼
58     strSQL = "Update mima Set PWD='" + Trim(strPWD) _
59         + "' WHERE name='" + Trim(UserName) + "'"
60     SQLExt (strSQL)
61 End Sub
復制代碼

 

   解決了這些總體的問題之后,就可以開始寫宇宙級的學生信息管理系統了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM