1、*学院 ( C#程序设计)课程设计说明书课程名称 : C#软件程序设计 题 目 : 自动提款机模 拟软件 专业班级 : 学生姓名 : 放羊娃 学 号: 指导教师 :设计周数 : 2周 2013年1月12号1、 课程设计目的(1)系统功能实现用户在提款机上提取现金,查询余额,修改密码等业务。(2)掌握使用C#的使用方法,包括软件的设计,调试的全过程。(3)通过本次设计掌握使用c#语言中窗体的建立,各个控件的使用,以及界面的设计。2、系统的分析与设计ATM是最普遍的自动银行设备,可以提供最基本的银行基本业务。取款机系统向用户提供一个方便、简单、及时、随时随地可以随心所欲存取款的互联的现代计算机化的
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)功能方面:取款、查询
3、余额、修改密码、记录查询、交费、转账。2.2.1 数据库的分析与设计本次课设涉及到的数据库有ACCESS数据库和SQL数据库。ACCESS数据库是由美国微软公司于年推出的微机数据库管理系统,它是0ffice办公软件中一个重要的组成部分。它具有较强的数据处理功能,便于生成各种数据对象,能够利用web检索和发布数据等优点。与ACCESS数据库相比,SQLServer数据库属于大型数据库,SQLServer数据库是基于.ne t的一个重要数据源,它是美国微软公司开发的一款关系型数据库管理系统的产品。由自动提款机模拟软件系统的需求分析可知,本系统应为windows应用窗体的设计,据提供的实验环境及以前
4、所学的理论知识,采用SQL数据库,根据自动提款机模拟软件的功能要求,在AtmInfo数据库中建立两张表来存储信息,分别为CardInfo和Record。table1表中用来存储用户的卡号,密码,用户名,余额及用于卡号锁定的字段表2-1 用户基本信息表(Table1)列名数据类型长度允许为空是否为主键说明kahaonvarchar19否是卡号标识 mima nvarchar6否否密码xingmingnvarchar20是否户主姓名dianhuanvarchar11是否户主电话yuemoney是否账户余额locknvarchar2是否卡号锁定recordInfo表中用于存储用户的卡号,用户名,存取
5、结余,主要用于数据库的更新操作。表2-2 用户操作信息表(recordInfo)列名数据类型长度允许为空是否为主键说明xingmingnvarchar20是否户主姓名 kahaonvarchar19否是卡号标识acctimedatetime否是操作时间acctiyenvarchar20是否操作类型exchangemoneydecimal(18,0)是否交易金额2.2.2逻辑层次的设计本次课设的自动提款机模拟软件系统可以使用户进行登录、取款、转账、查询余额、修改密码、输入3次密码不对,自动锁定和交费等基本业务。 ATM系统基本结构框图如图2-1所示:启动软件用户登录系统主页退出系统取款余额查询转
6、账修改密码记录查询交费图2-1 ATM系统的基本框图2.3.1 程序流程图软件设计程序流程图如图2-2所示:图2-2程序流程图2.3.2系统实施本系统主要通过运用C#的Windows窗体的设计进行开发和实施,主要通过如下几个功能模块来完成系统的具体的实施过程:(1)用户登陆窗体:通过登陆界面可以进行用户的登陆过程,进而实现相应的用户操作。即当用户名与密码都正确时用户就可以登陆进行所需的操作,其界面如图2-3所示:图2-3登陆界面具体实现的代码如下:static public string jikahao; private void btnLogin_Click(object sender, E
7、ventArgs e) string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|数据库a.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; SqlConnection conn = new SqlConnection(connString); conn.Open(); string sql = select*from UserInfor where kahao= + txtUsername.Text.Trim().
8、ToLower() + and mima=+txtPassword.Text.Trim() + ; SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read() jikahao = drkahao.ToString(); frmMain frm = new frmMain(); frm.Show(); this.Hide(); else MessageBox.Show(用户名或密码错误!); dr.Close(); conn.Close(); private v
9、oid txtUsername_TextChanged(object sender, EventArgs e) txtUsername.Focus(); private void txtUsername_MouseHover(object sender, EventArgs e) txtUsername.Focus(); private void txtPassword_MouseHover(object sender, EventArgs e) txtPassword.Focus(); private void txtUsername_KeyPress(object sender, KeyP
10、ressEventArgs e) if (e.KeyChar = (char)13) txtUsername.Focus(); private void txtPassword_KeyPress(object sender, KeyPressEventArgs e) if (e.KeyChar = (char)13) txtPassword.Focus(); private void btnReset_Click(object sender, EventArgs e) txtUsername.Text = ; txtPassword.Text = ; private void button3_
11、Click(object sender, EventArgs e) MessageBox.Show(请取出你的卡); this.Hide(); private void Form1_Load(object sender, EventArgs e) (2)主窗体:通过主窗体可以进行用户的办理业务过程,进而实现相应的用户操作。具体实现的代码如下: private void button4_Click(object sender, EventArgs e) Form3 frm = new Form3(); frm.Show(); private void button2_Click(object s
12、ender, EventArgs e) Form6 frm = new Form6(); frm.Show(); this.Hide(); private void button5_Click(object sender, EventArgs e) Form4 frm = new Form4(); frm.Show(); this.Hide(); private void button1_Click(object sender, EventArgs e) Form5 frm = new Form5(); frm.Show(); this.Hide(); private void button3
13、_Click(object sender, EventArgs e) Form2 frm = new Form2(); frm.Show(); this.Hide(); (3)取款窗体:通过该界面用户可以从自己的账户中进行取款操作,但是取款的金额必须在规定范围内且为100元的整数倍,否则无法进行操作,当用户余额不足以提取时提示余额不足,其界面如图2-4所示:图2-4取款界面具体实现的代码如下:string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|数据库a.mdf;Integrated Securi
14、ty=True;Connect Timeout=30;User Instance=True; SqlConnection conn = new SqlConnection(connString); conn.Open(); string sql = SELECT * FROM UserInfor WHERE kahao= + Form1.jikahao + ; SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); decimal jine = Convert.
15、ToDecimal(dr4); decimal sqje = Convert.ToDecimal(textBox1.Text); decimal change = sqje; string presentname = Convert.ToString(dr1); string time = Convert.ToString(DateTime.Now); dr.Close(); if (jine sqje) if (sqje % 100 = 0) decimal leftmoney = jine - sqje; string ssql = Update UserInfor set yue = +
16、 leftmoney + where kahao = + Form1.jikahao + ; SqlCommand ccmd = new SqlCommand(ssql, conn); int i = ccmd.ExecuteNonQuery(); if (i = 1) if (i= 1) MessageBox.Show(请取款,30秒后自动关闭!); else MessageBox.Show(交易记录保存失败!); else MessageBox.Show(操作失败,重试!, 提示, MessageBoxButtons.OK, MessageBoxIcon.Error); else Mess
17、ageBox.Show(提供以百元为单位的金额,请正确输入!); textBox1.Text = ; else MessageBox.Show(余额不足!); textBox1.Text = ; conn.Close(); frmMain frm = new frmMain(); frm.Show(); this.Hide(); private void button2_Click(object sender, EventArgs e) frmMain frm = new frmMain(); frm.Show(); this.Hide(); (4)查询余额窗体:在业务类型窗体上点击余额查询,
18、可查询当前用户银行卡上的可用余额,其界面如图2-5所示:图2-5查询余额界面具体实现的代码如下:private void button1_Click(object sender, EventArgs e) frmMain frm = new frmMain(); frm.Show(); this.Hide(); private void button2_Click(object sender, EventArgs e) frmMain frm = new frmMain(); frm.Show(); this. Hide(); private void textBox1_TextChanged
19、(object sender, EventArgs e) private void Form6_Load(object sender, EventArgs e) string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|数据库a.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; SqlConnection conn = new SqlConnection(connString); conn.Open(); strin
20、g sql = select*from UserInfor where kahao= + Form1.jikahao + ; SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); label3.Text = dryue.ToString().Trim(); private void label3_Click(object sender, EventArgs e) (5)交费窗体:通过该界面用户可以给自家的水费进行交费,其界面如图2-6所示:图2-6 交费界面具
21、体实现的代码如下:private void button1_Click(object sender, EventArgs e) string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|数据库a.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; SqlConnection conn = new SqlConnection(connString); conn.Open(); string sql = SELECT *
22、FROM UserInfor WHERE kahao= +Form1 .jikahao + ; SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); decimal jine = Convert.ToDecimal(dr4); decimal sqje = Convert.ToDecimal(textBox1.Text); string presentname = Convert.ToString(dr4); string cardid = + Form1.j
23、ikahao + ; decimal change = sqje; string time = Convert.ToString(DateTime.Now); dr.Close(); if (jine sqje) MessageBox.Show(操作正在进行,请稍侯); decimal leftmoney = jine - sqje; string ssql = Update UserInfor set yue = + leftmoney + where kahao = + Form1.jikahao + ; SqlCommand ccmd = new SqlCommand(ssql, con
24、n); MessageBox.Show(交费成功!); textBox1.Text = ; int i = ccmd.ExecuteNonQuery(); if (i = 1) textBox1.Text = ; else MessageBox.Show(操作失败,请重试!, 提示:, MessageBoxButtons.OK, MessageBoxIcon.Error); else MessageBox.Show( 您的余额不足!); textBox1.Text = ; frmMain frm = new frmMain(); frm.Show(); MessageBox.Show(缴费成功
25、!); this.Hide(); private void button2_Click(object sender, EventArgs e) frmMain frm = new frmMain(); frm.Show(); this.Hide(); private void textBox1_TextChanged(object sender, EventArgs e) private void Form5_Load(object sender, EventArgs e) (6)转账窗体:通过该界面用户可以给除自己外的其他账户进行转账,其界面如图2-7所示:图2-7 转账界面具体实现的代码如
26、下: string connString = Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|数据库a.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; SqlConnection conn = new SqlConnection(connString); conn.Open(); string sql = SELECT * FROM UserInfor WHERE kahao= + Form1.jikahao + ; SqlCommand cm
27、d = new SqlCommand(sql, conn); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); decimal jine = Convert.ToDecimal(dr4); string wo = Convert.ToString(dr1); decimal sqje = Convert.ToDecimal(textBox2.Text); dr.Close(); if (jine sqje) MessageBox.Show(转账成功); decimal leftmoney = jine - sqje; string ssql
28、= Update UserInfor set yue = + leftmoney + where kahao = + Form1.jikahao + ; SqlCommand ccmd = new SqlCommand(ssql, conn); int i = ccmd.ExecuteNonQuery(); if (i = 1) string sqql = select * from UserInfor where kahao= + textBox1.Text.Trim() + ; SqlCommand cmdd = new SqlCommand(sqql, conn); SqlDataRea
29、der drr = cmdd.ExecuteReader(); if (drr.Read() decimal je = Convert.ToDecimal(drr4); string presentname = wo; string cardid = + Form1.jikahao + ; decimal change = sqje; string time = Convert.ToString(DateTime.Now); je = je + sqje; drr.Close(); string sqql1 = Update UserInfor set yue= + je + where ka
30、hao= + textBox1.Text.Trim() + ; SqlCommand cmmdd = new SqlCommand(sqql1, conn); int n = cmmdd.ExecuteNonQuery(); if (n = 1) MessageBox.Show(转账成功!); textBox1.Text = ; textBox2.Text = ; else MessageBox.Show(转账失败!); textBox1.Text = ; textBox2.Text = ; string sqll5 = insert UserInfor1(kahao,acctime,exchangemoney) values( + Form1.jikahao + , + presentname + , + change + ); SqlCommand cmd5 = new SqlCommand(sqll5, conn); else else MessageBox.Show(您的余额不足,请重新输入金额!); textBox2.Text = ; conn.Close(); private void button3_Click(object sender, EventArgs e) frmMain frm = new frmM