diff --git a/PMCProjekt/.vs/PMCProjekt/v17/.suo b/PMCProjekt/.vs/PMCProjekt/v17/.suo index c9b62f1..af07331 100644 Binary files a/PMCProjekt/.vs/PMCProjekt/v17/.suo and b/PMCProjekt/.vs/PMCProjekt/v17/.suo differ diff --git a/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json b/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json index 77d7387..431147c 100644 --- a/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json +++ b/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json @@ -22,11 +22,11 @@ "Title": "Program.cs", "DocumentMoniker": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\Program.cs", "RelativeDocumentMoniker": "PMCProjekt\\Program.cs", - "ToolTip": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\Program.cs*", - "RelativeToolTip": "PMCProjekt\\Program.cs*", - "ViewState": "AQIAAHMAAAAAAAAAAAAkwHoAAAAAAAAA", + "ToolTip": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\Program.cs", + "RelativeToolTip": "PMCProjekt\\Program.cs", + "ViewState": "AQIAAAMAAAAAAAAAAAAAAE0AAAAJAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-14T09:14:59.548Z", + "WhenOpened": "2024-08-30T09:51:48.989Z", "EditorCaption": "" } ] diff --git a/PMCProjekt/PMCProjekt/Program.cs b/PMCProjekt/PMCProjekt/Program.cs index ead2124..78b23bd 100644 --- a/PMCProjekt/PMCProjekt/Program.cs +++ b/PMCProjekt/PMCProjekt/Program.cs @@ -1,6 +1,8 @@ using System; using System.IO; using System.Text.RegularExpressions; +using System.Collections.Generic; +using MySql.Data.MySqlClient; namespace PMCProjekt { @@ -8,12 +10,28 @@ namespace PMCProjekt { static void Main(string[] args) { - // Kundennummer eingeben - Console.Write("Bitte geben Sie die Kundennummer ein (z.B. K2-002): "); - string kundennummer = Console.ReadLine(); + string dateiPfad = "/Schule/PMC/import_yutani.csv"; + string protokollPfad = "/Schule/PMC/ungueltige_Daten.csv"; - // Datei einlesen - string dateiPfad = "C:/Schule/PMC/import_yutani.csv"; + // MySQL-Verbindungszeichenfolge + string connectionString = "server=localhost;uid=root;pwd=root;database=import_export"; + + // Abfrage der Kundennummer vom Benutzer + Console.Write("Bitte geben Sie die Kundennummer (clientno) ein: "); + string clientno = Console.ReadLine(); + + int clientId = HoleClientId(connectionString, clientno); + + if (clientId == 0) + { + Console.WriteLine("Ungültige Kundennummer. Programm wird beendet."); + return; + } + + List> alleDatensaetze = new List>(); + List aktuellerDatensatz = new List(); + + // Überprüfen, ob die Datei existiert if (File.Exists(dateiPfad)) { using (StreamReader sr = new StreamReader(dateiPfad)) @@ -21,37 +39,35 @@ namespace PMCProjekt string zeile; while ((zeile = sr.ReadLine()) != null) { - // Werte aus der Zeile extrahieren - string[] werte = zeile.Split(','); - if (werte.Length >= 4) + if (zeile.StartsWith("Frau") || zeile.StartsWith("Herr") || zeile.StartsWith("Divers")) { - string anrede = werte[0]; - string vorname = werte[1]; - string nachname = werte[2]; - string geburtsdatum = werte[3]; - string adresse = werte.Length > 4 ? werte[4] : null; - string plz = werte.Length > 5 ? werte[5] : null; - string stadt = werte.Length > 6 ? werte[6] : null; - string email = werte.Length > 7 ? werte[7] : null; - string telefonnummern = werte.Length > 8 ? werte[8] : null; + // Wenn ein neuer Datensatz beginnt, speichere den vorherigen + if (aktuellerDatensatz.Count > 0) + { + alleDatensaetze.Add(new List(aktuellerDatensatz)); + aktuellerDatensatz.Clear(); + } + } - // Daten validieren und ungültige Daten protokollieren - if (!DatenValidieren(anrede, vorname, nachname, geburtsdatum, adresse, plz, stadt, email, telefonnummern)) - { - ProtokolliereUngueltigeDaten(werte); - Console.WriteLine("Ungültige Daten: " + string.Join(",", werte)); - } - else - { - Console.WriteLine("Gültige Daten: " + string.Join(",", werte)); - } - } - else - { - // Protokolliere Zeilen mit zu wenigen Datenfeldern - ProtokolliereUngueltigeDaten(werte); - Console.WriteLine("Ungültige Daten (zu wenige Felder): " + string.Join(",", werte)); - } + // Füge die aktuelle Zeile dem Datensatz hinzu + aktuellerDatensatz.Add(zeile); + } + + // Füge den letzten Datensatz hinzu, falls vorhanden + if (aktuellerDatensatz.Count > 0) + { + alleDatensaetze.Add(aktuellerDatensatz); + } + } + + // Verarbeitung aller gesammelten Datensätze + using (MySqlConnection connection = new MySqlConnection(connectionString)) + { + connection.Open(); + + foreach (var datensatz in alleDatensaetze) + { + VerarbeiteDatensatz(datensatz, protokollPfad, connection, clientId); } } } @@ -61,79 +77,227 @@ namespace PMCProjekt } } - static bool DatenValidieren(string anrede, string vorname, string nachname, string geburtsdatum, string adresse, string plz, string stadt, string email, string telefonnummern) + static int HoleClientId(string connectionString, string clientno) { - bool istGueltig = true; - - // Geburtsdatum validieren - if (!PrüfGeburtstag(geburtsdatum)) + using (MySqlConnection connection = new MySqlConnection(connectionString)) { - Console.WriteLine($"Ungültiges Geburtsdatum: {geburtsdatum}"); - istGueltig = false; - } - - // E-Mail-Adresse validieren - if (!string.IsNullOrEmpty(email) && !PrüfEmail(email)) - { - Console.WriteLine($"Ungültige E-Mail-Adresse: {email}"); - istGueltig = false; - } - - // Postleitzahl validieren - if (!string.IsNullOrEmpty(plz) && !PrüfPLZ(plz)) - { - Console.WriteLine($"Ungültige Postleitzahl: {plz}"); - istGueltig = false; - } - - // Telefonnummern validieren - if (!string.IsNullOrEmpty(telefonnummern)) - { - string[] telefonNummern = telefonnummern.Split(';'); - foreach (var telefon in telefonNummern) + connection.Open(); + string query = "SELECT id FROM client WHERE clientno = @ClientNo"; + using (MySqlCommand command = new MySqlCommand(query, connection)) { - if (!PrüfTelefon(telefon)) - { - Console.WriteLine($"Ungültige Telefonnummer: {telefon}"); - istGueltig = false; - } + command.Parameters.AddWithValue("@ClientNo", clientno); + var result = command.ExecuteScalar(); + return result != null ? Convert.ToInt32(result) : 0; + } + } + } + + static void VerarbeiteDatensatz(List datensatz, string protokollPfad, MySqlConnection connection, int clientId) + { + string gesamteZeile = string.Join(";", datensatz); + string[] werte = gesamteZeile.Split(';'); + + string anrede = ""; + string vorname = ""; + string nachname = ""; + string geburtsdatum = ""; + string strasse = ""; + string plz = ""; + string stadt = ""; + string email = ""; + List telefonnummern = new List(); + + for (int i = 0; i < werte.Length; i++) + { + if (werte[i] == "Frau" || werte[i] == "Herr" || werte[i] == "Divers") + { + anrede = werte[i]; + vorname = werte[i + 1]; + nachname = werte[i + 2]; + geburtsdatum = werte[i + 3]; + i += 3; + } + else if (werte[i] == "Adresse") + { + strasse = werte[i + 1]; + plz = werte[i + 2]; + stadt = werte[i + 3]; + i += 3; + } + else if (werte[i] == "E-Mail") + { + email = werte[i + 1]; + i += 1; + } + else if (werte[i] == "Telefon") + { + telefonnummern.Add($"{werte[i + 1]} {werte[i + 2]}"); + i += 2; } } - return istGueltig; + bool gueltig = true; + + if (!PruefeGeburtstag(geburtsdatum)) + { + Console.WriteLine($"Ungültiges Geburtsdatum: {geburtsdatum}"); + gueltig = false; + } + + if (!string.IsNullOrEmpty(email) && !PruefeEmail(email)) + { + Console.WriteLine($"Ungültige E-Mail-Adresse: {email}"); + gueltig = false; + } + + if (!string.IsNullOrEmpty(plz) && !PruefePLZ(plz)) + { + Console.WriteLine($"Ungültige Postleitzahl: {plz}"); + gueltig = false; + } + + foreach (var telefon in telefonnummern) + { + if (!PruefeTelefon(telefon)) + { + Console.WriteLine($"Ungültige Telefonnummer: {telefon}"); + gueltig = false; + } + } + + if (gueltig) + { + int userId = GeneriereNaechsteId("user", connection); + EinfuegenInUserTabelle(userId, anrede, vorname, nachname, geburtsdatum, connection, clientId); + + EinfuegenInAddressTabelle(GeneriereNaechsteId("address", connection), userId, strasse, plz, stadt, connection); + EinfuegenInEmailTabelle(GeneriereNaechsteId("email", connection), userId, email, connection); + foreach (var telefon in telefonnummern) + { + string[] telefonTeile = telefon.Split(' '); + EinfuegenInPhoneTabelle(GeneriereNaechsteId("phone", connection), userId, telefonTeile[0], telefonTeile[1], connection); + } + } + else + { + ProtokolliereUngueltigeDaten(datensatz, protokollPfad); + } } - static bool PrüfGeburtstag(string geburtsdatum) + static int GeneriereNaechsteId(string tabelle, MySqlConnection connection) { - string pattern = @"^\d{4}\-\d{2}\-\d{2}$"; + string query = $"SELECT IFNULL(MAX(id), 0) + 1 FROM {tabelle}"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + return Convert.ToInt32(command.ExecuteScalar()); + } + } + + static void EinfuegenInUserTabelle(int userId, string anrede, string vorname, string nachname, string geburtsdatum, MySqlConnection connection, int clientId) + { + string query = "INSERT INTO user (id, clientId, genderId, firstname, lastname, birthdate, created) " + + "VALUES (@Id, @ClientId, @GenderId, @Vorname, @Nachname, @Geburtsdatum, @Created)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", userId); + command.Parameters.AddWithValue("@ClientId", clientId); + command.Parameters.AddWithValue("@GenderId", GetGenderId(anrede, connection)); + command.Parameters.AddWithValue("@Vorname", vorname); + command.Parameters.AddWithValue("@Nachname", nachname); + command.Parameters.AddWithValue("@Geburtsdatum", DateTime.Parse(geburtsdatum)); + command.Parameters.AddWithValue("@Created", DateTime.Now); + + command.ExecuteNonQuery(); + } + } + + static int GetGenderId(string anrede, MySqlConnection connection) + { + string query = "SELECT id FROM gender WHERE description = @Anrede"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Anrede", anrede); + return Convert.ToInt32(command.ExecuteScalar()); + } + } + + static void EinfuegenInAddressTabelle(int addressId, int userId, string strasse, string plz, string stadt, MySqlConnection connection) + { + string query = "INSERT INTO address (id, userId, street, postalcode, city) " + + "VALUES (@Id, @UserId, @Strasse, @PLZ, @Stadt)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", addressId); + command.Parameters.AddWithValue("@UserId", userId); + command.Parameters.AddWithValue("@Strasse", strasse); + command.Parameters.AddWithValue("@PLZ", plz); + command.Parameters.AddWithValue("@Stadt", stadt); + + command.ExecuteNonQuery(); + } + } + + static void EinfuegenInEmailTabelle(int emailId, int userId, string email, MySqlConnection connection) + { + string query = "INSERT INTO email (id, userId, email) VALUES (@Id, @UserId, @Email)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", emailId); + command.Parameters.AddWithValue("@UserId", userId); + command.Parameters.AddWithValue("@Email", email); + + command.ExecuteNonQuery(); + } + } + + static void EinfuegenInPhoneTabelle(int phoneId, int userId, string phoneprefix, string phonenumber, MySqlConnection connection) + { + string query = "INSERT INTO phone (id, userId, phoneprefix, phonenumber) VALUES (@Id, @UserId, @PhonePrefix, @PhoneNumber)"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@Id", phoneId); + command.Parameters.AddWithValue("@UserId", userId); + command.Parameters.AddWithValue("@PhonePrefix", phoneprefix); + command.Parameters.AddWithValue("@PhoneNumber", phonenumber); + + command.ExecuteNonQuery(); + } + } + + static bool PruefeGeburtstag(string geburtsdatum) + { + string pattern = @"^\d{2}\.\d{2}\.\d{4}$"; return Regex.IsMatch(geburtsdatum, pattern); } - static bool PrüfEmail(string email) + static bool PruefeEmail(string email) { - string pattern = @"^[a-z]+\.[a-z]+@[a-z]+\.[a-z]{2,}$"; + string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"; return Regex.IsMatch(email, pattern); } - static bool PrüfPLZ(string plz) + static bool PruefePLZ(string plz) { - string pattern = @"^[0-9]{5}$"; + string pattern = @"^\d{5}$"; return Regex.IsMatch(plz, pattern); } - static bool PrüfTelefon(string telefon) + static bool PruefeTelefon(string telefon) { - string pattern = @"^[0-9]{3,5}\s?[0-9]{4,10}$"; + string pattern = @"^\d{3,5}\s?\d{4,10}$"; return Regex.IsMatch(telefon, pattern); } - static void ProtokolliereUngueltigeDaten(string[] daten) + static void ProtokolliereUngueltigeDaten(List daten, string protokollPfad) { - string protokollPfad = "C:/Schule/PMC/ungueltige_Daten.csv"; using (StreamWriter sw = new StreamWriter(protokollPfad, true)) { - sw.WriteLine(string.Join(",", daten)); + foreach (var zeile in daten) + { + sw.WriteLine(zeile); + } } } } } + diff --git a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs index 1c627fa..9199f57 100644 --- a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs +++ b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("PMCProjekt")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3ecbf97c766628394acad938d340da68a9d05e5c")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+2150bad16d353de9bebea8f2feae3039c472b9e6")] [assembly: System.Reflection.AssemblyProductAttribute("PMCProjekt")] [assembly: System.Reflection.AssemblyTitleAttribute("PMCProjekt")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache index 3dc8954..9300142 100644 --- a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache +++ b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache @@ -1 +1 @@ -d4ca53237659e1a7007941b655e24571191b87dfdcf8a3a5ea0ebb2f5de16263 +b181418c207b62c0f6b18dd50a2d5203ab8bd79309967fd8ba3cf377b6e89772 diff --git a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.assets.cache b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.assets.cache index faa95ca..65bdc95 100644 Binary files a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.assets.cache and b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.assets.cache differ diff --git a/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.dgspec.json b/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.dgspec.json index aa019d5..1df1b7f 100644 --- a/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.dgspec.json +++ b/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.dgspec.json @@ -66,7 +66,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.204/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.304/PortableRuntimeIdentifierGraph.json" } } } diff --git a/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.g.props b/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.g.props index d65bb24..a73dfef 100644 --- a/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.g.props +++ b/PMCProjekt/PMCProjekt/obj/PMCProjekt.csproj.nuget.g.props @@ -7,7 +7,7 @@ $(UserProfile)\.nuget\packages\ C:\Users\bib\.nuget\packages\ PackageReference - 6.9.2 + 6.10.2 diff --git a/PMCProjekt/PMCProjekt/obj/project.assets.json b/PMCProjekt/PMCProjekt/obj/project.assets.json index b6c1d37..bd580a5 100644 --- a/PMCProjekt/PMCProjekt/obj/project.assets.json +++ b/PMCProjekt/PMCProjekt/obj/project.assets.json @@ -1850,7 +1850,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.204/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.304/PortableRuntimeIdentifierGraph.json" } } } diff --git a/PMCProjekt/PMCProjekt/obj/project.nuget.cache b/PMCProjekt/PMCProjekt/obj/project.nuget.cache index 39b4eac..210fe4b 100644 --- a/PMCProjekt/PMCProjekt/obj/project.nuget.cache +++ b/PMCProjekt/PMCProjekt/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "Jmj3WRDtSrMYQNSWXK2x6TEKWOlCmkjM6nbeQ2iYrfCgkzMw4GiPixfUmBUGiPiTU/KE5IO8pzSrja1hWLPpDA==", + "dgSpecHash": "/54hNmRIYgQ=", "success": true, "projectFilePath": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\PMCProjekt.csproj", "expectedPackageFiles": [