Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 18.04.2006, 12:38 Titel: Anwesenheitliste mit Namen&Automatisch Dateienzahl berec |
|
|
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 |
|
|
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 18.04.2006, 13:05 Titel: MIST! |
|
|
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? langsam verzweifle ich an diesem Programm. |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 14:14 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.04.2006, 14:16 Titel: |
|
|
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
edit: mist, misterD war schneleer _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 14:28 Titel: |
|
|
jo jojo, so is das halt _________________ "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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.04.2006, 14:37 Titel: |
|
|
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 |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 18.04.2006, 16:49 Titel: |
|
|
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 |
|
|
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 18.04.2006, 17:53 Titel: |
|
|
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 |
|
|
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 18.04.2006, 18:09 Titel: |
|
|
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 |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 18.04.2006, 18:18 Titel: |
|
|
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 |
|
|
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 18.04.2006, 19:45 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.04.2006, 21:23 Titel: |
|
|
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 _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 18.04.2006, 21:38 Titel: |
|
|
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... |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.04.2006, 21:45 Titel: |
|
|
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 |
|
|
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 18.04.2006, 22:20 Titel: |
|
|
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 |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2006, 22:30 Titel: |
|
|
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 |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 19.04.2006, 16:14 Titel: |
|
|
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 .
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 |
|
|
Wasja
Anmeldungsdatum: 18.04.2006 Beiträge: 19
|
Verfasst am: 19.04.2006, 21:14 Titel: |
|
|
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?
Den Tipp mit dem shared habe ich gerade ausprobiert, es geht leider nicht |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.04.2006, 22:29 Titel: |
|
|
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 _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 20.04.2006, 16:50 Titel: |
|
|
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 |
|
|
|