Bank,我只是来完成作业的

写这个Bank我需要有:开户,取款,存款,转账,查询余额,退出功能。

这样我需要有两个类:BankUser。一个Main入口。

先看这个User,他定义了各个需要的属性(字段)和字段的属性(虽然在这里并没什么卵用,不过这样也显示我也是知道有这个的嘛)

 

class User
    {
        //初始化账户姓名,密码,身份证号,存款余额,账号
        private string _name;
        private int _passWord;
        private string _idName;
        private double _balance;
        private string _account;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        public int PassWord
        {
            get { return _passWord; }
            set { _passWord = value; }
        }
        public string IdName
        {
            get { return _idName; }
            set { _idName = value; }
        }
        public double Balance
        {
            get { return _balance; }
            set { _balance = value; }
        }
        public string Account
        {
            get { return _account; }
            set { _account = value; }
        }
    }

 

好了,下面看一下关键的Bank类,他里面包含了各个方法,我最喜欢方法了,方法能让很多不可能变成可能,你值得拥有。

 

Bank类中首先我们new出一个User的对象数组,然后定义一个方法存储三个客户信息:

 

 User users=new User();
 User[] userGroup = new User[10];

 

然后开始写欢迎菜单和选项(开户,存款,取款,转账,查询余额,退出),你懂得,switch结构:

  //初始化三个用户信息
        public void Initial()
        {
            userGroup[0] = new User();
            userGroup[0].Name = "王丽丽";
            userGroup[0].Account = "21005061989080818";
            userGroup[0].IdName = "210050619890808185";
            userGroup[0].Balance = 200000;
            userGroup[0].PassWord = 123456;
            userGroup[1] = new User();
            userGroup[1].Name = "张莹莹";
            userGroup[1].Account = "51001061989123112";
            userGroup[1].IdName = "510010619891231127";
            userGroup[1].Balance = 400000000;
            userGroup[1].PassWord = 283868;
            userGroup[2] = new User();
            userGroup[2].Name = "刘华";
            userGroup[2].Account = "41020719890405127";
            userGroup[2].IdName = "410207198904051271";
            userGroup[2].Balance = 5600000;
            userGroup[2].PassWord = 000000;

        }
        //菜单
        public void showMenu()
        {
            int temp = 0;
            do
            {
                Console.WriteLine("====================欢迎使用自动银行服务========================");
                Console.WriteLine("1:开户\t2:存款\t3:取款\t4:转账\t5:查询余额\t6:退出");
                Console.WriteLine("================================================================");
                string result = Console.ReadLine();
                switch (result)
                {
                    case "1":
                        newUser();
                        break;
                    case "2":
                        saveMoney();
                        break;
                    case "3":
                        getMoney();
                        break;
                    case "4":
                        transferAccount();
                        break;
                    case "5":
                        getBalance();
                        break;
                    case "6":
                        temp = -1;
                        break;
                    default:
                        Console.WriteLine("输入错误,请检查重输.");
                        break;
                }
            } while (temp==0);
        }

 

 

好了准备工作做完了,我分析了一下开户,存款,取款,转账,查询。发现很多都需要遍历User对象数组查找账号(和对应的下标),然后判定密码。好了,这里需要两个方法:judgeAccount(判定账号);judgePWD(判定密码);如下:

//输入账号判定,返回-1或-2则为没有该账号,返回i值(0或正整数)则为有该账号,并且账号的下标为i
        public int judgeAccount(string account)
        {
            int i = -1;
            bool result = false;
            foreach (User item in userGroup)
            {
                if (item==null&&result==false)
                {
                    i = -1;
                    break;
                }
                else if (item==null&&result==true)
                {
                    break;
                }
                else 
                {
                    i += 1;
                    if (account.Equals(item.Account))
                    {
                        result = true;                    //判定有相等值则赋给result为true
                        break;
                    }
                }
            }
            return i;
        }
        //密码判定,返回-1为密码错误,返回0位密码正确
        public int judgePWD(int passWord,int num)
        {
            if (passWord == userGroup[num].PassWord)
            {
                return 0;
            }
            else
            {
                return -1;
            }
        }

到这里就要开始真正的关键的主要的必须的:开户(newUser();),存款(saveMoney()),取款(getMoney()),转账(transferAccount()),查询余额(getBalance())方法了:

 开户::::::::::::::::::::::::::::::::::::::

//开户
        public void newUser()
        {
            int i = 0;
            foreach (User item in userGroup)
            {
                if (item!=null)
                {
                    i += 1;
                }
                else
                {
                    break;
                }
            }
            userGroup[i] = new User();
            Console.Write("请输入姓名:");
            userGroup[i].Name = Console.ReadLine();
            Console.Write("请输入身份证号:");
            userGroup[i].IdName = Console.ReadLine();
            userGroup[i].Account = userGroup[i].IdName;
            Console.WriteLine("您的卡号已随机生成,请记好:{0}", userGroup[i].Account);
            do
            {
                Console.Write("请输入密码:");
                int result = int.Parse(Console.ReadLine());
                Console.Write("请再次输入密码:");
                userGroup[i].PassWord = int.Parse(Console.ReadLine());
                if (result.Equals(userGroup[i].PassWord) == false)
                {
                    Console.WriteLine("两次输入密码不一致");
                    continue;
                }
                break;
            } while (true);
            Console.Write("请输入存入的金额:");
            userGroup[i].Balance = double.Parse(Console.ReadLine());
            Console.WriteLine("用户名:{0}  账户:{1}  身份证号:{2}  存款余额:{3}", userGroup[i].Name, user         Group[i].Account, userGroup[i].IdName, userGroup[i].Balance);
        }

完美的代码啊!越看越喜欢。先用foreach找到User对象数组中空的一组元素下标(i),然后从控制台录入信息。存入数组,完成,完美。

开始存款了,最喜欢的还是这个过程,想存多少就存多少,都是我的(钱嘛,就是个数)

//存款
        public void saveMoney()
        {
            Console.WriteLine("请输入存入账号:");
            int xiabiao=judgeAccount(Console.ReadLine());
            if (xiabiao < 0)
            {
                Console.WriteLine("没有该账号,请重新输入");
                saveMoney();
            }
            do
            {
                Console.WriteLine("请输入密码:");
                int result=judgePWD(int.Parse(Console.ReadLine()), xiabiao);
                if (result == 0)
                {
                    Console.WriteLine("请输入存入金额:");
                    double save= double.Parse(Console.ReadLine());
                    userGroup[xiabiao].Balance += save;
                    Console.WriteLine("用户名:{0}  账户:{1} 存入金额{2} 存款余额:{3}", userGroup[xiabiao]              .Name, userGroup[xiabiao].Account,save, userGroup[xiabiao].Balance);
                    break;
                }
                else
                {
                    Console.WriteLine("密码错误,请检查重输!");
                    continue;
                }
            } while (true);
        }

这里引用了密码判定(judgeAcount();),密码判定(judgePWD();),然后在数组中找到对应下标的元素(余额),加上存款项金额。完成,不完美的地方就是这里不应该有密码判定的,我认为存钱其实不用输密码,不过不想改了。

取款了

   //取款
        public void getMoney()
        {
            Console.Write("请输入账号:");
            int xiabiao=judgeAccount(Console.ReadLine());
            if (xiabiao<0)
            {
                Console.WriteLine("没有该账号,请检查重输");
                getMoney();
            }
            
            do
            {
                Console.Write("请输入密码:");
                int passWord = int.Parse(Console.ReadLine());
                int result = judgePWD(passWord, xiabiao);
                if (result<0)
                {
                    Console.WriteLine("密码错误,请检查重输");
                    continue;
                }
                break;
            } while (true);
            double getmoney;
            do
            {
                Console.WriteLine("账户余额:" + userGroup[xiabiao].Balance);
                Console.Write("请输入取款金额(本机只允许取整百人民币:");
                getmoney = double.Parse(Console.ReadLine());
                if (getmoney%100!=0)
                {
                    Console.WriteLine("取款金额不是整百,请重新取款");
                    continue;
                }
                if (getmoney>userGroup[xiabiao].Balance)
                {
                    Console.WriteLine("取款金额大于余额,请重新输入");
                    continue;
                }
                break;
            } while (true);
            userGroup[xiabiao].Balance = userGroup[xiabiao].Balance - getmoney;
            Console.WriteLine("账号:{0}\t本次成功取款:{1}\t当前余额:{2}", userGroup[xiabiao].Account, getmoney, userGroup[xiabiao].Balance);
        }

取款同存款大概的方式是一样的,只是一个加一个减。完美!

开始转账了:

//转账
        public void transferAccount()
        {
           //转出
            int zhuanchuxiabiao;
            double getmoney;
            do
            {
                Console.Write("请输入转出账号:");
                zhuanchuxiabiao = judgeAccount(Console.ReadLine());
                if (zhuanchuxiabiao < 0)
                {
                    Console.WriteLine("没有该账号,请检查重输");
                    continue;
                }
                Console.Write("请输入密码:");
                int passWord = int.Parse(Console.ReadLine());
                int result = judgePWD(passWord, zhuanchuxiabiao);
                if (result < 0)
                {
                    Console.WriteLine("密码错误,请检查重输");
                    continue;
                }
                break;
            } while (true);
            do
            {
                Console.WriteLine("账户余额:" + userGroup[zhuanchuxiabiao].Balance);
                Console.Write("请输入转出金额:");
                getmoney = double.Parse(Console.ReadLine());
                if (getmoney > userGroup[zhuanchuxiabiao].Balance)
                {
                    Console.WriteLine("转出金额大于余额,请重新输入");
                    continue;
                }
                break;
            } while (true);
            //转入
            int zhuanruxiabiao;
            do
            {
                Console.WriteLine("请输入转入账号:");
                zhuanruxiabiao = judgeAccount(Console.ReadLine());
                if (zhuanruxiabiao < 0)
                {
                    Console.WriteLine("没有该账号,请重新输入");
                    continue;
                }
                userGroup[zhuanchuxiabiao].Balance = userGroup[zhuanchuxiabiao].Balance - getmoney;
                userGroup[zhuanruxiabiao].Balance += getmoney;
                Console.WriteLine("账号:{0}\t本次成功转出:{1}\t当前余额:{2}", userGroup[zhuanchuxiabiao].            Account, getmoney, userGroup[zhuanchuxiabiao].Balance);
                Console.WriteLine("转入用户名:{0}\t转入账户:{1}\t转入金额{2}", userGroup[zhuanruxiabiao].            Name, userGroup[zhuanruxiabiao].Account,getmoney);
                break;
            } while (true);
        }

转账就是把取款和存款合到一块,很简单。Perfect!

查询余额开始了

 //查询余额
        public void getBalance()
        {
            int xiabiao;
            Console.Write("请输入查询的账户;");
            do
            {
                xiabiao = judgeAccount(Console.ReadLine());
                if (xiabiao < 0)
                {
                    Console.WriteLine("没有该账号,请重新输入");
                    continue;
                }
                break;
            } while (true);
            do
            {
                Console.Write("请输入密码:");
                int passWord = int.Parse(Console.ReadLine());
                int result = judgePWD(passWord, xiabiao);
                if (result < 0)
                {
                    Console.WriteLine("密码错误,请检查重输");
                    continue;
                }
                break;
            } while (true);
            Console.WriteLine("用户名:{0}  存款余额:{3}  账户:{1}  身份证号:{2}", userGroup[xiabiao].Name         , userGroup[xiabiao].Account, userGroup[xiabiao].IdName, userGroup[xiabiao].Balance);
        }                

一个跟取款很相似的方法。你值得拥有!

下面就是无关大雅的方法了:

遍历数组:

  //遍历用户信息
        public void showUsers()
        {
            foreach (User item in userGroup)
            {
                if (item==null)
                {
                    return;
                }
                Console.WriteLine("用户名:{0}  账户:{1}  身份证号:{2}  存款余额:{3}",item.Name,item.Accou            nt,item.IdName,item.Balance);
            }
        }

到这里Bank类中方法就完了。该Main入口了上场了。

 static void Main(string[] args)
        {
            Bank bank = new Bank();
            bank.Initial();             //初始化三个用户
            bank.showUsers();           //遍历对象数组(展示三个用户)
            bank.showMenu();            //菜单项,选项菜单
            bank.showUsers();           //再次遍历数组(查看操作完成后数据的变化)
            Console.ReadLine();
        }

完美,遇见了谁!

 

posted @ 2015-10-26 23:21  积点成线  阅读(252)  评论(1编辑  收藏  举报