上海电力学院
信息网络技术设计
课程设计报告
题 目: 门禁系统的设计
姓 名: 邱苗苗
学 号: 20101918
院 系: 电子与信息工程学院
专业年级: 电子信息工程 2010 级
同组成员:
2014 年 1 月 14 日
一.设计目的
本课程设计的目的是综合应用VB.NET 软件以及SQL 数据库建立门禁管理系统应用软件。
二.设计平台
硬件:IC 读卡器、IC 卡与PC 机
软件:VS2008,SQL Server2008
三.设计内容与要求
本课程设计的门禁管理系统的设计分为两部分:VB.NET 编写的应用软件以及SQL 数据库。SQL 数据库用来建立VS 中需要连接的各类表。软件主要包括虚拟串口以及模拟IC 卡刷卡机,可以完成计算机串口与IC 卡硬件设备的通信功能、门禁管理数据库的操作功能以及根据读入的IC 卡数据显示相应的数据列表的功能。
四.设计步骤
新建表,表名如图1所示。
1. 建立数据库
图1 表
2. 启动VS2008,新建项目“门禁管理系统”,添加5个Windows 窗体(帮助0,查询结果,5登录2,选择4,准备1) ,添加1个模块文件(Module1)
3. 页面设计和编程
(1)准备1(图2)
添加label ,timer, ,ProcessBar 控件,引导进入登录界面
图2. 准备1
(2)登录2(图3 )
添加label ,textbox ,button ,growbox 控件,以及SqlCommand1 ,SqlDataAdapter 管理员生成的DataSet1管理员1(连接SQL 中的管理员表)和SqlConnection1。
图3 登录2
不可见控件(图4):
图4不可见控件
当管理员或者密码输入错误时,显示对话框(图5)
当管理员或者密码为空时,显示对话框(图6)
图5. 错误 图6不能为空
代码:
Public Class 登录2
Private Sub 登录2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load
Label 时间.Text = Now
TextBox 管理员.Text = ""
TextBox 密码.Text = ""
End Sub
Private Sub Button 确定_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 确定.Click
If TextBox管理员.Text.Length 0 Or TextBox密码.Text.Length 0 Then
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
DataSet 管理员1.Clear()
SqlDataAdapter 管理员.SelectCommand.CommandText = "select*from 管理员 where 管理员='" & TextBox管理员.Text & "'and 密码='" & TextBox密码.Text & "'"
SqlDataAdapter 管理员.Fill(DataSet管理员1)
If DataSet管理员1. 管理员.Rows.Count = 1 Then
frm4.Show()
Else
MsgBox(" 管理员或密码错误"
, MsgBoxStyle.Critical)
End If
DataSet 管理员1.Clear()
SqlConnection1.Close()
Else
MessageBox.Show(" 管理员和密码不能为空" )
End If
End Sub
Private Sub Button 刷新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 刷新.Click
TextBox 管理员.Text = ""
TextBox 密码.Text = ""
End Sub
(3)选择4(图7)
添加label ,button ,growbox ,combobox ,timer 控件,以及SqlCommand1 ,SqlDataAdapter 进出资料生成的DataSet1进出资料1(连接SQL 中的进出资料表)和SqlConnection1。
图7 选择4
不可见控件:(图8)
连接串口后,填写“机器编号”,选择串口编号,然后刷卡,出现数据。(图9)
图9. 数据
代码:Public Class 选择4
Public Readstr As String
Private Sub Button 确定_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 确定.Click
If TextBox机器编号.Text.Length 0 And ComboBox串口编号.Text.Length 0 Then
Select Case ComboBox串口编号.Text
Case "COM2"
AxMSComm1.CommPort = 2
Case "COM1"
AxMSComm1.CommPort = 1
Case "COM3"
AxMSComm1.CommPort = 3
Case "COM4"
AxMSComm1.CommPort = 4
Case "COM5"
AxMSComm1.CommPort = 5
End Select
AxMSComm1.Settings = "19200,N,8,1"
AxMSComm1.InBufferSize = 1024
AxMSComm1.OutBufferSize = 1024
AxMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary
AxMSComm1.InputLen = 0
AxMSComm1.RThreshold = 1
AxMSComm1.PortOpen = True
Timer2.Enabled = True
Label1.Text = " 请刷卡"
Else
MessageBox.Show(" 您未设置机器编号或串口号码!" )
End If
End Sub
Private Sub Button 返回_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 返回.Click
Timer2.Enabled = False
If AxMSComm1.PortOpen = True Then
AxMSComm1.PortOpen = False
End If
Me .Hide()
frm2.Show()
End Sub
Private Sub 选择4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase .Load
DataSet 进出资料1.Clear()
TextBox 非法用户.Text = 0
TextBox 正常.Text = 0
TextBox 时间.Text = DateTime.Now.ToShortDateString()
Label1.Text = " 串口未设置"
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
TextBox 时间.Text = DateTime.Now.ToLongTimeString()
TextBox 时间.Refresh()
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Dim jihao As Byte
jihao = CByte (TextBox机器编号.Text)
AxMSComm1.OutBufferCount = 0
AxMSComm1.InBufferCount = 0
Dim ByteCodeAct(3) As Byte
ByteCodeAct(1) = &HAA
ByteCodeAct(2) = jihao
ByteCodeAct(3) = &HBB
AxMSComm1.Output = ByteCodeAct
End Sub
Private Function Hex2(ByRef c As String ) As String
Hex2 = Hex(CInt (c))
If Len(Hex2)
Hex2 = "0" & Hex2
End If
End Function
Private Sub AxMSComm1_OnComm(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxMSComm1.OnComm
Dim i As Object
Dim DataRead() As Byte
Dim bytData As Object ' 用来从接受缓冲区读取数据
Readstr = ""
On Error Resume Next
Select Case AxMSComm1.CommEvent
Case MSCommLib.OnCommConstants.comEvReceive
Readstr = ""
bytData = AxMSComm1.Input ' 将接收到的数据放入bytData 数组中
ReDim DataRead(UBound(bytData)) ' 取得接收到数据的最终长度,重新定义DataRead 的 ' 长度
For i = 0 To UBound(bytData)
DataRead(i) = bytData(i)
Readstr = Readstr & Hex2(CStr (DataRead(i)))
Next i
If Readstr.Substring(0, 2) = "FF" And Readstr.Substring(18, 2) = "FF" Then
TextBox1.Text = Readstr.Substring(6, 8)
End If
End Select
'Timer1.Enabled = True '重新打开定时器
End Sub
Private Sub Button 查询_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 查询.Click
Me .Hide()
frm5.Show()
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.Text.Length = 0 Then
Exit Sub
End If
If SqlConnection2.State = ConnectionState.Closed Then
SqlConnection2.Open()
End If
DataSet 用户1.Clear()
SqlCommand1.Connection = SqlConnection2 'SqlCommand1控件连接数据库
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBox1.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户1)
If DataSet用户1. 用户.Rows.Count = 1 Then
MessageBox.Show(" 门已打开!" )
TextBox 正常.Text = TextBox正常.Text + 1
DataGrid1.Update()
SqlCommand1.CommandText = "update 用户 set 时间组 = '" & TextBox 时间.Text & "' where 卡号='" & TextBox1.Text & "' "
SqlCommand1.ExecuteNonQuery()
SqlDataAdapter 进出资料.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBox1.Text & "'"
SqlDataAdapter 进出资料.Fill(DataSet进出资料1)
DataGrid1.Update()
SqlConnection2.Close() ' 关闭数据库连接
TextBox1.Text = "" ' 清空TextBox1
Else
MessageBox.Show(" 非法用户!" )
TextBox 非法用户.Text = TextBox非法用户.Text + 1
SqlDataAdapter 进出资料.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBox1.Text & "'"
SqlDataAdapter 进出资料.Fill(DataSet进出资料1)
End If
End Sub
End Class
(4)查询结果5(图10)
添加label ,textbox ,button ,datagrid ,mainmenu 控件,以及SqlCommand1 ,SqlDataAdapter 用户生成的DataSet1用户资料1(连接SQL 中的用户表)和SqlConnection1。
图10. 查询结果5
不可见控件(图11):
图11 不可见控件
查询:通过单个或多个信息(ID ,卡号,姓名,性别,部门,联系方式)可查出相对应的用
户资料。
添加:添加数据,由于ID 为主键,因此ID 不能为空。
删除:根据主键ID ,可一并删除该ID 内的其他信息。
修改:对于某一条记录,必须先填写ID ,然后填写其他要修改的数据,点击“修 改“,完成修改。
返回:返回上一级菜单,即登录2。
日志管理:选择查询日志。
总人数统计:选择查询人员出入信息。
帮助:显示帮助页面。
代码:Public Class 查询结果5
Private Sub 查询结果5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load
End Sub
Private Sub menjin()
SqlConnection1.Open()
DataSet 用户资料1.Clear()
SqlCommand1.Connection = SqlConnection1
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBoxID.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户资料1)
If DataSet用户资料1. 用户.Rows.Count = 1 Then
MessageBox.Show(" 门已打开!" )
SqlCommand1.CommandText = "insert into 日志(卡号, 备注) values('" & TextBoxID.Text & "',' 开门')"
SqlCommand1.ExecuteNonQuery()
Else
MessageBox.Show(" 非法用户!" )
SqlCommand1.CommandText = "insert into 日志(卡号, 备注) values('" & TextBoxID.Text & "',' 非法用户')"
SqlCommand1.ExecuteNonQuery()
End If
SqlConnection1.Close()
End Sub
Private Sub Button 返回_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 返回.Click
选择4.Show()
Me .Hide()
End Sub
Private Sub Button 查询_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 查询.Click
SqlConnection1.Open()
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where 卡号 = '" & TextBox 卡号.Text & "'or 姓名 = '" & TextBox姓名.Text & "' or 性别 = '" & TextBox性别.Text & "'or 部门 = '" & TextBox部门.Text & "'"
SqlConnection1.Close()
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
DataGrid1.Refresh()
TextBoxID.Text = ""
TextBox 姓名.Text = ""
TextBox 性别.Text = ""
TextBox 卡号.Text = ""
TextBox 联系方式.Text = ""
TextBox 部门.Text = ""
End Sub
Private Sub Button 添加_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 添加.Click
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
SqlCommand1.CommandText = "insert into 用户(ID,卡号, 姓名, 性别, 部门, 联系方式) values('" & TextBoxID.Text & "', '" & TextBox卡号.Text & "','" & TextBox姓名.Text & "','" & TextBox性别.Text & "','" & TextBox 部门.Text & "','" & TextBox联系方式.Text & "')"
SqlCommand1.ExecuteNonQuery()
SqlConnection1.Close()
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
TextBoxID.Text = ""
TextBox 姓名.Text = ""
TextBox 性别.Text = ""
TextBox 部门.Text = ""
TextBox 联系方式.Text = ""
End Sub
Private Sub Button 删除_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 删除.Click
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
SqlCommand1.CommandText = "delete from 用户 where ID = '" & TextBoxID.Text & "'
SqlCommand1.ExecuteNonQuery()
SqlConnection1.Close()
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
DataGrid1.Refresh()
End Sub
Private Sub Button 修改_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 修改.Click
If TextBoxID.Text.Length 0 Then
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where ID= '" & TextBoxID.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户资料1)
If DataSet用户资料1. 用户.Rows.Count 0 Then
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 姓名='" & TextBox 姓名.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 卡号='" & TextBox 卡号.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 性别='" & TextBox 性别.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 部门='" & TextBox 部门.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 联系方式='" & TextBox 联系方式.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where ID='" & TextBoxID.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
DataGrid1.Refresh()
SqlConnection1.Close()
End If
Else
MsgBox("ID 不能为空!" , MsgBoxStyle.Critical)
End If
TextBoxID.Text = ""
TextBox 姓名.Text = ""
TextBox 性别.Text = ""
TextBox 部门.Text = ""
TextBox 联系方式.Text = ""
End Sub
Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem 帮助.Click
Me .Hide()
frm0.Show()
End Sub
End Class
(7)帮助0(图12)
添加label ,button 控件。
图12 帮助0
五.问题及解决方法
在做的过程中,我碰到了很多问题,因为对于数据库本身的操作也不是很懂外加VB 编程也可以说是初次接触,所以开始有些吃力。比如说:我想要加将进出资料显示出来,思路是有的,可是代码不知道怎么写,在经过询问老师以及和同学的共同探讨和检查下,终于实现了相关功能。想要加实时时间,还是由于对于代码的不了解,在老师给别的同学改的基础上自己经过仔细推敲和不断地调试,也终于成功了。
六.实验小结:
通过这次门禁管理的课程设计我了解和基本掌握了VB.NET 、SQL 数据库以及串口操作的基本原理和编程方法,并学会在VS 中连接数据库以及配置串口。在语句的编写方面还显得有些不熟练,容易犯一些低级的错误,这是今后要改正的。另外在设计中我碰到了各种各样的问题,例如控件找不到,无法正确的修改数据, 串口连接问题等等,在同学和老师的帮助下都成功解决了,这也为毕业设计的软件编程方面打下了基础。
软件的使用,首先要建立属于自己的数据库,然后在VS2008的背景下建立项目,加入自己想要实现的功能模块,并编写相关代码,在完成以上的基础上,然后一步一步的调试,直到成功的实现功能。
上海电力学院
信息网络技术设计
课程设计报告
题 目: 门禁系统的设计
姓 名: 邱苗苗
学 号: 20101918
院 系: 电子与信息工程学院
专业年级: 电子信息工程 2010 级
同组成员:
2014 年 1 月 14 日
一.设计目的
本课程设计的目的是综合应用VB.NET 软件以及SQL 数据库建立门禁管理系统应用软件。
二.设计平台
硬件:IC 读卡器、IC 卡与PC 机
软件:VS2008,SQL Server2008
三.设计内容与要求
本课程设计的门禁管理系统的设计分为两部分:VB.NET 编写的应用软件以及SQL 数据库。SQL 数据库用来建立VS 中需要连接的各类表。软件主要包括虚拟串口以及模拟IC 卡刷卡机,可以完成计算机串口与IC 卡硬件设备的通信功能、门禁管理数据库的操作功能以及根据读入的IC 卡数据显示相应的数据列表的功能。
四.设计步骤
新建表,表名如图1所示。
1. 建立数据库
图1 表
2. 启动VS2008,新建项目“门禁管理系统”,添加5个Windows 窗体(帮助0,查询结果,5登录2,选择4,准备1) ,添加1个模块文件(Module1)
3. 页面设计和编程
(1)准备1(图2)
添加label ,timer, ,ProcessBar 控件,引导进入登录界面
图2. 准备1
(2)登录2(图3 )
添加label ,textbox ,button ,growbox 控件,以及SqlCommand1 ,SqlDataAdapter 管理员生成的DataSet1管理员1(连接SQL 中的管理员表)和SqlConnection1。
图3 登录2
不可见控件(图4):
图4不可见控件
当管理员或者密码输入错误时,显示对话框(图5)
当管理员或者密码为空时,显示对话框(图6)
图5. 错误 图6不能为空
代码:
Public Class 登录2
Private Sub 登录2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load
Label 时间.Text = Now
TextBox 管理员.Text = ""
TextBox 密码.Text = ""
End Sub
Private Sub Button 确定_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 确定.Click
If TextBox管理员.Text.Length 0 Or TextBox密码.Text.Length 0 Then
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
DataSet 管理员1.Clear()
SqlDataAdapter 管理员.SelectCommand.CommandText = "select*from 管理员 where 管理员='" & TextBox管理员.Text & "'and 密码='" & TextBox密码.Text & "'"
SqlDataAdapter 管理员.Fill(DataSet管理员1)
If DataSet管理员1. 管理员.Rows.Count = 1 Then
frm4.Show()
Else
MsgBox(" 管理员或密码错误"
, MsgBoxStyle.Critical)
End If
DataSet 管理员1.Clear()
SqlConnection1.Close()
Else
MessageBox.Show(" 管理员和密码不能为空" )
End If
End Sub
Private Sub Button 刷新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 刷新.Click
TextBox 管理员.Text = ""
TextBox 密码.Text = ""
End Sub
(3)选择4(图7)
添加label ,button ,growbox ,combobox ,timer 控件,以及SqlCommand1 ,SqlDataAdapter 进出资料生成的DataSet1进出资料1(连接SQL 中的进出资料表)和SqlConnection1。
图7 选择4
不可见控件:(图8)
连接串口后,填写“机器编号”,选择串口编号,然后刷卡,出现数据。(图9)
图9. 数据
代码:Public Class 选择4
Public Readstr As String
Private Sub Button 确定_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 确定.Click
If TextBox机器编号.Text.Length 0 And ComboBox串口编号.Text.Length 0 Then
Select Case ComboBox串口编号.Text
Case "COM2"
AxMSComm1.CommPort = 2
Case "COM1"
AxMSComm1.CommPort = 1
Case "COM3"
AxMSComm1.CommPort = 3
Case "COM4"
AxMSComm1.CommPort = 4
Case "COM5"
AxMSComm1.CommPort = 5
End Select
AxMSComm1.Settings = "19200,N,8,1"
AxMSComm1.InBufferSize = 1024
AxMSComm1.OutBufferSize = 1024
AxMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary
AxMSComm1.InputLen = 0
AxMSComm1.RThreshold = 1
AxMSComm1.PortOpen = True
Timer2.Enabled = True
Label1.Text = " 请刷卡"
Else
MessageBox.Show(" 您未设置机器编号或串口号码!" )
End If
End Sub
Private Sub Button 返回_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 返回.Click
Timer2.Enabled = False
If AxMSComm1.PortOpen = True Then
AxMSComm1.PortOpen = False
End If
Me .Hide()
frm2.Show()
End Sub
Private Sub 选择4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase .Load
DataSet 进出资料1.Clear()
TextBox 非法用户.Text = 0
TextBox 正常.Text = 0
TextBox 时间.Text = DateTime.Now.ToShortDateString()
Label1.Text = " 串口未设置"
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
TextBox 时间.Text = DateTime.Now.ToLongTimeString()
TextBox 时间.Refresh()
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Dim jihao As Byte
jihao = CByte (TextBox机器编号.Text)
AxMSComm1.OutBufferCount = 0
AxMSComm1.InBufferCount = 0
Dim ByteCodeAct(3) As Byte
ByteCodeAct(1) = &HAA
ByteCodeAct(2) = jihao
ByteCodeAct(3) = &HBB
AxMSComm1.Output = ByteCodeAct
End Sub
Private Function Hex2(ByRef c As String ) As String
Hex2 = Hex(CInt (c))
If Len(Hex2)
Hex2 = "0" & Hex2
End If
End Function
Private Sub AxMSComm1_OnComm(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxMSComm1.OnComm
Dim i As Object
Dim DataRead() As Byte
Dim bytData As Object ' 用来从接受缓冲区读取数据
Readstr = ""
On Error Resume Next
Select Case AxMSComm1.CommEvent
Case MSCommLib.OnCommConstants.comEvReceive
Readstr = ""
bytData = AxMSComm1.Input ' 将接收到的数据放入bytData 数组中
ReDim DataRead(UBound(bytData)) ' 取得接收到数据的最终长度,重新定义DataRead 的 ' 长度
For i = 0 To UBound(bytData)
DataRead(i) = bytData(i)
Readstr = Readstr & Hex2(CStr (DataRead(i)))
Next i
If Readstr.Substring(0, 2) = "FF" And Readstr.Substring(18, 2) = "FF" Then
TextBox1.Text = Readstr.Substring(6, 8)
End If
End Select
'Timer1.Enabled = True '重新打开定时器
End Sub
Private Sub Button 查询_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 查询.Click
Me .Hide()
frm5.Show()
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
If TextBox1.Text.Length = 0 Then
Exit Sub
End If
If SqlConnection2.State = ConnectionState.Closed Then
SqlConnection2.Open()
End If
DataSet 用户1.Clear()
SqlCommand1.Connection = SqlConnection2 'SqlCommand1控件连接数据库
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBox1.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户1)
If DataSet用户1. 用户.Rows.Count = 1 Then
MessageBox.Show(" 门已打开!" )
TextBox 正常.Text = TextBox正常.Text + 1
DataGrid1.Update()
SqlCommand1.CommandText = "update 用户 set 时间组 = '" & TextBox 时间.Text & "' where 卡号='" & TextBox1.Text & "' "
SqlCommand1.ExecuteNonQuery()
SqlDataAdapter 进出资料.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBox1.Text & "'"
SqlDataAdapter 进出资料.Fill(DataSet进出资料1)
DataGrid1.Update()
SqlConnection2.Close() ' 关闭数据库连接
TextBox1.Text = "" ' 清空TextBox1
Else
MessageBox.Show(" 非法用户!" )
TextBox 非法用户.Text = TextBox非法用户.Text + 1
SqlDataAdapter 进出资料.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBox1.Text & "'"
SqlDataAdapter 进出资料.Fill(DataSet进出资料1)
End If
End Sub
End Class
(4)查询结果5(图10)
添加label ,textbox ,button ,datagrid ,mainmenu 控件,以及SqlCommand1 ,SqlDataAdapter 用户生成的DataSet1用户资料1(连接SQL 中的用户表)和SqlConnection1。
图10. 查询结果5
不可见控件(图11):
图11 不可见控件
查询:通过单个或多个信息(ID ,卡号,姓名,性别,部门,联系方式)可查出相对应的用
户资料。
添加:添加数据,由于ID 为主键,因此ID 不能为空。
删除:根据主键ID ,可一并删除该ID 内的其他信息。
修改:对于某一条记录,必须先填写ID ,然后填写其他要修改的数据,点击“修 改“,完成修改。
返回:返回上一级菜单,即登录2。
日志管理:选择查询日志。
总人数统计:选择查询人员出入信息。
帮助:显示帮助页面。
代码:Public Class 查询结果5
Private Sub 查询结果5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load
End Sub
Private Sub menjin()
SqlConnection1.Open()
DataSet 用户资料1.Clear()
SqlCommand1.Connection = SqlConnection1
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where 卡号='" & TextBoxID.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户资料1)
If DataSet用户资料1. 用户.Rows.Count = 1 Then
MessageBox.Show(" 门已打开!" )
SqlCommand1.CommandText = "insert into 日志(卡号, 备注) values('" & TextBoxID.Text & "',' 开门')"
SqlCommand1.ExecuteNonQuery()
Else
MessageBox.Show(" 非法用户!" )
SqlCommand1.CommandText = "insert into 日志(卡号, 备注) values('" & TextBoxID.Text & "',' 非法用户')"
SqlCommand1.ExecuteNonQuery()
End If
SqlConnection1.Close()
End Sub
Private Sub Button 返回_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 返回.Click
选择4.Show()
Me .Hide()
End Sub
Private Sub Button 查询_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 查询.Click
SqlConnection1.Open()
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where 卡号 = '" & TextBox 卡号.Text & "'or 姓名 = '" & TextBox姓名.Text & "' or 性别 = '" & TextBox性别.Text & "'or 部门 = '" & TextBox部门.Text & "'"
SqlConnection1.Close()
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
DataGrid1.Refresh()
TextBoxID.Text = ""
TextBox 姓名.Text = ""
TextBox 性别.Text = ""
TextBox 卡号.Text = ""
TextBox 联系方式.Text = ""
TextBox 部门.Text = ""
End Sub
Private Sub Button 添加_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 添加.Click
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
SqlCommand1.CommandText = "insert into 用户(ID,卡号, 姓名, 性别, 部门, 联系方式) values('" & TextBoxID.Text & "', '" & TextBox卡号.Text & "','" & TextBox姓名.Text & "','" & TextBox性别.Text & "','" & TextBox 部门.Text & "','" & TextBox联系方式.Text & "')"
SqlCommand1.ExecuteNonQuery()
SqlConnection1.Close()
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
TextBoxID.Text = ""
TextBox 姓名.Text = ""
TextBox 性别.Text = ""
TextBox 部门.Text = ""
TextBox 联系方式.Text = ""
End Sub
Private Sub Button 删除_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 删除.Click
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
SqlCommand1.CommandText = "delete from 用户 where ID = '" & TextBoxID.Text & "'
SqlCommand1.ExecuteNonQuery()
SqlConnection1.Close()
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
DataGrid1.Refresh()
End Sub
Private Sub Button 修改_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button 修改.Click
If TextBoxID.Text.Length 0 Then
SqlConnection1.Open()
SqlCommand1.Connection = SqlConnection1
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where ID= '" & TextBoxID.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户资料1)
If DataSet用户资料1. 用户.Rows.Count 0 Then
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 姓名='" & TextBox 姓名.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 卡号='" & TextBox 卡号.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 性别='" & TextBox 性别.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 部门='" & TextBox 部门.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
If TextBox姓名.Text.Length 0 Then
SqlCommand1.CommandText = "update 用户 set 联系方式='" & TextBox 联系方式.Text & "'where ID='" & TextBoxID.Text & "'"
SqlCommand1.ExecuteNonQuery()
End If
DataSet 用户资料1.Clear()
SqlDataAdapter 用户.SelectCommand.CommandText = "select * from 用户 where ID='" & TextBoxID.Text & "'"
SqlDataAdapter 用户.Fill(DataSet用户资料1)
DataGrid1.Update()
DataGrid1.Refresh()
SqlConnection1.Close()
End If
Else
MsgBox("ID 不能为空!" , MsgBoxStyle.Critical)
End If
TextBoxID.Text = ""
TextBox 姓名.Text = ""
TextBox 性别.Text = ""
TextBox 部门.Text = ""
TextBox 联系方式.Text = ""
End Sub
Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem 帮助.Click
Me .Hide()
frm0.Show()
End Sub
End Class
(7)帮助0(图12)
添加label ,button 控件。
图12 帮助0
五.问题及解决方法
在做的过程中,我碰到了很多问题,因为对于数据库本身的操作也不是很懂外加VB 编程也可以说是初次接触,所以开始有些吃力。比如说:我想要加将进出资料显示出来,思路是有的,可是代码不知道怎么写,在经过询问老师以及和同学的共同探讨和检查下,终于实现了相关功能。想要加实时时间,还是由于对于代码的不了解,在老师给别的同学改的基础上自己经过仔细推敲和不断地调试,也终于成功了。
六.实验小结:
通过这次门禁管理的课程设计我了解和基本掌握了VB.NET 、SQL 数据库以及串口操作的基本原理和编程方法,并学会在VS 中连接数据库以及配置串口。在语句的编写方面还显得有些不熟练,容易犯一些低级的错误,这是今后要改正的。另外在设计中我碰到了各种各样的问题,例如控件找不到,无法正确的修改数据, 串口连接问题等等,在同学和老师的帮助下都成功解决了,这也为毕业设计的软件编程方面打下了基础。
软件的使用,首先要建立属于自己的数据库,然后在VS2008的背景下建立项目,加入自己想要实现的功能模块,并编写相关代码,在完成以上的基础上,然后一步一步的调试,直到成功的实现功能。