|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
|
|
|
|
namespace Übungen_LF6_WinFormanwendung
|
|
|
|
|
{
|
|
|
|
|
class Saal
|
|
|
|
|
{
|
|
|
|
|
//Member
|
|
|
|
|
//Saalgröße ist auf 10 Reihen mit je 30 Sitzplätzen limitiert um Implementierung und Darstellung einfach zu halten
|
|
|
|
|
//Nummer der Reihe : Programm wird auf 10 Reihen limitiert 0 - 9 d.h. 0XX - 9XX für die Platznummern
|
|
|
|
|
public string nameSaal { get; set; }
|
|
|
|
|
public int reihe { get; private set; }
|
|
|
|
|
public int spalte { get; private set; }
|
|
|
|
|
public int maxReihen { get; set; }
|
|
|
|
|
public int maxSpalten { get; set; }
|
|
|
|
|
|
|
|
|
|
//Array der Sitzplätze [Anzahl Reihen, Anzahl Sitze pro Reihe] || True = Belegt, False = verfügbar
|
|
|
|
|
private bool[,] sitzPlatz;
|
|
|
|
|
//Array der Markierten Sitzplätze
|
|
|
|
|
private bool[,] markierteSitzplätze;
|
|
|
|
|
|
|
|
|
|
//Basis Konstruktor: wird nur genutzt für Objekterstellung
|
|
|
|
|
public Saal(){ }
|
|
|
|
|
|
|
|
|
|
//Kopierkonstruktor
|
|
|
|
|
public Saal(Saal newSaal)
|
|
|
|
|
{
|
|
|
|
|
//kopieren der Feldwerte des eingegebenen Saals
|
|
|
|
|
nameSaal = newSaal.nameSaal;
|
|
|
|
|
reihe = newSaal.reihe;
|
|
|
|
|
spalte = newSaal.spalte;
|
|
|
|
|
maxReihen = newSaal.maxReihen;
|
|
|
|
|
maxSpalten = newSaal.maxSpalten;
|
|
|
|
|
|
|
|
|
|
//Kopieren der Sitz-Belegung
|
|
|
|
|
sitzPlatz = new bool[maxReihen + 1, maxSpalten + 1];
|
|
|
|
|
for (int reihe = 1; reihe <= maxReihen; reihe++)
|
|
|
|
|
{
|
|
|
|
|
for (int spalte = 1; spalte <= maxSpalten; spalte++)
|
|
|
|
|
{
|
|
|
|
|
sitzPlatz[reihe, spalte] = newSaal.sitzPlatz[reihe, spalte];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//Initialisieren des Markiererarrays
|
|
|
|
|
markierteSitzplätze = new bool[maxReihen + 1, maxSpalten + 1];
|
|
|
|
|
for (int reihe = 1; reihe < maxReihen; reihe++)
|
|
|
|
|
{
|
|
|
|
|
for (int spalte = 1; spalte < maxSpalten; spalte++)
|
|
|
|
|
{
|
|
|
|
|
markierteSitzplätze[reihe, spalte] = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Spezifischer Konstruktor für Initialisierung von Standart Saal: wird angenommen mit 2 Reihen und 30 Sitzen je Reihe
|
|
|
|
|
public Saal(out int ErrorCode, string SaalName, int MaxReihen = 2, int MaxSpalten = 30 )
|
|
|
|
|
{
|
|
|
|
|
//Saalname bestimmen - Name muss eindeutig sein weil dieser für Speicherung genutzt wird -> bereits vorhandener Name führt zu überschreibung vorhandener Daten!!!
|
|
|
|
|
nameSaal = SaalName;
|
|
|
|
|
//Füllen der Saalgröße
|
|
|
|
|
maxReihen = MaxReihen;
|
|
|
|
|
maxSpalten = MaxSpalten;
|
|
|
|
|
|
|
|
|
|
//Initialisierung
|
|
|
|
|
ErrorCode = 0;
|
|
|
|
|
|
|
|
|
|
//Fehler falls zu viele oder zu wenige Reihen
|
|
|
|
|
if (MaxReihen > 9 || MaxReihen < 1)
|
|
|
|
|
{
|
|
|
|
|
ErrorCode = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
//Fehler falls zu viele oder zu wenige Sitze
|
|
|
|
|
if (MaxSpalten > 30 || MaxSpalten < 1)
|
|
|
|
|
{
|
|
|
|
|
ErrorCode = 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//initialisierung des Saals wenn eingabe in Ordnung war
|
|
|
|
|
if (ErrorCode == 0)
|
|
|
|
|
{
|
|
|
|
|
sitzPlatz = new bool[MaxReihen + 1, MaxSpalten + 1];
|
|
|
|
|
for (int i_reihen = 1; i_reihen < sitzPlatz.GetLength(0); i_reihen++)
|
|
|
|
|
{
|
|
|
|
|
for (int i_sitze = 1; i_sitze < sitzPlatz.GetLength(1); i_sitze++)
|
|
|
|
|
{
|
|
|
|
|
sitzPlatz[i_reihen, i_sitze] = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Methoden
|
|
|
|
|
|
|
|
|
|
//überprüfung Platzbelegeung
|
|
|
|
|
public bool istFrei(int Reihe, int Spalte)
|
|
|
|
|
{
|
|
|
|
|
//Rückgabe des Wertes True wenn sitzplatz "leer" (false) ist
|
|
|
|
|
if (!sitzPlatz[Reihe, Spalte])
|
|
|
|
|
return true;
|
|
|
|
|
else
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//Überprüfung Markierung
|
|
|
|
|
public bool istMarkiert(int Reihe, int Spalte)
|
|
|
|
|
{
|
|
|
|
|
if (markierteSitzplätze[Reihe,Spalte])
|
|
|
|
|
return true;
|
|
|
|
|
else
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Berechnung der Platznummer zur Darstellung für den User bei "Buchungsbeleg"
|
|
|
|
|
public int berechnePlatzNr(int Reihe, int Spalte)
|
|
|
|
|
{
|
|
|
|
|
int nr = 0;
|
|
|
|
|
switch(Reihe)
|
|
|
|
|
{
|
|
|
|
|
case 0: nr = 000; break;
|
|
|
|
|
case 1: nr = 100; break;
|
|
|
|
|
case 2: nr = 200; break;
|
|
|
|
|
case 3: nr = 300; break;
|
|
|
|
|
case 4: nr = 400; break;
|
|
|
|
|
case 5: nr = 500; break;
|
|
|
|
|
case 6: nr = 600; break;
|
|
|
|
|
case 7: nr = 700; break;
|
|
|
|
|
case 8: nr = 800; break;
|
|
|
|
|
case 9: nr = 900; break;
|
|
|
|
|
}
|
|
|
|
|
nr += Spalte;
|
|
|
|
|
return nr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Buchungsmethode zum belegen eines Platzes (Platzwert erhält true)
|
|
|
|
|
//aktuell gibt es keine "Entbuchungsmethode" d.h. gebuchte Plätze werden nie wieder befreit
|
|
|
|
|
//Mögliche Lösungen:- Seperates Programm dass die gespeicherte Datei (an der Stelle der gespeicherten Sitzbelegung) anpasst
|
|
|
|
|
// - "Buchung aufheben" funktion um buchungen rückgängig zu machen (Hier stellt sich die Frage soll
|
|
|
|
|
// das so einfach von jedem x-beliebigen User möglich sein
|
|
|
|
|
public void buchen(out int ErrorCode, int Reihe, int Spalte)
|
|
|
|
|
{
|
|
|
|
|
ErrorCode = 0;
|
|
|
|
|
if (istFrei(Reihe,Spalte))
|
|
|
|
|
{
|
|
|
|
|
sitzPlatz[Reihe, Spalte] = true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ErrorCode = 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Markiere oder Entferne Markierung an Sitzplätze für User-Ansicht
|
|
|
|
|
public void markiereSitz (int Reihe, int Spalte)
|
|
|
|
|
{
|
|
|
|
|
if (markierteSitzplätze[Reihe, Spalte])
|
|
|
|
|
markierteSitzplätze[Reihe, Spalte] = false;
|
|
|
|
|
else
|
|
|
|
|
markierteSitzplätze[Reihe, Spalte] = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Speichern des Saals als .txt Datei (Aktuell wird der Standart-Pfad (Projektordner\bin\Debug\) gewählt)
|
|
|
|
|
public void speichernSaal (out int ErrorCode)
|
|
|
|
|
{
|
|
|
|
|
ErrorCode = 0;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//Daten werden anhand des Saalnamens gespeichert -> gleicher Saalname führt zu Überschreiben der alten Saaldaten
|
|
|
|
|
TextWriter tw = new StreamWriter(nameSaal + ".txt");
|
|
|
|
|
|
|
|
|
|
// Schreibe Datei mit Feldern
|
|
|
|
|
tw.WriteLine(nameSaal);
|
|
|
|
|
tw.WriteLine(reihe);
|
|
|
|
|
tw.WriteLine(spalte);
|
|
|
|
|
tw.WriteLine(maxReihen);
|
|
|
|
|
tw.WriteLine(maxSpalten);
|
|
|
|
|
//Schreiben der Sitzplatzbelegung
|
|
|
|
|
for (int reihe = 1; reihe <= maxReihen ; reihe++)
|
|
|
|
|
{
|
|
|
|
|
for (int spalte = 1; spalte <= maxSpalten ; spalte++)
|
|
|
|
|
{
|
|
|
|
|
tw.WriteLine(sitzPlatz[reihe, spalte]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// close the stream
|
|
|
|
|
tw.Close();
|
|
|
|
|
//Consolenausgabe für erfolgreiches Speichern
|
|
|
|
|
ErrorCode = 9;
|
|
|
|
|
Console.WriteLine("Speichern Erfolgreich");
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
//Meldeausgabe dass Speichern nicht erfolgreich war
|
|
|
|
|
ErrorCode = 8;
|
|
|
|
|
Console.WriteLine("Fehler: {0}", e.ToString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Ladefunktion des Saals mittels Namen
|
|
|
|
|
public void ladeSaal (out int ErrorCode, string SaalName)
|
|
|
|
|
{
|
|
|
|
|
//Fehlercode falls Ladenfehlschlägt
|
|
|
|
|
ErrorCode = 0;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//Saal wird anhand von Namen geladen
|
|
|
|
|
if (File.Exists(SaalName + ".txt"))
|
|
|
|
|
{
|
|
|
|
|
//Dateileseroutine
|
|
|
|
|
TextReader tr = new StreamReader(SaalName + ".txt");
|
|
|
|
|
// Name des Saals
|
|
|
|
|
nameSaal = tr.ReadLine();
|
|
|
|
|
// Zeilen des Textes lesen um Variablen zu füllen
|
|
|
|
|
string reiheString = tr.ReadLine();
|
|
|
|
|
string spalteString = tr.ReadLine();
|
|
|
|
|
string maxReiheString = tr.ReadLine();
|
|
|
|
|
string maxSpalteString = tr.ReadLine();
|
|
|
|
|
|
|
|
|
|
//Konvertiere geladene Strings zu Int-Werten
|
|
|
|
|
reihe = Convert.ToInt32(reiheString);
|
|
|
|
|
spalte = Convert.ToInt32(spalteString);
|
|
|
|
|
maxReihen = Convert.ToInt32(maxReiheString);
|
|
|
|
|
maxSpalten = Convert.ToInt32(maxSpalteString);
|
|
|
|
|
|
|
|
|
|
//Lade sitzPlatzbelegung aus TextDokument
|
|
|
|
|
string[,] temp_sitzPlatzText = new string[maxReihen + 1, maxSpalten + 1];
|
|
|
|
|
for (int reihe = 1; reihe <= maxReihen ; reihe++)
|
|
|
|
|
{
|
|
|
|
|
for (int spalte = 1; spalte <= maxSpalten ; spalte++)
|
|
|
|
|
{
|
|
|
|
|
temp_sitzPlatzText[reihe, spalte] = tr.ReadLine();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Konvertieren des String-Arrays mit Sitzplatzbelegung in Bool werte
|
|
|
|
|
sitzPlatz = new bool[maxReihen + 1 , maxSpalten + 1];
|
|
|
|
|
for (int reihe = 1; reihe <= maxReihen ; reihe++)
|
|
|
|
|
{
|
|
|
|
|
for (int spalte = 1; spalte <= maxSpalten ; spalte++)
|
|
|
|
|
{
|
|
|
|
|
sitzPlatz[reihe,spalte] = Convert.ToBoolean(temp_sitzPlatzText[reihe, spalte]);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// close the stream
|
|
|
|
|
tr.Close();
|
|
|
|
|
|
|
|
|
|
//Meldeausgabe dass Laden erfolgreich war
|
|
|
|
|
ErrorCode = 6;
|
|
|
|
|
Console.WriteLine("Laden Erfolgreich");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//Meldeausgabe dass Laden wegen nicht vorhandenen Saalnamen fehlgeschlagen ist
|
|
|
|
|
ErrorCode = 7;
|
|
|
|
|
Console.WriteLine("Laden Fehlgeschlagen - Saal nicht gefunden");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
//Meldeausgabe dass Laden nicht erfolgreich war
|
|
|
|
|
ErrorCode = 5;
|
|
|
|
|
Console.WriteLine("Fehler: {0}", e.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|