Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Anwesenheitliste mit Namen&Automatisch Dateienzahl berec
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 18.04.2006, 12:38    Titel: Anwesenheitliste mit Namen&Automatisch Dateienzahl berec Antworten mit Zitat

Hallo,
ich habe aus Spaß eine QBasic Datei für die Anmeldung in einer Arztpraxis programmiert. Ich kann über Eingabe neue Patienten als Datei "patienten"+nr$+".txt" abspeichern. oder über alte Nummern alte Karteien aufrufen. Das habe ich mit OPEN gemacht.
Jetzt möchte ich es hinbekommen, dass ich nciht erst eine Nummer für eine neue Kartei eingeben muss, sondern dass mir automatisch die anzahl der Patientenkarteien ausgerechnet wird und die nächste Zahl als neue Karteinummer eingefügt wird. Wie mache ich das?
Ausserdem möchte ich über eine Eingabe 'INPUT " Anmelden? ", anm$' in einer SUB anwesenheit ausgeben, wer angemeldet ist (mit Namen ausgelesen aus der Patient'x'.txt). Wenn der "Patient" dann aus der Behandlung kommt, muss ich ihn aus der Anwesenheitsliste entfernen können per Eingabe seiner Nummer. Wie mache ich das.

Puh, langer Text, ich hoffe, dass mir jemand gute Tipps geben kann und ich schnell mein Programm verbessern kann.

MfG, Wasja


P.S.: Ich habe die MonsterFAQ von antonis.de gelesen und konnte keine passenden Fragen finden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 18.04.2006, 13:05    Titel: MIST! Antworten mit Zitat

Mist, ich habe ein neues Problem. Beim rumwerkeln habe ich feststellen müssen, dass ich nicht mehr als 9 Leute speichern kann. meine SUB sieht folgendermaßen aus:

SUB patient (x$,...alleanderenArgumente$)
CLS
dat$="D:\patient"+x$+".txt"
OPEN dat$ FOR OUTPUT AS #1
PRINT " ..." ' Alle Angaben über den Patient ausgeben
...
INPUT " Speichern? ", antw2$
if antw2$="j" THEN WRITE #1, ...alleanderenArgumente$
CLOSE #1
END SUB

wieso kann ich nicht x$=10 oder mehr machen, sondern nur x$=1-9? weinen langsam verzweifle ich an diesem Programm.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2006, 14:14    Titel: Antworten mit Zitat

weil DOS nur Dateinamen bis zu 8+3 zeichen unterstützt
Patient10.txt wären 9+3, passt nicht mehr.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9732
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.04.2006, 14:16    Titel: Antworten mit Zitat

QB arbeitet noch mit dem alten 8.3 Dateisystem. das heißt: 8 Zeichen dateiname, 3 zeichn erweiterung, aslo 12345678.123. Patient sind 7 buchstaben, und dann kommt noch 1 zahl. du kannst bis zu 9999 patienten speichern, wenn du die adteien als patiZAHL.txt speicherst zwinkern

edit: mist, misterD war schneleer grinsen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2006, 14:28    Titel: Antworten mit Zitat

jo jojo, so is das halt Zunge rausstrecken
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9732
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.04.2006, 14:37    Titel: Antworten mit Zitat

also, die anzahl der patienten zu ermitteln ist gar nicht so schwer, du müsstest nur die anzahl der TXT-dateien im verzeichnis ermitteln (z.B. mit Shell "DIR pat*.txt 7 /on"), oder du verwendest eine komplizierete routine, die mit DOS-Interrupts arbeiett (ich hätte da eine...).
einfacher wäre es, alle patienten in eine datei zu schreiben.-

einzulesen wäre das dann so:

Anzahl=0
While Not EOF(1)
Line Input #1, Name$
Line Input #1, WasWeißIch
Anzahl=Anzahl+1
Wend
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 18.04.2006, 16:49    Titel: Antworten mit Zitat

Eine andere Idee:
Du machst ein Datei mit Namen "zahl.txt" und darin schreibt du die momentane Zahl der Patienten ein.
Beim starten des Programmes liest du sein und beim beenden schreibst du die neue Zahl ein.

Alternativ kann man den Ansatz von Jojo nehmen und auch geich erweitern:
Code:
DECLARE SUB save ()
DECLARE SUB load ()
DIM SHARED NName$(20)
DIM SHARED Termin$(20)
DIM SHARED Anzahl

save
load

SUB load
        OPEN "kartei.txt" FOR INPUT AS #1
        INPUT #1, Anzahl

        FOR i = 0 TO 20
                INPUT #1, NName$(i)
                INPUT #1, Termin$(i)
        NEXT i
        CLOSE
END SUB

SUB save
        OPEN "kartei.txt" FOR OUTPUT AS #1
        PRINT #1, Anzahl

        FOR i = 0 TO 20
                PRINT #1, NName$(i)
                PRINT #1, Termin$(i)
        NEXT i
        CLOSE
END SUB

Das hätte sogar denn Vorteil, das man nachher die Datensätze mit wenig Aufwand durchsuchen kann.
z.B. Welcher Patient nimmt das Medikament XY, das bald von Markt genommen wird?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 18.04.2006, 17:53    Titel: Antworten mit Zitat

Erstmal vielen Dank für die vielen schnellen Antworten. Ich werd mal sehen, welche Art mit am besten gefällt. Da wäre nur leider immer noch das Problem mit der Anwesenheitsliste... Hat da vielleicht noch jemand eine Idee?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 18.04.2006, 18:09    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
einzulesen wäre das dann so:

Anzahl=0
While Not EOF(1)
Line Input #1, Name$
Line Input #1, WasWeißIch
Anzahl=Anzahl+1
Wend


klitzekleine Frage: wo genau müsste ich das denn einfügen? weil dann ist ja Anzahl im prinzip immer 1, oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 18.04.2006, 18:18    Titel: Antworten mit Zitat

Zur Anwessenheistliste:
Code:
Dim nr(1 to 10)
Dim nname$(1 to 10)
Dim akt

do
    cls
    For i=1 to akt
        ? "Nummer",Nr(i), "Name", nname$(i)
    next i
    ? "1 Eingetretten"
    ? "2 Ausgetretten"
    Input a
    if a =1 then
        akt=akt+1
        Input nr(akt)
        Input nname$(akt)
    else
        Input aus
        for i=1 to akt
            If aus=nr(i) then qwe=i
        next i
        akt=akt-1
        for i=qwe to akt
            Nr(i)=Nr(i+1)
            nname$(i)=nname$(i+1)
        next i
    End if
loop

Nicht gerade gut Programmiert, aber das Prinzip sollte anwendbar sein.

Zur Neuen Frage:
Der Code von Jojo würde deine Einlese Routinie ersetzen.
Aber um seinen Code zu verwenden, must du aber auch das speichern modifizieren, so das alles in einer Datei ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 18.04.2006, 19:45    Titel: Antworten mit Zitat

erstmal danke für die anregung für die anwesenheitsliste. die kommt in eine neue SUB routine?
EDIT: ich habe eingestellt, dass die dateien gezählt werden, anders hat es leider nicht geklappt. die anwesenheitsliste schreibe ich jetzt. nur eine frage dazu: die do...loop schleife ist ja endlos, kann dann der rest meines programms noch laufen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9732
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.04.2006, 21:23    Titel: Antworten mit Zitat

Nein, "Anzahl" ist nicht immer 1, weil es so oft erhöht wird, bis das ende der datei (EOF) erreicht wurde.

überigrns empfehle ich, LINE INPUT #1 statt INPUT #1 zu verwenden, da Input aufhört, die ziele zu lesen, sobald ein Komma auftritt.

steht in der datei z.B
Hallo, Ich bin Jojo.

würde input nur "HAllo" zurrückliefern zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 18.04.2006, 21:38    Titel: Antworten mit Zitat

hallo nochmal,

die anwesenheitsliste klappt perfekt, aber ich habe das mit den dateien auszählen nicht hinbekommen. der befehl klappt nicht.
und jetzt kommt eine neue fehlermeldung:

"Unzulässiger Dateiname, ERR-Code: 64"

in meiner sub patient, in der alle angaben noch einmal angezeigt werden und dann gespeichert werden...

SUB patient (x$,...)
cls
daten$ = "D:/anmeld2/pati"+x$+".txt"
open daten$ for output as #1
...
end sub


=> wieso funktioniert dieser dateiname nicht, er ist kürzer als der, den ich früher hatte, und ist genauso aufegbaut... weinen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9732
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.04.2006, 21:45    Titel: Antworten mit Zitat

Error code 64 hat was mit verzeichnissen zu tun... vielleicht lietzs an dem "/"..verwend mal "\"
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 18.04.2006, 22:20    Titel: Antworten mit Zitat

ok auch dieser fehler erscheint nicht mehr... jetzt nochmal was zur anwesenheitsliste:
wenn ich aus der liste rausgehe, werden ja alle leute gelöscht. kann ich das evtl. verhindern und die sachen speicher, ohne dass es zu fehlern kommt? ich muss halt auch die leute dann wieder löschen können...

danke, Wasja
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2006, 22:30    Titel: Antworten mit Zitat

siehe onlinehilfe OPEN, PRINT und CLOSE, schau auch mal in die QB-MonsterFAQ von qbasic.de, da steht garantiert ne menge zum speichern.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 19.04.2006, 16:14    Titel: Antworten mit Zitat

Zitat:
wenn ich aus der liste rausgehe, werden ja alle leute gelöscht. kann ich das evtl. verhindern und die sachen speicher, ohne dass es zu fehlern kommt? ich muss halt auch die leute dann wieder löschen können...

Da gibt es verschiedene möglichkeiten.
Wenn du die Anwessenheitsliste in eine Sub gepackst hast, deklarierer die Variabeln einfach Global:
Code:
Dim shared nr(1 to 10)
Dim shared nname$(1 to 10)
Dim shared akt

Dann gehen die Daten nicht mehr bei jedem Aufruf/Beenden der Sub verloren.

Dann kannst du mit akt sogar Prüfen, ob jemannd schliessen will, obwohl noch ein Patient wartet lachen.

Eine andere Idee auch betrefflich Einbau:
Du kannst die Warteliste auch ins Hauptmenü intregieren.
Dann kann der Benutzer auch schneller arbeiten, weil er nicht mehr ein Menü schliesen muss um einanderes zu öffnen.
Ich stell mir dein Menü im moment so vor: Zahlen oder Buchstaben zur Auswahl der Option/des Menüpunktes, genau als eine solche Option könntest du die Warteliste einbauen.
Die eigentliche Liste wird dann unterhalb des Menüsangezeigt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Wasja



Anmeldungsdatum: 18.04.2006
Beiträge: 19

BeitragVerfasst am: 19.04.2006, 21:14    Titel: Antworten mit Zitat

ich habe als hauptmenü derzeit 3 möglichkeiten:
-warteliste anzeigen
-patienten einfügen/öffnen
-abmelden (das prog isz passwortgeschützt)
bei "patienten einfügen/öfnnen kommt ein zweites menü, in dem man eingibt, ob der patioent schon mal da war. wenn nein, wird alles eingegeben und per sub in eine datei abgespeichert. ist der patient bekannt, wird seine nummer eingegeben und seine angaben werden angezeigt. dann aknn man ihn anmelden. anmelden geht aber auch direkt, da ich die nname$ ausgebaut habe (beim löschen wurde einfach der neueste name gelöscht und die eingegebene nummer.
ist das soeit klar? zwinkern

Den Tipp mit dem shared habe ich gerade ausprobiert, es geht leider nicht traurig
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9732
Wohnort: Neben der Festplatte

BeitragVerfasst am: 19.04.2006, 22:29    Titel: Antworten mit Zitat

was genau geht denn nicht? Falscher syntax?

achja, ganz ehrlich: Das an/abmelden bringt dir nichts, wenn man die patienten-daten einfach so lesen kann... find ich zumindest. wenn jemand einen patienten "hacken" will, so muss er nur die datei öffnen und manipulieren zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 20.04.2006, 16:50    Titel: Antworten mit Zitat

Uch verstehe offengesagt nicht was du mit
Zitat:
wenn ich aus der liste rausgehe, werden ja alle leute gelöscht. kann ich das evtl. verhindern und die sachen speicher, ohne dass es zu fehlern kommt? ich muss halt auch die leute dann wieder löschen können...

Möchtest du es in einer Datei speichern?
Oder willst du die Daten für einen zweiten Aufruf der Liste noch bereit haben?

Jetzt sind wir an einem Punkt, wo der komplette Quellcode helfen würde.
So abstrakt darüber diskutieren wird im komplexer.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz