From 3ecbf97c766628394acad938d340da68a9d05e5c Mon Sep 17 00:00:00 2001 From: "NBMANTZELOS\\bib" Date: Wed, 26 Jun 2024 12:56:38 +0200 Subject: [PATCH] =?UTF-8?q?l=C3=A4uft=20noch=20nicht=20ganz=20muss=20noch?= =?UTF-8?q?=20=C3=BCberpr=C3=BCft=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PMCProjekt/.vs/PMCProjekt/v17/.suo | Bin 31232 -> 33792 bytes .../.vs/PMCProjekt/v17/DocumentLayout.json | 2 +- PMCProjekt/PMCProjekt/Program.cs | 275 ++++++++---------- .../Debug/net8.0/PMCProjekt.AssemblyInfo.cs | 2 +- .../PMCProjekt.AssemblyInfoInputs.cache | 2 +- 5 files changed, 131 insertions(+), 150 deletions(-) diff --git a/PMCProjekt/.vs/PMCProjekt/v17/.suo b/PMCProjekt/.vs/PMCProjekt/v17/.suo index 227af484e0672fdb08537a284a05e4de7fd25342..24c52bfaeb54b68e3e9abc7e42758b7d59a4a895 100644 GIT binary patch delta 3613 zcmd^BO-xi*6u$S(0ONGP2Q&PP@~!07>}B$(PF>YV^fyQoKw0#xbm%BOJOA{ zHJZb_l)|QH>Ja1(ndoQJGTmwpJpnEQzyvWX`lUc7kOJfZ1waL`4k!nlKn}15;D2~! zZdu^hFO0=UVzE^4Dr+>+<0x~0Vc{j{T|gm_5cDq4HF05cSuF zPkQQ*rPQ2cZ0@45(YUdYMoX-g2KrYp3DvW~vkTaC3y_fGo?WmEc$5p+RXmRweZmFv zW`oBtJ!46q=qdh#@yp|%d4T8 zwUcUXc5~9}X1^5A$r?0K= zR&;~u0YX48&r+Yke6&Z4C)9l3>*c*z%gJHVCgaRkp=n$`WJu~ftP@n zfs;TKVA-h+ik{zWDFq8I9)|#h^P{qY=I}13a6vm=C@iB&B`t;j5OjC-XX%oqIo-HN z^vdZ@PRqP!*>?+r2z~Au8rkWiFCwl2-s7C)+;bF@o216p<)&76eKL|gqBv+rFo*U9vvuF5bgAMK zr$@qez0GWl`Nri`p`v!4FB^Vy-?{pm%K2BVr*GvOYV&QW*KVRs8D1K#{nExqRAM*A z_e|Xx{ZCTW2)kcXbZgH6bRX;#L8PQ;$Zyt!BRS z5_bm8Zqe>jBPLTM*DDDDV|Lqg>i<1kb4=_JbFiMYP6u7z>7c=2Mhe#q!uYUro1~k; z)pUEeI=w?tNZGT&(1J5^x>HMW??$=Ix5vtwK)~Bq?e)5Q{r$CWf0ftg4te`)+yQ@G zZ~y+i@NCnM=wdt`zDc_=xS2Tt?#AeYhI#BNnp{nT;$58=|&eJ|o zCu&hV`9-&=M)BkY$NhsPf(J79KOW4%RS|3yH+U6#?}U$L{Np8gMR)fUZoGc!d;7^B zFLXD3-c+;i?a9ikTaCKSz3YpYzmC$+VmEW?L26SaW%yOn0va`WI_Zt$4ri4JptAEp zjb1$cP_PbaVb{^qo+s0S*Z4>kbY-lL8Y1OX8gNi?z${aZQ<07Gudi>y`t(D@NjJvI gd3pWB;J@sw4*F)@8qz#@D0UYMBR*ZYB~F>&0Kn{$1^@s6 delta 2505 zcmdUwe@t6d6vy9vv<%oQlph;yDNq;%1j}BbwB00H0xlpMOh7a-L&^qj!sguC2+Hg; zL_?H6+&hUe>au|TWnyA@|1O3IF^e$~lO-Dchd=g*(f>@F7!$4E)Amh7W{jC8-sJP{ zx#yjG-#zD@d#<)5Yf15jS}mE)E=g9%GWa!}PP1AVqOeL_op?)^XA8G}_;JSf$v2{j z;&MVm(_A7}xs;C|o(ArjW6(i%v-1h)quSHsbA zq3543*x26N$rD*8VT+cXm`?A5{0j!`HS5@O8z=(o1$$Kt3IKbG5NGU;ViV=j-M)Hq zZ`oHRC;x@7|Ik%u)>Xwq3#vkP^&~C0lnVYPrveA27I*+@E_e8Dab))n!$<{w&<;94 z0CWPn<$B-7MiUrB!6bFN${&6j(phj0JOgIHEI1D?fM>x)@EqXTObl{7H-4V`tB)Si z|L^-RP6`*LiU)0i!_A2TPt#Od)Nea(w}tNMp$*wjG0#w@S7i(RWdZU+AdEfqSytV)| zN>}%rdeKJlnuMsQ6rObyuN^7iL^2mLl3qpD%Qp9ROAkcW=0c*MKc8*x^+5<+z4+YZ zWtCF!NSmsvp^orEPI0GmNCIwis%9E#^AWwK?{1sxAF^--F<(=%{MH`9;Qj9k#BOxk{xbJm&ZMat`TcfEX^~CcT_Ik} z=i32wd5Zdg`?pPpFbE1_>Y7`Q)+11_;6-KUJc6nu^yY?dxq~GGX^{NdaO&( z$KfKQ=!ti&|LN{5v@#ntq8F}<+$re0SM`a~^Iy@MvG0Y|=uSK&X#Ir`"); - 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