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 | // новая процедура | |
200 | procedure TForm1.MenuItem10Click(Sender: TObject); | |
201 | var f: file of stud; | |
202 | s: stud; | |
203 | i: integer; | |
204 | j: integer; | |
205 | begin | |
206 | ||
207 | // стандартный диалог перед выбором файла | |
208 | If StringGrid1.Modified then | |
209 | case MessageDlg('Текст был изменён' + #13 + 'Сохранить его?', mtConfirmation,[mbYes, mbNo, mbCancel],0) of | |
210 | mrYes: MenuItem5Click(self); | |
211 | mrNo: ; | |
212 | mrCancel: Exit; | |
213 | end; | |
214 | ||
215 | // Диалог выбора файла | |
216 | If openDialog1.Execute then | |
217 | begin | |
218 | // Очищаем таблицу | |
219 | ClearTab; | |
220 | // Получаем имя нужного файла | |
221 | sf:=OpenDialog1.FileName; | |
222 | // Файл для чтения | |
223 | AssignFile(f, sf); | |
224 | Reset(f); | |
225 | ||
226 | i:=1; | |
227 | // Прверка нет ли конца файла и количество студентов, | |
228 | // которые уже были записаны в этом цикле в таблицу | |
229 | // Удобно тем что А - менее громоздко, и Б - студентов | |
230 | // В файле может быть меньше трёх, например 2, и тогда этот цикл просто выведет | |
231 | // двух студентов, иначе как в прошлой версии у тебя произошла бы либо ошибка либо зацикливание | |
232 | while (not Eof(nf) and i < 4) do | |
233 | with Form1.StringGrid1 do | |
234 | begin | |
235 | // Считываем одного студента | |
236 | read(nf,s); | |
237 | // Заполняем им таблицу | |
238 | Cells[0,i]:=IntToStr(s.No); | |
239 | Cells[1,i]:=s.Name; | |
240 | Cells[2,i]:=s.Gr; | |
241 | Cells[3,i]:=IntToStr(s.o1); | |
242 | Cells[4,i]:=IntToStr(s.o2); | |
243 | Cells[5,i]:=IntToStr(s.o3); | |
244 | // | |
245 | i:=i+1 | |
246 | end; | |
247 | StringGrid1.Modified:=False; | |
248 | Form1.Caption:='Form1 FIRST 3 from ' + sf; | |
249 | ||
250 | // Закрываем файл | |
251 | Closefile(f); | |
252 | end; | |
253 | ||
254 | end; |