using System;
namespace Wrox.ProCSharp.OOProg //The first program
{
class MainEntryPoint
{
static void Main()
{
Authenticator myAccess = new Authenticator();
bool done;
done = myAccess.ChangePassword("", "MyNewPassword");
if (done == true)
Console.WriteLine("Password for myAccess changed");
else
Console.WriteLine("Failed to change password for myAccess");
done = myAccess.ChangePassword("", "AnotherPassword");
if (done == true)
Console.WriteLine("Password for myAccess changed");
else
Console.WriteLine("Failed to change password for myAccess");
if (myAccess.IsPasswordCorrect("WhatPassword"))
Console.WriteLine("Verified myAccess\' password");
else
Console.WriteLine("Failed to verify myAccess\' password");
}
}
public class Authenticator
{
// implementation as shown earlier
private string password = "";
public bool IsPasswordCorrect(string tryPassword)
{
return (tryPassword == password) ? true : false;
}
public bool ChangePassword(string oldPassword, string newPassword)
{
if (oldPassword == password)
{
password = newPassword;
return true;
}
else
return false;
}
}
}
using System;
namespace Wrox.ProCSharp.OOProg //The Second program
{
class MainEntryPoint
{
static void Main()
{
Authenticator myAccess = new Authenticator();
bool done;
done = myAccess.ChangePassword("", "MyNewPassword");
if (done == true)
Console.WriteLine("Password for myAccess changed");
else
Console.WriteLine("Failed to change password for myAccess");
done = myAccess.ChangePassword("", "AnotherPassword");
if (done == true)
Console.WriteLine("Password for myAccess changed");
else
Console.WriteLine("Failed to change password for myAccess");
if (myAccess.IsPasswordCorrect("WhatPassword"))
Console.WriteLine("Verified myAccess\' password");
else
Console.WriteLine("Failed to verify myAccess\' password");
}
}
public class Authenticator
{
// implementation as shown earlier
private string password = "";
public bool IsPasswordCorrect(string tryPassword)
{
return (tryPassword == password) ? true : false;
}
public bool ChangePassword(string oldPassword, string newPassword)
{
if (oldPassword == password)
{
password = newPassword;
return true;
}
else
return false;
}
}
}
namespace Wrox.ProCSharp.OOProg
{
using System;
public enum TypeOfCall
{
CallToCellPhone, CallToLandline
}
public class Customer
{
private string name;
private decimal balance;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public decimal Balance
{
get
{
return balance;
}
}
public void RecordPayment(decimal amountPaid)
{
balance -= amountPaid;
}
public void RecordCall(TypeOfCall callType, uint nMinutes)
{
switch (callType)
{
case TypeOfCall.CallToLandline:
balance += (0.02M * nMinutes);
break;
case TypeOfCall.CallToCellPhone:
balance += (0.30M * nMinutes);
break;
default:
break;
}
}
}
public class MainEntryPoint
{
public static void Main()
{
Customer arabel = new Customer();
arabel.Name = "Arabel Jones";
Customer mrJones = new Customer();
mrJones.Name = "Ben Jones";
arabel.RecordCall(TypeOfCall.CallToLandline, 20);
arabel.RecordCall(TypeOfCall.CallToCellPhone, 5);
mrJones.RecordCall(TypeOfCall.CallToLandline, 10);
Console.WriteLine("{0,-20} owes ${1:F2}", arabel.Name, arabel.Balance);
Console.WriteLine("{0,-20} owes ${1:F2}", mrJones.Name, mrJones.Balance);
}
}
}
namespace Wrox.ProCSharp.OOProg
{
using System;
public enum TypeOfCall
{
CallToCellPhone, CallToLandline
}
public class Customer
{
private string name;
protected decimal balance;
public string GetFunnyString()
{
return "Plain ordinary customer. Kaark!";
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public decimal Balance
{
get
{
return balance;
}
}
public void RecordPayment(decimal amountPaid)
{
balance -= amountPaid;
}
public virtual void RecordCall(TypeOfCall callType, uint nMinutes)
{
switch (callType)
{
case TypeOfCall.CallToLandline:
balance += (0.02M * nMinutes);
break;
case TypeOfCall.CallToCellPhone:
balance += (0.30M * nMinutes);
break;
default:
break;
}
}
}
public class Nevermore60Customer : Customer
{
private uint highCostMinutesUsed;
public new string GetFunnyString()
{
return "Nevermore60. Nevermore!";
}
public override void RecordCall(TypeOfCall callType, uint nMinutes)
{
switch (callType)
{
case TypeOfCall.CallToLandline:
balance += (0.02M * nMinutes);
break;
case TypeOfCall.CallToCellPhone:
uint highCostMinutes, lowCostMinutes;
uint highCostMinutesToGo =
(highCostMinutesUsed < 60) ? 60 - highCostMinutesUsed : 0;
if (nMinutes > highCostMinutesToGo)
{
highCostMinutes = highCostMinutesToGo;
lowCostMinutes = nMinutes - highCostMinutes;
}
else
{
highCostMinutes = nMinutes;
lowCostMinutes = 0;
}
highCostMinutesUsed += highCostMinutes;
balance += (0.50M * highCostMinutes + 0.20M *
lowCostMinutes);
break;
default:
break;
}
}
}
public class MainEntryPoint
{
public static void Main()
{
Customer cust1;
Nevermore60Customer cust2;
cust1 = new Customer();
Console.WriteLine("Customer referencing Customer: "
+ cust1.GetFunnyString());
cust1 = new Nevermore60Customer();
Console.WriteLine("Customer referencing Nevermore60Customer: "
+ cust1.GetFunnyString());
cust2 = new Nevermore60Customer();
Console.WriteLine("Nevermore60Customer referencing: "
+ cust2.GetFunnyString());
}
}
}