C Projekt



  • Hallo,

    habe demnächst ein C Projekt was fertig sein muss. Aufgabe ist ein Programm zu schreiben was einen Benutzernamen mithilfe einer Access Datenbank generiert.
    Ich bin eigentlich relativ gut dabei was c angeht ,aber irgendwie fehlt mir zurzeit jegliche Kreativität dafür und deshalb brauche ich momentan im Einzelnen von euch Tipps wie ich das ganze anpacke und was ich dafür im Einzelnen brauche(sprich unter welchem begriff ich nachschlagen muss):

    Die Quelldatei hat folgende Zeilenstruktur:

    121, Schneider, Jan Roland,26.3.1980 00:00:00,BBS MM

    Die Ergebnisdatei soll die Schülernummer,einen Accountnamen, ein Passwort, die Schulbezeichnung, das Geburtsdatum und ein abschließendes Dummywort (cr/lf) enthalten und folgende Zeilenstruktur aufweisen:

    132,schneiderjan,ga4bu,bbs mm,26.3.1980,cr/lf

    Hier mal die Auftragsbedingungen:

    1. Schülernummer kann direkt der Quelldatei entnommen werden( Habe ich schon mit FILE *Quelle gelöst)

    2.Der Accountname wird aus dem Nachnamen und den ersten 3 Zeichen des Vornamens gebildet(Hier frage ich mich noch wie ich das ganze angehen soll)

    Der Accountname darf keine Leerzeichen und Minuszeichen enthalten(Wurde auch schon mit if gelöst)

    Alle Großbuchstaben müssen Kleinbuchstaben umgewandelt wurden( Auch schon gelöst mit tolower)

    3. Das Passwort soll durch einen Zufallsgenerator erzeugt werden und folgende Struktur haben: Konsonant, Vokal,Ziffer,Konsonant, Vokal, Ziffer. ( Erste Gedanken gingen an rand() aber hier brauche ich echt auch noch hilfe)

    Würde mich über jeden Tipp von euch freuen.

    Danke im Vorraus



  • Zu 2. Kennst du schon strncpy ?
    Beachte aber unbedingt das Verhalten bzgl. der '\0'

    Und auch strcat ?

    Zu 3. Du kannst dir Arrays anlegen, die nur Konsonanten bzw Vokale enthalten.

    char vokale[]= "aeiou";
    char konsonanten[]= "bcdfg....z"; // schaffst du selber.
    
    char password[32];
    
    ...
    
    password[0] = konsonanten[rand()%strlen(konsonanten)];
    password[1] = vokale[rand()%strlen(vokale)];
    ...
    password[6] = '\0';
    


  • strncpy und strcat kenn ich auch. aber \'0' bedeutet doch bis zum ende des strings ? WIeso hast du das in den 6 Index von Passwort reingetan ? Aber ich verstehe schon deine Vorgehensweise bei:

    password[0] = konsonanten[rand()%strlen(konsonanten)];
    password[1] = vokale[rand()%strlen(vokale)];
    

    Du hast jetzt sozusagen in jeden Index die erwartete Struktur eingebracht. Das könnte man dann später mit printf("%c",passwort) ausgeben

    Wie bau ich mir 2 zusammen ? Habe irgendwie noch keine Idee wie ich die Zusammensetzung von dem Nachnamen und den ersten 3 Zeichen des Vornamens bilde.(Hört sich gerade bisschen dumm an aber ich denke irgendwie gerade zu kompliziert)

    Erst habe ich an eine if abfrage gedacht. Dann würde ich das was in der Array drinne steht in eine 2 Dimensionale Array gepackt die dann so aussehen würde.
    Bsp:

    int k=0;
    char c[50];
    char accountname[6][20];
    
    c=getc(quelle);
    
    // Hier fehlt die nötige Schleife an der ich auch noch hake
    if(c == ','){
    
    k++
    }
    // Wie setze ich an diese Stelle eine Schleife, die mir den ersten Datensatz 
    // von 121, Schneider, Jan Roland,26.3.1980 00:00:00,BBS MM bis zum Komma in
    // accountname[0] und von dort aus Schneider in den accountname[1] einfügt.
    

    Dies sollte alles Automatisch passieren.



  • Erstmal zum Passwort:
    Konsonant, Vokal,Ziffer,Konsonant, Vokal, Ziffer sind 6 Zeichen.
    Die stehen beim Index 0 bis 5. Also kommt an Stelle 6 das Stringendezeichen '\0'

    Da das dann ein String ist gibst du es bei printf auch mit %s aus. (nicht %c)

    Zum Rest:

    Du musst erstmal die Daten der Zeile in eine passende struct laden. Ist ja alles schön durch Kommata getrennt.
    Die struct musst du dir selber entwerfen. Dann hast du alle Daten und kannst damit arbeiten.
    Am besten die Zeile mit fgets einlesen und dann mit sscanf auswerten.

    Dann kannst du mit sprintf leicht den usernamenamen zusammenbasteln

    char zeile[1000];
    // Diese Teile gehören eigentlich in eine struct.
    char vorname[32];
    char nachname[32];
    char datum[32];
    char schule[32];
    int  nummer;
    char username[36];
    
    ...
    fets(zeile,1000,quelle);
    sscanf(zeile, "%i,%31[^,],%31[^,],%31[^,],%31[^,\n]", &nummer, nachname, vorname, datum, schule);
    // 121, Schneider, Jan Roland,26.3.1980 00:00:00,BBS MM 
    
    sprintf(username, "%s%.3s", nachname, vorname
    

    Der Formatspecifier %31[^,] liest Maximal 31 Zeichen ein, bis ein Komma auftaucht. Das ist nötig, da %s keine Leerzeichen einliest, bzw. dann aufhört.


Anmelden zum Antworten