Autor Beitrag
americanaccounts
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 22.05.08 16:44 
Hallo Leute,

also wir haben jetzt im Unterricht eine Frage bekommen:

"Das Programm soll erweitert werden. Es sollen verschiedene Konten angelegt werden können. Jedes Konto soll einem Namen (KontoInhaber) zugeordnet werden können. Ein Konto soll bereits mit 100€ Startguthaben eingerichtet werden können."

So jetzt kommt meine Frage unzwar wie gehe ich an so ein Problem ran?
In PHP würde ich eine Datenbank erstellen und man könnte so nun in eine Datenbank die Kontodaten schreiben.
Allerdings weiß ich nicht wie und wonach ich in C# suchen muss.

Kann ich in C-Sharp auch eine Datenbank anlegen (Textdokument?)
Achso..die Daten müssen nicht für immer gespeichert werden. Also solange das Programm ausgeführt wird, können z.B. 100 Konten erstellt werden..wird das Programm neugestartet muss allerdings keines mehr da sein.

Also freue mich über Anregungen, Stichwörtern, Links, Ideen.

Gruß


Moderiert von user profile iconChristian S.: Topic aus Allgemeine .NET-Fragen verschoben am So 25.05.2008 um 12:35
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 22.05.08 16:52 
Hallo!

Wenn die Daten nur während des Programmablaufs da sein sollen, halte ich eine Datenbank für übertrieben. Schreib Dir zwei Klassen (Kontoinhaber und Konto), die Du in zwei getrennten Listen verwaltest. Dabei verknüpfst Du jedes Konto mittels einer ID mit einem Kontoinhaber. Im Konstruktor der Konto-Klasse setzt Du das Guthaben auf 100.

Falls Du die Daten dann später doch mal über längere Zeit speichern möchtest, kannst Du die beiden Listen mittels des XmlSerializer in einer XML-Datei ablegen bzw. daraus laden.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
americanaccounts Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 22.05.08 17:15 
Ja das hört sich gut an.
So habe ich es gemacht, allerdings kann ich jetzt beliebig viele Kontos erstellen, allerdings habe ich jetzt einige Probleme mit dem auslesen.

Also angenommen ich habe 5 Kontos erstellt, dann habe ich die ID und die Namen):
1 name1
2 name2
3 name3
4 name4
5 name5

Mein Problem ist jetzt, dass ich immer nur den aktuellsten Wert auslesen kann, weil der vorherige wahrscheinlich!? überschrieben wird?

Hast du dazu vllt. auch noch eine Idee?

lg
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 22.05.08 17:42 
Wenn Du die Konten, wie ich schrieb, in einer Liste verwaltest, kannst Du doch auf jedes Element der Liste zugreifen. Zeig mal, wie Du das bisher machst, irgendwie glaube ich, da ist noch ein kleines Verständnisproblem :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
americanaccounts Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 23.05.08 15:23 
Sooo erstmal sorry, dass ich mich erst so spät melde.

Hier zu meinem bisherigen Code:

Also ich habe es jetzt so gemacht, wie ich dich meiner Meinung nach verstanden habe ^^..hoffe ich :D

Zuerst habe ich eine Array-Liste erstellt:

ausblenden C#-Quelltext
1:
ArrayList list = new ArrayList();					


Dann wird einem eine "Kontonummer" zugewiesen:

ausblenden C#-Quelltext
1:
2:
3:
4:
Console.WriteLine("Ihre Kontoid lautet:" + stand.KontoId); 
list.Add(stand.KontoId); // Id wird in Liste geschrieben
stand.KontoId++; //KontoId wird erhöht, damit es zu keiner gleichen Id kommt 
Console.WriteLine("Drücken Sie eine beliebige Taste um zurück ins Menu zu gelangen.");


Bevor ich zu dem kommenden Quellcode komme, der eigentlich meine Liste auslesen soll, erläutere ich ihn kurz:
Ich wollte mit einer Schleife (for-Schleife) die KontoId's auslesen, also habe ich das Listenarray genommen und mit list[*dynamischerWert*] auslesen wollen, allerdings kommt es zu einem Fehler: hier der Code.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Console.WriteLine(list[0]); //Wenn ich nur 1-Array auslesen will kommt es auch zu einem Fehler
/*
Fehlerhaft, deshalb ausgeklammert
for (int i = 0; i < 3; i++)
{
Console.WriteLine(list[stand.KontoId]);
}
*/

Console.ReadLine();


Der Fehler lautet: ArgumentOutOfRangeException

Was komisch ist, als ich das "Programm" trocken getestet habe, also nur diesen Part:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
using System;
using System.Collections;

class Test
{
    public static void Main()
    {
        ArrayList list = new ArrayList();
        list.Add("a");
        list.Add("b");
        list.Add("c");

        string[] strArray = (string[])list.ToArray(typeof(string));

        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine(list[i]);
            
        }
        Console.ReadLine();
    }
}

Hat er wunderbar funktioniert, eign. habe ich doch nichts anderes gemacht, als die string's durch int's ersetzt und den list.Add durch Zahlen und nicht durch Buchstaben.

Freue mich auf Antworten.

Lg

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 23.05.08 17:17 
user profile iconamericanaccounts hat folgendes geschrieben:
Also ich habe es jetzt so gemacht, wie ich dich meiner Meinung nach verstanden habe ^^..hoffe ich :D

Zuerst habe ich eine Array-Liste erstellt:

Davon kann ich überhaupt nichts erkennen. Hauptsächlich hat Christian vorgeschlagen, zwei eigene Klassen "Konto" mit "ID, Nummer, Stand" usw. sowie "Kontoinhaber" mit "Name, Vorname, Geburtsdatum" zu erstellen. Dazu gibt es dann eine List<Konto>, eine List<Kontoinhaber> und schließlich eine Dictionary<Konto, Kontoinhaber> oder Dictionary<int, int> (mit Bezug auf Konto.ID und Kontoinhaber.ID).

Bei List<T> und Dictionary<T,U> hast Du die volle Kontrolle über die verwendeten Klassen und deren Instanzen. Alles mit Array und fast alles mit ArrayList ist viel umständlicher und unsicherer.

Ich empfehle wirklich, nochmals neu anzufangen. Jürgen
americanaccounts Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 28.05.08 19:25 
Hallo Leute,

ich wollte mich nochmal mit dem Thema melden.
Ich habe mich jetzt entschieden, dass ich das mit Arraylisten mache, das klappt auch soweit so gut, habe es inzwischen geschafft Name und Kontoid zu speichern und auslesen zu lassen.

Jetzt habe ich eine Frage zur Schreibweise, Objekt/Arrayerzeugen oder so ähnlich...

Also mein Code funktioniert wunderbar, ich habe meine Switch-Case-Anweisung:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
switch(auswahl)
case 1:
stand.neuesKonto(); //Methode neuesKonto, oben (über der switch-case) wurde das Objekt "stand" erzeugt
break;
case 2:
stand.kontoAuslesen();
//usw.


Naja jetzt habe ich aber zwei Array-Listen, diese wurden in der Klasse "Program" von meinem Main-Bereich erstellt. Jetzt gibt es Probleme mit dem Zugriffsrecht, z.B. habe ich die Schleife:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
case 3:
for (int i = 0; i < stand.KontoId; i++)
    {
    Console.Write("Kontoname:" + nameKonto[i] + "\t");
    Console.WriteLine("Kontoid:" + idKonto[i]);
    }
Console.ReadLine();
break;

nameKonto ist in dem Fall die erzeugte Array-Liste:

ausblenden C#-Quelltext
1:
ArrayList nameKonto = new ArrayList();					


Soweit so gut funktioniert der Code auch, weil die Liste idKonto auf die erzeugte Arrayliste zugreifen kann, aber wenn ich die Schleife jetzt in eine Methode schreiben will..wie mach ich das dann?

Habe es einfach mal so ausprobiert: (was nicht funktioniert :/ )

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
//Methode in der Klasse Konto
public void kontostandAuslesen()
   {
       Console.Write("Kontoname:" + nameKonto[0] + "\t");
       Console.ReadLine();
   }

//Ausgabe bei case 3 in der Klasse Programm (main)
case 3:
stand.kontostandAuslesen();
Console.ReadLine();


Es kommt zu folgendem Fehler:

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.


Hoffe ihr habt ungefähr verstanden, was mein Problem ist.
Freue mich wie immer über jede Hilfe

gruß Micha

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
gage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 30.10.09 10:59 
Hallo ich beiße mir auch gerade an einer Kontoverwaltung die Zähne aus.
ich habe genau dieses problem mit der Verknüpfung zwischen Kunde und Konto. Ein Kunde kann mehrere Konten haben aber ein Konto gehört genau einem Kunden.


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
Console.WriteLine("___________________Geld einzahlen und auszahlen_______________");
                            SparKonto konto1 = new SparKonto(10010);
                            Console.WriteLine("Bitte den betrag eingeben den Sie auf das Sparkonto einzahlen wollen!");
                            konto1.Einzahlen(Convert.ToDouble(Console.ReadLine()));
                            GiroKonto konto2 = new GiroKonto(10020);
                            Console.WriteLine("Bitte den Betrag eingeben den Sie auf das Girokonto einzahlen wollen!");
                            konto2.Einzahlen(Convert.ToDouble(Console.ReadLine()));
                            Console.WriteLine("Bitte geben Sie den Betrag ein den Sie vom Girokonto auszahlen wolllen ein!");
                            konto2.Abheben(Convert.ToDouble(Console.ReadLine()));
                            Console.WriteLine("Konto Nummer " + konto1.Nummer +
                            "Kontostand: " + konto1.stand);
                            Console.WriteLine("Konto Nummer " + konto2.Nummer +
                            "Kontostand: " + konto2.stand);
                            
                            Console.WriteLine("__________________Neuer Saldo nach dem Verzinsen________________");                
                            konto1.Verzinsen();
                            Console.WriteLine(konto1.Saldo);
                            konto2.Verzinsen();
                            Console.WriteLine(konto2.Saldo);


Funktion zum verzinsen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
public virtual void Verzinsen()
        {
            
            Zinsen = (stand * Zinssatz / 100) / 12;
            Saldo = Zinsen + stand ;
        }
        /* öffentliche Nur-Lese-Eigenschaft für den Kontostand */
        public double Stand { get { return stand; } }
        /* Die Eigenschaft stand wird als protected gekennzeichnet, damit
         * das Girokonto darauf zugreifen kann */

        public double stand;

        /* Methode zum Einzahlen */
        public void Einzahlen(double betrag)
        {
            stand += betrag;
        }

        /* Der Konstruktor */
        public  Konto(int nummer, double stand)
        {
            this.Nummer = nummer;
            this.stand = stand;
            
        }
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 30.10.09 13:41 
user profile icongage hat folgendes geschrieben Zum zitierten Posting springen:
ich habe genau dieses problem mit der Verknüpfung zwischen Kunde und Konto. Ein Kunde kann mehrere Konten haben aber ein Konto gehört genau einem Kunden.

Fast der gesamte Code, den du zitierst, hat nichts, aber auch gar nichts mit dem Problem der Verknüpfung zu tun. Dein entscheidender Fehler ist, dass das Konto (d.h. diese Klasse) keine Eigenschaft "Kunde" hat, nämlich einen Querverweis auf Kunde.ID oder so. Das muss natürlich eine Nur-Lesen-Eigenschaft sein, die beim Konstruktor ebenfalls zugewiesen werden muss.

Jürgen
gage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Fr 30.10.09 14:17 
Jezt habe ich das Folgende mal zum test gemacht. aber so geht es auch nicht so wie ich es mir vorgestellt habe:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
class Kunde
    {

        string name;
        string straße;
        int Kunden_Id;
        static public void lesen(ref ArrayList KdListe)
        {
            
            Kunde einl = new Kunde();
            
            Console.WriteLine("______________________Kunden Anlegen_______________________");
            Console.WriteLine("Bitte geben Sie den Vorname ein");
            einl.name = Console.ReadLine();
            Console.WriteLine("Bitte geben Sie den Straße ein");
            einl.straße = Console.ReadLine();
            KdListe.Add(einl.Kunden_Id);
            einl.Kunden_Id++;
        }



ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
class Konto : Kunde
        {
            int Kontonummer;
            int Konto_Id;
            int BLZ;

            static public void Kontoanlegen(ref ArrayList kontoListe)
            {
             
            Konto lesen = new Konto();
            lesen.Konto_Id =1;
            Console.WriteLine("______________________Konto Anlegen_______________________");
            Console.WriteLine("Bitte geben Sie die BLZ ein");
            lesen.BLZ = int.Parse(Console.ReadLine());
            Console.WriteLine("Bitte geben Sie die Kontonummer ein");
            lesen.Kontonummer = int.Parse(Console.ReadLine());
            kontoListe.Add(lesen.Konto_Id);
            lesen.Konto_Id++;
            }


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
class Program
            {

                static void Main(string[] args)
                {
                    ArrayList kontoListe = new ArrayList();
                    ArrayList KdListe = new ArrayList();
                    for (int i = 0; i <= 3; i++)
                    {
                        Kunde.lesen(ref KdListe);
                   
                    }
                    for (int i = 0; i<= 3; i++)
                    {
                        Konto.Kontoanlegen(ref kontoListe);
                        
                    }


So habe ich immer noch keine Verknüpfung zwischen Kunde und Konto. Vielleicht hat ja jemand eine Idee. wäre über jeden Tipp dankbar.