Разработка однотабличной базы данных. Курсовая работа (т). Информационное обеспечение, программирование.

⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Информационное обеспечение, программирование
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!
Похожие работы на - Разработка однотабличной базы данных
Скачать Скачать документ
Информация о работе Информация о работе
Скачать Скачать документ
Информация о работе Информация о работе
Скачать Скачать документ
Информация о работе Информация о работе
Скачать Скачать документ
Информация о работе Информация о работе
Скачать Скачать документ
Информация о работе Информация о работе
Скачать Скачать документ
Информация о работе Информация о работе
Скачать Скачать документ
Информация о работе Информация о работе
Нужна качественная работа без плагиата?
Не нашел материал для своей работы?
Поможем написать качественную работу Без плагиата!
. АНАЛИЗ ЗАДАНИЯ И ПОСТАНОВКА ЗАДАЧ
.3 Архитектурные требования к
программе
ПРИЛОЖЕНИЕ А - МОДУЛЬНАЯ СХЕМА
ПРОГРАММЫ
ПРИЛОЖЕНИЕ
Б - ФУНКЦИОНАЛЬНАЯ СХЕМА ПРОГРАММЫ
Цель курса: ознакомление студента с
конструированием программ на высокоуровневых языках программирования на примере
Pelec C, закрепление и углубление знаний, полученных в процессе изучения
дисциплины «Конструирование программ и языки программирования». Также к задачам
можно отнести приобретение навыков самостоятельного творческого решения
общетеоретических и практических вопросов разработки различных программ.
Курсовая работа состоит в самостоятельном
изучении, анализе и решении инженерной задачи, содержащей элементы
практического и прикладного характера, является решающей оценкой знаний
студента, также умения самостоятельно изучить материал, необходимый для
разработки курсовой работы. Целью же курсовой является разработка программы,
имеющей реальное применение на практике.
В процессе выполнения курсовой работы студент
ознакомляется со специальной научно-технической литературой и документацией,
методическими и другими материалами.
Для студентов заочного отделения предполагается
изучение темы «однотабличная база данных».
1.
АНАЛИЗ ЗАДАНИЯ И ПОСТАНОВКА ЗАДАЧ
База данных содержит информацию о компьютерных
комплектующих на складе: тип (строка 10 символов),
- основные характеристики (строка 20
символов);
- серийный номер (целое шестизначное
число);
Дата продажи при вводе записи не указывается.
Дополнительно реализовать сервис продажи (при завершении указывается дата
продажи), а также отчет о продажах за определенный день.
Курсовая работа представляет собой создание
простейшей однотабличной базы данных. Программа должна осуществлять:
- Запись и загрузку файла базы данных
(бинарный файл).
- Добавление новых записей, удаление и
редактирование старых.
- Сортировать записи по любому из
полей базы данных в любом направлении.
- Фильтровать записи по значению
любого поля.
- Осуществлять поиск записей по
значению любого поля.
- Выполнять дополнительную обработку
(с сохранением результата в текстовый файл).
Обработку данных производить в динамическом
списке связанного хранения.
Выделение и освобождение динамической памяти
осуществляется поэлементно. Чтение и запись данных в файл базы данных
производится поэлементно. Программа должна обладать дружественным и интуитивно
понятным интерфейсом и проводить проверку на корректность вводимых данных.
1.3 Архитектурные требования к программе
Результатом выполнения курсовой работы должна
стать разработка программы в соответствии с темой. К программе предъявляются
следующие требования:
- аппаратная архитектура - IBM
PC совместимый
компьютер на базе x86
совместимого процессора;
- операционная система - MS
Windows 9x/ME/XP;
- язык программирования - язык С
стандарта ANSI С99 или C89;
- среда разработки - Pelles
C 4.5 и выше;
- вид приложения - WinGUI
(интерфейс должен быть построен с помощью WinApi).
По согласованию с преподавателем для реализации
проекта выбран язык С++, среда разработки Borland C++ Builder 6.
Выбор обоснован тем, что использование данной
среды позволит быстро сконструировать оконный интерфейс высокого уровня, не
отвлекаясь на его реализацию и настройку, сосредоточившись на реализации
классов бизнес-логики.
Для разработки проекта необходимо решить ряд
более мелких задач, на которые можно разбить проект:
- реализация класса табличной записи о
комплектующем. Потребуется изучить основы объектно-ориентированного
программирования для реализации класса, содержащего указанные по заданию типы
данных;
- реализация класса динамического
списка связного хранения. Потребуется изучить приемы реализации динамических
списков связного хранения, а также методов их обработки, таких как: вставка
элемента, удаление элемента, изменение элемента, сортировка списка, поиск и
фильтрация элементов списка;
- работа с файлами. Потребуется
изучить методы чтения/записи бинарных файлов и записи текстовых файлов;
- создание графического интерфейса
пользователя. Интерфейс должен быть дружелюбным и интуитивно понятным, поэтому
потребуется освоить методы заполнения и получения данных таблиц, а также
текстовых полей.
Программа будет разбита три окна: главное окно,
окно просмотра/редактирования комплектующих и окно продажи комплектующих. Также
будет создано три модуля: главный модуль, модуль с классом комплектующего и
модуль с классом динамического списка.
В этом модуле будет находиться главная функция
WINAPI WinMain,
согласовывающая работу модулей и реализующая диалоговую работу с пользователем.
В этом модуле будет находиться реализация класса
комплектующего.
В этом модуле будет находиться реализация класса
динамического списка, включающая в себя его реализацию а также все методы
обработки списка, описанные в разделе 2.
В этом модуле будет описано главное окно, к нему
буду подключены другие модули с окнами.
В этом модуле будет находиться реализация
табличного представления данных, а также текстовые поля, позволяющие
редактировать и вводить новые данные.
В этом модуле будет находиться реализация класса
табличного представления данных, а также сервис продажи комплектующих.
В модуль main.h
будут подключаться интерфейсы других окон view.h
и sell.h.
В каждое из других окон будет подключен интерфейс динамического списка List.h.
Модульная схема программы изображена в приложении А.
В этом модуле находится главная функция WINAPI
WinMain(HINSTANCE,
HINSTANCE, LPSTR,
int), согласовывающая
работу модулей и реализующая диалоговую работу с пользователем. (см. листинг
1):
#include
//подключаем
библиотеку визуальных компонентов
//---------------------------------------------------------------------------
USEFORM("main.cpp",
MainForm); //форма главного
окна
USEFORM("view.cpp",
ViewForm); //форма
просмотра комплектющих
USEFORM("sell.cpp",
SellForm); //форма продажи
комплектующих
//---------------------------------------------------------------------------
//HINSTANCE
- идентификатор текущего приложения;
//HINSTANCE
- идентификатор приложения, являющегося родительским для данного приложения;
//LPTSTR
- С-строка, содержащая параметры командной строки;
//int
nCmdShow - код вида
начального отображения окна
WINAPI WinMain(HINSTANCE, HINSTANCE,
LPSTR, int)
{>Initialize(); //инициализируем
приложение>CreateForm(__classid(TMainForm), &MainForm); //создаем
главное окно>CreateForm(__classid(TViewForm), &ViewForm); //создаем окно
просмотра комплектующих>CreateForm(__classid(TSellForm), &SellForm);
//создаем окно продажи комплектующих>Run(); //запускаем приложение
{ //обработка
исключений>ShowException(&exception);
В модуле Hardware
нет глобальных переменных, и интерфейс модуля содержит только прототипы
функций, которые могут быть вызваны в модуле List.cpp,
листинг 2 является листингом интерфейса Hardware.h.
{:
type[10]; //тип (строка
10 символов)
char
describe[15]; //описание
(строка 15 символов)
char
parametrs[20]; //основные
характеристики (строка 20 символов)
Integer
serial; //серийный номер
(целое шестизначное число)
TDate
dateSell; //дата продажи
(дд.мм.гггг)
__fastcall Hardware(char *
inType,char * inDescribe, char * inParametrs, Integer inSerial, DATE
inDateSell, Integer inPrice);
В Hardware.cpp
находится реализация описанных методов класса (см. листинг 3):
__fastcall Hardware::Hardware(char *
inType,char * inDescribe, char * inParametrs, Integer inSerial, DATE
inDateSell, Integer inPrice){(type,inType,10);(describe,
inDescribe,15);(parametrs, inParametrs,20);=inSerial;=inDateSell;=inPrice;
__fastcall
Hardware::~Hardware(){type;describe;parametrs;
В модуле List
нет глобальных переменных, и интерфейс модуля содержит только прототипы
функций, которые могут быть вызваны в модуле view.cpp
и sell.cpp,
листинг 4 является листингом интерфейса List.h.
Hardware
* hard; // комплектующее*
next; //Ссылка на следующий элемент списка
//класс спискаdyn_list {:*
head; // Первый элемент
(голова) списка* tail; // Последний элемент (хвост) списка
// Проверка списка на пустотуchk_empty();
// Включение в список нового
компонентаelement_in(Hardware* n);
// Удаление компонента из
спискаelement_del(Hardware * selHard);
void element_edit(int ind, Hardware*
n);
// Изменение
значения
компонентаelement_edit(Hardware*
selHard, Hardware* n);
//загрузка
бинарного
файлаload(char
* fileName);
void saveSellOfDay(char *
fileName,AnsiString dateSell);
// Получение компонента из списка* get(Hardware
* selHard);
// Сортировка списка по типуsortType(bool inc);
// Сортировка списка по описаниюsortDescr(bool
inc);
// Сортировка списка по
характеристикамsortParam(bool inc);
// Сортировка списка по серийному номеруsortSerial(bool
inc);
// Сортировка списка по дате
продажиsortDate(bool inc);
// Сортировка списка по ценеsortPrice(bool inc);
Рассмотрим реализацию методов класса, для
однообразных методов (таких как сортировка) будет рассмотрена одна реализация
(см. листинг 5):
//---------------------------------------------------------------------------
__fastcall dyn_list::dyn_list(){=
NULL;
__fastcall dyn_list::~dyn_list(){(head);
// Включение в список нового компонента
void dyn_list::element_in(Hardware*
n)
{* c = new
element();(c->hard,n,sizeof(Hardware));>next = NULL;(chk_empty())=
c;>next = c; = c;
void dyn_list::element_del(Hardware
* selHard)
//поиск по типу* c = new element();=
get(selHard);(c == head)
}* r = new element();=
head;(r->next != c)= r->next;>next = c->next;c;
// Изменение значения элементаdyn_list::element_edit(Hardware
* selHard, Hardware* n)
//получение элемента* select = new
element();= head;(select != NULL){
//сравнение полей выделенного коплектующего с
копмлектующим из списка
(strcmp(select->hard->type,selHard->type)==0)&&
(strcmp(select->hard->describe,selHard->describe)==0)&&
(strcmp(select->hard->parametrs,selHard->parametrs)==0)&&
(select->hard->serial ==
selHard->serial)&&
(select->hard->dateSell ==
selHard->dateSell)&&
(select->hard->price ==
selHard->price)
memcpy(select->hard,n,sizeof(Hardware));
//обновляем элемент новыми значениями
//загрузка бинарного
файлаdyn_list::load(char * fileName)
{*
f=fopen(fileName,"rb");size = 0;(&size,sizeof(int),1,f);
//обработка списка(int
i=0;inext;
//обработка
списка(&size,sizeof(int),1,f);
Hardware * buf = new
Hardware();(buf,head->hard,sizeof(Hardware));(buf,sizeof(Hardware),1,f);=
head->next;
void dyn_list::saveSellOfDay(char *
fileName,AnsiString dateSell)
{*
f=fopen(fileName,"w");("Продано ",StrLen("Продано
"),1,f);(dateSell.c_str(),strlen(dateSell.c_str()),1,f);(":\n",StrLen(":\n"),1,f);
//обработка списка* recovery = new
element();= head;(head != NULL){* buf = new
Hardware();(buf,head->hard,sizeof(Hardware));(buf->dateSell.DateString()==dateSell){(buf->type,StrLen(buf->type),1,f);("
",1,1,f);(buf->describe,StrLen(buf->describe),1,f);("
",1,1,f);(buf->parametrs,StrLen(buf->parametrs),1,f);("
",1,1,f);
//integer
переводим в строку для корректной записи
char * strBuf = new
char(15);(strBuf,IntToStr(buf->serial).c_str());(strBuf,StrLen(strBuf),1,f);("
",1,1,f);(buf->dateSell.DateString().c_str(),StrLen(buf->dateSell.DateString().c_str()),1,f);("
",1,1,f);
//integer
переводим в строку для корректной записи
strBuf = new
char(10);(strBuf,IntToStr(buf->price).c_str());(strBuf,StrLen(strBuf),1,f);("\n",1,1,f);
// Получение
элемента
из
списка*
dyn_list::get(Hardware * selHard)
//получение
элемента*
select = new element();= head;(select != NULL){
//сравнение полей выделенного коплектующего с
копмлектующим из списка
(strcmp(select->hard->type,selHard->type)==0)&&
(strcmp(select->hard->describe,selHard->describe)==0)&&
(strcmp(select->hard->parametrs,selHard->parametrs)==0)&&
(select->hard->serial ==
selHard->serial)&&
(select->hard->dateSell ==
selHard->dateSell)&&
(select->hard->price ==
selHard->price)
// Сортировка списка по
типуdyn_list::sortType(bool inc)
bool
swap = true;
//признак того, что была перестановка значений
//обработка списка* recovery = new
element();= head;(swap!=false){ = false;
//считаем что перестановок не будет
//обработка списка(head->next !=
NULL){(((inc==true)&&
(strcmp(head->hard->type,head->next->hard->type)>0))||
(strcmp(head->hard->type,head->next->hard->type)<0))){
//копируем комплектующие в буферы*
buf = new Hardware();(buf,head->hard,sizeof(Hardware));* buf1 = new
Hardware();(buf1,head->next->hard,sizeof(Hardware));
//меняем местами
элементы(head->hard,buf1,sizeof(Hardware));(head->next->hard,buf,sizeof(Hardware));
= true; //устанавливаем
признак перестановки
В модуле Main
нет глобальных переменных, и интерфейс модуля содержит только прототипы
функций, которые могут быть вызваны в модуле (см. листинг 6):
//---------------------------------------------------------------------------
#include
"view.h" //подключение
формы просмотра комплектующих
#include
"sell.h" //подключение
формы продажи комплектующих
//---------------------------------------------------------------------------TMainForm
: public TForm
__published: // IDE-managed
elementonents*Button1;*ButtonSell;__fastcall Button1Click(TObject
*Sender);__fastcall ButtonSellClick(TObject *Sender);: // User
declarations: // User declarations
__fastcall TMainForm(TComponent*
Owner);
//---------------------------------------------------------------------------PACKAGE
TMainForm *MainForm;
//---------------------------------------------------------------------------
Реализация методов модуля представляет собой
вызовы других окон (см. листинг 7):
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall
TMainForm::TMainForm(TComponent* Owner)
//---------------------------------------------------------------------------__fastcall
TMainForm::Button1Click(TObject *Sender)
//---------------------------------------------------------------------------__fastcall
TMainForm::ButtonSellClick(TObject *Sender)
//---------------------------------------------------------------------------
В модуле View
нет глобальных переменных, и интерфейс модуля содержит только прототипы
функций, которые могут быть вызваны в модуле (см. листинг 8):
//---------------------------------------------------------------------------
#include
"List.h" //подключаем
класс списка
__published: // IDE-managed
elementonents*LabelType;*StringGrid1;*EditType;
…: // User declarations_list *
list; //список комплектующихselectedRow; //выделенная строка таблицы*
selectedHard; //выдыленный
элемент
списка
//направление сортировки для каждого поля
bool
descrInc;paramInc;serialInc;dateInc;priceInc;: // User
declarations __fastcall
chek(); //функция
проверки корректности ввода
void __fastcall
fillFilteredList();
//функция вывод списка учитывая фильтр и поиск
__fastcall TViewForm(TComponent*
Owner);
//---------------------------------------------------------------------------PACKAGE
TViewForm *ViewForm;
//---------------------------------------------------------------------------
В модуле просмотра при отображении списка в
таблицу используется поиск и фильтр по каждому из полей класса. Поиск построено
по принципу вхождения подстроки, представленной значением текстового поля
поиска, в строку поля элемента списка, для вывода элемента достаточно, чтобы
хотя бы одно из полей удовлетворяло данному условию.
Далее список фильтруется используя тот же
принцип вхождения подстроки, однако в данном случае если хоть одно из полей
фильтра будет удовлетворять условию, то элемент списка будет отфильтрован. (см.
листинг 9):
функция обработки списка перед
выводом
void __fastcall TViewForm::fillFilteredList(){
//загружаем список
комплектующих->RowCount=1;//очищаем таблицу
element * recovery = new element();
//создаем
буфер
recovery = list->head; //присваиваем ему
начало списка(list->head != NULL){ //делаем обход списка* hh = new
Hardware(); //буфер для коплектующего
memcpy(hh,list->head->hard,sizeof(Hardware));
//из
списка
копируем
StringGrid1->RowCount++; //добавляем строку в
таблицу
//заполняем строку таблицы параметрами->Cells[0][StringGrid1->RowCount-1]
= hh->type;
StringGrid1->Cells[1][StringGrid1->RowCount-1]
= hh->describe;->Cells[2][StringGrid1->RowCount-1] =
hh->parametrs;->Cells[3][StringGrid1->RowCount-1] =
hh->serial;->Cells[4][StringGrid1->RowCount-1] =
hh->dateSell;->Cells[5][StringGrid1->RowCount-1] = hh->price;
//если удовлетворяет условиям поиска по любому
из полей
( //длина строки должна быть не нулевой И строка
поиска должна входить в строку ячейки таблицы
((EditTypeSearch->Text.Length()>0)&&(StringGrid1->Cells[0][StringGrid1->RowCount-1].Pos(EditTypeSearch->Text)>0))||
((EditDescribeSearch->Text.Length()>0)&&(StringGrid1->Cells[1][StringGrid1->RowCount-1].Pos(EditDescribeSearch->Text)>0))||
((EditParametrsSearch->Text.Length()>0)&&(StringGrid1->Cells[2][StringGrid1->RowCount-1].Pos(EditParametrsSearch->Text)>0))||
((EditSerialSearch->Text.Length()>0)&&(StringGrid1->Cells[3][StringGrid1->RowCount-1].Pos(EditSerialSearch->Text)>0))||
((EditDateSellSearch->Text.Length()>0)&&(StringGrid1->Cells[4][StringGrid1->RowCount-1].Pos(EditDateSellSearch->Text)>0))||
((EditPriceSearch->Text.Length()>0)&&(StringGrid1->Cells[5][StringGrid1->RowCount-1].Pos(EditPriceSearch->Text)>0)
(EditTypeSearch->Text.Length()==0)&&
(EditDescribeSearch->Text.Length()==0)&&
(EditParametrsSearch->Text.Length()==0)&&
(EditSerialSearch->Text.Length()==0)&&
(EditDateSellSearch->Text.Length()==0)&&
(EditDateSellSearch->Text.Length()==0)&&
(EditPriceSearch->Text.Length()==0)
) && //И НИ ОДНА ИЗ строк полей фильтра
не входит в ячейки таблицы
!( //длина строки должна быть не нулевой И
строка фильтра должна входить в строку ячейки таблицы
((EditTypeFilter->Text.Length()>0)&&(StringGrid1->Cells[0][StringGrid1->RowCount-1].Pos(EditTypeFilter->Text)>0))||
((EditDescribeFilter->Text.Length()>0)&&(StringGrid1->Cells[1][StringGrid1->RowCount-1].Pos(EditDescribeFilter->Text)>0))||
((EditParametrsFilter->Text.Length()>0)&&(StringGrid1->Cells[2][StringGrid1->RowCount-1].Pos(EditParametrsFilter->Text)>0))||
((EditSerialFilter->Text.Length()>0)&&(StringGrid1->Cells[3][StringGrid1->RowCount-1].Pos(EditSerialFilter->Text)>0))||
((EditDateSellFilter->Text.Length()>0)&&(StringGrid1->Cells[4][StringGrid1->RowCount-1].Pos(EditDateSellFilter->Text)>0))||
((EditPriceFilter->Text.Length()>0)&&(StringGrid1->Cells[5][StringGrid1->RowCount-1].Pos(EditPriceFilter->Text)>0))
){ // то оставляем строку в таблице
}else if( //ИНАЧЕ если хотябы одно из полей
введено
(EditTypeSearch->Text.Length()>0)||
(EditDescribeSearch->Text.Length()>0)||
(EditParametrsSearch->Text.Length()>0)||
(EditSerialSearch->Text.Length()>0)||
(EditDateSellSearch->Text.Length()>0)||
(EditDateSellSearch->Text.Length()>0)||
(EditPriceSearch->Text.Length()>0)||
(EditTypeFilter->Text.Length()>0)||
(EditDescribeFilter->Text.Length()>0)||
(EditParametrsFilter->Text.Length()>0)||
(EditSerialFilter->Text.Length()>0)||
(EditDateSellFilter->Text.Length()>0)||
(EditDateSellFilter->Text.Length()>0)||
){ //то удаляем строку, так как она не подходит
под все условия->RowCount--; //фильтруем элемент
}>head = list->head->next; //переходим
к следующему элементу
Перед редактированием элемента или добавлением
нового значения занесенные в текстовые поля проходят проверку на корректность.
Сначала они укорачиваются до допустимой длины. На результат не влияет была ли
превышена длина. Далее поля серийного номера, даты продажи и цены проверяются
на соответствие своим форматам, при несоответствие действие будет отменено и
будет выведено сообщение. (см. листинг 10):
//функция проверки корректности ввода__fastcall
TViewForm::chek()
EditType->Text =
EditType->Text.SubString(1,10);>Text =
EditDescribe->Text.SubString(1,15);>Text =
EditParametrs->Text.SubString(1,20);>Text =
EditSerial->Text.SubString(1,6);>Text =
EditDateSell->Text.SubString(1,10);
//если не все поля заполнены - отказ
(EditParametrs->Text.Length()==0)||
) {("Не все поля заполнены");false;
//если числовые поля не получается преобразовать
- отказ
} catch( EConvertError &ex ) {("Строка
серийного номера или цены числа не содержит");false;
//если числовые поля не получается преобразовать
- отказ
} catch( EConvertError &ex ) {("Строка
серийного номера или цены числа не содержит");false;
//если дата имеет неправильный формат
try {dat ;//= new TDate();=
EditDateSell->Text;
ShowMessage("Дата имеет неверный формат");false;
После успешной проверки может быть вызвана
функция добавления элемента в список (см. листинг 11):
функция добавления элемента в
список
void __fastcall
TViewForm::ButtonAddClick(TObject *Sender)
{((selectedRow >
0)&&(chek()==true)){//если проверка пройдена
Hardware * hard = new
Hardware();(hard->type,EditType->Text.c_str());(hard->describe,EditDescribe->Text.c_str());(hard->parametrs,EditParametrs->Text.c_str());>serial
= EditSerial->Text.ToInt();>dateSell = 0;>price =
EditPrice->Text.ToInt();>element_in(hard);
StringGrid1->RowCount++; //добавляем строку в
таблицу
//заполняем
строку
таблицы->Cells[0][StringGrid1->RowCount-1]
= EditType->Text;->Cells[1][StringGrid1->RowCount-1] = EditDescribe->Text;->Cells[2][StringGrid1->RowCount-1]
= EditParametrs->Text;->Cells[3][StringGrid1->RowCount-1] =
EditSerial->Text;->Cells[4][StringGrid1->RowCount-1] =
"0:00:00";->Cells[5][StringGrid1->RowCount-1] =
EditPrice->Text;
При выделении строки таблицы данные выделенной
строки копируются в текстовые поля для редактирования (см. листинг 12):
функция обработки выделения
строки таблицы
void __fastcall
TViewForm::StringGrid1SelectCell(TObject *Sender, int ACol,ARow, bool
&CanSelect)
{(ARow > 0){ если
выбрали
не
шапку
таблицы>Text
= StringGrid1->Cells[0][ARow];>Text =
StringGrid1->Cells[1][ARow];>Text =
StringGrid1->Cells[2][ARow];>Text =
StringGrid1->Cells[3][ARow];>Text =
StringGrid1->Cells[4][ARow];>Text = StringGrid1->Cells[5][ARow];= ARow;
//копируем
выделенный
элемент
в
буфер=
new
Hardware();(selectedHard->type,StringGrid1->Cells[0][ARow].c_str());(selectedHard->describe,StringGrid1->Cells[1][ARow].c_str());(selectedHard->parametrs,StringGrid1->Cells[2][ARow].c_str());>serial
= StringGrid1->Cells[3][ARow].ToInt();>dateSell =
StringGrid1->Cells[4][ARow];>price
=StringGrid1->Cells[5][ARow].ToInt();
Реализация модуля Sell
представляет собой заимствование методов модуля View
с учетом того, что в таблицу отображаются только те комплектующие, которые еще
не были проданы.
При запуске программы на экран будет выведен
рисунок 1.
При выборе кнопки «комплектующие» будет открыто
окно просмотра и редактирования как на рисунке 2. Над каждой из колонок
располагается кнопка «сортировать» - при ее нажатии список будет отсортирован
по указанному полю, каждое нажатие меняет направление сортировки на
противоположное.
Для демонстрации работы поиска введем в поиск
характеристик цифру 4, будут отображены все комплектующие кроме последнего, у
которого нет этой цифры в характеристиках. (см. рисунок 3).
Окно просмотра и редактирования
комплектующих
Теперь, если ввести в поле фильтра характеристик
цифру 2, то останется только одно комплектующее (см. рисунок 4):
Если заведомо неверно ввести значения в поля
серийного номера, даты продажи комплектующего, то при попытке добавления или
редактирования элемента с введенными значениями будут выведены сообщения об
ошибке, как на рисунке 5 и 6 соответственно:
сообщение об ошибке при
неверном вводе (серийный номер)
сообщение об ошибке при
неверном вводе (серийный номер)
Все произведенные изменения (редактирование,
удаление, добавление) сохраняются в бинарном файле после нажатия кнопки
«сохранить».
При выборе в главном окне кнопки «продажа» будет
открыто окно, как на рисунке 7, в нем будут отображаться только те
комплектующие, дата продажи у которых еще не установлена.
Для осуществления продажи достаточно выбрать
комплектующее и указать дату продажи, после чего нажать кнопку «продать». При
успешной проверки формата данных выбранное комплектующее исчезнет из
отображаемого списка.
Для получения отчета о продажах в текстовый файл
требуется в поле даты ввести требуемый день, после этого нажать кнопку «Продажи
за день» - будет сформирован текстовый файл «продажи.txt»
Сделанные изменения также требуется сохранять.
В ходе реализации использование WINAPI
в основном ограничилось главной функцией WinMain,
остальные визуальные компоненты были использованы из библиотеки vlc,
это сделано с расчетом более быстрого создания интерфейса более высокого уровня
и более сложного, чем при использовании WINAPI.
Во время выполнения курсовой работы были
закреплены, систематизированы, углублены и развиты теоретические и практические
знания среды Borland
C++ Builder
6.0, знания по объектно-ориентированному программированию, выработан
индивидуальный подход по поиску, изучению и анализу специальной
научно-технической литературы и документации, справочников, стандартов,
методических и других материалов.
Программа реализована с дружественным,
интуитивно понятным и соответствующим функциональным требованиям интерфейсом.
Программа может быть легко усовершенствована
благодаря модульному строению, добавление новых модулей.
1 А.Я.
Архангельский «Программирование в C++ Builder 6», «Бином» г. Москва 2003
с.1150.
Бобровский
С. «Технологии С++ Builder. Разработка приложений для бизнеса» 2007 «ПИТЕР» с.
560.
Ю.П.Федоренко
«Алгоритмы и программы на C++ Builder» «ДМК Пресс» Москва 2010 с. 345
ПРИЛОЖЕНИЕ А –
МОДУЛЬНАЯ СХЕМА ПРОГРАММЫ
ПРИЛОЖЕНИЕ Б –
ФУНКЦИОНАЛЬНАЯ СХЕМА ПРОГРАММЫ
Похожие работы на - Разработка однотабличной базы данных Курсовая работа (т). Информационное обеспечение, программирование.
Трудный Жанр Сочинение 8 Кл Внеурочка
Дипломная работа: Повышение конкурентоспособности предприятия . Скачать бесплатно и без регистрации
Контрольная работа по теме Факторы конкурентоспособности
Реферат: Региональное кредитование. Скачать бесплатно и без регистрации
Дипломная работа по теме Формирование речевого этикета у детей старшего дошкольного возраста
Порно Биг Эсс Транс
Контрольная работа по теме Переважні права на придбання цінних паперів нової емісії як інструмент захисту інтересів інвесторів
Межполушарная Асимметрия Мозга Реферат
Реферат: Научное познание человеком мира
Реферат: Инвестиционная деятельность промышленных предприятий России
Учебное пособие: Оподаткування підприємств
Титульный Лист Реферата Студента Техникума
Отчет По Практике В Сельском Хозяйстве
Сочинение О Маме И Бабушке
Показательные Уравнения Контрольная Работа 10 Класс
План Декабрьского Сочинения 2022 С Примерами
Сочинение На Тему Хочу Учиться
Технологии 21 Века Реферат
Реферат: Получения Высоковязкого масла П-40
Анализ Ликвидности И Платежеспособности Организации Реферат
Реферат: Why The United States Sent Troops To
Похожие работы на - Способы приобретения государственной территории
Курсовая работа: Балканское измерение войны и мира