From 6a05c7b75bd0614d5cf9bb7485dc81da33a8e562 Mon Sep 17 00:00:00 2001 From: "NBJC\\bib" Date: Wed, 19 Jun 2024 11:54:33 +0200 Subject: [PATCH] =?UTF-8?q?L=C3=B6sungsvariante=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Projekt_Calcan_Conze/v17/.futdcache.v2 | Bin 164 -> 164 bytes .../.vs/Projekt_Calcan_Conze/v17/.suo | Bin 29696 -> 30720 bytes .../v17/DocumentLayout.json | 2 +- .../Projekt_Calcan_Conze/Program.cs | 297 +++++++++++------- .../Projekt_Calcan_Conze.AssemblyInfo.cs | 2 +- ...jekt_Calcan_Conze.AssemblyInfoInputs.cache | 2 +- 6 files changed, 195 insertions(+), 108 deletions(-) diff --git a/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/.futdcache.v2 b/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/.futdcache.v2 index 19d6bae422183f83f5130fbd4cd9adc026410f6f..dafa8ef0f053630cfdfe7473ebd83c31dbe2c736 100644 GIT binary patch delta 15 XcmZ3&xP)=S9FBzdUp@x)+~EKKH%kX~ delta 15 RcmZ3&xP)=S91aF30017T0)GGi diff --git a/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/.suo b/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/.suo index d513fdcacc11c3bced357d83364e0a8d45b45314..c0419724f5231e5d2d8714ffbda4afb231e21b4c 100644 GIT binary patch delta 2004 zcmb7EUu;ul6u;l??N+vXyMLWiHa0ru+@BWiEnVBY4ZN(KsdQ#_5u5}g1GmJuAcYbK zN>U(EF_1t{T=2=H5BQ`py*`sF#1MTLMji}rBtBrGi3v5?9!5Rq{+YLPL3Wz2-@U){ zoj>W<;OD!xXyb<;j@-P@df_y`Bvw$|9LLcP=i7TA>zb5U5E0&i zO0VEcQNTYGA26ZqKr=qo<7&c1#uDz2=>eq;pKC4Li+c^OM(e!}_hDSExI7kST2(5K zue~}5*M&Y7f$xO2rf1fv+w})R8_V+(7L%)H*<6Sp zaS?G*zQknP#GK-DO)?L={b-V`__Zy zz&+3N7D%TIGa^Hh_r{+p!+W0UK#g}r;!Jl%3N!l9<$O<7RFK%BcvZ4 ztZB+)n8tQQ2A!z34bR6Xj3FFwDoW^RS+yMPbZWB0=!p8S!-3|<@%V5`GV<?@fHq@-eH`Hmq7zKbciaL(&_A zoSG{n`J#NAZ8Q{1##h8_f2{I$WbCX04nta`vR5@lc^{UM2&`*u(;4RT?pc=!*OL)BQK@gCAw-@PdO qZ?hDS=lCZc(zVPS+eDMhap#OiJ$YmEM)2*?UeJzC=?fj7uzvvBI`)zP delta 1700 zcma)6%}*0S6z?qC4`8>H@=?BNLqQ7EZb4{^plGWipcE40!Dt`|988QRtLG}742fx< z2hYTK(F3%ej4>cw#6vl7LjM3RCMNWN7{vE>yLN>reaY;b`MozYzxmCZjeTdaZMHbV zF$=i3#=^xrUtYg`zr|eefJ+Mn27|$f?EnqpC2o)lMq!oni&qd#^7uh31jaky9?#c1 za8!fMjE$z$qW^{7NI5mR?(L5Vl^7%qv@MD$Gkb?{;E9Ne^mJw|1LU@}XedWS z(@0&k9XUJt6P1I9DPwkioI$qMfz8^LhcG4ciK?*3xGb+6w<Nof6bn$+ury^0}$9^9d7iVCd=Y7bDYy~?P0>ju5?ar@?tQiBY+}f?M+Yq(1=K%bVhND6Y z0&YE+39A*IiKIp5#7LVyy6oZ2v>O_n>phz~)BBOZ2agE`dxOegVce7)XIzR69kArZ zb#qhqOfWPRob>kG?g@EM1*D)iG&wcto$>d~1g0dZb9#C@_3g%iv6SvLYs&%bI8*zx z1$=U3o#np<6}e_~{(4+vj)$1@sj(~2(HR1pPfDG=Kg(RtKP6Tlf9~FXwf6PdSdnvl jW$DSSceY1kJCU8K>(}Of8t6X^TOIKNkD(gwdK13^khNp{ diff --git a/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/DocumentLayout.json b/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/DocumentLayout.json index 3bd3609..463be7f 100644 --- a/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/DocumentLayout.json +++ b/Projekt_Calcan_Conze/.vs/Projekt_Calcan_Conze/v17/DocumentLayout.json @@ -24,7 +24,7 @@ "RelativeDocumentMoniker": "Projekt_Calcan_Conze\\Program.cs", "ToolTip": "C:\\Jan_bib_Module\\PMC\\Projekt\\Projekt_Calcan_Conze\\Projekt_Calcan_Conze\\Program.cs", "RelativeToolTip": "Projekt_Calcan_Conze\\Program.cs", - "ViewState": "AQIAACkAAAAAAAAAAAAAwDcAAAAgAAAA", + "ViewState": "AQIAAFIAAAAAAAAAAAAqwGAAAABAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-05-24T09:06:25.212Z", "EditorCaption": "" diff --git a/Projekt_Calcan_Conze/Projekt_Calcan_Conze/Program.cs b/Projekt_Calcan_Conze/Projekt_Calcan_Conze/Program.cs index 339ec4e..92a28c0 100644 --- a/Projekt_Calcan_Conze/Projekt_Calcan_Conze/Program.cs +++ b/Projekt_Calcan_Conze/Projekt_Calcan_Conze/Program.cs @@ -47,7 +47,7 @@ class Program MySql.Data.MySqlClient.MySqlConnection myConnection; string myConnectionString; //set the correct values for your server, user, password and database name - myConnectionString = "server=localhost;uid=root;pwd=root;database=import_export"; //ID eventuell von phpMyAdmin ziehen? + myConnectionString = "server=localhost;uid=root;pwd=root;database=import_export"; //Hier greife ich auf import_export zu try { @@ -59,15 +59,16 @@ class Program MySqlCommand myCommand = new MySqlCommand(); myCommand.Connection = myConnection; // myCommand.CommandText = @"SELECT * FROM workshop WHERE maxParticipants = @code;"; + //Selber eingefügt ab hier - myCommand.CommandText = @"SELECT * FROM user"; + myCommand.CommandText = @"SELECT * FROM user"; //Hier tragen wir unsere SELECT ein //Hier ende + // myCommand.Parameters.AddWithValue("@code", "12"); // execute the command and read the results using MySqlDataReader myReader = myCommand.ExecuteReader(); - //Hier dann den CSV Reader benutzen? while (myReader.Read()) { @@ -83,7 +84,7 @@ class Program } - //Consolen-Ausgabe und Abfrage + //Consolen-Ausgabe und Abfrage Eventuell hoch in das While schieben Console.WriteLine("Willkommen"); Console.Write("Bitte geben Sie nun die Kundenummer ein: "); @@ -93,177 +94,263 @@ class Program string filePath = "path/to/your/" + dateiBezeichnung; //Wo wird die CSV vor dem einlesen abgelegt? Extra Ordner dafür erstellen - //Überprüfung einbauen, ob die Datei exisitiert mit if() + //Überprüfung, ob die Datei exisitiert mit File.Exists() + + if (!File.Exists(filePath)) + { + Console.WriteLine("Die Datei-Parameter konnten nicht gefunden werden. Bitte versuche es erneut"); + } + //Schwierigkeit: Bei User beginnen und dann alle anderen Tabellen durch Foreign Keys verbinden/verweisen //Procedure INSERT anschauen - Elegante Lösung //Auto Increment beachten - //Umsetzung mit Arrays: Beginnend mit durchzählen für Länge Array, Dann unterteilung in Blöcken - //(CSV Datei einteilen vor Herr/Frau) , Dann erstellung Tabelle User, dann Andere Tabellen mit Foreign Keys verbinden + //Umsetzung mit Arrays: Beginnend mit durchzählen für Länge Array, darauffolgende Unterteilung in Blöcken + //(CSV Datei einteilen: (Beginnend immer mit Herr/Frau) , dann Erstellung Tabelle User, dann andere Tabellen mit Foreign Keys verknüpfen } } -/* - * - * Die wunderbare Lösung von unserem Kollegen. Nicht getestet aber an den Ansätzen können wir uns orientieren - * +/* Das hier wäre eine Lösungsvariante. Diese beruht auf den vorhandenen Daten + using System; using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using System.Text.RegularExpressions; +using MySql.Data.MySqlClient; class Program { static void Main(string[] args) { - if (args.Length != 2) - { - Console.WriteLine("Usage: ImportUsers "); - return; - } + // Connection zum Server + string myConnectionString = "server=localhost;uid=root;pwd=root;database=import_export"; - string filePath = args[0]; - string customerId = args[1]; + Console.WriteLine("Willkommen"); + Console.Write("Bitte geben Sie nun die Kundennummer ein: "); + string kundennummer = Console.ReadLine(); + Console.Write("Bitte geben Sie die Datei-Parameter ein: "); + string dateiBezeichnung = Console.ReadLine(); + + string filePath = "path/to/your/" + dateiBezeichnung; // Adjust the path to your CSV file if (!File.Exists(filePath)) { - Console.WriteLine("File does not exist."); + Console.WriteLine("Die Datei-Parameter konnten nicht gefunden werden. Bitte versuche es erneut"); return; } - var users = ReadCsvFile(filePath); - var invalidUsers = new List(); - var validUsers = new List(); + List invalidEntries = new List(); + List existingEntries = new List(); - foreach (var user in users) + // Einlesen der CSV-Datei und Verarbeitung der Daten + string[] lines = File.ReadAllLines(filePath); + List users = ParseCsv(lines, invalidEntries); + + using (MySqlConnection myConnection = new MySqlConnection(myConnectionString)) { - if (ValidateUser(user, out string validationError)) + myConnection.Open(); + + foreach (User user in users) { - if (!IsUserAlreadyExists(user, customerId)) + // Überprüfen, ob der Nutzer bereits existiert + if (UserExists(myConnection, user, kundennummer)) { - validUsers.Add(user); + existingEntries.Add($"{user.Firstname} {user.Lastname}, {user.Email}"); + continue; } - else - { - invalidUsers.Add($"User already exists: {user.FirstName} {user.LastName}, Email: {user.Email}"); - } - } - else - { - invalidUsers.Add(validationError); + + // Nutzer einfügen + InsertUser(myConnection, user, kundennummer); } } - ImportValidUsers(validUsers, customerId); - LogInvalidUsers(invalidUsers); + // Ungültige und bereits vorhandene Einträge protokollieren + LogEntries("invalid_entries.log", invalidEntries); + LogEntries("existing_entries.log", existingEntries); - Console.WriteLine("Import completed."); + Console.WriteLine("Import abgeschlossen."); } - static List ReadCsvFile(string filePath) + static List ParseCsv(string[] lines, List invalidEntries) { - var users = new List(); - var lines = File.ReadAllLines(filePath); + List users = new List(); + User currentUser = null; - foreach (var line in lines) + foreach (string line in lines) { - var columns = line.Split(','); + string[] parts = line.Split(';'); - var user = new User + if (parts[0] == "Herr" || parts[0] == "Frau") { - Salutation = columns[0], - FirstName = columns[1], - LastName = columns[2], - BirthDate = columns[3], - Street = columns[4], - PostalCode = columns[5], - City = columns[6], - Email = columns[7], - PhoneNumbers = columns.Skip(8).ToList() - }; + if (currentUser != null) + { + users.Add(currentUser); + } + currentUser = new User + { + Gender = parts[0], + Firstname = parts[1], + Lastname = parts[2], + Birthdate = parts[3] + }; + continue; + } - users.Add(user); + if (parts[0] == "Adresse" && currentUser != null) + { + currentUser.Address = new Address + { + Street = parts[1], + PostalCode = parts[2], + City = parts[3] + }; + continue; + } + + if (parts[0] == "E-Mail" && currentUser != null) + { + currentUser.Email = parts[1]; + if (!IsValidEmail(currentUser.Email)) + { + invalidEntries.Add($"Ungültige E-Mail: {currentUser.Email}"); + currentUser = null; + } + continue; + } + + if (parts[0] == "Telefon" && currentUser != null) + { + if (!IsValidPhone(parts[1], parts[2])) + { + invalidEntries.Add($"Ungültige Telefonnummer: {parts[1]} {parts[2]}"); + currentUser = null; + } + else + { + currentUser.Phones.Add(new Phone + { + Prefix = parts[1], + Number = parts[2] + }); + } + continue; + } + } + + if (currentUser != null) + { + users.Add(currentUser); } return users; } - static bool ValidateUser(User user, out string error) + static bool IsValidEmail(string email) { - error = string.Empty; - DateTime birthDate; - - if (!DateTime.TryParseExact(user.BirthDate, "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthDate)) + try + { + var addr = new System.Net.Mail.MailAddress(email); + return addr.Address == email; + } + catch { - error = $"Invalid birth date: {user.BirthDate}"; return false; } - - if (!Regex.IsMatch(user.Email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$")) - { - error = $"Invalid email: {user.Email}"; - return false; - } - - if (!Regex.IsMatch(user.PostalCode, @"^\d{5}$")) - { - error = $"Invalid postal code: {user.PostalCode}"; - return false; - } - - foreach (var phone in user.PhoneNumbers) - { - var parts = phone.Split('-'); - if (parts.Length != 2 || !Regex.IsMatch(parts[0], @"^\d{3,5}$") || !Regex.IsMatch(parts[1], @"^\d{4,10}$")) - { - error = $"Invalid phone number: {phone}"; - return false; - } - } - - return true; } - static bool IsUserAlreadyExists(User user, string customerId) + static bool IsValidPhone(string prefix, string number) { - // Hier sollte die Logik implementiert werden, um zu prüfen, ob der Nutzer bereits in der Datenbank vorhanden ist. - // Dies ist ein Platzhalter für die tatsächliche Überprüfung in der Datenbank. - return false; + return Regex.IsMatch(prefix, @"^\d{3,5}$") && Regex.IsMatch(number, @"^\d{4,10}$"); } - static void ImportValidUsers(List users, string customerId) + static bool UserExists(MySqlConnection connection, User user, string clientId) { - // Hier sollte die Logik implementiert werden, um die gültigen Nutzer in die Datenbank zu importieren. - // Dies ist ein Platzhalter für den tatsächlichen Datenbankimport. + string query = @"SELECT COUNT(*) FROM user WHERE firstname = @firstname AND lastname = @lastname AND clientId = @clientId"; + MySqlCommand cmd = new MySqlCommand(query, connection); + cmd.Parameters.AddWithValue("@firstname", user.Firstname); + cmd.Parameters.AddWithValue("@lastname", user.Lastname); + cmd.Parameters.AddWithValue("@clientId", clientId); + return Convert.ToInt32(cmd.ExecuteScalar()) > 0; } - static void LogInvalidUsers(List invalidUsers) + static void InsertUser(MySqlConnection connection, User user, string clientId) { - using (StreamWriter sw = new StreamWriter("invalid_users.log")) + string query = @"INSERT INTO user (clientId, genderId, firstname, lastname, birthdate) VALUES (@clientId, @genderId, @firstname, @lastname, @birthdate)"; + MySqlCommand cmd = new MySqlCommand(query, connection); + cmd.Parameters.AddWithValue("@clientId", clientId); + cmd.Parameters.AddWithValue("@genderId", user.Gender == "Herr" ? 1 : (user.Gender == "Frau" ? 2 : 3)); + cmd.Parameters.AddWithValue("@firstname", user.Firstname); + cmd.Parameters.AddWithValue("@lastname", user.Lastname); + cmd.Parameters.AddWithValue("@birthdate", DateTime.ParseExact(user.Birthdate, "dd.MM.yyyy", CultureInfo.InvariantCulture)); + + cmd.ExecuteNonQuery(); + long userId = cmd.LastInsertedId; + + if (user.Address != null) { - foreach (var error in invalidUsers) - { - sw.WriteLine(error); - } + query = @"INSERT INTO address (userId, street, postalcode, city) VALUES (@userId, @street, @postalcode, @city)"; + cmd = new MySqlCommand(query, connection); + cmd.Parameters.AddWithValue("@userId", userId); + cmd.Parameters.AddWithValue("@street", user.Address.Street); + cmd.Parameters.AddWithValue("@postalcode", user.Address.PostalCode); + cmd.Parameters.AddWithValue("@city", user.Address.City); + cmd.ExecuteNonQuery(); + } + + if (!string.IsNullOrEmpty(user.Email)) + { + query = @"INSERT INTO email (userId, email) VALUES (@userId, @Email)"; + cmd = new MySqlCommand(query, connection); + cmd.Parameters.AddWithValue("@userId", userId); + cmd.Parameters.AddWithValue("@Email", user.Email); + cmd.ExecuteNonQuery(); + } + + foreach (var phone in user.Phones) + { + query = @"INSERT INTO phone (userId, phoneprefix, phonenumber) VALUES (@userId, @phoneprefix, @phonenumber)"; + cmd = new MySqlCommand(query, connection); + cmd.Parameters.AddWithValue("@userId", userId); + cmd.Parameters.AddWithValue("@phoneprefix", phone.Prefix); + cmd.Parameters.AddWithValue("@phonenumber", phone.Number); + cmd.ExecuteNonQuery(); + } + } + + static void LogEntries(string filePath, List entries) + { + if (entries.Count > 0) + { + File.AppendAllLines(filePath, entries); } } } class User { - public string Salutation { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - public string BirthDate { get; set; } + public string Gender { get; set; } + public string Firstname { get; set; } + public string Lastname { get; set; } + public string Birthdate { get; set; } + public Address Address { get; set; } + public string Email { get; set; } + public List Phones { get; set; } = new List(); +} + +class Address +{ public string Street { get; set; } public string PostalCode { get; set; } public string City { get; set; } - public string Email { get; set; } - public List PhoneNumbers { get; set; } } -*/ +class Phone +{ + public string Prefix { get; set; } + public string Number { get; set; } +} + +*/ \ No newline at end of file diff --git a/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfo.cs b/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfo.cs index fba27de..093664c 100644 --- a/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfo.cs +++ b/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Projekt_Calcan_Conze")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5be00c2e03258059442828eb121b209b9abc8ce5")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b5daf727d036da56b4f0ec7d625674d7d8d44a73")] [assembly: System.Reflection.AssemblyProductAttribute("Projekt_Calcan_Conze")] [assembly: System.Reflection.AssemblyTitleAttribute("Projekt_Calcan_Conze")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfoInputs.cache b/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfoInputs.cache index 4ea8d11..3283eeb 100644 --- a/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfoInputs.cache +++ b/Projekt_Calcan_Conze/Projekt_Calcan_Conze/obj/Debug/net8.0/Projekt_Calcan_Conze.AssemblyInfoInputs.cache @@ -1 +1 @@ -4b22627745609a314655206a5a1750317c1cb42a093f5d4808d42383331c33bf +e39a290590c7cc4b23572b44b843d3323f8e88ed187de9f169fba7cecdea222d