前言
C# 课程作业1,委托与事件
一、程序设计题:请使用委托实现信用卡用户定时还款功能
本题的应用场景解释:用户有一张信用卡,信用卡有一个总额度;每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的;用户有若干储蓄卡,可选择某张储蓄卡进行还款; 还款是指从储蓄卡中划走信用卡的月消费总额到信用卡;如果储蓄卡余额不足则还款动作不成功。
要求如下:①必须使用委托②事件的触发方式是每个月的到期还款日;
二、功能说明
1.题目要求为一个用户一张信用卡,故定义一个信用卡类CreditCard,包含可用额度、月消费额两个成员变量以及一个消费函数consume。
2.储蓄卡有多张,故设计一个抽象类,其子类为不同银行的不同储蓄卡。有一个成员变量:储蓄卡余额,和一个还款函数repay。
3.定义了一个用户类User进行操作,有一张信用卡和多张储蓄卡。类中有两个函数,userconsume用来指定本月消费金额,userrepay用来选择储蓄卡号并进行还款。
4.User进行消费后,调用Delegate类中的RepaymentDay表示还款日期到了,并通过参数指定用于还款的卡号。
三、代码
代码如下:
using System;
namespace Work
{
//信用卡
class CreditCard
{
public double quota; //可用额度
public double consumption; //月消费额(也即当月所需还款金额)
public CreditCard() { }
public CreditCard(double q)
{
quota = q;
}
//信用卡消费
public void consume(double money)
{
if (money > quota)
{
Console.WriteLine("信用卡额度不足。");
return;
}
consumption = money;
quota -= money;
Console.WriteLine("本月消费:" + money);
}
}
//抽象储蓄卡类,子类为不同银行的储蓄卡
abstract class DepositCard
{
public double banlance;
//还款
public void repay(double money)
{
if (money <= banlance)
{
banlance -= money;
return;
}
Console.WriteLine("余额不足");
}
}
class NongyeCard : DepositCard //农业银行
{
public NongyeCard() { }
public NongyeCard(double money)
{ banlance = money; }
}
class YouChuCard : DepositCard //邮储银行
{
public YouChuCard() { }
public YouChuCard(double money)
{ banlance = money; }
}
//用户,有一张信用卡和多张储蓄卡
class User
{
public CreditCard creditCard;
public DepositCard[] depositCards;
public void userconsume(double money)
{
creditCard.consume(money);
}
//根据cid选择一张储蓄卡并还款
public void userrepay(int cid)
{
double money = creditCard.consumption;
depositCards[cid].repay(money);
creditCard.quota += money; //还款后信用卡可用额度增加
}
}
class Delegate
{
public delegate void MyDelegate(int cid);
public event MyDelegate Repayment;
public void RepaymentDay(int cid)
{
if (Repayment != null)
{
Console.WriteLine("还款日到了!");
Repayment(cid);
}
else
{
Console.WriteLine("请添加用于还款的储蓄卡!");
}
}
}
class Program
{
[STAThread]
static void Main(string[] args)
{
//创建用户以及银行卡
DepositCard[] dcards = new DepositCard[2];
dcards[0] = new NongyeCard(2000);
dcards[1] = new YouChuCard(1000);
Console.WriteLine("card0 初始金额" + dcards[0].banlance);
Console.WriteLine("card1 初始金额" + dcards[1].banlance);
User user = new User();
user.creditCard = new CreditCard(3000);
user.depositCards = dcards;
Console.WriteLine();
//委托还款事件
Delegate dg = new Delegate();
dg.Repayment += new Delegate.MyDelegate(user.userrepay);
user.userconsume(1000);
dg.RepaymentDay(0);
Console.WriteLine("card0剩余金额" + dcards[0].banlance);
Console.WriteLine();
user.userconsume(2001);
dg.RepaymentDay(1);
Console.WriteLine("card0剩余金额" + dcards[1].banlance);
Console.WriteLine();
user.userconsume(9999);
}
}
}