Advertisement
Guest User

Внеучебная деятельность

a guest
Jan 16th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 30.22 KB | None | 0 0
  1. {
  2.   Об этом модуле:
  3.     1. Не надо пугаться размера кода, тут много повторяющегося, но я не знаю,
  4.     как этого избежать.
  5.  
  6.     2. Модуль получает на вход данные: студенческая группа.
  7.  
  8.     3. Модуль обращается к файлу со списком студентов и их данными по
  9.     внеучебной деятельности так же в процессе работы будет создаваться
  10.     временная копия этого файла, для того чтобы туда сохранялись все данные.
  11.     Это нужно потому, что делфи может дописывать данные только в конец файла,
  12.     но в 99.9% случаев требуется запись в разные места файла.
  13.  
  14.     4.  На форме располагаются:
  15.         Лейбл с номером группы;
  16.         Список со студентами;
  17.         Список с событиями;
  18.         Лейбл "балл" и поле для ввода этого самого балла;
  19.         Кнопка "добавить" - нужна для добавления выбранного события в список
  20.         событий, в которых принимал участие студент;
  21.         Лейбл "внеучебная деятельность студента";
  22.         Листбокс - поле, в которое будут выводиться события, в которых принимал
  23.         участие студент;
  24.         Кнопка "удалить" - для удаления события из списка.
  25.  
  26.     5.  Структура файла с внеучебным рейтингом такая: (представь таблицу)
  27.  
  28.         Группа | ФИО | Баллы за внеучебную деятельность.
  29.  
  30.         Думаю, первые два столбца понятные, но вот насчет третьего столбца:
  31.         Данные в третьем столбце хранятся в виде одномерного массива.
  32.         У одномерного массива есть элементы, у них свое значение, и каждый
  33.         элемент имеет свой индекс (порядковый номер). Так вот, значение
  34.         элемента - это балл, а порядковый номер элемента - это событие.
  35.         Дальше в коде будет понятно, что каждое событие имеет свой идентификатор
  36.         (id - это легче). Например, такая таблица:
  37.  
  38.         id  | Событие
  39.         ----------------
  40.         0   | Событие_1
  41.         ----------------
  42.         1   | Событие_2
  43.  
  44.         Если будет непонятно, то нарисую в универе на листочке и объясню.
  45. }
  46.  
  47. unit RatingVneUcheb;
  48.  
  49. interface
  50.  
  51. uses
  52.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  53.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, strutils,
  54.   Auth, FilesControl;
  55.  
  56. type
  57.   TForm5 = class(TForm)
  58.     Label1: TLabel;
  59.     ComboBox1: TComboBox;
  60.     ComboBox2: TComboBox;
  61.     Edit1: TEdit;
  62.     Label2: TLabel;
  63.     Button1: TButton;
  64.     Label3: TLabel;
  65.     Button2: TButton;
  66.     ListBox1: TListBox;
  67.     procedure FormCreate(Sender: TObject);
  68.     procedure ComboBox1Change(Sender: TObject);
  69.     procedure ComboBox2Change(Sender: TObject);
  70.     procedure Button1Click(Sender: TObject);
  71.     procedure Button2Click(Sender: TObject);
  72.   private
  73.     { Private declarations }
  74.   public
  75.     { Public declarations }
  76.   end;
  77.  
  78. var
  79.   Form5: TForm5;
  80.   // vuGr - переменная для группы, vuName - переменная для ФИО студента
  81.   // "vu" - значит "внеучебный рейтинг"
  82.   vuGr, vuName: string[30];
  83.   vuRating: integer; // переменная для рейтинга
  84.  
  85. implementation
  86.  
  87. {$R *.dfm}
  88.  
  89. uses
  90.   TeacherMode;
  91.  
  92. {Эта функция как бы определяет, что для СОБЫТИЯ предусмотрено определенное
  93. количество БАЛЛОВ}
  94. function EventToRating(event: integer):integer;
  95. begin
  96.   case event of
  97.     {Сначала у событий баллы как константы, они установлены и не меняются}
  98.     0: EventToRating:=50;
  99.     1: EventToRating:=40;
  100.     2: EventToRating:=30;
  101.     3: EventToRating:=25;
  102.     4: EventToRating:=10;
  103.  
  104.     5: EventToRating:=40;
  105.     6: EventToRating:=35;
  106.     7: EventToRating:=30;
  107.  
  108.     8: EventToRating:=30;
  109.     9: EventToRating:=25;
  110.     10: EventToRating:=20;
  111.  
  112.     11: EventToRating:=20;
  113.     12: EventToRating:=15;
  114.     13: EventToRating:=10;
  115.  
  116.     14: EventToRating:=15;
  117.     15: EventToRating:=10;
  118.     16: EventToRating:=5;
  119.  
  120.     {Но для вот этих событий по сути можно ставить баллы самому от 0 до
  121.     максимального значения, которое установлено. Поэтому тут баллы - это
  122.     максимальное значение.}
  123.     17: EventToRating:=10;
  124.     18: EventToRating:=5;
  125.     19: EventToRating:=10;
  126.     20: EventToRating:=15;
  127.     21: EventToRating:=25;
  128.   end;
  129. end;
  130.  
  131. {Эта функция определяет, какое СОБЫТИЕ соответствует ИДЕНТИФИКАТОРУ}
  132. function IdToEvent(id: integer):string;
  133. begin
  134.   case id of
  135.     {Например, НУЛЮ соответствует вот это}
  136.     0: IdToEvent:='Публикация научной статьи в зарубежном журнале или доклад на международной конференции';
  137.     {а ЕДИНИЦЕ соответствует вот это}
  138.     1: IdToEvent:='Публикация научной статьи в центральном отечественном журнале или доклад на Всероссийской конференции';
  139.     {и т.д.}
  140.     2: IdToEvent:='Публикация научной статьи в межвузовском сборнике или доклад на региональной конференции';
  141.     3: IdToEvent:='Доклад на вузовской научно-технической конференции';
  142.     4: IdToEvent:='Доклад на вузовской студенческой научной конференции';
  143.  
  144.     5: IdToEvent:='Призер Всероссийского конкурса студенческих научных работ (1 место)';
  145.     6: IdToEvent:='Призер Всероссийского конкурса студенческих научных работ (2 место)';
  146.     7: IdToEvent:='Призер Всероссийского конкурса студенческих научных работ (3 место)';
  147.  
  148.     8: IdToEvent:='Призер регионального конкурса студенческих научных работ (1 место)';
  149.     9: IdToEvent:='Призер регионального конкурса студенческих научных работ (2 место)';
  150.     10: IdToEvent:='Призер регионального конкурса студенческих научных работ (3 место)';
  151.  
  152.     11: IdToEvent:='Призер вузовского конкурса студенческих научных работ (1 место)';
  153.     12: IdToEvent:='Призер вузовского конкурса студенческих научных работ (2 место)';
  154.     13: IdToEvent:='Призер вузовского конкурса студенческих научных работ (3 место)';
  155.  
  156.     14: IdToEvent:='Призер тематической олимпиады, проводимой в вузе (1 место)';
  157.     15: IdToEvent:='Призер тематической олимпиады, проводимой в вузе (2 место)';
  158.     16: IdToEvent:='Призер тематической олимпиады, проводимой в вузе (3 место)';
  159.  
  160.     17: IdToEvent:='Выполнение творческих программ по заданиям кафедр';
  161.     18: IdToEvent:='По результатам итогового междисциплинарного экзамена по естественно - научному блоку дисциплин';
  162.     19: IdToEvent:='По результатам итогового междисциплинарного экзамена по специальности (направлению)';
  163.     20: IdToEvent:='Выполнение заданий Ученого совета факультета';
  164.     21: IdToEvent:='Выполнение задания Ученого совета ИГЭУ';
  165.   end;
  166. end;
  167.  
  168. {А вот эта функция делает обратное действие,
  169. определяет для СОБЫТИЯ его ИДЕНТИФИКАТОР}
  170. function EventToId(event: string):integer;
  171. begin
  172.   case AnsiIndexText(event, [
  173.     'Публикация научной статьи в зарубежном журнале или доклад на международной конференции',
  174.     'Публикация научной статьи в центральном отечественном журнале или доклад на Всероссийской конференции',
  175.     'Публикация научной статьи в межвузовском сборнике или доклад на региональной конференции',
  176.     'Доклад на вузовской научно-технической конференции',
  177.     'Доклад на вузовской студенческой научной конференции',
  178.  
  179.     'Призер Всероссийского конкурса студенческих научных работ (1 место)',
  180.     'Призер Всероссийского конкурса студенческих научных работ (2 место)',
  181.     'Призер Всероссийского конкурса студенческих научных работ (3 место)',
  182.  
  183.     'Призер регионального конкурса студенческих научных работ (1 место)',
  184.     'Призер регионального конкурса студенческих научных работ (2 место)',
  185.     'Призер регионального конкурса студенческих научных работ (3 место)',
  186.  
  187.     'Призер вузовского конкурса студенческих научных работ (1 место)',
  188.     'Призер вузовского конкурса студенческих научных работ (2 место)',
  189.     'Призер вузовского конкурса студенческих научных работ (3 место)',
  190.  
  191.     'Призер тематической олимпиады, проводимой в вузе (1 место)',
  192.     'Призер тематической олимпиады, проводимой в вузе (2 место)',
  193.     'Призер тематической олимпиады, проводимой в вузе (3 место)',
  194.  
  195.     'Выполнение творческих программ по заданиям кафедр',
  196.     'По результатам итогового междисциплинарного экзамена по естественно - научному блоку дисциплин',
  197.     'По результатам итогового междисциплинарного экзамена по специальности (направлению)',
  198.     'Выполнение заданий Ученого совета факультета',
  199.     'Выполнение задания Ученого совета ИГЭУ'
  200.   ]) of
  201.     0: EventToId:=0;
  202.     1: EventToId:=1;
  203.     2: EventToId:=2;
  204.     3: EventToId:=3;
  205.     4: EventToId:=4;
  206.     5: EventToId:=5;
  207.     6: EventToId:=6;
  208.     7: EventToId:=7;
  209.     8: EventToId:=8;
  210.     9: EventToId:=9;
  211.     10: EventToId:=10;
  212.     11: EventToId:=11;
  213.     12: EventToId:=12;
  214.     13: EventToId:=13;
  215.     14: EventToId:=14;
  216.     15: EventToId:=15;
  217.     16: EventToId:=16;
  218.     17: EventToId:=17;
  219.     18: EventToId:=18;
  220.     19: EventToId:=19;
  221.     20: EventToId:=20;
  222.     21: EventToId:=21;
  223.   end;
  224. end;
  225.  
  226. {Процедура, которая добавляет выбранное событие к списку всех событий, в которых
  227. принимал участие студент}
  228. procedure AddRating(e, r: integer);
  229. begin
  230.   Rewrite(f2); // Открытие основного файла для перезаписи
  231.   Reset(tmp2); // Открытие временного файла для чтения
  232.   while not eof(tmp2) do begin // Пока временный файл не закончился
  233.     Read(tmp2, Std2); // Читать строку с данными
  234.     {Условие: если прочитанная группа соответствует выбранной группе и
  235.     прочитанные ФИО студента соответствуют выбранному студенту, то}
  236.     if (Std2.gr=vuGr) and (Std2.sname=vuName) then
  237.       Std2.rating[e]:=r; { Добавление рейтинга. e - идентификатор события
  238.       r - количество баллов.}
  239.     Write(f2, Std2); // Запись в основной файл
  240.   end;
  241.   // Закрытие всех файлов
  242.   CloseFile(tmp2);
  243.   CloseFile(f2);
  244. end;
  245.  
  246. {То, что происходит, когда нажимают кнопку "Добавить"}
  247. procedure TForm5.Button1Click(Sender: TObject);
  248. var
  249.   event, rating, rate, err: integer;
  250.   {
  251.     event - идентификатор события
  252.     rating - рейтинг, который определен для события
  253.     rate - переменная для рейтинга (для преобразования строки в число)
  254.     err - переменная, которая будет содержать в себе код ошибки (потом будет
  255.     понятно зачем)
  256.   }
  257. begin
  258.   event:=ComboBox2.ItemIndex; // получаем идентификатор события
  259.  
  260.   {Если идентификатор больше или равен 17, значит это те события, для которых
  261.   мы сами ставим рейтинг от 0 до максимально возможного}
  262.   if event >= 17 then begin
  263.     {Проверка: если в поле для балла что-то ввели, тогда дальше проверяем балл,
  264.     а если не ввели, то надо вывести сообщение "Введите балл".}
  265.     if Edit1.Text <> '' then begin
  266.       {Функция, которая попытается преобразовать строку в число. Если удачно,
  267.       то код ошибки будет 0}
  268.       Val(Edit1.Text, rate, err);
  269.       {Проверяем, что код ошибки - 0. Если НЕ 0, то надо вывести сообщение
  270.       "Балл должен быть числом". То есть скорее всего человек ввел туда не
  271.       число, а какие-то символы}
  272.       if err=0 then begin
  273.         {В переменную rating попадет максимальное значение балла}
  274.         rating:=EventToRating(event);
  275.         {Если поставленный балл >= 0 и <= максимума, тогда продолжаем, а если
  276.         нет, тогда надо вывести ошибку "Балл меньше или больше возможного
  277.         значения"}
  278.         if (rate >= 0) and (rate <= rating) then begin
  279.           vuRating:=rate;
  280.  
  281.           //Проверка: если файл с внеучебной деятельностью существует, то
  282.           if FileExists(fileVneUcheb) then
  283.             // Создать временный файл для сохранения данных
  284.             FilesControl.SaveFileVneUcheb(fileVneUcheb)
  285.           else begin
  286.             // Иначе создать файл
  287.             FilesControl.CreateFileVneUcheb(fileVneUcheb);
  288.           end;
  289.           {Вообще это условие с файлами нужно если какой-то дурак решит
  290.           удалить файл с внеучебным рейтингом во время работы с программой}
  291.  
  292.           AddRating(event, vuRating); // Процедура для добавления рейтинга
  293.           {В Листбокс тоже надо добавить строчку, вот и добавляем
  294.           В ней происходит вызов функции, которая преобразует идентификатор в
  295.           событие и функция, которая преобразует число (баллы) в строку}
  296.           ListBox1.Items.Add(IdToEvent(event) + ' : ' + IntToStr(vuRating) + ' баллов.');
  297.           // Сообщение о том, что все хорошо
  298.           ShowMessage('Данные успешно добавлены');
  299.         end
  300.         else
  301.           ShowMessage('Балл меньше или больше возможного значения');
  302.       end
  303.       else
  304.         ShowMessage('Балл должен быть числом');
  305.     end
  306.     else ShowMessage('Введите балл');
  307.   end
  308.   {Тут все, что будет происходить, если идентификатор события меньше 17, то
  309.   есть это те события, для которых уже определены свои баллы и их вписывать
  310.   самому не надо}
  311.   else begin
  312.     {В переменную rating попадет назначенное количество баллов}
  313.     rating:=EventToRating(event);
  314.     vuRating:=rating;
  315.  
  316.     //Проверка: если файл с внеучебной деятельностью существует, то
  317.     if FileExists(fileVneUcheb) then
  318.       // Создать временный файл для сохранения данных
  319.       FilesControl.SaveFileVneUcheb(fileVneUcheb)
  320.     else begin
  321.       // Иначе создать файл
  322.       FilesControl.CreateFileVneUcheb(fileVneUcheb);
  323.     end;
  324.  
  325.     AddRating(event, vuRating); // Процедура для добавления рейтинга
  326.     {В Листбокс тоже надо добавить строчку, вот и добавляем
  327.     В ней происходит вызов функции, которая преобразует идентификатор в
  328.     событие и функция, которая преобразует число (баллы) в строку}
  329.     ListBox1.Items.Add(IdToEvent(event) + ' : ' + IntToStr(vuRating) + ' баллов.');
  330.     // Сообщение о том, что все хорошо
  331.     ShowMessage('Данные успешно добавлены');
  332.   end;
  333. end;
  334.  
  335. {То, что произойдет если нажать кнопку "удалить"}
  336. procedure TForm5.Button2Click(Sender: TObject);
  337. var
  338.   id, i, j: integer;
  339.   str: string;
  340. begin
  341.   {Цикл: от 0 до количества всех строчек в списке}
  342.   for i:=0 to ListBox1.Items.Count-1 do begin
  343.     {Если мышкой нажали по событию в списке, тогда}
  344.     if ListBox1.Selected[i] then begin
  345.       {В переменную str поступит выбранная строка}
  346.       str:=ListBox1.Items.Strings[i];
  347.  
  348.       {Так, у нас в str будет строка вида "Событие : кол-во баллов". Нам надо
  349.       из этой строки сделать строку, в которой нет ничего про баллы, только само
  350.       событие, чтобы потом можно было преобразовать событие в его идентификатор,
  351.       поэтому цикл: от 0 до конца строки}
  352.       for j:=0 to length(str)-1 do begin
  353.         {Если встретился символ ":", тогда }
  354.         if (str[j]=':') then begin
  355.           {Удалить часть строки, чтобы осталось только событие}
  356.           delete(str, j-1, length(str)-j+2);
  357.           break; // Выход из цикла
  358.         end;
  359.       end;
  360.  
  361.       {Вызов функции для преобразования события в идентификатор и занесение
  362.       значения в переменную id}
  363.       id:=EventToId(str);
  364.  
  365.       {Опять проверка на существование файла, по аналогии с предыдущими такими
  366.       проверками}
  367.       if FileExists(fileVneUcheb) then
  368.         FilesControl.SaveFileVneUcheb(fileVneUcheb)
  369.       else begin
  370.         FilesControl.CreateFileVneUcheb(fileVneUcheb);
  371.       end;
  372.  
  373.       {Открытие файлов и обнуление выбранного события}
  374.       Rewrite(f2);
  375.       Reset(tmp2);
  376.       while not eof(tmp2) do begin
  377.         Read(tmp2, Std2);
  378.         if (Std2.gr=vuGr) and (Std2.sname=vuName) then
  379.           Std2.rating[id]:=0;
  380.         Write(f2, Std2);
  381.       end;
  382.       CloseFile(tmp2);
  383.       CloseFile(f2);
  384.     end;
  385.   end;
  386.  
  387.   // Удаление строки из списка
  388.   ListBox1.DeleteSelected;
  389. end;
  390.  
  391. {То, что происходит когда выбирают студента}
  392. procedure TForm5.ComboBox1Change(Sender: TObject);
  393. var
  394.   i: integer;
  395.   str: string;
  396. begin
  397.   ComboBox2.Visible:=true; // Появляется список событий
  398.   Label3.Visible:=true; // Появляется лейбл3
  399.   Button2.Visible:=true; // Появляется кнопка "Удалить"
  400.   ListBox1.Visible:=true; // Появляется список событий этого студента
  401.   ListBox1.Clear; // На всякий случай этот список отчищается
  402.  
  403.   vuGr:=Auth.fio; // назначается группа
  404.   vuName:=ComboBox1.Text; // назначается имя (судя по выбранному студенту)
  405.  
  406.   // Опять проверка наличия файла
  407.   if FileExists(fileVneUcheb) then
  408.     FilesControl.SaveFileVneUcheb(fileVneUcheb)
  409.   else begin
  410.     FilesControl.CreateFileVneUcheb(fileVneUcheb);
  411.   end;
  412.  
  413.   {Дальше читается файл, в нем ищутся строки где совпадет группа и выбранный
  414.   студент. Дальше просматривается его рейтинг, если значение для какого-либо
  415.   события не равно 0, то оно записывается в список его событий, иначе -
  416.   игнорируется}
  417.   Reset(f2);
  418.   while not eof(f2) do begin
  419.     str:='';
  420.  
  421.     Read(f2, Std2);
  422.     if (Std2.gr=vuGr) and (Std2.sname=vuName) then begin
  423.       for i:=0 to 21 do begin
  424.         if Std2.rating[i] <> 0 then begin
  425.           str:=IdToEvent(i) + ' : ' + IntToStr(Std2.rating[i]) + ' баллов.';
  426.           ListBox1.Items.Add(str);
  427.         end;
  428.       end;
  429.     end;
  430.   end;
  431.   CloseFile(f2);
  432. end;
  433.  
  434. {То, что происходит когда выбирают событие}
  435. procedure TForm5.ComboBox2Change(Sender: TObject);
  436. begin
  437.   Button1.Visible:=true; // Появляется кнопка "добавить"
  438.  
  439.   {Если идентификаторы события от 17 до 21, то появляется надпись "балл" и
  440.   поле для ввода балла}
  441.   if ComboBox2.ItemIndex in [17..21] then begin
  442.     Label2.Visible:=true;
  443.     Edit1.Visible:=true;
  444.   end
  445.   {Иначе скрыть надпись и поле для ввода}
  446.   else begin
  447.     Label2.Visible:=false;
  448.     Edit1.Visible:=false;
  449.   end;
  450. end;
  451.  
  452. {То, что происходит при создании формы}
  453. procedure TForm5.FormCreate(Sender: TObject);
  454. var
  455.   students: array [1..50] of string;
  456.   i, j: integer;
  457.   same: boolean;
  458.  
  459. begin
  460.   // Назначается заголовок
  461.   Self.Caption:='Журнал - Выставление оценок за внеучебную деятельность';
  462.   Self.Position:=poDesktopCenter; // Назначается позиция формы (центр экрана)
  463.  
  464.   // Назначение файлов
  465.   AssignFile(f2, fileVneUcheb);
  466.   AssignFile(tmp2, fileVneUchebTmp);
  467.  
  468.   // Список мероприятий
  469.   ComboBox2.Text:='Выберите мероприятие';
  470.   ComboBox2.Items.Clear;
  471.  
  472.   ComboBox2.Items.Add('Публикация научной статьи в зарубежном журнале или доклад на международной конференции - 50 баллов.');
  473.   ComboBox2.Items.Add('Публикация научной статьи в центральном отечественном журнале или доклад на Всероссийской конференции - 40 баллов.');
  474.   ComboBox2.Items.Add('Публикация научной статьи в межвузовском сборнике или доклад на региональной конференции - 30 баллов.');
  475.   ComboBox2.Items.Add('Доклад на вузовской научно-технической конференции - 25 баллов.');
  476.   ComboBox2.Items.Add('Доклад на вузовской студенческой научной конференции - 10 баллов.');
  477.  
  478.   ComboBox2.Items.Add('Призер Всероссийского конкурса студенческих научных работ (1 место) - 40 баллов.');
  479.   ComboBox2.Items.Add('Призер Всероссийского конкурса студенческих научных работ (2 место) - 35 баллов.');
  480.   ComboBox2.Items.Add('Призер Всероссийского конкурса студенческих научных работ (3 место) - 30 баллов.');
  481.  
  482.   ComboBox2.Items.Add('Призер регионального конкурса студенческих научных работ (1 место) - 30 баллов.');
  483.   ComboBox2.Items.Add('Призер регионального конкурса студенческих научных работ (2 место) - 25 баллов.');
  484.   ComboBox2.Items.Add('Призер регионального конкурса студенческих научных работ (3 место) - 20 баллов.');
  485.  
  486.   ComboBox2.Items.Add('Призер вузовского конкурса студенческих научных работ (1 место) - 20 баллов.');
  487.   ComboBox2.Items.Add('Призер вузовского конкурса студенческих научных работ (2 место) - 15 баллов.');
  488.   ComboBox2.Items.Add('Призер вузовского конкурса студенческих научных работ (3 место) - 10 баллов.');
  489.  
  490.   ComboBox2.Items.Add('Призер тематической олимпиады, проводимой в вузе (1 место) - 15 баллов.');
  491.   ComboBox2.Items.Add('Призер тематической олимпиады, проводимой в вузе (2 место) - 10 баллов.');
  492.   ComboBox2.Items.Add('Призер тематической олимпиады, проводимой в вузе (3 место) - 5 баллов.');
  493.  
  494.   ComboBox2.Items.Add('Выполнение творческих программ по заданиям кафедр - до 10 баллов.');
  495.   ComboBox2.Items.Add('По результатам итогового междисциплинарного экзамена по естественно - научному блоку дисциплин - до 5 баллов.');
  496.   ComboBox2.Items.Add('По результатам итогового междисциплинарного экзамена по специальности (направлению) - до 10 баллов.');
  497.   ComboBox2.Items.Add('Выполнение заданий Ученого совета факультета - до 15 баллов.');
  498.   ComboBox2.Items.Add('Выполнение задания Ученого совета ИГЭУ - до 25 баллов.');
  499.   // конец списка мероприятий
  500.  
  501.   Label1.Caption:=Label1.Caption+Auth.fio; //Будет написана выбранная группа
  502.  
  503.   ComboBox2.Visible:=false; //
  504.   Label2.Visible:=false; //
  505.   Edit1.Visible:=false; //
  506.   Button1.Visible:=false; // Все эти элементы будут скрыты
  507.  
  508.   Label3.Visible:=false; //
  509.   Button2.Visible:=false; //
  510.   ListBox1.Visible:=false; // Эти тоже
  511.  
  512.   {Заполнение массива со студентами}
  513.   j:=1;
  514.   Reset(f2);
  515.   while not eof(f2) do begin
  516.     same:=false;
  517.     students[j]:=''; // создание пустого элемента массива (имя)
  518.     Read(f2, Std2); // чтение данных из файла
  519.     // Если прочитанная группа соответствует выбранной группе
  520.     if Std2.gr=Auth.fio then begin
  521.       for i:=1 to j do // проверка каждого элемента массива
  522.         // если имя и группа уже есть в массиве
  523.         if Std2.sname = students[i] then
  524.           same:=true; // повтор = правда
  525.       if same=false then begin // если нет повторения
  526.         students[j]:=Std2.sname; // добавляем имя в массив
  527.         j:=j+1;
  528.       end;
  529.     end;
  530.   end;
  531.   CloseFile(f2); // Закрытие файла
  532.  
  533.   for i:=1 to j-1 do // заполняем ComboBox данными из массива
  534.     ComboBox1.Items.Add(students[i]);
  535. end;
  536.  
  537. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement