Министерство образования и науки Украины
Северодонецкое высшее профессиональное училище
Курсовая работа
По дисциплине «Программирование и алгоритмические языки»
Тема: Разработка программы при помощи языка программирования языка Delphi
Студент: Молчанова О.О.
Северодонецк 2010
СОДЕРЖАНИЕ
РЕФЕРАТ
ВВЕДЕНИЕ
1 Анализ технического задания и постановка задачи проектирования
2 Разработка ЭКРАННЫХ ФОРМ И алгоритма программы
3 ОПИСАНИЕ ПРОГРАММНЫХ МОДУЛЕЙ
3.1 Описание переменных и объектов
3.2 Описание пользовательских процедур
3.3 Описание процедуры BOpenClick
3.4 Описание процедуры BSaveAsClick
3.5 Процедуры навигации и редактирования
4 ИНСТРУКЦИЯ ОПЕРАТОРУ
ВЫВОДЫ
Перечень ссылок
ПРИЛОЖЕНИЕ А
ПРИЛОЖЕНИЕ Б
ПРИЛОЖЕНИЕ В
РЕФЕРАТ
Пояснительная записка к курсовой работе содержит:
страниц - 37;
рисунков - 14;
таблиц – 4;
приложений – 2.
Цель работы: разработать программу обработки типизированных файлов с кодом на языке Object Pascal , для ввода и вывода данных использовать компоненты Delphi.
В первом разделе курсовой работы выполнен анализ технического задания, выделены функции, которыми должно обладать разрабатываемое приложение, а также сформулированы требования к нему, произведена постановка задачи на проектирование. Во втором разделе выполняется анализ задачи проектирования, анализируется вид исходных данных, в зависимости от чего проектируется визуальный интерфейс и приводится словесный алгоритм работы программы. В третьем разделе рассматриваются алгоритмы разработанных процедур и функций, а также приводятся их описания. К реализованной программе разработана инструкция пользователя, которая приведена в четвертом разделе. Алгоритмы процедур приведены в приложении А. Листинг программы содержится в приложении Б.
Программа разработана с использованием среды визуального программирования Delphi 7 и языка Object Pascal.
ПРОГРАММА, ФАЙЛ, ТИПИЗИРОВАННЫЙ ФАЙЛ, ЗАПИСЬ, АЛГОРИТМ, ПРОЦЕДУРА, БАЗА КОМПЬЮТЕРОВ
ВВЕДЕНИЕ
Данный курсовой проект был разработан в среде Delphi7 с базовым языком программирования Object Pascal. Среди множества языков Pascal является наиболее универсальным и легко изучаемым языком. При этом его удобно использовать для создания сложных приложений, базами данных, приложения масштаба предприятия. Delphi так же прост в обучении, как и Visual Basic, но при этом средства языка программирования Pascal позволяет использовать все современные возможности объектно-ориентированного программирования.
Delphi — это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi — строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal.
Delphi прост и логичен. Основные конструкции языка четко выделяются в программе, что способствует хорошему восприятию написанного кода. Графический интерфейс Delphi отлично продуман, среда разработки предоставляет доступ только к тем участкам кода, с которыми необходимо работать, скрывая основную часть программы, которая создается автоматически самой разработкой.
Для выполнения данной курсовой работы необходимо разработать алгоритм решения поставленного задания, правильно указав последовательное выполнение соответствующих команд для получения необходимых результатов.
Цель работы заключается в том, чтобы правильно составить алгоритм поставленной задачи по обработке типизированного файла, разработать и отладить программу, реализующую разработанный алгоритм.
1 Анализ технического задания и постановка задачи проектированияСогласно заданию необходимо разработать программу для системного администратора, в которой хранится вся комплектация компьютеров его предприятия, предусмотреть ввод, удаление и правку информации. При этом для каждого компьютера необходимо хранить следующую информацию: наименование, ёмкость жёсткого диска, ёмкость оперативной памяти, тип монитора, наличие подключения к интернет. Обработка должна включать: создание и чтение файла; дополнение, удаление, корректировка, поиск данных файла.
Поскольку структура информации для каждого компьютера одинакова, целесообразно для хранения данных использовать типизированный файл.
Дадим определение понятиям, которые используются в данной работе. Определим следующие понятия: строка, файл, типизированный файл, массив
.
Тип STRING (строка
) в «Borland Delphi» широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY [0..N] OF CHAR, однако, в отличие от последнего, количество символов в строке–переменной может меняться от 0 до N, где N – максимальное количество символов в строке.
Под файлом
понимается либо именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, электронного «виртуального» диска), либо логическое устройство – потенциальный источник или приемник информации.
Типизированный файл
трактуется в «Borland Delphi» как файл записей.
Запись
представляет собой совокупность компонент различных типов.
«Borland Delphi» может использовать объекты, содержащее множество однотипных элементов, которые называются массивами. Массив– это формальное обледенение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое. Для хранения содержимого типизированного файла и обработки удобно использовать массивы с элементами типа запись. Удобство массивов заключается в том, что можно обращаться к отдельному элементу массива по номеру. Дополнительное удобство привносят динамические массивы, отличительной особенностью которых является возможность динамического изменения размерности массива, то есть динамическое выделение или освобождение памяти под требуемое в данный момент количество элементов массива.
Поскольку данная программа является приложением Windows, то для ее реализации будем использовать стандартный подход при написании программ под Windows с использованием графического интерфейса. Так отдельно создадим форму с визуальными компонентами, для различных визуальных компонент сопоставляем процедуры - обработчики. Далее, как только происходит событие на каком-то из визуальных компонент, (щелчок мыши, нажатие на кнопку или пункт меню), операционная система посылает приложению соответствующее сообщение, и запускается соответствующий обработчик именно для этого события. Тогда решение задачи можно разбить на 3 этапа:
1) Разработка визуального интерфейса пользователя, на основе экранных форм среды Delphi и визуальных компонент, предназначенных для ввода исходных данных, запуска действий по обработке исходных данных, вывода результата обработки, вывода результатов на экранную форму. Еще можно предусмотреть вывод информации разработчике и задании курсового проекта.
2) Разработка обработчиков событий от элементов экранных форм, разработка алгоритмов и программных кодов действий обработки текстового файла согласно заданию.
3) Подготовка тестовых исходных данных и отладка программы.
На первом этапе целесообразно выполнить разработку интерфейса таким образом, чтобы исходные данные, а именно типизированный файл с информацией о о компьютерах, можно было создать заново и сохранить на жестком диске или внешнем носителе. Также удобство увеличится, если можно будет открыть созданный ранее файл с жесткого диска или другого носителя и, по необходимости, отредактировать его. Также было бы полезно иметь средство вывода информации о разработчике приложения и о назначении приложения (задании курсового проекта). Для автоматизации и облегчения работы с программой полезно предусмотреть функции поиска требуемых компьютеров по одному или нескольким критериям.
Для просмотра данных об отдельных записях необходимо предусмотреть функции навигации для продвижения не последующую или предыдущую запись файла.
При выполнении второго этапа следует использовать модульный принцип построения программы, то есть разбить программу на отдельные части, каждая из которых выполняет какую-то законченную задачу, либо ее малую часть. Роль таких частей будут выполнять процедуры и функции. Программы, состоящие из процедур и функций, называются модульными.
Процедуры и функции в свою очередь могут вызывать процедуры и функции более низкого уровня и так далее. Таким образом, каждая модульная программа имеет иерархическую структуру. Следует заметить, что обработчики событий от объектов экранных форм тоже реализуются как процедуры.
На третьем этапе при отладке приложения обязательно должна анализироваться правильность работы на исходных тестовых образцах. На этом этапе нужно проверить соответствие разработанной программы исходному заданию, а также проверить ее на отсутствие ошибок.
Подытожив все вышесказанное можно сформулировать требования к разрабатываемому программному обеспечению и выполнить постановку задания на проектирование.
Программа должна быть реализована с графическим интерфейсом пользователя в среде Borland Delphi и должна выполнять следующие функции:
- создание нового типизированного файла, с информацией о компьютерах;
- открытие типизированного файла с жесткого диска и вывод его содержимого на экранной форме;
- редактирование данных и сохранение изменений в файле на жестком диске;
- сохранение типизированного файла под новым именем;
- вывод информации о разработчике и задании на курсовой проект;
- вывод информации об отдельном компьютере из типизированного файла на экранную форму в отдельные поля ввода;
- вывод содержимого всего файла на экранной форме в виде таблицы;
- продвижение к следующей записи в файле;
- продвижение на предыдущую запись типизированного файла;
- возможность редактирования данных в имеющихся записях типизированного файла;
- возможность добавления новых записей в типизированный файл;
- возможность удаления отдельных записей из типизированного файла;
- поиск записей по какому-либо критерию и вывод результатов на экранную форму;
Последующие разделы будут посвящены решению поставленных задач и разработке приложения с вышеперечисленными функциями.
2 Разработка ЭКРАННЫХ ФОРМ И алгоритма программы
В предыдущем разделе было сказано, что процесс решения поставленной задачи разбивается на 3 этапа, первый из которых заключается в построении интерфейса с пользователем на основе экранных форм и визуальных объектов проектирования.
По сформулированной в предыдущем задании постановке должна иметься возможность выполнения манипуляций с файлами на жестком диске (открытие, сохранение, создание). Для этого разместим на форме объекты OpenDlg типа TOpenDialog (стандартный диалог открытия файла) и SaveDlg типа TSaveDialog (стандартный диалог сохранения файла). Эти объекты помогают автоматизировать процесс навигации по иерархии файлов и папок жесткого диска компьютера и выбора требуемого имени для открытия или сохранения файла.
Для запуска процедур открытия или создания файла, разместим на форме объект MainMenu типа TMainMenu. Настройка пунктов меню приведена на рисунке 2.1
Рисунок 2.1 – Настройка пунктов главного меню
Для возможности ввода исходных данных о компьютере поместим на форме поля ввода типа TEdit и соответствующие метки описания к ним. Для вывода информации о всех компьютерах аэропорта, предусмотрим объект SGrid1 типа TStringGrid, в который позволяет выводить информацию в виде таблицы.
Также для запуска функции продвижение к следующей записи, продвижение на предыдущую запись, сохранение изменений об одной записи, добавления новых записей в типизированный файл, удаления отдельных записей из типизированного файла, поиск записей по какому-либо критерию и вывод результатов на экранную форму, поместим на форме кнопки типа TBitButton. Сами процедуры для выполнения тех или иных функций реализуем как обработчики нажатия на соответствующие кнопки.
В итоге, спроектируем экранную форму, вид которой приведен на рисунке 2.2
Рисунок 2.2 – Экранная форма приложения
Для удобства работы в программе целесообразно всю информацию из файла хранить в динамическом массиве с элементами типа запись и оперировать с элементами массива.
Словесный алгоритм действий при открытии файла:
1. Открыть файл для чтения.
2. Принять размерность массива равной нулю.
3. Считать очередную запись из файла.
4. Если достигнут конец файла, перейти на пункт 8.
5. Увеличить длину динамического массива на единицу.
6. Занести очередную запись, считанную из файла в конец массива.
7. Перейти на пункт 3.
8. Закрыть файл.
9. Отобразить содержимое массива в таблице на экранной форме.
10. Конец
Словесный алгоритм действий при сохранении файла:
1. Открыть требуемый файл для записи.
2. Установить <номер> на начало массива (номер равен нулю).
3. Если достигнут конец массива, перейти на пункт 6.
4. Сохранить очередной элемент массива под номером <номер> в конец файла.
5. Нарастить <номер> на 1 и перейти на пункт 3.
6. Закрыть файл.
7. Конец.
При поиске все записи, удовлетворяющие критерию выбираются в отдельный массив и отображаются на экранной форме. Словесный алгоритм действий при поиске:
1. Установить <номер1> на начало исходного массива А.
2. Обнулить размерность результирующего массива В.
3. Если достигнут конец массива А, перейти на пункт 8.
4. Если запись <номер1> исходного массива А удовлетворяет критериям поиска, перейти на пункт 4, если не удовлетворяет, перейти на пункт 7.
5. Нарастить длину результирующего массива В на единицу.
6. Записать элемент <номер1> массива А в конец результирующего массива В.
7. Нарастить <номер1> на единицу и перейти на пункт 3.
8. Отобразить содержимое массива В в таблице на экранной форме.
9. Конец.
Анализируя требования к функциям разрабатываемого приложения под разработанную экранную форму можно выделить следующие программные модули:
1) вывод информации о разработчике программы и задании на курсовой проект;
2) создание нового типизированного файла, с информацией о компьютерах (инициализация временного массива записей );
3) сохранение содержимого файла в типизированном файле на жестком диске;
4) сохранение содержимого файла в типизированном файле на жестком диске под новым именем;
5) вывод информации о компьютере текущей записи массива в поля ввода на экранной форме;
6) перенос информации из типизированного файла в динамический массив и вывод содержимого на форме;
7) продвижение к следующей записи в массиве;
8) продвижение на предыдущую запись массива;
9) перенос информации из полей ввода в поля текущей записи из массива;
10) добавление новой записи в массив;
11) удаление текущей записи из массива;
12) поиск записей по какому-либо критерию и вывод результатов на экранную форму;
13) вывод содержимого динамического массива на объекте типа TStringGrid.
Каждый из вышеприведенных модулей реализуем при помощи процедуры. Модули 1,2, 3, 4, 6 будут обработчиками нажатий на соответствующие пункты главного меню. Для запуска модулей 7, 8, 9, 10, 11, 12 предусмотрим экранные кнопки на форме, для чего поместим на форму объекты типа TBitButton. А сами процедуры будут реализованы как обработчики нажатия на соответствующие кнопки. Модули 5, 13 реализуем как отдельную процедуру.
Cоставим алгоритм приложения, который представлен в приложении на рисунке A.1. На алгоритме приведены основные события экранной формы. В этом алгоритме:
блок №3 реализован процедурой NOpenClick,
блок №4 процедурой NSaveClick,
блок №5 - процедурой NShowClick,
блок №6 - процедурой NSaveAsClick,
блок №7 - процедурой NCreateClick,
блок №8 реализован процедурой BBDeleteClick,
блок №9 процедурой NInfoClick,
блок №10 - процедурой BBNextClick,
блок №11 - процедурой BBPrevClick,
блок №12 - процедурой BBUpdateClick,
блок №13 - процедурой BBAddClick,
блок №14 - процедурой BBSearchClick,
блок №15 - процедурой NExitClick.
Детальное описание разработанной программы, алгоритмов и их программной реализации приведено в последующих разделах.
3 ОПИСАНИЕ ПРОГРАММНЫХ МОДУЛЕЙ
3.1 Описание переменных и объектов
В программе используется глобальная переменная Form1
, которая представляет собой экранную форму.
Для организации интерфейса с пользователем были разработаны экранные формы, в результате чего на экранной форме Form1 поместили элементы, приведенные в таблице 3.1
Таблица 3.1– Описание визуальных объектов на форме Form1
Наименование |
Тип |
Назначение |
MainMenu1 |
TMainMenu |
главное меню |
NOpen, NSave, NSaveAs, NCreate, NExit, NInfo, NShow |
TMenuItem |
пункты главного меню «Открыть», «Сохранить», «Сохранить как», «Создать», «Выход», «Информация», «Показать» |
EName, EHDD, ERAM, EMonitor, |
TEdit |
поля для ввода данных о наименовании компьютера, объеме диска, памяти, типе монитора. |
RGrInet |
TRadioGroup |
поле для ввода информации о подключении к интернет |
SGrid1 |
TStringGrid |
вывод содержимого файла в виде таблицы |
BBPrev |
TBitBtn |
кнопка с надписью «Предыдущая запись» |
BBNext |
TBitBtn |
кнопка с надписью «Следующая запись» |
BBDelete |
TBitBtn |
кнопка с надписью «Удалить» |
BBAdd |
TBitBtn |
кнопка с надписью «Добавить» |
BBUpdate |
TBitBtn |
кнопка с надписью «Редактировать» |
BBSearch |
TBitBtn |
кнопка с надписью «Поиск» |
OpenDlg1 |
TOpenDialog |
стандартный диалог открытия файлов |
SaveDlg |
TSaveDialog |
стандартный диалог сохранения файла |
В разделе var опишем переменные, приведенные в таблице 3.2
Таблица 3.2– Переменные программы
Наименование |
Тип |
Назначение |
F |
file of TComp |
типизированный файл с данными о компьютерах |
Comp |
TComp |
информация об одном компьютере |
AComp |
array of TComp |
данные обо всех компьютерах в виде массива |
CurK |
integer |
номер текущей записи в массиве AComp |
Fname |
string |
имя текущего (рабочего) файла |
Для хранения данных о компьютере разработаем составной тип данных TComp c полями, приведенными в таблице 3.3
Таблица 3.3 – Информационные поля о компьютере
Наименование |
Тип |
Назначение |
Name |
string[20] |
наименование компьютера |
HDD |
real |
объём жесткого диска |
RAM |
integer |
объём оперативной памяти |
Monitor |
string[20] |
тип монитора |
Inet |
boolean |
наличие подключения к интернет |
В разработанной программе содержится описание 13 процедур обработчиков событий и 4 вспомогательных процедуры, которые приведены в таблице 3.4.
Таблица 3.4 Пользовательские процедуры и обработчики событий
Наименование |
Обр-к |
Назначение |
Строки |
GetComp |
- |
поиск компьютера по имени |
78-89 |
ShowComp |
- |
вывод информации о компьютере на форму |
90-101 |
ShowCompInGrid |
- |
вывод информации о компьютере в таблицу |
102-114 |
ShowAComp |
- |
вывод содержимого массива FComp в таблицу |
115-127 |
BBAddClick |
+ |
добавление новой записи о новом компьютере |
128-149 |
BBPrevClick |
+
|
переход на предыдущую запись |
150-157 |
BBNextClick |
+
|
переход на следующую запись |
158-165 |
NSaveClick |
+
|
сохранение текущего файла |
166-179 |
NSaveAsClick |
+ |
запуск диалога и сохранение в файле с заданным именем |
180-194 |
NOpenClick |
+ |
запуск диалога и открытие файла |
195-216 |
BBDeleteClick |
+ |
удаление текущей записи |
217-230 |
NCreateClick |
+ |
инициализация массива AComp |
231-237 |
FormCreate |
+ |
инициализация шапки таблицы |
238-247 |
BBUpdateClick |
+
|
обновление записи в массиве данными из полей ввода |
248-260 |
NShowClick |
+
|
вывод содержимого текущего файла на форму |
261-278 |
BBSearchClick |
+ |
поиск компьютеров согласно некоторым критериям и вывод результатов поиска |
279-312 |
NInfoClick |
+ |
вывод информации о разработчике |
313-317 |
NExitClick |
+ |
выход из приложения |
318-322 |
Более подробно некоторые процедуры будут рассмотрены далее.
Кроме приведенных объектов, в разделе uses подключается модуль Unit2. В модуле Unit2 приведена форма AboutBox, на которой выводится информация о разработчике приложения и задании проекта.
3.2 Описание пользовательских процедур
Функция GetComp предназначена для поиска компьютера в массиве по имени. Синтаксис: GetComp(name:string;AComp:ATComp;var Comp:TComp):boolean. Где name – наименование компьютера, AComp – массив в котором производится поиск, Comp – объект, в который возвращается найденный объект. Если поиск удачен, то функция возвращает значение true, иначе – false.
Процедура ShowComp предназначена для вывода информации о компьютере в поля формы. Синтаксис: ShowComp(Comp:TComp). Где Comp – запись, хранящая информацию о компьютере.
Процедура ShowCompInGrid предназначена для вывода информации о компьютере в поля таблицы. Синтаксис:
ShowCompInGrid(Comp:TComp; Sgr:TStringGrid;Row:integer).
где Comp – запись, хранящая информацию о компьютере,
SGr – таблица, в которую производится вывод,
Row – номер строки, в которую выводится информация.
Процедура ShowAComp предназначена для вывода информации о всех компьютерах из массива AComp в поля таблицы. Синтаксис:
ShowAComp(AComp:ATComp;Sgr:TStringGrid).
где AComp – массив записей, хранящий информацию о компьютерах,
SGr – таблица, в которую производится вывод.
Алгоритм процедуры приведен на рисунке А.4.
Эта процедура является обработчиком события onClick для объектa NOpen, то есть запускается при щелчке на указанном объекте. В теле этого вызывается стандартный диалог открытия файла, в случае, если диалог был завершен успешно, имя файла сохраняется в переменной FName, производится чтение содержимого исходного файла в массив AComp, а затем его содержимое выводится на форму при помощи процедуры ShowAComp. Алгоритм процедуры приведен на рисунке А.2.
Процедура NShowClick является обработчиком события onClick для объектa NShow. В ней тоже происходит чтение файла в массив AComp и вывод содержимого на форму. Однако в этой процедуре не выполняется запуск диалога открытия файла, а производится чтение текущего файла, имя которого занесено в FName.
Эта процедура является обработчиком события 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.
ПРИЛОЖЕНИЕ В
Протокол выполнения программы
Созданная программа позволяет добавлять, редактировать и удалять записи, так же позволяет осуществлять поиск по нескольким полям.
При редактировании или удалении данных
|