В текстовом файле хранится структурированная информация о некоторой предметной области. Информация о каждом элементе этой области располагается на отдельной строке, значения полей разделены точкой с запятой (справа и слева от нее могут быть пробелы). Например, тестовый файл хранит информацию о книгах. Каждая книга в этом файле описывается названием, автором, годом издания, издательством, местом издания и т.п. Информация об авторе содержит фамилию и инициалы (именно в таком порядке). Будем предполагать, что у книги только один автор. Необходимо реализовать простую базу данных.
Информация из текстового файла загружается в оперативную память (она хранится в классическом списке). Для работы с этой информацией предусмотрены следующие функции
- добавление элемента;
- удаление элемента;
- изменение сведений об элементе;
- сохранение информации на диск.
Для удобства работы предусмотрены
- индексы, с помощью которых исходную информацию можно получить в упорядоченном виде (например, книги можно упорядочить по автору, по автору и названию, по году издания и издательству);
- фильтры, содержащие сведения об элементах удовлетворяющих заданным критериям (например, только книги указанного автора, книги в названии которых есть указанное слово).
- Количество индексов - 3, фильтров - 2. Они реализуются с помощью списков в стиле университета Беркли.
Взаимодействие с пользователем осуществляется с помощью меню. Например,
1. Load from file
2. Add record
3. Del record by name
и т.д.
Классический список содержащий информацию из предметной области должен выглядеть примерно так
#include "list.h"
#define MAX_SORT_INDX 3
#define MAX_FILTER_INDX 2
struct book
{
char *title;
char *author;
unsigned short year;
char *publ_house;
// ...
struct list_head sort[MAX_SORT_INDX];
struct list_head filter[MAX_FILTER_INDX];
struct book *next;
};
Обратите внимание на то, что где-то нужно хранить указатели на "первый" элемент в списках индексов и фильтров.
Замечание 1. Настоятельно рекомендуется выбрать собственную предметную область, например, песни/диски/фильмы/картины и т.д.
Замечание 2. Индексы обычно реализуют с помощью деревьев. В данной работе для реализации индекса используется список исключительно в учебных целях.