Новые сообщения · Правила  
Страница 1 из 11
Модератор форума: Berestovskiy 
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » Паскаль » Сделать программу, используя: указатели, динамичные структур (Указатели, динамичные структуры.)
Сделать программу, используя: указатели, динамичные структур
Помогите пожалуйста решить задачу, которая не дает мне покоя. На языке Free Pascal 

Сделать программу электронного учета посещения занятий студентами. Робота с  реестром  происходит с помощью меню: 1)Ввод, 2)Вывод, 3)Поиск, 4)Изъятие.

1) Добавление записи в журнал: ФИО студента, Общее количество пропущенных занятий, Количество пропущенных по уважительной причине.

2)Вывод записей из журнала: порядковый номер, фамилия и инициалы студента, общее количество пропущенных занятий и количество пропущенных без уважительной причины.

3)Поиск -  вывод списка студентов, количество пропущенных занятий без уважительной причины, которых превышает введенным пользователем.

4)Изъятие записи из журнала по введенной фамилии студента.
________________________________________________________________________________________________________

1. Задачу реализовать исключительно с использованием динамичных переменных и их структур(без единой статичной переменой в программе).
2. Использование стандартных процедур и функций Free Pascal,   кроме: new, dispose, getmem, freemem,  не допускается.
1 | Автор: Turk | 2015-11-30, 13:56   |  Репутация: [ + 0 ]
да... чуть-чуть велкувата вийшла, ну та норм.

Код
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';
якщо в Фрі паскаліі не буде працювати 
Код
SetLength
то можна там задати звичайні (а не динамічні масиви).  smile


Verhovny Menko
2 | Автор: Verhovny_Menko | 2015-11-30, 21:22   |  Репутация: [ + 7 ]


Verhovny Menko
2 | Автор: Verhovny_Menko | 2015-11-30, 21:22   |  Репутация: [ + 7 ]
Это конечно хорошо, но немного не то, что требуют от нас.
Нужно сделать не через файл,  а нужно использовать "списки" 
типо: 
Код
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.
3 | Автор: Turk | 2015-11-30, 21:59   |  Репутация: [ + 0 ]
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » Паскаль » Сделать программу, используя: указатели, динамичные структур (Указатели, динамичные структуры.)
Страница 1 из 11
Поиск: