基本描述
1.用户有一张信用卡,信用卡有一个总额度
2.每个月会有信用卡账单显示月消费总额,月消费总额是小于信用卡总额度的
3.用户有若干储蓄卡,可选择某张储蓄卡进行还款
4.还款是指从储蓄卡中划走信用卡的月消费总额到信用卡
如果储蓄卡余额不足则还款动作不成功
5.使用委托,事件的触发方式是每个月的到期还款日
功能说明
1.定义储蓄卡类、信用卡类、People类、委托类
2.People类中包含储蓄卡类对象数组,体现出用户有若干储蓄卡,并定义还款方法,让用户选择一张储蓄卡为信用卡还款
3.当还款日不足4天时,提醒用户;当还款日到来时,触发事件,进行还款
主要代码
1.定义储蓄卡类
储蓄卡类包含属性卡号id,余额amount,构造方法
class DepositCard //储蓄卡
{
internal string id;
internal int amount;
public DepositCard(string id,int amount)
{
this.id = id;
this.amount = amount;
}
public string Id { get { return id; } }
public int Amount { get { return amount; } set { amount = value; } }
}
2.定义信用卡类
信用卡类包含属性卡号id,欠款debt,还款日期payDate,构造方法
class CreditCard //信用卡
{
private string id; //卡号
internal int debt; //欠款
internal int payDate;//还款日期
public CreditCard(string id,int payDate,int debt)
{
this.id = id;
this.payDate = payDate;
this.debt = debt;
}
public string Id { get { return id; } }
public int Debt { get { return debt; } set { debt=value; } }
public int PayDate { get { return payDate; } }
}
3.定义People类
People类中包含姓名name,储蓄卡类对象数组DCs,信用卡类对象CC以及构造方法,并定义了Repay()方法–即选择一张储蓄卡为信用卡还款
class People
{
internal string name;
internal DepositCard[] DCs;
internal CreditCard CC;
public People(string name, DepositCard[] DCs,CreditCard CC)
{
this.name = name;
this.DCs = DCs;
this.CC = CC;
}
public void Repay()
{
Console.WriteLine("********今天是还款日!********");
Console.WriteLine("用户{0}当前欠款:{1}元", name,CC.Debt);
Console.Write("用户{0}请选择您的一张储蓄卡进行还款,请输入储蓄卡序号:", name);
int no= int.Parse(Console.ReadLine());
if(DCs[no].amount>CC.Debt)
{
DCs[no].amount -= CC.Debt;
CC.Debt = 0;
Console.WriteLine("用户{0}还款成功!您的储蓄卡{1}余额为:{2}元!", name, DCs[no].id, DCs[no].amount);
}
else
{
Console.WriteLine("用户{0}还款失败,请尽快还款!", name);
}
}
}
4.定义委托类
声明了委托MyDelegate,事件RepayEvent,当事件触发时,调用订阅事件RepayEvent的对象的委托
class RepayDelegate
{
public delegate void MyDelegate();
public event MyDelegate RepayEvent;
public void RepayMoney()
{
if (RepayEvent != null)
{
RepayEvent();
}
}
}
5.定义主程序
建立了3个DepositCard类对象DC1-3,1个CreditCard类对象CC1,并用DC1-3初始化DepositCard数组DCs,最后用DCs、CC1建立People类对象user1,当到达还款日时触发事件
internal class Program
{
static void Main(string[] args)
{
DepositCard DC1 = new DepositCard("dc0001",9000);
DepositCard DC2 = new DepositCard("dc0002", 3000);
DepositCard DC3 = new DepositCard("dc0003", 7000);
DepositCard[] DCs= new DepositCard[3];
DCs[0] = DC1;
DCs[1] = DC2;
DCs[2] = DC3;
CreditCard CC1 = new CreditCard("cc0001", 15,6000);
People user1 = new People("张三", DCs, CC1);
RepayDelegate objDelegate1 = new RepayDelegate();
objDelegate1.RepayEvent += new RepayDelegate.MyDelegate(user1.Repay);
for (int day=1;day<30;day++)
{
if (user1.CC.payDate - day<4&& user1.CC.payDate - day >0)
{
Console.WriteLine("用户{0}你好!您当前欠款{1}元!", user1.name, user1.CC.debt);
Console.WriteLine("****今天离还款日还有{0}天!", user1.CC.payDate - day);
}
if (user1.CC.payDate == day)
{
objDelegate1.RepayMoney();
}
}
}
}
}
全部代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Repay
{
class People
{
internal string name;
internal DepositCard[] DCs;
internal CreditCard CC;
public People(string name, DepositCard[] DCs,CreditCard CC)
{
this.name = name;
this.DCs = DCs;
this.CC = CC;
}
public void Repay()
{
Console.WriteLine("********今天是还款日!********");
Console.WriteLine("用户{0}当前欠款:{1}元", name,CC.Debt);
Console.Write("用户{0}请选择您的一张储蓄卡进行还款,请输入储蓄卡序号:", name);
int no= int.Parse(Console.ReadLine());
if(DCs[no].amount>CC.Debt)
{
DCs[no].amount -= CC.Debt;
CC.Debt = 0;
Console.WriteLine("用户{0}还款成功!您的储蓄卡{1}余额为:{2}元!", name, DCs[no].id, DCs[no].amount);
}
else
{
Console.WriteLine("用户{0}还款失败,请尽快还款!", name);
}
}
}
class DepositCard //储蓄卡
{
internal string id;
internal int amount;
public DepositCard(string id,int amount)
{
this.id = id;
this.amount = amount;
}
public string Id { get { return id; } }
public int Amount { get { return amount; } set { amount = value; } }
}
class CreditCard //信用卡
{
private string id; //卡号
internal int debt; //欠款
internal int payDate;//还款日期
public CreditCard(string id,int payDate,int debt)
{
this.id = id;
this.payDate = payDate;
this.debt = debt;
}
public string Id { get { return id; } }
public int Debt { get { return debt; } set { debt=value; } }
public int PayDate { get { return payDate; } }
}
class RepayDelegate
{
public delegate void MyDelegate();
public event MyDelegate RepayEvent;
public void RepayMoney()
{
if (RepayEvent != null)
{
RepayEvent();
}
}
}
internal class Program
{
static void Main(string[] args)
{
DepositCard DC1 = new DepositCard("dc0001",9000);
DepositCard DC2 = new DepositCard("dc0002", 3000);
DepositCard DC3 = new DepositCard("dc0003", 7000);
DepositCard[] DCs= new DepositCard[3];
DCs[0] = DC1;
DCs[1] = DC2;
DCs[2] = DC3;
CreditCard CC1 = new CreditCard("cc0001", 15,6000);
People user1 = new People("张三", DCs, CC1);
RepayDelegate objDelegate1 = new RepayDelegate();
objDelegate1.RepayEvent += new RepayDelegate.MyDelegate(user1.Repay);
for (int day=1;day<30;day++)
{
if (user1.CC.payDate - day<4&& user1.CC.payDate - day >0)
{
Console.WriteLine("用户{0}你好!您当前欠款{1}元!", user1.name, user1.CC.debt);
Console.WriteLine("****今天离还款日还有{0}天!", user1.CC.payDate - day);
}
if (user1.CC.payDate == day)
{
objDelegate1.RepayMoney();
}
}
}
}
}
运行结果
还款日到来时,分别使用张三用户的三张储蓄卡尝试还款,结果如下:
总结
通过本次实验,体会了事件和委托的应用,熟悉了类的访问权限、属性等,为后续学习打下基础