Hadde et par ledige minutter nå, så jeg viser en objektorientert variant av dette. Det blir gjerne mer kode ut av det, men jeg liker å holde ting objektorientert. Koden tar også med flertall på valuta. Koden kan forkortes noe hvis man vil bruke linq. Gjorde i tillegg dette om til kun én løkke istedet for det jeg beskreiv tidligere. Dette går nok litt på bekostning av leselighet.
Kode
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace KasseSystem
{
public enum ValutaType
{
Lapp,
Krone,
Øre
}
public abstract class ValutaEnhet : ICloneable
{
public ValutaType ValutaType { get; set; }
public double Verdi { get; set; }
public override string ToString()
{
return string.Format("{0}-{1}", this.Verdi, this.ValutaType.ToString());
}
public object Clone()
{
return this.Clone();
}
}
public class FemtiLapp : ValutaEnhet
{
public FemtiLapp()
{
this.ValutaType = ValutaType.Lapp;
this.Verdi = 50d;
}
}
public class Tyvekroning : ValutaEnhet
{
public Tyvekroning()
{
this.ValutaType = ValutaType.Krone;
this.Verdi = 20d;
}
}
public class Tier : ValutaEnhet
{
public Tier()
{
this.ValutaType = ValutaType.Krone;
this.Verdi = 10d;
}
}
public class Femmer : ValutaEnhet
{
public Femmer()
{
this.ValutaType = ValutaType.Krone;
this.Verdi = 5d;
}
}
public class EnKrone : ValutaEnhet
{
public EnKrone()
{
this.ValutaType = ValutaType.Krone;
this.Verdi = 1d;
}
}
public class FemtiØring : ValutaEnhet
{
public FemtiØring()
{
this.ValutaType = ValutaType.Øre;
this.Verdi = 0.5d;
}
public override string ToString()
{
return string.Format("{0}-{1}", this.Verdi*100, this.ValutaType.ToString());
}
}
class Program
{
static void Main(string[] args)
{
FemtiLapp femtiLapp = new FemtiLapp();
Tyvekroning tyveKroning = new Tyvekroning();
Tier tier = new Tier();
Femmer femmer = new Femmer();
EnKrone enKrone = new EnKrone();
FemtiØring femtiØring = new FemtiØring();
List<ValutaEnhet> valutaEnheter = new List<ValutaEnhet>();
valutaEnheter.Add(femtiLapp);
valutaEnheter.Add(tyveKroning);
valutaEnheter.Add(tier);
valutaEnheter.Add(femmer);
valutaEnheter.Add(enKrone);
valutaEnheter.Add(femtiØring);
double pris = 27.5d;
double betalt = 150;
double rest = betalt - pris;
List<ValutaEnhet> valutaTilbakePrint = new List<ValutaEnhet>();
while (true)
{
if (rest < valutaEnheter[0].Verdi)
{
if (valutaTilbakePrint.Count > 0)
{
string suffix = string.Empty;
if (valutaTilbakePrint.Count > 1)
{
suffix = "r";
if (valutaTilbakePrint[0].ValutaType == ValutaType.Lapp)
suffix = suffix.Insert(0, "e");
}
Console.Write("{0} - {1}{2}{3}", valutaTilbakePrint.Count, valutaTilbakePrint[0].ToString(), suffix, Environment.NewLine );
valutaTilbakePrint.Clear();
if (rest == 0d)
break;
}
valutaEnheter.RemoveAt(0);
continue;
}
rest -= valutaEnheter[0].Verdi;
valutaTilbakePrint.Add(valutaEnheter[0] as ValutaEnhet);
}
}
}
}
Utputt blir på denne måten:
Kode
2 - 50-Lapper
1 - 20-Krone
2 - 1-Kroner
1 - 50-Øre
Sist endret av m0b; 15. desember 2009 kl. 15:33.