Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Интернет » Основы программирования в Linux - Мэтью Нейл
<< На главную

Основы программирования в Linux - Мэтью Нейл

Читать онлайн Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 125 126 127 128 129 130 131 132 133 ... 324
Перейти на страницу:

 menu_options current_option;

 cdc_entry current_cdc_entry;

 int command_result;

 memset(&amp;current_cdc_entry, '', sizeof(current_cdc_entry));

if (argc &gt;1) {

  command_result = command_mode(argc, argv);

  exit(command_result);

 }

 announce();

 if (!database_initialize(0)) {

  fprintf(stderr, &quot;Sorry, unable to initialize databasen&quot;);

  fprintf(stderr, &quot;To create a new database use %s -in&quot;, argv[0]);

  exit(EXIT_FAILURE);

 }

5. Теперь вы готовы обрабатывать ввод пользователя. Вы остаетесь в цикле, запрашивая пункт меню и обрабатывая его до тех пор, пока пользователь не выберет выход. Обратите вниманий на то, что вы передаете структуру current_cdc_entry в функцию show_menu, чтобы разрешить изменять варианты пунктов меню, когда выбран текущий элемент каталога:

 while (current_option != mo_exit) {

  current_option = show_menu(&amp;current_cdc_entry);

  switch(current_option) {

  case mo_add_cat:

   if (enter_new_cat_entry(&amp;current_cdc_entry)) {

    if (!add_cdc_entry(current_cdc_entry)) {

     fprintf(stderr, &quot;Failed to add new entryn&quot;);

     memset(&amp;current_cdc_entry, '',

      sizeof(current_cdc_entry));

    }

   }

   break;

  case mo_add_tracks:

   enter_new_track_entries(&amp;current_cdc_entry);

   break;

  case mo_del_cat:

   del_cat_entry(&amp;current_cdc_entry);

   break;

  case mo_find_cat:

   current_cdc_entry = find_cat();

   break;

  case mo_list_cat_tracks:

   list_tracks(&amp;current_cdc_entry);

   break;

  case mo_del_tracks:

   del_track_entries(&amp;current_cdc_entry);

   break;

  case mo_count_entries:

   count_all_entries();

   break;

  case mo_exit:

   break;

  case mo_invalid:

   break;

  default:

   break;

  } /* switch */

 } /* while */

6. Когда цикл в функции main завершится, закройте базу данных и вернитесь в окружение. Функция announce выводит приглашающее предложение:

 database_close();

 exit(EXIT_SUCCESS);

} /* main */

static void announce(void) {

 printf(&quot;nnWelcome to the demonstration CD catalog database

  programn&quot;);

}

7. Здесь вы реализуете функцию show_menu. Эта функция проверяет, выбран ли текущий элемент каталога, используя первый символ имени в каталоге. Если элемент каталога выбран, становятся доступными дополнительные пункты меню:

static menu_options show_menu(const cdc_entry *cdc_selected) {

 char tmp_str[TMP_STRING_LEN + 1];

 menu_options option_chosen = mo_invalid;

 while (option_chosen == mo_invalid) {

  if (cdc_selected-&gt;catalog[0]) {

   printf(&quot;nnCurrent entry: &quot;);

   printf(&quot;%s, %s, %a, %sn&quot;,

    cdc_selected-&gt;catalog, cdc_selected-&gt;title,

    cdc_selected-&gt;type, cdc_selected-&gt;artist);

   printf(&quot;n&quot;);

   printf(&quot;1 - add new CDn&quot;);

   printf(&quot;2 — search for a CDn&quot;);

   printf(&quot;3 — count the CDs and tracks in the databasen&quot;);

   printf(&quot;4 — re-enter tracks for current CDn&quot;);

   printf(&quot;5 - delete this CD, and all its tracksn&quot;);

   printf(&quot;6 - list tracks for this CDn&quot;);

   printf(&quot;q — quitn&quot;);

   printf(&quot;nOption: &quot;);

   fgets(tmp_str, TMP_STRING_LEN, stdin);

   switch(tmp_str[0]) {

   case '1':

    option_chosen = mo_add_cat;

    break;

   case '2':

    option_chosen = mo_find_cat;

    break;

   case '3':

    option_chosen = mo_count_entries;

    break;

   case '4':

    option_chosen = mo_add_tracks;

1 ... 125 126 127 128 129 130 131 132 133 ... 324
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Основы программирования в Linux - Мэтью Нейл бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга