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 System;
using System.IO;
using System.Text.RegularExpressions;
namespace PMCProjekt
{
@ -8,20 +9,36 @@ namespace PMCProjekt
{
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;
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";
try
{
myConnection = new MySqlConnection(myConnectionString);
// Öffnen Sie eine Verbindung
myConnection.Open();
// Datei einlesen
string dateiPfad = "C:/Schule/PMC/import_yutani.csv";
int clientId = GetClientId(myConnection, kundennummer);
if (clientId == -1)
{
Console.WriteLine("Kundennummer nicht gefunden.");
return;
}
// Überprüfen, ob die Datei existiert
if (File.Exists(dateiPfad))
{
using (StreamReader sr = new StreamReader(dateiPfad))
@ -31,21 +48,60 @@ namespace PMCProjekt
{
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 nachname = werte[1];
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;
// Verarbeiten der Daten (z.B. Ausgabe)
Console.WriteLine("Vorname: " + vorname + ", Nachname: " + nachname);
// Daten in die Datenbank einfügen (Beispiel)
string abfrage = "INSERT INTO user (firstname, lastname) VALUES (@vorname, @nachname)";
using (MySqlCommand myCommand = new MySqlCommand(abfrage, myConnection))
// Validieren der Benutzerdaten
if (ValidateUser(anrede, vorname, nachname, geburtsdatum, adresse, plz, stadt, email, telefonnummern))
{
myCommand.Parameters.AddWithValue("@vorname", vorname);
myCommand.Parameters.AddWithValue("@nachname", nachname);
myCommand.ExecuteNonQuery();
// Ü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);
// 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.");
}
// Verbindung schließen
myConnection.Close();
}
catch (MySqlException ex)
@ -64,9 +119,110 @@ namespace PMCProjekt
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}");
}
}
}
}