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

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

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

const char *title_file = "title.cdb";

const char *tracks_file = "tracks.cdb";

const char *temp_file = "cdb.tmp";

4. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

void clear_all_screen(void);

void get_return(void);

int get_confirm(void);

int getchoice(char *greet, char *choices[]);

void draw_menu(char *options[], int highlight,

Β int start_row, int start_col);

void insert_title(char *cdtitle);

void get_string(char *string);

void add_record(void);

void count_cds(void);

void find_cd(void);

void list_tracks(void);

void remove_tracks(void);

void remove_cd(void);

void update_cd(void);

5.Β ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π²Π²Π΅Π΄Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ структуры (Π½Π° самом Π΄Π΅Π»Π΅ массив ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню) для хранСния мСню. Когда выбираСтся ΠΏΡƒΠ½ΠΊΡ‚ мСню, возвращаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π°. НапримСр, Ссли это ΠΏΡƒΠ½ΠΊΡ‚ мСню add new CD (Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ CD), ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ символ

Π°
. Когда ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск Π²Ρ‹Π±Ρ€Π°Π½, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ мСню.

char *main_menu[] = {

Β "add new CD",

Β "find CD",

Β "count CDs and tracks in the catalog",

Β "quit",

Β 0,

};

char *extended_menu[] = {

Β "add new CD",

Β "find CD",

Β "count CDs and tracks in the catalog",

Β "list tracks on current CD";

Β "remove current CD",

Β "update track information",

Β "quit",

Β 0,

};

На этом инициализация Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ функциям ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ сначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎ взаимосвязях всСх 16 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… сСкции:

β–‘ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ мСню;

β–‘ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…;

β–‘ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска.

Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС Π΄Π°Π½ΠΎ Π½Π° рис. 6.9.

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² Linux - image020.jpg

Рис. 6.9

Взгляд Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ main

Ѐункция

main
позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню, ΠΏΠΎΠΊΠ° Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· мСню (quit). Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

<i>int main() {</i>

Β int choice;

Β initscr();

Β do {

Β Β choice = getchoice(&quot;Options:&quot;, current_cd[0] ? extended_menu : main_menu);

Β  switch (choice) {

Β Β case 'q':

Β  Β break;

Β  case 'a':

<i>Β Β  add_record();</i>

Β Β  break;

Β Β case 'c':

<i>Β Β  count_cds();</i>

Β Β  break;

Β Β case 'f':

<i>Β Β  find_cd();</i>

Β Β  break;

Β Β case 'l':

<i>Β Β  list_tracks();</i>

Β Β  break;

Β Β case 'r':

<i>Β Β  remove_cd();</i>

Β Β  break;

Β  case 'u':

<i>Β Β  update_cd();</i>

Β Β  break;

Β  }

Β } while (choice != 'q');

Β endwin();

Β exit(EXIT_SUCCESS);

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, связанныС с трСмя сСкциями ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ мСню

Π’ этой сСкции Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, относящиСся ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ интСрфСйсу ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

1. Ѐункция

getchoice
, вызываСмая ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
main
, β€” это основная функция Π΄Π°Π½Π½ΠΎΠΉ сСкции. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
getchoice
пСрСдаСтся ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅
greet
ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
choices
Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ мСню (Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹Π±Ρ€Π°Π½ Π»ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск). Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ
main_menu
ΠΈΠ»ΠΈ
extended_menu
ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Ρ€Π°Π½Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
main
.

<i>int get_choice(char *greet, char* choises[]) {</i>

Β static int selected_row = 0;

Β int max_row = 0;

Β int start_screenrow = MESSAGE_LINE, start_screencol = 10;

Β char **option;

Β int selected;

Β int key = 0;

Β option = choices;

Β while (*option) {

Β Β max_row++;

Β Β option++;

Β }

Β if (selected_row &gt;= max_row)

Β  selected_row = 0;

<i>Β clear_all_screen();</i>