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

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

Жанры

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

static int command_mode(int argc, char *argv[]);

static void announce(void);

static menu_options show_menu(const cdc_entry *current_cdc);

static int get_confirm(const char *question);

static int enter_new_cat_entry(cdc_entry *entry_to_update);

static void enter_new_track_entries(const cdc_entry* entry_to_add_to);

static void del_cat_entry(const cdc_entry *entry_to_delete);

static void del_track_entries(const cdc_entry *entry_to_delete);

static cdc_entry find_cat(void);

static void list_tracks(const cdc_entry *entry_to_use);

static void count_all_entries(void);

static void display_cdc(const cdc_entry *cdc_to_show);

static void display_cdt(const cdt_entry *cdt_to_show);

static void strip_return(char *string_to_strip);

4. И

наконец, вы добрались до функции
main
. Она начинается с проверки того, что текущий элемент
current_cdc_entry
, который применяется для сохранения дорожки выбранного в данный момент элемента каталога компакт-дисков, инициализирован. Также проводится грамматический разбор командной строки, выдается оповещение о том, какая программа выполняется, и инициализируется база данных.

void main(int argc, char *argv[]) {

 menu_options current_option;

 cdc_entry current_cdc_entry;

 int command_result;

 memset(&current_cdc_entry, '\0', sizeof(current_cdc_entry));

if (argc >1) {

command_result = command_mode(argc, argv);

exit(command_result);

 }

 announce;

 if (!database_initialize(0)) {

fprintf(stderr, "Sorry, unable to initialize database\n");

fprintf(stderr, "To create a new database use %s -i\n", argv[0]);

exit(EXIT_FAILURE);

 }

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

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

 while (current_option != mo_exit) {

current_option = show_menu(&current_cdc_entry);

switch(current_option) {

case mo_add_cat:

if (enter_new_cat_entry(&current_cdc_entry)) {

if (!add_cdc_entry(current_cdc_entry)) {

fprintf(stderr, "Failed to add new entry\n");

memset(&current_cdc_entry, '\0',

sizeof(current_cdc_entry));

}

}

break;

case mo_add_tracks:

enter_new_track_entries(&current_cdc_entry);

break;

case mo_del_cat:

del_cat_entry(&current_cdc_entry);

break;

case mo_find_cat:

current_cdc_entry = find_cat;

break;

case mo_list_cat_tracks:

list_tracks(&current_cdc_entry);

break;

case mo_del_tracks:

del_track_entries(&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("\n\nWelcome to the demonstration CD catalog database \

program\n");

}

7. Здесь вы реализуете функцию

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

static menu_options show_menu(const cdc_entry *cdc_selected) {

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

Полное собрание стихотворений

Северянин Игорь Васильевич
Поэзия:
поэзия
6.25
рейтинг книги
Полное собрание стихотворений

Том 1

Гончаров Иван Александрович
1. Гончаров И.А. Полное собрание сочинений и писем в 20 томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 1

Воронцов. Перезагрузка

Тарасов Ник
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.50
рейтинг книги
Воронцов. Перезагрузка

Туристы. О путешествиях во времени.

Белкина Анна Ивановна
Фантастика:
научная фантастика
5.00
рейтинг книги
Туристы. О путешествиях во времени.

Имперец. Том 4

Романов Михаил Яковлевич
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 4

Пути Предназначения

Воронова Влада Юрьевна
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
Пути Предназначения

Точка Бифуркации

Смит Дейлор
1. ТБ
Фантастика:
боевая фантастика
7.33
рейтинг книги
Точка Бифуркации

Именем закона. Сборник № 1

Ромов Анатолий Сергеевич
Детективы:
прочие детективы
4.00
рейтинг книги
Именем закона. Сборник № 1

Королева Тьмы

Бишоп Энн
3. Черные драгоценности
Фантастика:
фэнтези
9.13
рейтинг книги
Королева Тьмы

Монстр из прошлого тысячелетия

Еслер Андрей
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
4.75
рейтинг книги
Монстр из прошлого тысячелетия

На исходе дня. История ночи

Экерч А. Роджер
Научно-образовательная:
история
культурология
5.00
рейтинг книги
На исходе дня. История ночи

Резонанс Ци. Дилогия

Орлов Андрей Юрьевич
Резонанс Ци
Фантастика:
постапокалипсис
рпг
уся
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Резонанс Ци. Дилогия

В поисках Силы или канон давай до свиданья, или...

N.B.
3. Неудачный выбор
Фантастика:
юмористическое фэнтези
попаданцы
рпг
5.00
рейтинг книги
В поисках Силы или канон давай до свиданья, или...

В объятиях страха, или За котом на край Вселенной

Лунёва Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
В объятиях страха, или За котом на край Вселенной