C# 简易银行与ATM系统

本程序实现了一个模拟现实中银行与ATM系统 的简易版本,可以提供注册、登录、查询余额、取款、存款、ATM限制取款额度并弹窗警告、自定义异常模拟出钞异常等功能。

这份代码实际是某周的C#作业,一切都从简处理了

完整代码https://gitee.com/cai_zhi_peng/ATM.git

此C#程序模拟了现实中的银行和ATM系统,提供了一个简单的统一界面 界面可以同时进行银行或者是ATM的事务
可以进行登录账户,查询余额、取款、存款等 注册账户只能在银行进行,不能在ATM进行 开始运行的时候必须先注册账号才可以登录进行后续操作,
登录之后的操作可以依据界面的说明和按钮进行相应操作
#以下是此程序实现的一些东西 定义了账户Account,银行Bank,ATM,BadCashException等类 自定义事件的6部曲在代码中有实现,具体步骤已经按照1-6的编号标出 自定义了异常,用于表示出钞时的异常,用Random来随机抛出异常实现

程序运行截图:
在这里插入图片描述

代码是Visual Studio项目,下面是几个重要文件的代码

//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace chapter4_ATM
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //5、注册事件,当在ATM中取走一大笔钱的时候警告,调用alertBigMoney()去处理
            Form1.BigMoneyFetched += Form1.alertBigMoney;

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        
    }
    //1、声明参数类型,事件对象
    public class BigMoneyArgs : EventArgs
    {
        public Account account;//账户信息
        public float fetchedmoney;//输入取款金额
    }
    //2、声明委托类型
    public delegate void BigMoneyFetchedEventHandler(object sender, BigMoneyArgs e);


    //自定义异常类型,表示取钱时的出钞异常
    public class BadCashException:ApplicationException
    {
        private int idNumber;
        public BadCashException(String message,int id):base(message)
                { this.idNumber = id; }

    }
    //账户类,表示账户的信息
    public class Account
    {
        private string accountnumber;//账户号码
        private string password;//账户密码
        private float balanve;//余额

        public Account(string accountnumber, string password)//带两个参数的构造函数
        {
            this.accountnumber = accountnumber;
            this.password = password;
        }

        public Account()//无参构造函数
        {
        }
        //查询余额
        public float queryBalanve()
        { 
            return balanve;
        }
        //取款
        public void withdraw(float withdrawMoney)
        {
           // 随机生成异常,表示出钞的异常
            Random ran = new Random();
            int a = ran.Next(0, 5);
            if (a < 2) throw new BadCashException("出钞错误,请重试", 222);//抛出异常
            balanve -= withdrawMoney;
        }
        //取款
        public void deposit(float depositMoney)
        {
            balanve += depositMoney;
        }
        //set get 函数
        public string getaccountnumber() { return accountnumber; }
        public void setaccountnumber(string value) { this.accountnumber = value; }
        public string getpassword() { return password; }
        public void setpassword(string value) { this.password = value; }
    }
    //银行类
    public class Bank
    {
        static List<Account> accountsList = new List<Account>();//用户列表,静态数据

        //用户注册函数,新建一个Account对象并放入用户列表中
        public static void register(string accountnumber,string password)
        {
            Account newAccount = new Account(accountnumber, password);
            accountsList.Add(newAccount);
        }
        //登录函数,检验输入的账号是否存在以及密码是否正确
        public static Account login(string accountnumber,string password)
        {
            foreach(Account i in accountsList)
            {
                if (i.getaccountnumber() == accountnumber && i.getpassword() == password)
                {
                    return i;
                }
            }
            return null;
        }
        public static List<Account> getaccountsList() { return accountsList; }
    }
    //ATM类,与银行类类似
    public class ATM
    {
        //登录函数,ATM不能注册
        public static Account login(string accountnumber, string password)
        {
            foreach (Account i in Bank.getaccountsList())
            {
                if (i.getaccountnumber() == accountnumber && i.getpassword() == password)
                {
                    return i;
                }
            }
            return null;
        }
    }
    
}
//Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace chapter4_ATM
{
    public partial class Form1 : Form
    {
        bool isloginSuccess_Bank = false;//判断是否在银行登录成功
        bool isloginSuccess_ATM = false;//判断是否在ATM登录成功
        public Form1()
        {
            InitializeComponent();
        }
        //3、声明事件
        public static event BigMoneyFetchedEventHandler BigMoneyFetched;
        //6、事件处理方法
        public static void alertBigMoney(object sender, BigMoneyArgs e)
        {
            //弹出窗口警告
            MessageBox.Show("在ATM取款不允许超过10000");
        }

        //下面是点击各个按钮触发的事件
        private void button1_Click(object sender, EventArgs e)
        {
            if(textBox1.Text!=" "&&textBox2.Text!=" ")//判断有输入账户密码才创建账户
            {
                Bank.register(textBox1.Text, textBox2.Text);//调用银行注册函数
                textBox1.Clear();
                textBox2.Clear();
                MessageBox.Show("注册成功");
            }
        }
        //银行登录
        private void button2_Click(object sender, EventArgs e)
        {
    
            foreach(Account i in Bank.getaccountsList())
            {
                if (textBox3.Text == i.getaccountnumber() && textBox4.Text == i.getpassword())
                {
                    currentAccount = i;//目前执行操作的用户,为一个static 的全局变量
                    textBox4.Clear();
                    isloginSuccess_Bank = true;
                    MessageBox.Show("登录成功");
                    break;
                }
            }
            if(!isloginSuccess_Bank)
            {
                textBox3.Clear();
                textBox4.Clear();
                MessageBox.Show("登录错误");
            }
        }
        //查询余额
        private void button3_Click(object sender, EventArgs e)
        {
            if(isloginSuccess_Bank)
            {
                textBox5.Text = currentAccount.queryBalanve() + " ";
            }
        }
        //取款
        private void button4_Click(object sender, EventArgs e)
        {
            if(isloginSuccess_Bank)
            {
                if(currentAccount.queryBalanve()>=float.Parse(textBox7.Text))
                {
                    try//处理可能抛出的异常
                    {
                        currentAccount.withdraw(float.Parse(textBox7.Text));
                        textBox7.Clear();
                        MessageBox.Show("取款成功");
                    }
                    catch(BadCashException ex)
                    {
                        textBox7.Clear();
                        MessageBox.Show(ex.Message);
                    }
                }
                else
                {
                    textBox7.Clear();
                    MessageBox.Show("余额不足");
                }
                
            }
        }
        //存款
        private void button5_Click(object sender, EventArgs e)
        {
            if (isloginSuccess_Bank)
            {
                int depositmoney = int.Parse(textBox6.Text);
                currentAccount.deposit((float)depositmoney);
                textBox6.Clear();
                MessageBox.Show("存款成功");
            }
        }

        private void textBox8_TextChanged(object sender, EventArgs e)
        {

        }
        //ATM取款
        private void button7_Click(object sender, EventArgs e)
        {
            if (isloginSuccess_ATM)
            {
                if(float.Parse(textBox12.Text)>10000.0)
                {
                    //4、符合条件则发生一个事件,ATN取款超过10000
                    BigMoneyArgs args = new BigMoneyArgs();
                    args.account = currentAccount;
                    args.fetchedmoney = float.Parse(textBox12.Text);
                    BigMoneyFetched(this, args);

                }
                else if (currentAccount.queryBalanve() >= float.Parse(textBox12.Text))
                {
                    try
                    {
                        currentAccount.withdraw(float.Parse(textBox12.Text));
                        textBox12.Clear();
                        MessageBox.Show("取款成功");
                    }
                    catch (BadCashException ex)
                    {
                        textBox12.Clear();
                        MessageBox.Show(ex.Message);
                    }
                }
                else
                {
                    textBox12.Clear();
                    MessageBox.Show("余额不足");
                }

            }
        }
        //ATM登录
        private void button6_Click(object sender, EventArgs e)
        {
            foreach (Account i in Bank.getaccountsList())
            {
                if (textBox8.Text == i.getaccountnumber() && textBox9.Text == i.getpassword())
                {
                    currentAccount = i; 
                    textBox9.Clear();
                    isloginSuccess_ATM = true;
                    MessageBox.Show("登录成功");
                    break;
                }
            }
            if (!isloginSuccess_ATM)
            {
                textBox8.Clear();
                textBox9.Clear();
                MessageBox.Show("登录错误");
            }
        }
        //ATM查询余额
        private void button9_Click(object sender, EventArgs e)
        {
            if (isloginSuccess_ATM)
            {
                textBox10.Text = currentAccount.queryBalanve() + " ";
            }
        }
        //ATM存款
        private void button8_Click(object sender, EventArgs e)
        {
            if (isloginSuccess_ATM)
            {
                int depositmoney = int.Parse(textBox11.Text);
                currentAccount.deposit((float)depositmoney);
                textBox11.Clear();
                MessageBox.Show("存款成功");
            }
        }
        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label8_Click(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox11_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

```csharp
//Form1.Designer.cs
namespace chapter4_ATM
{
    partial class Form1
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        Account currentAccount = new Account();//只有这句是重点
        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        }
    }
}

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值