Описание процедуры BOpenClick
Эта процедура является обработчиком события onClick для объектa NOpen, то есть запускается при щелчке на указанном объекте. В теле этого вызывается стандартный диалог открытия файла, в случае, если диалог был завершен успешно, имя файла сохраняется в переменной FName, производится чтение содержимого исходного файла в массив AComp, а затем его содержимое выводится на форму при помощи процедуры ShowAComp. Алгоритм процедуры приведен на рисунке А.2. Процедура NShowClick является обработчиком события onClick для объектa NShow. В ней тоже происходит чтение файла в массив AComp и вывод содержимого на форму. Однако в этой процедуре не выполняется запуск диалога открытия файла, а производится чтение текущего файла, имя которого занесено в FName. Описание процедуры BSaveAsClick Эта процедура является обработчиком события onClick для объектa NSaveAs, то есть запускается при щелчке на указанном объекте. В теле этого вызывается стандартный диалог сохранения файла, в случае, если диалог был завершен успешно, имя файла сохраняется в переменной FName, производится сохранение содержимого массива AComp в файл с указанным именем. Алгоритм процедуры приведен на рисунке А.3. Процедура NSaveClick является обработчиком события onClick для объектa NSave. В ней тоже происходит сохранение содержимого массива AComp в файл на жестком диске, однако в этой процедуре не выполняется запуск диалога сохранения файла, а производится сохранение в текущий файл, имя которого занесено в FName.
Процедуры навигации и редактирования Процедура BBPrevClick является обработчиком события onClick для объектa BBPrev. Предназначена для перехода не предыдущую запись, для чего номер текущей записи CurK уменьшается на 1 и выводится на форму запись AComp[CurK] при помощи ShowComp. Следует заметить, что если текущая запись первая, то нажатие на кнопку переводит указатель на последнюю запись массива. Процедура BBNextClick является обработчиком события onClick для объектa BBNext. Предназначена для перехода не следующую запись, для чего номер текущей записи CurK увеличивается на 1, а на форму выводится запись AComp[CurK] при помощи ShowComp. Следует заметить, что если текущая запись последняя, то нажатие на кнопку переводит указатель на первую запись массива. Процедура BBDeleteClick является обработчиком события onClick для объектa BBDelete. Предназначена для удаления записи, для чего все записи после позиции CurK сдвигаются на одну позицию влево, а размерность массива уменьшается на 1. Процедура BBUpdateClick является обработчиком события onClick для объектa BBUpdate. Предназначена для изменения данных о компьютере. В процедуре содержимое из полей ввода формы переносится в соответствующие поля текущего компьютера под номером CurK. Процедура BBAddClick является обработчиком события onClick для объектa BBAdd. Предназначена для добавления данных о новом компьютере. В процедуре содержимое из полей ввода формы переносится в соответствующие поля компьютера, размер массива AComp увеличивается на 1 и новая запись добавляется в конец массива. Процедура BBSearchClick является обработчиком события onClick для объектa BBSearch. Предназначена для поиска компьютеров по какому либо критерию. В процедуре анализируется содержимое из полей ввода формы, если содержимое пустое, то в поиске это поле не учитывается, если же нет, то происходит поиск записей с указанным значением соответствующего поля. Условия по всем полям объединяются условием И. Содержимое выборки заносится в массив Ares и выводится на форму. Следует заметить, что по текстовым полям «Наименование компьютера», «Тип монитора» выполняется сравнение не на полное соответствие строк, а на наличие указанной подстроки. То есть, если поле содержит искомый фрагмент и еще какую-то информацию, то такой компьютер тоже будет выведен.
4 ИНСТРУКЦИЯ ОПЕРАТОРУ
Разработанная программа представляет собой исполняемый файл Computers.exe размером 493 568 байт. В программе выполняется обработка типизированных файлов. После запуска программы появляется окно, изображенное на рисунке 4.1.
Рисунок 4.1 – Главное окно программы
Главное меню содержит пункты: - «Информация» (при нажатии запускается диалог с информацией о задании и разработчике, изображенный на рисунке 4.2); - «Открыть файл» (при нажатии запускается диалог открытия файла, изображенный на рисунке 4.3) - «Перенос» (при нажатии выполняются действия согласно заданию) - «Сохранить результат» (при нажатии запускается диалог сохранения файла, изображенный на рисунке 4.4); - «Выход» (закрывает программу)
Рисунок 4.2 – Информационное окно «Задание»
Рисунок 4.3 – Диалог открытия файла
Рисунок 4.4 – Диалог сохранения файла
В качестве примера введем некоторые данные о нескольких компьютерах и сохраним в файле, нажав на пункт меню «Сохранить как». При помощи кнопок «Предыдущая запись» и «Следующая запись» можно перемещаться между записями о компьютерах. Если необходимо изменить данные о каком то компьютере, то необходимо перейти на запись о нем, изменить соответствующие данные в индивидуальных полях, а потом нажать на кнопку «Обновить». Запись этого компьютера в массиве будет изменена. Для удаления записи следует нажать на кнопку «Удалить». Для поиска нужно в требуемые поля написать данные запроса и нажать на кнопку «Поиск». Если записи по заданным критериям найдены, то информация об этих компьютерах будет выведена на форму. Например, пусть критерием поиска будет имя ‘USER1 ’, а остальные поля оставим незаполненными. В результате будет выполнен поиск, выведены результаты, изображенные на рисунке 4.5. По результатам видно, что выводится компьютер с указанным именем. Если мы хотим вновь отобразить содержимое обо всех введенных компьютерах, необходимо нажать на пункт главного меню Файл-> Показать. (см рисунок 4.6).
Рисунок 4.5 – Пример поиска
Рисунок 4.6 - Содержимое файла Можно осуществить поиск по нескольким полям, например: выведем все компьютеры с объемом оперативной памяти 256 Мб и имеющих подключение к интернет. Пример запроса и результат приведен на рисунке 4.7.
Рисунок 4.7 – Результат поиска по нескольким полям
ВЫВОДЫ
Данный курсовой проект был выполнен в полном соответствии поставленному заданию и отлажен в среде DELPHI 7.0. В ходе выполнения курсовой работы была разработана программа для обработки типизированных файлов, а также создан визуальный интерфейс для создания и ведения базы о компьютерах предприятия. В результате выполнения данной курсовой работы, я убедилась в широких возможностях языка программирования Object Pascal и среды проектирования Delphi 7.
Перечень ссылок
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.
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему стероиды повышают давление?: Основных причин три... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (168)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |