Hej
Er gået i gang med et større projekt på skolen. Vi koder i C# og jeg går på 2.sem.
Vi har skulle skabe et "Register" (Ligesom et kasseapparat) som skal kunne klare at ordne et salg og senere hen har vi tilkoblet en kunde med oplysninger til salget. Både varer og kunden er hardcodede ind i starten. Alt dette er gået fint ved at skabe følgende klasser:
Store (Butik)
Register
Customer
CustomerCatalog
Product
ProductCatalog
Sale
SalesLineItem
Register er min controller og alt går igennem den. Da det hele blev harcodede ind kunne jeg godt få lortet til at virke, men nu har vi fået besked på at smide GUI på, hvilket ikke umiddelbart virker vanskeligt. Men det er det åbenbart for mig :/
Jeg skal nu skabe en form som man kan bruge til at oprette varer som så skal kunne gemmes i min arraylist som ligger i ProductCatalog. Vi har fået af vide af læren at da Register er controller skal alt fra GUI og ned til model-niveauet foregå igennem Register-klassen.
Det her er første gang vi for det første skaber så store et projekt selv og første gang vi skal "Add" til et projekt. Jeg tror jeg har gjort det rigtigt, men er dog ikke sikker.
Jeg har skabt 1 get og 1 set-metode i Register-klassen, som henholdsvis bruges til at hente det jeg indtaster om varen i textboxene og føre det ned i Register-klassen, her bliver det smidt over i get-metoden som så bliver kaldt af en anden metode i min ProductCatalog-klasse. Her bliver det så tilføjet min Arraylist til vare (Lidt ligesom et lager).
Kan godt se meningen med alt det her, MEN jeg får følgende fejl:
Error 1 An object reference is required for the nonstatic field, method, or property 'Register.SetCreateProduct(ProductDescription)' (Form2.cs 40)
Error 2 An object reference is required for the nonstatic field, method, or property 'Register.GetCreateProduct()' i linje 67 (Kasseregister2)
ER DER IKKE EN VENLIG SJÆL DER GIDER AT HJÆLPE MIG MED DET HER, HAR SPILDT EN HEL UGE PÅ DET HER ALLEREDE UDEN AT KOMME VIDERE
Kode:
KasseRegister2.cs
using System;
using System.Collections;
public class CustomerCatalog
{
private ArrayList CustomerList = new ArrayList(); //Skaber en Arraylist til vores kunder
public CustomerCatalog() //Constructor
{
int telf = 0; //HVORFOR KUN 0, OG IKKE HELE TELEFONNUMMERET??????
string knavn = "Casper";
double krabat = 22.5;
Customer cust;
cust = new Customer(telf, knavn, krabat); //Indsætter telfonnr, navn og rabat fra kunden ind i arraylisten
CustomerList.Add(cust);
}
public Customer getCustomer(int tele) //En metode til at hente oplysninger om kunden som skal bruges et andet sted i koden
{
return (Customer)CustomerList[tele]; //Sender hele arraylisten, til dem som skal bruge den
}
}
public class Customer
{
private int telefonnr;
private string kundeNavn;
private double kundeRabat;
public Customer(int telefonnr, string kundeNavn, double kundeRabat) //Constructor
{
this.telefonnr = telefonnr;
this.kundeNavn = kundeNavn;
this.kundeRabat = kundeRabat;
}
public string getCustomerName()
{
return kundeNavn;
}
public double getCustomerRabat()
{
return kundeRabat;
}
public int getCustomerTelefon()
{
return telefonnr;
}
}
public class ProductCatalog
{
private ArrayList descriptions = new ArrayList();
public ProductCatalog() //Constructor
{
}
public void CreateProduct()
{
ProductDescription Ting = Register.GetCreateProduct();
descriptions.Add(Ting);
}
public ProductDescription getProductDescription(int id) //En metode til at hente produktoplysninger til et andet sted
{
return (ProductDescription)descriptions[id];
}
}
public class Register
{
private ProductCatalog catalog;
private CustomerCatalog custCatalog;
private Sale currentSale;
private static Register instance = null; //Singleton
private ProductDescription Ting2 = null;
private Register(ProductCatalog catalog, CustomerCatalog custCatalog) //Constructor
{
this.catalog = catalog;
this.custCatalog = custCatalog;
}
public static Register GetInstance(ProductCatalog catalog, CustomerCatalog custCatalog) //Singleton
{
if (instance == null)
{
instance = new Register(catalog, custCatalog);
}
return instance;
}
public void SetCreateProduct(ProductDescription Ting)
{
Ting2 = Ting;
}
public ProductDescription GetCreateProduct()
{
return (ProductDescription)Ting2;
}
public void endSale() //Afslut salg
{
currentSale.becomeComplete();//Bruger metoden becomeComplete() til at finde ud af om salget er afsluttet
}
public void enterItem(int id, int quantity) //Indtastning af vare + antal
{
ProductDescription desc = catalog.getProductDescription(id); //henter produkt beskrivelsen af varene og smider dem over i desc
currentSale.makeLineItem(desc, quantity); //Smider dem ind i et Arraylist med navnet LineItems, som ligger i Sale
}
public void enterCust(int tele) //Indtastning af eksisterende kunde til en regning
{
Customer cust = custCatalog.getCustomer(tele);
currentSale.AddCustToSale(cust);
}
public void makeNewSale() //Skaber et nyt salg
{
currentSale = new Sale();
}
public void makePayment(double cashTendered)//Finder ud af hvad man skal betale
{
currentSale.makePayment(cashTendered);//Henter fra salg (currentSale)
}
public double getSaleTotal() //Henter den samlede pris for alle varene i getTotal som ligger i Sale klassen
{
double total = currentSale.getTotal();//Tager værdien fra getTotal i Sale-klassen og overfører det i en double total
return total; // returnere den samlede pris, TIL Larman klassen
}
public double getMoms() //Finder momsen af de varer man køber
{
double moms = currentSale.Moms(); //Henter oplysninger fra Moms-metoden i Sale-klassen
return moms;
}
public void Print()
{
currentSale.Print(); //Henter fra print metoden i Sale-klassen
}
}
public class ProductDescription
{
private int id;
private double prize;
private string description;
public ProductDescription(int id, double prize, string description) //Constructor
{
this.id = id;
this.prize = prize;
this.description = description;
}
public int getItemID() //En metode til at hente produkt id'et
{
return id;
}
public double getPrize()//En metode til at hente prisen på varen
{
return prize;
}
public string getDescription() //En metode til at hente produkt beskrivelse af varen
{
return description;
}
}
public class Sale
{
private ArrayList lineItems = new ArrayList();
private Customer thisCust;
//private DateTime date = new DateTime();
private bool isComplete = false;
private double payment = 0;
public Sale() //Constructor
{
}
public double getBalance()//En metode til at hente balancen efter det indbetalte og det købte
{
return payment - getTotal(); //Her minuser man payment(betaling) med metoden getTotal
}
public void becomeComplete() //En metode som spørger om salget er færdigt
{
isComplete = true; //Sætter isComplete til at være sand
}
public bool IsComplete()//En bool metode som kan vise om salget er færdigt eller ej
{
return isComplete;
}
public void makeLineItem(ProductDescription desc, int quantity) //En metode som indsætter de ønskede varer + antal i arraylisten lineItems, skal indeholde de ønskede varer
{
lineItems.Add(new SalesLineItem(desc, quantity));
}
public void AddCustToSale(Customer cust) //Indsætter den ønskede kunde i en variabel som kan bruges her i klassen
{
thisCust = cust;
}
public double getTotal() //Lægger prisen sammen på de ønskede varer i vores arraylist
{
double total = 0;
double subtotal = 0;
foreach (SalesLineItem lineItem in lineItems)
{
subtotal = lineItem.getSubtotal();
total += subtotal;
}
return total;
}
public double Moms() //Finder momsen af det samlede køb
{
double moms = getTotal() * 0.25;
return moms;
}
public void makePayment(double cashTendered) //Sætter det input(penge) kunden betaler til at være = payment
{
double payment = cashTendered;
}
public void Print()
{
//Indhentning
double ddMoms = Moms(); //Henter momsen på beløbet
string ssCust = thisCust.getCustomerName(); //Henter kundens navn
double ddCust = thisCust.getCustomerRabat(); //Henter kundens rabat
int iiCust = thisCust.getCustomerTelefon(); //Henter kundens telefonnummer
double total = getTotal(); //Beregn totalen
//Udskrift
Console.Clear(); //Rengøre konsollen
Console.WriteLine("\\n Kunde: " + ssCust.ToString().PadRight(11) + "Kundenr: " + iiCust.ToString().PadLeft(5));
Console.WriteLine("\\n----------------------------------------------\\n");
foreach (SalesLineItem s in lineItems) //Printer produktbeskrivelsen ud og prisen på de enkelte produktenheder
{
Console.WriteLine(" " + s.getQuantity().ToString().PadRight(3) + " " + s.getProductDescription().ToString().PadRight(18) + " " + s.getSubtotal().ToString().PadLeft(8) + " kr");
}
Console.WriteLine("\\n-----------------------------------------------\\n");
Console.WriteLine("\\n Total: {0} kr", total.ToString().PadLeft(25));
Console.WriteLine("\\n Moms: {0} kr", ddMoms.ToString().PadLeft(26));
Console.WriteLine("\\n Rabat: {0}% ", ddCust.ToString().PadLeft(27));
Console.WriteLine("\\n----------------------------------------------");
Console.WriteLine("\\n Total inkl. rabat: {0} kr", (total - (total * (ddCust / 100))).ToString().PadLeft(13));
Console.WriteLine("______________________________________________");
Console.WriteLine("----------------------------------------------");
}
}
public class SalesLineItem
{
private int quantity;
private ProductDescription description;
public SalesLineItem(ProductDescription description, int quantity) //Constructor
{
this.description = description;
this.quantity = quantity;
}
public int getQuantity() //Metode til at hente antallet af vare
{
return quantity;
}
public string getProductDescription() //Metode til at hente produktbeskrivelsen af et given produkt
{
return description.getDescription();
}
public double getSubtotal()//Finder prisen for den enkelte vare X antal
{
return description.getPrize() * quantity; //Henter oplysninger fra metoden getPrize som ligger i Register-klassen
}
}
public class Store //HVAD GØR DEN HER?
{
private ProductCatalog catalog;
private Register register;
private CustomerCatalog Ccatalog;
private static Store instance = null; //Singleton
private Store()
{
catalog = new ProductCatalog();
Ccatalog = new CustomerCatalog();
register = Register.GetInstance(catalog, Ccatalog); //Singleton
}
public static Store GetInstance()
{
if (instance == null)
{
instance = new Store();
return instance;
}
else
return instance;
}
public Register getRegister()
{
return register;
}
}
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication7
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
Store s = Store.GetInstance(); //Opret et Store - objekt
Register r = s.getRegister();
}
private void button4_Click(object sender, EventArgs e)
{
Close();
}
private void button1_Click(object sender, EventArgs e)
{
int id = Convert.ToInt32(textBox1.Text);
string beskrivelse = textBox2.Text;
double price = Convert.ToDouble(textBox3.Text);
ProductDescription desc;
desc = new ProductDescription(id, price, beskrivelse);
Register.SetCreateProduct(desc);
MessageBox.Show("Product id: " + textBox1.Text + "\\nDescription: " + textBox2.Text + "\\nProduct price: " + textBox3.Text + "\\nEr nu oprettet i varekartotekket");
}
}
}
Jeg har tilknyttet hele projekt som fil.
http://www.sendspace.com/file/892yfp
Indlæg senest redigeret d. 25.04.2008 20:49 af Bruger #12411