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 ...
随机推荐
- 34、Django实战第34天:退出登录
编辑users.view.spy ... from django.contrib.auth import authenticate, login, logout from django.http im ...
- RobotFramework自动化测试框架系统关键字之断言
一.基础 RobotFramework带有丰富的系统关键,使用时无需导入,直接使用,为写自动化用例带来了极大的方便:不能停留在知道或者是会得程度,只有熟练使用各关键字,才能提升自动化用例的写作效率.下 ...
- [BZOJ1095]捉迷藏
点了动态点分治的科技树,这道题是树形态不变的动态点分治,形态变化的话...待会补 考虑点分治过程中的这样一种结构:按递归层次把当前层的重心与上层重心互相连接,这就是点分治树,容易看出它的树高只有$O( ...
- Spring整合jdbc-jdbc模板对象
1,Spring 中封装了一个可以操作数据库的对象(JDBCTemplate:jdbc模板),这个对象封装了JDBC技术 2,与DBUtil中的QueryRunner对象非常相似 3,操作 (1)导包 ...
- kill -3 获取threaddump信息
有些Java应用服务器是在控制台上运行,如Weblogic,为了方便获取threaddump信息,在weblogic启动的时候,会将其标准输出重 定向到一个文件,用"nohup ./star ...
- win10 彻底删除mysql步骤
转载自:https://blog.csdn.net/sxingming/article/details/52601250 1. 停止MySQL服务 开始->所有应用->Windows管理工 ...
- Intel haxm安装失败问题解决
在安装Intel haxm为安卓模拟器加速时,会遇到提示VT-X未开启问题,问题提示如下图 工具/原料 Intel haxm 安卓模拟器 方法/步骤 确认你的处理器是否是Intel的,如果是A ...
- es6类声明,class总结
1.class的基本写法 class a{ // 传入参数或者写入固定参数 constructor(a,b){ this.a=a this.b=b } // 可直接调用的计算后的参数 get c(){ ...
- CSS的伪元素和伪类
css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类—— :hover, :active, :visited, :focus. 常见伪元素——::first-letter,::first-l ...
- 《linux 内核全然剖析》 chapter 4 80x86 保护模式极其编程
80x86 保护模式极其编程 首先我不得不说.看这章真的非常纠结...看了半天.不知道这个东西能干嘛.我感觉唯一有点用的就是对于内存映射的理解...我假设不在底层给80x86写汇编的话.我 ...