目录
题目
使用C#,利用委托功能实现信用卡用户定时还款功能
一、问题分析
本项目实现了定时还款功能,在用户还款日不足五天时进行自动提醒,当到达还款日时系统自动扣除用户账户余额,若余额不足则提示还款失败。
二、核心代码及功能说明
委托类
class Delegate
{
//定义委托
public delegate void MeDelegate(People people);
//定义事件
//还款日小于5天的时候定时通知还款日
public event MeDelegate Notification_event;
//到达还款日,直接扣款
public event MeDelegate Payback_event;
public void Notify(People people)
{
if (Notification_event != null)
{
Notification_event(people);
}
}
public void Payback(People people)
{
if (Payback_event != null)
{
//触发事件
Payback_event(people);
}
}
}
用户类
class People
{
//用户姓名
private string name;
//所剩账户余额
private int remain_money;
// 所需还款金额
private int owe_money;
//还款日期
private int payday;
public People(string name, int remain_money, int owe_money, int payday)
{
this.name = name;
this.remain_money = remain_money;
this.owe_money = owe_money;
this.payday = payday;
}
//利用属性实现get,set
public string Name
{
get { return name; }
set { name = value; }
}
public int Remain_money
{
get { return remain_money; }
set { remain_money = value; }
}
public int Owe_money
{
get { return owe_money; }
set { owe_money = value; }
}
public int Payday
{
get { return payday; }
set { payday = value; }
}
}
银行类
class Bank
{
public void Do_Notify(People people)
{
Console.WriteLine(" 尊敬的用户{0},目前距还款日不足5天,请及时缴纳还款{1}元,谢谢!", people.Name, people.Owe_money);
}
public void Do_Payback(People people)
{
Console.WriteLine(" 尊敬的用户{0},还款日已到,还款将自动扣除,正在操作中...", people.Name);
if (people.Remain_money < people.Owe_money) { Console.WriteLine("您的余额不足,还款失败!"); }
else
{
people.Remain_money = people.Remain_money - people.Owe_money;
people.Owe_money = 0;
Console.WriteLine(" 尊敬中的用户,您的欠款已还清,目前余额为{0}元,欠款情况为{1}元", people.Remain_money, people.Owe_money);
}
}
}
主程序
static void Main(string[] args)
{
People p1 = new People("txy", 2000, 500, 7);
People p2 = new People("小明", 500, 100, 11);
People p3 = new People("小华", 200, 30, 15);
//定义一个Bank类对象
Bank bank1 = new Bank();
//定义委托类对象
Delegate objDelegate1 = new Delegate();
Delegate objDelegate2 = new Delegate();
//对象订阅事件
objDelegate1.Notification_event += bank1.Do_Notify;
objDelegate2.Payback_event += bank1.Do_Payback;
for (int i = 1; i <= 20; i++)
{
Console.WriteLine("****今天是第{0}天****", i);
Console.WriteLine("");
if (p1.Payday - i < 5 && p1.Payday - i > 0) objDelegate1.Notify(p1);
if (p2.Payday - i < 5 && p2.Payday - i > 0) objDelegate1.Notify(p2);
if (p3.Payday - i < 5 && p3.Payday - i > 0) objDelegate1.Notify(p3);
if (p1.Payday == i) objDelegate2.Payback(p1);
if (p2.Payday == i) objDelegate2.Payback(p2);
if (p3.Payday == i) objDelegate2.Payback(p3);
}
}
三、整体源码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Consoletest2
{
class Delegate
{
//定义委托
public delegate void MeDelegate(People people);
//定义事件
//还款日小于5天的时候定时通知还款日
public event MeDelegate Notification_event;
//到达还款日,直接扣款
public event MeDelegate Payback_event;
public void Notify(People people)
{
if (Notification_event != null)
{
Notification_event(people);
}
}
public void Payback(People people)
{
if (Payback_event != null)
{
//触发事件
Payback_event(people);
}
}
}
class People
{
//用户姓名
private string name;
//所剩账户余额
private int remain_money;
// 所需还款金额
private int owe_money;
//还款日期
private int payday;
public People(string name, int remain_money, int owe_money, int payday)
{
this.name = name;
this.remain_money = remain_money;
this.owe_money = owe_money;
this.payday = payday;
}
//利用属性实现get,set
public string Name
{
get { return name; }
set { name = value; }
}
public int Remain_money
{
get { return remain_money; }
set { remain_money = value; }
}
public int Owe_money
{
get { return owe_money; }
set { owe_money = value; }
}
public int Payday
{
get { return payday; }
set { payday = value; }
}
}
class Bank
{
public void Do_Notify(People people)
{
Console.WriteLine(" 尊敬的用户{0},目前距还款日不足5天,请及时缴纳还款{1}元,谢谢!", people.Name, people.Owe_money);
}
public void Do_Payback(People people)
{
Console.WriteLine(" 尊敬的用户{0},还款日已到,还款将自动扣除,正在操作中...", people.Name);
if (people.Remain_money < people.Owe_money) { Console.WriteLine("您的余额不足,还款失败!"); }
else
{
people.Remain_money = people.Remain_money - people.Owe_money;
people.Owe_money = 0;
Console.WriteLine(" 尊敬中的用户,您的欠款已还清,目前余额为{0}元,欠款情况为{1}元", people.Remain_money, people.Owe_money);
}
}
}
class Program
{
static void Main(string[] args)
{
People p1 = new People("txy", 2000, 500, 7);
People p2 = new People("小明", 500, 100, 11);
People p3 = new People("小华", 200, 30, 15);
//定义一个Bank类对象
Bank bank1 = new Bank();
//定义委托类对象
Delegate objDelegate1 = new Delegate();
Delegate objDelegate2 = new Delegate();
//对象订阅事件
objDelegate1.Notification_event += bank1.Do_Notify;
objDelegate2.Payback_event += bank1.Do_Payback;
for (int i = 1; i <= 20; i++)
{
Console.WriteLine("****今天是第{0}天****", i);
Console.WriteLine("");
if (p1.Payday - i < 5 && p1.Payday - i > 0) objDelegate1.Notify(p1);
if (p2.Payday - i < 5 && p2.Payday - i > 0) objDelegate1.Notify(p2);
if (p3.Payday - i < 5 && p3.Payday - i > 0) objDelegate1.Notify(p3);
if (p1.Payday == i) objDelegate2.Payback(p1);
if (p2.Payday == i) objDelegate2.Payback(p2);
if (p3.Payday == i) objDelegate2.Payback(p3);
}
}
}
}
四、结果截图
五、心得体会
1.本次实验将委托与事件应用到实际的事情中,我更加熟悉了类的调用以及委托事件的用法。
2.实验过程中我发现自己对于委托和事件之间调用的规则不是很理解,对于事件的触发机制、参数如何传递的也不熟悉,写代码的过程中遇到了很多困难,在以后的写代码过程中要加强自己将理论应用于实际事情中的能力。