3 svar
51 visningar
g4l3n 136
Postad: 31 okt 2019

Hjälp med klasser till mitt program som ska likna en "bokhylla" C#

Hej,

Jag har fastnat på min uppgift helt.. jag vet inte vad jag gör fel..

Jag ska göra program till ett bibliotek som ska kunna ta emot nya inmatade böcker samt att kunna skriv ut alla inmatade böcker. 

För tillfället får jag 10 error varav mestadels följande: 
Error CS0103 The name 'library' does not exist in the current context.

Samt att den säger att min Addbok:
Error CS0116 A namespace cannot directly contain members such as fields or methods.

Nedan är min kod. Jätte tacksam för hjälp så jag kan komma vidare!

 

public class Bok
{
public string Titel;
public string Skribent;
public string Typ;

public Bok(string titel, string författare, string typ)
{
Titel = titel;
Skribent = författare;
Typ = typ;
}
}
public class Roman : Bok
{
public Roman(string titel, string författare, string typ) : base(titel, författare, typ)
{
typ = "Roman";
}
}
public class Tidskrift : Bok
{
public Tidskrift(string titel, string författare, string typ) : base(titel, författare, typ)
{
typ = "Tidskrift";
}
}
public class Novellsamling : Bok
{
public Novellsamling(string titel, string författare, string typ) : base(titel, författare, typ)
{
typ = "Novellsamling";
}
}
private void AddBok() //sparar bok vid val 1 i menyn
{
Console.Write("Titel: ");
string titel = Console.ReadLine();

Console.Write("Författare: ");
string författare = Console.ReadLine();

Console.WriteLine("Är boken en [1]Roman [2]Tidsskrift eller [3]Novellsamling ");
string typ = Console.ReadLine();
int bokChoice = Convert.ToInt32(typ);
Console.WriteLine("\nsparat!\n");


switch (bokChoice)
{
case 1:
{
Bok b = new Roman(titel, författare, "(roman)");
library.Add(b);
break;
}

case 2:
{
Bok b = new Tidskrift(titel, författare, "(tidskrift)");
library.Add(b);
break;
}

case 3:
{
Bok b = new Novellsamling(titel, författare, "(novell)");
library.Add(b);
break;
}
}
}
class Program
{
List<Bok> library = new List<Bok>();

static void Main(string[] args)
{
bool isRunning = true;
while (isRunning)

Console.Write("Hej och välkommen till Biblioteket!\n");
Console.WriteLine("[1] Registrera ny bok");
Console.WriteLine("[2] Visa böcker");
Console.WriteLine("[3] Avsluta");
Console.Write("\nVälj: ");
string choice = Console.ReadLine();
int numChoice = Convert.ToInt32(choice);
return numChoice;

switch (choice)
{
case 1:
AddBok();
break;

case 2:
ListBok();
break;

case 3:
isRunning = false;
break;

default:
Console.WriteLine("\nFel inmatning, försök igen!\n"); // skriver ut meddelande om nummer som inte är 1-3 skrivs in
break;
}
}
private void ListBok() //skriver ut alla böcker i en lista vid menyval 2
{
foreach (Bok b in library)
{
Console.WriteLine(b.ToString() + "\n");
}
}

}

Laguna 6401
Postad: 31 okt 2019

Hur går det om du lägger AddBok inuti klassen Program?

g4l3n 136
Postad: 3 nov 2019
Laguna skrev:

Hur går det om du lägger AddBok inuti klassen Program?

Jag testade att flytta Addbok så min kod ser ut som följande:

public class Bok
{
public string Titel;
public string Skribent;
public string Typ;

public Bok(string titel, string författare, string typ)
{
Titel = titel;
Skribent = författare;
Typ = typ;
}
}
public class Roman : Bok
{
public Roman(string titel, string författare, string typ) : base(titel, författare, typ)
{
typ = "Roman";
}
}
public class Tidskrift : Bok
{
public Tidskrift(string titel, string författare, string typ) : base(titel, författare, typ)
{
typ = "Tidskrift";
}
}
public class Novellsamling : Bok
{
public Novellsamling(string titel, string författare, string typ) : base(titel, författare, typ)
{
typ = "Novellsamling";
}
}

class Program
{
List<Bok> library = new List<Bok>();

static void Main(string[] args)
{
bool isRunning = true;
while (isRunning)

Console.Write("Hej och välkommen till Biblioteket!\n");
Console.WriteLine("[1] Registrera ny bok");
Console.WriteLine("[2] Visa böcker");
Console.WriteLine("[3] Avsluta");
Console.Write("\nVälj: ");

int choice;
Int32.TryParse(Console.ReadLine(), out choice);

switch (choice)
{
case 1:
AddBok();
break;

case 2:

foreach (Bok b in library)
{
Console.WriteLine(b.ToString() + "\n");
}
break;

case 3:
isRunning = false;
break;

default:
Console.WriteLine("\nFel inmatning, försök igen!\n"); // skriver ut meddelande om nummer som inte är 1-3 skrivs in
break;
}
}
private void AddBok() //sparar bok vid val 1 i menyn
{
Console.Write("Titel: ");
string titel = Console.ReadLine();

Console.Write("Författare: ");
string författare = Console.ReadLine();

Console.WriteLine("Är boken en [1]Roman [2]Tidsskrift eller [3]Novellsamling ");
string typ = Console.ReadLine();
int bokChoice;
Int32.TryParse(Console.ReadLine(), out bokChoice);
Console.WriteLine("\nsparat!\n");


switch (bokChoice)
{
case 1:
{
Bok b = new Roman(titel, författare, "(roman)");
library.Add(b);
break;
}

case 2:
{
Bok b = new Tidskrift(titel, författare, "(tidskrift)");
library.Add(b);
break;
}

case 3:
{
Bok b = new Novellsamling(titel, författare, "(novell)");
library.Add(b);
break;
}
}
}
}

Men jag återstår med två error:
Error CS0120 An object reference is required for the non-static field, method, or property 'Program.AddBok()' 
Error CS0120 An object reference is required for the non-static field, method, or property 'Program.library()' 

Laguna 6401
Postad: 3 nov 2019

Eftersom du inte har några instanser av Program, så kan du deklarera library och AddBok static (som Main redan är).

Svara Avbryt
Close