Schönen guten Morgen, ich muss eine Facharbeit in QBasic (ich weiß nicht warum wir in der Techniker Schule noch Basic lernen) schreiben. Dazu hab ich mir überlegt eine Konsolen Anwendung zu Programmieren, wo man seine Email-Adresse eingeben kann und dann sobald eine Email rein kommt ein Signal Ton ausgegeben wird oder ein USB Port ein Signal bekommt um das weiter zu verarbeiten (bsp. LED Blinken lassen). Da ich mehr Erfahrung in C habe, wollte ich das Projekt erstmal mit dieser Programmiersprache realisieren um es dann für QBasic umzufunktionieren (wenn es in Basic überhaupt möglich ist). Ich habe bisher noch nix mit Emails empfangen etc. gemacht, daher ist das alles noch Neuland für mich. Meine Frage ist daher, wonach muss ich im Web suchen für mein vorhaben? Mir fehlen Schlagwörter um eingehende Emails ab zugreifen. Ich hab es bisher mit "Emails empfangen in C" oder so versucht, bisher ohne erfolg. Mir fehlen gerade etwas die Ideen?! Mit freundlichen Grüßen
:
Verschoben durch User
emails gehen nicht einfach so ein. Die kommen zu einem Mailserver. Und von dort kann man sie abrufen. Je nacht mail server muss man auch Verschluesselung und Authentifikation machen. Ohne passendes Betriebssystem mit den benoetigten Libraries wird das nichts. Man sollte bereits aus Kommunikationsanwendungen sepzialisiert sein, sonst wird das nichts. Mein Tip. Mach was anderes.
Okey danke für die schnelle Antwort. Hast du evtl. eine andere Idee was ich machen könnte? Will etwas machen, was auch irgendwie einen Nutzen hat und nicht einfach irgendwas wie z.B. eine Ampelsteuerung oder ein Ping Pong spiel.
Robin F. schrieb: > (ich weiß nicht warum wir in der > Techniker Schule noch Basic lernen) Weil es vermutlich so im Lehrplan steht. Vor einigen Jahren haben Informatiker noch gelernt, was Lochkarten sind. Wobei Basic per Definition nichts schlechtes ist. Schaue dir mal das Visual Basic von MS. Die Grundfunktionen und Befehle sind die gleichen wie vor 25 Jahren. Das VB aber auf das .NET Framework aufsetzt kann man damit nahezu alle denkbaren Anwendungen programmieren. Das Senden und Abrufen von Emails ist damit ebenfalls möglich. Ob das mit QBasic geht, weiß ich nicht, vermutlich aber nicht. Dazu werden einfach die Befehle für die systemnahe Programmierung (Netzwerk) fehlen.
Robin F. schrieb: > (ich weiß nicht warum wir in der > Techniker Schule noch Basic lernen) Weil der Lehrer zu faul ist sich mit den heute üblichen Programmiersprachen auseinanderzusetzten. Er verwendet lieber seine 20 Jahre alten Unterrichtskonzepte und macht in den Freien nix.
Ja Visual Baisc hab ich vor Jahren auch mal programmiert. Damit habe ich damals den Einstieg in die Programmierung gefunden. Wir dürfen derzeit leider nur QBasic programmieren, da wir VB erst im kommenden Semester behandeln werden.
Habt ihr dann irgendwelche anderen Vorschläge für Projektideen? Das erschien mir derzeit am sinnvollsten von allen meinen Ideen.
Robin F. schrieb: > was auch irgendwie einen Nutzen hat und nicht einfach irgendwas wie z.B. > eine Ampelsteuerung oder ein Ping Pong spiel. Sorry, aber welchen besonderen Nutzen hat dein Email-Programm? Was kann es, was andere nicht können? Das automatische Anzeigen von neuen Emails machen Outlook und Co. auch. Die laden die Email auch gleich runter und speichern sie. Für eine Belegarbeit sollte man sich immer so eine Aufgabe suchen, die man gut beherrscht und auch sicher bewältigen kann. Wenn dein Email-Programm nicht sauber funktioniert oder du nicht fertig wirst hast du eine schlechte Note. Schreibst du ein einfaches Programm, was sicher funktioniert, sauber dokumentiert ist und der Lehrer auch versteht, wirst du mit ziemlicher Sicherheit die bessere Note bekommen.
Hi, wenn das Thema noch nicht fest ist, würde auch Mailversand gehen? Das wäre gerade in einer Konsolenanwendung wesentlich praktischer zu realisieren. Bspw. Anwendung mit Zieladresse und Betreff starten, von der Standardeingabe den Mailtext lesen und dann das Ganze abschicken. RFC 5322 (oder welche das aktuell ist), ist ganz gut umsetzbar.
Robin F. schrieb: > Habt ihr dann irgendwelche anderen Vorschläge für Projektideen? > > Das erschien mir derzeit am sinnvollsten von allen meinen Ideen. Wenn der Lehrer die Tür aufmacht scrollt über den Bildschirm: "Unser Lehrer ist stinkfaul. Er quält uns mit Sprachen aus der Kreidezeit." Neben der Türe kann auch eine oder besser mehrere Druckluftfanfaren platziert werden.
@G.T.M. Das auch eine gute Idee. Das ganze kann man, wenn es soweit läuft und noch Zeit ist erweitern indem man Profile anlegen kann und dann nicht immer wieder vom neuen die ganzen Einstellungen tätigen muss.
QBasic ist eine reine DOS Anwendung (auch wenns im Fenster läuft). Du wirst deine eigenen Hardwaretreiber für die Netzwerkkarte schreiben müssen, danach einen IP-Stack aufsetzen und vielleicht danach irgendwann mal mit einem Mailserver reden können... Schau Dir mal das 8086-Assembler an und freunde Dich mit PEEK und POKE an. Achja...das ganze in nur 64kB... Einfacher sollte es gehen, wenn Du dich über ein Modem (serielle Schnittsstelle!) an einen Zugangspunkt einwählst. Dann ist alles nur noch String-basiert. Ansonsten schaue mal hier nach: http://www.qbasic.de/ -> QBasic-MonsterFAQ -> Netzwerk ...über Hilfsprogramme scheint es auch zu gehen. Mirko
@technikerausbildung auf dem neuesten Stand xD auch ne gute Idee. Allerdings ist es bestimmt suboptimal für meine Note. @MirkoB Ich vielen Dank ich gucke mal was da zu machen ist.
Dein Hauptproblem ist die Netzwerkanbindung. Sobald du die gemeistert hat ist der Rest nur noch Strings hin und her schicken. An einem POP Server Mails abholen ist nichts anderes als dem Server einen String (ein Kommando) schicken und der Server antwortet mit einem String zurück. (Angenommen SSL ist aus und es reicht die simple Authentizierung) Der Knackpunkt an der ganzen Sache ist die Netzwerkanbindung. Hast du die in der Tasche, dann ist der Rest eine reine Zeitsache. Also überprüf als erstes mal, ob und wie du von QBasic aus ans Netzwerk rankommst. Wenn das zu aufwändig ist, oder du nicht klar kommst, dann lass es. Und damit ist gemeint: alles was mit Internet oder Netzwerk auch nur im entferntesten zu tun hat. Dann eröffnest sonst eine Sysiphus-Arbeit, an der du nicht ferig werden wirst. Egal ob du dann Mail holst, eien Telnet-Client baust, einen kleinen HTPP Server machst oder per FTP eine Datei übertragen willst. Der Knackpunkt ist immer die untere Ebene des Netzwerks: wie öffne ich eine Verbindung, wie verschicke ich Daten. Kriegst du das nicht hin, dann ist es völlig wurscht, welche geniale Idee auf darüber liegenden Software-Schichten NICHT funktioniert.
:
Bearbeitet durch User
Karl Heinz schrieb: > Dein Hauptproblem ist die Netzwerkanbindung. > Sobald du die gemeistert hat ist der Rest nur noch Strings hin und her > schicken. Nett ausgedrückt, angesichts eines DOS Programms ohne Netzwerkfunktionen. Robin F. schrieb: > ich muss eine Facharbeit in QBasic DOS-Basic und Netzwerk kannst du vergessen. Andere Aufgabe suchen.
:
Bearbeitet durch User
Robin F. schrieb: > ich weiß nicht warum wir in der Techniker Schule noch Basic lernen Es ist letztlich egal, welche prozedurale Sprache du lernst. Du lernst primär, was Programmieren an sich ist, nicht die konkrete Sprache. Und das geht im Rahmen von Schulen mit QBasic auch, und einfacher als mit einem von der Sprache her nützlicheren C-Compiler. In den 80ern konnte man im Informatik-Studium Assembler-Programmierung anhand eines programmierbaren Taschenrechners von TI erklärt bekommen. Auch das war nicht so absurd, wie es zuerst wirkte.
:
Bearbeitet durch User
Es gibt im übrigen einen sehr guten neueren Basic-Compiler: http://www.freebasic-portal.de/ Mit dem habe ich mich nach QBasic beschäftigt, die Programme laufen ganz genauso (Ich glaube 1 oder 2 Kleinigkeiten muss man evlt. im Quellcode anpassen) Mit Netzwerk habe ich nie programmiert, aber es scheint da was in die Richtung zu geben: http://www.freebasic-portal.de/tutorials/netzwerkprogrammierung-tsne-v3-60.html [EDIT] Ein paar Beispiele zum Netzwerken: http://www.freebasic-portal.de/code-beispiele/internet-netzwerke/
:
Bearbeitet durch User
Nimm doch das Übliche: Kundenkartei, Taschenrechner, Kartenspiel. Wenn es nichts mit Schnittstellen oder Kommunikation sein muß, keinen alltägl. Nutzen haben muß und eine Grafikanwendung sein darf, dann mach doch was mit Baum des Pythagoras, Fraktal-Generator oder 2-dimensionalem Zellularautomat. Letzteres (s. Conway's Game of Life, Turing-Maschine) läßt sich auch gut mittels ASCII-Grafik darstellen. Es gibt eine Menge Infos auf z.B. Wikipedia, privaten Webseiten, teils engl.-sprachig. Ich habe das mal unter DOS, später Windows, in z.B. QBasic, TPascal, VB6 und VB für Excel gemacht, versuche es jetzt in Java u. C/Cpp mit WinAPI. Für mich haben o.g. 3 Grafikbeispiele eine spez. Bedeutung, man kann auch anders anfangen. In jedem Fall habe ich dabei eine Menge gelernt und bin dahin gekommen, meine Programme so zu schreiben, daß ich mögl. viele Dinge übernehmen kann und andere nur austausche, z.B. Routinen oder Ressourcen für Fenster, Menüs, Dialogboxen, Datenstrukturen.
Rainer V. schrieb: > doch was mit Baum des Pythagoras, Fraktal-Generator oder 2-dimensionalem > Zellularautomat. Letzteres (s. Conway's Game of Life, Turing-Maschine) > läßt sich auch gut mittels ASCII-Grafik darstellen. Ja, die sind immer beliebt. Eine etwas weniger bekannte Abart davon, die nichts desto trotz interessant ist, ist zb. Wator Eine torusförmige Welt (keine Angst, das klingt schlimmer als es ist. Es bedeutet einfach nur, wenn man auf einem 2D-Gitter rechts rausfährt, kommt man links wieder rein, dasselbe mit oben/unten) leben Haie und Fische. Fische haben unbegrenzt Nahrung und vermehren sich nach n Zyklen. Haie vermehren sich nach m Zyklen, müssen aber nach spätestens f Zyklen einen Fisch gefressen haben, damit sie nicht sterben. Ansonsten bewegen sich alle zufallsgesteuert. Ein Fisch bewegt sich in einem Zyklus auf ein Nachbarfeld, wenn eines frei ist. Ein Hai bewegt sich auf ein Nachbarfeld mit einem Fisch wenn möglich (den er dann frisst) bzw. auf eines der freien Nachbarfelder, wenn kein Fisch in der Nähe ist. Das interessante daran: es stellen sich Zyklen ein, in denen die sich die Fische wie die wilden vermehren, woraufhin auch die Haie immer mehr werden, die dann fast alle Fische ausrotten (aber eben nur fast). Woraufhin dann die Haie zugrunde gehen und sich die Fischpopulationen sich wieder vermehren. Angeblich hat man genau diese Zyklen bei ähnlich einfachen Systemen gebildet aus Schneehasen und (ich glaube es waren) Wölfe in den Weiten Kanadas tatsächlich gefunden. http://www.kanitrino.de/de/Register/jaeger.html
:
Bearbeitet durch User
Passend zum Jahresende könnte man anstatt Tieren auch Nikoläuse nehmen, die böse Kinder auf dem Nachbarfeld in den Keller sperren. Und schon haben wir einen Keller-Automaten. Wenn das Spielfeld am Rand offen ist, dann stürzen sie alle ab, Nikoläuse, Haifische, Schneehasen usw.
Wenn dein Lehrer ziemlich doof ist kannst du ihm das unterjubeln: Du kannst von QBasic aus eine Textdatei auslesen die von einem anderen Programm beschrieben wird das die eigentliche Arbeit macht. Es verbindet sich mit dem Mailserver und fragt nach ob schon mail angekommen sind und schreibt die Infos in die Textdatei. Da euer QBasic sowieso im Fenster unter Windows rennt kannst du das andere Programm in einer Scriptsprache deiner Wahl (was gerade auf dem Rechner installiert ist) erstellen. In Perl, PHP,... sind das nur ein paar Zeilen, da es schon entspr. Libs für Zugriff auf Mailserver gibt. Evt. gibts auch schon ein Kommandozeilenprogramm das unter Windows läuft und solche Abfragen durchführt. Unter Unix hiess sowas früher Xbiff, es check in regelmässigen Abständen Mailaccounts auf neue Mails, such mal nach winbiff biff for windows, evt. gibts sowas auch für Windows und einem Modus der die Daten als Text ausgibt. Die Ausgabe leitest du dann per ">" in eine Datei um.
Danke für die wirklich guten Ideen. Ich habe mir gestern Abend auch ein Projekt überlegt. Un zwar werde ich einen Terminkalender erstellen. Der soll unter anderem folgende Funktionen haben: - Monatskalender (Grafisch anzeigen lassen, Termine anzeigen und farblich kennzeichnen sowie in einer späteren Version mit der Maus bedient werden können um Termine direkt dort einzutragen) - Alle Termine anzeigen (in Auflistung) - Termin eintragen - Termin bearbeiten - Option (Farbauswahl, Schriftauswahl, etc.) Wenn ich mein eben beschriebenes Projekt fertig gestellt habe, werde ich mich zur Übung an die weiteren oben beschriebenen Projekte machen und euch dann präsentieren, falls es erwünscht ist. Ich werde mich dann aber evtl. eher wieder der Sprache C widmen. Grüße
:
Bearbeitet durch User
Super-Idee! Mir ist noch etwas eingefallen: Lotto-Statistik Das habe ich mal in VB für Excel gemacht. Problem wäre noch, in Abständen an die aktuellen Daten der Lotto-Ausspielungsliste heranzukommen. Die gab es früher für ein paar Mark auf Diskette.
Nabend, ich habe das Prgramm soweit in C fertig gestellt. Also ich habe die wichtigsten Funktionen funktionstüchtig gemacht und jetzt will ich gerade alles in QBasic umschreiben. Jetzt habe ich ein Problem. Ich weiß nicht wie ich das Datum als Wert einlesen soll. In C ging das ganz einfach:
1 | printf("\nGeben Sie Ihr gewuenschtes Datum ein: "); |
2 | scanf("%d.%d.%d", &tag, &monat, &jahr); |
In QB geht das aber nicht so wie ich es mir vorgestellt habe. Ich habe schon mehrere Sachen probiert, leide ohne erfolg. Hat einer von euch eine Idee wie ich das Datum in QB so wie in C einlesen kann? Danke für die Hilfe Liebe Grüße
INPUT var1$ oder INPUT "Eingabe bitte:", var1$ http://www.o-bizz.de/qbtuts/qbefehl/index.htm http://www.o-bizz.de/qbtuts/qb_befel/qb_befel.htm
Achso jetzt weiß ich was mit dem $ Zeichen gemeint ist. Vielen Danke für die schnelle Hilfe.
Dollarzeichen $ am Ende kennzeichnet eine Stringvariable. In VBasic ebenso: var1$ oder auch var1 as String Wie das mit Mehrfacheingabe ist weiß ich nicht mehr. Versuch es mal mit Komma oder Semikolon als Formatierungszeichen, z.B.: INPUT "Tag, Monat, Jahr eingeben:", datum1$, monat2$, jahr3$
Also mit Semikolon geht es gar nicht (kommt gleich ne Fehlermeldung) und mit Komma, wird das Datum nur in die erste Variable geschrieben. Aber ich glaub man kann bei QB das auch noch lösen indem man sagt, nach 2 Tastenschlägen, benutz die 2. Variable oder? Da müsste ich aber noch gucken wie ich die Punkte vernachlässige/ignoriere beim eingeben. Wenn die Idee Funktioniert, wäre das die Lösung.
Oder ich benutze ein String Array zum einlesen?! Dann könnte ich ja bei 10 Zeichen die ich bei dem Datum eingebe jedes einzelne Zeichen auslesen. Somit könnte ich die Ziffern auch raus picken?!
Hab es jetzt so versucht:
1 | |
2 | DIM dat(9) |
3 | |
4 | INPUT "Tag, Monat, Jahr eingeben:" dat() '<--- hier liegt der Fehler denk ich |
5 | PRINT dat(0), dat(1) |
6 | PRINT dat(3), dat(4) |
7 | PRINT dat(6), dat(7), dat(8), dat(9) |
funktioniert aber nicht. Wie schon kommentiert, vermute ich dort den Fehler. Weiß aber nicht wie das Array richtig einlesen soll? Vielleicht ist schon etwas zu spät dafür aber wenn einer ne Idee hat wäre es sehr lieb, wenn Ihr mir einen Tipp geben könnt.
Robin F. schrieb: > Oder ich benutze ein String Array zum einlesen?! ? Wozu das Array? > Dann könnte ich ja bei > 10 Zeichen die ich bei dem Datum eingebe jedes einzelne Zeichen > auslesen. Somit könnte ich die Ziffern auch raus picken?! Das ist sowieso eine gute Idee, den benutzer erst mal einen String eingeben zu lassen. Denn was machst du, wenn der Benutzer "ABCDEF" anstelle von "1.1.2014" eingibt? Deswegen darf ein Programm nicht abstürzen. Endbenutzertaugliche Eingaben beginnen normalerweise immer damit, vom Benutzer erst mal einen String eingeben zu lassen. Und aus dem holt man sich dann die Teile raus und verarbeitet sie weiter, die man braucht.
:
Bearbeitet durch User
Robin F. schrieb:
> INPUT "Tag, Monat, Jahr eingeben:" dat()
Da fehlt das Komma zw. den Parametern und ein unspezifiziertes Datenfeld
eingeben geht schon gar nicht. Es könnte z.B. so heissen:
INPUT "Tag=", dat(1) :: INPUT "Monat=", dat(2) :: INPUT "Jahr=", dat(3)
Hier ist mal ein Versuch, aber ohne umfassende Fehlerbehandlung:
1 | REM Fehlerwert Errc: 0=kein Fehler, 65535=Abbruch, keine Eingabe |
2 | DIM Errc AS LONG, Erln AS LONG, Datum(3) AS INTEGER |
3 | CONST StopOnError AS BOOLEAN=False |
4 | |
5 | SUB Datumeingabe() |
6 | DIM a$, b$, i AS INTEGER, j AS INTEGER |
7 | |
8 | PRINT "Heute ist der " & DATE$ & ", " & TIME$ & " Uhr." |
9 | |
10 | Label1: ON ERROR GOTO ErrHnd |
11 | REM Eingabeschleife für Tag, Monat, Jahr |
12 | FOR i=1 TO 3 |
13 | b$=TRIM$(MID$( "Tag Monat Jahr", i*6-5, 6)) :: INPUT b$ & " ? ", a$ |
14 | j=LEN(TRIM$(a$)) :: IF j<1 THEN GOTO Err1 |
15 | 1: Datum(i)=VAL(a$) |
16 | NEXT i |
17 | |
18 | REM Eingabewerte prüfen |
19 | FOR i=1 TO 3 |
20 | SELECT CASE i |
21 | CASE 1: IF (Datum(i)<1) OR (Datum(i)>31) THEN GOTO Err2 |
22 | CASE 2: IF (Datum(i)<1) OR (Datum(i)>12) THEN GOTO Err2 |
23 | CASE 3: IF (Datum(i)<0) OR (Datum(i)>9999) THEN GOTO Err2 |
24 | END SELECT |
25 | NEXT i |
26 | |
27 | Errc=0 :: IF Datum(3)<100 THEN Datum(3)=Datum(3)+2000 |
28 | Exit1: ON ERROR GOTO 0 :: EXIT SUB |
29 | Err1: Errc=65535 :: GOTO Exit1 |
30 | Err2: PRINT "DU DÖDEL! Falsche Eingabe." :: BEEP :: GOTO Label1 |
31 | ErrHnd: Errc=Err :: Erln=Erl :: ON ERROR GOTO 0 |
32 | IF Erln=1 THEN GOTO Err2 |
33 | IF StopOnError THEN ERROR(Errc) |
34 | END SUB |
Falls Funktion INSTR() in QBasic existiert, sollte o.g Code von Label1 bis zum Ende der 1. FOR-Schleife durch folg. Code ersetzt werden können, wenn zu Beginn die Variable/Konstante "Vergleichstyp" definiert ist:
1 | REM Vergleichstyp (aus VBasic): 0=vbBinaryCompare, 1=vbTextCompare |
2 | CONST Vergleichstyp AS INTEGER=1 |
3 | ... |
4 | Label1: ON ERROR GOTO ErrHnd |
5 | INPUT "Datum im Format tt.mm.jjjj eingeben: ", a$ |
6 | j=LEN(TRIM$(a$)) :: IF j<1 THEN GOTO Err1 |
7 | REM Analyse der Eingabe |
8 | FOR i=1 TO 3 |
9 | j=INSTR(1, a$, ".", Vergleichstyp) |
10 | SELECT CASE i |
11 | CASE 1, 2: IF j<1 THEN GOTO Err2 |
12 | CASE ELSE |
13 | j=LEN(a$)+1 |
14 | END SELECT |
15 | b$=MID$(a$, 1, j-1) :: a$=MID$(a$, j+1, LEN(a$)-J) |
16 | IF LEN(b$)<1 THEN GOTO Err2 |
17 | 1: Datum(i)=VAL(b$) |
18 | NEXT i |
:
Bearbeitet durch User
Nabend, so ich habe das Programm soweit erfolgreich programmiert. Es sind noch einige Dinge die ich gern noch eingefügt hätte, aber ich habe keine lust mehr...noch mehr mit QBasic zu machen! Ich werde jetzt nach der Facharbeit mich wieder mit C und C++ beschäftigen. Hier mal mein Programm: Es wird noch etwas an den Kommentaren und der Form gefeilt, aber alle Funktionen sind soweit vorhanden. Falls ihr das Programm testen wollt, empfehle ich euch daraus eine Exe zu machen und die Dateien: Datum.rtf , Ereignis.rtf , bearbeiten.rtf & bearbeiten1.rtf zu erstellen Wenn Ihr eine Exe erstellt habt und die .rtf Dateien im selben Ordner habt, braucht ihr keinen Pfad für die Dateien angeben.
1 | '########################################################################
|
2 | '# # |
3 | '# Projekt: Terminkalender V1.0 # |
4 | '# Autor: **************************************** # |
5 | '# Klasse: E12A1 # |
6 | '# Fach: GRDV # |
7 | '# # |
8 | '########################################################################
|
9 | |
10 | '----Display loeschen---- |
11 | CLS
|
12 | '------------------------------ |
13 | '----Hauptprogramm---- |
14 | '------------------------------ |
15 | CALL menue |
16 | END
|
17 | '
|
18 | '
|
19 | '------------------------------ |
20 | '----Unterprogramme---- |
21 | '------------------------------ |
22 | SUB menue |
23 | w% = 7 |
24 | DIM Zeilen(100) AS STRING |
25 | |
26 | '------------------------------ |
27 | '----aktuelles Datum anzeigen---- |
28 | '------------------------------ |
29 | d$ = DATE$ |
30 | datum$ = MID$(d$, 4, 2) + "." + LEFT$(d$, 2) + "." + RIGHT$(d$, 4) |
31 | LOCATE w%, 28 |
32 | PRINT "Heute ist der: "; datum$ |
33 | '------------------------------ |
34 | '----Termin Ja/Nein---- |
35 | '------------------------------ |
36 | w% = w% + 1 |
37 | LOCATE w%, 20 |
38 | OPEN "Datum.rtf" FOR INPUT AS #1 |
39 | OPEN "Ereignis.rtf" FOR INPUT AS #2 |
40 | |
41 | DO UNTIL EOF(1) |
42 | LINE INPUT #1, da$ |
43 | LINE INPUT #2, e$ |
44 | IF da$ = datum$ THEN |
45 | w% = w% + 1 |
46 | LOCATE w%, 20 |
47 | PRINT "Sie haben heute folgenden Termin: "; e$ |
48 | END IF |
49 | s$ = da$ + e$ |
50 | Zeilen(i) = s$ |
51 | i = i + 1 |
52 | LOOP
|
53 | |
54 | CLOSE #1: CLOSE #2 |
55 | |
56 | IF da$ <> datum$ THEN |
57 | LOCATE w%, 20 |
58 | PRINT "Fuer heute sind keine Termine eingetragen" |
59 | END IF |
60 | wiederholen: |
61 | '------------------------------ |
62 | '----Menueoberflaeche---- |
63 | '------------------------------ |
64 | w% = w% + 2 |
65 | LOCATE w%, 28 |
66 | PRINT "<1> Termin eintragen" |
67 | w% = w% + 1 |
68 | LOCATE w%, 28 |
69 | PRINT "<2> Alle Termine anzeigen" |
70 | w% = w% + 1 |
71 | LOCATE w%, 28 |
72 | PRINT "<3> einzelne Termine loeschen" |
73 | w% = w% + 1 |
74 | LOCATE w%, 28 |
75 | PRINT "<4> Alle Termine loeschen" |
76 | w% = w% + 1 |
77 | LOCATE w%, 28 |
78 | PRINT "<5> Beenden" |
79 | w% = w% + 1 |
80 | LOCATE w%, 28 |
81 | PRINT "Eingabe:" |
82 | DO: taste$ = INKEY$: LOOP UNTIL taste$ <> "" 'Zahl zw. 1 und 5 druecken um in gewuenschte Untermenues zu gelangen |
83 | LOCATE , , 0 'Blinkenden Cursor deaktivieren |
84 | SELECT CASE taste$ |
85 | CASE "1" |
86 | CALL eintragen |
87 | CASE "2" |
88 | CALL anzeigen |
89 | CASE "3" |
90 | CALL bearbeiten |
91 | CASE "4" |
92 | CALL loeschen |
93 | CASE "5" |
94 | CALL beenden |
95 | CASE ELSE |
96 | CLS
|
97 | w% = 7 |
98 | LOCATE w%, 22 |
99 | PRINT "Es wurde eine fehlerhafte Eingabe getaetigt" |
100 | w% = w% + 1 |
101 | LOCATE w%, 22 |
102 | PRINT "Bitte erneut eingeben" |
103 | GOSUB wiederholen |
104 | END SELECT |
105 | END
|
106 | END SUB |
107 | '------------------------------ |
108 | '----<1>Termin eintragen---- |
109 | '------------------------------ |
110 | SUB eintragen |
111 | CLS
|
112 | wiederholen: 'bei fehlerhafter Eingabe hier hin zurueck kehren |
113 | LOCATE 6, 10 |
114 | INPUT "Geben Sie Ihr gewuenschtes Datum (tt.mm.jjjj) ein: ", var1$ 'Datum fuer einen Termin eingeben |
115 | |
116 | IF LEN(var1$) <> 10 THEN |
117 | CLS
|
118 | GOSUB wiederholen |
119 | END IF |
120 | LOCATE 7, 10 |
121 | INPUT "Geben Sie Ihren Termin ein: ", var2$ 'Ereignis fuer den vorher eingegeben Tag eingeben |
122 | 'Speichert das Datum und das Ereignis in 2 Datein |
123 | |
124 | OPEN "Datum.rtf" FOR APPEND AS #1 |
125 | OPEN "Ereignis.rtf" FOR APPEND AS #2 |
126 | |
127 | wiederholen1: |
128 | LOCATE 9, 15 |
129 | INPUT "Wollen Sie Ihre Eingabe wirklich speichern? [J/N] ", var$ |
130 | var$ = UCASE$(var$) |
131 | IF var$ = "J" THEN |
132 | PRINT #1, var1$ |
133 | PRINT #2, var2$ |
134 | ELSEIF var$ = "N" THEN |
135 | wiederholen2: |
136 | LOCATE 10, 15 |
137 | PRINT "Wollen Sie Ihre Eingabe wiederholen? [J/N]" |
138 | DO: taste$ = INKEY$: LOOP UNTIL taste$ <> "" |
139 | LOCATE , , 0 |
140 | IF taste$ = "J" THEN |
141 | CLS
|
142 | GOSUB wiederholen |
143 | ELSEIF taste$ = "N" THEN |
144 | LOCATE 12, 15 |
145 | PRINT "Press any Key" |
146 | taste$ = "" |
147 | WHILE taste$ = "" |
148 | taste$ = INKEY$ |
149 | WEND
|
150 | CLS
|
151 | RESET
|
152 | CALL menue |
153 | END
|
154 | ELSE
|
155 | CLS
|
156 | LOCATE 6, 15 |
157 | PRINT "Es wurde eine fehlerhafte Eingabe getaetigt" |
158 | LOCATE 7, 15 |
159 | PRINT "Bitte erneut eingeben" |
160 | GOSUB wiederholen2 |
161 | END IF |
162 | END
|
163 | ELSEIF var$ <> "J" OR var$ <> "N" THEN |
164 | CLS
|
165 | LOCATE 6, 15 |
166 | PRINT "Es wurde eine fehlerhafte Eingabe getaetigt" |
167 | LOCATE 7, 15 |
168 | PRINT "Bitte erneut eingeben" |
169 | GOSUB wiederholen1 |
170 | END IF |
171 | RESET
|
172 | CLOSE #1: CLOSE #2 |
173 | |
174 | LOCATE 11, 15 |
175 | PRINT "Der Termin wurde erfolgreich gespeichert!" |
176 | LOCATE 12, 15 |
177 | PRINT "Press any Key" |
178 | taste$ = "" |
179 | WHILE taste$ = "" |
180 | taste$ = INKEY$ |
181 | WEND
|
182 | CLS
|
183 | RESET
|
184 | CALL menue |
185 | END
|
186 | END SUB |
187 | '------------------------------ |
188 | '----<2>alle Termine anzeigen---- |
189 | '------------------------------ |
190 | SUB anzeigen |
191 | CLS
|
192 | w% = 6 |
193 | DIM Zeilen(100) AS STRING |
194 | '----der gesamte Inhalt der Textdateien wird gelesen---- |
195 | OPEN "Datum.rtf" FOR INPUT AS #1 |
196 | OPEN "Ereignis.rtf" FOR INPUT AS #2 |
197 | |
198 | DO UNTIL EOF(1) |
199 | LINE INPUT #1, d$ |
200 | LINE INPUT #2, e$ |
201 | s$ = d$ + " " + e$ 'Datum und Ereignis verknuepfen |
202 | LOCATE w%, 25 |
203 | PRINT s$ 'Ausgabe der Verknuepften Variablen |
204 | Zeilen(i) = s$ |
205 | i = i + 1 |
206 | w% = w% + 1 |
207 | LOOP
|
208 | RESET
|
209 | CLOSE #1: CLOSE #2 |
210 | IF s$ = "" THEN |
211 | LOCATE w%, 15 |
212 | PRINT "Es sind keine Termine eingetragen" |
213 | w% = w% + 2 |
214 | LOCATE w%, 35 |
215 | PRINT "Press any Key" |
216 | taste$ = "" |
217 | WHILE taste$ = "" |
218 | taste$ = INKEY$ |
219 | WEND
|
220 | CLS
|
221 | RESET
|
222 | CALL menue |
223 | END IF |
224 | |
225 | w% = w% + 1 |
226 | LOCATE w%, 35 |
227 | PRINT "Press any Key" |
228 | taste$ = "" |
229 | WHILE taste$ = "" |
230 | taste$ = INKEY$ |
231 | WEND
|
232 | CLS
|
233 | RESET
|
234 | CALL menue |
235 | END
|
236 | |
237 | END SUB |
238 | '------------------------------ |
239 | '----<3> Termine bearbeiten---- |
240 | '------------------------------ |
241 | SUB bearbeiten |
242 | CLS
|
243 | DIM Zeilen(100) AS STRING |
244 | wiederholen: |
245 | w% = 6 |
246 | '----der gesammte Inhalt der Textdateien wird gelesen---- |
247 | OPEN "Datum.rtf" FOR INPUT AS #1 |
248 | OPEN "Ereignis.rtf" FOR INPUT AS #2 |
249 | |
250 | DO UNTIL EOF(1) |
251 | LINE INPUT #1, d$ |
252 | LINE INPUT #2, e$ |
253 | s$ = d$ + " " + e$ 'Datum und Ereignis verknuepfen |
254 | LOCATE w%, 15 |
255 | PRINT s$ 'Ausgabe der Verknuepften Variablen |
256 | Zeilen(i) = s$ |
257 | i = i + 1 |
258 | w% = w% + 1 |
259 | LOOP
|
260 | RESET
|
261 | CLOSE #1: CLOSE #2 |
262 | '-------------------------------------------- |
263 | IF s$ = "" THEN |
264 | LOCATE w%, 15 |
265 | PRINT "Es sind keine Termine eingetragen" |
266 | w% = w% + 2 |
267 | LOCATE w%, 15 |
268 | PRINT "Press any Key" |
269 | taste$ = "" |
270 | WHILE taste$ = "" |
271 | taste$ = INKEY$ |
272 | WEND
|
273 | CLS
|
274 | RESET
|
275 | CALL menue |
276 | END IF |
277 | '-------------------------------------------- |
278 | |
279 | w% = w% + 1 |
280 | LOCATE w%, 15 |
281 | INPUT "Welcher Tag soll geloescht werden: ", var$ |
282 | |
283 | IF LEN(var$) <> 10 THEN |
284 | CLS
|
285 | w% = 6 |
286 | LOCATE w%, 15 |
287 | PRINT "Es wurde eine fehlerhafte Eingabe getaetigt" |
288 | w% = w% + 1 |
289 | LOCATE w%, 15 |
290 | PRINT "Bitte erneut eingeben" |
291 | GOSUB wiederholen |
292 | END IF |
293 | |
294 | OPEN "Datum.rtf" FOR INPUT AS #1 |
295 | OPEN "Ereignis.rtf" FOR INPUT AS #2 |
296 | DO UNTIL EOF(1) |
297 | LINE INPUT #1, da$ |
298 | LINE INPUT #2, e$ |
299 | IF da$ = var$ THEN |
300 | w% = w% + 1 |
301 | LOCATE w%, 15 |
302 | PRINT da$ + " " + e$ |
303 | PRINT
|
304 | EXIT DO |
305 | END IF |
306 | s$ = da$ + e$ |
307 | Zeilen(i) = s$ |
308 | i = i + 1 |
309 | LOOP
|
310 | RESET
|
311 | CLOSE #1: CLOSE #2 |
312 | |
313 | wiederholen1: |
314 | w% = w% + 1 |
315 | LOCATE w%, 15 |
316 | INPUT "Wollen Sie diesen Termin wirklich loeschen? [J/N]: ", var1$ |
317 | var1$ = UCASE$(var1$) |
318 | IF var1$ = "J" THEN ' "J"a der Termin wird geloescht |
319 | OPEN "Datum.rtf" FOR INPUT AS #1 |
320 | OPEN "bearbeiten.rtf" FOR OUTPUT AS #2 |
321 | OPEN "Ereignis.rtf" FOR INPUT AS #3 |
322 | OPEN "bearbeiten1.rtf" FOR OUTPUT AS #4 |
323 | DO UNTIL EOF(1) |
324 | LINE INPUT #1, A$ |
325 | LINE INPUT #3, B$ |
326 | IF A$ <> var$ THEN |
327 | PRINT #2, A$ |
328 | PRINT #4, B$ |
329 | END IF |
330 | LOOP
|
331 | RESET
|
332 | CLOSE #1: CLOSE #2: CLOSE #3: CLOSE #4 |
333 | '------------------------- |
334 | OPEN "bearbeiten.rtf" FOR INPUT AS #1 |
335 | OPEN "Datum.rtf" FOR OUTPUT AS #2 |
336 | OPEN "bearbeiten1.rtf" FOR INPUT AS #3 |
337 | OPEN "Ereignis.rtf" FOR OUTPUT AS #4 |
338 | |
339 | DO UNTIL EOF(1) |
340 | LINE INPUT #1, A$ |
341 | LINE INPUT #3, B$ |
342 | PRINT #2, A$ |
343 | PRINT #4, B$ |
344 | w% = w% + 1 |
345 | LOCATE w%, 15 |
346 | PRINT A$ + " " + B$ |
347 | LOOP
|
348 | RESET
|
349 | CLOSE #1: CLOSE #2: CLOSE #3: CLOSE #4 |
350 | w% = w% + 1 |
351 | LOCATE w%, 15 |
352 | PRINT "Der Termin wurde erfolgreich geloescht!" |
353 | w% = w% + 1 |
354 | LOCATE w%, 15 |
355 | PRINT "Press any Key" |
356 | taste$ = "" |
357 | WHILE taste$ = "" |
358 | taste$ = INKEY$ |
359 | WEND
|
360 | CLS
|
361 | RESET
|
362 | CALL menue |
363 | END
|
364 | ELSEIF var1$ = "N" THEN ' "N"ein der Termin soll nicht geloescht werden |
365 | w% = w% + 1 |
366 | LOCATE w%, 15 |
367 | PRINT "Press any Key" |
368 | taste$ = "" |
369 | WHILE taste$ = "" |
370 | taste$ = INKEY$ |
371 | WEND
|
372 | CLS
|
373 | RESET
|
374 | CALL menue |
375 | END
|
376 | ELSE
|
377 | CLS
|
378 | LOCATE 6, 15 |
379 | PRINT "Es wurde eine falsche Eingabe getaetigt." |
380 | LOCATE 7, 15 |
381 | PRINT "Bitte wiederholen Sie Ihre Eingabe! " |
382 | GOSUB wiederholen1 |
383 | END IF |
384 | END SUB |
385 | '------------------------------ |
386 | '----<4>loeschen der gesamten Eintraege---- |
387 | '------------------------------ |
388 | SUB loeschen |
389 | '----der gesamte Inhalt der Textdatei wird geloescht---- |
390 | CLS
|
391 | wiederholen: |
392 | LOCATE 9, 15 |
393 | INPUT "Wollen Sie wirklich alle Termine loeschen? [J/N]: ", var$ |
394 | var$ = UCASE$(var$) |
395 | IF var$ = "J" THEN |
396 | OPEN "Datum.rtf" FOR OUTPUT AS #1 |
397 | OPEN "Ereignis.rtf" FOR OUTPUT AS #2 |
398 | OPEN "bearbeiten.rtf" FOR OUTPUT AS #3 |
399 | OPEN "bearbeiten1.rtf" FOR OUTPUT AS #4 |
400 | PRINT
|
401 | RESET 'leert Puffer |
402 | CLOSE #1: CLOSE #2: CLOSE #3: CLOSE #4 |
403 | LOCATE 11, 25 |
404 | PRINT "Alle Termine wurden geloescht!" |
405 | LOCATE 12, 25 |
406 | PRINT "Press any Key" |
407 | taste$ = "" |
408 | WHILE taste$ = "" |
409 | taste$ = INKEY$ |
410 | WEND
|
411 | CLS
|
412 | RESET
|
413 | CALL menue |
414 | END
|
415 | ELSEIF var$ = "N" THEN |
416 | CLS
|
417 | CALL menue |
418 | ELSE
|
419 | CLS
|
420 | LOCATE 6, 15 |
421 | PRINT "Es wurde eine fehlerhafte Eingabe getaetigt" |
422 | LOCATE 7, 15 |
423 | PRINT "Bitte erneut eingeben" |
424 | GOSUB wiederholen |
425 | END IF |
426 | END SUB |
427 | '------------------------------ |
428 | '----<5>beenden des Programms---- |
429 | '------------------------------ |
430 | SUB beenden |
431 | CLS
|
432 | wiederholen: |
433 | LOCATE 9, 15 |
434 | INPUT "Wollen Sie das Programm wirklich beenden? [J/N]: ", var$ |
435 | var$ = UCASE$(var$) |
436 | IF var$ = "J" THEN |
437 | SYSTEM 'beendet das Programm |
438 | ELSEIF var$ = "N" THEN |
439 | CLS
|
440 | CALL menue 'kehrt zum Menue zurueck |
441 | ELSE
|
442 | CLS
|
443 | LOCATE 6, 15 |
444 | PRINT "Es wurde eine fehlerhafte Eingabe getaetigt" |
445 | LOCATE 7, 15 |
446 | PRINT "Bitte erneut eingeben" |
447 | GOSUB wiederholen |
448 | END IF |
449 | END SUB |
Danke für all eure Hilfen. Beste Grüße
rtf ist ein typisches Mac OS Textdatei Format und funktioniert auch einwandfrei unter Windwos.
Robin F. schrieb: > rtf ist ein typisches Mac OS Textdatei Format und funktioniert auch > einwandfrei unter Windwos. Wobei man fairerweise sagen muss, dass RTF von MS stammt, nicht von Apple. Und es ein eher grausliches Format ist.
Okey kann ja sein. Daran soll es aber nicht scheitern ;). Ist ja schließlich ein leichtes, das Format zu ändern.
ich habe gewissen zweifel daran, dass hier wirklich rtf erstellt wird. für mich sieht das eher nach plain text aus. aber ich gebs zu, ich habe den code nur überflogen - ist mir zuviel code auf einmal mit zuwenig kommentaren...
:
Bearbeitet durch User
Was hier erzeugt wird, ist nebensächlich, aber wenn in das Programm mal eine richtige RTF-Datei gesteckt wird, wie sie entweder von Textedit.app unter OS X oder von MS Word erzeugt wird, dann wird das Programm nicht mehr unbedingt das erwartete tun, denn auch wenn RTF formell ein Textdateiformat ist, ist der Nutzinhalt nicht so leicht zugänglich. RTF ("rich text format") enthält nämlich diverse Formatierungsanweisungen und kann große Teile der Formatierungsinformation transportieren, die ein typisches Word-Dokument enthält - im schlimmsten Fall auch mit eingebetteten Graphiken etc. Und so etwas verdaut das Progrämmchen da oben ganz sicher nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.