C#课程设计自动存取款机软件设计解读.docx
《C#课程设计自动存取款机软件设计解读.docx》由会员分享,可在线阅读,更多相关《C#课程设计自动存取款机软件设计解读.docx(25页珍藏版)》请在冰点文库上搜索。
C#课程设计自动存取款机软件设计解读
科信学院
课程设计说明书
(2012/2013学年第一学期)
课程名称:
软件程序设计
题目:
自动存取款机软件设计
专业班级:
学生姓名:
放羊娃
学号:
指导教师:
设计周数:
2周
设计成绩:
2013年1月18日
1课程设计目的
(1)初步掌握使用C#工具设计一个具体实例的方法,包括软件的设计,调试的全过程。
(2)通过本次设计掌握使用c#语言中窗体的建立,各个控件的使用,以及界面的设计。
(3)进一步巩固所学的C#及数据库的相关理论知识,提高分析和解决实际问题的能力。
2课程的分析
ATM自动取款机系统向用户提供一个方便、简单、及时、随时随地可以随心所欲存取款的互联的现代计算机化的网络系统。
可以大大减少工作人员,节约人力资源的开销,同时由于手续程序减少也可以减轻业务员的工作负担,有效地提高了整体的工作效率和精确度。
减少了用户办理业务的等待时间;用户可以随时随地可以随心所欲存取款,并且操作简单易懂;用户还可以选择在柜台办理业务或自己在自动提款机和自动取款机办理业务。
2.1需求分析
2.1.1课设任务
(1)根据技术要求和现有开发环境,分析题目
(2)选定设计方案
(3)画出软件框架结构图,关键程序流程图
(4)使用C#语言和.net框架,并结合数据库,实现软件
(5)调试,修改并完善程序
2.1.2课设要求
(1)模仿银行ATM的运行界面。
(2)凭正确的卡号和密码进入系统。
(3)实现取款,余额查询,修改密码,交费,转账,存款操作。
2.2系统的设计
(1)输入:
用户通过键盘进行输入。
(2)性能:
可使用户在无任何经验的情况下进行操作ATM自助式服务。
(3)功能方面:
取款、查询余额、修改密码、存款、交费、转账。
2.2.1数据库的分析与设计
由自动提款机模拟软件系统的需求分析可知,本系统应为windows应用窗体的设计,据提供的实验环境及以前所学的理论知识,采用SQL数据库,根据自动提款机模拟软件的功能要求,在shuju数据库中建立两张表来存储信息,分别为Table1和RecordIofo。
Table1表中用来存储用户的卡号,密码,用户名,余额及用于卡号锁定的字段
用户基本信息表(Table1)
列名
数据类型
长度
允许为空
是否为主键
说明
kahao
nvarchar
19
否
是
卡号
mima
nvarchar
6
否
否
密码
xingming
nvarchar
20
是
否
姓名
dianhua
nvarchar
11
是
否
电话
yue
money
是
否
余额
lock
nvarchar
2
是
否
卡号锁定
recordIofo表中用于存储用户的卡号,用户名,存取结余,主要用于数据库的更新操作。
用户操作信息表(recordIofo)
列名
数据类型
长度
允许为空
是否为主键
说明
kahao
nvarchar
19
否
是
卡号
xingming
nvarchar
20
是
否
姓名
shijian
datetime
否
否
操作时间
leixing
nvarchar
20
是
否
操作类型
kashangyuye
decimal
(18,0)
是
否
交易金额
2.2.2取款机逻辑层次设计
本次课设的自动提款机模拟软件系统可以使用户进行登录、取款、转账、查询余额、修改密码、存款和交费等基本业务。
ATM系统基本结构框图如图2-1所示:
2.3程序设计
用户进入后,点击用户登录进入登陆界面,在登录窗口中输入卡号和密码,判断卡号与密码是否正确,若卡号与密码正确则进入用户操作界面,并根据用户的相关操作给用户提供相应的服务。
若卡号与密码不正确,弹出对话框提示用户确认卡号和密码错误后重新输入,并对输入错误次数进行计数,若输入密码错误次数大于3次,则锁定该帐号。
2.3.1程序流程图
2.3.2窗体的具体实施和代码
(1)用户登陆窗体:
通过登陆界面可以进行用户的登陆过程,进而实现相应的用户操作。
即当用户名与密码都正确时用户就可以登陆进行所需的操作。
代码为:
if((mask1.Text.Trim()!
=""))
{
stringconnString=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\shuju.mdf;IntegratedSecurity=True;ConnectTimeout=30;UserInstance=True";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
stringssql="select*fromTable1wherekahao='"+mask1.Text.Trim()+"'";
SqlCommandccmd=newSqlCommand(ssql,conn);
SqlDataReaderdr1=ccmd.ExecuteReader();
if(dr1.Read())
{
dr1.Close();
name=mask1.Text.Trim().ToString();
stringisornot="selectlockfromTable1wherekahao='"+mask1.Text.Trim().ToString()+"'";
SqlCommandcmd0=newSqlCommand(isornot,conn);
SqlDataReaderdrr=cmd0.ExecuteReader();
if(drr.Read()&&drr["lock"].ToString()=="1")
{
MessageBox.Show("您的帐号已被锁定,请与银行管理员联系!
");
mask2.Text="";
mask1.Text="";
drr.Close();
}
else
{
drr.Close();
stringsql="select*fromTable1wherekahao='"+mask1.Text.Trim().ToString()+"'andmima='"+mask2.Text.Trim().ToString()+"'";
SqlCommandcmd=newSqlCommand(sql,conn);
SqlDataReaderdr=cmd.ExecuteReader();
if(dr.Read())
{
mask1.Text=dr["kahao"].ToString();
FrmMianfrm=newFrmMian();
frm.Show();
this.Hide();
}
else
{
if(this.A++<2)
{
MessageBox.Show("您密码不正确,请重新输入!
","提示!
",MessageBoxButtons.OK,MessageBoxIcon.Error);
mask2.Text="";
mask1.Text="";
}
else
{
dr.Close();
stringsql1="updateTable1setlock='1'wherekahao='"+name+"'";
SqlCommandcmd1=newSqlCommand(sql1,conn);
if(cmd1.ExecuteNonQuery()==1)
{
MessageBox.Show("您已经输入超过三次,该帐号将被锁定,请联系银行管理员!
","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
mask2.Text="";
mask1.Text="";
}
}
}
}
}
else
{
MessageBox.Show("账号不正确");
}
conn.Close();
}
else
{
MessageBox.Show("请输入卡号与密码!
","警告!
!
!
!
",MessageBoxButtons.OK,MessageBoxIcon.Warning);
mask1.Text="";
mask2.Text="";
}
(2)存款窗体:
通过该界面用户可以从自己的账户中进行存款操作,但是存款的金额必须在规定范围内且为100元的整数倍,否则无法进行操作。
代码为:
stringconnString=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\shuju.mdf;IntegratedSecurity=True;ConnectTimeout=30;UserInstance=True";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
stringsql="SELECT*FROMTable1WHEREkahao='"+frmlo.name+"'";
SqlCommandcmd=newSqlCommand(sql,conn);
SqlDataReaderdr=cmd.ExecuteReader();
dr.Read();
decimaljine=Convert.ToDecimal(dr[4]);
decimalsqje=Convert.ToDecimal(textBox1.Text);
stringpresentname=Convert.ToString(dr[4]);
stringcardid="'"+frmlo.name+"'";
decimalchange=sqje;
stringtime=Convert.ToString(DateTime.Now);
dr.Close();
if(sqje%100==0)
{
MessageBox.Show("操作正在,请稍侯……");
decimalleftmoney=jine+sqje;
stringssql="UpdateTable1setyue='"+leftmoney+"'wherekahao='"+frmlo.name+"'";
SqlCommandccmd=newSqlCommand(ssql,conn);
cunkuangfrm=newcunkuang();
frm.Show();
this.Hide();
textBox1.Text="";
inti=ccmd.ExecuteNonQuery();
if(i==1)
{
textBox1.Text="";
}
else
{
MessageBox.Show("操作失败,请重试!
","提示:
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("本机只提供以百元为单位的金额,请正确输入金额!
");
textBox1.Text="";
}
}
(3)取款窗体:
通过该界面用户可以从自己的账户中进行取款操作,但是取款的金额必须在规定范围内且为100元的整数倍,否则无法进行操作。
代码为:
stringconnString=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\shuju.mdf;IntegratedSecurity=True;ConnectTimeout=30;UserInstance=True";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
stringsql="SELECT*FROMTable1WHEREkahao='"+frmlo.name+"'";
SqlCommandcmd=newSqlCommand(sql,conn);
SqlDataReaderdr=cmd.ExecuteReader();
dr.Read();
decimaljine=Convert.ToDecimal(dr[4]);
decimalsqje=Convert.ToDecimal(txt1.Text);
decimalchange=sqje;
stringpresentname=Convert.ToString(dr[1]);
stringtime=Convert.ToString(DateTime.Now);
dr.Close();
if(jine>=sqje)
{
if(sqje%100==0)
{
MessageBox.Show("请在30秒内取款……");
decimalleftmoney=jine-sqje;
stringssql="UpdateTable1setyue='"+leftmoney+"'wherekahao='"+frmlo.name+"'";
SqlCommandccmd=newSqlCommand(ssql,conn);
drawfrm=newdraw();
frm.Show();
this.Hide();
inti=ccmd.ExecuteNonQuery();
if(i==1)
{
}
else
{
MessageBox.Show("操作失败,请重试!
","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("本机只提供以百元为单位的金额,请正确输入金额!
");
txt1.Text="";
}
}
else
{
MessageBox.Show("您的余额不足!
");
txt1.Text="";
}
conn.Close();
(4)交费窗体:
通过该界面用户可以进行交费。
代码为:
stringconnString=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\shuju.mdf;IntegratedSecurity=True;ConnectTimeout=30;UserInstance=True";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
stringsql="SELECT*FROMTable1WHEREkahao='"+frmlo.name+"'";
SqlCommandcmd=newSqlCommand(sql,conn);
SqlDataReaderdr=cmd.ExecuteReader();
dr.Read();
decimaljine=Convert.ToDecimal(dr[4]);
decimalsqje=Convert.ToDecimal(textBox1.Text);
stringpresentname=Convert.ToString(dr[4]);
stringcardid="'"+frmlo.name+"'";
decimalchange=sqje;
stringtime=Convert.ToString(DateTime.Now);
dr.Close();
if(jine>=sqje)
{
MessageBox.Show("操作正在,请稍侯……");
decimalleftmoney=jine-sqje;
stringssql="UpdateTable1setyue='"+leftmoney+"'wherekahao='"+frmlo.name+"'";
SqlCommandccmd=newSqlCommand(ssql,conn);
MessageBox.Show("交费成功!
");
textBox1.Text="";
inti=ccmd.ExecuteNonQuery();
if(i==1)
{
textBox1.Text="";
}
else
{
MessageBox.Show("操作失败,请重试!
","提示:
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("您的余额不足!
");
textBox1.Text="";
}
}
(5)转账窗体:
通过该界面用户可以给除自己外的其他账户进行转账。
代码为:
stringconnString=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\shuju.mdf;IntegratedSecurity=True;ConnectTimeout=30;UserInstance=True";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
stringsql="SELECT*FROMTable1WHEREkahao='"+frmlo.name+"'";
SqlCommandcmd=newSqlCommand(sql,conn);
SqlDataReaderdr=cmd.ExecuteReader();
dr.Read();
decimaljine=Convert.ToDecimal(dr[4]);
stringwo=Convert.ToString(dr[1]);
decimalsqje=Convert.ToDecimal(text2.Text);
dr.Close();
if(jine>=sqje)
{
MessageBox.Show("正在操作,请稍侯……");
decimalleftmoney=jine-sqje;
stringssql="UpdateTable1setyue='"+leftmoney+"'wherekahao='"+frmlo.name+"'";
SqlCommandccmd=newSqlCommand(ssql,conn);
inti=ccmd.ExecuteNonQuery();
if(i==1)
{
stringsqql="select*fromTable1wherekahao='"+maske1.Text.Trim()+"'";
SqlCommandcmdd=newSqlCommand(sqql,conn);
SqlDataReaderdrr=cmdd.ExecuteReader();
if(drr.Read())
{
decimalje=Convert.ToDecimal(drr[4]);
stringpresentname=wo;
stringcardid="'"+frmlo.name+"'";
decimalchange=sqje;
stringtime=Convert.ToString(DateTime.Now);
je=je+sqje;
drr.Close();
stringsqql1="UpdateTable1setyue='"+je+"'wherekahao='"+maske1.Text.Trim()+"'";
SqlCommandcmmdd=newSqlCommand(sqql1,conn);
intn=cmmdd.ExecuteNonQuery();
if(n==1)
{
MessageBox.Show("转账成功!
");
maske1.Text="";
text2.Text="";
}
else
{
MessageBox.Show("转账失败!
");
maske1.Text="";
text2.Text="";
}
}
else
{
MessageBox.Show("操作失败,请重试!
","提示:
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("操作失败,请重试!
","提示:
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("您的余额不足,请重新输入金额!
");
text2.Text="";
}
conn.Close();
(6)查询余额窗体:
在业务类型窗体上点击余额查询,可查询当前用户银行卡上的可用余额。
代码为:
stringconnString=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\shuju.mdf;IntegratedSecurity=True;ConnectTimeout=30;UserInstance=True";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
stringsql=