帮忙把这个VB算法转化成C语言算法,有重谢。
4.1欢迎界面实现 欢迎界面在欢迎界面我们可以自由的选择两种语言,分别为我们最常用的中文和英语,在这里主模块中定义了一个非常重要的INT整型变量i,通过i的值来决定所选择的服务。任意点击一种服务都将进入登陆界面。
Private Sub Command1_Click()
i = 2 当点中文按钮时,i的值就被赋为了2,在后面的操作中,i的值就将始终为2,用以区别所选语言服务
Unload Form1
Form2.Show
End Sub
Private Sub Command2_Click()
i = 1 点ENGLISH按钮时 i的值赋1
Unload Form1
Form2.Show
End Sub
4.2登陆的实现
在登陆界面有两种语言可以为用户服务,一是中文,而是英文。选择两种语言的功能和界面背景实际上都是完全一致的,只是语言文字。
这里的两个界面并非通过两个窗体单独实现而是共用一个窗体,通过判断i的值,对label中的CAPTION进行相应的中文和英文赋值。这里把默认的语言选择为中文直接在窗体编辑菜单中对CAPTION进行了相应赋值。如果为英文则需执行下面的语句,此后的每个界面语言确定及实现都是通过采取这个方法
Private Sub Form_Load()
If i = 1 Then //判断i的值 如果为1则进行英文赋值
Label1.Caption = "Do you want to continue?Please choose!"
Command1.Caption = "other service"
Command2.Caption = "Cancel"
End If
End Sub
在窗体中我们首先来判断用户输入的卡号和密码是否符合我们的规定。卡号为8位密码为6位
Private Sub Command1_Click() //当我们点下确认按钮时
If i = 2 Then
If Len(Text1.Text) <> 8 Or Len(Text2.Text) <> 6 Then // 比较卡号是否为8位及密码是否为6位
Form3.Show
Form3.Label1.Caption = "没有正确输入卡号或密码"
Text1.Text = ""
Text2.Text = ""
Else
Call Checkuser //这里是调用主模块中的身份验证函数,在后面的窗体实现中都是通过
CALL语句来直接调用相应函数的
End If
End If //以下为用户选择英语的代码,和选择中文时是一样的,在后面的介绍中将不在引用英语的代码
If i = 1 Then
If Len(Text1.Text) <> 8 Or Len(Text2.Text) <> 6 Then
Form3.Show
Form3.Label1.Caption = "Please Input Correct Cardnumber Or Password"
Text1.Text = ""
Text2.Text = ""
Else
Call Checkuser
End If
End If
End Sub
在主模块MODEL1中身份验证函数代码为
Public Sub Checkuser() 定义Checkuser函数
Dim strr As String
Set CON = New ADODB.Connection
strr = "Provider=SQLOLEDB.1;Password= ;Persist Security Info=True;User ID=sa;Initial Catalog=user;Data Source=XQQ\ATM"// 这段语句采用了动态连接数据库的方法与数据库USER进行连接,采用的是SQL OLEDB应用接口。
CON.Open strr
u = Form2.Text1.Text 把卡号赋给u
str = "select 密码 from 用户信息 where 卡号='" & u & "'" //SQL数据库查询语句,根据卡号把所查询的密码数据放入str中
Set RS = New ADODB.Recordset //设置RS为新的Recordset对象
RS.Open str, CON, adOpenDynamic, adLockPessimistic
If RS.EOF = True Then //当前记录指针无效,说明不存在这个用户
If i = 2 Then
Form3.Show
Form3.Label1.Caption = " 没有此用户,请检查并重新输入!"
u = "" // u重新设置为空
接下来就是比较从所输卡号中取出的密码与用户输入的密码进行比较
If Trim(RS.Fields(0)) = Trim(Form2.Text2.Text) Then '//检验密码是否相同
Form4.Show //密码相同转入服务界面
RS.Close
Unload Form2
在窗体中直接通过程序代码调用在模块中的Checkuser函数即可,后面的界面都是采用这种方法,都不再进行仔细说明。
4.3主界面实现
服务界面在主界面中有5个服务按钮 设置了一个整型变量j,在点击各种服务的同时,J也被赋予了不同的数值,用以后面记录用户操作信息,写入数据库。
Private Sub Command1_Click()
If Option1(0).Value = True Then
j = 1
Unload Form4
Form5.Show
Else
If Option1(1).Value = True Then
j = 2
Unload Form4
Form6.Show
Else
If Option1(2).Value = True Then
j = 3
Unload Form4
Form7.Show
Else
If Option1(4).Value = True Then
J = 5
Unload Form4
Form12.Show
Else
If Option1(3).Value = True Then
j = 4
Unload Form4
Call Query
Form8.Show
Form8.Label2.Caption = u
4.4查询余额功能的实现
查询功能的实现相对来说就非常简单了,直接连接数据库,搜索到相应的数据后输出到文本框中即可。
在主模块中的查询函数:
Public Sub Query()
Dim str2 As String
str2 = "select * from 用户信息 where 卡号='" & u & "'"
Set RS = New ADODB.Recordset
RS.Open str2, CON, adOpenDynamic, adLockPessimistic
Form8.Label5.Caption = RS.Fields("金额")
4.5取款功能的实现
取款函数相对于其他函数就相对复杂一点,因为有很多情况需要判断,列如只能取50与100的整数,就需要对50取模,还需要判断所取金额是否大于卡上的余额,余额不足那也是没法成功取款的。用户取了一定数量的钱后还需要把新的数据重新写入数据库。
Public Public Sub TakeMoney()
Dim str1 As String
str1 = "select * from 用户信息 where 卡号='" & u & "'"
Set RS = New ADODB.Recordset
RS.Open str1, CON, adOpenDynamic, adLockPessimistic 前面也是对数据库进行连接,并把用户信息根据所输卡号输入到记录集中。
If i = 2 Then //在中文服务下
m = Form5.Text1.Text
If m = "" Then //m为空,说明用户没有输入金额
k = 0 //这里的K为全局变量 ,在后面数据库对用户操作表进行写入时非常有用,k的值标识操作的成功与否,k=0操作失败,k=1则为成功
Form3.Show
Form3.Label1.Caption = "请您正确输入金额!"
Exit Sub
End If
If m Mod 50 <> 0 Then // 所输金额不能被50整除
k = 0
Form3.Show
Form3.Label1.Caption = "请您正确输入金额!"
Form5.Text1.Text = ""
Else
If RS.Fields("金额") < CCur(m) Then //用户卡中金额小与输入的金额
k = 0
Form3.Show
Form3.Label1.Caption = "金额不足!"
Form5.Text1.Text = ""
Exit Sub
Else
k = 1 //排除所有不正确情况,即输入正确,则对k赋值为1 标识操作成功
Money = RS.Fields("金额")
RS.Fields("金额") = (Money - Form5.Text1.Text) // 表中用户金额减去所取金额
RS.Update // 将新的数据写入所取位置
RS.Close
Call InsertDatabase '//把操作插入用户操作表,这个函数将在后面介绍其功能
Unload Form5
Form9.Show
Form9.Label1.Caption = "交易成功,谢谢您的使用,请拿好您的钞票!"
Form11.Show
Form9.SetFocus
End If
End If在密码修改界面中需要用户两次输入的密码相一致,否则不能进行修改,密码两次输入正确后,程序将新的密码写入原来位置。
PUBLIC SUB CHANGEPWD()
IF I = 2 THEN
IF LEN(FORM6.TEXT1.TEXT) <> 6 OR LEN(FORM6.TEXT1.TEXT) <> 6 THEN//比较两次密码长度是否符合6位的要求
K = 0
FORM3.SHOW
FORM3.LABEL1.CAPTION = "请正确输入6位密码"
FORM6.TEXT1.TEXT = ""
FORM6.TEXT2.TEXT = ""
Call InsertDatabase
ELSE
IF FORM6.TEXT1.TEXT <> FORM6.TEXT2.TEXT THEN//比较两次输入是否一致
K = 0
FORM3.SHOW
FORM3.LABEL1.CAPTION = "您两次输入的密码不一致,请检查!"
FORM6.TEXT1.TEXT = ""
FORM6.TEXT2.TEXT = ""
Call InsertDatabase
ELSE
STR = "UPDATE 用户信息 SET [密码]='" & FORM6.TEXT1.TEXT & "' WHERE 卡号='" & U & "'"
SET RS = NEW ADODB.RECORDSET
RS.OPEN STR, CON, ADOPENDYNAMIC, ADLOCKPESSIMISTIC
K = 1
Call InsertDatabase
IF I = 2 THEN
FORM9.SHOW
FORM9.LABEL1.CAPTION = "密码修改成功,请记好您的新密码!"
ELSE
FORM9.SHOW
FORM9.LABEL1.CAPTION = "PASSWORD BE CHANGED SUCCESSFULLY"
END IF
UNLOAD FORM6
FORM11.SHOW
FORM9.SETFOCUS
END IF
END IF
4.6 查询交易明细功能的实现
在查询交易明细界面中,
到了RECORDSET记录集EOF属性,通过判断BOF的真值来判断是否取到了记录集合,并把所需要的数据逐条到文本框中,在TEXT文本框中的MULTILINE属性要设为TRUE,使输出的文字能够自动换行
Public Sub Query2()
Dim str7 As String
Set RS = New ADODB.Recordset
str7 = "select 时间,操作,取款金额,转帐金额,转帐卡号,是否成功 from 用户操作表 where 卡号='" & u & "'" //只搜索需要的单元
RS.Open str7, CON, adOpenKeyset, adLockReadOnly //这里把对数据的读取设为只读方式
If Not RS.EOF Then //如果RS.EOF值为假则说明得到了所需要的记录集合,为真则当前记录指针无效
Form12.Text1.Text = RS.GetString //用RECORDSET对象的GetString方法来得到记录集中的字符串,并输出在文本框中
End If
End Sub
4.7其余界面及函数
在完成了所选择的服务后都会出现一个继续服务的界面,用以选择退出还是返回到服务选择界面继续进行其他服务。
继续服务界面
在很多函数的运用中都要调用INSERTDATABASE函数,用以对数据库中用户操作信息表进行用户操作信息的写入,包括操作类型,操作时间,操作金额,转帐卡号,转帐金额,以及是否成功等等。这里就介绍其中对取款操作写入的代码即可,其余的都是一样的
Public Sub InsertDatabase()
str = "select * from 用户操作表"
Set RS = New ADODB.Recordset
RS.Open str, CON, adOpenDynamic, adLockPessimistic
If j = 1 And k = 1 Then //这里j就是前面所选择的服务的标识
RS.AddNew
RS.Fields("卡号") = u
RS.Fields("操作") = "取款"
RS.Fields("时间") = Now
RS.Fields("取款金额") = Val(Form5.Text1.Text)
RS.Fields("是否成功") = "是"
RS.Update
RS.Close
ElseIf j = 1 And k = 0 Then
RS.AddNew
RS.Fields("卡号") = u
RS.Fields("操作") = "取款"
RS.Fields("时间") = Now
RS.Fields("取款金额") = Val(Form5.Text1.Text)
RS.Fields("是否成功") = "否"
RS.Update
RS.Close