Autor Beitrag
Motze
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 02.03.11 23:31 
Schönen guten abend euch.

Seit geschlagenen zwei Tagen probire ich das problem zu lösen und bin auch ein wenig frustriert langsam, aber ich will endlich eine Lösung. Das problem ist im Kopf ganz einfach zu lösen(wie die meisten probleme) aber an der umsetztung scheiter es, Jetzt komm ich mal zum eigentlichen punkt ->.

Ich habe eine List sagen wir mal mitglieder die zufälliger weise mitglieder verwaltet.
jedes mitglied hat Name Vorname usw. und eine eigene nummer(um die nummer geht es).

Jetzt lege ich eine neues mitglied an gebe name eine alter und den rest. Jetzt soll mir das programm automatisch eine nummer vergeben die noch nicht orhanden ist in der List. Also:

Name: Mustermann
Vorname: Max
Geboren: 12.12.1990
Nummer: 1 <- soll automatisch vergeben werden

Name: Musterfrau
Vorname: Lisa
Geboren: 12.12.1990
Nummer: 2 <- soll automatisch vergeben werden

Name: Schmid
Vorname: Mayer
Geboren: 12.12.1990
Nummer: 2 <- sowas darf nicht passiren

und wenn ich jetzt eine von den Lösche muss die nummer erhalten bleiben, also die nummer darf nicht neu vergeben werden.


ausblenden volle Höhe 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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
public class Mitglieder
    {
        public string Vorname;
        public string Nachname;
        public DateTime Eintritsdatum;
        public DateTime Gültigkeit;
        public bool Für_immer;
        public int Nummer = 1;
    }


public static class Mitglieder_List
    {
        public static List<Mitglieder> Mg = new List<Mitglieder>();

        public static void Mg_Hinzufügen(string vorname, string nachname, DateTime eintritsdatum, DateTime gültigkeit, bool für_immer, int nummer)
        {
            Mg.Add(new Mitglieder() { Vorname = vorname, Nachname = nachname, Eintritsdatum = eintritsdatum, Gültigkeit = gültigkeit, Für_immer = für_immer, Nummer = nummer});
        }

        public static string Ausgabe_Vorname(int i)
        {
            return Mg[i].Vorname;
        }

        public static string Ausgabe_Name(int i)
        {
            return Mg[i].Nachname;
        }

        public static string Ausgabe_Eintritsdatum(int i)
        {
            return Mg[i].Eintritsdatum.ToShortDateString();
        }

        public static string Ausgabe_Gültigkeit(int i)
        {
            return Mg[i].Gültigkeit.ToShortDateString();
        }

        public static string Ausgabe_Für_immer(int i)
        {
            if (Mg[i].Für_immer)
            {
                return "Ja";
            }
            else
            {
                return "nein";
            }
        }

        public static int Ausgabe_Nummer(int i)
        {
            return Mg[i].Nummer;
        }
    }


Meine Form: nur die Methode um es auf ein DataGridView auszugeben


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
DGV.Rows.Clear();

            for (int i = 0; i < Mitglieder_List.Mg.Count; i++)
            {
                if (Mitglieder_List.Ausgabe_Für_immer(i).Equals("Ja"))
                {
                    DGV.Rows.Add(Mitglieder_List.Ausgabe_Nummer(i), Mitglieder_List.Ausgabe_Vorname(i), Mitglieder_List.Ausgabe_Name(i), Mitglieder_List.Ausgabe_Eintritsdatum(i), "", Mitglieder_List.Ausgabe_Für_immer(i));
                }
                else
                {
                    DGV.Rows.Add(Mitglieder_List.Ausgabe_Nummer(i), Mitglieder_List.Ausgabe_Vorname(i), Mitglieder_List.Ausgabe_Name(i), Mitglieder_List.Ausgabe_Eintritsdatum(i), Mitglieder_List.Ausgabe_Gültigkeit(i), Mitglieder_List.Ausgabe_Für_immer(i));
                }
            }

vielen dank erstmal für das lesen und ansonsten noch ein schönen abend

PS: für verbesserungen sämtlicher art bin ich offen. im MVS sieht das besser aus.

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 02.03.11 23:43 
user profile iconMotze hat folgendes geschrieben Zum zitierten Posting springen:
Das problem ist im Kopf ganz einfach zu lösen(wie die meisten probleme)
Woran hast du denn bereits gedacht und wo hakt es bei der Umsetzung?

_________________
>λ=
Motze Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 03.03.11 00:00 
ich bleibe immer wieder hängen so im kopf...

erst habe ich eine for schleife probiert die von 1-1000 alle zahlen durchgeht und dann kuckt ob sie vergeben sind. was natürlich sagen wir die ersten drei sind weil die ja schon eine nummer haben. Die schleife sollte mir dan sozusagen die 4 rausgeben als return. es scheiter schon beim durchsuchen aller mitglieder.

mit while schleife probiert...
für jedes mitglied solange ein int hochzähen lassen bis eine zahl nicht verwendet wierd.
Im nachhinen geistiger unfug. Aber ich sehe vor wald den baum nichtmer höchstwarscheinlich.

Bin jetzt auf den gedanken gekommen eine zweite list zu machen mit den zahlen 1-1000 und dazu ein bool wert ob sie verwendet wird und die zahl dann zuweisen.

Es muss doch auch einfacher gehen(professioneller). Habe alles nur aus büchern und probiren. Ist bestimmt nicht professionel. Für ein Tip wie mann das ganze professioneller schreiben könnte wäre ich sehd dankbar könnte dir auch den ganz code zukommen lasse, wenn ich wüsste wie.

vielen dank schonmal
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 03.03.11 00:39 
user profile iconMotze hat folgendes geschrieben Zum zitierten Posting springen:
ich bleibe immer wieder hängen so im kopf...
Das hört sich jetzt aber etwas anders an als "im Kopf leicht zu lösen" ;) .
Die Grundidee ist ganz einfach und benötigt überhaupt keine Suche in der bisherigen Liste: Speichere einfach die höchste bisher benutzte ID ab und zähle sie bei jedem Add hoch.

_________________
>λ=
m-s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Do 03.03.11 11:40 
Wenn man die einzelnen Positionen nicht löschen kann, ginge es auch über zählen der Einträge, also einfach mit Count.
Kann man Einträge löschen, geht das nicht.

Gruß Markus
Motze Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 03.03.11 20:10 
also die einträge knn mann löschen was auch ganz wichtig ist. Wie finde ich die höchste position den raus gibt es eine vorgefärtigte funktion oder muss ich eine schreiben???

das mit der höchsten position habe ich auch probiert mit einer eigenen funktion aber genau die hat bei mir nicht funktioniert(wortspiel).

habe das ganze immer über for schleifen probier und foreach aber das ganze hat nie richtig gefunzt.

Vielen dank erstmal für die antworten.
m-s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Do 03.03.11 20:40 
Wenn ich das richtig sehe, müsste ja der letzte Eintrag in der Liste der mit der höchsten Zahl sein.
Wenn dem so wäre musst Du die ja nur auslesen und eins drauf rechnen.

Hast Du denn noch den Code der nicht funktioniert hat?

Gruß Markus
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 03.03.11 21:59 
Hallo,
@user profile iconm-s das ist doch der Code, der oben steht, oder?

Warum störst Du Dich denn an der Nummer? Wenn Du willst, dass die ID des Mitglieds eindeutig ist, dann nimm einfach eine Guid. Diese sollte eigentlich immer eindeutig sein.

Wobei ich sie statische Klasse Mitglieder_Liste eh nicht verstehe. Warum hast Du nicht irgendwo eine List<Mitglied>? Und die List hat dann auch Funktionalitäten wie Add, Delete... Und die Abfrage einer Property über einen Index der List ist auch ziemlich unsicher. Wenn der Index nicht existiert, knallt es.

Ansonsten würde ich noch die Klasse "Mitglieder" in "Mitglied" umbenennen (lustig, Mitglied hat irgendwie was männliches :)), denn ein Objekt der Klasse spiegelt nunmal ein Mitglied wieder. Und die Variablen nicht public, sondern Properties! Und vielleicht auch einen Konstruktor.
Sorry, wenn das alles ganz schön viel verlangt ist...
LG, Marko