最近用的无线上网,网速很慢,而且要改注册表伪装才能上,网页上的一些功能会有点问题,没办法,只能尽量写点儿重要的了:(

这个系统写了一半,核心的是写完了,还剩几个客户层的.可惜我的ATM模拟系统总是有点出错,一直检查不出在哪里,可能我太菜吧:)

系统采用的是客户端, 业务逻辑层(采用COM+组件技术), 和数据库层的三层结构. 实际中的银行系统至少要5层机构. 这也是比较规范项目的一种通用分层方法, 做这个当中我学会了如何使用类库, 如何注册组件, 如何有效的进行分层, 真正的逻辑层到底是什么含义等等. 印象深刻,收获彼多.

1.类库的使用.
类库实际上是一个包含各种类,接口,值类型组成的库.它本身就是一个项目,通过编辑和注册后供同解决方案中的其他程序集调用.所以,他也主要用来实现逻辑层.
比如我的系统,就是在类库的命名空间里定义了一个接口,然后再定义一个类来实现这个接口.
去除接口函数和类中相应实现的定义,我把主要的贴出来:
using System;
using System.EnterpriseServices;    //COM+组件服务
using System.Data;
using System.Data.SqlClient;
using System.Collections;    //链表
using System.Windows.Forms;

//配置Bank组件的安全性,并且说明组件的激活方式是服务器激活
[assembly:ApplicationAccessControl(
AccessChecksLevel 
= AccessChecksLevelOption.ApplicationComponent,
Authentication 
= AuthenticationOption.Call,
ImpersonationLevel 
= ImpersonationLevelOption.Delegate
)]

[assembly:ApplicationActivation(ActivationOption.Server)]

namespace Bank
{
    
//定义所需的所有操作
    
    
//BankOperation 接口定义
    public interface BankOperation
    {
.. .. ..
    }

    
//支持事务
    [Transaction(TransactionOption.Supported)]
    
    
//使用对象池,最小共享容量是10,最大共享容量是50,创建时限是30秒
    [ObjectPooling(true1050, CreationTimeout = 30000)]

    
//使用及时激活JITA
    [JustInTimeActivation]

    
//定义构造字符串
    [ConstructionEnabled(
         Default 
= "data source=localhost;initial catalog=bank;user id=sa;password=;"
    )]

    
//定义安全角色
    [SecurityRole("bank"true)]
    [ComponentAccessControl]

    
//Bank类的定义
    public class Bank : ServicedComponent, BankOperation
    {
.. .. ..
    }

}

2.要使类库能够正常使用,必需要配置组件的安全性,这样组件注册时才不会有警告.
上面的AccessChecksLevel, Authentication, ImpersonationLevel 都是定义各个方面的值.

3.也许初学者看着上面的说明会提出这个接口定义的没有必要?
实际上是大大有必要的.我们要养成对复杂的程序定义接口的习惯,先在分析报告里把所有要实现的功能都列举出来,然后定义接口,再用类实现.这样就不会遗漏,也利于长时间的开发周期.

4.上面使用了Transaction等等的一系列支持.
做这个系统时,我最大的感受就是太缺乏其他的系统和网络方面的知识.比如上面的对象池,JITA,安全角色等等,我都不太懂,做这个的时候逼迫自己去学.
这种感觉很好.这是一种编程到一定阶段自己迫切需要去吸收某种知识的状态.就象一个VB程序员要去学VC,不应该是听别人说VC怎么怎么好而去学,而是明显的感觉到VB已经不能满足自己的编程要求了而去学.这才是正确的道路.
而我以前,只是自己"想去学什么",而不是"需要去学什么".我觉得,这算是真正进入电脑殿堂的一个入门吧:)

5.要使用组件,必须先编译该组件,并为该组件生成一个强名(Strong Name).然后在类库的说明文件AssemblyInfo.cs里面引用.
强名实际上就是一个用于签名的密钥,用来给程序集签名.这是使用COM+组件的必备条件.同时,所有使用COM+组件的程序集必须引用System.EnterpriseServices,这样才能使用COM+服务.所有的COM+中的类也必须继承ServicedComponent ,它是所有COM+类的基类.

6.三层结构的真正含义.
我以前理解的比较不正确,以为应用层可以不放置代码.这个是错误的.所谓应用层和逻辑层,主要是我们要把核心的逻辑,需要经常改动的逻辑等等放入逻辑层,应用层里的代码核心部分必须调用逻辑层的方法来实现.如果应用层里有一个重要实现是用自己的代码实现的,那么这个方法可能要放到逻辑层中.

7.应用层里的细微实现代码多种多样,但是在.NET这种真正面向对象的语言里,我们要尽量减少全局变量,多用方法返回对象赋予局部变量来实现.

这里贴出逻辑层核心文件:
using System;
using System.EnterpriseServices;    //COM+组件服务
using System.Data;
using System.Data.SqlClient;
using System.Collections;    //链表
using System.Windows.Forms;

//配置Bank组件的安全性,并且说明组件的激活方式是服务器激活
[assembly:ApplicationAccessControl(
AccessChecksLevel 
= AccessChecksLevelOption.ApplicationComponent,
Authentication 
= AuthenticationOption.Call,
ImpersonationLevel 
= ImpersonationLevelOption.Delegate
)]

[assembly:ApplicationActivation(ActivationOption.Server)]

namespace Bank
{
    
//定义所需的所有操作
    
    
//BankOperation 接口定义
    public interface BankOperation
    {
        
bool CreateAccount(string accountNo, string customerID, string password, decimal balance);    //生成新的账号

        
bool CreateCard(string cardNo, string accountNo, string password);    //生成新的卡号

        
bool CreateCustomer(string customerID, string name, string gender, DateTime birthday, string address, string phone);    //生成新的客户

        
void DeleteAccount(string accountNo);    //删除账号

        
void DeleteCard(string cardNo);    //删除卡号

        
void DeleteCustomer(string customerID);    //删除客户

        
bool DepositByAccountNo(string accountNo, decimal amount);    //利用账号存款

        
bool DepositByCardNo(string cardNo, decimal amount);    //利用卡号存款

        ArrayList GetAllAccounts();    
//获取所有的账号

        ArrayList GetAllAccountsByCustomerID(
string customerID);    //获取指定客户的所有账号

        ArrayList GetAllCards();    
//获取所有的卡号

        ArrayList GetAllCardsByAccountNo(
string accountNo);    //获取指定账号的所有卡号

        ArrayList GetAllCustomers();    
//获取所有的客户

        
decimal QueryByAccountNo(string accountNo);    //利用账号查询余额

        
decimal QueryByCardNo(string cardNo);    //利用卡号查询余额

        
bool TransferByAccountNo(string fromAccountNo, string toAccountNo, decimal amount);    //利用账号进行转账

        
bool TransferByCardNo(string fromCardNo, string toCardNo, decimal amount);    //利用卡号进行转账

        
bool UpdateAccountPassword(string accountNo, string pwd);    //更改账号口令

        
bool UpdateCardPassword(string cardNo, string pwd);    //更改卡号口令

        
bool VerifyAccountNo(string accountNo, string pwd);    //验证账号

        
bool VerifyCardNo(string cardNo, string pwd);    //验证卡号

        
bool WithdrawByAccountNo(string accountNo, decimal amount);    //利用账号取款

        
bool WithdrawByCardNo(string cardNo, decimal amount);    //利用卡号进行取款
    }

    
//支持事务
    [Transaction(TransactionOption.Supported)]
    
    
//使用对象池,最小共享容量是10,最大共享容量是50,创建时限是30秒
    [ObjectPooling(true1050, CreationTimeout = 30000)]

    
//使用及时激活JITA
    [JustInTimeActivation]

    
//定义构造字符串
    [ConstructionEnabled(
         Default 
= "data source=localhost;initial catalog=bank;user id=sa;password=;"
    )]

    
//定义安全角色
    [SecurityRole("bank"true)]
    [ComponentAccessControl]

    
//Bank类的定义
    public class Bank : ServicedComponent, BankOperation
    {
        
private string connString;

        
public Bank()
        {
        }

        
//重置 Construct() 方法
        protected override void Construct(string s)
        {
            
base.Construct (s);
            connString 
= s;
        }

        
//GetConnection() 方法用配置好的连接字符串从数据库获取数据库连接
        private SqlConnection GetConnection()
        {
            SqlConnection conn 
= new SqlConnection();
            conn.ConnectionString 
= connString;
            
return conn;
        }

        
//运行查询返回DataReader
        private SqlDataReader GetDataReader(string cmdString, SqlConnection conn)
        {
            SqlCommand comm 
= new SqlCommand(cmdString, conn);
            SqlDataReader dr 
= comm.ExecuteReader();
            
return dr;
        }

        
//只执行语句,无返回
        private void Update(string cmdString, SqlConnection conn)
        {
            SqlCommand comm 
= new SqlCommand(cmdString, conn);
            comm.ExecuteNonQuery();
        }

        
//根据卡号查询账号
        private string QueryAccountNo(string cardNo)
        {
            
string result;
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
string cmdString = "select AccountNo from Card where CardNo='" + cardNo + "'";
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            
if (dr.Read())
            {
                result 
= dr.GetString(0);
            }
            
else
            {
                result 
= "error";
            }
            dr.Close();
            conn.Close();
            
return result;
        }

        
//判断账号是否存在
        private bool AccountNoExists(string accountNo)
        {
            
bool result;
            
string cmdString = "select AccountNo from Account where AccountNo='" + accountNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            
if (dr.Read())
            {
                result 
= true;
            }
            
else
            {
                result 
= false;
            }
            dr.Close();
            conn.Close();
            
return result;
        }

        
#region BankOperation 成员

        
public bool CreateAccount(string accountNo, string customerID, string password, decimal balance)
        {
            ArrayList list 
= this.GetAllAccounts();
            
if (list.Contains(accountNo))
            {
                
return false;
            }
            
string cmdString = "insert into Account values('" + accountNo + "','" + customerID + "','" + password + "'," + balance + ",'" + DateTime.Today + "')";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
            
return true;
        }

        
public bool CreateCard(string cardNo, string accountNo, string password)
        {
            ArrayList list 
= this.GetAllCards();
            
if (list.Contains(cardNo))
            {
                
return false;
            }
            
string cmdString = "insert into Card values('" + cardNo + "','" + accountNo + "','" + password + "')";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
            
return true;
        }

        
public bool CreateCustomer(string customerID, string name, string gender, DateTime birthday, string address, string phone)
        {
            ArrayList list 
= this.GetAllCustomers();
            
if (list.Contains(customerID))
            {
                
return false;
            }
            
string cmdString = "insert into Customer values('" + customerID + "',";
            
if (name != null)
            {
                cmdString 
+= "'" + name + "',";
            }
            
else
            {
                cmdString 
+= "null,";
            }
            
if (gender != null)
            {
                cmdString 
+= "'" + gender + "',";
            }
            
else
            {
                cmdString 
+= "null,";
            }
            
if (birthday == DateTime.MinValue)
            {
                cmdString 
+= "null,";
            }
            
else
            {
                cmdString 
+= "'" + birthday + "',";
            }
            
if (address != null)
            {
                cmdString 
+= "'" + address + "',";
            }
            
else
            {
                cmdString 
+= "null,";
            }
            
if (phone != null)
            {
                cmdString 
+= "'" + phone + "'";
            }
            
else
            {
                cmdString 
+= "null";
            }
            cmdString 
+= ")";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
            
return true;
        }

        
public void DeleteAccount(string accountNo)
        {
            
string cmdString = "delete from Account where AccountNo='" + accountNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
        }

        
public void DeleteCard(string cardNo)
        {
            
string cmdString = "delete from Card where CardNo='" + cardNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
        }

        
public void DeleteCustomer(string customerID)
        {
            
string cmdString = "delete from Customer where CustomerID='" + customerID + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
        }

        
public bool DepositByAccountNo(string accountNo, decimal amount)
        {
            
if (!this.AccountNoExists(accountNo))
            {
                
return false;
            }
            
string cmdString = "update Account set balance=balance+" + amount + " where AccountNo='" + accountNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
            
return true;
        }

        
public bool DepositByCardNo(string cardNo, decimal amount)
        {
            
string accountNo = this.QueryAccountNo(cardNo);
            
if (accountNo == "error")
            {
                
return false;
            }
            
return this.DepositByAccountNo(accountNo, amount);
        }

        
public ArrayList GetAllCustomers()
        {
            ArrayList arrayCustomers 
= new ArrayList();
            SqlConnection conn 
= this.GetConnection();
            
string cmdString = "select CustomerID from Customer";
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            
while (dr.Read())
            {
                
string customerID = dr.GetString(0);
                arrayCustomers.Add(customerID);
            }
            dr.Close();
            conn.Close();
            
return arrayCustomers;
        }

        
public ArrayList GetAllAccounts()
        {
            
string cmdString = "select AccountNo from Account";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            ArrayList list 
= new ArrayList();
            
while (dr.Read())
            {
                list.Add(dr.GetString(
0));
            }
            dr.Close();
            conn.Close();
            
return list;
        }

        
public ArrayList GetAllAccountsByCustomerID(string customerID)
        {
            
string cmdString = "select AccountNo from Account where CustomerID='" + customerID + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            ArrayList list 
= new ArrayList();
            
while (dr.Read())
            {
                list.Add(dr.GetString(
0));
            }
            dr.Close();
            conn.Close();
            
return list;
        }

        
public ArrayList GetAllCards()
        {
            
string cmdString = "select CardNo from Card";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            ArrayList list 
= new ArrayList();
            
while (dr.Read())
            {
                list.Add(dr.GetString(
0));
            }
            dr.Close();
            conn.Close();
            
return list;
        }

        
public ArrayList GetAllCardsByAccountNo(string accountNo)
        {
            
string cmdString = "select CardNo from Card where AccountNo='" + accountNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            ArrayList list 
= new ArrayList();
            
while (dr.Read())
            {
                list.Add(dr.GetString(
0));
            }
            dr.Close();
            conn.Close();
            
return list;
        }

        
public decimal QueryByAccountNo(string accountNo)
        {
            
string cmdString = "select Balance from Account where AccountNo='" + accountNo + "'";
            
decimal balance = -1;
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            
if (dr.Read())
            {
                balance 
= dr.GetDecimal(0);
            }
            
else
            {
                balance 
= -1;
            }
            dr.Close();
            conn.Close();
            
return balance;
        }

        
public decimal QueryByCardNo(string cardNo)
        {
            
decimal balance = -1;
            
string accountNo;
            accountNo 
= this.QueryAccountNo(cardNo);
            
if (accountNo == "error")
            {
                balance 
= -1;
            }
            
else
            {
                balance 
= this.QueryByAccountNo(accountNo);
            }
            
return balance;
        }

        
public bool TransferByAccountNo(string fromAccountNo, string toAccountNo, decimal amount)
        {
            
bool result;
            
if (this.AccountNoExists(fromAccountNo) && this.AccountNoExists(toAccountNo))
            {
                
string cmdString = "select balance from Account where AccountNo='" + fromAccountNo + "'";
                SqlConnection conn 
= this.GetConnection();
                conn.Open();
                SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
                dr.Read();
                
decimal balance = dr.GetDecimal(0);
                dr.Close();
                
if(balance < amount)
                {
                    result 
= false;
                }
                
else
                {
                    cmdString 
= "update Account set balance=balance-" + amount + " where AccountNo='" + fromAccountNo + "'";
                    
this.Update(cmdString, conn);
                    cmdString 
= "update Account set balance=balance+" + amount + " where AccountNo='" + toAccountNo + "'";
                    
this.Update(cmdString, conn);
                    result 
= true;
                }
                conn.Close();
            }
            
else
            {
                result 
= false;
            }
            
return result;
        }

        
public bool TransferByCardNo(string fromCardNo, string toCardNo, decimal amount)
        {
            
bool result;
            
string fromAccountNo = this.QueryAccountNo(fromCardNo);
            
string toAccountNo = this.QueryAccountNo(toCardNo);
            
if (fromAccountNo == "error" || toAccountNo == "error")
            {
                result 
= false;
            }
            
else
            {
                result 
= this.TransferByAccountNo(fromAccountNo, toAccountNo, amount);
            }
            
return result;
        }

        
public bool UpdateAccountPassword(string accountNo, string pwd)
        {
            
if (!this.AccountNoExists(accountNo))
            {
                
return false;
            }
            
string cmdString = "update Account set Password='" + pwd + "' where AccountNo='" + accountNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
            
return true;
        }

        
public bool UpdateCardPassword(string cardNo, string pwd)
        {
            
if (this.QueryAccountNo(cardNo) == "error")
            {
                
return false;
            }
            
string cmdString = "update Card set Password='" + pwd + "' where CardNo='" + cardNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            
this.Update(cmdString, conn);
            conn.Close();
            
return true;
        }

        
public bool VerifyAccountNo(string accountNo, string pwd)
        {
            
bool result;
            
string cmdString = "select AccountNo from Account where AccountNo='" + accountNo + "' and password='" + pwd + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            
if (dr.Read())
            {
                result 
= true;
            }
            
else
            {
                result 
= false;
            }
            dr.Close();
            conn.Close();
            
return result;                
        }

        
public bool VerifyCardNo(string cardNo, string pwd)
        {
            
bool result;
            
string cmdString = "select CardNo from Card where CardNo='" + cardNo + "' and password='" + pwd + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            
if (dr.Read())
            {
                result 
= true;
            }
            
else
            {
                result 
= false;
            }
            dr.Close();
            conn.Close();
            
return result;
        }

        
public bool WithdrawByAccountNo(string accountNo, decimal amount)
        {
            
bool result;
            
string cmdString = "select balance from Account where AccountNo='" + accountNo + "'";
            SqlConnection conn 
= this.GetConnection();
            conn.Open();
            SqlDataReader dr 
= this.GetDataReader(cmdString, conn);
            dr.Read();
            
decimal balance = dr.GetDecimal(0);
            dr.Close();
            
if (amount > balance)
            {
                result 
= false;
            }
            
else
            {
                cmdString 
= "update Account set balance=balance-" + amount + " where AccountNo='" + accountNo + "'";
                
this.Update(cmdString, conn);
                result 
= true;
            }
            conn.Close();
            
return result;
        }

        
public bool WithdrawByCardNo(string cardNo, decimal amount)
        {
            
bool result;
            
string accountNo = this.QueryAccountNo(cardNo);
            
if (accountNo == "error")
            {
                result 
= false;
            }
            
else
            {
                result 
= this.WithdrawByAccountNo(accountNo, amount);
            }
            
return result;
        }

        
#endregion

    }

}

应用层一个比较高效的应用层:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using Bank;

namespace ATM
{
    
/// <summary>
    
/// ATM 的摘要说明。
    
/// </summary>
    public class ATM : System.Windows.Forms.Form
    {
        
private System.Windows.Forms.Button btnQueryBalance;
        
private System.Windows.Forms.Button btnWithdraw;
        
private System.Windows.Forms.Button btnDeposit;
        
private System.Windows.Forms.Button btnTransfer;
        
private System.Windows.Forms.Button btnChangePassword;
        
private System.Windows.Forms.GroupBox groupBox1;
        
private System.Windows.Forms.Label label1;
        
private System.Windows.Forms.Label label2;
        
private System.Windows.Forms.TextBox txtCardNo;
        
private System.Windows.Forms.TextBox txtPassword;
        
private System.Windows.Forms.Button btnOkPassword;
        
private System.Windows.Forms.GroupBox groupBox2;
        
private System.Windows.Forms.Button btnOK;
        
private System.Windows.Forms.Button btnReInput;
        
private System.Windows.Forms.Button btnExit;
        
private System.Windows.Forms.TextBox txt;
        
private System.Windows.Forms.RichTextBox richTxt;
        
private System.Windows.Forms.Label label3;

        
private bool isVerified;
        
private bool isWithdraw;
        
private bool isDeposit;
        
private bool isTransfer;
        
private bool isUpdatePassword;

        
private bool isTransfering;
        
//private string transferCardNo;
        
//private decimal transferAmount;
        private Bank.Bank bank;
        
/// <summary>
        
/// 必需的设计器变量。
        
/// </summary>
        private System.ComponentModel.Container components = null;

        
public ATM()
        {
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();
            
this.isVerified = false;
            
this.isWithdraw = false;
            
this.isDeposit = false;
            
this.isTransfer = false;
            
this.isUpdatePassword = false;
            
this.isTransfering = false;
            
this.bank = new Bank.Bank();
        }

        
/// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>
        protected override void Dispose( bool disposing )
        {
            
if( disposing )
            {
                
if(components != null)
                {
                    components.Dispose();
                }
            }
            
base.Dispose( disposing );
        }

        
static void Main()
        {
            Application.Run(
new ATM());
        }

        
#region Windows 窗体设计器生成的代码
        
/// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>
        private void InitializeComponent()
        {
            
this.btnQueryBalance = new System.Windows.Forms.Button();
            
this.btnWithdraw = new System.Windows.Forms.Button();
            
this.btnDeposit = new System.Windows.Forms.Button();
            
this.btnTransfer = new System.Windows.Forms.Button();
            
this.btnChangePassword = new System.Windows.Forms.Button();
            
this.groupBox1 = new System.Windows.Forms.GroupBox();
            
this.label1 = new System.Windows.Forms.Label();
            
this.label2 = new System.Windows.Forms.Label();
            
this.txtCardNo = new System.Windows.Forms.TextBox();
            
this.txtPassword = new System.Windows.Forms.TextBox();
            
this.btnOkPassword = new System.Windows.Forms.Button();
            
this.groupBox2 = new System.Windows.Forms.GroupBox();
            
this.btnOK = new System.Windows.Forms.Button();
            
this.btnReInput = new System.Windows.Forms.Button();
            
this.btnExit = new System.Windows.Forms.Button();
            
this.txt = new System.Windows.Forms.TextBox();
            
this.richTxt = new System.Windows.Forms.RichTextBox();
            
this.label3 = new System.Windows.Forms.Label();
            
this.groupBox1.SuspendLayout();
            
this.groupBox2.SuspendLayout();
            
this.SuspendLayout();
            
// 
            
// btnQueryBalance
            
// 
            this.btnQueryBalance.Location = new System.Drawing.Point(24112);
            
this.btnQueryBalance.Name = "btnQueryBalance";
            
this.btnQueryBalance.TabIndex = 0;
            
this.btnQueryBalance.Text = "查询余额";
            
this.btnQueryBalance.Click += new System.EventHandler(this.btnQueryBalance_Click);
            
// 
            
// btnWithdraw
            
// 
            this.btnWithdraw.Location = new System.Drawing.Point(24160);
            
this.btnWithdraw.Name = "btnWithdraw";
            
this.btnWithdraw.TabIndex = 1;
            
this.btnWithdraw.Text = "取款";
            
this.btnWithdraw.Click += new System.EventHandler(this.btnWithdraw_Click);
            
// 
            
// btnDeposit
            
// 
            this.btnDeposit.Location = new System.Drawing.Point(24208);
            
this.btnDeposit.Name = "btnDeposit";
            
this.btnDeposit.TabIndex = 2;
            
this.btnDeposit.Text = "存款";
            
this.btnDeposit.Click += new System.EventHandler(this.btnDeposit_Click);
            
// 
            
// btnTransfer
            
// 
            this.btnTransfer.Location = new System.Drawing.Point(24256);
            
this.btnTransfer.Name = "btnTransfer";
            
this.btnTransfer.TabIndex = 3;
            
this.btnTransfer.Text = "转账";
            
this.btnTransfer.Click += new System.EventHandler(this.btnTransfer_Click);
            
// 
            
// btnChangePassword
            
// 
            this.btnChangePassword.Location = new System.Drawing.Point(24304);
            
this.btnChangePassword.Name = "btnChangePassword";
            
this.btnChangePassword.TabIndex = 4;
            
this.btnChangePassword.Text = "修改口令";
            
this.btnChangePassword.Click += new System.EventHandler(this.btnChangePassword_Click);
            
// 
            
// groupBox1
            
// 
            this.groupBox1.Controls.Add(this.btnOkPassword);
            
this.groupBox1.Controls.Add(this.txtPassword);
            
this.groupBox1.Controls.Add(this.txtCardNo);
            
this.groupBox1.Controls.Add(this.label2);
            
this.groupBox1.Controls.Add(this.label1);
            
this.groupBox1.Location = new System.Drawing.Point(15216);
            
this.groupBox1.Name = "groupBox1";
            
this.groupBox1.Size = new System.Drawing.Size(408112);
            
this.groupBox1.TabIndex = 5;
            
this.groupBox1.TabStop = false;
            
this.groupBox1.Text = "卡号信息";
            
// 
            
// label1
            
// 
            this.label1.AutoSize = true;
            
this.label1.Location = new System.Drawing.Point(2432);
            
this.label1.Name = "label1";
            
this.label1.Size = new System.Drawing.Size(3517);
            
this.label1.TabIndex = 0;
            
this.label1.Text = "卡号:";
            
// 
            
// label2
            
// 
            this.label2.AutoSize = true;
            
this.label2.Location = new System.Drawing.Point(2472);
            
this.label2.Name = "label2";
            
this.label2.Size = new System.Drawing.Size(3517);
            
this.label2.TabIndex = 1;
            
this.label2.Text = "口令:";
            
// 
            
// txtCardNo
            
// 
            this.txtCardNo.Location = new System.Drawing.Point(7230);
            
this.txtCardNo.Name = "txtCardNo";
            
this.txtCardNo.Size = new System.Drawing.Size(30421);
            
this.txtCardNo.TabIndex = 2;
            
this.txtCardNo.Text = "";
            
// 
            
// txtPassword
            
// 
            this.txtPassword.Location = new System.Drawing.Point(7270);
            
this.txtPassword.Name = "txtPassword";
            
this.txtPassword.Size = new System.Drawing.Size(20021);
            
this.txtPassword.TabIndex = 3;
            
this.txtPassword.Text = "";
            
// 
            
// btnOkPassword
            
// 
            this.btnOkPassword.Location = new System.Drawing.Point(29672);
            
this.btnOkPassword.Name = "btnOkPassword";
            
this.btnOkPassword.TabIndex = 4;
            
this.btnOkPassword.Text = "确认口令";
            
this.btnOkPassword.Click += new System.EventHandler(this.btnOkPassword_Click);
            
// 
            
// groupBox2
            
// 
            this.groupBox2.Controls.Add(this.label3);
            
this.groupBox2.Controls.Add(this.richTxt);
            
this.groupBox2.Controls.Add(this.txt);
            
this.groupBox2.Location = new System.Drawing.Point(152144);
            
this.groupBox2.Name = "groupBox2";
            
this.groupBox2.Size = new System.Drawing.Size(408216);
            
this.groupBox2.TabIndex = 6;
            
this.groupBox2.TabStop = false;
            
// 
            
// btnOK
            
// 
            this.btnOK.Location = new System.Drawing.Point(584216);
            
this.btnOK.Name = "btnOK";
            
this.btnOK.TabIndex = 7;
            
this.btnOK.Text = "确认";
            
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
            
// 
            
// btnReInput
            
// 
            this.btnReInput.Location = new System.Drawing.Point(584256);
            
this.btnReInput.Name = "btnReInput";
            
this.btnReInput.TabIndex = 8;
            
this.btnReInput.Text = "重新输入";
            
this.btnReInput.Click += new System.EventHandler(this.btnReInput_Click);
            
// 
            
// btnExit
            
// 
            this.btnExit.Location = new System.Drawing.Point(584296);
            
this.btnExit.Name = "btnExit";
            
this.btnExit.TabIndex = 9;
            
this.btnExit.Text = "操作结束";
            
this.btnExit.Click += new System.EventHandler(this.btnExit_Click);
            
// 
            
// txt
            
// 
            this.txt.Location = new System.Drawing.Point(2456);
            
this.txt.Name = "txt";
            
this.txt.ReadOnly = true;
            
this.txt.Size = new System.Drawing.Size(36021);
            
this.txt.TabIndex = 0;
            
this.txt.Text = "";
            
this.txt.TextChanged += new System.EventHandler(this.txt_TextChanged);
            
// 
            
// richTxt
            
// 
            this.richTxt.Location = new System.Drawing.Point(888);
            
this.richTxt.Name = "richTxt";
            
this.richTxt.Size = new System.Drawing.Size(392120);
            
this.richTxt.TabIndex = 1;
            
this.richTxt.Text = "";
            
// 
            
// label3
            
// 
            this.label3.AutoSize = true;
            
this.label3.Location = new System.Drawing.Point(2424);
            
this.label3.Name = "label3";
            
this.label3.Size = new System.Drawing.Size(017);
            
this.label3.TabIndex = 2;
            
// 
            
// ATM
            
// 
            this.AutoScaleBaseSize = new System.Drawing.Size(614);
            
this.ClientSize = new System.Drawing.Size(672381);
            
this.Controls.Add(this.btnExit);
            
this.Controls.Add(this.btnReInput);
            
this.Controls.Add(this.btnOK);
            
this.Controls.Add(this.groupBox2);
            
this.Controls.Add(this.groupBox1);
            
this.Controls.Add(this.btnChangePassword);
            
this.Controls.Add(this.btnTransfer);
            
this.Controls.Add(this.btnDeposit);
            
this.Controls.Add(this.btnWithdraw);
            
this.Controls.Add(this.btnQueryBalance);
            
this.Name = "ATM";
            
this.Text = "ATM";
            
this.Load += new System.EventHandler(this.ATM_Load);
            
this.groupBox1.ResumeLayout(false);
            
this.groupBox2.ResumeLayout(false);
            
this.ResumeLayout(false);

        }
        
#endregion

        
private void ATM_Load(object sender, System.EventArgs e)
        {
        
        }

        
private void btnQueryBalance_Click(object sender, System.EventArgs e)
        {
            
if (!this.isVerified)
            {
                
this.richTxt.AppendText("请先验证卡号和口令!");
            }
            
else
            {
                
decimal balance;
                
string cardNo = this.txtCardNo.Text;
                balance 
= bank.QueryByCardNo(cardNo);
                
this.richTxt.AppendText("你的余额是:" + balance.ToString() + "\r\n");
            }
        }

        
private void btnWithdraw_Click(object sender, System.EventArgs e)
        {
            
if (this.isVerified)
            {
                label3.Text 
= "请输入取款金额:";
                
this.txt.ReadOnly = false;

                
this.isWithdraw = true;
                
this.isTransfer = false;
                
this.isDeposit = false;
                
this.isUpdatePassword = false;
            }
            
else
            {
                
this.richTxt.AppendText("请先验证卡号和口令!");
                label3.Text 
= "";
                
this.txt.ReadOnly = true;
            }
        }

        
private void btnDeposit_Click(object sender, System.EventArgs e)
        {
            
if (isVerified)
            {
                label3.Text 
= "请输入存款金额:";
                
this.txt.ReadOnly = false;

                
this.isWithdraw = false;
                
this.isTransfer = false;
                
this.isDeposit = true;
                
this.isUpdatePassword = false;
            }
            
else
            {
                
this.richTxt.AppendText("请先验证卡号和口令:");
                
this.label3.Text = "";
                
this.txt.ReadOnly = true;
            }
        }

        
private void btnTransfer_Click(object sender, System.EventArgs e)
        {
            
if (isVerified)
            {
                label3.Text 
= "请输入账号:";
                
this.txt.ReadOnly = false;

                
this.isWithdraw = false;
                
this.isTransfer = true;
                
this.isDeposit = false;
                
this.isUpdatePassword = false;
            }
            
else
            {
                
this.richTxt.AppendText("请先验证卡号和口令:");
                
this.label3.Text = "";
                
this.txt.ReadOnly = true;
            }
        }

        
private void btnChangePassword_Click(object sender, System.EventArgs e)
        {
            
if (isVerified)
            {
                label3.Text 
= "请输入新的口令:";
                
this.txt.ReadOnly = false;

                
this.isWithdraw = false;
                
this.isTransfer = false;
                
this.isDeposit = false;
                
this.isUpdatePassword = true;
            }
            
else
            {
                
this.richTxt.AppendText("请先验证卡号和口令:");
                
this.label3.Text = "";
                
this.txt.ReadOnly = true;
            }
        }

        
private void btnOK_Click(object sender, System.EventArgs e)
        {
            
if (this.isWithdraw)
            {
                
string cardNo = this.txtCardNo.Text;
                
decimal amount = decimal.Parse(this.txt.Text);
                
if (bank.WithdrawByCardNo(cardNo, amount))
                {
                    
this.richTxt.AppendText("取款操作成功!您所取金额是:" + amount.ToString() + "\r\n");
                }
                
else
                {
                    
this.richTxt.AppendText("取款操作失败!\r\n");
                    
this.richTxt.AppendText("您的存款余额可能不足!\r\n");
                }
                
this.isWithdraw = false;
            }

            
if (this.isDeposit)
            {
                
string cardNo = this.txtCardNo.Text;
                
decimal amount = decimal.Parse(this.txt.Text);
                
if (bank.DepositByCardNo(cardNo, amount))
                {
                    
this.richTxt.AppendText("存款操作成功!您所存金额是:" + amount.ToString() + "\r\n");
                }
                
else
                {
                    
this.richTxt.AppendText("存款操作失败!\r\n");
                }
                
this.isDeposit = false;
            }

            
if (this.isTransfer)
            {
                
if (this.isTransfering)
                {

                }
            }

            
if (this.isUpdatePassword)
            {
                
string cardNo = this.txt.Text;
                
string password = this.txt.Text;
                
if (bank.UpdateCardPassword(cardNo, password))
                {
                    
this.richTxt.AppendText("口令修改成功!\r\n");
                }
                
else
                {
                    
this.richTxt.AppendText("口令修改失败!\r\n");
                }
                
this.isUpdatePassword = false;
            }

            
        }

        
private void btnReInput_Click(object sender, System.EventArgs e)
        {
            
if (!this.txt.ReadOnly)
            {
                
this.txt.Text = "";
                
this.richTxt.AppendText("请重新输入您的信息!\r\n");
            }
        }

        
private void btnExit_Click(object sender, System.EventArgs e)
        {
            
this.richTxt.AppendText("谢谢您的使用,欢迎下次光临!\r\n");
            
this.txtCardNo.Text = "";
            
this.txtPassword.Text = "";
            
this.label3.Text = "";
            
this.txt.Text = "";
            
this.txt.ReadOnly = true;

            
this.isVerified = false;
            
this.isWithdraw = false;
            
this.isDeposit = false;
            
this.isTransfer = false;
            
this.isTransfering = false;
            
this.isUpdatePassword = false;
        }

        
private void btnOkPassword_Click(object sender, System.EventArgs e)
        {
            
string cardNo = this.txtCardNo.Text;
            
string password = this.txtPassword.Text;
            
if (bank.VerifyCardNo(cardNo, password))
            {
                
this.richTxt.AppendText("卡号和口令正确,请执行其他操作!\r\n");
                
this.isVerified = true;
            }
            
else
            {
                
this.richTxt.AppendText("卡号或口令错误,请重新输入!\r\n");
                
this.isVerified = false;
            }
        }

        
private void txt_TextChanged(object sender, System.EventArgs e)
        {
            
if (this.txt.Text != "")
            {
                
if (this.isWithdraw || this.isDeposit || this.isTransfering)
                {
                    
try
                    {
                        
decimal.Parse(this.txt.Text);
                    }
                    
catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message 
+ " 请输入正确的数据格式!\r\n");
                        
this.richTxt.AppendText(ex.Message + " 请输入正确的数据格式!\r\n");
                    }
                }
            }
            
else
            {
                MessageBox.Show(
"数据不能为空,请输入数据!");
                
this.richTxt.AppendText("数据不能为空,请输入数据!\r\n");
            }
        }
    }
}
posted on 2005-08-18 10:40  wddavid  阅读(877)  评论(0)    收藏  举报