C#学习笔记--关于银行存取款的小实验

2023-11-16

C#面向对象程序设计
编程模拟实现个人银行的存款业务

要求:
(1)提供两种账户:活期存款账户CheckingCustom和定期存款账户FixedCustom
(2)创建活期账户时,必须提供账户名和开户金额,而账号则根据存款分类自动生成
(3)不论是活期存款账户还是定期存款账户都可以随时存款和取款
(4)活期存款账户的账号范围是10001-19999,活期存款利息一律按当前余额的0.5%计算。每次取款时,不论存款时间有多长,都要先根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款是,不进行结算。
(5)定期存款账号的范围是20001-29999,定期存款利息计算方法如下:如果当前余额大于500,利息为6%,否则为3%。每次取款时,不论存款时间有多长,都要先根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款是,不进行结算。
(6)要允许用户随时查询自己的存款信息,查询是要求提供用户名、存款类型和账号
(7)程序要易于扩充,即需要增加存款业务时,能够利用已经实现的功能,通过尽量少的代码快速实现。

解:

(1)创建一个名为BankCustoms的Windows应用程序项目,重命名Form1.cs为FormMain.cs,然后在此窗体上完成个人存款业务处理的设计界面。

(2)添加一个类文件Custom.cs,处理活期存款和定期存款共有的业务。在Custom类中完成下列功能。

① 声明三个私有的成员变量保存帐户对应的信息,分别如下。

accountName:帐户名。

accountNumber:帐户号。

accountBalance:帐户余额。

然后给这三个私有成员定义相应的属性,分别命名为AccountName、AccountNumber和AccountBalance,并处理对应的访问权限。

② 编写一个公共的Deposit方法,向帐户中添加存款。

③ 编写一个公共的Withdraw方法,从帐户中取款。

(3)向项目中添加一个名为CheckingCustom.cs类文件,处理活期存款业务,让其继承自Custom类,在CheckingCustom类中完成下列功能。

① 定义一个静态变量newAccountNumber,提供准备产生的活期存款帐号,初值为0001。注意每使用一次该帐号,其值都要自动加1。

② 分别提供可以让外部访问的属性,包括帐户名、帐户号、余额和利率。

③ 提供一个带参数的构造函数,在构造函数中接收指定的帐户名和开户金额,并利用newAccountNumber产生一个在活期存款规定帐户范围内的合法的帐户号,然后设置对应的属性。

④ 重写基类的Withdraw方法,使之符合活期存款业务的要求。

(4)添加一个名为FixedCustom.cs的类文件,处理定期存款业务,让其继承自Custom类,在FixedCustom类中完成除利息计算方式不同外、其他情况与活期存款业务相似的功能。

(5)在存款业务处理界面的代码文件中完成下列功能。

① 分别定义保存活期存款和定期存款的SortedList泛型列表对象,使用SortedList的目的是为了利用键/值对进行处理。实现代码可以参看源程序。

② 分别实现存款、取款和显示帐户信息功能。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Custom
{
    class Custom //基类
    {
        protected int number; //账号
        protected string name; //账户名
        protected double account; //账户余额
        protected static List<int> numbers = new List<int>();
        protected Random r;
        protected string type;   // 活期/定期
        public void deposit(double money) 编写一个公共的deposit方法,向账户中添加存款
        {
            if (money < 0)
            {
                Console.WriteLine("存款失败");
                return;
            }
            account += money;
            Console.WriteLine("向{0}账户中存入{1}元", number, money);
            Console.WriteLine("您的余额为{0}元", account);
        }
        public void get_info()
        {
            Console.WriteLine("存款信息如下:");
            Console.WriteLine("账户名:{0}\n账号:{1}\n存款类型:{2}\n账号余额:{3}", name, number, type, account);
        }
        public string Name
        {
            get
            {
                return name;
            }
        }
        public int Number
        {
            get
            {
                return number;
            }
        }
    }
    class CheckingCustom : Custom  //   活期存款账户
    {
        public CheckingCustom(double account_size, string name)
        {
            this.name = name;
            account = account_size;
            while (true)
            {
                r = new Random();
                number = r.Next(10001, 19999);
                if (!numbers.Contains(number)) break;
            }
            type = "活期";
            Console.WriteLine("您的账号为:{0}", number);

        }
        public void withdraw(double money)
        {

            if (money < 0)
            {
                Console.WriteLine("取款失败");
                return;
            }
            account += account * 0.005;
            if (account >= money)
            {
                account -= money;
                Console.WriteLine("从{0}账户中取出{1}元", number, money);
                Console.WriteLine("您的余额为{0}元", account);
            }
            else
            {
                Console.WriteLine("余额不足");
            }

        }
    }
    class FixedCustom : Custom  //  定期存款账户
    {
        public FixedCustom(double account_size, string name)
        {
            this.name = name;
            account = account_size;
            while (true)
            {
                r = new Random();
                number = r.Next(20001, 29999);
                if (!numbers.Contains(number)) break;
            }
            type = "定期";
            Console.WriteLine("您的账号为:{0}", number);
        }
        public void withdraw(double money)
        {
            if (money < 0)
            {
                Console.WriteLine("取款失败");
                return;
            }
            if (account >= 500)         
                account += account * 0.06;
            else       
                account += account * 0.03;
            if (account >= money)
            {
                account -= money;
                Console.WriteLine("取出{1}元", number, money);
                Console.WriteLine("您的余额为{0}元", account);
            }
            else
                Console.WriteLine("余额不足");
        }
    }
    class Program
    {
        private static List<CheckingCustom> list1 = new List<CheckingCustom>();
        private static List<FixedCustom> list2 = new List<FixedCustom>();
        public static void create_account()
        {
            string name;
            int open_account;
            int type;
            Console.WriteLine("请输入账户名:");
            name = Console.ReadLine();
            try
            {
                Console.WriteLine("请输入开户金额:");
                open_account = Convert.ToInt32(Console.ReadLine());
                if (open_account < 0)
                {
                    Console.WriteLine("开户金额不足");
                    return;
                }
                Console.WriteLine("请输入账户类型:(0-活期,1-定期)");
                type = Convert.ToInt32(Console.ReadLine());
                if (type == 0)
                {
                    CheckingCustom c = new CheckingCustom(open_account, name);
                    list1.Add(c);
                }
                else if (type == 1)
                {
                    FixedCustom c = new FixedCustom(open_account, name);
                    list2.Add(c);
                }
                else Console.WriteLine("请输入0或1");
            }
            catch (Exception e)
            {
                Console.WriteLine("输入错误");
            }
        }
        public static void withdraw_money()
        {
            string name; int number; double amount;
            Console.WriteLine("请输入取款账户名:");
            name = Console.ReadLine();
            try
            {
                Console.WriteLine("请输入取款账号:");
                number = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入取款金额:");
                amount = Convert.ToInt32(Console.ReadLine());
                foreach (CheckingCustom c in list1)
                {
                    if (c.Name == name && c.Number == number)
                    {
                        c.withdraw(amount);
                        return;
                    }
                }
                foreach (FixedCustom c in list2)
                {
                    if (c.Name == name && c.Number == number)
                    {
                        c.withdraw(amount);
                        return;
                    }
                }
                Console.WriteLine("该账户不存在");
            }
            catch (Exception e)
            {
                Console.WriteLine("输入错误");
            }
        }
        public static void deposit_money()
        {
            string name; int number; double amount;
            Console.WriteLine("请输入存款账户名:");
            name = Console.ReadLine();
            try
            {
                Console.WriteLine("请输入存款账号:");
                number = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入存款金额:");
                amount = Convert.ToInt32(Console.ReadLine());
                foreach (CheckingCustom c in list1)
                {
                    if (c.Name == name && c.Number == number)
                    {
                        c.deposit(amount);
                        return;
                    }
                }
                foreach (FixedCustom c in list2)
                {
                    if (c.Name == name && c.Number == number)
                    {
                        c.deposit(amount);
                        return;
                    }
                }
                Console.WriteLine("该账户不存在");
            }
            catch (Exception e)
            {
                Console.WriteLine("输入错误");
            }
        }
        public static void inquery_account()
        {

            string name; int number; int type;
            Console.WriteLine("请输入存款账户名:");
            name = Console.ReadLine();
            try
            {
                Console.WriteLine("请输入存款账号:");
                number = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入账户类型:(0-活期,1-定期");
                type = Convert.ToInt32(Console.ReadLine());
                if (type == 0)
                {
                    foreach (CheckingCustom c in list1)
                    {
                        if (c.Name == name && c.Number == number)
                        {
                            c.get_info();
                            return;
                        }
                    }
                }
                if (type == 1)
                {
                    foreach (FixedCustom c in list2)
                    {
                        if (c.Name == name && c.Number == number)
                        {
                            c.get_info();
                            return;
                        }
                    }
                }
                Console.WriteLine("该账户不存在");
            }
            catch (Exception err)
            {
                Console.WriteLine("输入错误");
            }
        }
        static void Main(string[] args)
        {
            string choice;
            while (true)
            {
                Console.WriteLine("选择功能(按其它键退出):\n1.创建账户\n2.取款\n3.存款\n4.查询账户");
                choice = Console.ReadLine();
                if (choice != "1" && choice != "2" && choice != "3" && choice != "4")
                {
                    break;
                }
                switch (choice)
                {
                    case "1": create_account(); break;
                    case "2": withdraw_money(); break;
                    case "3": deposit_money(); break;
                    case "4": inquery_account(); break;
                }

            }
        }

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#学习笔记--关于银行存取款的小实验 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 重载<<的返回值

    include
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • Fabric java sdk 1.4简明教程

    在超级账本Fabric区块链中 应用通过节点的RPC协议接口访问链码 Java应用可以使用官方提供的Fabric sdk java开发包来实现对链码的访问 开发包封装了Fabric区块链的GRPC链码访问协议 有利于开发人员聚焦于业务逻辑
  • TCP报文的交互过程

    TCP建立连接和断开连接的过程如下图所示 在TCP 协议提供可靠的连接服务时 采用三次握手建立一个连接 采用四次握手来关闭一个连接 建立TCP连接的三次握手 第一次握手 建立连接时 客户端发送 SYN 包到服务器 等待服务器确认 第二次握手
  • Docker的简介、镜像及优化

    1 docker的安装 1 配置yum源 vim etc yum repo d docker ce repo 编辑内容 vim etc yum repo d CentOS Base repo 编辑内容 2 安装docker yum inst
  • 医疗保健行业中的区块链

    区块链技术是世界上最重要和最具颠覆性的技术之一 多个行业正在采用区块链技术来创新其运作方式 希望采用区块链的行业之一是医疗保健行业 在本指南中 我们将熟悉区块链 特别是有助于打破这个行业原有桎梏的功能 此外 我们将研究医疗行业的未来将会是什
  • 推荐系统实践(八)----评分预测

    目前为止都是在讨论 T o p N TopN TopN 推荐 即给定一个用户 如何给他生成一个长度为 N N
  • JVM 内存模型

    JVM 内存模型 1 JVM 内存模型共分为5个区 Java虚拟机栈 本地方法栈 堆 程序计数器 方法区 元空间 2 各个区各自的作用 a 本地方法栈 用于管理本地方法的调用 里面并没有我们写的代码逻辑 其由native修饰 由 C 语言实
  • 卷积神经网络之-Lenet

    更多内容请关注 机器视觉CV 公众号 原文地址 前言 Lenet 是一系列网络的合称 包括 Lenet1 Lenet5 由 Yann LeCun 等人在1990 年 Handwritten Digit Recognition with a
  • 一个将XM音频导入小宇宙的工具

    这个喜马拉雅语音导出工具 能够帮助你导出喜马拉雅中的音频节目 下载后的音频文件 可以复制到小宇宙设备文件夹里面 这样我们就可以用小宇宙播放我们导入的音频文件啦 windows电脑版 https jscs lanzouw com imVZ40
  • 负载均衡原理分析与源码解读

    上一篇文章一起学习了Resolver的原理和源码分析 本篇继续和大家一起学习下和Resolver关系密切的Balancer的相关内容 这里说的负载均衡主要指数据中心内的负载均衡 即RPC间的负载均衡 传送门 服务发现原理分析与源码解读 基于
  • 强化学习之Grid World的时序差分算法解析【MiniWorld】SYSU_2023SpringRL

    强化学习之Grid World的Monte Carlo算法解析 MiniWorld SYSU 2023SpringRL 题目以及思路 代码 运行结果 算法解析 代码算法流程 题目以及思路 环境在这篇博客强化学习原理及应用作业之动态规划算法
  • c语言输出斐波那契数列前40项

    分析 对于斐波那契数列数列来说 就是前一项和前前一项的和 就是当前项 就比如 1 1 2 3 5 其中2就是1 1 3就是1 2 5就是2 3 所以 在c语言中就可以定义数组的方式 去实现 当然 如果一行输出 不美观 于是利用if语句 将i
  • Streamlit项目: 轻松搭建部署个人博客网站

    文章目录 1 前言 1 1 探索 Streamlit 轻松创建交互式应用 1 2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线 2 1 一个集成了智能中医舌诊 中e诊专栏的博客网站 2 2 前期准备 2 3 使用 Stre
  • MS-RTOS 内核模块动态装载

    1 MS RTOS 内核模块动态装载简介 MS RTOS 支持内核模块动态装载功能 用户可以根据需要 在不需要对内核重新编译的情况下 使用 insmod rmmod 等命令动态地将模块加入或移出内核 这样可以提高 MS RTOS 的灵活性
  • 使用clion链接liunx同步项目并编译

    一 clion的下载和安装 下载官网CLion A Cross Platform IDE for C and C by JetBrains 安装后有30天使用日期 学生可以获得免费教育许可证JetBrains 学习产品 二 clion项目的
  • 注解方式、ServletContext 与 ServletConfig和请求

    回顾 http 协议的定义和组成 请求行 请求头 请求体 响应行 响应头 响应体 常见响应状态码的含义 200 成功 404 未找到 405 方法不支持 500 服务器出现异常 常见请求头 Host 主机 User Agent 客户端类型
  • HarmonyOS云开发基础认证练习题

    系列文章目录 HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 HarmonyOS云开发基础认证练习题 文章目录 系列文章目录 前言 一 判断 二 单选 三 多选 前言 本文所有内容来源于个人进行Har
  • kali 上下载GitHub文件失败

    出现 Failed to connect to github com port 443 Connection refused 把命令 git clone https github com git 换成 git clone git githu
  • 用Excel做简单的数据分析

    一 使用的数据 1 做月销量的柱状图 按住Ctrl可跨区选中 1 选中数据 2 选择柱状图 一般柱状图都使用2D 3 为图加上数据标签 更加直观 2 以同样的方式做饼图 1 如图 一般饼图都是做3D的 3 求月销售额 单价 X 月销量 1
  • 使用VS Code进行Qt开发

    使用VS Code进行Qt开发 文章目录 使用VS Code进行Qt开发 测试环境 步骤 1 将Qt的bin目录添加到环境变量 2 安装VS Code扩展 3 使用Qt Creator创建CMake项目 4 在VS Code中打开项目 5
  • C#学习笔记--关于银行存取款的小实验

    C 面向对象程序设计 编程模拟实现个人银行的存款业务 要求 1 提供两种账户 活期存款账户CheckingCustom和定期存款账户FixedCustom 2 创建活期账户时 必须提供账户名和开户金额 而账号则根据存款分类自动生成 3 不论