Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 158

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ понятна: ΠΎΠ½Π° сообщаСт сСрвСру ΠΈΠΌΠ΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅:

FROM artist, cd, track

Π§Π°ΡΡ‚ΡŒ

WHERE
слСгка мудрСная:

WHERE artist.id = cd.artist_id AND track.cd_id = cd.id AND track.track_id < 3

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ сообщаСт сСрвСру ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ

id
Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅
artist
Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Π½ΠΎΠΌΠ΅Ρ€ Π² столбцС
artist_id
Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
cd
. НапоминаСм, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сохраняСтС имя исполнитСля ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅
id
для ссылки Π½Π° этого исполнитСля Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅
cd
. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚,
track.cd_id = cd.id
, ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС для Ρ‚Π°Π±Π»ΠΈΡ†
track
ΠΈ
cd
, извСщая сСрвСр ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ столбСц
cd_id
Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
track
Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ столбСц
id
Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
cd
. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚,
track.track_id < 3
, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ объСм Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ 1 ΠΈ 2 ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска. ПослСднСС, Π½ΠΎ Π½Π΅ ΠΏΠΎ значимости, объСдинСниС этих Ρ‚Ρ€Π΅Ρ… условий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
AND
, Ρ‚.ΠΊ. Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ‚Ρ€ΠΈ условия Π±Ρ‹Π»ΠΈ истинными.

Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ прилоТСния ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘

Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰Π΅Π΅ интСрфСйс GUI. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Π½Π°Π΄ΠΎ ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° написании Ρ„Π°ΠΉΠ»Π° интСрфСйса, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ, ΠΊ вашим Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Π‘. ΠžΠ±Ρ‰Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ написании ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° β€” нСизвСстныС объСм Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹, ΠΈ способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ простоту ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° интСрфСйсС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ структуры фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰Π΅Π΅ сСтСвой Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, β€” всСгда ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ построчно с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

mysql_use_result
ΠΈ
mysql_fetch_row
, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйса

НачнитС с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° app_mysql.h, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ структуры ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π‘Π½Π°Ρ‡Π°Π»Π° нСсколько структур:

/* УпрощСнная структура для прСдставлСния ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска

Β Β  Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ΅ */

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 <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");