作业:C#利用委托和事件实现定期还款功能

字节最新开源模型 DA3(Depth Anything 3)使用教程(一)从任意视角恢复视觉空间 本文介绍DepthAnything3(DA3)模型,一种能够从任意视觉输入中预测几何结构的创新解决方案。DA3采用Transformer骨干网络,通过统一的深度光线表示简化学习过程,支持单目/多视角深度估计、姿态估计和3D高斯预测等多项任务。模型系列包含基础版、度量级和单目专用版本,其中嵌套版本DA3NESTED-GIANT-LARGE表现最佳。代码库提供交互界面、CLI工具和多格式导出功能,支持模块化扩展。实验表明DA3在各项任务上超越现有模型,所有训练数据均来自公开学术数据集。 阅读详情

 导读:

应用场景:

信用卡还款是银行系统的重要业务,业务流程说明如下:

  1. 用户有信用卡和储蓄卡,储蓄卡有查询余额和取款功能,信用卡能够查看账单金额、查看还款日和查看余额三个功能;
  2. 请使用委托与事件实现下列功能:用户可自由设置信用卡还款关联的储蓄卡,当还款日到期时进行账单金额的自动划扣;

 关键词介绍:

委托:委托是一种可以指向方法的引用,可以理解为一种函数指针,是类型安全的。它类似于C++中的函数指针,通过对于方法特征和返回值类型的声明,封装了具有相同特征和返回类型的方法。

事件:事件使用委托来封装触发时将要调用的方法,事件是一种函数成员。

说明:

1.  当还款日期(C#DateTime.Today.Day)到时,会进行自动扣款。

2.  当银行卡余额不足时会显示付款不成功。

3.  利用委托与事件还款。

代码结构

储蓄卡类,信用卡类,委托,主函数。

代码

储蓄卡

先创建一个储蓄卡类,其中包含了获取余额方法,还款方法。

class DepositCard
    {
        public int amount;           //余额

        public int getrest()
        {
            return amount;
        }
        public void Account(int balance)       //还款
        {
            amount += balance;
            Console.WriteLine("今天是本月的{0}号,取款{1},储蓄卡余额为:{2}。"
            ,DateTime.Today.Day, -balance, amount);
        }
    }

信用卡

再创建一个信用卡类,其中包含了获取余额方法,获取还款日期方法。

class CreditCard
    {
        private int billamount;
        private int repaymentday;

        public CreditCard(int billamount, int repaymentday)
        {
            this.billamount = billamount;        //余额
            this.repaymentday = repaymentday;    //还款日期
        }

        public int getbillamount() { return billamount; }

        public int getrepaymentday() { return repaymentday; }

        public void Display() { Console.WriteLine("信用卡余额为:{0}", billamount); }


    }

委托

创建了一个委托类,包含了委托和事件,和通知订阅对象的方法。

class CreditCardDelegate           //信用卡委托
    {

        public delegate void repay(int balance);     //委托
        public event repay Paytime;                 //事件

        public void func(int blance)
        {
            if (Paytime != null) {     //防止事件未订阅就启动
                Paytime(blance);
            }
        }
    }

 Main函数

class Program
    {
        static void Main(string[] args)
        {
            DepositCard depositCard = new DepositCard();
            depositCard.amount = 10000;                                 //储蓄卡余额
            CreditCard creditCard1 = new CreditCard(-2000, 9);         //new了三张信用卡
            CreditCard creditCard2 = new CreditCard(-3000, 13);
            CreditCard creditCard3 = new CreditCard(-5000, 29);
            depositCard.getrest(); Console.WriteLine("");
            List<CreditCard> Cards = new List<CreditCard>();
            Cards.Add(creditCard1); Cards.Add(creditCard2); Cards.Add(creditCard3);

            CreditCardDelegate Ccd = new CreditCardDelegate();

            foreach (CreditCard card in Cards)
            {
                Console.WriteLine("信用卡开始执行委托还款。。。。。。");
                if (card.getrepaymentday() == DateTime.Today.Day)
                {
                    if (depositCard.getrest()<-card.getbillamount())
                        {
                        Console.WriteLine("你的储蓄卡余额不足,逾期太久将扣除你的个人信用。");
                        continue;
                    }
                    Ccd.Paytime += new CreditCardDelegate.repay(depositCard.Account);
                    Ccd.func(card.getbillamount());
                    Ccd.Paytime -= new CreditCardDelegate.repay(depositCard.Account);
                }

                Console.WriteLine("");
            }

            Console.ReadLine();

        }
    }

说明:

实例化储蓄卡,设置余额为10000,创建三个信用卡,并添加入数组,创建委托类,遍历信用卡数组,如果余额不足跳过此次循环,并予以提示。如果余额充足,订阅事件(+=右边为创建委托),并使用func(即通知订阅对象的方法)方法,后使用-=取消订阅。

总程序

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

namespace 信用卡还款
{
    class DepositCard
    {
        public int amount;           //余额

        public int getrest()
        {
            return amount;
        }
        public void Account(int balance)       //还款
        {
            amount += balance;
            Console.WriteLine("今天是本月的{0}号,取款{1},储蓄卡余额为:{2}。"
                ,DateTime.Today.Day, -balance, amount);
        }
    }

    class CreditCard
    {
        private int billamount;
        private int repaymentday;

        public CreditCard(int billamount, int repaymentday)
        {
            this.billamount = billamount;        //余额
            this.repaymentday = repaymentday;    //还款日期
        }

        public int getbillamount() { return billamount; }

        public int getrepaymentday() { return repaymentday; }

        public void Display() { Console.WriteLine("信用卡余额为:{0}", billamount); }


    }

    class CreditCardDelegate           //信用卡委托
    {

        public delegate void repay(int balance);     //委托                                                    
        public event repay Paytime;                 //事件

        public void func(int blance)
        {
            if (Paytime != null) {
                Paytime(blance);
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            DepositCard depositCard = new DepositCard();
            depositCard.amount = 10000;                                 //储蓄卡余额
            CreditCard creditCard1 = new CreditCard(-2000, 9);         //new了三张信用卡
            CreditCard creditCard2 = new CreditCard(-3000, 13);
            CreditCard creditCard3 = new CreditCard(-5000, 29);
            depositCard.getrest(); Console.WriteLine("");
            List<CreditCard> Cards = new List<CreditCard>();
            Cards.Add(creditCard1); Cards.Add(creditCard2); Cards.Add(creditCard3);

            CreditCardDelegate Ccd = new CreditCardDelegate();

            foreach (CreditCard card in Cards)
            {
                Console.WriteLine("信用卡开始执行委托还款。。。。。。");
                if (card.getrepaymentday() == DateTime.Today.Day)
                {
                    if (depositCard.getrest()<-card.getbillamount())
                        {
                        Console.WriteLine("你的储蓄卡余额不足,逾期太久将扣除你的个人信用。");
                        continue;
                    }
                    Ccd.Paytime += new CreditCardDelegate.repay(depositCard.Account);
                    Ccd.func(card.getbillamount());
                    Ccd.Paytime -= new CreditCardDelegate.repay(depositCard.Account);
                }

                Console.WriteLine("");
            }

            Console.ReadLine();

        }
    }
}

运行结果

 

当到达本月9号时,

 当到达本月13号时,

 

 当到达本月29号时,

 当卡内余额不足时(偷偷给第三张信用卡余额-1)。

 总结

C#的委托只能封装具有相同类型的特征和返回类型的方法,使用委托需要三个步骤:1. 声明委托类型,2. 创建委托实例,3. 向委托实例注册方法。可以动态的更改一个委托所引用的方法,调用一个委托的代码每次都运行一个不同的方法。委托的优势是能引用多个方法。

事件:事件对外界隐藏了委托实例的大部分功能,仅仅暴露添加/删除事件处理器的功能,安全性更好。通过+=为事件注册委托,-=取消注册委托。事件只能在方法的外部进行声明,而委托在方法的外部和内部都可以进行声明。

源码gitee地址

PLSQL Developer安装详细步骤 一、下载安装PLSQL Developer(plsql安装百度也有步骤) 官网下载地址:https://www.allroundautomations.com/registered-plsqldev/ 1、网上自己下载适合自己电脑的安装包(32或64),并解压。 2、打开解压的文件夹,得到以下三个文件(分别是汉化工具,PLSQL安装包、激活码),双击安装,如下图: 3、安装界面,点击next,进入下一步,如图: 4、安装协议界面,此处必须选择“I accept the terms in 阅读详情

相关推荐

遥感大模型核心技术之自监督预训练技术研究(2025年9月版)

本文系统探讨了自监督预训练技术在遥感大模型构建中的核心作用。随着遥感数据进入"大数据"时代,传统监督学习面临"数据丰富、标签贫乏"的瓶颈,而自监督预训练通过设计代理任务从无标签数据中学习特征表示,成为驱动大模型发展的关键引擎。文章分析了遥感领域对自监督预训练的三大独特挑战:多源异构性、地理空间约束和时空动态性,并提出了针对性解决方案:掩码自编码(MAE)技术及其演进、地理对比学习与多模态融合、位置感知预训练与多任务学习。

panshengwu的博客 842

第6章第4节:自定义分词器

本节详解Elasticsearch自定义分词器,解析analyzer三段式结构(char_filter→tokenizer→filter),掌握常用组件如ik_max_word、synonym_graph、ngram等。通过_analyze API调试分词效果,实现“索引时扩展同义词、搜索时不带”的生产级方案,提升中文搜索与智能提示体验。

啊渊的专栏 777

全志Longan和Tina系统T113-S3-(Tina Linux 系统介绍)

Tina Linux是全志科技基于Linux内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux基于openwrt-14.07 版本的软件开发包,包含了 Linux 系统开发用到的内核源码、驱动、工具、系统中间件与应用程序包。Tina系统软件架构如图所示。从下至上分别为Kernel && Driver、Libraries、System Services、Applications 四层。

szembed的博客 6340

C#使用opencv和Yolo模型识别车牌号

本文基于OpenCVSharp与OnnxRuntime,结合YoloV8n-pose_plate模型(检测车牌位置)和OCR模型(识别车牌文字),实现高效车牌识别。通过预处理、目标检测、NMS筛选及文字识别流程,最终输出车牌框位置与识别文本。代码封装良好,支持自定义路径与置信度阈值,具备实际应用价值。

lweiyue的专栏 180

别再手动调波形了!用STM32G474的HRTIM+DAC生成精密锯齿波,附完整CubeMX配置

本文详细介绍了如何利用STM32G474的高分辨率定时器(HRTIM)和数模转换器(DAC)协同工作,实现高精度锯齿波生成。通过CubeMX配置指南、关键寄存器计算和实践技巧,帮助开发者快速掌握全硬件实现的波形生成方案,显著提升嵌入式系统的波形控制精度和响应速度。

weixin_28716769的博客 246

(5)ModalAI VOXL2

Ardupilot官网关于《Non-GPS navigation》的翻译 —《(5) ModalAI VOXL2》。

无人机开发(开源Ardupilot) 1万+

C# NAFNet 图片去模糊

基于NAFNet与ONNX Runtime的C# WinForms图片去模糊工具,支持DirectML GPU加速与CPU回退,实现一键去模糊、大图分块处理、并排对比及拖拽打开。具备高DPI适配、自绘圆角界面、命令行批量处理等功能,适用于Windows 10/11系统,可灵活配置模型路径与分块大小,解决显存不足与边缘接缝问题。

hixiong123的博客 262

8、使用 TPCx - HCI 基准测试表征 HCI 集群的性能和弹性

本文详细介绍了 TPCx - HCI 基准测试,用于衡量超融合基础设施(HCI)集群的性能、稳定性和扩展性。TPCx - HCI 扩展了 TPCx - V 的理念,通过 Tile 架构和弹性特性,全面评估硬件、虚拟化、存储和网络组件的表现。文章还通过多个实验场景分析了负载均衡、数据布局和重新同步策略对性能的影响,并提出了部署和优化 HCI 集群的建议。

sun99的博客 179

使用C#代码提取、修改或删除 Excel 中的超链接

通过 C# 和 VB.NET,可以方便地管理 Excel 文件中的超链接,包括提取、修改和删除等操作。提取超链接: 获取工作表中的超链接集合,读取每个超链接的地址和类型,并将相关信息保存到文本文件中。修改超链接: 更新超链接的显示文本和目标地址,确保链接信息准确。删除超链接: 移除指定的超链接,同时可以选择保留单元格中的原有显示文本,或清除单元格的全部内容。这些操作可以帮助开发人员更高效地管理 Excel 文档中的链接信息,减少重复的手动操作,也便于在数据迁移、文档维护和自动化报表处理等场景中使用。

2501_93070778的博客 236

【红外技术】DDE算法:HE在红外图像可视化上的应用(附源码)

并且数据一般是以 8 的整数倍的位宽在电子系统中应用,因此大多数的显示器的显示位宽为 8bit,共 256 个灰阶。为了使红外图像可视化,因此需要一种“数据压缩”技术,还需要既可能的不丢失原始图像信息。HE后的图像直方图分布比较均匀离散,图像对比度好。但是HE算法只是适用某些图像,它是将灰度集中区域进行拉伸得到,也会放大该集中区域的噪声,它是一种“不公平”的映射。以下是红外细节增强算法的演示,很明显右边的图像,展现了更多的图像细节,对于小目标的观测非常友好。文章已于2019-12-02修改。

sunwindl91181的博客 911

第55篇:数据隐私保护技术盘点——差分隐私、同态加密与它们的坑(踩坑总结)

数据隐私保护是AI工程化中必须严肃对待的课题。差分隐私和同态加密是两把利器,但也都是“重武器”,使用不当反而会伤及自身。差分隐私像“模糊处理”,通过加噪来保证统计安全性,要小心管理隐私预算和效用权衡。同态加密像“保险箱里打算盘”,保证了计算的精确性,但必须承受巨大的性能和工程复杂度代价。我的建议是:从小规模实验开始,先用DP-SGD在MNIST/CIFAR-10等标准数据集上感受噪声与精度的关系;再用TenSEAL等易用的库尝试一个加密逻辑回归,体会密文膨胀和速度延迟。

ai_blue_pm的博客 281

C#: 控件不支持透明的背景色

把透明度固定为255。

海天鹰 46

EtherCAT总线运动控制学习笔记(RXXW_Dor)

说到总线控制,就要说到报文、对象字典、PN通信我们大部分会说报文,EtherCAT通信我们常说对象字典,叫法不一样,但是原理基本一致,下面我们简单认识下上面是对象字典。

RXXW_Dor的博客 5430

基于 OPC UA 的半导体工厂化学气体传输 SCADA 监控系统:架构设计与 C# MVVM 实现

本文提出一套面向半导体化学气体传输的可演进SCADA系统,基于OPCUA统一信息模型与C#+WPF+MVVM技术栈,实现从气源到机台的全链路实时监控、安全联锁与追溯。通过资产树建模、分层解耦架构与标准对齐(SEMI E30/E95/S2),确保系统可扩展、可维护、可审计,满足高安全、高可靠要求,支持快速落地与持续演进。

ponygame的博客 336

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

如何使用C#代码清理 Excel 表格中的空白行与空白列

通过 C# 代码,可以自动检查并删除 Excel 工作表中的空白行和空白列。利用IsBlank属性判断行或列是否为空,再分别调用和方法,即可完成清理操作。与手动逐行、逐列检查相比,这种方式更适合处理包含大量数据的 Excel 文件,能够减少重复操作,提高数据整理效率,使工作表保持整洁、清晰。在实际使用中,建议从工作表的末尾向前遍历并删除空白行和空白列,避免删除操作改变索引位置,影响后续检查。

2501_93070778的博客 203

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用C#代码在 Word 中设置行距和段落间距

通过 C# 代码,可以灵活调整 Word 文档中的行间距和段落间距,从而改善文档的整体排版效果。设置段前间距: 使用属性调整段落前方的空白距离。设置段后间距: 使用属性调整段落后方的空白距离。设置行间距: 使用属性控制同一段落中各行文本之间的距离。合理设置这些间距,不仅可以提高 Word 文档的可读性,还能优化页面空间利用率。这种方式适用于批量格式调整、自动化文档生成以及统一文档排版等场景。

2501_93070778的博客 185

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Avalonia 设备监测实战设计|高频采样怎么接到实时曲线、热力图和 3D 视图?

设备每秒推来的采样批次和页面刷新的节奏通常不同。把每条采样直接推给 UI,会让绘制次数跟着输入速率增长。用做 Avalonia 监测页面时,可以把采集、显示窗口和视图更新拆开,再用测点 ID 把三个视图串起来。

2501_91602431的博客 49

04 · Diagram —— 示意图与接线图

CCDiagramDiagramDiagrams把一组"节点 + 连线"画出来:机车各柜体之间的连线关系、系统拓扑、信号流向。节点是矩形框(可带标题),连线可以带箭头。

hdjsjb的博客 471

C# 14 实战三连:field 关键字、extension 成员与 null 条件赋值

NET 10 带来的 C# 14 不是一场 syntax earthquake,但里面藏着三件日常写码频率极高的改进。这篇不讲新闻稿,只讲用起来什么感觉、编译器在背后做了什么、以及哪里会静默踩坑。

dotnethello的博客 187

C#: (float) RegistryKey.GetValue() 报错 System.InvalidCastException: 指定的转换无效

RegistryKey.GetValue() 类型是 object,首先要转为 string,再 float.Parse(string)。

海天鹰 38

OnlyOffice+poi-tl:把 Word 模板变成可填写、可生成的合同系统

合同表单已经填过主体、金额和日期,为什么还要在Word里再改一遍?以RuoYi Office的真实教学案例,拆解七个字段从模板配置到正文生成、在线编辑和回存的过程,说明poi-tl与OnlyOffice如何分工,以及字段取值、文件缓存和模板版本中的关键设计。

RuoYi Office是基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue3 + Vben Admin + Uniapp 构建的中小企业全业务办公一体化平台,涵盖OA 协同 507

C# 编译器前端深入(二):词法、语法、红绿树与错误恢复

章节编号沿用原单篇文档(如 §3.6 在第二篇、§7.3 在第三篇);roslyn-src本篇承接第一篇:如果还没读过第 0–2 章(概念最小集、csc→语法树的数据流),建议先读。

大坡3D软件开发 155

C#标准程序

包含所有界面的控件。

备忘 275

dnSpy 命令行反编译 C# DLL(实测可用)

均反编译成功,退出码 0,类型与成员签名还原正常。)崩溃,暂不可用,优先使用上述 dnSpy 方式。,但运行即触发 CET 断言(

大坡3D软件开发 205

Java 批量提取 Word 文档中的图片并保存到本地

使用 Java 提取 Word 文档中的图片,可以省去逐张复制、保存的操作,尤其适合处理包含大量插图的报告、产品手册和技术文档。本文通过遍历 Word 文档对象,定位图片并获取其字节数据,再将图片批量保存到本地。整个过程不需要 Microsoft Word,也不涉及图片格式转换,适合用于文档图片整理和自动化处理。

SunnyDays1011的博客 257

C# 15 类型系统补完:Union Types 与 Closed Hierarchies 让编译器替你数清分支

针对 switch 漏分支与跨程序集继承破坏封闭性的问题,给出 union 声明、closed 封闭层级与编译期穷尽校验的组合方案,附 AST 求值落地示例与排错清单。

2301_78967866的博客 391
下一篇: 对象集合如何排序
ipythonii
博客等级 码龄4年 2粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值