Aufgabe zum Lösen
-
Wer könnte diese Aufgabe lösen und welche Preis um dieses Programm zu schreiben übereinstimmt.
Vielen DankAufgabenstellung
Schreiben Sie ein Programm, mit dem Sie auf der Konsole eine einfache Datenbank verwalten können. Die Daten werden in eine Binärdatei gespeichert (und daraus gelesen).
Das Programm erwartet einen Kommandozeilenparameter. Dieser beginnt mit
"-o="
und gibt den Namen der Datenbankdatei an.Das Programm gibt danach in einer Endlosschleife den Standardprompt
"esp> "
aus und wartet auf die Eingabe eines der definierten Befehle. Die Eingabe der Befehle erfolgt case sensitive. Nach Eingabe eines Befehls erfragt das Programm gegebenenfalls die Parameter durch ein eigenes Parameterprompt (jeweils eine Zeile pro Parameter, siehe Beschreibung der Befehle).Datensätze
Jeder Datensatz besteht aus zwei Teilen, dem Header und dem Content. Der Header hat hierbei eine fixe Größe. Variable Teile (Texte) werden in den Content gespeichert.
Header
Identifikator
positive Ganzzahl
Bewertung
positive oder negative Ganzzahl, Wertebereich -5 bis +5
Content-Länge
positive Ganzzahl, Länge des Content-Teiles in Bytes
Hinweis: Vergessen Sie nicht, wie Strings in C gespeichert werden
Content
Name
C-String
Autor
C-String
Kommentar
C-String
Speicherung
Die Daten müssen im Programm in einer doppelt verketteten Liste gespeichert sein.Die Datenbankdatei ist eine Binärdatei, welche mit den vier Characters "EPDB" beginnt. Danach folgt in einer Integer-Variable die Anzahl der Datensätze. Es folgen die Header aller Datensätze. Nach dem letzten Header folgen die Contents aller Datensätze in der gleichen Reihenfolge.
Zusätzlich besteht die Möglichkeit, die Daten mittels eines Befehls in eine Text-Datei im HTML-Format zu speichern. In diesem Fall wird für jeden Datensatz folgendes Template benutzt:
<div class="data">
<p class="title"><strong>Title: </strong>[Titel]</p><p class="desc"><strong>ID: </strong>[ID]</p>
<p class="desc"><strong>Author: </strong>[Autor]</p>
<p class="own"><strong>Rating: </strong>[Bewertung]</p><p class="own"><strong>Comment: </strong>[Kommentar]</p>
</div>Befehle
Jeder Befehl besteht aus einem Wort. Nach den meisten Befehlen wird eine Reihe von Parameterprompts ausgegeben. Bei Ausgabe eines Parameterprompts wird kein Standardprompt ausgegeben. Den Parameterprompts werden zwei Leerzeichen vorangestellt (siehe Beispieloutput).
Erfolgt bei einem Parameter keine Eingabe (der Benutzer drückt also nur die Entertaste) gelten folgende Szenarien:
• Im Normalfall wird der Parameterprompt ohne Fehlermeldung erneut ausgegeben
• Bei delete und der Datensatzauswahl bei edit wird zum Standardprompt zurückgesprungen
• Beim den Parametereingaben zu edit wird der aktuelle Inhalt beibehalten und der nächste Parameterprompt ausgegeben.
Erfolgt bei einem Befehl keine Eingabe (der Benutzer drückt also nur die Entertaste) gilt folgendes Szenario:
• Der Standardprompt wird ohne Fehlermeldung erneut ausgegeben
newErzeugt einen neuen Datensatz. Hierbei werden folgende Parameter erfragt:
"id? "
Identifikator (positive Ganzzahl)
"title? "
Titel (String)
"author? "
Autor (String)
"rating? "
Bewertung (Ganzzahl zwischen -5 und +5)
"comment? "
Kommentar (String)
Neue Datensätze werden immer nach aufsteigend ID sortiert in die Liste eingefügt.
view
Gibt die Details zu einem Datensatz aus. Dieser wird zeurst erfragt
"id? "
Identifikator (positive Ganzzahl)
Danach erfolg die Ausgabe:
\n
ID: [id]\n
Title: [titel]\n
Author: [autor]\n
Rating: [bewertung]\n
Comment: [kommentar]\n
Begriffe in [] sind durch die entsprechenden Werte zu ersetzen.
edit
Bearbeitet einen Datensatz. Dieser wird zeurst erfragt
"id? "
Identifikator (positive Ganzzahl)
Zuerst wird die Ausgabe von "view" aufgerufen, gefolgt von der Ausgabe: "New parameters:\n". Danach folgende Parameter erfragt:
"id? "
Identifikator (positive Ganzzahl)
"title? "
Titel (String)
"author? "
Autor (String)
"rating? "
Bewertung (Ganzzahl zwischen -5 und +5)
"comment? "
Kommentar (String)
Macht der Benutzer bei einem Parameter keine Eingabe, so bleibt der aktuelle Wert erhalten.
Wird die ID des Datensatzes verändert, so muss er an die entsprechende Position der Liste verschoben werden.
delete
Löscht einen Datensatz unwiderruflich.
"id? "
Identifikator (positive Ganzzahl)
list
Gibt die Liste (beginnend in einer neuen Zeile) aus. Jede Zeile ist wie folge aufgebaut:
[id] - [titel]\n
Die Stellen der ID ist mit Leerzeichen auf die jeweils größte vorhandene Zahl zu normieren (also z.B. dreistellig (" 1", " 22", "100"), falls die größte ID 561 ist).
Begriffe in [] sind durch die entsprechenden Werte zu ersetzen.export
"file? "
Dateiname für die zu erstellende HTML-Datei.
Speichert die eingegebenen Daten in eine HTML-Datei.
quit
Beendet das Programm.
Fehlermeldungen und Errorcodes
Es müssen zumindest folgende Fehlermeldungen und zugehörige Programmrückgabewerte implementiert werden:
Fehlermeldungen, nach denen das Programm abgebrochen wird
• Returncode -1
o "usage: exA -o=dbfile\n"
o falls nicht genau 1 Kommandozeilenparameter angegeben wurde oder der Parameter nicht mit "-o=" beginnt
• Returncode -2
o "error: out of memory\n"
o falls kein dynamischer Speicher mehr zur Verfügung steht
• Returncode -3
o "error: cannot read dbfile [filename]\n"
o falls die angegebene Datei nicht geöffnet werden kann (tritt beim Starten des Programms auf)
• Returncode -4
o "error: dbfile [filename] corrupt\n"
o falls die angegebene Datei fehlerhaft ist
Magic Number falsch / fehlt
zu kurz
zu lang
...
• Returncode -5
o "error: cannot write dbfile [filename]\n"
o falls die angegebene Datei nicht beschrieben werden kann (tritt beim Beenden des Programms auf)
Fehlermeldungen, nach denen das Programm weiter läuft
Sollten für eine Situation mehrere Fehlermeldungen zutreffend sein, so sind alle zutreffenden Meldungen in der Reihenfolge, wie sie in diesem Dokument vorkommen, auszugeben.
• "warning: file [filename] exists and will be replaced. Do you want to proceed? (y/n)"
o falls die angegebene HTML-Datei bereits existiert
o Ausgabe erfolgt sofort *nach* Eingabe des file-Parameters beim Export.
o es wird nur der Dateiname (ohne absolutem Pfad) ausgegeben
o Das Programm wartet auf eine Benutzereingabe. Gibt der Benutzer "y\n" ein, wird die Datei überschrieben. Gibt der Benutzer "n\n" ein kehrt das Programm ohne zu Exportieren zum Standard-Prompt zurück. Bei anderen Eingaben wird die Fehlermeldung erneut angezeigt.
o Diese Fehlermeldung wird beim Speichern ausgegeben.
• "error: unknown command\n"
o falls ein anderes als eines der vorgegebenen Kommandos eingegeben wurde
o Der Prompt wird erneut ausgegeben.
• "error: invalid parameter - please enter an integer number\n"
o falls für die Bewertung oder die ID keine Ganzzahl eingegeben wird
o Der Parameterprompt wird erneut ausgegeben.
• "error: id already in use\n"
o falls beim Editieren oder Anlegen ein Identifikator angegeben wird, der bereits vergeben wurde
o Der Parameterprompt wird erneut ausgegeben.
• "error: id does not exist\n"
o falls beim Editieren oder Löschen ein Identifikator angegeben wird, der noch nicht vergeben wurde
o Der Parameterprompt wird erneut ausgegeben.
• "cannot write to file [filename]\n"
o falls die beim Export-Befehl angegebene Datei nicht erstellt oder nicht zum Schreiben geöffnet werden kann
o Der Parameterprompt wird erneut ausgegeben.Spezifikation
• Ablauf
o Einlesen der Datenbankdatei
o Endlosschleife zum Einlesen der Kommandos
Schreiben der Daten in dafür vorgesehene Structs
o Schreiben der Datenbankdatei
o Beenden des Programms
• Umsetzung
o Alle Datensätze gemeinsamen doppelt verketteten Liste gespeichert werden.
o Alle Formen sind in der Reihenfolge der Liste sowohl in der Datenbankdatei als auch der HTML-Datei zu speichern
• Genau ein Leerzeichen zwischen Prompts und Eingabe
• HTML-Datei
o Header (Anfang der Datei) -
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>Buchdatenbank</title>
</head>
<body>
•
o Footer (Ende der Datei)
</body></html>
•
o Die HTML-Datei muss valide sein
Validator http://validator.w3.org
• Erlaubte Bibliotheken
o stdio.h
o stdlib.h
o string.h
o ctype.h
o math.h
o time.h
• Abgabe
o Dateinamen laut Abgabenliste
o Archiv beinhaltet keine Verzeichnisse oder andere Dateien
Arbeitsaufteilung
Dies ist eine beispielhafte Aufteilung auf die Gruppenmitglieder. Sollten Sie eine andere Aufteilung wählen, müssen Sie diese beim Abgabegespräch begründen. Beachten Sie in diesem Fall, dass alle Gruppenmitglieder gleichermaßen an dem Beispiel mitarbeiten müssen und einen annähernd gleichen Aufwand haben sollen.
1. Befehlseingabe, Einlesen der Datenbank, Datenstrukturen
2. Hauptprogramm, Erstellen der HTML-Datei, Fehlerbehandlung, Testen
-
-
Ich glaube nicht, dass er das für 2.99€ macht.
-
mazal schrieb:
Ich glaube nicht, dass er das für 2.99€ macht.
Ich hätte es für 6.00€ gemacht, jedoch will er das ganze in C programmiert haben, ich mache jedoch bloss C++ ^^
-
Die Aufgabe ist ja die halbe Lösung :D. Da stehen scho die includes, die Returncodes und dabei hab ich net mal alles genau gelesen.
Ich würd es programmieren ... sogar kostenlos nur aus Spaß am programmieren.
Allerdings in C++ und den Code würd ich net rausrücken.
-
BasicMan01 schrieb:
Die Aufgabe ist ja die halbe Lösung :D. Da stehen scho die includes, die Returncodes und dabei hab ich net mal alles genau gelesen.
Ich würd es programmieren ... sogar kostenlos nur aus Spaß am programmieren.
Allerdings in C++ und den Code würd ich net rausrücken.Bring ihm sehr viel