1. Валентин Озеров «Советы по Delphi», 1999
2. Зуев Е.А. Программирование на языке Turbo Pascal 6.0,7.0. – М.: Радио и связь, Веста, 1993.
3. ФароновВ.В. Turbo Pascal 7.0. Начальный курс. - М.: Нолидж, 2000.
4. Фаронов В.В. «DELPHI. Программирование на языке высокого уровня». – Питер, 2005.
5. Дятченко Д.А. Методические указания к выполнению курсовой работы по дисциплине «Программирование и алгоритмические языки»– Северодонецк, 2005.
ПРИЛОЖЕНИЕ ААлгоритм программы
Рисунок А.1 – Обработка событий главной формы программы
Рисунок А.2 – Открытие файла
типизированный файл программирование delphi
Рисунок А.3 – Алгоритм процедуры сохранения в файл
Рисунок А.4 – Алгоритм вывода содержимого массива AComp на форму
Листинг программы
1. unit Unit1;
2. interface
3. uses
4. Windows, Messages, SysUtils, Variants, Classes, Graphics,
5. Controls, Forms,Dialogs, Menus, StdCtrls, Buttons, ExtCtrls,
6. Grids;
7. type
8. TForm1 = class(TForm)
9. MainMenu1: TMainMenu;
10. N1: TMenuItem;
11. NOpen: TMenuItem;
12. NSave: TMenuItem;
13. NSaveAs: TMenuItem;
14. NCreate: TMenuItem;
15. N6: TMenuItem;
16. NExit: TMenuItem;
17. NInfo: TMenuItem;
18. NShow: TMenuItem;
19. SaveDlg: TSaveDialog;
20. OpenDlg: TOpenDialog;
21. Label1: TLabel;
22. Label2: TLabel;
23. Label3: TLabel;
24. Label4: TLabel;
25. Label9: TLabel;
26. EHDD: TEdit;
27. ERAM: TEdit;
28. EMonitor: TEdit;
29. RGrInet: TRadioGroup;
30. EName: TEdit;
31. SGrid1: TStringGrid;
32. BBPrev: TBitBtn;
33. BBNext: TBitBtn;
34. BBDelete: TBitBtn;
35. BBAdd: TBitBtn;
36. BBUpdate: TBitBtn;
37. BBSearch: TBitBtn;
38. procedure FormCreate(Sender: TObject);
39. procedure NCreateClick(Sender: TObject);
40. procedure NOpenClick(Sender: TObject);
41. procedure NShowClick(Sender: TObject);
42. procedure NSaveClick(Sender: TObject);
43. procedure NSaveAsClick(Sender: TObject);
44. procedure NExitClick(Sender: TObject);
45. procedure NInfoClick(Sender: TObject);
46. procedure BBPrevClick(Sender: TObject);
47. procedure BBNextClick(Sender: TObject);
48. procedure BBUpdateClick(Sender: TObject);
49. procedure BBAddClick(Sender: TObject);
50. procedure BBDeleteClick(Sender: TObject);
51. procedure BBSearchClick(Sender: TObject);
52. private
53. { Private declarations }
54. public
55. { Public declarations }
56. end;
57. TComp = record
58. Name:string[20];
59. HDD:real;
60. RAM:integer;
61. Monitor:string[20];
62. Inet:boolean; {true - есть, false - нет}
63. end;
64. ATComp = array of TComp;
65. var
66. Form1: TForm1;
67. F:file of TComp;
68. Comp:TComp;
69. AComp:ATComp;
70. CurK:integer;
71. Fname:string;
72. implementation
73.
74. uses Unit2;
75.
76. {$R *.dfm}
77. // поиск компьютера по имени
78. Function GetComp(name:string;AComp:ATComp;var Comp:TComp):boolean;
79. var i:integer;
80. begin
81. for i:=0 to Length(AComp)-1 do
82. if AComp[i].Name = Name then
83. begin
84. Comp:=AComp[i];
85. GetComp:=true;
86. exit;
87. end;
88. GetComp:=false;
89. end;
90. // вывод информации об одном компьютерера из типизированного файла на экранную форму
91. Procedure ShowComp(Comp:TComp);
92. begin
93. Form1.EName.Text:=Comp.Name;
94. Form1.EHDD.Text:=FloatToStr(Comp.HDD);
95. Form1.ERAM.Text:=IntToStr(Comp.RAM);
96. if Comp.Inet then
97. Form1.RgrInet.ItemIndex := 1
98. else
99. Form1.RgrInet.ItemIndex:=0;
100. Form1.EMonitor.Text:=Comp.Monitor;
101. end;
102. // вывод информации о компьютере из типизированного файла в таблицу
103. Procedure ShowCompInGrid(Comp:TComp;Sgr:TStringGrid;Row:integer);
104. begin
105. Sgr.Cells[0,Row]:=IntToStr(Row);
106. Sgr.Cells[1,Row]:=Comp.Name;
107. Sgr.Cells[2,Row]:=FloatToStr(Comp.HDD);
108. Sgr.Cells[3,Row]:=IntToStr(Comp.RAM);
109. Sgr.Cells[4,Row]:=Comp.Monitor;
110. if Comp.Inet then
111. Sgr.Cells[5,Row]:='есть'
112. else
113. Sgr.Cells[5,Row]:='нет';
114. end;
115. // вывод содержимого массива FComp в таблицу
116. Procedure ShowAComp(AComp:ATComp;Sgr:TStringGrid);
117. var i,ln:integer;
118. begin
119. ln:=Length(AComp);
120. if ln = 0 then
121. Sgr.RowCount:=2
122. else
123. Sgr.RowCount:=ln+1;
124. SGr.FixedRows:=1;
125. for i:=0 to LN-1 do
126. ShowCompInGrid(AComp[i],Sgr,i+1);
127. end;
128. // добавление новой записи в массив
129. procedure TForm1.BBAddClick(Sender: TObject);
130. var
131. k:integer;
132. begin
133. Comp.Name:=EName.Text;
134. Comp.HDD:=StrToFloat(EHDD.Text);
135. Comp.RAM:=StrToInt(ERAM.Text);
136. Comp.Monitor:=EMonitor.Text;
137. Comp.Inet:=RgrInet.ItemIndex = 1;
138. //
139. if GetComp(Comp.Name,AComp,Comp) then
140. begin
141. MessageBox(0,PAnsiChar(String('Ошибка! Запись компьютера с именем '+Comp.Name+' уже существует!')),'Ошибка',0);
142. exit;
143. end;
144. k:=Length(AComp);
145. SetLength(AComp,k+1);
146. AComp[k]:=Comp;
147. CurK:=k;
148. ShowAComp(AComp,SGrid1);
149. end;
150. // переход на предыдущую запись массива
151. procedure TForm1.BBPrevClick(Sender: TObject);
152. begin
153. curK:=CurK-1;
154. if CurK<0 then CurK:=Length(AComp)-1;
155. if CurK < Length(AComp) then
156. ShowComp(AComp[CurK]);
157. end;
158. // переход на последующую запись массива
159. procedure TForm1.BBNextClick(Sender: TObject);
160. begin
161. curK:=CurK+1;
162. if CurK>=Length(AComp) then CurK:=0;
163. if CurK < Length(AComp) then
164. ShowComp(AComp[CurK]);
165. end;
166. // сохранение содержимого массива в типизированном файле
167. procedure TForm1.NSaveClick(Sender: TObject);
168. var i:integer;
169. begin
170. if Fname = '' then
171. MessageBox(0,'Имя файла не задано!','Ошибка',0)
172. else begin
173. AssignFile(F,Fname);
174. Rewrite(f);
175. for i:=0 to Length(AComp)-1 do
176. write(f,AComp[i]);
177. CloseFile(F);
178. end;
179. end;
180. // сохранение в содержимого массива в типизированном файле
181. // с возможностью указания имени файла
182. procedure TForm1.NSaveAsClick(Sender: TObject);
183. var i:integer;
184. begin
185. if SaveDlg.Execute then
186. begin
187. Fname:=SaveDlg.FileName;
188. AssignFile(F,Fname);
189. Rewrite(f);
190. for i:=0 to Length(AComp)-1 do
191. write(f,AComp[i]);
192. CloseFile(F);
193. end;
194. end;
195. // открытие типизированного файла и вывод его содержимого на форму
196. procedure TForm1.NOpenClick(Sender: TObject);
197. var K:integer;
198. begin
199. if OpenDlg.Execute then
200. begin
201. Fname:=OpenDlg.FileName;
202. AssignFile(F,Fname);
203. ReSet(f);
204. k:=0;
205. SetLength(AComp,0);
206. while not eof(f) do
207. begin
208. read(f,Comp);
209. SetLength(AComp,k+1);
210. AComp[k]:=Comp;
211. k:=k+1;
212. end;
213. CloseFile(F);
214. ShowAComp(AComp,SGRid1);
215. end;
216. end;
217. // удаление текущей записи из массива записей AComp
218. procedure TForm1.BBDeleteClick(Sender: TObject);
219. var i,Ln:integer;
220. begin
221. Ln:=Length(AComp);
222. for i:=CurK to Ln-2 do
223. AComp[i]:=AComp[i+1];
224. if Ln>0 then
225. SetLength(AComp,Ln-1);
226. if CurK<ln then
227. ShowComp(AComp[CurK]);
228. ShowAComp(AComp,SGrid1);
229. end;
230. // Создание нового массива записей
231. procedure TForm1.NCreateClick(Sender: TObject);
232. begin
233. CurK:=0;
234. SetLength(AComp,0);
235. Fname:='';
236. ShowAComp(AComp,SGrid1);
237. end;
238. // созание формы - формирование шапки таблицы
239. procedure TForm1.FormCreate(Sender: TObject);
240. begin
241. SGrid1.Cells[0,0]:='№ п/п';
242. SGrid1.Cells[1,0]:='Имя ПК';
243. SGrid1.Cells[2,0]:='Объём памяти';
244. SGrid1.Cells[3,0]:='Объём ОП';
245. SGrid1.Cells[4,0]:='Тип монитора';
246. SGrid1.Cells[5,0]:='Подключениек Internet';
247. end;
248. // чтение инофрмации из полей ввода и обновление
249. // данных текцщей записи в массиве AComp
250. procedure TForm1.BBUpdateClick(Sender: TObject);
251. begin
252. Comp.Name:=EName.Text;
253. Comp.HDD:=StrToFloat(EHDD.Text);
254. Comp.RAM:=StrToInt(ERAM.Text);
255. Comp.Monitor:=EMonitor.Text;
256. Comp.Inet:=RgrInet.ItemIndex = 1;
257. //
258. AComp[CurK]:=Comp;
259. ShowCompInGrid(Comp,SGrid1,CurK+1);
260. end;
261. // ввод информации типизированного файла на форму
262. procedure TForm1.NShowClick(Sender: TObject);
263. var k:integer;
264. begin
265. AssignFile(F,Fname);
266. ReSet(f);
267. k:=0;
268. SetLength(AComp,0);
269. while not eof(f) do
270. begin
271. read(f,Comp);
272. SetLength(AComp,k+1);
273. AComp[k]:=Comp;
274. k:=k+1;
275. end;
276. CloseFile(F);
277. ShowAComp(AComp,SGRid1);
278. end;
279. // поиск записей, удовлетворяющих условию поиска
280. procedure TForm1.BBSearchClick(Sender: TObject);
281. var i,k:integer;
282. Ares:ATComp;
283. begin
284. Comp.Name := EName.Text;
285. if EHDD.Text = '' then
286. Comp.HDD:=0
287. else
288. Comp.HDD:=StrtoFloat(EHDD.Text);
289. if ERAM.Text = '' then
290. Comp.RAM:=0
291. else
292. Comp.RAM:=StrtoInt(ERAM.Text);
293.
294. Comp.Monitor:=EMonitor.Text;
295. Comp.Inet:=RgrInet.ItemIndex = 1;
296. //
297. k:=0;
298. for i:=0 to Length(AComp) do
299. if ((Comp.Name='')or(Pos(Comp.Name,AComp[i].Name)<>0))and
300. ((Comp.HDD=0)or(Comp.HDD = AComp[i].HDD))and
301. ((Comp.RAM=0)or(Comp.RAM = AComp[i].RAM))and
302. ((Comp.Monitor='')or
303. (Pos(Comp.Monitor,AComp[i].Monitor)<>0))and
304. (Comp.Inet = AComp[i].Inet) then
305. begin
306. SetLength(Ares,k+1);
307. Ares[k]:=AComp[i];
308. k:=k+1;
309. end;
310. ShowAComp(Ares,SGrid1);
311. end;
312. // вывод информации о программе
313. procedure TForm1.NInfoClick(Sender: TObject);
314. begin
315. AboutBox.ShowModal;
316. end;
317. // завершение работы приложения
318. procedure TForm1.NExitClick(Sender: TObject);
319. begin
320. close;
321. end;
322. end.
Протокол выполнения программы
Созданная программа позволяет добавлять, редактировать и удалять записи, так же позволяет осуществлять поиск по нескольким полям.
При редактировании или удалении данных