Создание диалоговых программ с использованием структур и файлов в среде C++Builder

Основные аспекты обработки структур и файлов в среде C++Builder. Организация ввода/вывода значений комбинированных типов данных. Программирование задач с использованием структур и файлов в среде C++Builder. Проектирование интерфейса пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.11.2016
Размер файла 548,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования

«Гродненский государственный университет имени Янки Купалы»

Физико-технический факультет

Кафедра информационных систем и технологий

Курсовая работа

Создание диалоговых программ с использованием структур и файлов в среде C++Builder

студента 2 курса А.С. Смирнова

Научный руководитель

Масюкевич Михаил Брониславович

старший преподаватель

Гродно 2015

Резюме

Тема курсовой работы

«Создание диалоговых программ с использованием структур и файлов в среде C++Builder»

Вариант 21

Работа содержит: 32 страницы, 8 рисунков, 1 таблицу, 1 приложение, 10 использованных источника литературы.

Ключевые слова: алгоритм, программа, структура данных, файл, обработка данных, среда программирования C++Builder.

Цель курсовой работы - обобщить знания по управляющим операторам языка C++; овладеть практическими навыками в организации ввода/вывода значений комбинированных типов данных; получить практические навыки программирования задач с использованием структур и файлов в среде C++Builder.

Объектом исследования выступают структурированные данные, которые можно представить в виде таблицы.

Предметом исследования настоящей работы является разработка компьютерной программы в среде C++Builder, которая позволяет создать и обработать структуру данных, определенную вариантом задания.

В работе были использованы методы сортировки и фильтрации данных.

Содержание

Введение

1. Теоретическая часть

1.1 Постановка задачи

1.2 Основные аспекты обработки структур и файлов в среде C++Builder

1.3 Алгоритм и сценарий работы программы

2. Практическая часть

2.1 Проектирование интерфейса пользователя

2.2 Написание программных модулей

2.3 Результаты тестирования программы

Заключение

Список используемых источников

Приложение. Текст программных модулей

Введение

файл интерфейс пользователь среда

Примечание: Введение у всех должно быть разным! Здесь можно описать понятия: информация, данные, обработка данных, структурирование данных, программирование, как средство обработки данных и т.п. В конце введения указать, какие рассматриваются вопросы и решаются задачи в данной курсовой работе.

Информация - специфический атрибут реального мира, представляющий собой его объективное отражение в виде совокупности сигналов и проявляющийся при взаимодействии с "приемником" информации, позволяющим выделять, регистрировать эти сигналы из окружающего мира и по тому или иному критерию их идентифицировать.

Из этого определения следует, что:

Ш информация объективна, так как это свойство материи - отражение;

Ш информация проявляется в виде сигналов и лишь при взаимодействии объектов;

Ш одна и та же информация различными получателями может быть интерпретирована по-разному в зависимости от "настройки" "приемника".

Последовательность действий, выполняемых с информацией, называют информационным процессом. Основными информационными процессами являются:

Ш сбор (восприятие) информации;

Ш подготовка (преобразование) информации;

Ш передача информации;

Ш обработка (преобразование) информации;

Ш хранение информации;

Ш отображение (воспроизведение) информации.

Так как материальным носителем информации является сигнал, то реально это будут этапы обращения и преобразования сигналов (рис.1).

На этапе восприятия информации осуществляется целенаправленное извлечение и анализ информации о каком-либо объекте (процессе), в результате чего формируется образ объекта, проводятся его опознание и оценка.

Рис. 1 Основные информационные процессы

На этапе подготовки информации осуществляется ее первичное преобразование. На этом этапе проводятся такие операции, как нормализация, аналого-цифровое преобразование, шифрование. Иногда этап подготовки рассматривается как вспомогательный на этапе восприятия. В результате восприятия и подготовки получается сигнал в форме, удобной для передачи, хранения или обработки.

На этапе передачи информация пересылается из одного места в другое (от отправителя получателю - адресату). Передача осуществляется по каналам различной физической природы, самыми распространенными из которых являются электрические, электромагнитные и оптические.

На этапах обработки информации выявляются ее общие и существенные взаимозависимости, представляющие интерес для системы. Преобразование информации на этапе обработки (как и на других этапах) осуществляется либо средствами информационной техники, либо человеком.

Под обработкой информации понимается любое ее преобразование, проводимое по законам логики, математики, а также неформальным правилам, основанным на "здравом смысле", интуиции, обобщенном опыте, сложившихся взглядах и нормах поведения.

На этапе хранения информацию записывают в запоминающее устройство для последующего использования. Для хранения информации используются в основном полупроводниковые и магнитные носители.

Этап отображения информации должен предшествовать этапам, связанным с участием человека. Цель этого этапа - предоставить человеку нужную ему информацию с помощью устройств, способных воздействовать на его органы чувств.

В данной курсовой работе предусматривается выполнение следующих действий:

1) постановка задачи в формализованном виде;

2) построение алгоритма решения задачи;

3) реализация алгоритма на ПК путем создания программы в среде C++Builder;

4) тестирование и отладка программы;

5) анализ полученных данных и формулировка выводов;

6) создание и оформление пояснительной записки.

1. Теоретическая часть

1.1 Постановка задачи

Разработать Windows-приложение в среде C++Builder, которое позволяет:

· создать структуру данных «Сведения об абитуриентах, сдавших вступительные экзамены в университет». Структура содержит следующие поля: Ф.И.О., адрес, оценки по трем предметам (математика, физика, язык), средний балл аттестата, средний балл за экзамены, общий средний балл (структура данных показана в таблице 1);

Таблица 1

Структура данных

№ п/п

ФИО

Адрес

Математика

Физика

Язык

Аттестат

Средняя за экз.

Общая средняя

1

Голец А.И.

г. Лида

7

6

7

6,50

6,67

6,58

Исходные данные

Результаты

вычислений

· отобразить созданную структуру данных в таблице (компонент StringGrid);

· редактировать данные;

· сохранить данные в файл на диск при помощи компонента SaveDialog;

· открыть с диска файл с данными при помощи компонента OpenDialog;

· подготовить файл с данными для проверки работы программы;

· выбрать нужное пользователю действие через главное меню программы, спроектированное при помощи компонента MainMenu;

Обработать данные:

· определить количество абитуриентов, проживающих в заданном городе и вывести все данные о них;

· вывести сведения об абитуриентах, сдавших экзамены со средним баллом не ниже 6.5 (или другое значение, которое задается пользователем) в алфавитном порядке фамилий;

· вывести список студентов в порядке убывания общего среднего балла, который вычисляется как среднее между средним баллом аттестата и среднего балла по экзаменам.

Анализ данных (их обозначение в программе и определение типа):

· № п/п - namber, целый (int);

· ФИО - FIO, строковый (char[20]);

· Адрес - adres, строковый (char[30]);

· Математика - matem, целый (int);

· Физика - fizika, целый (int);

· Язык - lang, целый (int);

· Средний балл аттестата - sb_attestat, вещественный (float);

· Средний балл за экзамены - sb_examen, вещественный (float);

· Общий средний балл - sredball, вещественный (float);

Данные в программе определим как структуру struct sved sprav. Для записи данных в файл определим указатель на файл FILE *f.

Среда разработки - C++Builder, оконное приложение.

1.2 Основные аспекты обработки структур и файлов в среде C++Builder

Структура объединяет логически связанные данные разных типов.

Структурный тип данных определяется описанием шаблона:

struct Рerson {

char Fio[30];

double sball;

};

Объявление переменных созданного структурного типа:

Person Stud, *p_Stud;

Обращение к элементам структур производится посредством:

1) операции принадлежности (. ) в виде:

ID_структуры. ID_поля или (*указатель). ID_поля

2) операции косвенной адресации (->) в виде:

указатель -> ID_поля или &(ID_структуры). ID_поля

Для приведенного выше примера

1) Stud.Fio = “Иванов А.И.”; //Инициализация данных

Stud.sball = 5.75;

2) р_Stud -> Fio = “Иванов А.И.”;

р_Stud -> sball =5.75;

В языке C/С++ файл рассматривается как поток (stream), представляющий собой последовательность считываемых или записываемых байт. При этом последовательность записи определяется самой программой.

Файл - это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое.

Прототипы большинства функций по обработке файлов описаны в библиотеках stdio.h и io.h.

Прежде чем работать с файлом, его нужно открыть для доступа, т.е. создать и инициализировать область данных, которая содержит информацию о файле: имя, путь и т.д. В языке С/С++ это выполняет функция fopen(), которая связывает физический файл на носителе с логическим именем в программе. Логическое имя - это указатель на файл, т.е. на область памяти, где хранится информация о файле.

Указатели на файлы необходимо декларировать:

FILE *указатель на файл;

Формат функции открытия файла: fopen( “строка 1”, “строка 2” ).

В строке 1 указывается место, в которое мы собираемся поместить файл, например: “d:\\work\\sved.txt” - файл с именем sved.txt, который будет находиться на диске d, в папке work; если путь к файлу не указывать, то он будет размещен в рабочей папке проекта.

В строке 2 указывается код открытия файла:

· w - для записи, если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается;

· r - для чтения, если файла нет, то возникает ошибка;

· a - для добавления новой информации в конец файла;

· r+, w+ - возможны чтение и запись информации;

· a+ - то же, что и для a, только запись можно выполнять в любое место файла, доступно и чтение файла.

По умолчанию файл открывается в текстовом режиме (t), указав b - файл открывается в двоичном режиме.

Если при открытии файла произошла ошибка, функция fopen возвращает значение NULL.

После работы доступ к файлу необходимо закрыть с помощью функции fclose(указатель файла), например fclose ( f ).

Приведем пример минимального набора операторов, необходимых для корректной работы с файлом:

#include <stdio.h>

...

FILE *f_my;

if( ! ( f_my = fopen(“rez.txt”, “r+t” ) ) ) {

puts(“\n Ошибка открытия файла!”);

// В оконном режиме - ShowMessage("Ошибка открытия файла");

return;

}

... // Работа с файлом

fclose(f_my);

...

Для работы с текстовыми файлами в консольном приложении удобнее всего пользоваться функциями fprintf() и fscanf(), параметры и выполняемые действия аналогичны функциям printf() и scanf(), только первым параметром добавлен указатель файла, к которому применяется данная функция.

Для создания баз данных удобнее пользоваться функциями работы с бинарными (двоичными) файлами. Рассмотрим некоторые из них, обозначив указатель файла - fp (FILE *fp;):

1) int fread(void *ptv, int size, int n, fp) - считывает n блоков по size байт каждый из файла fp в область памяти, на которую указывает ptv (необходимо заранее отвести память под считываемый блок);

2) int fwrite(void *ptv, int size, int n, fp) - записывает n блоков по size байт каждый из области памяти, на которую указывает ptv в файл fp;

3) int fileno(fp) - возвращает значение дескриптора файла fp (дескриптор - число, определяющее номер файла);

4) long filelength(int дескриптор) - возвращает длину файла в байтах;

5) int chsize(int дескриптор, long pos) - выполняет изменение размера файла fp, признак конца файла устанавливается после байта с номером pos;

6) int fseek(fp, long size, int kod) - выполняет смещение указателя на size байт в направлении признака kod: 0 - от начала файла; 1 - от текущей позиции; 2 - от конца файла;

7) long ftell(fp) - возвращает значение указателя на текущую позицию файла fp (-1 - ошибка);

8) int feof(указатель файла) - возвращает ненулевое значение при правильной записи признака конца файла;

9) int fgetpos(указатель файла, long *pos) - определяет значение текущей позиции pos файла; при успешном завершении возвращает значение 0.

1.3 Алгоритм и сценарий работы программы

Приведем обобщенный алгоритм и сценарий работы программы.

После загрузки программы пользователь имеет возможность:

· Приступить к созданию нового файла данных.

· Открыть ранее сохраненный файл данных.

Данные отображаются и редактируются в верхней таблице, установленной на форме. В нижней таблице отображаются результаты выборки данных, редактирование данных в ней не разрешено программой.

При наличии данных в верхней таблице пользователь имеет возможность выполнять обработку данных (вычисление средних баллов, поиск и сортировка данных).

Диалог пользователя с программой осуществляется через главное меню программы. Перечислим пункты меню и их назначение.

· Файл/Создать - очистка таблиц от текущих данных, подготовка для ввода данных в новый файл.

· Файл/Открыть - открыть ранее сохраненный файл с данными и отобразить его в верхней таблице на форме.

· Файл/Сохранить - сохранить текущие данные верхней таблицы в файл.

· Файл/Выход - закрытие главной формы программы и выход из нее.

· Обработка/Вычислить - вычисление среднего бала за экзамены и общего среднего бала для каждой записи.

· Обработка/Поиск по городу - поиск и выборка данных по заданному городу.

· Обработка/Поиск по ср. баллу за экз. - поиск и выборка данных по заданному минимальному среднему баллу за экзамены.

· Обработка/Сортировка по общему ср. баллу - сортировка данных в верхней таблице в порядке убывания общего среднего балла.

· Таблица/Добавить строку - добавление строки в конец верхней таблицы.

· Таблица/Удалить строку - удаление текущей (активной) строки верхней таблицы.

· Справка - вывод справочной информации о программе и ее авторе.

Опишем основные алгоритмы обработки данных более подробно.

Алгоритм поиска информации в таблице:

Цикл для i от 1 до N (где N - текущее количество строк в верхней таблице, или количество записей в файле).

Если значение поискового поля i-й записи удовлетворяет критерию поиска (строка содержит строку, введенную в поле «Город» / средний балл за экзамены >= заданного значения),

то добавить в нижнюю таблицу строку и записать в нее данные i-й строки верхней таблицы.

Конец цикла по i.

Алгоритм сортировки данных в таблице по убыванию общего среднего балла пузырьковым методом:

Цикл (с постусловием)

Логической переменной p присвоить значение false.

Цикл для i от 1 до N-1

Если значение общего среднего балла в i-й строке > чем в (i+1) строке, то поменять местами i-ю и (i+1)-ю строку, переменной p присвоить значение true.

Конец цикла по i.

Конец цикла с постусловием, если p равно false (при последнем просмотре не было перестановок строк, т.к. они уже упорядочены в нужном порядке).

2. Практическая часть

2.1 Проектирование интерфейса пользователя

Разработку программы начинаем с проектирования интерфейса пользователя на главной форме Form1.

На форму устанавливаем следующие компоненты (объекты):

· MainMenu1 (главное меню программы), при помощи дизайнера меню создаем следующие пункты:

Ш Раздел «Файл»: «Создать» (N6), «Открыть» (N4), «Сохранить» (N5), «Выход» (N10).

Ш Раздел «Обработка»: «Вычислить» (N8), «Поиск по городу» (N16), «Поиск по ср. баллу за экз.» (N11), «Сортировка по общему ср. баллу» (N2).

Ш Раздел «Таблица»: «Добавить строку» (N13), «Удалить строку» (N14).

Ш Раздел «Справка» (N12).

· StringGrid1 (основная таблица для размещения данных).

· StringGrid2 (таблица для отображения результатов поиска данных по заданным критериям).

· Edit1 (поле для ввода названия города для поиска).

· Edit2 (поле для ввода значения среднего балла за экзамены для поиска записей у которых этот балл не менее).

· OpenDialog1 (окно диалога для открытия файла).

· SaveDialog1 (окно диалога для сохранения файла).

· Label1 (надпись, содержащая текст «Результат запроса:».

· Label2 (надпись, содержащая текст «Количество записей в выборке =».

· Label3 (надпись, содержащая текст «Город =».

· Label4 (надпись, содержащая первоначально текст «…», в процессе работы программы в ней будет отображаться количество записей в выборке данных).

· Label6 (надпись, содержащая текст «Средн. экз. >=».

Вид формы в режиме проектирования показа на рисунке 2.

Рис. 2 Вид главной формы приложения в режиме проектирования

Кроме главной формы проекта проектируем форму Form2, на которой отображаем справочную информацию о программе и авторе.

На форму устанавливаем следующие компоненты (объекты):

· Memo1 (окно многострочного редактора), в котором отображаем справочную информацию (свойство Lines). Свойство ReadOnly устанавливаем в значение True, тем самым запрещаем редактирование информации со стороны пользователя.

· Image1 (объект для отображения рисунка).

Вид формы в режиме проектирования показа на рисунке 3.

Рис. 3 Вид формы «О программе и авторе» в режиме проектирования

2.2 Написание программных модулей

После проектирования интерфейса пользователя приступаем к написанию программных функций на языке C++ в программном модуле главной формы приложения. Каждая функция является обработчиком соответствующего события и является методом соответствующего объекта.

Таким образом, для работы программы создаем обработчики следующих событий:

Ш FormCreate (создание формы) - выполняется формирование заголовков столбцов таблиц.

Ш N6Click (пункт меню «Создать») - выполняется очистка таблиц от текущего содержимого, количество строк обеих таблиц устанавливается в значение 2.

Ш N4Click (пункт меню «Открыть») - выполняется открытие файла с данными, их чтение, преобразование в текстовый формат и размещение в ячейках верхней таблицы, после этого выполняется закрытие файла и вывод сообщения, что данные успешно прочитаны из файла.

Ш N5Click (пункт меню «Сохранить») - выполняется перечет средних баллов, открытие файла для записи данных, чтение данных из ячеек верхней таблицы, их преобразование в соответствующий тип, контроль корректности данных (вывод соответствующего сообщения и прерывание процесса в случае обнаружения некорректности данных) и запись в файл, после этого выполняется закрытие файла и вывод сообщения, что данные успешно записаны в файл.

Ш N10Click (пункт меню «Выход») - выполняется закрытие главной формы и выход из программы.

Ш N8Click (пункт меню «Вычислить») - для каждой записи выполняется вычисление среднего балла за три экзамена и общего среднего балла между баллами за экзамены и баллом аттестата.

Ш N16Click (пункт меню «Поиск по городу») - выполняется выборка данных из верхней таблицы по наличию строки из компонента Edit1 (название города) в поле «Адрес» и вывод найденных строк в нижнюю таблицу, подсчитывается и выводится в компонент Label4 найденное количество записей.

Ш N11Click (пункт меню «Поиск по ср. баллу за экз.») - выполняется выборка данных из верхней таблицы, если значение поля «Средний балл за экзамены» больше либо равно значения, прочитанного из компонента Edit2 и вывод найденных строк в нижнюю таблицу, подсчитывается и выводится в компонент Label4 найденное количество записей.

Ш N2Click (пункт меню «Сортировка по общему ср. баллу») - выполняется сортировка данных верхней таблицы в порядке убывания общего среднего балла, сортировка выполняется пузырьковым методом, описанным в пункте 1.3.

Ш N13Click (пункт меню «Добавить строку») - выполняется добавление строки в верхнюю таблицу.

Ш N14Click (пункт меню «Удалить строку») - выполняется удаление текущей строки верхней таблицы.

Ш N12Click (пункт меню «Справка») - выполняется открытие формы «О программе и авторе» в модальном режиме.

Полные тексты обработчиков на языке C++ с комментариями распечатаны в Приложении.

Для второй формы «О программе и авторе» написание обработчиков не требуется.

2.3 Результаты тестирования программы

Для тестирования программы подготовили тестовые данные. Они вводятся в верхнюю таблицу и по команде меню Сохранить записываются в двоичный файл. Перед записью данных из таблицы в файл выполняется команда Вычислить, для вычисления средних баллов. Если во время записи в таблице будут обнаружены некорректные данные (пустые ячейки, или текст вместо чисел), то будет выдано соответствующее сообщение (см. рис. 4). Имя файла с тестовыми данными spisok.dat.

Рис. 4 Сообщение о некорректности данных в таблице

По команде меню Создать таблица с данными очищается.

По команде меню Открыть данные читаются из файла и отображаются в верхней таблице (см. рис. 5).

На рисунке видим, что вычисление средних баллов за экзамены и общего среднего балла выполняется правильно. Так для первой строки средний балл за экзамены равен: (6+8+4)/3 = 6,00; общий средний балл равен: (5,25+6,00) = 5,63.

Рис. 5 Тестовые данные в таблице

Протестируем поиск данных по заданному городу. Для этого введем в поле для ввода города: «Лида» и выполним команду Поиск по городу. Результат выборки показан на рис. 6. Отметим, что программа ищет не полное совпадение строк, а вхождение введенного значения «Лида» в поле «Адрес». Как видим из рисунка, выборка выполнилась правильно.

Протестируем поиск данных по среднему баллу за экзамен. Для этого введем в поле для ввода среднего балл: «7,00» и выполним команду Поиск по ср. баллу за экзамен. Результат выборки показан на рис. 7. Отметим, что программа ищет записи со значением поля «Средний балл за экзамены» >= введенного значения «7,00». Как видим из рисунка, выборка выполнилась правильно.

Протестируем сортировку данных в порядке убывания общего среднего балла. Для этого выполним команду Сортировка по общему ср. баллу. Результат сортировки показан на рис. 8. Как видим, операция выполнилась правильно.

Рис. 6 Результат поиска по городу «Лида»

Рис. 7 Результат поиска по «Средний балл за экзамены >=7,00»

Рис. 8 Результат сортировки в порядке убывания общего среднего балла

Таким образом, тестирование программы показало, что она работает правильно.

Заключение

В результате выполнения курсовой работы обобщены знания по управляющим операторам языка C++; получены практические навыки программирования задач с использованием записей и файлов в среде C++Builder.

Выполнены следующие действия:

1) постановка задачи в формализованном виде;

2) построение алгоритма решения задачи;

3) реализация алгоритма на ПК путем создания программы в среде C++Builder;

4) тестирование и отладка программы;

5) анализ полученных данных и формулировка выводов;

6) создание и оформление пояснительной записки.

Задание на курсовую работу выполнено в полном объеме.

Список используемых источников

1. Березин, Б. И. Начальный курс С и С++ / Б. И. Березин, С. Б. Березин. М.: Диалог - МРТИ, 1999.

2. Демидович, Е. М. Основы алгоритмизации и программирования. Язык СИ / Е. М. Демидович. Минск: Бестпринт, 2001.

3. Керниган, Б. Язык программирования СИ / Б. Керниган, Д. Ритчи. М.: Финансы и статистика, 1992.

4. Касаткин, А. И. Профессиональное программирование на языке СИ: от Турбо-С до Borland С++ / А. И. Касаткин, А.Н. Вольвачев: Справочное пособие. Минск: Выш. шк., 1992.

5. Страуструп, Б. Язык программирования C++ / Б. Страуструп: 2-е изд.: В 2 т. Киев: ДиаСофт, 1993.

6. Больски, М. Н. Язык программирования СИ / М. Н. Больски: Справочник. М.: Радио и связь. 1988.

7. Архангельский, А. Я. Программирование в С++ Builder 6 / А. Я. Архангельский. М.: ЗАО “Издательство БИНОМ”, 2002.

8. Юлин, В. А. Приглашение к СИ / В. А. Юлин, И. Р. Булатова. Минск: Высш.шк., 1990.

9. Шилд, Г. Программирование на Borland С++ / Г. Шилд. Минск: ПОПУРРИ, 1999.

10. Тимофеев, В. В. Программирование в среде С++ Builder 5 / В. В. Тимофеев. М.: БИНОМ, 2000.

Приложение. Текст программных модулей

Модуль главной формы Unit1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include <stdio.h>

#include <io.h>

#include <string.h>

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//Структура записи:

struct sved {

int namber; //Порядковый номер.

char FIO[20]; //ФИО абитуриента.

char adres[30]; //Адрес.

int matem; //Оценка по математике.

int fizika; //Оценка по физике.

int lang; //Оценка по языку.

float sb_attestat;//Средний балл аттестата.

float sb_examen; //Средний балл по 3-м экзаменам (вычисляется).

float sredball; //Общий средний бал (вычисляется).

};

int size=sizeof(sved); //размер в байтах одной структуры (записи).

//Переменная - структуры:

struct sved sprav;

//Указатель на файл:

FILE *f;

//Имя файла:

AnsiString File_Zap;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N10Click(TObject *Sender)

{

//Выход:

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

//Начальные действия при сосдании формы:

//Формирование заголовков столбцов:

StringGrid1->Cells[0][0]=" № п/п";

StringGrid2->Cells[0][0]=" № п/п";

StringGrid1->Cells[0][1]="1";

StringGrid2->Cells[0][1]="1";

StringGrid1->Cells[1][0]="ФИО";

StringGrid2->Cells[1][0]="ФИО";

StringGrid1->Cells[2][0]="Адрес";

StringGrid2->Cells[2][0]="Адрес";

StringGrid1->Cells[3][0]="Математика";

StringGrid2->Cells[3][0]="Математика";

StringGrid1->Cells[4][0]="Физика";

StringGrid2->Cells[4][0]="Физика";

StringGrid1->Cells[5][0]="Язык";

StringGrid2->Cells[5][0]="Язык";

StringGrid1->Cells[6][0]="Аттестат";

StringGrid2->Cells[6][0]="Аттестат";

StringGrid1->Cells[7][0]="Средн. экз.";

StringGrid2->Cells[7][0]="Средн. экз.";

StringGrid1->Cells[8][0]="Общ. средн.";

StringGrid2->Cells[8][0]="Общ. средн.";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N5Click(TObject *Sender)

{ //Запись таблицы в файл:

int i,n;

AnsiString str;

try { //Блок защиты операторов.

//Пересчет средних баллов перед сохранением:

N8Click(Sender);

//Открытие файла для записи:

if (SaveDialog1->Execute()){

File_Zap = SaveDialog1->FileName;

f=fopen(File_Zap.c_str(),"wb");

n=StringGrid1->RowCount-1;

//Запись строк таблицы в файл:

for(i=1;i<=n;i++) {

sprav.namber=StrToInt(StringGrid1->Cells[0][i]);

str=StringGrid1->Cells[1][i];

strcpy(sprav.FIO,str.c_str());

str=StringGrid1->Cells[2][i];

strcpy(sprav.adres,str.c_str());

sprav.matem=StrToInt(StringGrid1->Cells[3][i]);

sprav.fizika=StrToInt(StringGrid1->Cells[4][i]);

sprav.lang=StrToInt(StringGrid1->Cells[5][i]);

sprav.sb_attestat=StrToFloat(StringGrid1->Cells[6][i]);

sprav.sb_examen=StrToFloat(StringGrid1->Cells[7][i]);

sprav.sredball=StrToFloat(StringGrid1->Cells[8][i]);

fwrite(&sprav,size,1,f);

}

//Закрытие файла:

fclose(f);

ShowMessage("Данные с таблицы успешно записаны в файл!");

}

}

catch (... ){

//Обработка ошибки некорректности данных:

fclose(f);

ShowMessage("Некорректные данные!");

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N14Click(TObject *Sender)

{

int i,j;

//Удаление текущей строки.

if(StringGrid1->RowCount>2) {

for(i=StringGrid1->Row;i<StringGrid1->RowCount-1;i++) {

StringGrid1->Cells[0][i]=IntToStr(i);

for(j=1;j<=StringGrid1->ColCount-1;j++) {

StringGrid1->Cells[j][i]=StringGrid1->Cells[j][i+1];

}

}

StringGrid1->RowCount--;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N13Click(TObject *Sender)

{

//Добавление строки в конец таблицы

StringGrid1->RowCount++;

StringGrid1->Cells[0][StringGrid1->RowCount-1]=IntToStr(StringGrid1->RowCount-1);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N4Click(TObject *Sender)

{

//Открытие файла и чтение его в таблицу:

if (OpenDialog1->Execute()){

File_Zap = OpenDialog1->FileName;

f=fopen(File_Zap.c_str(),"rb");

//Чтение n (количество записей):

int D_f = fileno(f); // Находим дескриптор файла

int len = filelength(D_f); // Находим размер файла

int i,n;

n = len/size; //Количество записей в файле

StringGrid1->RowCount=n+1;

//Чтение n записей из файла в таблицу:

for(i=1;i<=n;i++) {

fread(&sprav,size,1,f);

StringGrid1->Cells[0][i]=IntToStr(sprav.namber);

StringGrid1->Cells[1][i]=sprav.FIO;

StringGrid1->Cells[2][i]=sprav.adres;

StringGrid1->Cells[3][i]=IntToStr(sprav.matem);

StringGrid1->Cells[4][i]=IntToStr(sprav.fizika);

StringGrid1->Cells[5][i]=IntToStr(sprav.lang);

StringGrid1->Cells[6][i]=FloatToStrF(sprav.sb_attestat,ffFixed,8,2);

StringGrid1->Cells[7][i]=FloatToStrF(sprav.sb_examen,ffFixed,8,2);

StringGrid1->Cells[8][i]=FloatToStrF(sprav.sredball,ffFixed,8,2);

}

//Закрытие файла:

fclose(f);

ShowMessage("Данные успешно прочитаны из файла!");

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N6Click(TObject *Sender)

{

int j;

//Создать (очистка таблиц):

StringGrid1->RowCount=2;

for(j=1;j<=StringGrid1->ColCount-1;j++)

StringGrid1->Cells[j][1]="";

StringGrid2->RowCount=2;

for(j=1;j<=StringGrid1->ColCount-1;j++)

StringGrid2->Cells[j][1]="";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N16Click(TObject *Sender)

{

AnsiString gorod,adr;

int i,j,row2,k;

//Поиск (Выборка данных по запросу "Город = Edit1"

gorod=Edit1->Text;

Edit2->Text="";

k=0;

StringGrid2->RowCount=2;

for(j=0;j<=StringGrid2->ColCount-1;j++) StringGrid2->Cells[j][1]="";

row2=1;

for(i=1;i<StringGrid1->RowCount;i++) {

adr=StringGrid1->Cells[2][i];

if(adr.Pos(gorod)>0) {

StringGrid2->RowCount=row2+1;

k++;

for(j=0;j<=StringGrid2->ColCount-1;j++)

StringGrid2->Cells[j][row2]=StringGrid1->Cells[j][i];

row2++;

}

}

Label4->Caption=IntToStr(k);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N8Click(TObject *Sender)

{

//Вычислить для каждой записи средний балл по экзаменам и общий средний балл:

int i;

for(i=1;i<StringGrid1->RowCount;i++) {

//Чтение оценок:

sprav.matem=StrToInt(StringGrid1->Cells[3][i]);

sprav.fizika=StrToInt(StringGrid1->Cells[4][i]);

sprav.lang=StrToInt(StringGrid1->Cells[5][i]);

sprav.sb_attestat=StrToFloat(StringGrid1->Cells[6][i]);

//Вычисление среднего балла за экзамены:

sprav.sb_examen=(sprav.matem+sprav.fizika+sprav.lang)/3;

//Вычисление общего среднего балла (за экзамены и аттестат):

sprav.sredball=(sprav.sb_attestat+sprav.sb_examen)/2;

//Вывод в таблицу средних баллов:

StringGrid1->Cells[7][i]=FloatToStrF(sprav.sb_examen,ffFixed,8,2);

StringGrid1->Cells[8][i]=FloatToStrF(sprav.sredball,ffFixed,8,2);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N11Click(TObject *Sender)

{

float sb;

int i,j,row2,n;

AnsiString sfio,sfio_next,st;

bool p;

//Поиск (Выборка данных по запросу "Средний балл по экзаменам >= Edit2"

sb=StrToFloat(Edit2->Text);

Edit1->Text="";

n=0;

StringGrid2->RowCount=2;

for(j=0;j<=StringGrid2->ColCount-1;j++) StringGrid2->Cells[j][1]="";

row2=1;

for(i=1;i<StringGrid1->RowCount;i++) {

sprav.sb_examen=StrToFloat(StringGrid1->Cells[7][i]);

if(sprav.sb_examen>=sb) {

StringGrid2->RowCount=row2+1;

n++;

for(j=0;j<=StringGrid2->ColCount-1;j++)

StringGrid2->Cells[j][row2]=StringGrid1->Cells[j][i];

row2++;

}

}

Label4->Caption=IntToStr(n);

//Сортировка данных в таблице выборки в алфавитном порядке ФИО:

n=StringGrid2->RowCount-1;

do {

p=false;

for(i=1;i<n;i++) {

sfio=StringGrid2->Cells[1][i];

sfio_next=StringGrid2->Cells[1][i+1];

if(sfio>sfio_next) {

//Обмен строк

for(j=0;j<=StringGrid2->ColCount-1;j++) {

st=StringGrid2->Cells[j][i];

StringGrid2->Cells[j][i]=StringGrid2->Cells[j][i+1];

StringGrid2->Cells[j][i+1]=st;

}

p=true;

}

}

}

while(p);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)

{

//Сортировка данных в порядке убывания общего среднего балла:

float sb,sb_next;

int i,j,n;

bool p;

AnsiString st;

n=StringGrid1->RowCount-1;

do {

p=false;

for(i=1;i<n;i++) {

sb=StrToFloat(StringGrid1->Cells[8][i]);

sb_next=StrToFloat(StringGrid1->Cells[8][i+1]);

if(sb<sb_next) {

//Обмен строк

for(j=0;j<=StringGrid1->ColCount-1;j++) {

st=StringGrid1->Cells[j][i];

StringGrid1->Cells[j][i]=StringGrid1->Cells[j][i+1];

StringGrid1->Cells[j][i+1]=st;

}

p=true;

}

}

}

while(p);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::N12Click(TObject *Sender)

{

Form2->ShowModal();

}

//---------------------------------------------------------------------------

Модуль формы «О программе и авторе» Unit2.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

Заголовочный файл Unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Menus.hpp>

#include <Grids.hpp>

#include <Dialogs.hpp>

//---------------------------------------------------------------------------

class TForm1: public TForm

{

__published: // IDE-managed Components

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N3;

TMenuItem *N4;

TMenuItem *N5;

TMenuItem *N6;

TMenuItem *N9;

TMenuItem *N10;

TMenuItem *N13;

TMenuItem *N14;

TMenuItem *N16;

TStringGrid *StringGrid1;

TLabel *Label1;

TStringGrid *StringGrid2;

TLabel *Label3;

TEdit *Edit1;

TLabel *Label6;

TEdit *Edit2;

TMenuItem *N7;

TMenuItem *N2;

TOpenDialog *OpenDialog1;

TSaveDialog *SaveDialog1;

TMenuItem *N8;

TMenuItem *N11;

TLabel *Label2;

TLabel *Label4;

TMenuItem *N12;

void __fastcall N10Click(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall N5Click(TObject *Sender);

void __fastcall N14Click(TObject *Sender);

void __fastcall N13Click(TObject *Sender);

void __fastcall N4Click(TObject *Sender);

void __fastcall N6Click(TObject *Sender);

void __fastcall N16Click(TObject *Sender);

void __fastcall N8Click(TObject *Sender);

void __fastcall N11Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall N12Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Заголовочный файл Unit2.h

#ifndef Unit2H

#define Unit2H

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <Graphics.hpp>

class TForm2: public TForm

{

__published: // IDE-managed Components

TImage *Image1;

TMemo *Memo1;

private: // User declarations

public: // User declarations

__fastcall TForm2(TComponent* Owner);

};

extern PACKAGE TForm2 *Form2;

#endif

Размещено на Allbest.ru

...

Подобные документы

  • Разработка приложения "Ведомость начисления заработной платы" в среде программирования C++Builder. Алгоритм и сценарий работы программы. Проектирование интерфейса пользователя. Написание программных модулей и результаты тестирования данной программы.

    курсовая работа [597,4 K], добавлен 31.01.2016

  • Применение программных систем при анализе медицинских изображений. Разработка программной структуры, описывающей текстовую составляющую формата DICOM, осуществляющей обработку и анализ его при помощи интегрированной среды программирования C++ Builder.

    дипломная работа [4,6 M], добавлен 28.10.2013

  • Создание консольных приложений с использованием графического интерфейса пользователя. Содержание палитры компонентов программы С++ Builder. Использование возможностей объектно-ориентированного программирования, особенности редактора кода и форм в С++.

    лекция [27,0 K], добавлен 22.12.2010

  • C++ Builder - SDI-приложение, главное окно которого содержит настраиваемую инструментальную панель и палитру компонентов. Свойства атрибутов компонента, определяющие его внешний вид и поведение. События, методы и VCL компоненты в среде C++ Builder.

    курсовая работа [225,9 K], добавлен 12.02.2009

  • Визуальное проектирование и событийное программирование. Повышение производительности программиста при использовании RAD-систем. Составление алгоритмов, разработка приложения для решения прикладных задач на примере консольных приложений C++ Builder 6.

    курсовая работа [258,7 K], добавлен 30.10.2013

  • Организация файлов и доступ к ним. Файловые операции. Программирование с использованием встроенных функций ввода-вывода; линейных, разветвляющихся и циклических вычислительных процессов с использованием If-else, оператора выбора Case; массивов и матриц.

    курсовая работа [5,8 M], добавлен 24.05.2014

  • Работа в Borland C++ Builder. Среда разработки и компоненты C++ Builder. Свойства компонентов. Менеджер проектов. Создание приложений в C++ Builder. Выбор компонентов для групповых операций. Работа с базами данных в Borland C++ Builder.

    курсовая работа [35,8 K], добавлен 11.06.2007

  • Разработка программного продукта (лабиринт с входом и выходом, состоящий из комнат) в среде разработки Borland C++ Builder 6. Требования пользователя к программному изделию. Программные ограничения, совместимость. Основные процессы разработки программы.

    курсовая работа [819,9 K], добавлен 14.01.2013

  • Проектирование физической и логической моделей удаленной базы данных для АЗС. Разработка базы данных в СУБД Firebird с помощью утилиты IBExpert. Создание клиентского приложения для Windows с использованием клиент-серверной технологии в среде C++ Builder.

    курсовая работа [3,9 M], добавлен 18.01.2017

  • Проектирование программного обеспечения. Схема начального формирования каталога файлов, вывода на экран каталога файлов, удаления файлов, сортировки файлов по имени, дате создания и размеру методом прямого выбора. Управление каталогом в файловой системе.

    курсовая работа [804,0 K], добавлен 08.01.2014

  • Разработка программы для работы с базой данных "Библиотека" в среде Borland C++Builder 6 на языке программирования C++ с использованием визуальных средств. Структура информации, подключение к ней и ее отображение. Описание пользовательского интерфейса.

    курсовая работа [1,5 M], добавлен 19.05.2014

  • Проектирование структуры и архитектуры программного продукта. Реализация программы конвертера файлов баз данных. Описание пользовательского интерфейса. Выбор порядка конвертации dbf файлов. Создание и исполнение шаблонов. Расчет себестоимости продукта.

    дипломная работа [2,2 M], добавлен 21.06.2013

  • Характеристика программных продуктов: MySQL, MSSQL, MSAccess. Разработка базы данных в среде C++Builder. Описание таблиц и установление связей между ними. Реализация функций просмотра, добавления, редактирования БД с применением языка запросов SQL.

    курсовая работа [393,0 K], добавлен 13.06.2015

  • Разработка программного продукта - базы данных "Экскурсия" в интегрированной среде программирования C++ Builder 6. Определение порядка просмотра данных базы, их редактирования и удаления. Особенности руководства пользователя и общего интерфейса программы.

    курсовая работа [2,4 M], добавлен 03.11.2013

  • Современные графические обозреватели. Возможность редактирования графики. Объектно-ориентированное программирование в среде ".NET". Библиотека классов GDI+. Открывание как одного файла, так и директории. Перелистывание файлов при помощи кнопок.

    курсовая работа [804,4 K], добавлен 14.11.2015

  • Основные понятия и назначение технологии JavaBeans, ее компоненты и принцип работы, преимущества. Методика создания jar файлов в среде Eclipse. Структура файлов манифеста. Создание многопоточных приложений. Изучение визуального редактора Java BeanBox.

    лабораторная работа [67,4 K], добавлен 30.06.2009

  • Сетевое программное обеспечение: общее понятие, содержание, функции. Этапы развития теории компьютерных сетей. Проектирование в среде программирования Borland Builder C++ клиент серверного приложения с использованием сокетов, листинг данной программы.

    курсовая работа [191,5 K], добавлен 07.01.2015

  • Анализ баз данных и систем управления ими. Проектирование и создание реляционной базы данных в среде MS Access для ресторана "Дельфин": построение информационно логической модели, разработка структур таблиц базы данных и схемы данных, создание Web-узла.

    курсовая работа [3,7 M], добавлен 15.11.2010

  • Разработка прикладной программы для операций создания и уничтожения объектов в системе визуального объектно-ориентированного программирования C++Builder. Алгоритм работы программы, набор функций и операторов, компонент и модулей, кнопки событий.

    дипломная работа [672,5 K], добавлен 16.08.2012

  • Разработка приложений для работы с графикой в Borland C++ Builder. Вывод изображения на экран, изменение цвета и толщины линии контура, перемещение объекта по экрану, получение нового объекта вычитанием двух существующих. Основные обработчики событий.

    контрольная работа [1,5 M], добавлен 28.03.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.