Seite 1 von 2

Ein Programm, welches Daten mehrerer Benutzer verwalten kann

Verfasst: Mo Feb 13, 2012 4:04 pm
von 3VAD_YNCAL
Hallo zusammen,

ich lerne zur Zeit C und möchte nun als Übung gerne ein Programm schreiben, das Daten mehrerer Benutzer verwalten soll.
Beispielsweise wichtige Adressdaten.
Bei der ganzen Sache gibt es für mich aber ein kleines Problem und daher hoffe ich, dass ihr mir vielleicht etwas unter die Arme greift. Bin noch nicht ganz so fit in der C-Programmierung.
Ich bräuchte von euch ein paar Tipps wie man folgendes programmiertechnisch umsetzen könnte:
- Im Programm soll es möglich sein, dass man mehrere Benutzer anlegen kann (mit Passwort).
- Jeder Benutzer hat die Möglichkeit, nachdem er sich erfolgreich mit seinem Passwort angemeldet hat, wichtige Daten wie beispielsweise Adressdaten, Telefonnummern usw. zu speichern, gespeicherte Daten aufzurufen und gespeicherte Daten wieder zu löschen.
- Natürlich soll Nutzer A auch nur auf seine Daten zugreifen können und nicht auf die Daten anderer Nutzer (Nutzer B, Nutzer C ... usw.)
- Daten verschlüsselt speichern möchte ich erst später noch mit reinbauen - ist jetzt erstmal nicht so wichtig!!!

Meine Frage ist nämlich, wie kann man das umsetzen? Also damit meine ich, wie sollen die Benutzer angelegt werden, und wie verknüpft man diese mit den Daten die man später speichern will?
Z.B.:
Benutzer_A -> Passwort_A -> Daten_A: (z.B. Name, Adresse, Telefonnummer, E-Mail),.......
Benutzer_B -> Passwort_B -> Daten_B: (-----------------siehe oben......................),.......
Benutzer_C -> usw. -> usw.

Ich hoffe, ich konnte es verständlich genug erklären. Würde mich sehr über Ratschläge eurerseits freuen. :)

Mit freundlichen Grüßen
Dave

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Mo Feb 13, 2012 4:26 pm
von Xin
3VAD_YNCAL hat geschrieben:ich lerne zur Zeit C und möchte nun als Übung gerne ein Programm schreiben, das Daten mehrerer Benutzer verwalten soll.
Soll das Programm zeitgleich von mehreren Benutzern benutzbar sein oder viele Benutzer, aber immer einer nach dem anderen?
3VAD_YNCAL hat geschrieben: Beispielsweise wichtige Adressdaten.
Ich bräuchte von euch ein paar Tipps wie man folgendes programmiertechnisch umsetzen könnte:
...
Ich hoffe, ich konnte es verständlich genug erklären. Würde mich sehr über Ratschläge eurerseits freuen. :)
Hey, Dave.

Die Fragen sind so offen gestellt, dass eine konkrete Antwort schwer fällt.

Es gibt viele Möglichkeiten. Du kannst eine Datei nehmen, viele Dateien oder eine Datenbank erstellen.

Wenn Du fragst, wie die Benutzer angelegt werden sollen, dann kann ich Dir das auch nicht sagen, denn das ganze kann eine Konsolenanwendung sein, dann könntest Du Dich mit nCurses behelfen, es könnte eine GUI sein oder Website.
Es bleibt die Frage, wie Du die Daten speichern möchtest, Datei, viele Dateien, Datenbank?

Für die Verknüfung musst Du einen Index führen, also eine Liste, die User und Datum verbindet. Oder Du gibst jedem Datum einen Besitzer und Dein Programm verweigert sich, das Datum anzuzeigen, wenn der Besitzer nicht übereinstimmt.

Spezifischer kann man vielleicht werden, wenn Du ein Anwendungsszenario beschreibst.

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Mo Feb 13, 2012 6:34 pm
von 3VAD_YNCAL
Hallo Xin,

vielen Dank erstmal für die recht schnelle Antwort.
Xin hat geschrieben: Soll das Programm zeitgleich von mehreren Benutzern benutzbar sein oder viele Benutzer, aber immer einer nach dem anderen?
Immer einer nach dem anderen.
Xin hat geschrieben: Es gibt viele Möglichkeiten. Du kannst eine Datei nehmen, viele Dateien oder eine Datenbank erstellen.
Ich dachte mir, für jeden Benutzer eine Datei.
Xin hat geschrieben: Wenn Du fragst, wie die Benutzer angelegt werden sollen, dann kann ich Dir das auch nicht sagen, denn das ganze kann eine Konsolenanwendung sein, dann könntest Du Dich mit nCurses behelfen, es könnte eine GUI sein oder Website.
Es bleibt die Frage, wie Du die Daten speichern möchtest, Datei, viele Dateien, Datenbank?
Es soll eine Konsolenanwendung werden.
Ich dachte mir, die Adressdaten die man speichern, abrufen oder wieder löschen kann, in einer Struktur zusammenzufassen.
Ja - und dann eben die Benutzer mit diesen Strukturen zu verknüpfen. Ob das so geht bzw. richtig ist, weiß ich eben nicht so genau.
Xin hat geschrieben: Für die Verknüfung musst Du einen Index führen, also eine Liste, die User und Datum verbindet.
Meinst du eine verkettete Liste?
Könntest du das für mich noch etwas konkretisieren? Evtl. mit Pseudo-Code ein kleines Praxisbeispiel?

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Mo Feb 13, 2012 6:59 pm
von Xin
3VAD_YNCAL hat geschrieben:
Xin hat geschrieben: Es gibt viele Möglichkeiten. Du kannst eine Datei nehmen, viele Dateien oder eine Datenbank erstellen.
Ich dachte mir, für jeden Benutzer eine Datei.
Xin hat geschrieben: Wenn Du fragst, wie die Benutzer angelegt werden sollen, dann kann ich Dir das auch nicht sagen, denn das ganze kann eine Konsolenanwendung sein, dann könntest Du Dich mit nCurses behelfen, es könnte eine GUI sein oder Website.
Es bleibt die Frage, wie Du die Daten speichern möchtest, Datei, viele Dateien, Datenbank?
Es soll eine Konsolenanwendung werden.
Ich dachte mir, die Adressdaten die man speichern, abrufen oder wieder löschen kann, in einer Struktur zusammenzufassen.
Ja - und dann eben die Benutzer mit diesen Strukturen zu verknüpfen. Ob das so geht bzw. richtig ist, weiß ich eben nicht so genau.
Gehen tut alles... es ist viel eher eine Frage des Aufwandes und des Aufwandes, den man leisten kann.

Du meintest, dass Du gerade in C einsteigst.
Eine indexgesteuerte Datenbank anzulegen, erscheint mir ein kompliziertes und gleichzeitig eher trockenes Übungsprojekt.
Xin hat geschrieben: Für die Verknüfung musst Du einen Index führen, also eine Liste, die User und Datum verbindet.
Meinst du eine verkettete Liste?
Könntest du das für mich noch etwas konkretisieren? Evtl. mit Pseudo-Code ein kleines Praxisbeispiel?[/quote]
Eine verkette Liste kann das Problem lösen.

Darf ich Dich nochmal nach dem Anwendungsszenario fragen?
Soll das ein Übungsprogramm werden oder eine Nutzanwendung?

Ich habe so einen Index in einem Suchalgorithmus, bei der Wörter mit Texten verknüpft werden.
Das wäre ein Praxisbeispiel, aber das ist kein Pseudocode und auch nicht wirklich 'klein'.

Schreib eine Liste:

Code: Alles auswählen

struct Relation
{
  struct Relation * Next;

  unsigned int UserId;
  unsigned int DataId;
};

struct User
{
  struct User * Next;
  unsigned int UserId;

  char Username[64];
  char Passwort[64];
};

struct Address
{
  struct Address * Next;

  unsigned int DataId;

  char Strasse[64];
  unsigned int Hausnummer;

  ...
};
Du hast so drei Listen: User, Daten und Relationen. Wenn User 1 das Datum 10 sehen will, kannst Du in der Liste Relation nach einem Eintrag suchen, der User 1 und Datum 10 enthält. Wenn ja, darf User 1 das Datum sehen, wenn nicht... nicht.

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Di Feb 14, 2012 1:45 am
von 3VAD_YNCAL
Xin hat geschrieben: Du meintest, dass Du gerade in C einsteigst.
Eine indexgesteuerte Datenbank anzulegen, erscheint mir ein kompliziertes und gleichzeitig eher trockenes Übungsprojekt.
Ich beschäftige mich etwa seit einem Jahr mit C. Versuche es mir anhand mehrerer Bücher beizubringen. Allerdings muss ich zugeben,
dass es ganz schön schwer ist C zu lernen.
Xin hat geschrieben: Darf ich Dich nochmal nach dem Anwendungsszenario fragen?
Soll das ein Übungsprogramm werden oder eine Nutzanwendung?
Das soll ein Übungsprogramm sein.
Xin hat geschrieben: Ich habe so einen Index in einem Suchalgorithmus, bei der Wörter mit Texten verknüpft werden.
Das wäre ein Praxisbeispiel, aber das ist kein Pseudocode und auch nicht wirklich 'klein'.

Schreib eine Liste:

Code: Alles auswählen

struct Relation
{
  struct Relation * Next;

  unsigned int UserId;
  unsigned int DataId;
};

struct User
{
  struct User * Next;
  unsigned int UserId;

  char Username[64];
  char Passwort[64];
};

struct Address
{
  struct Address * Next;

  unsigned int DataId;

  char Strasse[64];
  unsigned int Hausnummer;

  ...
};
Du hast so drei Listen: User, Daten und Relationen. Wenn User 1 das Datum 10 sehen will, kannst Du in der Liste Relation nach einem Eintrag suchen, der User 1 und Datum 10 enthält. Wenn ja, darf User 1 das Datum sehen, wenn nicht... nicht.
D.h. in der Liste Relation werden die User 1 bis n anhand

Code: Alles auswählen

unsigned int UserId;
und die Daten der jeweiligen User mittels

Code: Alles auswählen

unsigned int DataId;
zugeordnet?
Wie genau meinst du das mit dem Datum? Das habe ich noch nicht so ganz verstanden. :?

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Di Feb 14, 2012 1:45 pm
von Xin
3VAD_YNCAL hat geschrieben:Ich beschäftige mich etwa seit einem Jahr mit C. Versuche es mir anhand mehrerer Bücher beizubringen. Allerdings muss ich zugeben,
dass es ganz schön schwer ist C zu lernen.
Kann es sein, dass Du es Dir nur schwer machst?

Schreib mal eine Uservorstellung und darin auch, was Du in C kannst, was Du lernen willst, welche Erfahrungen Du mit Computern hast. Außerdem stecke mal den Wissenshorizont ab: Beruf, Alter, Schule...
3VAD_YNCAL hat geschrieben:
Xin hat geschrieben: Du hast so drei Listen: User, Daten und Relationen. Wenn User 1 das Datum 10 sehen will, kannst Du in der Liste Relation nach einem Eintrag suchen, der User 1 und Datum 10 enthält. Wenn ja, darf User 1 das Datum sehen, wenn nicht... nicht.
D.h. in der Liste Relation werden die User 1 bis n anhand

Code: Alles auswählen

unsigned int UserId;
und die Daten der jeweiligen User mittels

Code: Alles auswählen

unsigned int DataId;
zugeordnet?
Richtig.
3VAD_YNCAL hat geschrieben:Wie genau meinst du das mit dem Datum? Das habe ich noch nicht so ganz verstanden. :?
Wenn Du die Geburtstage von Deinen Verwandten aufzählst, dann hast Du Geburtsdaten. Ein Datum, viele Daten.
Wenn Deine Daten aus Adressen bestehen, dann ist eine Adresse ein Datum.

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Mi Feb 15, 2012 12:30 pm
von 3VAD_YNCAL
Xin hat geschrieben: Kann es sein, dass Du es Dir nur schwer machst?
Schon möglich. Habe leider durch meinen Job immer nur begrenzt Zeit, mich intensiv mit der Thematik zu befassen.
Alle Themenbereiche die ich bisher durchgenommen habe, habe ich auch verstanden. Mir fehlt es einfach an Praxis und Erfahrung. Habe bisher immer nur kleinere Programm geschrieben um das gelernte nochmal zu verinnerlichen.
Jetzt habe ich mir eben mal vorgenommen, was anspruchvolleres zu programmieren.
Xin hat geschrieben: Schreib mal eine Uservorstellung und darin auch, was Du in C kannst, was Du lernen willst, welche Erfahrungen Du mit Computern hast. Außerdem stecke mal den Wissenshorizont ab: Beruf, Alter, Schule...
Habe mein Profil etwas bearbeitet. Beruf, Interessen, Alter usw.

Was ich in C eigentlich kann (besser gesagt schon durchgenommen habe):
-Datentypen, Konstanten und Variablen
-Verwendung von Funktionen
-Formatierte Ein- und Ausgabe
-Operatoren
-Kontrollstrukturen
-Symbolische Konstanten und Makros
-Datentyp-Umwandlungen
-Vektoren und Strings
-Funktionen
-Speicherklassen
-Zeiger
-Dynamische Speicherverwaltung
-Strukturierte Datentypen
-High- und Low-Level-Dateizugriff

Ich lerne zur Zeit C, weil ich recht gerne mit Linux (Ubuntu) arbeite und später gerne Anwendungen für Linux schreiben möchte.

Was ich noch in C und allgemein gerne lernen möchte:
- Arbeiten mit verketteten Listen, Binäre Bäume
-GUI-Programmierung (GTK+)
-Netzwerkporgrammierung
-Linux-Programmierung allgemein
-später auch noch gerne ein oder zwei weitere Sprachen (C++/Python)
Xin hat geschrieben:Wenn Du die Geburtstage von Deinen Verwandten aufzählst, dann hast Du Geburtsdaten. Ein Datum, viele Daten.
Wenn Deine Daten aus Adressen bestehen, dann ist eine Adresse ein Datum.
Ach so. Oh Gott bin ich doof. Okay, danke. :oops:

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Mi Feb 15, 2012 1:09 pm
von Xin
3VAD_YNCAL hat geschrieben:
Xin hat geschrieben: Kann es sein, dass Du es Dir nur schwer machst?
Schon möglich. Habe leider durch meinen Job immer nur begrenzt Zeit, mich intensiv mit der Thematik zu befassen.
Alle Themenbereiche die ich bisher durchgenommen habe, habe ich auch verstanden. Mir fehlt es einfach an Praxis und Erfahrung. Habe bisher immer nur kleinere Programm geschrieben um das gelernte nochmal zu verinnerlichen.
Jetzt habe ich mir eben mal vorgenommen, was anspruchvolleres zu programmieren.
Darf ich Dich auffordern das C-Tutorial mal von Anfang bis Ende durchzulesen, damit wir eine gemeinsame Basis haben?
Soviel Text ist das nicht, das müsste also in drei Stunden locker zu machen sein, wenn Du schon einiges gesehen hast.
3VAD_YNCAL hat geschrieben:
Xin hat geschrieben: Schreib mal eine Uservorstellung und darin auch, was Du in C kannst, was Du lernen willst, welche Erfahrungen Du mit Computern hast. Außerdem stecke mal den Wissenshorizont ab: Beruf, Alter, Schule...
Habe mein Profil etwas bearbeitet. Beruf, Interessen, Alter usw.
Alter, Schule und Umfeld ist immer ganz interessant, um passende Antworten zu formulieren. An einen 16jährigen kann/muss ich anders antworten als an einen 33jährigen.

Manchmal... Dinge wie Vektorrechnung hat der 16jährige nie gehört, der 33jährige höchstwahrscheinlich vergessen ;-D
3VAD_YNCAL hat geschrieben:Was ich in C eigentlich kann (besser gesagt schon durchgenommen habe):
-Vektoren und Strings
-Speicherklassen
-High- und Low-Level-Dateizugriff
Kannst Du Vektoren, Speicherklassen und High- und Low-Level-Dateizugriff kurz (1-2 Stichworte) beschreiben?
3VAD_YNCAL hat geschrieben:Ich lerne zur Zeit C, weil ich recht gerne mit Linux (Ubuntu) arbeite und später gerne Anwendungen für Linux schreiben möchte.
Cancel dieses Übungsprogramm (zumindest vorerst) und schau Dir das C-Tutorial an.
Danach sehen wir weiter.
3VAD_YNCAL hat geschrieben:
Xin hat geschrieben:Wenn Du die Geburtstage von Deinen Verwandten aufzählst, dann hast Du Geburtsdaten. Ein Datum, viele Daten.
Wenn Deine Daten aus Adressen bestehen, dann ist eine Adresse ein Datum.
Ach so. Oh Gott bin ich doof. Okay, danke. :oops:
So doof ist das nicht, ich glaube, die Mehrzahl der Menschen kennt den Zusammenhang zwischen Datum und Daten nicht. Das fällt vor allem dann auf, wenn z.B. Zwillinge über Mitternacht geboren werden und Zwillinge mit unterschiedlichen Geburts"datums" sind.

Fakt(um) ist, würde man dem Sprachgebrauch folgen, so hätte man auch kein Geburtsdatum, sondern ein Geburtsdat. Das Skriptum, von dem es mehre Skripten gibt, ist heute ja auch eher englisch angehaucht ein Skript, das mehrere Skripts enthält.

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Mi Feb 15, 2012 3:08 pm
von 3VAD_YNCAL
Xin hat geschrieben: Darf ich Dich auffordern das C-Tutorial mal von Anfang bis Ende durchzulesen, damit wir eine gemeinsame Basis haben?
Soviel Text ist das nicht, das müsste also in drei Stunden locker zu machen sein, wenn Du schon einiges gesehen hast.
Natürlich darfst du das. Werde ich auch auf jeden Fall tun. Wenn du mir bis Sonntag Zeit gibst. :) Ich habe ab heute Nachtschicht.
Xin hat geschrieben:Kannst Du Vektoren, Speicherklassen und High- und Low-Level-Dateizugriff kurz (1-2 Stichworte) beschreiben?
Ich hoffe es ist nicht zu fett:
Vektoren:
---------
Ein Array oder auch Vektor, ist ein Feld mit mehreren Elementen vom gleichen Typ. int array[10] ist beispielsweise ein eindimensionales Feld mit 10 Elementen vom Typ int (Integer).

Code: Alles auswählen

array[0] = 1. Element
array[1] = 2. Element
.
.
.
array[9] = 10. Element (letztes Element)
Speicherklassen:
----------------
Speicherklassen bestimmen, in welchen Teilen eines Programms eine Variable oder eine Funktion verwendet werden kann.
Z.B. lokal, modulglobal oder Programmglobal
Es gibt vier Speicherklassen (extern, static, auto & register)

High-Level-Dateizugriff:
------------------------
Dateizugriff mittels standardisierten Bibliotheksfunktionen, die
eine einfache und portable Schnittstelle für den Umgang mit Dateien
bieten.
Man greift mit Hilfe eines Zeigers (File-Pointer) auf eine Datei zu.
Beim Öffnen einer Datei, wird eine Struktur vom Typ FILE angelegt,
die Informationen über die Datei speichert. Typ FILE ist in stdio.h
definiert.

Beispiel:
---------

Code: Alles auswählen

FILE *datei;

datei = fopen("test.dat", "r"); // r = Lesemodus
Low-Level-Datizugriff:
----------------------
Dateizugriff mittels Funktionen die nicht standardisiert und somit
abhängig vom Betriebssystem sind.
Anders als beim High-Level-Dateizugriff, greift man mit einem
File-Deskriptor auf eine Datei zu.
Ein File-Deskriptor ist ein int-Wert, der beim Öffnen einer Datei zurück
gegeben wird.

Beispiel:
---------

Code: Alles auswählen

int fd;		// File-Deskriptor (auch File-Handle genannt)

fd = open("test.dat", O_RDONLY); // O_RDONLY = Lesemodus
Sobald ich mit dem C-Tutorial durch bin, melde ich mich. Ist das für dich in Ordnung?

Re: Ein Programm, welches Daten mehrerer Benutzer verwalten

Verfasst: Mi Feb 15, 2012 3:22 pm
von Xin
3VAD_YNCAL hat geschrieben:
Xin hat geschrieben: Darf ich Dich auffordern das C-Tutorial mal von Anfang bis Ende durchzulesen, damit wir eine gemeinsame Basis haben?
Soviel Text ist das nicht, das müsste also in drei Stunden locker zu machen sein, wenn Du schon einiges gesehen hast.
Natürlich darfst du das. Werde ich auch auf jeden Fall tun. Wenn du mir bis Sonntag Zeit gibst. :) Ich habe ab heute Nachtschicht.
Ich bin hier nicht als Lehrer eingestellt und es gibt auch keine Hausaufgaben. Das ganze darf auch Spaß machen. ;-)
3VAD_YNCAL hat geschrieben:
Xin hat geschrieben:Kannst Du Vektoren, Speicherklassen und High- und Low-Level-Dateizugriff kurz (1-2 Stichworte) beschreiben?
Vektoren: Ein Array oder auch Vektor, ist ein Feld mit mehreren Elementen vom gleichen Typ.
Speicherklassen: Es gibt vier Speicherklassen (extern, static, auto & register)
Alles klar. Ich wollte nur sicherstellen, dass Vektor nicht std::vector und Speicherklassen nicht public, protected, private meint. Auch FILE* wird nur noch selten als 'High-Level' bezeichnet. Sonst müsste ich davon ausgehen, dass Du C und C++ durcheinander wirfst und entsprechend anders erklären.
3VAD_YNCAL hat geschrieben:Sobald ich mit dem C-Tutorial durch bin, melde ich mich. Ist das für dich in Ordnung?
Ich lauf nicht weg, ich bin hier angebunden. ;-)