开发涉及的技术点列表
本卷中,完成以上任务所涉及的技术点如下:
1、超高频接口的使用;
2、数据库接口的使用;
3、线程的使用。
附:请先将以下几个类文件加入到项目中
然后在项目中引用命名空间“Tools”和“System.Threading”:
using System.Threading;
using Tools;
发卡管理的功能说明
1、实例化类
private VehicleInfo vehicleInfo = new VehicleInfo();
private AccessRecords accessRecords = new AccessRecords();
2、声明线程
private Thread thread_UHF;
3、窗体启动事件FrmCardManage_Load
(a)、设置不捕获对错误线程的调用
Control.CheckForIllegalCrossThreadCalls = false;
(b)、实例化线程
thread_UHF = new Thread(new ThreadStart(ReadCard));
4、“登记”按钮事件btnRegister_Click
(a)、调用CheckText方法检测窗体中是否有ComboBox控件、TextBox控件的Text属性为空
if (CheckText())
(b)、如果窗体中ComboBox控件、TextBox控件的Text属性都不为空,则对vehicleInfo的属性赋值
vehicleInfo.OwnerCardID = thisNaNbCardID.Text.Trim();
vehicleInfo.OwnerName = this.txtOwnerName.Text.Trim();
vehicleInfo.OwnerSex = thisNaNbOwnerSex.Text.Trim();
vehicleInfo.OwnerPhone = this.txtOwnerPhone.Text.Trim();
vehicleInfo.IdentityCardID = this.txtIdentityCardID.Text.Trim();
vehicleInfo.LicenseNumber = this.txtLicenseNumber.Text.Trim();
vehicleInfo.VehicleModels = this.txtVehicleModels.Text.Trim();
vehicleInfo.VehicleColor = this.txtVehicleColor.Text.Trim();
vehicleInfo.VehicleType = thisNaNbVehicleType.Text.Trim();
(c)、调用vehicleInfo的GetDataTable方法查询寻到的卡是否已经登记过了
if (vehicleInfo.GetDataTable(string.Format("select * from VehicleInfo where OwnerCardID='{0}'", cmbCardID.Text.Trim())).Rows.Count > 0)
如果条件判断结果为true,则此卡已登记过了,反之,则没有。
(d)、调用vehicleInfo的Insert方法登记信息
if (vehicleInfo.Insert() > 0)
如果条件判断结果为true,则登记成功,反之,则登记失败。
5、“注销”按钮事件btnLogout_Click
(a)、分别对vehicleInfo和accessRecords的OwnerCardID属性赋值
vehicleInfo.OwnerCardID = thisNaNbCardID.Text.Trim();
accessRecords.OwnerCardID = thisNaNbCardID.Text.Trim();
(b)、调用vehicleInfo的GetDataTable方法查询寻到的卡是否已经登记过了
if (vehicleInfo.GetDataTable(string.Format("select * from VehicleInfo where OwnerCardID='{0}'", cmbCardID.Text.Trim())).Rows.Count > 0)
如果条件判断结果为true,则此卡已登记过了,反之,则没有。
(c)、如果此卡已登记,则调用vehicleInfo和accessRecords的Delete方法
accessRecords.Delete();
vehicleInfo.Delete();
6、窗体关闭事件FrmCardManage_FormClosing
(a)、停止线程
thread_UHF.Abort();
7、校验文本方法CheckText
校验窗体中是否有ComboBox控件、TextBox控件的Text属性为空,如果有控件的Text属性为空,则返回false,反之,则返回true。
8、读卡方法ReadCard
(a)、调用寻卡方法
ClassAll.reader.InventorySingle
(b)、调用ByteArrayToString方法将标签号转换成十六进制的字符串
string strTag = ByteArrayToString(Tag);
9、添加卡号到cmbCardID中方法AddTag
10、实现字节数组转换为十六进制的字符串方法ByteArrayToString
监控统计的功能说明
1、声明线程
private Thread thread_UHF;
2、窗体启动事件FrmMonitoringStatistics_Load
(a)、设置不捕获对错误线程的调用
Control.CheckForIllegalCrossThreadCalls = false;
3、“开始监控”按钮事件btnStartMonitoring_Click
(a)、实例化线程
thread_UHF = new Thread(new ThreadStart(ReadCard));
4、“停止监控”按钮事件btnStopMonitoring_Click
(a)、停止线程
thread_UHF.Abort();
5、窗体关闭事件FrmMonitoringStatistics_FormClosing
(a)、停止线程
thread_UHF.Abort();
6、读卡方法ReadCard
(a)、调用寻卡方法
ClassAll.reader.InventorySingle
(b)、调用ByteArrayToString方法将标签号转换成十六进制的字符串
string strTag = ByteArrayToString(Tag);
(c)、实例化类
VehicleInfo vehicleInfo = new VehicleInfo(strTag);
(d)、获取vehicleInfo的属性值
txtOwnerName.Text = vehicleInfo.OwnerName;
txtOwnerSex.Text = vehicleInfo.OwnerSex;
txtOwnerPhone.Text = vehicleInfo.OwnerPhone;
txtIdentityCardID.Text = vehicleInfo.IdentityCardID;
txtLicenseNumber.Text = vehicleInfo.LicenseNumber;
txtVehicleModels.Text = vehicleInfo.VehicleModels;
txtVehicleColor.Text = vehicleInfo.VehicleColor;
txtVehicleType.Text = vehicleInfo.VehicleType;
(e)、实例化类
AccessRecords accessRecords = new AccessRecords();
(f)、对accessRecords的属性赋值
accessRecords.OwnerCardID = strTag;
accessRecords.Date = DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day;
(g)、调用accessRecords的GetDataTable方法查询寻到的卡的通行记录
dt = accessRecords.GetDataTable(string.Format("select * from AccessRecords where OwnerCardID = '{0}' and Date = '{1}'", strTag, accessRecords.Date));
7、添加卡号到cmbCardID中方法AddTag
8、实现字节数组转换为十六进制的字符串方法ByteArrayToString
信息查询的功能说明
1、实例化类
private VehicleInfo vehicleInfo = new VehicleInfo();
2、“查询”按钮事件btnQuery_Click
(a)、调用vehicleInfo的GetDataTable方法查询信息
dgvVehicleInfo.DataSource = vehicleInfo.GetDataTable(sqlQuery);

