Skip to content

Latest commit

 

History

History
57 lines (43 loc) · 3.89 KB

README.md

File metadata and controls

57 lines (43 loc) · 3.89 KB

Лабораторная работа 7. Списки в стиле университета Беркли.

В текстовом файле хранится структурированная информация о некоторой предметной области. Информация о каждом элементе этой области располагается на отдельной строке, значения полей разделены точкой с запятой (справа и слева от нее могут быть пробелы). Например, тестовый файл хранит информацию о книгах. Каждая книга в этом файле описывается названием, автором, годом издания, издательством, местом издания и т.п. Информация об авторе содержит фамилию и инициалы (именно в таком порядке). Будем предполагать, что у книги только один автор. Необходимо реализовать простую базу данных.

Информация из текстового файла загружается в оперативную память (она хранится в классическом списке). Для работы с этой информацией предусмотрены следующие функции

  • добавление элемента;
  • удаление элемента;
  • изменение сведений об элементе;
  • сохранение информации на диск.

Для удобства работы предусмотрены

  • индексы, с помощью которых исходную информацию можно получить в упорядоченном виде (например, книги можно упорядочить по автору, по автору и названию, по году издания и издательству);
  • фильтры, содержащие сведения об элементах удовлетворяющих заданным критериям (например, только книги указанного автора, книги в названии которых есть указанное слово).
  • Количество индексов - 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. Индексы обычно реализуют с помощью деревьев. В данной работе для реализации индекса используется список исключительно в учебных целях.