Prosty dzienniczek ucznia z obsługą plików tekstowych w języku Pascal.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | uses crt, sysutils; const plik='dziennik.dat'; type uczen = record imie, nazwisko:string; end; var v1:string; a,i,x,z,nr,v2,er:integer; tab:array[1..100] of uczen; tn:char; f:file of uczen; label kejs, menu, petla; procedure sortuj; begin writeln('Sortuje...'); petla: for nr:=1 to z do if (upcase(tab[nr].nazwisko)+upcase(tab[nr].imie))>(upcase(tab[nr+1].nazwisko)+upcase(tab[nr+1].imie)) then begin tab[z+1]:=tab[nr]; tab[nr]:=tab[nr+1]; tab[nr+1]:=tab[z+1]; end; for nr:=1 to z do if (upcase(tab[nr].nazwisko)+upcase(tab[nr].imie))>(upcase(tab[nr+1].nazwisko)+upcase(tab[nr+1].imie)) then goto petla; delay(1000); goto menu; end; begin clrscr; nr:=0; z:=0; writeln('..::Dzienniczek::..'); menu: clrscr; writeln('..::Dzienniczek::..'); writeln('Wybierz dzialanie:'); writeln('1 - dodawanie ucznia'); writeln('2 - usuwanie ucznia'); writeln('3 - wyswietlanie dziennika'); writeln('4 - sortowanie'); writeln('5 - zapisz do pliku'); writeln('6 - wczytaj z pliku'); writeln('7 - wyjscie'); kejs: readln(a); case a of 1: begin writeln('Dodawanie ucznia... (Q-koniec)'); write('Ilosc uczniow: '); repeat readln(v1); val(v1,v2,er); until er=0; i:=v2; z:=z+i; for x:=1 to i do begin nr:=nr+1; write('Podaj imie: '); readln(tab[nr].imie); if (tab[nr].imie='q') or (tab[nr].imie='Q') then break; write('Podaj nazwisko: '); readln(tab[nr].nazwisko); writeln; end; writeln('Wczytano uczniow...'); delay(1000); goto menu; end; 2: begin writeln('Usuwanie ucznia...'); write('Podaj nr ucznia do usuniecia: '); readln(nr); writeln('Czy na pewno chcesz usunac ucznia: ',tab[nr].imie,' ',tab[nr].nazwisko,' ? [T/N]'); readln(tn); if upcase(tn)='N' then goto menu else if upcase(tn)='T' then tab[nr].imie:=''; tab[nr].nazwisko:=''; delay(1000); tab[z+1]:=tab[nr]; tab[nr]:=tab[z]; z:=z-1; sortuj; end; 3: begin writeln('Wyswietlanie dziennika...'); for nr:=1 to z do begin write(nr,'. ',tab[nr].imie,' ',tab[nr].nazwisko); writeln; end; readkey; goto menu; end; 4: sortuj; 5: begin assign(f,plik); rewrite(f); for nr:=1 to z do write(f,tab[nr]); close(f); writeln('Zapisano...'); delay(1000); goto menu; end; 6: begin assign(f,plik); if not FileExists(plik) then begin writeln ('Plik nie istnieje...'); delay(1000); goto menu; end else begin reset(f); nr:=0; repeat nr:=nr+1; seek(f,nr-1); read(f,tab[nr]); until EOF(f); z:=nr; close(f); writeln('Wczytano...'); delay(800); goto menu; end; end; 7: halt; else goto kejs; end; readkey; end. |
Jedno pytanie… na co komu taki „dzienniczek”, skoro tylko nawet nie obsługuje dodawania ocen? Listę uczniów to nawet można sobie w notatniku zrobić, na pewno zrobi się to szybciej, niż w tym… ekhem… programie. A co do instrukcji „goto” – myślałem, że takie praktyki stosują tylko dzieci w przedszkolu, no cóż, chyba się myliłem…
programy na FX-Team to są też zadania domowe które robią właśnie osoby „w przedszkolu” a program nie jest użytkowy tak jak większość kodu które są wrzucane na stronę tylko w celach edukacyjnych, jak np. proste programy na szukanie największej liczby w tablicy (taki program przecież też się nikomu nie przyda bo można to np. w Excelu zrobić)
a co do nazwy, program nie był ukończony, to było zadanie domowe w stylu „napisz prosty program z obsługą pliku tekstowego”, oceny miały być dodane ale z programu została właściwie „Lista uczniów” a nie dzienniczek
Stworzenie tego programu miało tyle sensu co poświęcenie 10 lat na skonstruowanie robota, którego jedyną funkcją byłoby nalewanie wody do szklanki
A jaki cel jest w pisaniu programu na zadanie domowe w stylu „napisz program korzystający z pętli FOR”? Program był pisany w celu edukacyjnym, czyli żeby nauczyć się obsługi plików tekstowych itp.
Uwierz że w 1 klasie technikum na pierwszych zajęciach z programowania gdzie większość osób się dopiero uczy i pierwszy raz na oczy widzi kompilator robi się takie programy w celu nauki.
Co to GOTO, program pisałem na samym początku nauki programowania kiedy jeszcze nie przerobiliśmy na lekcji np. Switcha 🙂 Jakoś sobie radzić trzeba było mając wiedzę taką jak się miało, później się każdy doszkalał też we własnym zakresie.