Сначала несколько структур:
/* Упрощенная структура для представления компакт-диска
за исключением информации о дорожке */
struct current_cd_st {
int artist_id;
int cd_id;
char artist_name[100];
char title[100];
char catalogue[100];
};
/* Упрощенная структура сведений о дорожке */
struct current_tracks_st {
int cd_id;
char track[20][100];
};
#define MAX_CD_RESULT 10
struct cd_search_st {
int cd_id[MAX_CD_RESULT];
};
Далее пара функций для подключения к серверу и отключения от него:
/* Серверные функции базы данных */
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
#include
#include
#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]);