class MainClass { public class Bil { // erklære variable private int regNr; //bilen registreringnummer (identificering) private string category; // bilen kategori (A eller B) private string brand; // bilens mærke (Golf, Xsara, Passat eller Picasso) private int kmCounter; // bilens kilometertæller da den blev købt private int aktKmCounter; // bilens aktuelle kilometertæller private bool rentet; // om bilen er udlejet
public int HentRegNr() { return regNr; } public string HentCategory() { return category; } public int HentKmCounter { get { return kmCounter; } } public int AktKmCounter { get { return aktKmCounter; } set { aktKmCounter = value; } } public bool IsRentet() { return rentet; }
//Hvor mange km har bilen kørt public void AntalKm() { aktKmCounter-=kmCounter; } public override string ToString() { string str; str="Registreringsnummer: "; str+=regNr.ToString(); str="Kategori: "; str+=category.ToString(); str="Mærke: "; str+=brand.ToString(); str+="Kmtæller"; str+=kmCounter.ToString(); str="Aktueller kmtæller: "; str+=aktKmCounter.ToString(); str="Udlejet: "; if(Ba[index].rentet == true) str="Udlejet".ToString(); else str="Ikke udlejet".ToString(); return str; }
}//slut bil klasse
class ABil:Bil { public ABil(int regnr, string nyCategory, string nyBrand, int nyKmCounter,int nyAktKmCounter, bool nyRentet):base(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter, nyRentet)//der skal sikkert flere argumenter på { } public override void HentBrand() {
}
}// slut ABil klsse class BBil:Bil { public BBil(int regnr, string nyCategory, string nyBrand, int nyKmCounter,int nyAktKmCounter, bool nyRentet):base(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter, nyRentet)//der skal sikkert flere argumenter på { } public override void HentBrand() {
} }
// Hent reg.nr hvis registreringsnummer eksistrer public static int FindIndex(Bil[]ba, int RegNr, int antal) { bool excits=false; int index=-1; for (int i=0; i<antal; i++) if (RegNr==ba[i].HentRegNr()) { excits=true; index=i; } if(excits) return index; else return -1; }
//test af bilpark public static void Main(string[] args) { Bil[] ba = new Bil[100]; string valg; int regnr; // det registreringsnummer brugeren indtaster int index; int nyKmCounter; string nyCategory; string nyBrand; int nyAktKmCounter; bool nyRentet;
int antalIBrug=0;
do { System.Console.WriteLine("1: Opret bil\n 2. Slet bil\n 3. Udskriv alle bilers info\n 4. Udskriv alle info for ledige biler i kat. A\n 5. Udlej bil\n 6. Indlever bil\n 7. Er bil udlejet?\n 8. Returner golf\n 9. Slette alle biler > 200000 km\n 10. Luk program"); valg=Console.ReadLine();
switch(valg) { case"1":Console.Write("Indtast bilens registreringsnummer: "); regnr=Convert.ToInt32(Console.ReadLine()); //findes det indtastede regnr i forvejen if(FindIndex(ba, regnr, antalIBrug)!=-1) Console.WriteLine("En bil med dette registreringsnummer er allerede registreret"); else { Console.Write("Indtast bilen kategori a eller b:"); nyCategory=Console.ReadLine(); Console.Write("Indtast Bilens mærke pa for Passat pi for Picasso g for Golf x for Xsara: "); nyBrand=Convert.ToString(Console.ReadLine()); Console.Write("Indtast bilens kilometertæller: "); nyKmCounter=Convert.ToInt32(Console.ReadLine()); if (nyCategory=="a") ba[antalIBrug++]= new ABil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); else ba[antalIBrug++]= new BBil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); if (nyBrand=="pa" || nyBrand=="pi") ba[antalIBrug++]= new ABil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); else ba[antalIBrug++]= new BBil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet);
} break; case"2":Console.Write("Hvilken bil skal slettes: "); regnr=Convert.ToInt32(Console.ReadLine()); index=FindIndex(ba, regnr, antalIBrug); if(index==-1) Console.WriteLine("Denne bil er ikke registreret"); else { ba[index]=ba[antalIBrug-1]; antalIBrug--; } break; case"3":for(int i=0; i<antalIBrug; i++) Console.WriteLine(ba[i]); break; case"4":for(int i=0; i<antalIBrug; i++) if(nyCategory=="a") Console.WriteLine(ba[i]); break; //udleje en bil udfra bilens regnr. case"5":while (index==-1)//Hent bilens regnr { Console.WriteLine("Hvilken bil skal udlejes? Indtast reg.nr.: "); regnr=Convert.ToInt32(Console.ReadLine()); //undersøg om bilen findes index = FindIndex(ba, regnr, antalIBrug); if (index==-1) Console.WriteLine("Denne bil er ikke registreret"); } //Bilen er fundet og kan sættes til rentet ba[index].nyRentet=false; // registrer hvad den nye kmtæller står på Console.WriteLine("Hvad står bilens km tæller på?: "); ba[index].nyKmCounter=Convert.ToInt32(Console.ReadLine()); break; //registrere at bilen tilbageleveres case"6":while (index==-1)//hent bilens regnr. { Console.WriteLine("Hvilken bil skal indleveres: "); regnr=Convert.ToInt32(Console.ReadLine()); //undersøg om bilen findes index=FindIndex(ba, regnr, antalIBrug); if(index == -1) Console.WriteLine("Denne bil er ikke registreret"); } //Bilen er fundet og kan sættes til ledig ba[index].nyRentet=false; Console.WriteLine("Hvad står bilens kmtæller på?: "); ba[index].nyKmCounter= Convert.ToInt32(Console.ReadLine());
break; //returnere om en bil er udlejet udfra regnr. case"7": while (index==-1)//hent bilens regnr. { Console.WriteLine("Hvilken bil skal checkes? Indtast regnr.: "); regnr=Convert.ToInt32(Console.ReadLine()); //undersøg om bilen findes index=FindIndex(ba, regnr, antalIBrug); if(index == -1) Console.WriteLine("Denne bil er ikke registreret"); } //Her checkes om den funde bils udlejnings "flag" er sat til sand, hvis sand så udlejes den ellers ikke if(ba[index].rentet==true) Console.WriteLine("Bilen er udlejet"); else Console.WriteLine("Bilen er ledig"); break; case"8":; break; case"9":; break; case"10":; break; } } while(valg!="10");
Jeg vil kraftigt anbefale at du ikke taster 250 linier ind og så gå rigang med at oversætte, men at du løbende oversætter, så der aldrig er mere end nogle få fejl.
nyRentet er en variabel i Main og ikke Bil du mangler også en set metode til Rentet i din Bil classe i steden for denne ville jeg lave en get set public bool IsRentet() { return rentet; } public bool IsRentet { get{return rentet;} set{rentet=value;} }
Men nu kommer følgende fejl: _______________________________-
Ikke-tildelt lokal variabel 'nyAktKmCounter' blev anvendt Ikke-tildelt lokal variabel 'nyRentet' blev anvendt Ikke-tildelt lokal variabel 'nyCategory' blev anvendt Ikke-tildelt lokal variabel 'index' blev anvendt ______________________________________________________
Hvorfor det? for hvis man fjerne dem, så brokker den sig også...
public static void Main(string[] args) ... bool nyRentet; // erklæres ... ba[antalIBrug++] = new ABil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); // <--- bruges ba[antalIBrug++]= new BBil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); // <---- bruges ...
Jeg kunne godt tænke mig at få bilen til at være ledig, når bilen oprettes, dvs. nyRentet=false.
Så der hvor brugeren opretter bilen ved at indtaste regnr, km og alt det andet (i case "1":) skal det derfault komme med, evt. ved at brugeren indtaster om hvorvidt bilen er ledig eller ej. Jeg kan bare ikke gennemsku hvordan. Nogen idé??
____________________________________________________________________________ case"1":Console.Write("Indtast bilens registreringsnummer: "); regnr=Convert.ToInt32(Console.ReadLine()); //findes det indtastede regnr i forvejen if(FindIndex(ba, regnr, antalIBrug)!=-1) Console.WriteLine("En bil med dette registreringsnummer er allerede registreret"); else { Console.Write("Indtast bilen kategori a eller b:"); nyCategory=Console.ReadLine(); Console.Write("Indtast Bilens mærke pa for Passat pi for Picasso g for Golf x for Xsara: "); nyBrand=Convert.ToString(Console.ReadLine()); Console.Write("Indtast bilens kilometertæller: "); nyKmCounter=Convert.ToInt32(Console.ReadLine()); Console.Write("Indtast bilens aktuelle kilometertæller: "); nyAktKmCounter=Convert.ToInt32(Console.ReadLine()); if (nyCategory=="a") ba[antalIBrug++]= new ABil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); else ba[antalIBrug++]= new BBil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); if (nyBrand=="pa" || nyBrand=="pi") ba[antalIBrug++]= new ABil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); else ba[antalIBrug++]= new BBil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet);
Ja jeg får bare at vide at nyRentet og index ikke har nogen værdier. Jeg vil gerne kunne indlæse input fra bruger, men problemet er at nyRentet er en bool, og ikke vil tage imod. Eller også er det igen fordi jeg ikke gør det rigtigt...
Har du et forslag?
Jeg tror også at jeg selv er ved at miste overblikket og logikken :-(
P.s. Jeg syntes virkeligt at du har gjort et stort arbejde, og skal selvfølgelig have pointne
Problemet er nu bare at når jeg vælger case3, dvs. vil have alle info udskrevet (om den ene bil jeg har oprettet) Udskriver programmet bare: ______________________________________ Ikke Udlejet Ikke Udlejet ______________________________________
okay 2 gange kan jeg vist så godt greje, det er nok pgr. af den nedarvede klasse - hvor jeg ikke helt kan finde ud af at tildele de kategorier 2 forskellige mærke biler hver.
Men hvorfor returnere den ikke alle de data der er blevet indtastet? det ser ud til at de andre valg virker :-)
Ved at modificere lidt i case1: _________________________________________ if (nyCategory=="a") if(nyBrand=="pa" || nyBrand=="pi") ba[antalIBrug++]= new ABil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet);
else ba[antalIBrug++]= new BBil(regnr,nyCategory,nyBrand,nyKmCounter,nyAktKmCounter,nyRentet); _________________________________________ Får jeg kun 1 linje ud :-)
arne_v: 1000 tak for hjælpen :-) Putter mine evt. kommende spørgsmål i et nyt spørgsmål.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.