Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 8
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование процесса передачи данных по магистрали с основным и резерв...
Моделирование информационно-поисковой библиографической системы на gpss ...
Расчет размера дохода на одного человека в Turbo Pascal

Сортировка каталога [c++ builder 6.0]
Сортировка каталога литературы [c++ builder 6.0]

ВВЕДЕНИЕ

В наше время появляется все больше и больше книг. И если взглянуть на список всех книг, то не хватит и одного и десятка листов, чтобы уместить весь список литературы. И все тяжелее становится искать нужные книги в Интернете, в магазинах.
Чтобы помочь рядовому пользователю найти и определиться с выбором какого-либо литературы и была создана СУБД «Библиотека», которая при должном заполнении может список литературы, легкий поиск и сортировка записей, возможность добавления и редактирование существующих записей.
Поэтому создание СУБД, предназначенной для этой цели - объективная потребность для широкого круга пользователей.
Целью создания информационно-поисковой системы «Библиотека» является упрощение действий пользователя по каталогизации литературы, возможностей по ее просмотру и редактированию: добавление, изменение и удаление, поиск и сортировка.
Разработанная ИПС должна обеспечивать высокий уровень быстродействия и надежности в осуществлении всех функциональных возможностей. ИПС «Библиотека» может применяться как в Библиотеках, так и частными лицами. Для ее использования не требуется особых знаний в области программного обеспечения, достаточно лишь наличие начальных знаний и умений по использованию компьютера, благодаря чему системой могут пользоваться представители различных возрастных категорий.

1. Техническое задание.

Разработать информационно-поисковую систему(ИПС) «Библиотека» на языке программирования С++ в среде разработки Borland C++ Builder 6.
1. Функции ИПС:
– вывод содержимого файла (просмотр БД);
– добавление новых данных в файл (изменение БД);
– выборка информации по любому элементу данных (поиск БД);
– удаление информации об объекте по заданному признаку (изменение БД);
– сортировка информации по выбранному признаку (просмотр БД);
2. Структура записи:
– раздел;
– автор;
– название;
– год издательства;
– место издания;
– количество страниц.
3. Отображение информации должно осуществляться в виде таблицы, хранение данных - бинарном файле, действия над записями осуществлять с использованием формы меню, где для каждого заказанного требования предусмотреть соответственно отдельную функцию.


2. Структура информационного и программного обеспечения.

1)Структура информационного обеспечения.
Данные хранятся в бинарном файле.
Структура файла:
- 4 байта(int ) – количество записей;
- записи.
Структура записей:
- 4 байта(int) – размер поля "Раздел" по количеству символов + символ конца строки;
- содержимое поля "Раздел" (char*);
- 4 байта(int) – размер поля "Автор" по количеству символов + символ конца строки;
- содержимое поля "Автор" (char*);
- 4 байта(int) – размер поля "Название" по количеству символов + символ конца строки;
- содержимое поля "Название" (char*);
- 2 байта(short) – содержимое поля "Год издательства";
- 4 байта(int) – размер поля "Место издания" по количеству символов + символ конца строки;
- содержимое поля "Место издания" (char*);
- 2 байта(short) – содержимое поля "Количество страниц".

2) Структура программного обеспечения.
Программный продукт «Библиотека» состоит из главной формы, в которой находится 2 пункта меню «Меню» и «Действие», которые в свою очередь делятся на подпункты.

«Меню»:
- «Новый список»;
- «Открыть»;
- «Сохранить»;
- «Сохранить как …»;
- «Закрыть»;
- «Выход».
«Действие»:
- «Добавить строку»;
- «Удалить строку»;
- «Поиск»;
- «Фильтр», который делится на подпункты с наименованием полей, которые делятся в свою очередь на подпункты для осуществления фильтрации по этим полям;
- «Отключить фильтр».
Отображение БД производится в виде закладок с таблицами, т.е. одновременно может быть открыто несколько файлов. Наименование списков отображается на заголовках закладок.


3. Описание алгоритмов.

Алгоритмы подпунктов меню «Меню»:

1) Создание нового списка.
а) Создаем новую закладку с именем «Новый список», а так же на ней новую таблицу с указанием свойств: число строк и столбцов, ширина столбцов, обработчики событий…

2) Открытие существующего списка.
а) Запускаем диалог открытия файла и указываем имя файла, затем проверяем существует ли файл: если да, то используя класс TFileStream открываем его для считывания.
б) Считываем количество записей, а затем сами записи в цикле заносим в таблицу.
в) записываем полный путь с именем файла в свойство Hint закладки и подписываем саму закладку именем файла.

3) Запись данных в бинарный файл.
а) Проверяем если это сохранение нового списка, то открываем диалог сохранения файла и указываем имя файла и место куда сохранять, если файл с таким именем существует, то спрашиваем у пользователя: «Перезаписать файл?».
б) Если файл существует – удаляем.
в) Используя класс TFileStream записываем информацию в бинарный файл.
г) Записываем количиство записей и далее в цикле сами записи с соответствующим типом полей.
д) записываем полный путь с именем файла в свойство Hint закладки и подписываем саму закладку именем файла.


4) Сохранить как …
а) Запускаем диалог сохранения файла и указываем имя файла, если файл с таким именем существует, то спрашиваем у пользователя: «Перезаписать файл?»
б) Далее записываем информацию в файл как указано в п./п. 3).

5) Закрытие списка.
а) Проверяем: были ли изменения в списке – если да, то спрашиваем: «Сохранить изменения?». При положительном ответе выполняем действия по п./п. 3) или 4).

6) Завершение работы.
а) выполняем действия по п./п. 5) только со всеми закладками.

Алгоритмы подпунктов меню «Действие»:
1) Добавление новой строки в таблицу.
а) Добавляем в конец таблицы новую строчку.

2) Удаление строки.
а) Производим в цикле смещение на строку вверх, начиная с удаляемой, т.к. используемый нами класс таблицы TStringGrid не позволяет удалить строку, а только дает возможность регулировать количество строк и столбцов.
б) Помечаем звездочкой заголовок закладки, что означает – произошли изменения в списке.

3) Поиск.
а) Запускаем диалог поиска.
б) Производим поиск от построчно в каждом столбце, с запоминанием позиции.

4) Фильтр.
а) При входе в подменю «Фильтр», в котором так же имеются подменю с наименованиями столбцов таблицы, в которых динамически создаем список для фильтрации.
б) При выборе фильтра в цикле ищем не подходящие по критериям записи и указываем им ширину строки равную -1, чтобы визуально эти строки не отображались.

5) Отключение фильтра.
а) Устанавливаем высоту всех строк равной высоте строк заголовка таблицы.

Алгоритм сортировки по конкретному полю:
а) Выбираем поле для сортировки по координатам нажатия кнопки мыши, помечая его символом "•".
б) Далее пузырьковым методом осуществляем сортировку записей, сравнивая в цикле текущую строку с последующей.

5. Протоколы работы программного обеспечения.

Листинг 4. Протоколы, подтверждающие работоспособность программного продукта.

Start = 27.04.2012 3:28:42 - начало работы
New list = ok - создание нового списка прошло успешно
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
New record = ok - успешное создание новой строки
Delete record = ok - успешное удаление строки
New record = ok - успешное создание новой строки
Delete record = ok - успешное удаление строки
Save: C:\Library\Catalogs\Library.lbr = ok - файл сохранен успешно
Close: C:\Library\Catalogs\Library.lbr = ok - список успешно закрыт
Open: C:\Library\Catalogs\Library.lbr = ok - файл успешно открыт
Filter: С++ = ok - фильтрация по значению «С++» прошла успешно
Find : Архангельский = ok - поиск по значению «Архангельский» прошел успешно
Find : Архангельский = end - поиск по значению «Архангельский» завершен
Sorted : •Год издательства = ok - Сортировка по полю «Год издательства» произведена
Close: C:\Library\Catalogs\Library.lbr = ok - список успешно закрыт
End = 27.04.2012 4:51:49 - окончание работы

6. Условия использования программного продукта

Системные требования:
- процессор не ниже Pentium III
- ОС Microsoft Windows XP/Vista/ 7
Данный продукт был отлажен на ЭВМ Intel Core 2 Duo, 2 Gb RAM, ОС Microsoft Windows XP SP2 в среде разработки Borland C++ Builder 6 (Enterprise Suite, Build 10.161).




























































Наименование



Описание



Размер в байтах



Исходные файлы



Project1.bpr


информационный файл
проекта


3605



Project1.cpp


исходный файл проекта


1069



Project1.res



стандартный файл ресурсов


876



Unit1.cpp


исходный файл формы


16352



Unit1.dfm


файл ресурсов формы


42516


Unit1.h


заголовочный файл формы


3145



Файлы готовые к выполнению



Project1.exe


программа «Библиотека»


695296



Library.lbr


файл БД с 21 записью


2084



Library.log


файл протоколов,
подтверждающих работоспо-собность программного продукта


782



7. Руководство пользователя.

При запуске программы открывается пустое окно с меню из двух пунктов «Меню» и «Действие». Пункт «Меню» предназначен для осуществления операций над файлами, а пункт «Действие» - для работы с конкретным списком литературы.
Для создания нового списка выберите «Меню/Новый список» или комбинацию клавиш Ctrl+N. После чего откроется закладка с именем «Новый список», на которой будет расположена таблица, состоящая из 1 строки и 6 столбцов с заголовками "Раздел", "Автор", "Название", "Год издательства", "Место издания" и "Количество страниц". Редактирование всех ячеек, кроме "Год издательства" и "Количество страниц" – это числовые поля, производится без ограничений. Для добавления строки используйте «Действие/Добавить строку», для удаления «Действие/Удалить строку».
Для сохранения списка существует «Меню/Сохранить»(Ctrl+S) и «Меню/Сохранить как …» . Чтобы закрыть или открыть список используется соответственно «Меню/Закрыть» и «Меню/Открыть»(Ctrl+O).
«Действие/Поиск» производит поиск заданного текста по всем ячейкам таблицы: начиная с первого столбца построчно, пока не достигнет конца таблицы.
Выбрав «Действие/Фильтр» дальше Вы выбираете по какому столбцу будет производиться фильтрование данных и по конкретному значению ячейки. «Действие/Отключить фильтр» - соответственно отменяет фильтрование данных.
Для сортировки данных по конкретному столбцу необходимо нажать левой кнопкой мыши на интересующий Вас заголовок таблицы, после чего он будет помечен символом "•" и осуществиться сортировка.
Для завершения работы выберите «Меню/Закрыть».


8. Литература.

1. С/С++. Программирование на языке высокого уровня. / Т.А.Павловская. — СПб.: Питер, 2004. — 461 с.: ил.
2. Вирт Н., Алгоритмы и структуры данных: Пер. с англ. — М.: Мир, 1989. — 360 с., ил.
3. Технологии разработки программного обеспечения: Учебник / С.Орлов. — СПб.: Питер, 2002. — 464 с.: ил.
4. Брадуе Э., Технология разработки программного обеспечения. — СПб.: Питер, 2004. — 655 с.: ил.
5. Одинцев И.О., Профессиональное программирование. Системный подход. — 2-е изд. перераб. и доп. — СПб.: БХВ-Петербург, 2004. — 624 с.: ил.
6. Эккель Б., Философия С++. Введение в стандартный С++. 2–е изд. — СПб.: Питер, 2004. — 572 с.: ил.
7. Дьюхерст С., С++. Священные знания. — Пер. с англ. - СПб.: Символ–Плюс, 2007. — 240 с., ил.
8. Страуструп Б., Язык программирования Си++: Пер. с англ. — М.: Радио и связь, 1990. — 352 с.: ил.
9. Архангельский А.Я., Программирование в C++Builder 6, М.: Бином, 2003. — 1152 с.

Исходник:

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


#include <vcl.h>


#pragma hdrstop


#include "Unit1.h"


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


#pragma package(smart_init)


#pragma resource "*.dfm"


TForm1 *Form1;


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


__fastcall TForm1::TForm1(TComponent* Owner)


: TForm(Owner)


{


//заполнение заголовка списка


lst = new TStringList();


lst->Add("Автор");


lst->Add("Название");


lst->Add("Год издательства");


lst->Add("Место издания");


lst->Add("Количество страниц");


}


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


void __fastcall TForm1::N6Click(TObject *Sender)


{


//пункт меню "Выход"


Close();


}


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


void __fastcall TForm1::N1Click(TObject *Sender)


{


//создание новой вкладки(списка) и создание новой таблицы с описанием ее
свойств


TTabSheet* sheets = new TTabSheet(this);


sheets->PageControl = PageControl1;


sheets->Caption = "Новый список";


TStringGrid* grids = new TStringGrid(this);


grids->Parent = sheets;


grids->Align = alClient;


grids->FixedCols = 0;


grids->RowCount = 2;


grids->ColCount = 5;


for(int i=0; i<lst->Count; i++) grids->Cells[i][0] = lst->Strings[i];


grids->ColWidths[0] = grids->RowHeights[0];


grids->DefaultColWidth = grids->ClientWidth / grids->ColCount;


grids->Options >> goRangeSelect << goColSizing << goEditing <<
goDrawFocusSelected;


grids->OnSetEditText = workSetEditText;


grids->OnMouseDown = workMouseDown;


grids->DoubleBuffered = true;


PageControl1->ActivePageIndex = PageControl1->PageCount - 1;


PageControl1Change(NULL);


N3->Enabled = true;


N4->Enabled = true;


N5->Enabled = true;


N7->Enabled = true;


N9->Enabled = true;


N10->Enabled = true;


N16->Enabled = true;


}


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


void __fastcall TForm1::PageControl1Change(TObject *Sender)


{


//переключение по вкладкам


work = (TStringGrid*)PageControl1->ActivePage->Controls[0];


if( work->RowCount == 2 ) N8->Enabled = false;


else N8->Enabled = true;


}


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


void __fastcall TForm1::N5Click(TObject *Sender)


{


//закрытие вкладки с проверкой на необходимость сохранения изменений в списке


if( PageControl1->PageCount )


{


if( ( PageControl1->ActivePage->Caption == "Новый список" ||
PageControl1->ActivePage->Caption.c_str()[0] == '*' ) )


{


int res = MessageBox(Handle, "Сохранить изменения перед закрытием?",
"Закрытие несохраненного каталога", MB_ICONQUESTION | MB_YESNOCANCEL);


if( res == IDYES ) N3Click(NULL);


if( res == IDCANCEL ) return;


}


PageControl1->ActivePage->SetFocus();


delete PageControl1->ActivePage->Controls[0];


PageControl1->ActivePage->~TTabSheet();


if( PageControl1->PageCount ) PageControl1Change(NULL);


else


{


N3->Enabled = false;


N4->Enabled = false;


N5->Enabled = false;


N7->Enabled = false;


N8->Enabled = false;


N9->Enabled = false;


N10->Enabled = false;


N16->Enabled = false;


}


}


}


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


void __fastcall TForm1::N7Click(TObject *Sender)


{


//добавление новой строки в таблицу


N16Click(NULL);


work->RowCount += 1;


N8->Enabled = true;


if( PageControl1->ActivePage->Caption != "Новый список" &&
PageControl1->ActivePage->Caption.c_str()[0] != '*' )
PageControl1->ActivePage->Caption = "*" + PageControl1->ActivePage->Caption;


work->Row = work->RowCount -1;


}


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


void __fastcall TForm1::N8Click(TObject *Sender)


{


//удаление строки из таблицы


if( work->RowCount > 2 )


{


for(int i=1; i<work->RowCount; i++)


if( work->RowHeights[i] == -1 )


{


N16Click(NULL);


return;


}


if( work->Row != work->RowCount - 1 )


{


int i, j;


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


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


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


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


}


work->RowCount -= 1;


if( work->Row == 1 ) N8->Enabled = false;


if( PageControl1->ActivePage->Caption != "Новый список" &&
PageControl1->ActivePage->Caption.c_str()[0] != '*' )
PageControl1->ActivePage->Caption = "*" + PageControl1->ActivePage->Caption;


}


}


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


void __fastcall TForm1::N4Click(TObject *Sender)


{


//пункт меню "Сохранить как ..."


SaveDialog1->InitialDir = ExtractFilePath(Application->ExeName) +
"Catalogs\\";


if( SaveDialog1->Execute() )


{


String file;


if( !AnsiCompareText(ExtractFileExt(SaveDialog1->FileName), ".lbr") ) file =
SaveDialog1->FileName;


else file = SaveDialog1->FileName + ".lbr";


if( FileExists(file) )


{


if( MessageBox(Handle, "Перезаписать файл?", "Файл уже существует",
MB_ICONQUESTION | MB_YESNO) == IDYES ) Save(file);


else N4Click(NULL);


}


else Save(file);


}


}


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


void __fastcall TForm1::Save(String file)


{


//функция записи данных в бинарный файл


if( FileExists(file) ) DeleteFile(file);


int i, j, qnt;


TFileStream* strm = new TFileStream(file, fmCreate);


qnt = work->RowCount - 1;


strm->Write(&qnt, 4);


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


{


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


{


qnt = work->Cells[j][i].Length()+1;


strm->Write(&qnt, 4);


strm->Write(work->Cells[j][i].c_str(), qnt);


}


}


delete strm;


PageControl1->ActivePage->Hint = file;


PageControl1->ActivePage->Caption = ExtractFileName(file);


}


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


void __fastcall TForm1::N3Click(TObject *Sender)


{


//пункт меню "Сохранить"


if( PageControl1->ActivePage->Caption == "Новый список" ) N4Click(NULL);


else Save(PageControl1->ActivePage->Hint);


}


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


void __fastcall TForm1::workSetEditText(TObject *Sender, int ACol, int ARow,
const AnsiString Value)


{


//обработчик событий при измененнии текста в таблице


if( PageControl1->ActivePage->Caption != "Новый список" &&
PageControl1->ActivePage->Caption.c_str()[0] != '*' )
PageControl1->ActivePage->Caption = "*" + PageControl1->ActivePage->Caption;


}


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


void __fastcall TForm1::N2Click(TObject *Sender)


{


//пункт меню "Открыть"


if( OpenDialog1->Execute() )


{


N1Click(NULL);


Load(OpenDialog1->FileName);


}


}


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


void __fastcall TForm1::Load(String file)


{


//функция чтения списка из файла


if( FileExists(file) )


{


int i, j, qnt;


char* buf;


TFileStream* strm = new TFileStream(file, fmOpenRead);


strm->Read(&qnt, 4);


work->RowCount = qnt + 1;


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


{


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


{


strm->Read(&qnt, 4);


buf = new char[qnt];


strm->Read(buf, qnt);


work->Cells[j][i] = AnsiString(buf);


delete [] buf;


}


}


delete strm;


PageControl1->ActivePage->Hint = file;


PageControl1 valign=->ActivePage->Caption = ExtractFileName(file);


PageControl1Change(NULL);


}


else MessageBox(Handle, "Файла с таким именем не существует!", "Ошибка",
MB_OK | MB_ICONERROR);


}


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


void __fastcall TForm1::workMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)


{


//обработчик событий нажатий на заголовки списка


if( Y <= work->CellRect(0,0).Bottom )


{


for(int i=0; i<work->ColCount; i++)


{


if( X > work->CellRect(i,0).left && X < work->CellRect(i,0).right )


{


SetSort(i);


break;


}


}


}


}


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


void __fastcall TForm1::SetSort(int col)


{


//функция сортировки данных по конкретному столбцу


int i, j;


String str;


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


{


if( work->RowHeights[i] == -1 )


{


col = -1;


break;


}


}


for(i=0; i<work->ColCount; i++)


{


if( i == col ) work->Cells[i][0] = "•" + lst->Strings[i];


else work->Cells[i][0] = lst->Strings[i];


}


if( col == -1 ) return;


for(i=1; i<work->RowCount-1; )


{


if( work->Cells[col][i] > work->Cells[col][i+1] && col != 2 && col != 4 || (
col == 2 || col == 4 ) && atoi(work->Cells[col][i].c_str()) >
atoi(work->Cells[col][i+1].c_str()) )


{


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


{


str = work->Cells[j][i];


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


work->Cells[j][i+1] = str;


}


i = 1;


}


else i++;


}


}


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


void __fastcall TForm1::FormDestroy(TObject *Sender)


{


delete lst;


}


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


void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)


{


//закрытие программы с проверкой на несохранненые данные


int i, res;


TCloseAction Act = caFree;


for(i=0; i<PageControl1->PageCount; i++)


{


PageControl1->ActivePageIndex = i;


PageControl1Change(NULL);


if( PageControl1->ActivePage->Caption == "Новый список" ||
PageControl1->ActivePage->Caption.c_str()[0] == '*' )


res = MessageBox(Handle, "Сохранить изменения перед закрытием?", "Закрытие
несохраненного каталога", MB_ICONQUESTION | MB_YESNOCANCEL);


if( res == IDYES ) N3Click(NULL);


if( res == IDCANCEL )


{


Act = caNone;


break;


}


}


Action = Act;


}


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


void __fastcall TForm1::N9Click(TObject *Sender)


{


//пункт меню "Поиск"


f_r = 1;


f_c = 0;


FindDialog1->FindTextA = "";


FindDialog1->Execute();


}


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


void __fastcall TForm1::FindDialog1Find(TObject *Sender)


{


//функция осуществления поиска текста в таблице


int i, j;


bool ok = false;


for(i=f_c; i<work->ColCount; i++)


{


for(j=f_r; j<work->RowCount; j++)


{


if( work->Cells[i][j].Pos(FindDialog1->FindTextA) && work->RowHeights[j] !=
-1 )


{


if( j < work->RowCount - 1 ) f_r = j + 1;


else


if( i < work->ColCount - 1 )


{


f_r = 1;


f_c = i + 1;


}


work->Row = j;


work->Col = i;


ok = true;


break;


}


}


if( ok ) break;


}


if( !ok )


{


MessageBox(Handle, "Поиск завершен!", "Поиск", MB_ICONINFORMATION | MB_OK);


FindDialog1->CloseDialog();


}


}


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


void __fastcall TForm1::N10Click(TObject *Sender)


{


//создание списков для фильтрации данных


N11->Clear();


N12->Clear();


N13->Clear();


N14->Clear();


N15->Clear();


SetList(0, N11);


SetList(1, N12);


SetList(2, N13);


SetList(3, N14);


SetList(4, N15);


}


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


void __fastcall TForm1::SetList(int col, TMenuItem* menu)


{


//функция создания списков для фильтрации для конкретного столбца


int i, j;


bool yes;


TStringList* tmp = new TStringList();


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


{


yes = false;


for(j=0; j<tmp->Count; j++)


if( tmp->Strings[j] == work->Cells[col][i] )


{


yes = true;


break;


}


if( !yes ) tmp->Add(work->Cells[col][i]);


}


String str;


for(i=0; i<tmp->Count-1;)


{


if( tmp->Strings[i] > tmp->Strings[i+1] && col != 2 && col != 4 || (col == 2
|| col == 4 ) && atoi(tmp->Strings[i].c_str()) > atoi(tmp->Strings[i+1].c_str())
)


{


str = tmp->Strings[i];


tmp->Strings[i] = tmp->Strings[i+1];


tmp->Strings[i+1] = str;


i = 0;


}


else i++;


}


TMenuItem** ni = new TMenuItem*[tmp->Count];


for(i=0; i<tmp->Count; i++)


{


ni[i] = new TMenuItem(menu);


ni[i]->Caption = tmp->Strings[i];


ni[i]->Hint= tmp->Strings[i];


ni[i]->OnClick = SetFiltr;


ni[i]->Tag = col;


menu->Add(ni[i]);


}


delete tmp;


}


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


void __fastcall TForm1::SetFiltr(TObject *Sender)


{


//функция фильтрации данных


work->DefaultRowHeight = work->RowHeights[0];


int i, j = ((TMenuItem*)Sender)->Tag;


for(i=1; i<work->RowCount; i++) if( AnsiCompareText(work->Cells[j][i], ((TMenuItem*)Sender)->Hint)
) work->RowHeights[i] = -1;


}


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


void __fastcall TForm1::N16Click(TObject *Sender)


{


//функция отключения фильтрации данных


work->DefaultRowHeight = work->RowHeights[0];


}


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


 






БД:
  Павловская Т.А. 2 С/С++. Программирование на языке высокого уровня.  2004 СПб.: Питер  461  Павловская Т.А. F Паскаль. Программирование на языке высокого уровня: Учебник для вузов  2003 СПб.: Питер  393  Вирт Н.  Алгоритмы и структуры данных  1989  М.: Мир  360 Орлов С. 8 Технологии разработки программного обеспечения: Учебник  2002 СПб.: Питер  464
Брадуе Э. 0 Технология разработки программного обеспечения.  2004 СПб.: Питер  655
Одинцев И.О. P Профессиональное программирование. Системный подход. — 2-е изд. перераб. и доп.  2004  СПб.: БХВ-Петербург  624
Эккель Б. 4 Философия С++. Введение в стандартный С++. 2–е изд.  2004 СПб.: Питер  572 Дьюхерст С.  С++. Священные знания.  2007  СПб.: Символ–Плюс  240  Страуструп Б.  Язык программирования Си++  1990  М.: Радио и связь  352  Архангельский А.Я. Программирование в C++Builder 6  2003
М.: Бином  1152
Саймон Р. ; Microsoft Windows API. Справочник системного программиста.  2004 К.: ДиаСофт  1216 Шилдт Г. . Справочник программиста по C/C++, 3-е издание  2006  М.: «Вильямс»  432
Лафоре Р. 0 Объектно-ориентированное программирование в С++  2004 СПб.: Питер  928 Шилдт Г. " Искусство программирования на С++  2005 СПб.:БХВ  474 Солдатов В. # Программирование драйверов Windows  2004
М.: Бином  432 Прата С.  Язык программирования С++  2005 М.: ДиаСофт  1104
Седжвик Р. N Фундаментальные алгоритмы на C++. Анализ. Структуры данных. Сортировка. Поиск  2002 М.: ДиаСофт  688
Шеферд Д. . Программирование на Microsoft Visual C++ .NET  2003  СПб.: Русская Редакция  928
Мейерс С. ' Наиболее эффективное использование C++  2000  М.: ДМК Пресс  304
Мейерс С.  Эффективное использование STL  2002 СПб.: Питер  224 Макки А. < Введение в .NET 4.0 и Visual Studio 2010 для профессионалов  2010  М.: «Вильямс»  416


Опубликовал Kest June 16 2013 20:21:32 · 0 Комментариев · 5516 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Autorunner
Быстрое создание ...
Голосование для ...
AlnComponents
FormShape [Исходн...
IMtale
Abc_component
AID антивирус
NetGraph [Исходни...
Применение жадног...
База предприятий ...
Пример работы с б...
База данных: Книж...
Image Browser [Ис...
Панель для реклам...
AUTOWEB
Мод "проверочный ...
Длинный заголовок...
Rss Parser
iChat v.7.0 Final...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97838
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14192
Borland Delphi ... 10292
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
ДОПУСТИМЫЕ СПОСОБЫ...
Какие операции нео...
Решения, по органи...
Традиционные и гиб...
Виртуальные сети
Идея регулярных вы...
Существуют три реж...
Механизм возврата ...
Пример реализации ...
ключ для туннельно...
Устройства доступа...
Matrix: срезка дву...
Можно объявлять пе...
Алгоритм, расчитыв...
Данные инфографики...
Развертывание гото...
План проведения те...
Быстрая индексация...
Объект Shape, свой...
Выработка решенияП...
Треугольные массивы
Сегменты, использу...
Определение списка
определив расширен...
Конфликт при удалении
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?