Forum: PC-Programmierung Emails empfangen


von Robin F. (gehacktes)


Lesenswert?

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
von Hopper (Gast)


Lesenswert?

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.

von Bastler (Gast)


Lesenswert?

Hi,
ich würde nach folgendem suchen
 - POP-Server abfrage
 - IMAP server abfrage

von Robin F. (gehacktes)


Lesenswert?

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.

von Jens (Gast)


Lesenswert?

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.

von Sparfuchs (Gast)


Lesenswert?

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.

von Robin F. (gehacktes)


Lesenswert?

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.

von Robin F. (gehacktes)


Lesenswert?

Habt ihr dann irgendwelche anderen Vorschläge für Projektideen?

Das erschien mir derzeit am sinnvollsten von allen meinen Ideen.

von Jens (Gast)


Lesenswert?

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.

von G T M. (gt_m)


Lesenswert?

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.

von technikerausbildung auf dem neuesten Stand (Gast)


Lesenswert?

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.

von Robin F. (gehacktes)


Lesenswert?

@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.

von MirkoB (Gast)


Lesenswert?

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

von Robin F. (gehacktes)


Lesenswert?

@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.

von Karl H. (kbuchegg)


Lesenswert?

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
von (prx) A. K. (prx)


Lesenswert?

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
von Robin F. (gehacktes)


Lesenswert?

Ok dann mach ich mich mal an die Arbeit und such neue Ideen.

von (prx) A. K. (prx)


Lesenswert?

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
von Simon S. (-schumi-)


Lesenswert?

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
von Rainer V. (rudi994)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Rainer V. (rudi994)


Lesenswert?

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.

von Odenwälder Tannenbaum (Gast)


Lesenswert?

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.

von Robin F. (gehacktes)


Lesenswert?

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
von Rainer V. (rudi994)


Lesenswert?

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.

von Robin F. (gehacktes)


Lesenswert?

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

von Rainer V. (rudi994)


Lesenswert?


von Robin F. (gehacktes)


Lesenswert?

Achso jetzt weiß ich was mit dem $ Zeichen gemeint ist. Vielen Danke für 
die schnelle Hilfe.

von Rainer V. (rudi994)


Lesenswert?

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$

von Robin F. (gehacktes)


Lesenswert?

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.

von Robin F. (gehacktes)


Lesenswert?

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?!

von Robin F. (gehacktes)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Rainer V. (rudi994)


Lesenswert?

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)

von Rainer V. (rudi994)


Lesenswert?

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
von Robin F. (gehacktes)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ich habe gewisse Zweifel daran, daß RTF hier das richtige Dateiformat 
ist.

von Robin F. (gehacktes)


Lesenswert?

rtf ist ein typisches Mac OS Textdatei Format und funktioniert auch 
einwandfrei unter Windwos.

von (prx) A. K. (prx)


Lesenswert?

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.

von Robin F. (gehacktes)


Lesenswert?

Okey kann ja sein.

Daran soll es aber nicht scheitern ;). Ist ja schließlich ein leichtes, 
das Format zu ändern.

von Daniel F. (df311)


Lesenswert?

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
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.