diff --git a/PMCProjekt/.vs/PMCProjekt/v17/.suo b/PMCProjekt/.vs/PMCProjekt/v17/.suo index 227af48..24c52bf 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 1408c2f..34527c2 100644 --- a/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json +++ b/PMCProjekt/.vs/PMCProjekt/v17/DocumentLayout.json @@ -24,7 +24,7 @@ "RelativeDocumentMoniker": "PMCProjekt\\Program.cs", "ToolTip": "C:\\Users\\bib\\Documents\\PMC_Projekt\\PMCProjekt\\PMCProjekt\\Program.cs", "RelativeToolTip": "PMCProjekt\\Program.cs", - "ViewState": "AQIAAA0AAAAAAAAAAAAQwBcAAAAyAAAA", + "ViewState": "AQIAAHwAAAAAAAAAAAAQwHsAAAAlAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-14T09:14:59.548Z", "EditorCaption": "" diff --git a/PMCProjekt/PMCProjekt/Program.cs b/PMCProjekt/PMCProjekt/Program.cs index 63a4fcb..31d2522 100644 --- a/PMCProjekt/PMCProjekt/Program.cs +++ b/PMCProjekt/PMCProjekt/Program.cs @@ -5,40 +5,25 @@ using System.Text.RegularExpressions; namespace PMCProjekt { - internal class Program + internal class Programm { static void Main(string[] args) { - if (args.Length != 1) - { - Console.WriteLine("Verwendung: PMCProjekt "); - return; - } + MySqlConnection myconnection; + string meineVerbindungszeichenfolge; - string dateiPfad = args[0]; - - Console.Write("Bitte geben Sie die Kundennummer ein (z.B. K2-002): "); - string kundennummer = Console.ReadLine(); - - MySqlConnection myConnection; - string myConnectionString; - - // Verbindung zur Datenbank herstellen - myConnectionString = "server=localhost;uid=root;pwd=root;database=import_export"; + // Kundennummer eingeben + // Console.Write("Bitte geben Sie die Kundennummer ein (z.B. K2-002): "); + //string kundennummer = Console.ReadLine(); + meineVerbindungszeichenfolge = "server=localhost;uid=root;pwd=root;database=import_export"; try { - myConnection = new MySqlConnection(myConnectionString); - myConnection.Open(); + myconnection = new MySqlConnection(meineVerbindungszeichenfolge); + myconnection.Open(); - int clientId = GetClientId(myConnection, kundennummer); - if (clientId == -1) - { - Console.WriteLine("Kundennummer nicht gefunden."); - return; - } - - // Überprüfen, ob die Datei existiert + // Datei einlesen + string dateiPfad = "C:/Schule/PMC/import_yutani.csv"; if (File.Exists(dateiPfad)) { using (StreamReader sr = new StreamReader(dateiPfad)) @@ -46,9 +31,8 @@ namespace PMCProjekt string zeile; while ((zeile = sr.ReadLine()) != null) { + // Werte aus der Zeile extrahieren string[] werte = zeile.Split(','); - - // Überprüfen, ob mindestens Anrede, Vorname, Nachname und Geburtsdatum vorhanden sind if (werte.Length >= 4) { string anrede = werte[0]; @@ -61,47 +45,72 @@ namespace PMCProjekt string email = werte.Length > 7 ? werte[7] : null; string telefonnummern = werte.Length > 8 ? werte[8] : null; - // Validieren der Benutzerdaten - if (ValidateUser(anrede, vorname, nachname, geburtsdatum, adresse, plz, stadt, email, telefonnummern)) + // Daten validieren + if (DatenValidieren(anrede, vorname, nachname, geburtsdatum, plz, email, telefonnummern)) { - // Überprüfen, ob der Benutzer bereits für diesen Kunden existiert - if (!IsUserDuplicate(myConnection, vorname, nachname, clientId)) - { - // Benutzer in die Tabelle "user" einfügen - int userId = InsertUser(myConnection, clientId, anrede, vorname, nachname, geburtsdatum); + // Nutzer in die Tabelle 'user' einfügen + // string abfrage = "INSERT INTO user (clientId, genderId, firstname, lastname, birthdate, created) VALUES (@clientId, @genderId, @firstname, @lastname, @birthdate, NOW())"; + // using (MySqlCommand mycommand = new MySqlCommand(abfrage, myconnection)) + // { + // mycommand.Parameters.AddWithValue("@clientId", HoleKundenId(kundennummer)); + // mycommand.Parameters.AddWithValue("@genderId", HoleGeschlechtsId(anrede)); + // mycommand.Parameters.AddWithValue("@firstname", vorname); + // mycommand.Parameters.AddWithValue("@lastname", nachname); + // mycommand.Parameters.AddWithValue("@birthdate", DateTime.ParseExact(geburtsdatum, "dd.MM.yyyy", null)); - // Adresse in die Tabelle "address" einfügen - if (!string.IsNullOrEmpty(adresse) && !string.IsNullOrEmpty(plz) && !string.IsNullOrEmpty(stadt)) - { - InsertAddress(myConnection, userId, adresse, plz, stadt); - } + // mycommand.ExecuteNonQuery(); + // } - // E-Mail in die Tabelle "email" einfügen - if (!string.IsNullOrEmpty(email)) - { - InsertEmail(myConnection, userId, email); - } + // // Adresse in die Tabelle 'address' einfügen + // if (adresse != null || plz != null || stadt != null) + // { + // string adressAbfrage = "INSERT INTO address (userId, street, postalcode, city) VALUES (LAST_INSERT_ID(), @street, @plz, @city)"; + // using (MySqlCommand adressBefehl = new MySqlCommand(adressAbfrage, myconnection)) + // { + // adressBefehl.Parameters.AddWithValue("@street", adresse); + // adressBefehl.Parameters.AddWithValue("@plz", plz); + // adressBefehl.Parameters.AddWithValue("@city", stadt); - // Telefonnummern in die Tabelle "phone" einfügen - if (!string.IsNullOrEmpty(telefonnummern)) - { - string[] telefonListe = telefonnummern.Split(';'); - foreach (string telefon in telefonListe) - { - InsertPhone(myConnection, userId, telefon); - } - } - } - else - { - // Protokollierung von Duplikaten - LogInvalidUser(vorname, nachname, "Benutzer ist bereits für diesen Kunden vorhanden"); - } + // adressBefehl.ExecuteNonQuery(); + // } + // } + + // // E-Mail in die Tabelle 'email' einfügen + // if (email != null) + // { + // string emailAbfrage = "INSERT INTO email (userId, email) VALUES (LAST_INSERT_ID(), @Email)"; + // using (MySqlCommand emailBefehl = new MySqlCommand(emailAbfrage, myconnection)) + // { + // emailBefehl.Parameters.AddWithValue("@Email", email); + // emailBefehl.ExecuteNonQuery(); + // } + // } + + // // Telefonnummern in die Tabelle 'phone' einfügen + // if (telefonnummern != null) + // { + // string[] telefonNummern = telefonnummern.Split(';'); + // foreach (var telefon in telefonNummern) + // { + // string[] telefonTeile = telefon.Split(' '); + // if (telefonTeile.Length == 2) + // { + // string telefonAbfrage = "INSERT INTO phone (userId, phoneprefix, phonenumber) VALUES (LAST_INSERT_ID(), @phoneprefix, @phonenumber)"; + // using (MySqlCommand telefonBefehl = new MySqlCommand(telefonAbfrage, myconnection)) + // { + // telefonBefehl.Parameters.AddWithValue("@phoneprefix", telefonTeile[0]); + // telefonBefehl.Parameters.AddWithValue("@phonenumber", telefonTeile[1]); + + // telefonBefehl.ExecuteNonQuery(); + // } + // } + // } + // } } else { - // Protokollierung von ungültigen Daten - LogInvalidUser(vorname, nachname, "Validierung fehlgeschlagen"); + // Ungültige Daten protokollieren + ProtokolliereUngueltigeDaten(werte); } } } @@ -112,7 +121,7 @@ namespace PMCProjekt Console.WriteLine("Datei nicht gefunden."); } - myConnection.Close(); + myconnection.Close(); } catch (MySqlException ex) { @@ -120,108 +129,80 @@ namespace PMCProjekt } } - // Funktion zur Ermittlung der ClientId anhand der Kundennummer - static int GetClientId(MySqlConnection connection, string clientNumber) + // Kunden-ID basierend auf der Kundennummer ermitteln + static int HoleKundenId(string kundennummer) { - string query = "SELECT id FROM client WHERE clientno = @clientNumber"; - using (MySqlCommand cmd = new MySqlCommand(query, connection)) - { - cmd.Parameters.AddWithValue("@clientNumber", clientNumber); - object result = cmd.ExecuteScalar(); - return result != null ? Convert.ToInt32(result) : -1; - } + // Kunden-ID zurückgeben basierend auf der Kundennummer + return 1; // Logik hier ersetzen } - // Funktion zur Validierung der Benutzerdaten - static bool ValidateUser(string anrede, string vorname, string nachname, string geburtsdatum, string adresse, string plz, string stadt, string email, string telefonnummern) + // Geschlechts-ID basierend auf der Anrede ermitteln + static int HoleGeschlechtsId(string anrede) { - if (!Regex.IsMatch(geburtsdatum, @"^\d{2}\.\d{2}\.\d{4}$")) return false; - if (!string.IsNullOrEmpty(email) && !Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$")) return false; - if (!string.IsNullOrEmpty(plz) && !Regex.IsMatch(plz, @"^\d{5}$")) return false; - if (!string.IsNullOrEmpty(telefonnummern)) + if (anrede.ToLower() == "herr") return 1; + if (anrede.ToLower() == "frau") return 2; + if (anrede.ToLower() == "divers") return 3; + return 0; // Unbekannt oder nicht angegeben + } + + // Daten validieren + static bool DatenValidieren(string anrede, string vorname, string nachname, string geburtsdatum, string plz, string email, string telefonnummern) + { + bool istGueltig = true; + + // Geburtsdatum validieren + DateTime parsedDate; + if (!DateTime.TryParseExact(geburtsdatum, "dd.MM.yyyy", null, System.Globalization.DateTimeStyles.None, out parsedDate)) { - string[] telefonListe = telefonnummern.Split(';'); - foreach (string telefon in telefonListe) + istGueltig = false; + } + + // E-Mail-Adresse validieren + if (!string.IsNullOrEmpty(email)) + { + Regex emailRegex = new Regex(@"^[^@\s]+@[^@\s]+\.[^@\s]+$"); + if (!emailRegex.IsMatch(email)) { - if (!Regex.IsMatch(telefon, @"^\d{3,5}-\d{4,10}$")) return false; + istGueltig = false; } } - return true; - } - // Funktion zur Überprüfung von Duplikaten - static bool IsUserDuplicate(MySqlConnection connection, string vorname, string nachname, int clientId) - { - string query = "SELECT COUNT(*) FROM user WHERE firstname = @vorname AND lastname = @nachname AND clientId = @clientId"; - using (MySqlCommand cmd = new MySqlCommand(query, connection)) + // Postleitzahl validieren + if (!string.IsNullOrEmpty(plz)) { - cmd.Parameters.AddWithValue("@vorname", vorname); - cmd.Parameters.AddWithValue("@nachname", nachname); - cmd.Parameters.AddWithValue("@clientId", clientId); - return Convert.ToInt32(cmd.ExecuteScalar()) > 0; + if (plz.Length != 5 || !int.TryParse(plz, out _)) + { + istGueltig = false; + } } - } - // Funktion zum Einfügen eines Benutzers - static int InsertUser(MySqlConnection connection, int clientId, string anrede, string vorname, string nachname, string geburtsdatum) - { - string query = "INSERT INTO user (clientId, firstname, lastname, birthdate) VALUES (@clientId, @vorname, @nachname, @geburtsdatum)"; - using (MySqlCommand cmd = new MySqlCommand(query, connection)) + // Telefonnummern validieren + if (!string.IsNullOrEmpty(telefonnummern)) { - cmd.Parameters.AddWithValue("@clientId", clientId); - cmd.Parameters.AddWithValue("@vorname", vorname); - cmd.Parameters.AddWithValue("@nachname", nachname); - cmd.Parameters.AddWithValue("@geburtsdatum", DateTime.ParseExact(geburtsdatum, "dd.MM.yyyy", null)); - cmd.ExecuteNonQuery(); - return (int)cmd.LastInsertedId; + string[] telefonNummern = telefonnummern.Split(';'); + foreach (var telefon in telefonNummern) + { + string[] telefonTeile = telefon.Split(' '); + if (telefonTeile.Length != 2 || + telefonTeile[0].Length < 3 || telefonTeile[0].Length > 5 || + telefonTeile[1].Length < 4 || telefonTeile[1].Length > 10 || + !int.TryParse(telefonTeile[0], out _) || !int.TryParse(telefonTeile[1], out _)) + { + istGueltig = false; + } + } } + + return istGueltig; } - // Funktion zum Einfügen einer Adresse - static void InsertAddress(MySqlConnection connection, int userId, string adresse, string plz, string stadt) + // Ungültige Daten protokollieren + static void ProtokolliereUngueltigeDaten(string[] daten) { - string query = "INSERT INTO address (userId, address, postalcode, city) VALUES (@userId, @adresse, @plz, @stadt)"; - using (MySqlCommand cmd = new MySqlCommand(query, connection)) + string protokollPfad = "C:/Schule/PMC/ungueltige_Daten.txt"; + using (StreamWriter sw = new StreamWriter(protokollPfad, true)) { - cmd.Parameters.AddWithValue("@userId", userId); - cmd.Parameters.AddWithValue("@adresse", adresse); - cmd.Parameters.AddWithValue("@plz", plz); - cmd.Parameters.AddWithValue("@stadt", stadt); - cmd.ExecuteNonQuery(); - } - } - - // Funktion zum Einfügen einer E-Mail - static void InsertEmail(MySqlConnection connection, int userId, string email) - { - string query = "INSERT INTO email (userId, email) VALUES (@userId, @Email)"; - using (MySqlCommand cmd = new MySqlCommand(query, connection)) - { - cmd.Parameters.AddWithValue("@userId", userId); - cmd.Parameters.AddWithValue("@Email", email); - cmd.ExecuteNonQuery(); - } - } - - // Funktion zum Einfügen einer Telefonnummer - static void InsertPhone(MySqlConnection connection, int userId, string telefonnummer) - { - string query = "INSERT INTO phone (userId, phonenumber) VALUES (@userId, @telefonnummer)"; - using (MySqlCommand cmd = new MySqlCommand(query, connection)) - { - cmd.Parameters.AddWithValue("@userId", userId); - cmd.Parameters.AddWithValue("@telefonnummer", telefonnummer); - cmd.ExecuteNonQuery(); - } - } - - // Funktion zur Protokollierung von ungültigen Benutzerdaten - static void LogInvalidUser(string vorname, string nachname, string grund) - { - string logPath = "invalid_users.log"; - using (StreamWriter sw = File.AppendText(logPath)) - { - sw.WriteLine($"{DateTime.Now}: {vorname} {nachname} - {grund}"); + sw.WriteLine(string.Join(",", daten)); } } } diff --git a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfo.cs index 876fade..d159a58 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+e9e49af1be84151f586fad3e1633f2fa660d3d71")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+ccf519442eacb4415c21da9b808d1323f8d13b0b")] [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 9cdc0a1..92d12a6 100644 --- a/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache +++ b/PMCProjekt/PMCProjekt/obj/Debug/net8.0/PMCProjekt.AssemblyInfoInputs.cache @@ -1 +1 @@ -497b76da71a0f65b1b63963994b6e814d84ab84904760acee03801e220cdfd81 +2b86785557cecb37507fb5607216d2388b73f1747577587e3fc6b51529995d44