Создание диалоговых программ с использованием структур и файлов в среде C++Builder
Резюме
Тема курсовой работы «Создание диалоговых программ с использованием
структур и файлов в среде C++Builder»
Ключевые слова: алгоритм, программа, структура данных, файл, обработка
данных, среда программирования C++Builder.
Цель курсовой работы - обобщить знания по управляющим операторам языка C++; овладеть практическими навыками в
организации ввода/вывода значений комбинированных типов данных; получить
практические навыки программирования задач с использованием структур и файлов в
среде C++Builder.
Объектом исследования выступают структурированные данные, которые можно
представить в виде таблицы.
Предметом исследования настоящей работы является разработка компьютерной
программы в среде C++Builder, которая позволяет создать и
обработать структуру данных, определенную вариантом задания.
В работе были использованы методы сортировки и фильтрации данных.
Оглавление
Введение
. Теоретическая часть
.1 Постановка задачи
.1.1 Название и назначение разрабатываемого приложения
.1.2 Спецификация входных и выходных данных
.1.3 Обоснование выбора средства программирования
.1.4 Требования к аппаратной части и ПО
.2 Основные аспекты обработки структур и файлов в среде
C++Builder
.3 Алгоритм и сценарий работы программы
. Практическая часть
.1 Проектирование интерфейса пользователя
.2 Написание программных модулей
.3 Результаты тестирования программы
Заключение
Введение
Информация - специфический атрибут реального мира, представляющий собой
его объективное отражение в виде совокупности сигналов и проявляющийся при
взаимодействии с "приемником" информации, позволяющим выделять,
регистрировать эти сигналы из окружающего мира и по тому или иному критерию их
идентифицировать.
Из этого определения следует, что:
Ø информация объективна, так как это свойство материи -
отражение;
Ø информация проявляется в виде сигналов и лишь при
взаимодействии объектов;
Ø одна и та же информация различными получателями может быть
интерпретирована по-разному в зависимости от "настройки"
"приемника".
Последовательность действий, выполняемых с информацией, называют
информационным процессом. Основными информационными процессами являются:
Ø сбор (восприятие) информации;
Ø подготовка (преобразование) информации;
Ø передача информации;
Ø обработка (преобразование) информации;
Ø хранение информации;
Ø отображение (воспроизведение) информации.
Так как материальным носителем информации является сигнал, то реально это
будут этапы обращения и преобразования сигналов (рис.1).
На этапе восприятия информации осуществляется целенаправленное извлечение
и анализ информации о каком-либо объекте (процессе), в результате чего
формируется образ объекта, проводятся его опознание и оценка.
Рис. 1. Основные информационные процессы
программирование
диалоговый приложение
На этапе подготовки информации осуществляется ее первичное
преобразование. На этом этапе проводятся такие операции, как нормализация,
аналого-цифровое преобразование, шифрование. Иногда этап подготовки
рассматривается как вспомогательный на этапе восприятия. В результате восприятия
и подготовки получается сигнал в форме, удобной для передачи, хранения или
обработки.
На этапе передачи информация пересылается из одного места в другое (от
отправителя получателю - адресату). Передача осуществляется по каналам
различной физической природы, самыми распространенными из которых являются
электрические, электромагнитные и оптические.
На этапах обработки информации выявляются ее общие и существенные
взаимозависимости, представляющие интерес для системы. Преобразование
информации на этапе обработки (как и на других этапах) осуществляется либо
средствами информационной техники, либо человеком.
Под обработкой информации понимается любое ее преобразование, проводимое
по законам логики, математики, а также неформальным правилам, основанным на
"здравом смысле", интуиции, обобщенном опыте, сложившихся взглядах и
нормах поведения.
На этапе хранения информацию записывают в запоминающее устройство для
последующего использования. Для хранения информации используются в основном
полупроводниковые и магнитные носители.
Этап отображения информации должен предшествовать этапам, связанным с
участием человека. Цель этого этапа - предоставить человеку нужную ему
информацию с помощью устройств, способных воздействовать на его органы чувств.
В данной курсовой работе предусматривается выполнение следующих действий:
1) постановка задачи в формализованном виде;
2) построение алгоритма решения задачи;
) реализация алгоритма на ПК путем создания программы в среде C++Builder;
) тестирование и отладка программы;
) анализ полученных данных и формулировка выводов;
) создание и оформление резюме.
В данной курсовой работе разработана программа, позволяющая вводить
данные о наименовании, норме времени, расценке и количестве производимых
изделий, открывать и сохранять данные о них. Программа также помогает
рассчитать сумму и общее время изготовления деталей, сортировать данные и
отображать изделия с суммой меньше заданной.
В соответствии с заданием на разработку создание программы производилась
в среде C++ Builder 6. C++ Builder - программный продукт, инструмент
быстрой разработки приложений (RAD), интегрированная среда программирования
(IDE), система, используемая программистами для разработки программного
обеспечения на языке программирования C++.++ Builder объединяет в себе комплекс
объектных библиотек (STL, VCL, CLX, MFC и др.), компилятор, отладчик, редактор
кода и многие другие компоненты. Цикл разработки аналогичен Delphi. Большинство
компонентов, разработанных в Delphi, можно использовать и в C++ Builder без
модификации, но обратное утверждение не верно.++ Builder содержит инструменты,
которые делают разработку визуальной, упрощает программирование благодаря
встроенному WYS/WYG - редактору интерфейса.
Условно программированием можно назвать научную и практическую деятельность
по созданию программ. Основной частью программирования является процесс решения
задачи на ЭВМ, который можно разбить на следующие этапы:
1) математическая или информационная формулировка задачи;
) выбор численного или иного метода решения поставленной задачи;
) построение алгоритма решения поставленной задачи;
) выбор языка программирования и запись построенного алгоритма по его
правилам, т.е. написание текста программы;
) отладка программы - это процесс обнаружения, локализации и устранения
возможных ошибок;
) выполнение программы, т.е. получение требуемого результата [2].
Формулировка задачи является темой данной курсовой работы и заключается в
написании программы, которая позволяет создать анимацию неподвижного объекта в
среде разработки C++ Builder 6.
Среда C++Builder представляет собой средство быстрой разработки
приложений (Rapid Application Development - RAD).
Концепция
RAD стала ответом на неуклюжие методы разработки программ 1970-х
<#"871091.files/image002.gif">
Рисунок 1.1. - Алгоритм работы программы
2. Практическая часть
2.1
Проектирование интерфейса пользователя
При проектировании интерфейса были использованы следующие компоненты:
) Для отображения различных надписей на форме используются в
основном компоненты Label;
) MainMenu, расположеный на странице Standard, это невизуальный
компонент, т.е. место его размещения на форме в процессе проектирования не
имеет никакого значения для пользователя - он все равно увидит не сам
компонент, а только меню, сгенерированное им. Обычно на форму помещается один
компонент MainMenu. В этом случае его имя автоматически заносится в свойство
формы Menu. Но можно поместить на форму и несколько компонентов MainMenu с
разными наборами разделов, соответствующими различным режимам работы
приложения. В этом случае во время проектирования свойству Menu формы
присваивается ссылка на один из этих компонентов. А в процессе выполнения в
нужные моменты это свойство можно изменять, меняя соответственно состав
главного меню приложения.
Основное свойство компонента - Items. Его заполнение производится с
помощью Конструктора Меню, вызываемого двойным щелчком на компоненте MainMenu
или нажатием кнопки с многоточием рядом со свойством Items в окне Инспектора
Объектов.
) Компонент StringGrid представляет собой таблицу, содержащую
строки. Данные таблицы могут быть только для чтения или редактирования. Таблица
может иметь полосы прокрутки, причем заданное число первых строк и столбцов
может быть фиксированным и не прокручиваться. Таким образом, можно задать
заголовки столбцов и строк, постоянно присутствующие в окне компонента. Каждой
ячейке таблицы может быть поставлен в соответствие некоторый объект. Компонент
StringGrid предназначен в первую очередь для отображения таблиц текстовой
информации. Однако компонент может отображать и графическую информацию.
Рисунок 2.1. - Скрин формы «Ведомость выработки изделий»
Для второй формы использовались следующие компоненты:
) компонент Image - отображение картинки на форме.
) Компонент Memo - многострочный текстовый редактор. Memo формат
определяется текущим состоянием свойства Font компонента Memo.
2.2 Написание
программных модулей
) Обработчик события - закрытие формы:
void __fastcall TForm1::N7Click(TObject *Sender)
Программный код каждого обработчика событий в полном размере приведен в
приложении.
) Обработчик события - удаление текущей строки:
void __fastcall TForm1::N9Click(TObject *Sender).
3) Обработчик события - Добавление строки в конец таблицы
void __fastcall TForm1::N8Click(TObject *Sender).
4) Обработчик события - Создать (очистка таблиц):
void __fastcall TForm1::N12Click(TObject *Sender).
5) Обработчик события - Открытие второй формы (справка):
void __fastcall TForm1::N4Click(TObject *Sender).
6) Обработчик события - Запись таблицы в файл:
void __fastcall TForm1::N6Click(TObject *Sender).
7) Обработчик события - Открытие файла и чтение его в таблицу:
void __fastcall TForm1::N5Click(TObject *Sender).
8) Обработчик события - Вычислить для каждой общее время и сумму:
void __fastcall TForm1::N13Click(TObject *Sender).
9) Обработчик события - Сортировка данных по возрастанию общего
времени на изготовление изделий:
void __fastcall TForm1::N10Click(TObject *Sender).
10) Обработчик события - Сортировка данных по № п/п (вернуться к
исходной последовательности строк):
void __fastcall TForm1::N11Click(TObject *Sender).
11) Обработчик события - Вычисление среднего времени выработки одного
изделия по данным всей таблицы:
void __fastcall TForm1::Button1Click(TObject *Sender).
12) Обработчик события -Отображение данных, у которых сумма меньше
указанной:
void __fastcall TForm1::Button2Click(TObject *Sender).
.3 Результаты
тестирования программы
Для тестирования программы подготовили тестовые данные. Они вводятся в
верхнюю таблицу и по команде меню Сохранить записываются в двоичный файл. Перед
записью данных из таблицы в файл выполняется команда Вычислить, для вычисления
средних баллов. Имя файла с тестовыми данными table.txt.
По команде меню Создать таблица с данными очищается.
По команде меню Открыть данные читаются из файла и отображаются в верхней
таблице (см. рис. 5).
Были введены следующие данные:
Наименование изделия - Гайка;Гвоздь.
Норма времени на 1 изд., час - 10;15.
Расценка на 1изд., час. - 100;300.
Кол-во изделий - 2000;8000.
Результат указан на рис.2.1.
Рисунок 2.1. - Результат выполнения программы при вводе данных с
клавиатуры и отображение в окне «Ведомость выработки изделий».
Следующий режим тестирования - «ввод данных из файла».
Результат указан на рис. 2.2.
Рисунок 2.1. - Результат выполнения программы при вводе данных из файла и
отображение в окне «Ведомость выработки изделий»
Рисунок 2.3. Результат поиска по Сумме меньшей чем «10000000» и результат
сортировка по общему времени
Заключение
Программа, описанная в курсовой работе, разработана в соответствии с
постановкой задачи на выполнение курсовой работы.
Разработка программы производилась в среде C++ Builder
6. Интерфейс созданной программы удобен, прост, наглядно отображает её
возможности.
Тестирование программы осуществлялось в трёх режимах: ввод данных для
построения с клавиатуры, ввод данных из файла.
Работоспособность программы позволяет сделать вывод о её пригодности для
автоматизации подсчета суммы и общего времени.
Список использованных источников
1. Основы алгоритмизации и программирования. Язык
Си: учеб. пособие / М. П. Батура, В. Л. Бусько, А. Г. Корбит, Т. М.
Кривоносова. - Минск: БГУИР, 2007. - 240 с. : ил.
2. Керниган Б., Ритчи Д. Язык программирования Си = The
C programming language. - 2-е изд. - М.: Вильямс, 2007.
3. Программирование в C++ Builder
6: А.Я. Архангельский. -М.: изд. "Бином", 2003.
4. Побельский В.В. Язык Си++: Учеб. Пособие. - М.;
Финансы и статистика, 1995. - 560с.: ил.
5. Самоучитель C++ Builder: Н.Б. Культин. -СПб.: БХВ-Петербург,
2004.
. Вычислительная геометрия и компьютерная графика на C++: М. Ласло пер. с англ.В. Львова.
-М.: изд. "Бином", 1997.
. Романов Е.Л., Практикум по программированию на С++.
СПБ, 2004 - 432с.
Приложение
Текст программы
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include
<iostream.h>
#include <io.h>
//---------------------------------------------------------------------------
#pragma
package(smart_init)
#pragma resource
"*.dfm"*Form1;
//Ñòðóêòóðà
çàïèñè:sved {namber; //Ïîðÿäêîâûé
íîìåð.Naimenovanie[20]; //Íàèìåíîâàíèå
Èçäåëèÿ.nachas; //Íîðìà
íà 1 èçä., ÷àñ.rascenka; //Ðàñöåíêà
íà 1 èçä., ÷àñ.colvo; //Êîëëè÷åñòâî
èçäåëèé.obshee; //Îáùååå
âðåìÿ.sum; //Ñóììà
ðóá.
};
int
size=sizeof(sved); //ðàçìåð â
áàéòàõ
îäíîé
ñòðóêòóðû
(çàïèñè).
//Ïåðåìåííàÿ
- ñòðóêòóðû:sved sprav;
//Óêàçàòåëü
íà ôàéë:*f;
//Èìÿ
ôàéëà:File_Zap;
//---------------------------------------------------------------------------
__fastcall
TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TForm1::FormCreate(TObject *Sender)
{
//Íà÷àëüíûå
äåéñòâèÿ ïðè
ñîñäàíèè
ôîðìû:->Options = StringGrid1->Options <<
goEditing;
//Ôîðìèðîâàíèå
çàãîëîâêîâ
ñòîëáöîâ:->Cells[0][0]=" ¹
ï/ï";->Cells[0][1]="1";
StringGrid1->Cells[1][0]="Íàèìåíîâàíèå
èçäåëèÿ";
StringGrid1->Cells[2][0]="Íîðìà
âðåìåíè íà 1
èçä., ÷àñ";
StringGrid1->Cells[3][0]="Ðàñöåíêà
íà 1
èçä.,ðóá.";id1->Cells[4][0]="Êîë-âî
èçäåëèé";
StringGrid1->Cells[5][0]="Îáùåå
âðåìÿ,÷àñ";
StringGrid1->Cells[6][0]="Ñóììà,
ðóá.";->Cells[0][1]="1";
StringGrid2->Cells[1][0]="Íàèìåíîâàíèå
èçäåëèÿ";
StringGrid2->Cells[2][0]="Íîðìà
âðåìåíè íà 1
èçä., ÷àñ";
StringGrid2->Cells[3][0]="Ðàñöåíêà
íà 1 èçä.,ðóá.";
StringGrid2->Cells[4][0]="Êîë-âî
èçäåëèé";
StringGrid2->Cells[5][0]="Îáùåå
âðåìÿ,÷àñ";
StringGrid2->Cells[6][0]="Ñóììà,
ðóá.";
}
//---------------------------------------------------------------------------__fastcall
TForm1::Save1Click(TObject *Sender)
{
//Çàïèñü
òàáëèöû â
ôàéë:i,n;str;
try
{ //Áëîê
çàùèòû
îïåðàòîðîâ.
//Ïåðåñ÷åò
ñðåäíèõ
áàëëîâ ïåðåä
ñîõðàíåíèåì:
//Îòêðûòèå
ôàéëà äëÿ
çàïèñè:(SaveDialog1->Execute()){_Zap =
SaveDialog1->FileName;=fopen(File_Zap.c_str(),"wb");=StringGrid1->RowCount-1;
//Çàïèñü
ñòðîê
òàáëèöû â
ôàéë:(i=1;i<=n;i++)
{.namber=StrToInt(StringGrid1->Cells[0][i]);=StringGrid1->Cells[1][i];(sprav.Naimenovanie,str.c_str());.nachas=StrToFloat(StringGrid1->Cells[2][i]);.rascenka=StrToFloat(StringGrid1->Cells[3][i]);.colvo=StrToInt(StringGrid1->Cells[4][i]);.obshee=StrToFloat(StringGrid1->Cells[5][i]);.sum=StrToFloat(StringGrid1->Cells[6][i]);(&sprav,size,1,f);
}
//Çàêðûòèå
ôàéëà:(f);
ShowMessage("Äàííûå
ñ òàáëèöû
óñïåøíî
çàïèñàíû â ôàéë!");
}
}( ... ){
//Îáðàáîòêà
îøèáêè
íåêîððåêòíîñòè
äàííûõ:(f);
ShowMessage("Íåêîððåêòíûå
äàííûå!");
}
}
//---------------------------------------------------------------------------__fastcall
TForm1::Open1Click(TObject *Sender)
{(OpenDialog1->Execute()){_Zap
= OpenDialog1->FileName;=fopen(File_Zap.c_str(),"rb");
//×òåíèå
n (êîëè÷åñòâî
çàïèñåé):D_f = fileno(f); //
Íàõîäèì
äåñêðèïòîð
ôàéëàlen = filelength(D_f); //
Íàõîäèì
ðàçìåð ôàéëài,n;= len/size; //Êîëè÷åñòâî
çàïèñåé â
ôàéëå->RowCount=n+1;
//×òåíèå
n çàïèñåé èç
ôàéëà â
òàáëèöó:(i=1;i<=n;i++)
{(&sprav,size,1,f);->Cells[0][i]=IntToStr(sprav.namber);->Cells[1][i]=sprav.Naimenovanie;->Cells[2][i]=FloatToStr(sprav.nachas);->Cells[3][i]=FloatToStr(sprav.rascenka);->Cells[4][i]=IntToStr(sprav.colvo);->Cells[5][i]=FloatToStr(sprav.obshee);->Cells[6][i]=FloatToStr(sprav.sum);
}(f);
}
}
//---------------------------------------------------------------------------__fastcall
TForm1::N2Click(TObject *Sender)
{j;->RowCount=2;(j=1;j<=StringGrid1->ColCount-1;j++)->Cells[j][1]="";
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button1Click(TObject *Sender)
{->RowCount++;->Cells[0][StringGrid1->RowCount-1]=IntToStr(StringGrid1->RowCount-1);
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button2Click(TObject *Sender)
{i,j;(StringGrid1->RowCount>2)
{(i=StringGrid1->Row;i<StringGrid1->RowCount-1;i++)
{->Cells[0][i]=IntToStr(i);(j=1;j<=StringGrid1->ColCount-1;j++)
{->Cells[j][i]=StringGrid1->Cells[j][i+1];
}
}->RowCount--;
}
}
//-------------------------------------------------------------------------__fastcall
TForm1::Edit1Change(TObject *Sender)
{->Clear();
}
//---------------------------------------------------------------------------__fastcall
TForm1::N6Click(TObject *Sender)
{i;(i=1;i<StringGrid1->RowCount;i++)
{.nachas=StrToFloat(StringGrid1->Cells[2][i]);.rascenka=StrToFloat(StringGrid1->Cells[3][i]);.colvo=StrToFloat(StringGrid1->Cells[4][i]);.obshee=sprav.nachas*sprav.colvo;.sum=sprav.rascenka*sprav.colvo;->Cells[5][i]=FloatToStrF(sprav.obshee,ffFixed,8,2);->Cells[6][i]=FloatToStrF(sprav.sum,ffFixed,8,2);
//---------------------------------------------------------------------------__fastcall
TForm1::N4Click(TObject *Sender)
{sb,sb_next;i,j,n;p;st;=StringGrid1->RowCount-1;{=false;(i=1;i<n;i++)
{=StrToFloat(StringGrid1->Cells[0][i]);_next=StrToFloat(StringGrid1->Cells[0][i+1]);(sb>sb_next)
{(j=0;j<=StringGrid1->ColCount-1;j++)
{=StringGrid1->Cells[j][i];->Cells[j][i]=StringGrid1->Cells[j][i+1];->Cells[j][i+1]=st;
}=true;
}
}
}(p);
}
//---------------------------------------------------------------------------__fastcall
TForm1::N5Click(TObject *Sender)
{sb,sb_next;i,j,n;p;st;=StringGrid1->RowCount-1;{=false;(i=1;i<n;i++)
{=StrToFloat(StringGrid1->Cells[5][i]);_next=StrToFloat(StringGrid1->Cells[5][i+1]);(sb>sb_next)
{(j=0;j<=StringGrid1->ColCount-1;j++) {=StringGrid1->Cells[j][i];->Cells[j][i]=StringGrid1->Cells[j][i+1];->Cells[j][i+1]=st;
}=true;
}
}
}(p);
}
//---------------------------------------------------------------------------__fastcall
TForm1::Exit1Click(TObject *Sender)
{->Close();
}
//---------------------------------------------------------------------------__fastcall
TForm1::Button4Click(TObject *Sender)
{i,n,
k;Summ;enteredsumm;=StringGrid1->RowCount;=0;=StrToFloat(Edit1->Text);(i=1;i<n;i++)
{=StrToFloat(StringGrid1->Cells[6][i]);(Summ<enteredsumm){++;
//StringGrid2->Cells[0][k]=IntToStr(k);->Cells[1][k]=StringGrid1->Cells[1][i];->Cells[2][k]=StringGrid1->Cells[2][i];->Cells[3][k]=StringGrid1->Cells[3][i];->Cells[4][k]=StringGrid1->Cells[4][i];->Cells[6][k]=StringGrid1->Cells[6][i];->Cells[5][k]=StringGrid1->Cells[5][i];
}
}
}
//---------------------------------------------------------------------------.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
<Classes.hpp>
#include
<Controls.hpp>
#include
<StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
#include
<Dialogs.hpp>
#include
<ActnCtrls.hpp>
#include
<ActnMan.hpp>
#include <ToolWin.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------TForm1
: public TForm
{
__published: //
IDE-managed
Components*StringGrid1;*Button1;*Button2;*Button4;*OpenDialog1;*SaveDialog1;*MainMenu1;*N1;*Open1;*Save1;*Exit1;*N2;*N3;*N4;*N5;*Edit1;*N6;*StringGrid2;__fastcall
FormCreate(TObject *Sender);__fastcall Save1Click(TObject *Sender);__fastcall
Open1Click(TObject *Sender);__fastcall N2Click(TObject *Sender);__fastcall
Button1Click(TObject *Sender);__fastcall Button2Click(TObject
*Sender);__fastcall Edit1Change(TObject *Sender);__fastcall N6Click(TObject
*Sender);__fastcall N4Click(TObject *Sender);__fastcall N5Click(TObject
*Sender);__fastcall Exit1Click(TObject *Sender);__fastcall Button4Click(TObject
*Sender);: // User declarations: // User declarations
__fastcall
TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------PACKAGE
TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
-----------------------------------------