2 svar
690 visningar
sHADOW behöver inte mer hjälp
sHADOW 17 – Fd. Medlem
Postad: 9 nov 2020 12:44

Hjälp med c#

har provat med den uppgiften innan men jag kunde inte lösa det själv

 

Ett kassasystem är ju ett sånt som kassapersonalen använder i en butik för att registrera försäljning
och skapa ett kvitto.
Alla produkter lagras i en textfil. När programmet startas läses en textfil in med data och alla objekt
skapas. Tips! Läs på mer om ToString och Parse som kan ta fler parametrar som styr hur tal och
datum formateras och tolkas. Kolla in InvariantCulture som är en variant av CultureInfo som ofta
används för import och export.
Följande data ska lagras på Produkt,
produktid (snabbkommando i kassan, ex ”300” för bananer nedan)
pris
pris typ – är det per kilo eller per styck
produktnamn

När man kör kassan ska det se ut ungefär som följer:
-----------------
KASSA
1. Ny Kund
2. Avsluta
----------------
Vid val av 1 startas då en ny försäljning
Systemet ska då visa aktuellt kvitto (de produkter som registrerats) samt en kommandoinmatning.
-------------------------------------------------------------------------------------------------
KVITTO 2020-11-01 05:13:52
Bannaner 2 * 12,50 = 25,00
Kaffe 5 * 35,50 = 177,50
Total : 202,50

Kommandon
<productid> <antal>
PAY
KOMMANDO : 300 4

Kommandoinmatningen är antingen
PAY (då ”fejkar” vi att betalning sker) och kvittot sparas i en fil (se nedan) och programmet får
tillbaka till menyn innan
produktid antal (ex ex 300 1, betyder lägg till en av produktid ”300”)
Kvitton sparas ned vid PAY till en fil RECEIPT_yyyyMMdd.txt (dagens datum). OBS! Det blir alltså
FLERA kvitton i samma fil. Fundera ut och implementera ngn slags särskiljare så man kan skilja olika
kvitton åt
Objektorienterad kod!
Console-applikation
Felhantering: korrekta inmatningar osv osv

Separera olika funktioner så som filhantering till separata objekt så inte all funktionalitet hamnar i
en stor fet ”Gud”-klass. Läs mer om Single Responsibility Principle.
Adminverktyg (med meny!)
Där man kan ändra namn och pris för en produkt (OBS!!! Ändrar man produktens pris kan man ju
inte ändra pris på befintliga kvitton osv)
kvitton ska ha ett löpnummer! Utan ”hål” i.
söka kvitton: mata in dag och man ska då få se kvittonummer+totalbelopp och sen välja och se hela
kvittot
Lägg till CampaignPrice på produkt. Samt start.- och slutdatum för när kampanjpriset ska gälla.
Gör så det går att modifiera. Blanka värden ska vara med ingen kampanj. Och när man ”köper”
så ska kampanjpriset gälla ifall dagens datum är mellan start och slutdatum

 


JAG har börjat med det flera gåger men jag fick den inte att fungera
jag måste lämna in den snart jag behöver guidness för jag vet att jag kan bättre än så

 

jag skapade flera klasser:
class ReceipItem
{
public string ProdctId { get; set; }
public string ProductName { get; set; }
public decimal ProductPrice { get; set; }
public int Quantity{ get; set; }
public ReceipItem()
{
Quantity = 0;
}
}
------------------------------------------------------
class Receip
{

public int Id { get; set; }
public DateTime DateTime { get; set; }

public decimal ReceiptOffer()
{
var itemsTotal = ItemsTotal();
if (itemsTotal >= 2000) return -0.03m * itemsTotal;
if (itemsTotal >= 1000) return -0.02m * itemsTotal;
return 0;
}

public decimal ItemsTotal()
{
return Rows.sum(r => ProductPrice * r.Quantity);
}
public decimal ReceipTotal()
{
return ItemsTotal() + Offer();
}
public List<ReceipItem> Rows { get; set; }

public Receip()
{
DateTime = DateTime.Now;
Rows = new List<ReceipItem>();

}


}
----------------------------------------------------------
class Costumor
{

private static void CashRegisterDoCostumor()
{
var receip = new Receip();
while (true)
{
Console.Clear();
Console.WriteLine("Kassa");
ShowReceip(receip);

Console.WriteLine("Kommandon");
Console.WriteLine("<"Productid> <antal>");
Console.WriteLine("PAY");
Console.Write("Kommandon");
string input = Console.ReadLine();
if (input == "PAY")
{
Console.WriteLine("Faking we get paid");
Console.WriteLine("Saving to receipFile for today");
System.Threading.Thread.Sleep(3000);
break;
}

}
}
-----------------------------------------------------------------
class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public string Id { get; private set; }
public PriceType PriceType { get; set; }

public Product()
{
Id = Id;
}
public Product(string id)
{

}
}
------------------------------------------------------------------
enum PriceType
{

PerPiece,
PerKilo
}
-----------------------------------------------------------------
100 | Bananer | 22,50 | PerKilo
200 | Kaffe | 40,00 | PerPiece
300 | Spaghetti | 11,50 Per piece
------------------------------------------------------------------
Main har jag inte börjat fulla på än

jag vet att jag behöver lösa det själv och jag försöker men där tar det stop

macson 320 – Admin
Postad: 12 nov 2020 09:52

Hej!

Det är lite oklart vad du frågar efter här =D

Jag tänker att din main-metod borde "delegera" flödet till någon av modulerna som tex. hanterar ett köp.

Ett tips när du ska spara ner data är tex att använda en json-serializer som tex "JSON.NET" för och sedan spara dem på disk. Typ

string json = JsonConvert.Serializer(mittKvitto);


och

Receip receip = JsonConvert.Deserialize<Receip>(jsonString)


Vad är det för problem du har med main? Beskriv gärna det så kanske vi kan hjälpa dig.

sHADOW 17 – Fd. Medlem
Postad: 12 nov 2020 10:27

hej @macson tack för din svar , grejen är att jag har omtenta på c# kursen och det här va en gammal uppgift som jag försöker träna på objektorientering som jag har svårt med i och med att vi får bara distansundervisning nu p.g.a  covid19 o det har inte varit produktiv för min del

Svara
Close