C#+Oracle:ATM自助取款机开发
2015-07-05 10:48
691 查看
系统的简要描述,主要功能 :通过ATM机,用户可以进行一些基本的功能实现:取款、存款、查询余额、转账、修改账户密码等。
这是一个Winform应用程序,有欢迎界面、登录界面、用户中心界面、注销界面、注册界面、查询余额界面、特定金额取款界面、自定义金额取款界面、存款界面、转账界面等。
首先,我安装的是Oracle11g express版本,并且用system.data.Oracleclient连接,连接字符串如下:
并且创建了两张表,一个是记录用户存款、取款、转账的信息表deposit表,另一个是记录用户个人信息表PI。除此之外,在两个表中,分别为主键创建一个序列,通过调用nextval实现主键的自动+1功能。
在注册界面中,关于限制用户输入,我选择的是正则表达式。比如,用户名为两位汉字、***为18位数字等。
以及验证用户是否已经注册过,通过检查PI表中的帐号是否存在。
在登录界面中,只需要帐号和密码是否于PI表中的帐号、密码匹配即可。除此之外还定义了一个全局变量,用于保存正确输入帐号,方便之后相关界面的调用。
在注销界面中,也只需要验证账户、密码是否与PI表中的帐号、密码相匹配即可。
在个人中心页面,主要就是几个按钮控件,用于跳转到相关事务操作界面中。
在查询余额界面,通过查找数据库中PI表中PI_account_money字段中的值,赋值与一个lable控件的text值,显出出来即可。
在取款界面中,通过执行select语句、update语句、insert语句,实现,PI表中PI_account_money字段的及时更新、deposit表中添加取款信息:
存款功能的实现与取款功能相似。
在转账界面中,首先确定转账帐号是否存在,且转账金额不能低于用户账户中的金额。其次,转账成功后要及时更新数据中的两张表。
以下是程序运行截图:
这个程序的实现很简单,用到的相关知识也没有难度,最后我还添加了一个管理员功能,用于显示两个表。
相关代码以上传。
这是一个Winform应用程序,有欢迎界面、登录界面、用户中心界面、注销界面、注册界面、查询余额界面、特定金额取款界面、自定义金额取款界面、存款界面、转账界面等。
首先,我安装的是Oracle11g express版本,并且用system.data.Oracleclient连接,连接字符串如下:
[code]string constring = "data source=XE;user=hr;password=hr;";
并且创建了两张表,一个是记录用户存款、取款、转账的信息表deposit表,另一个是记录用户个人信息表PI。除此之外,在两个表中,分别为主键创建一个序列,通过调用nextval实现主键的自动+1功能。
[code]create table deposit( D_account int, D_type nchar(2), D_money int, D_time nvarchar2(50), D_id int, constraint pk_Deposit primary key(D_id) ) ; create sequence Deposit_id increment by 1 start with 2 ;
[code]create table PI( P_name nvarchar2(20), P_idCard nvarchar2(50), P_password int, P_address nvarchar2(50), P_phone nvarchar2(20), P_account_money int, P_account int, P_id int, constraint fk_PI foreign key(P_id) REFERENCES DEPOSIT(D_id) ) ; create sequence PI_id increment by 1 start with 2 ;
在注册界面中,关于限制用户输入,我选择的是正则表达式。比如,用户名为两位汉字、***为18位数字等。
[code]#region 规定输入规则 if (textBox1.Visible!=Regex.IsMatch(textBox1.Text,"^[\u4E00-\u9FA5]{2,}$")) { textBox1.Visible = true; MessageBox.Show("姓名必须是两个汉字,请重新输入!"); textBox1.Text = ""; textBox1.Focus(); return; } if (textBox2.Visible != Regex.IsMatch(textBox2.Text, @"^\d{18}$")) { textBox2.Visible = true; MessageBox.Show("***号必须为18位数字,请重新输入"); textBox2.Text = ""; textBox2.Focus(); return; } if(textBox3.Visible!=Regex.IsMatch(textBox3.Text,@"^\d{6}$")) { textBox3.Visible = true; MessageBox.Show("密码必须是6位数字,请重新输入。"); textBox3.Text = ""; textBox3.Focus(); return; } if(textBox5.Visible!=Regex.IsMatch(textBox5.Text,@"^\d{6,}$")) { textBox5.Visible = true; MessageBox.Show("电话至少是6位数字,请重新输入!"); textBox5.Text = ""; textBox5.Focus(); return; } double Open_accounts = Convert.ToDouble(textBox6.Text); if(Open_accounts<100) { MessageBox.Show("开户金额不能少于100,请重新输入!"); textBox6.Text = ""; textBox6.Focus(); return; } #endregion
以及验证用户是否已经注册过,通过检查PI表中的帐号是否存在。
[code] #region 检查用户是否注册 //检查用户是否已注册 string constring = "data source=XE;user=hr;password=hr;"; OracleConnection conn = new OracleConnection(constring); OracleCommand com = conn.CreateCommand(); conn.Open(); com.CommandText = "SELECT * from PI where P_account="+textBox7.Text; OracleDataReader odr = com.ExecuteReader(); if (odr.HasRows) { MessageBox.Show("此账户已注册,请重新选号!"); textBox1.Text = ""; textBox1.Focus(); return; } else { OracleConnection conn1 = new OracleConnection(constring); conn1.Open(); string kk = DateTime.Now.ToString("yyyy-MM-dd"); OracleCommand com2 = conn.CreateCommand(); com2.CommandText = "insert into deposit values('" + textBox7.Text + "','" + '存' + "','" + textBox6.Text + "','" + kk + "',deposit_id.nextval)"; OracleCommand com1 = conn.CreateCommand(); com1.CommandText = "insert into PI values('"+ textBox1.Text + "','"+ textBox2.Text + "','"+ textBox3.Text + "','"+ textBox4.Text + "','"+ textBox5.Text + "','"+ textBox6.Text + "','"+ textBox7.Text + "',PI_id.nextval)"; try { com2.ExecuteNonQuery(); com1.ExecuteNonQuery(); conn.Close(); MessageBox.Show("注册成功"); } catch (Exception ee) { MessageBox.Show(ee.Message,"提示"); return; } } #endregion
在登录界面中,只需要帐号和密码是否于PI表中的帐号、密码匹配即可。除此之外还定义了一个全局变量,用于保存正确输入帐号,方便之后相关界面的调用。
在注销界面中,也只需要验证账户、密码是否与PI表中的帐号、密码相匹配即可。
在个人中心页面,主要就是几个按钮控件,用于跳转到相关事务操作界面中。
在查询余额界面,通过查找数据库中PI表中PI_account_money字段中的值,赋值与一个lable控件的text值,显出出来即可。
在取款界面中,通过执行select语句、update语句、insert语句,实现,PI表中PI_account_money字段的及时更新、deposit表中添加取款信息:
[code] "select P_account_money from PI where P_account=" + account; "update PI set P_account_money=P_account_money-"+textBox1.Text+" where P_account='" + account + "'"; "insert into deposit values('" + account + "','" + '取' + "','"+textBox1.Text+ "','" + kk + "',Deposit_id.nextval)";
存款功能的实现与取款功能相似。
在转账界面中,首先确定转账帐号是否存在,且转账金额不能低于用户账户中的金额。其次,转账成功后要及时更新数据中的两张表。
[code]string constring = "data source=XE;user=hr;password=hr;"; OracleConnection conn = new OracleConnection(constring); OracleCommand com = conn.CreateCommand(); OracleCommand com4 = conn.CreateCommand(); conn.Open(); com.CommandText = "select P_account_money from PI where P_account='" + textBox1.Text + "'"; string D_s = Login.s; com4.CommandText = "select P_account_money from PI where P_account=" +D_s; string kk = DateTime.Now.ToString("yyyy-MM-dd"); decimal money = (decimal)com4.ExecuteScalar(); money = Convert.ToInt32(money); try { OracleDataReader odr = com.ExecuteReader(); if (money >= Convert.ToInt32(textBox2.Text)) { if (odr.HasRows) { OracleCommand com1 = conn.CreateCommand(); OracleCommand com2 = conn.CreateCommand(); OracleCommand com3 = conn.CreateCommand(); com1.CommandText = "update PI set P_account_money=P_account_money+'" + textBox2.Text + "' where P_account='" + textBox1.Text + "'"; com2.CommandText = "update PI set P_account_money=P_account_money-'" + textBox2.Text + "' where P_account='" + D_s + "'"; com3.CommandText = "insert into deposit values('" + D_s + "','" + '转' + "','" + textBox2.Text + "','" + kk + "',Deposit_id.nextval)"; com1.ExecuteNonQuery(); com2.ExecuteNonQuery(); com3.ExecuteNonQuery(); MessageBox.Show("转账成功!"); conn.Close(); } else { MessageBox.Show("此用户不存在"); textBox1.Text = ""; textBox1.Focus(); } } else { MessageBox.Show("余额不足!"); } } catch(Exception ee) { MessageBox.Show(ee.Message); return; }
以下是程序运行截图:
这个程序的实现很简单,用到的相关知识也没有难度,最后我还添加了一个管理员功能,用于显示两个表。
相关代码以上传。
相关文章推荐
- oracle 中用pl/sql编辑记录里面的值 for update
- oracle 中distinct 命令
- oracle中的日期加减法
- windows安装Oracle10G
- oracle中exp,imp的使用详解
- oracle中exp,imp的使用详解
- Oracle 注释
- Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法
- oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)
- sql2005与oracle服务器做链接服务器
- oracle vm virtualbox右ctrl切换显示模式
- 先记下来回头再看20150704(关于oracle导入数据)
- Oracle 跨库 查询 复制表数据 分布式查询
- Oracle executeBatch异常:ArrayIndexOutOfBoundsException
- ubuntu 14.04 安装 oracle 11g
- oracle表分区详解
- Python使用cx_Oracle模块连接操作Oracle数据库
- oracle优化器
- oracle直方图
- 安装oracle时swap过小安装失败