数据库课程设计.docx
《数据库课程设计.docx》由会员分享,可在线阅读,更多相关《数据库课程设计.docx(40页珍藏版)》请在冰豆网上搜索。
数据库课程设计
数据库系统课程设计报告
题目:
虚拟银行系统
课程代号:
0688116
课程名称:
数据库系统课程设计
学号:
姓名:
班级:
指导教师:
完成日期:
第一章引言
1.1ATM虚拟银行系统概述
1.1.1系统概述
随着时代的发展、科技的进步,现如今人们可以足不出户,通过网络来进行消费,并且查询自己的银行信息。
所以,这次课程设计题目是:
ATM虚拟银行系统,但是由于时间紧迫,另外作者本身能力也十分有限,业务知识接触的也少,所以只能完成该系统中的少量功能,还有很多有待扩充及完善的地方,有不妥善的地方还请老师指点。
这次课程设计只是达到训练、牢固知识的目的,熟悉数据库的前台和后台编程、sql语句的使用、C#的图形界面编程及其控件的使用、如何访问数据库等方面的知识,所以实现的功能也很有限,待以后随着知识的积累,慢慢地扩充完善该系统。
本系统采用了可视化的集成开发环境VisualStudio2010编辑用户操作界面、以SQLSever2008为后台数据库,该系统能够完成用户帐号的建立、用户存取款、用户查询、用户转账、用户销户等基本功能。
1.1.2开发应用系统的任务、意义及目的
ATM虚拟银行系统:
该系统要求建立的表并不是很多,完成的功能也相对有限,但其中各个表之间的联系很紧密,但由于涉及到金钱问题,所以细节、逻辑方面的要求就要十分仔细。
所以完成这个题目,能更好的训练数据库设计和C#.net的编程能力以及逻辑细节的思考。
1.1.3应用系统的软硬件运行环境
硬件环境:
硬件要求不高,近1~2年内的电脑均可运行。
软件要求:
操作系统windowsXP及更高版本、SQLserver2008及更高版本、VisualStudio2010及更高版本。
第二章系统分析与设计
2.1系统分析
2.1.1系统需求分析
对于用户功能,能够新建用户,进入界面后,可以更改用户密码、注销登录;对于业务功能,用户能够查询账户信息、查询存取记录、查询转帐记录、存取款操作、转账操作、销户操作。
系统数据流图
以客户信息为例,其数据词典包括数据项、数据结构、数据流、数据存储和数据处理等五个部分:
数据项:
数据项表
数据项名
数据项含义
数据类型
长度
lno
帐号
Varchar
20
lname
开户人姓名
Varhcar
lpassword
登录密码
Char
6
lID
身份证号
lsex
性别
2
lbalance
帐户余额
Float
8
ldate
开户日期
Datetime
以上的数据项构成了用户信息表的数据结构(名称:
user_logon),用户登录时需要出示其账号和密码,与数据库中的数据比对,若相同,则可进入系统。
数据流:
用户信息,其来源于用户注册时所填写的个人信息,并存储于数据库中,由user_logon的数据结构所决定。
用户通过键盘输入账号和密码,通过程序与数据库中的信息比对,比对相同,则输出用户操作界面。
2.2系统数据设计
2.2.1数据库概念结构设计
系统E-R图
2.2.2数据库逻辑结构设计
根据系统E-R图,设计的系统数据库的关系模式如下:
用户表关系模式
序号
字段名称
字段描述
属性
1
PK
非空
3
4
5
lid
Real
7
以上是用户信息表(user_logon)的关系模式,其中lno帐号作为主键,约束条件:
各属性均非空,密码长度为6位;
用户存取表关系模式
num
Int
stno
10
stmoney
操作金额
ststyle
操作类型
stdate
操作日期
以上是用户存取表(store_take)的关系模式,其中num序号作为主键,stno帐号参照用户信息表lno字段作为外键,其他约束条件:
各属性均非空。
用户转帐表关系模式
yno
转储帐号
mbno
转入账号
tmoney
tdate
以上是用户转帐表(user_turn)的关系模式,其中num序号作为主键,yno、mbno参照用户信息表的lno字段作为外键,其他约束条件:
2.2.3数据库创建
根据以上的数据库的关系模式,进行数据库的创建:
用户信息表创建图
用户信息表中lno作为主键,其他表的外键也参照此字段。
其他属性均不为空。
用户存取表创建图
用户存取表使用自增的序号列作为表的主键,stno参照用户信息表中lno作为外键。
用户存取表创建外键图
用户转帐表创建图
用户转帐表使用自增的序号列作为表的主键,yno、mbno参照用户信息表中lno作为外键。
用户转帐表创建外键图
2.2.4系统总体结构设计
系统总体功能结构图
第三章系统开发及实现
经过初期的选题、需求及功能的分析、数据的分析与建立,下面将利用以上的准备工作,采用可视化的集成开发环境VisualStudio2010进行界面的建立与功能的实现。
本次课题共创建9个窗体、3个数据库表。
3.1欢迎界面
在一个完善的系统中,欢迎界面是不可或缺的。
欢迎界面可以体现出一个系统的整体效果,并在后台进行加载文件、加载用户设置等操作,为运行程序作准备工作。
本课题的欢迎界面采用不带窗体框的窗体,使用了progressbar、lable、timer等控件,并改变了文字的大小、字体、颜色及窗体背景颜色。
利用timer计时的事件使progressbar的value值增加,当滚动条走满时,关闭此窗体,运行登录界面。
欢迎界面
主要功能代码:
Timer事件:
privatevoidtimer1_Tick(objectsender,EventArgse)
{
if(progressBar1.Value{progressBar1.Value++;}if(progressBar1.Value==progressBar1.Maximum){timer1.Enabled=false;this.Hide();}} 3.2登录界面登录界面是一个软件系统的重要环节。用户必须在登录界面输入正确的帐号密码才能进入主界面。所以这就要求登录界面要有一定的审核机制和防范措施。本课题的登录界面使用了textbox、lable、button、errorprovider等控件。其中,textbox用于填写用户的帐号、密码信息,errorprovider用于验证用户输入的信息及提示用户的功能。用户进入登录界面,输入完帐号密码后,系统调用textbox的验证事件,审核信息是否符合要求。若不符合,errorprovider会弹出警告图标;若符合,点击确定按钮后,系统会调用按钮事件,当窗体关闭时,进入关闭窗体的事件,使所填信息与数据库中数据比对,若不匹配,将会弹出错误信息,若匹配,则进入用户主界面。登录界面登录界面错误信息验证图主要功能代码:Textbox验证事件:privatevoidtextBox1_Validating(objectsender,CancelEventArgse){if(textBox1.Text.Trim().Length<3){errorProvider1.SetError(textBox1,"用户名长度不能小于3!");}else{errorProvider1.Clear();}}登录界面错误信息验证图主要功能代码:Textbox验证事件:privatevoidtextBox2_Validating(objectsender,CancelEventArgse){if(textBox2.Text.Trim().Length<3){errorProvider2.SetError(textBox2,"密码的长度不能小于3!");}else{errorProvider2.Clear();}}当用户点击退出时,系统会询问用户是否要退出系统,用户点击是时,方可退出系统。此外用户可以点击注册按钮,将会弹出注册界面。登录界面退出询问图窗体关闭事件:privatevoidlogon_FormClosing(objectsender,FormClosingEventArgse){if(isokbutton==false){Application.Exit();}else{stringusername=textBox1.Text.Trim();stringpassword=textBox2.Text.Trim();stringsql="select*fromuser_logonwherelno='"+username+"'andlpassword='"+password+"'";DataTabledt=DBTool.QueryBySql(sql);boolisvaliduser=false;if(dt.Rows.Count==1)isvaliduser=true;dt.Dispose();if(isvaliduser==true){Global.username=username;}else{isokbutton=false;MessageBox.Show("用户名或密码错误!");e.Cancel=true;}}}3.3注册界面当使用一个软件系统时,第一个任务就是注册一个帐号。本课题的注册界面采用了textbox、lable、button、errorprovider、combobox等控件。用户在登录界面点击注册按钮后,弹出注册界面。用户通过键盘将个人信息输入到textbox中,并使用combobox选择性别,每个textbox都有验证事件来判断用户所填写的信息是否正确,errorprovider提示错误信息。用户填写身份id和开户金额时,通过textbox的keypress事件来限制用户只能输入数字或字母‘x’,并且开户金额必须大于1000元。用户按照要求填完信息后,点击提交按钮,调用按钮事件,审核用户所填信息是否符合规范。若不符合,弹出错误信息提示;若符合,将数据存入数据库,注册成功。注册界面注册界面验证信息图注册界面验证信息图主要功能代码:用户名部分Textbox验证事件:privatevoidlno_Validating(objectsender,CancelEventArgse){if(lno.Text.Trim().Length<3){errorProvider1.SetError(lno,"用户名长度不能小于3!");}else{stringsql="select*fromuser_logonwherelno='"+lno.Text.Trim()+"'";DataTabledt=DBTool.QueryBySql(sql);if(dt.Rows.Count==1){errorProvider5.SetError(lno,"用户名已经存在!");tag=1;}else{errorProvider5.Clear();tag=0;}dt.Dispose();}}金额部分Textbox的keypress事件:privatevoidlbalance_KeyPress(objectsender,KeyPressEventArgse){stringallowchar="0123456789.";if((Keys)(e.KeyChar)==Keys.Back||(Keys)(e.KeyChar)==Keys.Delete){return;}if((e.KeyChar==3)||(e.KeyChar==24)||(e.KeyChar==26)){return;}if(allowchar.IndexOf(e.KeyChar.ToString())==-1){e.Handled=true;return;}}身份证号部分Textbox的keypress事件:privatevoidlid_KeyPress(objectsender,KeyPressEventArgse){stringallowchar="0123456789x";if((Keys)(e.KeyChar)==Keys.Back||(Keys)(e.KeyChar)==Keys.Delete){return;}if((e.KeyChar==3)||(e.KeyChar==24)||(e.KeyChar==26)){return;}if(allowchar.IndexOf(e.KeyChar.ToString())==-1){e.Handled=true;return;}}提交按钮事件:privatevoidbutton1_Click(objectsender,EventArgse){if(lno.Text.Trim().Length<3){MessageBox.Show("用户名长度不能小于3!");return;}if(lpassword.Text.Trim().Length<3){MessageBox.Show("密码长度不能小于3!");return;}if(lpassword2.Text.Trim()!=lpassword2.Text.Trim()){MessageBox.Show("两次输入的密码不相同!");return;}if(comboBox1.Text.Trim()==""){MessageBox.Show("请选择您的性别!");return;}if(lid.Text.Trim().Length!=18){MessageBox.Show("请输入18位身份证号!");return;}if(lbalance.Text.Trim()==null||Convert.ToSingle(lbalance.Text.Trim())<1000){MessageBox.Show("开户金额不能为小于1000!");return;}if(tag==1){MessageBox.Show("用户名已经存在!");return;}floatbalance=Convert.ToSingle(lbalance.Text.Trim());stringsql1="insertintouser_logonvalues('"+lno.Text.Trim()+"','"+lpassword.Text.Trim()+"','"+lname.Text.Trim()+"','"+comboBox1.Text.Trim()+"','"+lid.Text.Trim()+"','"+balance+"','"+DateTime.Now+"')";intnum=DBTool.SqlCmdOperation(sql1);if(MessageBox.Show("注册成功!")==DialogResult.OK)Close();}3.4业务界面当用户输入正确的帐号密码信息后,点击确定,进入到用户业务操作主界面。业务界面里包括查询模块、存取模块、转帐模块以及其他模块。主界面上边的菜单栏和工具栏显示用户可进行的操作,下边的状态栏,能显示当前时间、当前用户以及当前进行的操作。下面是主界面的截图:主界面下面以帐号为“ali0”,密码为“ali0”为例,分别介绍各个模块。 3.4.1查询模块当用户进入主界面后,点击查询按钮后,主界面内会弹出查询功能的子界面。此界面内有三个按钮,分别对应三种操作,包括查询帐户信息、查询近期存取信息、查询转帐信息。点击某个按钮,调用按钮事件,执行相应操作,查询数据库,将数据库返回的结果在子窗体的datagridiew控件里显示。由于系统面向的都是使用者,所以查询的结果不能任意修改,通过更改datagridiew的属性,完成这一功能。查询界面主要功能代码:查询按钮事件:privatevoidbutton1_Click(objectsender,EventArgse){stringsql1="selectlno,lname,lsex,lid,lbalancefromuser_logonwherelno='"+Global.username+"'";DataTabledt=DBTool.QueryBySql(sql1);dataGridView1.DataSource=dt;} 3.4.2存取模块当用户进入主界面后,点击存款或取款按钮后,主界面内会弹出对应功能的子界面。子界面中用radiobutton控件来表示一定的可选择的金额。若用户想手动输入金额,可点击checkbox,调用checkbox的验证事件,将radiobutton控件禁用,启用textbox手动输入,但只能输入数字。填写存取金额后,点击确定按钮,验证金额是否正确,取款时会验证金额是否充足,弹出相应信息框。存款界面ali0用户存入了600元,存入成功,用户可以通过上面的查询界面来查询账户金额以及存取信息,来验证是否存入。用户可以点击取消按钮,结束该操作。取款界面由于金额超出账户中拥有的数额,系统弹出错误信息。存款验证信息图ali0用户刚才存入了600元,点击查询近期存取信息,返回存取记录。主要功能代码:Checkbox验证事件:privatevoidcheckBox1_CheckedChanged(objectsender,EventArgse){if(checkBox1.Checked==true){groupBox1.Enabled=false;textBox1.Enabled=true;}else{groupBox1.Enabled=true;textBox1.Enabled=false;}}确定按钮事件:privatevoidbutton1_Click(objectsender,EventArgse){floattemp=0;if(groupBox1.Enabled==true){if(radioButton1.Checked==true)temp=Convert.ToSingle(radioButton1.Text.Trim());if(radioButton2.Checked==true)temp=Convert.ToSingle(radioButton2.Text.Trim());if(radioButton3.Checked==true)temp=Convert.ToSingle(radioButton3.Text.Trim());if(radioButton4.Checked==true)temp=Convert.ToSingle(radioButton4.Text.Trim());}else{if(textBox1.Text.Trim()==""){MessageBox.Show("取款金额不能为0!");return;}temp=Convert.ToSingle(textBox1.Text.Trim());}intmark=0;stringsql="updateuser_logonsetlbalance=lbalance+'"+temp+"'wherelno='"+Global.username+"'";stringsql1="insertintostore_takevalues('"+Global.username+"','"+temp+"','存入','"+DateTime.Now+"')";mark=DBTool.SqlCmdOperation(sql);if(mark==1){mark=DBTool.SqlCmdOperation(sql1);if(mark==1){MessageBox.Show("存款成功!");}}} 3.4.3转帐模块当用户进入主界面后,点击转帐按钮后,主界面内会弹出对应功能的子界面。转帐界面同存取界面大致相同。不同之
progressBar1.Value++;
}
if(progressBar1.Value==progressBar1.Maximum)
timer1.Enabled=false;
this.Hide();
3.2登录界面
登录界面是一个软件系统的重要环节。
用户必须在登录界面输入正确的帐号密码才能进入主界面。
所以这就要求登录界面要有一定的审核机制和防范措施。
本课题的登录界面使用了textbox、lable、button、errorprovider等控件。
其中,textbox用于填写用户的帐号、密码信息,errorprovider用于验证用户输入的信息及提示用户的功能。
用户进入登录界面,输入完帐号密码后,系统调用textbox的验证事件,审核信息是否符合要求。
若不符合,errorprovider会弹出警告图标;若符合,点击确定按钮后,系统会调用按钮事件,当窗体关闭时,进入关闭窗体的事件,使所填信息与数据库中数据比对,若不匹配,将会弹出错误信息,若匹配,则进入用户主界面。
登录界面
登录界面错误信息验证图
Textbox验证事件:
privatevoidtextBox1_Validating(objectsender,CancelEventArgse)
if(textBox1.Text.Trim().Length<3)
errorProvider1.SetError(textBox1,"用户名长度不能小于3!
");
else
errorProvider1.Clear();
privatevoidtextBox2_Validating(objectsender,CancelEventArgse)
if(textBox2.Text.Trim().Length<3)
errorProvider2.SetError(textBox2,"密码的长度不能小于3!
errorProvider2.Clear();
当用户点击退出时,系统会询问用户是否要退出系统,用户点击是时,方可退出系统。
此外用户可以点击注册按钮,将会弹出注册界面。
登录界面退出询问图
窗体关闭事件:
privatevoidlogon_FormClosing(objectsender,FormClosingEventArgse)
if(isokbutton==false)
Application.Exit();
stringusername=textBox1.Text.Trim();
stringpassword=textBox2.Text.Trim();
stringsql="select*fromuser_logonwhere
lno='"+username+"'andlpassword='"+password+"'";
DataTabledt=DBTool.QueryBySql(sql);
boolisvaliduser=false;
if(dt.Rows.Count==1)
isvaliduser=true;
dt.Dispose();
if(isvaliduser==true)
Global.username=username;
isokbutton=false;
MessageBox.Show("用户名或密码错误!
e.Cancel=true;
3.3注册界面
当使用一个软件系统时,第一个任务就是注册一个帐号。
本课题的注册界面采用了textbox、lable、button、errorprovider、combobox等控件。
用户在登录界面点击注册按钮后,弹出注册界面。
用户通过键盘将个人信息输入到textbox中,并使用combobox选择性别,每个textbox都有验证事件来判断用户所填写的信息是否正确,errorprovider提示错误信息。
用户填写身份id和开户金额时,通过textbox的keypress事件来限制用户只能输入数字或字母‘x’,并且开户金额必须大于1000元。
用户按照要求填完信息后,点击提交按钮,调用按钮事件,审核用户所填信息是否符合规范。
若不符合,弹出错误信息提示;若符合,将数据存入数据库,注册成功。
注册界面
注册界面验证信息图
用户名部分Textbox验证事件:
privatevoidlno_Validating(objectsender,CancelEventArgse)
if(lno.Text.Trim().Length<3)
errorProvider1.SetError(lno,"用户名长度不能小于3!
stringsql="select*fromuser_logonwherelno='"+lno.Text.Trim()+"'";
errorProvider5.SetError(lno,"用户名已经存在!
tag=1;
errorProvider5.Clear();
tag=0;
金额部分Textbox的keypress事件:
privatevoidlbalance_KeyPress(objectsender,KeyPressEventArgse)
stringallowchar="0123456789.";
if((Keys)(e.KeyChar)==Keys.Back||(Keys)(e.KeyChar)==Keys.Delete)
return;
if((e.KeyChar==3)||(e.KeyChar==24)||(e.KeyChar==26))
if(allowchar.IndexOf(e.KeyChar.ToString())==-1)
e.Handled=true;
身份证号部分Textbox的keypress事件:
privatevoidlid_KeyPress(objectsender,KeyPressEventArgse)
stringallowchar="0123456789x";
提交按钮事件:
privatevoidbutton1_Click(objectsender,EventArgse)
MessageBox.Show("用户名长度不能小于3!
if(lpassword.Text.Trim().Length<3)
MessageBox.Show("密码长度不能小于3!
if(lpassword2.Text.Trim()!
=lpassword2.Text.Trim())
MessageBox.Show("两次输入的密码不相同!
if(comboBox1.Text.Trim()=="")
MessageBox.Show("请选择您的性别!
if(lid.Text.Trim().Length!
=18)
MessageBox.Show("请输入18位身份证号!
if(lbalance.Text.Trim()==null||
Convert.ToSingle(lbalance.Text.Trim())<1000)
MessageBox.Show("开户金额不能为小于1000!
if(tag==1)
MessageBox.Show("用户名已经存在!
floatbalance=Convert.ToSingle(lbalance.Text.Trim());
stringsql1="insertintouser_logonvalues('"+lno.Text.Trim()+"','"+lpassword.Text.Trim()+"','"+lname.Text.Trim()+"','"+comboBox1.Text.Trim()+"','"+lid.Text.Trim()+"','"+balance+"','"+DateTime.Now+"')";
intnum=DBTool.SqlCmdOperation(sql1);
if(MessageBox.Show("注册成功!
")==DialogResult.OK)
Close();
3.4业务界面
当用户输入正确的帐号密码信息后,点击确定,进入到用户业务操作主界面。
业务界面里包括查询模块、存取模块、转帐模块以及其他模块。
主界面上边的菜单栏和工具栏显示用户可进行的操作,下边的状态栏,能显示当前时间、当前用户以及当前进行的操作。
下面是主界面的截图:
主界面
下面以帐号为“ali0”,密码为“ali0”为例,分别介绍各个模块。
3.4.1查询模块
当用户进入主界面后,点击查询按钮后,主界面内会弹出查询功能的子界面。
此界面内有三个按钮,分别对应三种操作,包括查询帐户信息、查询近期存取信息、查询转帐信息。
点击某个按钮,调用按钮事件,执行相应操作,查询数据库,将数据库返回的结果在子窗体的datagridiew控件里显示。
由于系统面向的都是使用者,所以查询的结果不能任意修改,通过更改datagridiew的属性,完成这一功能。
查询界面
查询按钮事件:
stringsql1="selectlno,lname,lsex,lid,lbalancefromuser_logonwhere
lno='"+Global.username+"'";
DataTabledt=DBTool.QueryBySql(sql1);
dataGridView1.DataSource=dt;
3.4.2存取模块
当用户进入主界面后,点击存款或取款按钮后,主界面内会弹出对应功能的子界面。
子界面中用radiobutton控件来表示一定的可选择的金额。
若用户想手动输入金额,可点击checkbox,调用checkbox的验证事件,将radiobutton控件禁用,启用textbox手动输入,但只能输入数字。
填写存取金额后,点击确定按钮,验证金额是否正确,取款时会验证金额是否充足,弹出相应信息框。
存款界面
ali0用户存入了600元,存入成功,用户可以通过上面的查询界面来查询账户金额以及存取信息,来验证是否存入。
用户可以点击取消按钮,结束该操作。
取款界面
由于金额超出账户中拥有的数额,系统弹出错误信息。
存款验证信息图
ali0用户刚才存入了600元,点击查询近期存取信息,返回存取记录。
Checkbox验证事件:
privatevoidcheckBox1_CheckedChanged(objectsender,EventArgse)
if(checkBox1.Checked==true)
groupBox1.Enabled=false;
textBox1.Enabled=true;
groupBox1.Enabled=true;
textBox1.Enabled=false;
确定按钮事件:
floattemp=0;
if(groupBox1.Enabled==true)
if(radioButton1.Checked==true)
temp=Convert.ToSingle(radioButton1.Text.Trim());
if(radioButton2.Checked==true)
temp=Convert.ToSingle(radioButton2.Text.Trim());
if(radioButton3.Checked==true)
temp=Convert.ToSingle(radioButton3.Text.Trim());
if(radioButton4.Checked==true)
temp=Convert.ToSingle(radioButton4.Text.Trim());
if(textBox1.Text.Trim()=="")
MessageBox.Show("取款金额不能为0!
temp=Convert.ToSingle(textBox1.Text.Trim());
intmark=0;
stringsql="updateuser_logonsetlbalance=lbalance+'"+temp+"'wherelno='"+Global.username+"'";
stringsql1="insertintostore_takevalues('"+Global.username+"','"+temp+"','存入','"+DateTime.Now+"')";
mark=DBTool.SqlCmdOperation(sql);
if(mark==1)
mark=DBTool.SqlCmdOperation(sql1);
MessageBox.Show("存款成功!
3.4.3转帐模块
当用户进入主界面后,点击转帐按钮后,主界面内会弹出对应功能的子界面。
转帐界面同存取界面大致相同。
不同之
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1