gekocht bra

This commit is contained in:
NBMANTZELOS\bib 2024-06-21 10:25:51 +02:00
parent 97a2564ff2
commit ccf519442e

View File

@ -1,6 +1,7 @@
using MySql.Data.MySqlClient; using MySql.Data.MySqlClient;
using System; using System;
using System.IO; using System.IO;
using System.Text.RegularExpressions;
namespace PMCProjekt namespace PMCProjekt
{ {
@ -8,20 +9,36 @@ namespace PMCProjekt
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
if (args.Length != 1)
{
Console.WriteLine("Verwendung: PMCProjekt <CSV-Dateipfad>");
return;
}
string dateiPfad = args[0];
Console.Write("Bitte geben Sie die Kundennummer ein (z.B. K2-002): ");
string kundennummer = Console.ReadLine();
MySqlConnection myConnection; MySqlConnection myConnection;
string myConnectionString; string myConnectionString;
// Setzen Sie die korrekten Werte für Ihren Server, Benutzer, Passwort und Datenbanknamen // Verbindung zur Datenbank herstellen
myConnectionString = "server=localhost;uid=root;pwd=root;database=import_export"; myConnectionString = "server=localhost;uid=root;pwd=root;database=import_export";
try try
{ {
myConnection = new MySqlConnection(myConnectionString); myConnection = new MySqlConnection(myConnectionString);
// Öffnen Sie eine Verbindung
myConnection.Open(); myConnection.Open();
// Datei einlesen int clientId = GetClientId(myConnection, kundennummer);
string dateiPfad = "C:/Schule/PMC/import_yutani.csv"; if (clientId == -1)
{
Console.WriteLine("Kundennummer nicht gefunden.");
return;
}
// Überprüfen, ob die Datei existiert
if (File.Exists(dateiPfad)) if (File.Exists(dateiPfad))
{ {
using (StreamReader sr = new StreamReader(dateiPfad)) using (StreamReader sr = new StreamReader(dateiPfad))
@ -31,21 +48,60 @@ namespace PMCProjekt
{ {
string[] werte = zeile.Split(','); string[] werte = zeile.Split(',');
if (werte.Length == 2) // Überprüfen, ob mindestens Anrede, Vorname, Nachname und Geburtsdatum vorhanden sind
if (werte.Length >= 4)
{ {
string vorname = werte[0]; string anrede = werte[0];
string nachname = werte[1]; 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;
// Verarbeiten der Daten (z.B. Ausgabe) // Validieren der Benutzerdaten
Console.WriteLine("Vorname: " + vorname + ", Nachname: " + nachname); if (ValidateUser(anrede, vorname, nachname, geburtsdatum, adresse, plz, stadt, email, telefonnummern))
// Daten in die Datenbank einfügen (Beispiel)
string abfrage = "INSERT INTO user (firstname, lastname) VALUES (@vorname, @nachname)";
using (MySqlCommand myCommand = new MySqlCommand(abfrage, myConnection))
{ {
myCommand.Parameters.AddWithValue("@vorname", vorname); // Überprüfen, ob der Benutzer bereits für diesen Kunden existiert
myCommand.Parameters.AddWithValue("@nachname", nachname); if (!IsUserDuplicate(myConnection, vorname, nachname, clientId))
myCommand.ExecuteNonQuery(); {
// Benutzer in die Tabelle "user" einfügen
int userId = InsertUser(myConnection, clientId, anrede, vorname, nachname, geburtsdatum);
// Adresse in die Tabelle "address" einfügen
if (!string.IsNullOrEmpty(adresse) && !string.IsNullOrEmpty(plz) && !string.IsNullOrEmpty(stadt))
{
InsertAddress(myConnection, userId, adresse, plz, stadt);
}
// E-Mail in die Tabelle "email" einfügen
if (!string.IsNullOrEmpty(email))
{
InsertEmail(myConnection, userId, email);
}
// 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");
}
}
else
{
// Protokollierung von ungültigen Daten
LogInvalidUser(vorname, nachname, "Validierung fehlgeschlagen");
} }
} }
} }
@ -56,7 +112,6 @@ namespace PMCProjekt
Console.WriteLine("Datei nicht gefunden."); Console.WriteLine("Datei nicht gefunden.");
} }
// Verbindung schließen
myConnection.Close(); myConnection.Close();
} }
catch (MySqlException ex) catch (MySqlException ex)
@ -64,9 +119,110 @@ namespace PMCProjekt
Console.WriteLine("Fehler: " + ex.Message); Console.WriteLine("Fehler: " + ex.Message);
} }
} }
// Funktion zur Ermittlung der ClientId anhand der Kundennummer
static int GetClientId(MySqlConnection connection, string clientNumber)
{
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;
}
}
// 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)
{
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))
{
string[] telefonListe = telefonnummern.Split(';');
foreach (string telefon in telefonListe)
{
if (!Regex.IsMatch(telefon, @"^\d{3,5}-\d{4,10}$")) return 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))
{
cmd.Parameters.AddWithValue("@vorname", vorname);
cmd.Parameters.AddWithValue("@nachname", nachname);
cmd.Parameters.AddWithValue("@clientId", clientId);
return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
}
}
// 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))
{
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;
}
}
// Funktion zum Einfügen einer Adresse
static void InsertAddress(MySqlConnection connection, int userId, string adresse, string plz, string stadt)
{
string query = "INSERT INTO address (userId, address, postalcode, city) VALUES (@userId, @adresse, @plz, @stadt)";
using (MySqlCommand cmd = new MySqlCommand(query, connection))
{
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}");
}
}
} }
} }
}