/// <summary> /// Zahlt die Kredite mit den übergebenen Betrag zurück. /// </summary> public static void RepayKredit(AktienSimulatorDataSet.AccountRow account, decimal amount) { //Holt sich alle Kredite var kredite = GetKredite(account.Nickname); decimal payback = amount; foreach (var kredit in kredite) { if (payback == 0m) { break; } //Fall: Kredit höher als zurückzahlende Menge if (kredit.Rest > payback) { kredit.Rest -= payback; payback = 0m; } else //Fall: Einzelner Kredit kann voll beglichen werden { payback -= kredit.Rest; kredit.Rest = 0m; } } //Zieht die zurückgezahlte Menge von der Bilanz ab //Zu hoch gesetzte Rückzahlungsmenge wird nicht abgezogen. account.Bilanz -= amount + payback; }
/// <summary> /// Erhöht die Zinsschulden aller Kredite eines Accounts. /// </summary> public static void UpdateKreditSchuld(AktienSimulatorDataSet.AccountRow account) { var kredite = GetKredite(account.Nickname); foreach (var kredit in kredite) { kredit.Rest *= 1 + PROZENTUALE_ZINSEN; kredit.Rest = Math.Round(kredit.Rest, 2); } }
/// <summary> /// Nimmt einen neuen Kredit mit den übegebenen Betrag für einen Account auf. /// </summary> public static void KreditAufnehmen(AktienSimulatorDataSet.AccountRow account, decimal amount) { var row = Database.DataSet.Kredit.NewKreditRow(); row.Account = account.Nickname; row.Höhe = amount; row.Rest = amount; Database.DataSet.Kredit.Rows.Add(row); account.Bilanz += amount; }
/// <summary> /// Schüttet die Dividende für alle angegebenen Depots auf der Bilanz eines Accounts aus. /// </summary> public static void UpdateDividende(AktienSimulatorDataSet.AccountRow account, List <AktienSimulatorDataSet.DepotRow> depots) { decimal sum = 0m; foreach (var depot in depots) { sum += depot.Anzahl * depot.AktieRow.Kurs * PROZENTUALE_DIVIDENDE / 100; } account.Bilanz += sum; }
/// <summary> /// Es wird versucht die Aktien mit der angegeben Anzahl zu verkaufen. Der Fehlercode wird zurückgegeben. /// </summary> public static ErrorCodes.SellAktie SellAktie(AktienSimulatorDataSet.AccountRow account, List <AktienSimulatorDataSet.DepotRow> depots, int aktieID, int anzahl, ref bool newDepotCreated) { var depot = LogicDepot.GetDepotOrCreate(account.Nickname, depots, aktieID, ref newDepotCreated); if (depot.Anzahl >= anzahl) { var sum = depot.AktieRow.Kurs * anzahl; account.Bilanz += sum; depot.Anzahl -= anzahl; return(ErrorCodes.SellAktie.NoError); } return(ErrorCodes.SellAktie.NotEnoughAmount); }
/// <summary> /// Es wird versucht eine Aktie mit der angegebenen Anzahl zu kaufen. Der Fehlercode wird zurückgegeben. /// </summary> public static ErrorCodes.BuyAktie BuyAktie(AktienSimulatorDataSet.AccountRow account, List <AktienSimulatorDataSet.DepotRow> depots, int aktieID, int anzahl, ref bool newDepotCreated) { var depot = LogicDepot.GetDepotOrCreate(account.Nickname, depots, aktieID, ref newDepotCreated); var sum = depot.AktieRow.Kurs * anzahl; if (account.Bilanz >= sum) { depot.Anzahl += anzahl; account.Bilanz -= sum; return(ErrorCodes.BuyAktie.NoError); } return(ErrorCodes.BuyAktie.NotEnoughMoney); }
/// <summary> /// Macht eine einzelne SQL-Abfrage, um einen Account einzuloggen. Gibt den Account und den Fehlercode zurück. /// </summary> public static AktienSimulatorDataSet.AccountRow CheckLogIn(string nickname, string password, ref ErrorCodes.Login errorcode) { OleDbConnection connection = new OleDbConnection(Properties.Settings.Default.AktienSimulatorConnectionString); connection.Open(); //SQL Injection verhindern string queryString = "SELECT * FROM Account WHERE Nickname = @Nickname"; OleDbCommand command = new OleDbCommand(queryString, connection); command.Parameters.Add("@Nickname", OleDbType.VarChar, 255); command.Parameters["@Nickname"].Value = nickname; //Account suchen var reader = command.ExecuteReader(CommandBehavior.SingleRow); if (reader.HasRows) { reader.Read(); AktienSimulatorDataSet.AccountRow row = DataSet.Account.NewAccountRow(); row.Nickname = reader["Nickname"].ToString(); row.Passwort = reader["Passwort"].ToString(); row.Bilanz = Convert.ToDecimal(reader["Bilanz"]); //Prüft das Passwort if (row.Passwort == password) { // Passwort korrekt errorcode = ErrorCodes.Login.NoError; connection.Close(); return(row); } else { //Passwort inkorrekt errorcode = ErrorCodes.Login.WrongPassword; } } else { //Account wurde nicht gefunden errorcode = ErrorCodes.Login.NicknameNotFound; } connection.Close(); return(null); }
/// <summary> /// Speichert die notwendigen Tabellen ab. /// </summary> public static void SaveDatabase(AktienSimulatorDataSet.AccountRow account) { TableAdapterManager.DepotTableAdapter.Update(DataSet.Depot); TableAdapterManager.AccountTableAdapter.Update(account); TableAdapterManager.KreditTableAdapter.Update(DataSet.Kredit); }