View difference between Paste ID: mPZDtSGS and 3wcFpKau
SHOW: | | - or go back to the newest paste.
1
Type Stud=Record
2
     No: integer;
3
     name: string[12];
4
     Gr: string[8];
5
     o1, o2, o3: integer;
6
 end;
7
Var sf: string;
8
9
{ TForm1 }
10
procedure TabForFile;
11
var i: integer;
12
begin
13
  with Form1.StringGrid1 do
14
    begin
15
      ColCount:=6;
16
      RowCount:=50;
17
      ColWidths[0]:=20;
18
      ColWidths[1]:=120;
19
      ColWidths[2]:=80;
20
      ColWidths[3]:=40;
21
      ColWidths[4]:=40;
22
      ColWidths[5]:=40;
23
      Cells[0,0]:='№';
24
      Cells[1,0]:='Фамилия';
25
      Cells[2,0]:='Группа';
26
      Cells[3,0]:='Оценка 1';
27
      Cells[4,0]:='Оценка 2';
28
      Cells[5,0]:='Оценка 3';
29
      width:=25;
30
      for i:=0 to ColCount-1 do
31
        width:=width+ColWidths[i];
32
    end;
33
end;
34
35
Procedure ClearTab;
36
var i, j: integer;
37
begin
38
  with Form1.StringGrid1 do
39
  for i:=1 to RowCount-1 do
40
    if (Cells[0,i]<>'') then
41
      for j:=0 to ColCount-1 do
42
        begin
43
          Cells[j,i]:='';
44
        end;
45
end;
46
47
Procedure SaveToFileofStud;
48
Var f: file of Stud;
49
    s: Stud;
50
    i: integer;
51
begin
52
  Assignfile(f, sf);
53
  Rewrite(f);
54
  with Form1.StringGrid1 do
55
  for i:=1 to RowCount-1 do
56
  If (Cells[0,i]<>'') then
57
    begin
58
      s.No:=StrToInt(Cells[0,i]);
59
      s.name:=Cells[1,i];
60
      s.Gr:=Cells[2,i];
61
      s.o1:=StrToInt(Cells[3,i]);
62
      s.o2:=StrToInt(Cells[4,i]);
63
      s.o3:=StrToInt(Cells[5,i]);
64
      write(f,s);
65
    end;
66
  Closefile(f);
67
end;
68
69
procedure LoadFromFileOfStud;
70
var f: file of stud;
71
    s: stud;
72
    i: integer;
73
begin
74
  AssignFile(f, sf);
75
  Reset(f);
76
  with Form1.StringGrid1 do
77
  for i:=1 to filesize(f) do
78
    begin
79
      read(f,s);
80
      Cells[0,i]:=IntToStr(s.No);
81
      Cells[1,i]:=s.Name;
82
      Cells[2,i]:=s.Gr;
83
      Cells[3,i]:=IntToStr(s.o1);
84
      Cells[4,i]:=IntToStr(s.o2);
85
      Cells[5,i]:=IntToStr(s.o3);
86
    end;
87
  Closefile(f);
88
end;
89
90
91
procedure TForm1.MenuItem2Click(Sender: TObject);
92
begin
93
  ClearTab;
94
  StringGrid1.Modified:=False;
95
  sf:='';
96
  Form1.Caption:='Form1';
97
end;
98
99
procedure TForm1.FormCreate(Sender: TObject);
100
begin
101
  TabForFile;
102
  sf:='';
103
  StringGrid1.Options:=StringGrid1.Options+[goEditing];
104
end;
105
106
procedure TForm1.MenuItem3Click(Sender: TObject);
107
begin
108
  If StringGrid1.Modified then
109
    case MessageDlg('Текст был изменён' + #13 + 'Сохранить его?', mtConfirmation,[mbYes, mbNo, mbCancel],0) of
110
      mrYes: MenuItem5Click(self);
111
      mrNo: ;
112
      mrCancel: Exit;
113
    end;
114
  If openDialog1.Execute then
115
    begin
116
      sf:=OpenDialog1.FileName;
117
      LoadFromFileOfStud;
118
      StringGrid1.Modified:=False;
119
      Form1.Caption:='Form1' + sf;
120
    end;
121
end;
122
123
procedure TForm1.MenuItem4Click(Sender: TObject);
124
begin
125
    if StringGrid1.Modified then
126
      case MessageDlg('Данные о студентах были изменены' + #13 + 'Сохранить их?', mtConfirmation,[mbYes, mbNo, mbCancel],0) of
127
        mrYes: MenuItem5Click(self);
128
        mrNo:;
129
        mrCancel: Exit;
130
      end;
131
    ClearTab;
132
    StringGrid1.Modified:=False;
133
    sf:='';
134
    Form1.Caption:='Form1';
135
end;
136
137
procedure TForm1.MenuItem5Click(Sender: TObject);
138
begin
139
  if (sf='') then MenuItem5Click(self)
140
  else
141
    begin
142
      SaveToFileOfStud;
143
      StringGrid1.Modified:= False;
144
    end;
145
end;
146
147
procedure TForm1.MenuItem6Click(Sender: TObject);
148
begin
149
  If SaveDialog1.Execute then
150
    begin
151
      sf:=SaveDialog1.FileName;
152
      SaveToFileofStud;
153
      StringGrid1.Modified:=false;
154
      Form1.Caption:='Form1'+sf;
155
    end;
156
end;
157
158
procedure TForm1.MenuItem7Click(Sender: TObject);
159
begin
160
  If StringGrid1.Modified then
161
    case MessageDlg('Таблица была изменена' + #13 + 'Сохранить её?', mtConfirmation,[mbYes, mbNo, mbCancel],0) of
162
      mrYes: MenuItem5Click(self);
163
      mrNo: ;
164
      mrCancel: Exit;
165
    end;
166
  Close;
167
end;
168
169
procedure TForm1.MenuItem9Click(Sender: TObject);
170
var s: stud;
171
    f, nf: file of Stud;
172
    im: string;
173
begin
174
  // Подготавливаем файл для чтения
175
  Assignfile(f, sf);
176
  Reset(f);
177
  // Получаем имя нового файла
178
  im:=InPutBox('Введите имя нового файла','0','Список2');
179
  // Подготавливаем файл для записи
180
  Assignfile(nf, im);
181
  Rewrite(nf);
182
  // Записываем значения из первого файла в другой
183
  // Только те строки, которые не пустые и имеют чётный номер
184
  while not EOF(f) do
185
    begin
186
      read(f,s);
187
      if (s.No mod 2 = 0) then
188
        write(nf,s);
189
    end;
190
  // Закрывать надо ОБА файла
191
  Closefile(f);
192
  Closefile(nf);
193
  ClearTab;
194
  sf:=im;
195
  LoadFromFileOfStud;
196
end;
197
198
// в предыдущей процедуре ты создала файл, имя этого файла и осталось в этой процедуре
199-
var nf: file of stud;
199+
// новая процедура
200
procedure TForm1.MenuItem10Click(Sender: TObject);
201
var f: file of stud;
202
    s: stud;
203
    i: integer;
204
    j: integer;
205-
  AssignFile(nf, im);
205+
206-
  Reset(nf);
206+
207-
  i:=1;
207+
  // стандартный диалог перед выбором файла
208-
  while not Eof(nf) do
208+
209
    case MessageDlg('Текст был изменён' + #13 + 'Сохранить его?', mtConfirmation,[mbYes, mbNo, mbCancel],0) of
210-
  begin
210+
211-
    read(nf,s);
211+
212-
    if i<4 then
212+
213
    end;
214
215
  // Диалог выбора файла
216
  If openDialog1.Execute then
217
    begin
218
      // Получаем имя нужного файла
219
      sf:=OpenDialog1.FileName;
220
      // Файл для чтения
221-
    i:=i+1;
221+
      AssignFile(f, sf);
222-
  end;
222+
      Reset(f);
223
224
      i:=1;
225
      // Прверка нет ли конца файла и количество студентов,
226
      // которые уже были записаны в этом цикле в таблицу
227
      // Удобно тем что А - менее громоздко, и Б - студентов 
228
      // В файле может быть меньше трёх, например 2, и тогда этот цикл просто выведет
229
      // двух студентов, иначе как в прошлой версии у тебя произошла бы либо ошибка либо зацикливание
230
      while (not Eof(nf) and i < 4) do
231
      with Form1.StringGrid1 do
232
        begin
233
          // Считываем одного студента
234
          read(nf,s);
235
          // Заполняем им таблицу
236
          Cells[0,i]:=IntToStr(s.No);
237
          Cells[1,i]:=s.Name;
238
          Cells[2,i]:=s.Gr;
239
          Cells[3,i]:=IntToStr(s.o1);
240
          Cells[4,i]:=IntToStr(s.o2);
241
          Cells[5,i]:=IntToStr(s.o3);
242
          // 
243
          i:=i+1
244
        end;
245
      StringGrid1.Modified:=False;
246
      Form1.Caption:='Form1 FIRST 3 from ' + sf;
247
248
      // Закрываем файл
249
      Closefile(f);
250
    end;
251
252
end;