Требуется разработать платёжную систему для Турции, аналог ОСМП. Приём коммунальных оплаты сотовой связи, впоследствии понадобятся приём коомунальных платёжей, телевидения, интернет, погашение кредитов.
Разработка классов TDataObject
Постановка на разработку классов TDataObject.
Особое предупреждение!
По своему назначению, разработка крайне критичная.
Если вы раньше не делали ничего подобного, и/или не уверены в своих силах – пожалуйста, не беритесь.
Требуются ссылки на уже сделанные работы подобного рода.
Только для динозавров, мастодонтов , (и т.п.… - в общем, монстров), программирования!
Бюджет – 15.000 рублей.
Срок реализации – 31 день.
Назначение класса: операции с данными, ранее выбранными из БД, и теперь сохраненными в памяти PC. Нечто вроде TDataSet, но проще и с большей функциональностью.
Название класса: TDataObject.
Родитель: TObject .
Требования.
1.) Надежность.
2.) Скорость.
3.) Никаких вопросов, почему меня не устраивают стандартные компоненты VCL, предназначенные для работы с базами данных. Я не знаю, почему Борланд до сих пор не сделал ничего подобного.
Концепция.
Требуется разработать объекты двух типов:
1) Структура - TDataStructure;
2) Таблица – TDataTable(TDataStructure);
Описатели-определители.
Их структура будет дана дополнительно.
TDataFieldDef – описатель для полей. Подобны TFieldDef, но построены на несколько других принципах (ориентация не на типы полей, а на их назначение). Организуются по иерархическому принципу. Должна быть возможность поддержки полей-структур и полей-таблиц.
TDataObjectDef(TDataFieldDef) - описатель для TDataObject.
Операции поиска.
Перед началом производства каких-либо действий поиска с таблицей, она должна быть обязательно отсортирована (иначе выдать ошибку). Так что должен быть быстрый, надежный и простой способ ее отсортировать, порядок сортировки должен быть запомнен. При добавлении или удалении записей, заданный порядок сортировки не должен нарушаться.
Любые операции поиска осуществляются по принципу двоичного дерева. Потому сортированность имеет критичное значение (без соответствующей сортировки, результаты поиска будут некорректными).
Записи-ссылки.
Должна быть поддержка как обычных записей, так и записей-ссылок. Запись-ссылка – это запись, которая не содержит собственных физических данных, а только ссылку на физические данные другой таблицы. При этом должны запоминаться:
• Таблица, являющаяся ссылочной;
• Таблица, которой принадлежат физические данные.
С помощью таблиц-ссылок, должна быть возможность организации в связанные «гирлянды». Например есть «корневая» таблица, содержащая массив физических данных.
К ней создается таблица-ссылка, содержащая ссылки на определенное подмножество записей этой таблицы. Далее, к таблице-ссылке создается следующая таблица-ссылка, содержащая ссылки на более узкое подмножество записей.
Должна быть возможность заблокировать запись от изменений в других таблицах. При этом флажок блокировки передается по цепочке в таблицу, которой принадлежат физические данные.
С помощью массивов таких ссылок, должна быть возможность создания вторичных индексов для таблиц, для поддержки нескольких альтернативных порядков сортировки (каждая таблица может иметь несколько таблиц-сателлитов, содержащих только ссылки на ее физические данные, и отсортированных по альтернативным принципам).
Если таблица не отсортирована требуемым образом, но имеет вторичный индекс по этому порядку сортировки – не выдавать ошибку об отсутствии сортировки, а использовать вторичный индекс.
Алгоритм изменения содержимого таблиц.
Отличается от принятого в VCL, и заимствован из языка ABAP платформ фирмы SAP.
Каждая таблица имеет “HeaderLine: TDataStructure”, совпадающую по своей структуре со структурой таблицы.
Данные в этой структуре можно свободно менять без вызова всяких Edit, отображение изменений в таблицу произойдет только после вызова Modify.
МЕТОДЫ.
Особо Критичные.
1) SortBy(Имена полей: string имен полей через точку с запятой; AIndexName: string);
Сортирует таблицы в заданном порядке. Если задается AIndexName, создается таблица-сателлит с этим именем, представляющая собой вторичный индекс. Если не задан – сортируется физически сама таблица.
2) Find(Критерии: TRanges); // находит первую запись, удовлетворяющую заданным критериям, данные помещаются в HeaderLine
Это базовые методы. К ним предъявляются наиболее высокие требования.
Полный простор для творчества. Assembler приветствуется.
Пояснения.
===================================
TComparisonType = (ctLessThan, ctLessEqaulThan, ctEqual, ctBetween, ctGreaterEqual, ctGreaterThan, ctMask);
TIncludeType = (itInclude, itExclude)
TRangesItem = record
FieldName: string;
Low, High: string;
Option: TComparisonType:
Sign : TIncludeType;
end;
TRanges = array of TRangesItem;
ctMask = задание множеств значений по маске («*PSIH*», «$$$», и т.д.).
С помощью таких массивов, получаем средство для исчерпывающего описания множества значений для всех полей. Идея заимствована из языка ABAP платформ фирмы SAP.
Массивы для разных полей стыкуются друг с другом по правилу AND.
Внутри массива для каждого из полей, стыкуются по правилу
(IncludeRange1 OR IncludeRange2 OR …IncludeRangeN) AND NOT (ExcludeRange1 OR ExcludeRange2 OR … ExcludeRangeN)
Остальные методы.
3) Constructor TDataObject.Create(TDataObjectDef);
Конструктор, создает TDataObject заданной структуры;
4) Constructor TDataTable.CreateAsCopyFrom(AAsRefs: boolean; ASource: TDataTable; ARanges: TRanges; ASortFields: string);
Создает таблицу, как копию другой таблицы, содержащую заданное подмножество ее записей и отсортированных по заданным полям.
Если “AAsRefs = true”, создает таблицу с записями-ссылками. Иначе копирует физические данные
5) Constructor TDataObject.CreateFromPack(ASource: string);
Создает TDataObject из пакета. При этом пакет должен содержать не только данные, но и описание структуры. См. методы PackToString, UnpackFromString.
6) BeginLoop(Критерии: TRanges; LoopName: string);
7) NextLoop(LoopName: string): boolean;
8) EndLoop(LoopName: string);
Для организации циклов по записям, удовлетворяющих заданным условиям. Поиск первой записи, удовлетворящей заданным условиям, должен осуществляться по принципу двоичного дерева, далее читаются остальные записи. Таблица должна быть соответствующим образом отсортирована, иначе ошибка.
EndLoop сбрасывает режим.
Должна быть возможность циклов по нескольким принципам одновременно (для этого и введен параметр LoopName). Например, идет внешний цикл по одному принципу. А внутри цикла, идет еще вложенный цикл по этой же таблице, организованный по другому принципу.
9) ReadByIndex(AIndex: integer);
Читает запись по ее индексу, данные помещаются в HeaderLine.
10) Collect(ARanges: TRanges; const AKeyFields, ASumFields, ACountFields): TDataTable;
Все три параметра представляют собой последовательности имен полей, разделенных точкой с запятой. AKeyFields является обязательным параметром, но может содержать значение «*» (все поля являются ключевыми).
Создает сводную таблицу (по записям, удовлетворяющим заданным условиям), построенную по следующему принципу:
AKeyFields – список ключевых полей, по которым происходит группировка.
ASumFields – список полей, значения которых суммируются.
ACountFields – список полей, по которым подсчитывается количество уникальных значений.
Структура результирующей таблицы:
Поля из AKeyFields – без изменения имени, в том же порядке, каком перечислены и с тем же порядком сортировки;
Поля из ASumFields – имена суммируемых полей + приставка _SUM;
Поля из ACountFields – имена полей + приставка _COUNT;
Плюс, поле с фиксированным именем COUNT – содержит количество полей, вошедших в каждую группировку.
11) PackToString: string;
Выполняет «развертывание» данных таблица в одну строку. Есть некоторые наработки, уточнения будут даны в более детальной постановке.
12) UnpackFromString(ASource: string);
Выполняет восстановление данных из строки (пакета).
Это основные и наиболее трудоемкие особенности.
В детальной постановке будут еще дополнительные хотелки.
Заявки фрилансеров
Похожие заказы
- Системное программирование17 заявокЗакрыт18 лет назад
- $250
Требуется разработать SEO BAR на уровне http://www.developing.ru/seobar/ версия для в нужно разработать копию версии для FireFox , но для IE. Бар не должен превышать 1 МБ
Системное программирование4 заявкиЗакрыт18 лет назад Нужно разработать компоненту к Delphi или библиотеку для работы с SMART жесткого диска. Код должен выполнять следующие операции: 1) Читать параметры (режимы) hdd smart. 2) Читать атрибуты hdd smart и интерпретировать их. ...
Системное программирование1 исполнительЗавершен19 лет назадсредствами системы для создания виртуального съемного диска, те некая сетевая папка должна быть преобразована (смонтирована) в виртуальный диск с возможностью указания типа диска (съемный, CDROM). Высшй пилотаж - это чтобы у каждого юзера ...
Системное программирование7 заявокЗакрыт18 лет назад- $5000
Необходимо разработать модуль для Exchange Server, который должен уметь: - отбирать письма по определенным признакам; - хранинть базу из отобранных писем; - подписывать их ЭЦП; - при необходимости шифровать. ...
Системное программирование3 заявкиЗакрыт18 лет назад Задача стоит следующая. Есть даунлоадер файлов. Файлы могут быть ЛЮБОГО формата. Даунлоадер после скачивания файлы шифрует некоторым потоковым алгоритмом шифрования. Необдимо сделать так, чтобы пользователь мог использовать скачанный файл (т.е. на использование он расшифровывается драйвером), ...
Системное программирование4 заявкиЗакрыт19 лет назадДоработка и дальнейшее сопровождение 1С "Предприятие" (Торговля и склад, Бухгалтерия, CRM, Связка с интернет сайтом на основе "Битрикс") Тех. задание прилагается. Доп E-mail: [email protected]
Системное программирование3 заявкиЗакрыт19 лет назадA reusabe Java module (POJO, with sources) needed, which is able to read/write/modify EXIF data in existing JPEG files on server side. Requirements: 1. Pure Java 2. NO third party/open source libraries ...
Системное программирование1 заявкаЗакрыт19 лет назадНужно написать сию фишку для работы со звуковыми IO потоками. Ищеться тот кто УЖЕ умеет этот делать.
Системное программирование2 заявкиЗакрыт19 лет назадинтересует ТОЧНО ТАКОЙ ЖЕ модуль: http://www.e1.ru/info/citymap/ со всеми его функциями. Какова стоимость разработки? Речь идет о карте Белгорода. На есть в векторе - такая же с домами и улицами.
Системное программирование9 заявокЗакрыт19 лет назад