Помогите пожалуйста решить задачу, которая не дает мне покоя. На языке Free Pascal
Сделать программу электронного учета посещения занятий студентами. Робота с реестром происходит с помощью меню: 1)Ввод, 2)Вывод, 3)Поиск, 4)Изъятие.
1) Добавление записи в журнал: ФИО студента, Общее количество пропущенных занятий, Количество пропущенных по уважительной причине.
2)Вывод записей из журнала: порядковый номер, фамилия и инициалы студента, общее количество пропущенных занятий и количество пропущенных без уважительной причины.
3)Поиск - вывод списка студентов, количество пропущенных занятий без уважительной причины, которых превышает введенным пользователем.
4)Изъятие записи из журнала по введенной фамилии студента. ________________________________________________________________________________________________________
1. Задачу реализовать исключительно с использованием динамичных переменных и их структур(без единой статичной переменой в программе). 2. Использование стандартных процедур и функций Free Pascal, кроме: new, dispose, getmem, freemem, не допускается.
|
|
|
да... чуть-чуть велкувата вийшла, ну та норм. Код program Uchot; uses crt; const path = 'd:\1.txt'; var myfile : text; menu : integer; chek : boolean; //=============================================== procedure Entry(); var name, surname , patronymic , Quantity ,QuantityOfReason : String; begin writeln('Введите: имя'); readln( name); writeln('Введите фамилию'); readln( surname); writeln('Введите отчество'); readln( patronymic); writeln('Введите количество пропущенных занятий'); readln( Quantity); writeln('Введите количество пропущенных занятий по уважительной причине'); readln( QuantityOfReason);
assign(myfile, path); append(myfile); writeln(myfile, name ); writeln(myfile, surname); writeln(myfile, patronymic); writeln(myfile, Quantity); writeln(myfile, QuantityOfReason); close(myfile); end; //=============================================== procedure Output(); var name, surname , patronymic , Quantity ,QuantityOfReason : String; count : integer; begin assign(myfile, path); reset(myfile); count:=0; writeln('номер | фамилия | инициалы | КПР | КПРчУП'); while not eof(myfile) do begin readln( myfile, name ); readln( myfile, surname ); readln( myfile, patronymic ); readln( myfile, Quantity ); readln( myfile, QuantityOfReason ); count:= count +1 ; writeln(count, ' | ', surname, ' | ', name[1], '.', patronymic[1] , '. | ', Quantity, ' | ', QuantityOfReason ); end; close(myfile); writeln('Нажммите ентер чтоби вийти в меню'); readln; end; //=============================================== procedure Search(); var name, surname , patronymic , Quantity ,QuantityOfReason : String; count, kol, kolOfR, maxKol, code : integer; begin writeln('введите максимальное количество пропущенных занятийбез уважительной причины'); readln(maxKol);
assign(myfile, path); reset(myfile); count:=0; writeln('список студентов, количество пропущенных занятий без уважительной причины, которых превышает введенному'); writeln('номер | фамилия | инициалы | КПР | КПРчУП'); while not eof(myfile) do begin readln( myfile, name ); readln( myfile, surname ); readln( myfile, patronymic ); readln( myfile, Quantity ); readln( myfile, QuantityOfReason ); Val(Quantity, kol,code); Val(QuantityOfReason, kolOfR,code); if (kol - kolOfR > maxKol ) then begin count:= count +1 ; writeln(count, ' | ', surname, ' | ', name[1], '.', patronymic[1] , '. | ', Quantity, ' | ', QuantityOfReason ); end; end; close(myfile); writeln('Нажммите ентер чтоби вийти в меню'); readln; end; //=============================================== procedure Taking(); var name, surname , patronymic , Quantity ,QuantityOfReason : String; n, s, p, q, qor : array of string; ThisSurname : String; chek : boolean; count, i : integer; begin writeln('введите фамилию студена'); readln(ThisSurname); chek := false; count:=0; assign(myfile, path); reset(myfile); while not eof(myfile) do begin readln( myfile, name ); readln( myfile, surname ); readln( myfile, patronymic ); readln( myfile, Quantity ); readln( myfile, QuantityOfReason ); if ( ThisSurname <> surname) then begin SetLength(n, count+1); SetLength(s, count+1); SetLength(p, count+1); SetLength(q, count+1); SetLength(qor, count+1); n [count]:= name; s [count]:= surname; p [count]:= patronymic; q [count]:= Quantity; qor [count]:= QuantityOfReason; count:= count +1; end else chek := true; end; close(myfile); if (chek = false) then writeln('Нет студента с таким именем') else begin rewrite(myfile); for i := 0 to count-1 do begin writeln(myfile, n [i]); writeln(myfile, s [i]); writeln(myfile, p[i]); writeln(myfile, q[i]); writeln(myfile, qor[i]); end; close(myfile); end; writeln('Нажммите ентер чтоби вийти в меню'); readln; end; //=============================================== begin chek := true; while (chek) do begin clrscr; writeln('Меню: 1)Ввод, 2)Вывод, 3)Поиск, 4)Изъятие 5)Выход'); readln(menu); case menu of 1: Entry(); 2: Output(); 3: Search(); 4: Taking(); 5: chek := false; end; end; end. шлях до файлу можна змінити в Код const path = 'd:\1.txt'; якщо в Фрі паскаліі не буде працювати то можна там задати звичайні (а не динамічні масиви).
Verhovny Menko
|
|
|
Это конечно хорошо, но немного не то, что требуют от нас. Нужно сделать не через файл, а нужно использовать "списки" типо:
Код Program Prj_record; Type nameANDyearBirth = record sname, name, mname: string[30]; ybirth: word; end; snameANDinitials = string[34]; Var pers : nameANDyearBirth; ptr : ^snameANDinitials; Begin write('Введите фамилию: '); readln(pers.sname); write('Введите имя: '); readln(pers.name); write('Введите отчество: '); readln(pers.mname); write('Введите год рождения: '); readln(pers.ybirth); new(ptr); ptr^ := pers.sname+ ' '+pers.name[1]+' . '+pers.mname[1]+' . '; write(ptr^, ', ', pers.ybirth, ' г.р.'); dispose(ptr); readln; End.
|
|
|