Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Сейчас заново вы создадите приложение, использующее базу данных dbm для хранения нужной вам информации, в виде файлов cd_data.h, app_ui.c и cd_access.c (упражнения 7.14–7.16).

Вы также перепишите пользовательский интерфейс в виде программы с вводом команд. Позже в этой книге интерфейс базы данных и части пользовательского интерфейса будут пересмотрены, когда будет рассматриваться реализация вашего приложения с помощью различных клиент-серверных механизмов и затем как приложения, к которому можно обращаться по сети, используя Web-обозреватель. Преобразование интерфейса в более простой строковый интерфейс позволит сосредоточиться не на нем, а на более важных частях приложения.

Примечание

В последующих главах вы не раз встретитесь с заголовочным файлом базы данных cd_data.h и функциями из файла cd_access.c. Помните о том, что некоторые дистрибутивы Linux требуют немного отличающихся формирующих опций, например, применения в вашем файле на языке С заголовочного файла gdbm-ndbm.h вместо файла ndbm.h и опций

– lgdbm_compat -lgdbm
вместо просто опции
– lgdbm
. Если в вашем дистрибутиве Linux дело обстоит именно так, вы должны внести соответствующие изменения в файлы access.с и Makefile.

Упражнение 7.14. Файл cd_data.h

Начните с заголовочного файла для определения структуры ваших данных и подпрограмм, которые будут использоваться для доступа к данным.

1. Далее приведено определение структуры данных для базы данных компакт-дисков. В него включено определение структур и размеров двух таблиц, формирующих базу данных. Начните с задания размеров некоторых полей, которые вы будете применять, и двух структур: одной для элемента каталога, а другой для элемента дорожки.

/* Таблица catalog */

#define CAT_CAT_LEN 30

#define CAT_TITLE_LEN 70

#define CAT_TYPE_LEN 30

#define CAT_ARTIST_LEN 70

typedef struct {

 char catalog[CAT_CAT_LEN + 1];

 char title[CAT_TITLE_LEN + 1];

 char type [CAT_TYPE_LEN + 1];

 char artist[CAT_ARTIST_LEN + 1];

} cdc_entry;

/* Таблица дорожек, по одному элементу на дорожку */

#define TRACK_CAT_LEN CAT_CAT_LEN

#define TRACK_TTEXT_LEN 70

typedef struct {

 char catalog[TRACK_CAT_LEN + 1];

 int track_no;

 char track_txt[TRACK_TTEXT_LEN + 1];

} cdt_entry;

2. Теперь, имея структуры данных, можно определить нужные вам подпрограммы доступа. Функции с префиксом

cdc_
в имени предназначены для элементов каталога, с префиксом
cdt_
— для элементов-дорожек.

Примечание

Учтите, что некоторые функции возвращают структуры данных. Вы можете указать на аварийное завершение таких функций, сделав содержимое структур пустым.

/* Функции инициализации и завершения */

int database_initialize(const int new_database);

void database_close(void);

/* Две функции для простого извлечения данных */

cdc_entry get_cdc_entry(const char *cd_catalog_ptr);

cdt_entry get_cdt_entry(const char *cd_catalog_ptr, const int track_no);

/* Две функции для добавления данных */

int add_cdc_entry(const cdc_entry entry_to_add);

int add_cdt_entry(const cdt_entry entry_to_add);

/* Две функции для удаления данных */

int del_cdc_entry(const char *cd_catalog_ptr);

int del_cdt_entry(const char *cd_catalog_ptr, const int track_no);

/* Одна функция поиска */

cdc_entry search_cdc_entry(const char *cd_catalog_ptr,

 int *first_call_ptr);

Упражнение 7.15. Файл app_ui.c

Теперь перейдем к пользовательскому интерфейсу. Вам предлагается простая программа, с помощью которой вы сможете обращаться к функциям вашей базы данных. Интерфейс реализуется в отдельном файле.

1. Как обычно, начните с некоторых заголовочных файлов:

#define _XOPEN_SOURCE

#include <stdlib.h>

#include <unistd.h>

#include <stdio.h>

#include <string.h>

#include "cd_data.h"

#define TMP_STRING_LEN 125 /* это число должно быть больше

самой длинной строки в структуре базы данных */

2. Опишите пункты вашего меню с помощью

typedef
. Этот вариант лучше применения констант, заданных в директивах
#define
, т.к. позволяет компилятору проверить типы переменных, задающих пункт меню.

typedef enum {

 mo_invalid,

 mo_add_cat,

 mo_add_tracks,

 mo_del_cat,

 mo_find_cat,

 mo_list_cat_tracks,

 mo_del_tracks,

 mo_count_entries,

 mo_exit

} menu_options;

3. Теперь введите прототипы локальных функций. Помните о том, что прототипы функций, обеспечивающих реальный доступ к базе данных, включены в файл cd_data.h.

Поделиться:
Популярные книги

Слово воина

Прозоров Александр Дмитриевич
1. Ведун
Фантастика:
фэнтези
8.91
рейтинг книги
Слово воина

"Фантастика 2025-58". Компиляция. Книги 1-21

Альтмарк Лев
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2025-58. Компиляция. Книги 1-21

Новая хронология Греции

Фоменко Анатолий Тимофеевич
Научно-образовательная:
история
5.00
рейтинг книги
Новая хронология Греции

Чужой ребенок

Зайцева Мария
1. Чужие люди
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Чужой ребенок

Цикл романов "Целитель". Компиляция. Книги 1-17

Большаков Валерий Петрович
Целитель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цикл романов Целитель. Компиляция. Книги 1-17

Истина и красота. Всемирная история симметрии.

Стюарт Иэн
Элементы
Научно-образовательная:
математика
5.75
рейтинг книги
Истина и красота. Всемирная история симметрии.

«О» - значит омут

Графтон Сью
Кинси Милхоун
Детективы:
крутой детектив
5.00
рейтинг книги
«О» - значит омут

Налог на прибыль

Климова Маргарита Аркадьевна
Деловая литература:
бухучет и аудит
5.00
рейтинг книги
Налог на прибыль

Посольство

Уоллер Лесли
Детективы:
политические детективы
5.00
рейтинг книги
Посольство

Я царь. Книга XXVIII

Дрейк Сириус
28. Дорогой барон!
Фантастика:
боевая фантастика
аниме
попаданцы
5.60
рейтинг книги
Я царь. Книга XXVIII

Вечный Данж. Трилогия

Матисов Павел
Фантастика:
фэнтези
юмористическая фантастика
6.77
рейтинг книги
Вечный Данж. Трилогия

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Сотворение миров (сборник)

Ларионова Ольга Николаевна
Фантастика:
научная фантастика
5.00
рейтинг книги
Сотворение миров (сборник)