在机房收费系统中,B层中做了好多的判断,每个判断都会返回一个结果作为信号给U层,如果用已有的Boolean值得话,就只有True 或 false 两种结果,然后我就用了返回字符串的方法,如下代码:
Public Function Register(newCard As ManagerE.CardEntity, newStu As ManagerE.StudentEntity) As String
Dim MyCIFD As New ManagerD.CardInfoDAL
Dim MySIFD As New ManagerD.StuInfoDAL
If IsCardExist(newCard.cardNo) = True Then '判断射频卡是否已经注册
Register = "CardExsit"
Else
If IsStuExist(newStu.studentNo) Then '判断持卡学生是否已经注册
MyCIFD.AddCardInfo(newCard)
Register = "StuExist"
Else
MyCIFD.AddCardInfo(newCard) '讲符合条件的注册添加到数据库
MySIFD.AddStuInfo(newStu)
Register = "Succeed"
End If
End If
End Function
但是在判断得到返回结果时,必须准确写出字符串的每一个字符才可以,用起来操作性比较差。看到其他人的博客知道,好多人都是用的抛异常的方法反馈给U层信息的。这种思路,虽然能实现预定的效果,但是跟我的源代码相差甚远,如果用枚举类型的话,因为跟Boolean的效果差不多,应该符合我的思路,接下来去实践一下,代码还差点,马上呈现...
首先在构建一个类盛放这种枚举类型
Public Class DataEntity
Enum status
CardExist
StudentExist
Succeed
End Enum
End Class
之后B 层的登录方法修改为
Public Function Register(newCard As ManagerE.CardEntity, newStu As ManagerE.StudentEntity) As ManagerE.DataEntity.status
Dim MyCIFD As New ManagerD.CardInfoDAL
Dim MySIFD As New ManagerD.StuInfoDAL
If IsCardExist(newCard.cardNo) = True Then '判断射频卡是否已经注册
Register = ManagerE.DataEntity.status.CardExist
Else
If IsStuExist(newStu.studentNo) Then '判断持卡学生是否已经注册
MyCIFD.AddCardInfo(newCard)
Register = ManagerE.DataEntity.status.StudentExist
Else
MySIFD.AddStuInfo(newStu)
MyCIFD.AddCardInfo(newCard) '讲符合条件的注册添加到数据库
Register = ManagerE.DataEntity.status.Succeed
End If
End If
End Function
返回到U层的效果为
Select Case MyRegisger.Register(newCard, newStu) '判断卡的注册状态
Case ManagerE.DataEntity.status.CardExist
MessageBox.Show("该卡已经被注册,不能再次注册!")
Case ManagerE.DataEntity.status.StudentExist
MessageBox.Show("该卡注册成功,但发现持卡人注册已注册过其他卡!")
Case ManagerE.DataEntity.status.Succeed
MessageBox.Show("该卡注册成功,可上机消费!")
End Select
这样就不怕敲代码时出错了,在输入返回值时从智能提醒的下拉菜单中直接选取就可以了!