数据库技术及应用课程设计项目设计报告说明书之校园一卡通查询转帐系统.docx
《数据库技术及应用课程设计项目设计报告说明书之校园一卡通查询转帐系统.docx》由会员分享,可在线阅读,更多相关《数据库技术及应用课程设计项目设计报告说明书之校园一卡通查询转帐系统.docx(52页珍藏版)》请在冰豆网上搜索。
数据库技术及应用课程设计项目设计报告说明书之校园一卡通查询转帐系统
同济大学
《数据库技术及应用》
项目设计报告
项目设计报告题目:
校园一卡通查询转帐系统
小组成员姓名:
许梦姬、冯圣洁、支慧、杨莹吉、钟毅婉
班级:
数据库
(一)班
姓名:
许梦姬学号:
042392
年级:
大二专业:
物流管理
指导教师:
袁科萍
日期:
2006年06月11日
一、
项目设计的背景、目的和意义
我校校园一卡通自2005年9月新学期开始正式启用以来,已经使用将近一年了。
在这一年的使用过程中,我们发现了校园一卡通使用上的两个不足之处:
1)校园一卡通的自助查询机(触摸屏式)和转帐机分离,均设立在食堂内,往往经常人满为患,需要排队等候查询和转帐,因此会造成对时间的浪费。
而且都没有挂失和解挂功能,需要到专门部门进行操作。
2)网上的校园卡网站的功能不够完全,只有基本的查询功能,不能实施转帐,而且知晓率不高。
我们此次项目正是针对这些问题而设计的,旨在运用《数据库》所学的知识以及VB.NET平台程序设计基础,设计出一个简单、易用、功能完善的自助在线一卡通帐户管理系统。
二、项目主要功能描述
在用户以正确的用户名和密码登陆后,可进入“欢迎”页面,有四大功能可供选择:
◆密码修改:
提供修改一卡通密码的服务。
◆挂失和解挂:
提供挂失和解挂的服务。
◆消费明细:
此功能中有3个分类功能。
✧卡内余额查询
✧历史消费充值记录的自定义日期查询
✧年度历史消费充值记录的统计与描绘
◆转帐充值:
提供对一卡通的充值服务,从银行卡转帐。
三、成员分工:
◆许梦姬:
组长,主要负责总的策划,程序总调试,部分板块程序的编写。
◆冯圣洁:
主要负责原始数据的录入,以及在原始数据上建立存储过程和触发器。
参与部分板块的程序编写。
◆杨莹吉:
主要负责“消费明细”板块中的“余额查询”程、“”明细查询“等的编写,参与其他板块程序的编写。
◆支慧:
主要负责“银行卡转帐”板块的程序编写,参与“消费统计图”等板块程序的编写。
◆钟毅婉:
主要负责程序总的设计,参与“欢迎”等部分板块的程序编写。
四、数据库设计
原始数据设计:
◆表一:
基本信息
设计:
内容:
◆表二:
设计:
帐号
内容:
数据说明:
状态中“0”表示卡处于活动状态,“1“表示卡处于挂失状态。
◆表三:
设计:
消费信息
内容:
◆表四:
银行卡帐号
设计:
内容:
存储过程、触发器设计:
在表消费信息上的触发器
createtriggerbalcontrolon消费信息
forinsert
as
declare@cashint,
@balint,
@markchar,
@accchar(10),
@stateint
select@bal=a.余额,@state=a.状态from帐号a
where@acc=帐号
begin
ifnotexists(select*from帐号
where帐号=(select帐号frominserted))
begin
raiserror('帐号不存在!
',1,1)
rollbacktransaction
end
else
begin
if@state=1
begin
raiserror('已挂失!
',1,1)
rollbacktransaction
end
else
begin
if@mark='存款'
begin
print'已存入'
update帐号set@bal=@bal+@cash
where@bal=(select存取金额frominserted)and@cash=(select[[存/取]]款]frominserted)
end
if@mark='取款'
begin
update帐号set@bal=@bal-@cash
where@bal=(select存取金额frominserted)and@cash=(select[[存/取]]款]frominserted)
if@bal<0
begin
raiserror('不能透支!
',1,1)
rollbacktransaction
end
end
end
end
end
在查询分析器输入命令以验证
对不存在的帐号禁止操作
命令:
结果:
对已经挂失的帐号禁止操作
命令:
结果:
五、窗口设计
此项目共有六个窗口:
◆Form1——登陆:
供输入帐号、密码和验证码,以和数据库中的“基本信息”表中的信息进行比对,以确定能否进入其余界面。
◆Form2——欢迎:
供选择不同的功能进入。
◆Form3——修改密码:
提供密码修改,需要输入原密码,以及新密码两次输入验证。
◆Form4——挂失解挂:
告知当前卡的状态,以进行相应的挂失或解挂操作。
◆Form5——消费记录:
查询与消费记录相关的内容。
✧余额查询:
提供余额查询服务。
✧消费明细:
根据选择的日期,列出历史消费和充值记录。
✧消费统计图:
根据选择的年份,画出消费和充值的直方图。
◆Form6——充值:
输入银行卡卡号、密码,以及需要充值的金额。
六、功能设计的程序与标注
模块中定义全局变量的代码
ModuleModule1
Publicf1=NewForm1
Publicf2=NewForm2
Publicf3=NewForm3
Publicf4=NewForm4
Publicf5=NewForm5
Publicf6=NewForm6
PublicsnumAsString'用户输入的帐号
PubliccodeAsString'用户输入的密码
PublicstateAsInteger'用户卡的状态
PublicsnameAsString'用户的姓名
EndModule
◆Form1——登陆:
'SqlConnection1
'
Me.SqlConnection1.ConnectionString="workstationid=""SNAIL-6ZY0NE5GF"";packetsize=4096;integratedsecurity=SSPI;datas"&_
"ource=""SNAIL-6ZY0NE5GF"";persistsecurityinfo=True;initialcatalog=fanka"
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
Randomize()
Label4.Text=Int(Rnd()*9000+1000)
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
TextBox1.Focus()
'窗口1载入时,产生随机的4位验证码,并将原来各个输入框置空,定位于帐号输入
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
Randomize()
Label4.Text=Int(Rnd()*9000+1000)
TextBox1.Focus()
'按“取消”按钮后,重新产生随机的4位验证码,并将原来各个输入框置空,定位于帐号输入
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimcheckcodeAsString
snum=TextBox1.Text
code=TextBox2.Text
'打开连接,到数据库读取该帐号的密码
Me.SqlConnection1.Open()
DimmySelectQuery1AsString="select密码from基本信息where帐号='"+TextBox1.Text+"'"
DimmyCommand1AsNew
DimmyReader1As
WhilemyReader1.Read()
checkcode=myReader1.GetString(0)
EndWhile
myReader1.Close()
'到数据库读取该帐号的姓名
DimmySelectQuery2AsString="select姓名from基本信息where帐号='"+TextBox1.Text+"'"
DimmyCommand2AsNew
DimmyReader2AstaReader=myCommand2.ExecuteReader()
WhilemyReader2.Read()
sname=myReader2.GetString(0)
EndWhile
myReader2.Close()
Me.SqlConnection1.Close()
'连接关闭
Ifcheckcode=""AndTextBox1.Text<>""Then
MsgBox("您输入的帐号不存在!
")
Randomize()
Label4.Text=Int(Rnd()*9000+1000)
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
TextBox1.Focus()'帐号不存在时
Else
IfTextBox1.Text=""Then
MsgBox("请输入学号!
")'未输入帐号时
Else
SelectCaseTextBox2.Text
Case""
MsgBox("密码不能为空,请输入!
")'密码为空时
Casecheckcode
SelectCaseTextBox3.Text
Case""
MsgBox("请输入验证码!
")'验证码为空时
CaseLabel4.Text
Me.Hide()'密码、验证码都正确时,进入下一界面
f2.show()
CaseElse
MsgBox("验证码输入错误!
")'验证码错误时
TextBox3.Text=""
Label4.Text=Int(Rnd()*9000+1000)
EndSelect
CaseElse
MsgBox("密码错误!
请重新输入!
")'密码错时
TextBox2.Text=""
TextBox3.Text=""
Label4.Text=Int(Rnd()*9000+1000)
EndSelect
EndIf
EndIf
EndSub
PrivateSubTextBox1_TextChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTextBox1.TextChanged
snum=TextBox1.Text
IfNotIsNumeric(snum)Andsnum<>""Then
MsgBox("输入错误:
学号均为数字,请输入数字")'控制帐号输入为数字
EndIf
EndSub
PrivateSubTextBox2_TextChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTextBox2.TextChanged
code=TextBox2.Text
EndSub
PrivateSubForm1_Activated(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.Activated
Randomize()
Label4.Text=Int(Rnd()*9000+1000)
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
TextBox1.Focus()
snum=0
sname=""
code=""
'窗口再次活跃后,重新产生随机的4位验证码,并将原来各个输入框置空,定位于帐号输入,所有变量也置空,等待下一位使用者
EndSub
◆Form2——欢迎:
PrivateSubMenuItem1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMenuItem1.Click
Me.Hide()
f1.Show()
EndSub
PrivateSubButton5_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)
Me.Hide()
f1.Show()
EndSub
PrivateSubForm2_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
Timer1.Enabled=True
Timer2.Enabled=True
Label3.Text=Now
Label1.Text=Trim(sname)&"同学,欢迎进入校园一卡通查询系统"
'利用全局变量sname,在屏幕上打出使用者的姓名
EndSub
PrivateSubTimer1_Tick(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesTimer1.Tick
IfLabel1.Left=-Label1.WidthThen
Label1.Left=f2.Width
Else
Label1.Left=Label1.Left-1
EndIf'字幕滚动
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
Me.Hide()
f4.show()
EndSub
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton3.Click
Me.Hide()
f5.show()
EndSub
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click
Me.Hide()
f6.show()
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
Me.Hide()
f3.show()
EndSub
PrivateSubTimer2_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer2.Tick
Label3.Text=Now'显示时间
EndSub
PrivateSubTimer3_Tick(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesTimer3.Tick
StaticiAsInteger
i=i+1
Ifi=4Then
i=0
EndIf
'图片的滚动播放
EndSub
PrivateSubForm2_Activated(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.Activated
Timer1.Enabled=True、‘窗口再次活动时更新数据
Timer2.Enabled=True
Label3.Text=Now
Label1.Text=Trim(sname)&"同学,欢迎进入校园一卡通查询系统"
EndSub
◆Form3——修改密码:
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
TextBox1.Focus()'按“取消”后,全部置空
EndSub
PrivateSubForm3_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
Button1.Enabled=True
Button2.Enabled=True'窗口载入时,按钮变为可操作
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimocAsString,nc1AsString,nc2AsString
oc=TextBox1.Text
nc1=TextBox2.Text
nc2=TextBox3.Text
Ifoc<>codeThen
MsgBox("原始密码错误!
")'原始密码输入错误,重新输入
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
TextBox1.Focus()
Else
Ifnc2<>nc1Then
MsgBox("输入错误:
两次输入的新密码不一致!
")'匹配两次输入的新密码的一致性
TextBox2.Text=""
TextBox3.Text=""
TextBox2.Focus()
Else
IfTextBox2.Text=""AndTextBox3.Text=""Then
MsgBox("不设置密码存在安全隐患,请设置!
")'阻止不设置新密码的情况
TextBox2.Focus()
Else
Try
DimupdatestrAsString="update基本信息set密码='"&TextBox3.Text&"'where帐号='"&snum&"'"
DimmyCommand3AsNewClient.SqlCommand(updatestr,SqlConnection1)
Me.SqlConnection1.Open()
myCommand3.ExecuteNonQuery()
MsgBox("密码修改成功!
")'密码修改成功后提示,且按钮变为不可操作,防止连续多次操作
code=TextBox3.Text
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
Button1.Enabled=False
Button2.Enabled=False
CatchexAsException
MsgBox(ex.Message)
Finally
Me.SqlConnection1.Close()
EndTry
EndIf
EndIf
EndIf
EndSub
PrivateSubMenuItem1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMenuItem1.Click
Me.Hide()
f2.show()
Button1.Enabled=True
Button2.Enabled=True
EndSub
PrivateSubForm3_Activated(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.Activated
TextBox1.Text=""
TextBox2.Text=""
TextBox3.Text=""
Button1.Enabled=True
Button2.Enabled=True'窗口再次活动时,按钮可操作,置空
EndSub
◆Form4——挂失解挂:
PrivateSubMenuItem1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMenuItem1.Click