1、C#与.NET课程设计报告学 院 计算机学院、软件学院专 业 计算机科学与技术 学 生 学 号 学 生 姓 名 指 导 教 师 日 期 C# 课程设计 ATM自动取款机1、课程设计目的(1)通过本次设计掌握使用c#语言中窗体的建立,各个控件的使用,以及界面的设计(2)进一步巩固所学的C#及数据库的相关理论知识,提高分析和解决实际问题的能力(3)初步掌握使用C#工具设计一个具体实例的方法,包括软件的设计,调试的全过程2、系统的分析与设计ATM应用系统为更进一步的提供银行交易服务,实现24小时不间断自助服务,对提高银行间的业务竞争能力有很大的帮助。通过ATM系统的项目实施和建设可以更进一步的提供自
2、身竞争力,紧跟网路技术的潮流,为银行业务的进一步的电子化、自动化迈出坚实的一步。本次课设实现了一个银行业务自动取款系统,客户通过ATM系统可以实现基本的业务操作。2.1需求分析2.1.1 课设任务(1)根据技术要求和现有开发环境,分析题目(2)选定设计方案(3)画出软件框架结构图,关键程序流程图(4)使用C#语言和.net框架,并结合数据库,实现软件(5)调试,修改并完善程序2.1.2 课设要求(1)仿某银行ATM的运行界面(2)凭正确的卡号和密码进入系统(3)实现存款、取款、余额查询登记本业务操作2.2系统的设计本系统属于中小型的银行取款系统,可以为银行用户提供各项基本服务,通过本系统可以达
3、到以下目标:(1)功能方面:取款、存款、修改密码、余额查询(2)性能:可使用户在无任何经验的情况下进行操作ATM自助式服务2.2.1 数据库的分析与设计 本次数据库是利用ACCESS建立,共包含三张表userInfo、cardInfo、transInfo。表的具体要求如下: 表一userInfo列名数据类型长度允许为空是否为主键说明customerIDint4否是客户唯一编号,自增customerNamenvarchar10否否客户姓名customerPIDnvarchar18否否身份证号Telephonenvarchar13否否客户电话Addressnvarchar50否否地址表二 card
4、Info列名数据类型长度允许为空是否为主键说明cardIDchar19否是卡号 cardTypenvarchar5否否卡类型savingTypenvzrchar8否否存款类型openDatedatetime20否否开户日期openMoneymoney50是否交易金额Balancemoney50是否余额passWordchar6否否密码isLossbit否否是否挂失customerIDint4否否客户编号 表三 transInfo列名数据类型长度允许为空是否为主键说明transIdint4否是交易明细号transDatadatatime8否否交易日期transTypechar4否否交易类型car
5、dIDchar19否否卡号transMoneymoney50否否交易金额表的实现:表一:表二:表三:2.2.2逻辑层次的设计本次课设的自动提款机模拟软件系统可以使用户进行登录、取款、存款、查询余额、修改密码等基本业务。 ATM系统基本结构框图如图1所示:启动系统进入系统界面用户登录退出系统取款存款余额查询转账修改密码返回图1 ATM系统的基本框图2.2.3界面的设计根据个人业务界面所提供的按钮,用户可以进行取款,存款、查询余额,修改密码等操作,个人业务界面如图所示:图 个人业务界面2.3程序设计用户进入系统后,点击用户登录进入登陆界面,在登录窗口中输入卡号和密码,判断卡号与密码是否正确,若卡号
6、与密码正确则进入用户操作界面,并根据用户的相关操作给用户提供相应的服务。若卡号与密码不正确,弹出对话框提示用户确认卡号和密码错误后重新输入,并对输入错误次数进行计数,若输入密码错误次数大于3次,则锁定该帐号。2.3.1 程序流程图软件设计程序流程图如图所示:图程序流程图2.3.2系统实施本系统主要通过运用C#的Windows窗体的设计进行开发和实施,主要通过如下几个功能模块来完成系统的具体的实施过程:(1)用户登陆窗体:通过登陆界面可以进行用户的登陆过程,进而实现相应的用户操作。即当用户名与密码都正确时用户就可以登陆进行所需的操作,其界面如图所示: 图登陆界面具体实现的代码如下:namespa
7、ce ATM自动取款机设计 public partial class frmzuichu : Form public frmzuichu() InitializeComponent(); private void button2_Click(object sender, EventArgs e) Form1 form1 = new Form1(); this.Hide(); form1.Show(); private void button3_Click(object sender, EventArgs e) Application.ExitThread(); Application.Exit
8、(); public partial class Form1 : Form public Form1() InitializeComponent(); public int a = 0; public string b; public int i = 0; public static string 帐号; public static string 密码; private void button12_Click(object sender, EventArgs e) string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|Dat
9、aDirectory|ziliaoku.mdf;Integrated Security=True;User Instance=True; SqlConnection conn = new SqlConnection(connString); string sql = SELECT 锁定FROM xinxi WHERE 帐号= + textBox2.Text.Trim() + ; using (SqlConnection conna = new SqlConnection(connString) conn.Open(); SqlCommand cmd = new SqlCommand(sql,
10、conn); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read() b = dr锁定.ToString(); dr.Close(); string sql1 = SELECT * FROM xinxi WHERE 帐号= + textBox2.Text.Trim() + ; string sql2 = SELECT * FROM xinxi WHERE 帐号= + textBox2.Text.Trim() + AND 密码= + textBox1.Text.Trim() + ; /try / if (OperateDB.ExecuteRea
11、der(sql1) if (b = 0) if (OperateDB.ExecuteReader(sql2) 帐号? = textBox2.Text.Trim(); 密码? = textBox1.Text.Trim(); frmMain main = new frmMain(); main.Show(); this.Hide(); else a = a + 1; if (a 2) OperateDB.ExecuteNonQuery(UPDATE xinxi SET 锁定=1 WHERE 帐号= + textBox2.Text.Trim() + ); frmTunKa tunka = new f
12、rmTunKa(); tunka.Show(); this.Hide(); else MessageBox.Show(密码不正确,请重新输入!注意最多可输入三次!, 提示, MessageBoxButtons.OK, MessageBoxIcon.Warning); else MessageBox.Show(该帐号已被锁定,请与银行管理员联系!, 提示, MessageBoxButtons.OK, MessageBoxIcon.Warning); else MessageBox.Show(此用户不存在,请重新输入帐号!, 提示, MessageBoxButtons.OK, MessageBox
13、Icon.Warning); / /catch / / MessageBox.Show(软件错误!); / private void button13_Click(object sender, EventArgs e) textBox1.Text = ; textBox1.Text =; private void groupBox1_Enter(object sender, EventArgs e) private void textBox2_MouseEnter(object sender, EventArgs e) textBox2.Focus(); private void textBo
14、x1_MouseEnter(object sender, EventArgs e) textBox1.Focus(); private void textBox2_KeyPress(object sender, KeyPressEventArgs e) if (e.KeyChar = (char)13)/13表示回车 textBox1.Focus(); private void textBox1_KeyPress(object sender, KeyPressEventArgs e) if (e.KeyChar = (char)13) button12_Click(sender, e); pr
15、ivate void Form1_Load(object sender, EventArgs e) textBox2.Focus(); private void button1_Click(object sender, EventArgs e) frmzuichu zuichu = new frmzuichu(); this.Hide(); zuichu.Show(); (2)个人业务窗体:根据界面所提供的按钮用户可以进行取款,存款,查询余额等操作,其界面如图所示:图个人业务界面具体实现的代码如下:private void button1_Click(object sender, EventA
16、rgs e) frmQuKuan qukuan = new frmQuKuan(); qukuan.Show(); this.Hide(); private void button2_Click(object sender, EventArgs e) frmCunKuan cunkuan = new frmCunKuan(); /frmCKQR ckqr = new frmCKQR(); cunkuan.Show(); this.Hide(); /Thread.Sleep(5000); /cunkuan.Close(); /ckqr.Show(); private void button3_C
17、lick(object sender, EventArgs e) frmYuEChaXun yuechaxun = new frmYuEChaXun(); yuechaxun.Show(); this.Hide(); private void button4_Click(object sender, EventArgs e) frmXiuGaiMiMa xiugaimima = new frmXiuGaiMiMa(); xiugaimima.Show(); this.Hide(); private void button7_Click(object sender, EventArgs e) f
18、rmShaoDeng3 shaodeng3 = new frmShaoDeng3(); shaodeng3.Show(); this.Close(); (3)取款窗体:通过该界面用户可以从自己的账户中进行取款操作,但是取款的金额必须在规定范围内且为100元的整数倍,否则无法进行操作,当用户余额不足以提取时提示余额不足,其界面如图所示: 图取款界面具体实现的代码如下:public partial class frmQuKuan : Form public frmQuKuan() InitializeComponent(); public int abc; private void button1
19、2_Click(object sender, EventArgs e) string ab = textBox1.Text.Trim(); int a = Convert.ToInt16(ab); string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|ziliaoku.mdf;Integrated Security=True;User Instance=True; SqlConnection conn = new SqlConnection(connString); string sql = SE
20、LECT 储蓄 FROM xinxi WHERE 帐号= + Form1.帐号 + ; using (SqlConnection conna = new SqlConnection(connString) conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read() string bc = dr储蓄.ToString(); abc=Convert .ToInt32 (bc); dr.Close(); if (a = abc) if (a
21、 != 0) if (a % 100) = 0) if (OperateDB.ExecuteNonQuery(DECLARE xc int EXECUTE dbo.StoredProcedure1 + Form1.帐号? + , + textBox1.Text.Trim() + ,xc OUT) = 1) frmShaoDeng1 shaodeng1 = new frmShaoDeng1(); frmTiQuXianJin tiquxianjin = new frmTiQuXianJin(); frmMain main = new frmMain(); shaodeng1.Show(); sh
22、aodeng1.Focus(); this.Close(); else frmQKTS qkts = new frmQKTS(); qkts.Show(); qkts.Focus(); this.Hide(); else this.Hide(); /Thread.Sleep(5000); /qkje1.Close(); /this.Focus(); /timer5.Start(); else textBox1.Text = ; frmYEBZ yebz = new frmYEBZ(); yebz.Show(); yebz.Focus(); this.Hide(); private void b
23、utton1_Click(object sender, EventArgs e) frmMain main = new frmMain(); this.Hide(); main.Show(); private void button13_Click(object sender, EventArgs e) textBox1.Text = ; (4)查询余额窗体:在业务类型窗体上点击余额查询,可查询当前用户银行卡上的可用余额,其界面如图所示:图查询余额界面具体实现的代码如下:public partial class frmYuEChaXun : Form public frmYuEChaXun()
24、 InitializeComponent(); private void frmYuEChaXun_Load(object sender, EventArgs e) string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|ziliaoku.mdf;Integrated Security=True;User Instance=True; SqlConnection conn = new SqlConnection(connString); string sql = SELECT 储蓄 FROM xin
25、xi WHERE 帐号= + Form1.帐号 + ; using (SqlConnection conna = new SqlConnection(connString) conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read() textBox1.Text = dr储蓄.ToString(); dr.Close(); private void button1_Click(object sender, EventArgs e) th
26、is.Close(); frmMain main = new frmMain(); main.Show(); private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) /string sql = SELECT 储蓄 FROM xinxi WHERE 帐号= + Form1.帐号 + ; /DataSet myDs = OperateDB.ExecuteDataset(sql); /dataGridView1.DataSource = myDs.Tables0.DefaultVi
27、ew; private void button2_Click(object sender, EventArgs e) frmShaoDeng3 shaodeng3 = new frmShaoDeng3(); shaodeng3.Show(); this.Close(); (5)修改密码窗体:通过该界面用户可以给自己的账户进行修改密码的操作,两次输入的新密码一样将修改成功,否则将失败,其界面如图所示:图 修改密码界面具体实现的代码如下:public partial class frmXiuGaiMiMa : Form public frmXiuGaiMiMa() InitializeCompon
28、ent(); private void button1_Click(object sender, EventArgs e) if (textBox3.Text.Trim() = textBox2.Text.Trim() try if (OperateDB.ExecuteNonQuery(UPDATE xinxi SET 密码= + textBox2.Text.Trim() + WHERE 帐号= + Form1.帐号 + ) = 1) frmXGCG xgcg = new frmXGCG(); xgcg.Show(); xgcg.Focus(); this.Hide(); else frmXG
29、SB xgsb = new frmXGSB(); xgsb.Show(); xgsb.Focus(); this.Hide(); catch MessageBox.Show(软件错误!); private void button2_Click(object sender, EventArgs e) frmMain main = new frmMain(); this.Close(); main.Show(); (6)存款窗体:通过该窗体用户可以将现金存入自己的账户。界面设计如图所示: 具体实现的代码如下: public partial class frmCunKuan : Form public frmCunKuan() InitializeComponent(); private void frmCunKuan_Load(object sender, EventArgs e) private void label1_Click(object sender, EventArgs e) private void butt