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

解决了这些总体的问题之后,就可以开始写宇宙级的学生信息管理系统了。
VB的第一个项目的更多相关文章
- python+Django创建第一个项目
1.首先搭建好环境 1.1 安装pyhton,Linux系统中,python是系统自带的所以就不用安装 1.2 安装Django框架 使用pip安装: pip install django 1.3 检 ...
- vs2017 cordova apk 第一个项目
原文:vs2017 cordova apk 第一个项目 vs出到了2017,终于能正了八经跨平台开发,特别是终于不报一堆错了. cordova是个好东西,终于不用揽一个项目,还要被手机端瓜分大半血汗钱 ...
- Surprise团队第一周项目总结
Surprise团队第一周项目总结 团队项目 基本内容 五子棋(Gobang)的开发与应用 利用Android Studio设计一款五子棋游戏,并丰富其内涵 预期目标 实现人人模式:2个用户可以在同一 ...
- [Asp.net MVC]Asp.net MVC5系列——第一个项目
目录 概述 创建第一个项目 添加控制器 总结 概述 本教程是个人一步一步学习的总结,希望能帮到正在进入ASP.Net MVC5方向的朋友,个人也是准备进入ASP.NET MVC5领域,虽然艰辛,但是乐 ...
- AndroidStudio第一个项目HelloWorld
实验内容 在Android Studio中创建项目 创建并启动Android模拟器 项目的编译和运行 实验要求 在安装好的AndroidStudio上建立第一个工程 创建并启动Android模拟器 编 ...
- 自我总结(六)---(学习j2ee+j2ee第一阶段项目)
自我完善的过程就是在不断的自我总结不断的改进. 学习了Struts2 Spring Hibernate. 十天前结束了这个课程.也考试了.这次考试老师说机试考的还不错.其实就是一个简单的用户登录,进行 ...
- Django 创建第一个项目(转)
转自(http://www.runoob.com/django/django-first-app.html) 前面写了不少python程序,由于之前都是作为工具用,所以命令行就足够了,最近写的测试用例 ...
- 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...
- Angular安装及创建第一个项目
Angular简介 AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJ ...
随机推荐
- poj3233(等比矩阵求和)
poj3233 题意 给出一个 \(n \times n\) 的矩阵 \(A\) ,求 \(A + A^2 + A^3 + ... + A^k\) . 分析 构造矩阵 \[ \begin{bmatri ...
- 杭电oj 1000
今天开始和一个认识的学弟刷题. 学弟是个大牛,我还是个菜鸟.嘿嘿. 杭电第一题我就wrong了好几次. #include <iostream> using namespace std; i ...
- BZOJ 1112 [POI2008]砖块Klo(可持久化线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1112 [题目大意] 给出一个数列,对于一个操作,你可以对一个数+1,或者一个数-1, ...
- 【数位dp】hdu3555 Bomb
题意就是找0到n有多少个数中含有49.数据范围接近10^20 DP的状态是2维的dp[len][3]dp[len][0] 代表长度为len不含49的方案数dp[len][1] 代表长度为len不含49 ...
- 【函数式权值分块】【块状链表】bzoj3065 带插入区间K小值
显然是块状链表的经典题.但是经典做法的复杂度是O(n*sqrt(n)*log^2(n))的,出题人明确说了会卡掉. 于是我们考虑每个块内记录前n个块的权值分块. 查询的时候差分什么的,复杂度就是O(n ...
- 10.2(java学习笔记)JDBC事务简述
一.事务 事务是指作为一系列操作组成的一个整体,该整体只有两种状态,要么全部执行,要么全部不执行. 当组成这个事务的所有语句都执行成功则该事务执行,只要有一条语句执行失败则该事务不执行. 假设这里有一 ...
- C# 二维码扫描
Zint类用于产生二维码.https://sourceforge.net/projects/zint/ Zxing类用于读取二维码. https://github.com/zxing/zxing AF ...
- 选择改变事件OnCheckedChange
1.效果图:选择正确的提示选对,选择错误提示选错 2.activity_main.xml <?xml version="1.0" encoding="utf-8&q ...
- Saga的实现模式——进化(Saga implementation patterns – variations)
在之前的几个博客中,我主要讲了两个saga的实现模式: 基于command的控制者模式 基于事件的观察者模式 当然,这些都不是实现saga的唯一方式.我们甚至可以将这些结合起来. 发布者——收集者 回 ...
- Flex页面跳转的五种实现方式
Flex页面跳转有很多值得学习的地方,本文向大家介绍一下Flex页面跳转的几种方式,主要包括五种方式,这里为大家一一介绍. AD: 在学习Flex的过程中,你可能会遇到Flex页面跳转的概念,这里 ...