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

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

Жанры

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

/* Серверные функции базы данных */

int database_start(char *name, char *password);

void database_end;

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

/* Функции для добавления компакт-диска */

int add_cd(char *artist, char *title, char *catalogue, int *cd_id);

int add_tracks(struct current_tracks_st *tracks);

/*
Функции поиска и извлечения компакт-диска */

int find_cds(char *search_str, struct cd_search_st *results);

int get_cd(int cd_id, struct current_cd_st *dest);

int get_cd_tracks(int cd_id, struct current_tracks_st *dest);

/* Функция для удаления элементов */

int delete_cd(int cd_id);

Функция поиска очень обобщенная: вы передаете строку, и она ищет эту строку в элементах "исполнитель", "название" или "каталог".

Тестирование интерфейса приложения

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

Далее приведена программа app_test.c. Сначала несколько файлов include и типов structs:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include "app_mysql.h"

int main {

 struct current_cd_st cd;

 struct cd_search_st cd_res;

 struct current_tracks_st ct;

 int cd_id;

 int res, i;

Первое, что всегда должно делать ваше приложение, — инициализация подключения к базе данных, предоставляющая корректные имя пользователя и пароль (убедитесь, что вы заменили их своими):

 database_start("rick", "secret");

Далее тестируется добавление компакт-диска:

 res = add_cd("Mahler", "Symphony No 1", "4596102", &cd_id);

 printf("Result of adding a cd was %d, cd_id is %d\n", res, cd_id);

 memset(&ct, 0, sizeof(ct));

 ct.cd_id = cd_id;

 strcpy(ct.track[0], "Langsam Schleppend");

 strcpy(ct.track[1], "Kraftig bewegt");

 strcpy(ct.track[2], "Feierlich und gemessen");

 strcpy(ct.track[3], "St"urmisch bewegt");

 add_tracks(set);

Теперь поищите

компакт-диск и извлеките информацию из первого найденного CD:

 res = find_cds("Symphony", &cd_res);

 printf("Found %d cds, first has ID %d\n", res, cd_res.cd_id[0]);

 res = get_cd(cd_res.cd_id[0], &cd);

 printf("get_cd returned %d\n", res);

 memset(&ct, 0, sizeof(ct));

 res = get_cd_tracks(cd_res.cd_id[0], set);

 printf("get_cd_tracks returned %d\n", res);

 printf("Title: %s\n", cd.title);

 i = 0;

 while (i < res) {

printf("\ttrack %d is %s\n", i, ct.track[i]);

i++;

 }

В заключение удалите компакт-диск:

 res = delete_cd(cd_res.cd_id[0]);

 printf("Delete_cd returned %d\n", res);

Затем отключитесь и завершите работу программы:

 database_end;

 return EXIT_SUCCESS;

}

Реализация интерфейса

Теперь более трудная часть — реализация интерфейса, описанного вами. Вся она хранится в файле app_mysql.с.

Начните с основных файлов

include
, глобальной структуры подключения, которая понадобится, и флага
dbconnected
, который будет применяться для того, чтобы приложения не пытались получить доступ к данным, если у них нет подключения. Вы также используете внутреннюю функцию
get_artist_id
, для улучшения структуры программы:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include "mysql.h"

#include "app_mysql.h"

static MYSQL my_connection;

static int dbconnected = 0;

static int get_artist_id(char *artist);

Как вы видели ранее в этой главе, подключиться к базе данных очень просто, а отключиться от нее и того проще:

int database_start(char *name, char *pwd) {

 if (dbconnected) return 1;

 mysql_init(&my_connection);

 if (!mysql_real_connect(&my_connection, "localhost",

name, pwd, "blpcd", 0, NULL, 0)) {

fprintf(stderr, "Database connection failure: %d, %s\n",

mysql_errno(&my_connection), mysql_error(&my_connection));

return 0;

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

Алексей Михайлович

Соловьев Всеволод Сергеевич
4. Романовы. Династия в романах
Проза:
историческая проза
5.50
рейтинг книги
Алексей Михайлович

Божья кузница (сборник)

Бир Грег
Шедевры фантастики
Фантастика:
научная фантастика
6.20
рейтинг книги
Божья кузница (сборник)

Инквизиция: Омнибус

Френч Джон
Warhammer 40000
Фантастика:
эпическая фантастика
5.00
рейтинг книги
Инквизиция: Омнибус

"Княгиня Ольга". Компиляция. Книги 1-19

Дворецкая Елизавета Алексеевна
Княгиня Ольга
Приключения:
исторические приключения
5.00
рейтинг книги
Княгиня Ольга. Компиляция. Книги 1-19

Путь Базилио

Харитонов Михаил Юрьевич
1. Золотой Ключ, или Похождения Буратины.
Фантастика:
научная фантастика
5.00
рейтинг книги
Путь Базилио

Третий Генерал: Тома I-II

Зот Бакалавр
1. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Третий Генерал: Тома I-II

Американская империя

Уткин Анатолий Иванович
Документальная литература:
публицистика
5.00
рейтинг книги
Американская империя

Управленческая элита. Как мы ее отбираем и готовим

Тарасов Владимир
Деловая литература:
управление, подбор персонала
5.00
рейтинг книги
Управленческая элита. Как мы ее отбираем и готовим

Dolgin.indb

Маматов Алексей Сергеевич
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Dolgin.indb

Стрелок. Извлечение троих. Бесплодные земли

Кинг Стивен
Фантастика:
фэнтези
5.00
рейтинг книги
Стрелок. Извлечение троих. Бесплодные земли

Полное собрание сочинений. Том 14. Война и мир. Черновые редакции и варианты. Часть вторая

Толстой Лев Николаевич
Проза:
русская классическая проза
6.25
рейтинг книги
Полное собрание сочинений. Том 14. Война и мир. Черновые редакции и варианты. Часть вторая

Маленькая женщина Большого

Зайцева Мария
5. Наша
Любовные романы:
эро литература
современные любовные романы
5.40
рейтинг книги
Маленькая женщина Большого

Рыцарь из ниоткуда. Сборник

Бушков Александр Александрович
Сварог
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Рыцарь из ниоткуда. Сборник

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.25
рейтинг книги
Дважды одаренный. Том II