if (current_row == current_highlight) attron(A_STANDOUT);
txt_ptr = options[current_row];
txt_ptr++;
mvprintw(start_row + current_row, start_col, "%s", txt_ptr);
if (current_row == current_highlight) attroff(A_STANDOUT);
current_row++;
option_ptr++;
}
mvprintw(start_row + current_row + 3, start_col,
"Move highlight then press Return ");
refresh;
}
3. Далее рассмотрим функцию clear_all_screen
, которая, как ни странно, очищает экран и перезаписывает заголовок. Если компакт-диск выбран, отображаются его данные:
clear;
mvprintw(2, 20, "%s", "CD Database Application");
if (current_cd[0]) {
mvprintw(ERROR_LINE, 0, "Current CD: %s: %s\n", current_cat, current_cd);
}
refresh;
}
Управление базой данных
В этом разделе описаны функции пополнения или обновления базы данных компакт-дисков. Функции add_record
, update_cd
и remove_cd
вызываются из функции main
.
1. Добавьте сведения о новом компакт-диске в базу данных.
char catalog_number[MAX_STRING];
char cd_title[MAX_STRING];
char cd_type[MAX_STRING];
char cd_artist[MAX_STRING];
char cd_entry[MAX_STRING];
int screenrow = MESSAGE_LINE;
int screencol = 10;
mvprintw(screenrow, screencol, "Enter new CD details");
screenrow += 2;
mvprintw(screenrow, screencol, "Catalog Number: " );
screenrow++;
mvprintw(screenrow, screencol, " CD Title: ");
screenrow++;
mvprintw(screenrow, screencol, " CD Type: ");
screenrow++;
mvprintw(screenrow, screencol, " Artist: ");
screenrow++;
mvprintw(PROMPT_LINE-2, 5, "About to add this new entry:");
sprintf(cd_entry, "%s, %s, %s, %s",
catalog_number, cd_title, cd_type, cd_artist);
mvprintw(PROMPT_LINE, 5, "%s", cd_entry);
refresh;
move(PROMPT_LINE, 0);
strcpy(current_cd, cd_title);
strcpy(current_cat, catalog_number);
}
}
2. Функция get_string
приглашает к вводу и считывает строку из текущей позиции экрана. Она также удаляет завершающую новую пустую строку:
int len;
wgetnstr(stdscr, string, MAX_STRING);
len = strlen(string);
if (len > 0 && string[len - 1] == '\n') string[len - 1] = '\0';
}
3. Функция get_confirm
запрашивает и считывает пользовательское подтверждение. Она читает введенную пользователем строку и проверяет, первый символ — Y
или у
. Если она обнаруживает другой символ, то не дает подтверждения.
int confirmed = 0;
char first_char;
mvprintw(Q_LINE, 5, "Are you sure? ");
clrtoeol;
refresh;
cbreak;
first_char = getch;
if (first_char == 'Y' || first_char == 'y') {
confirmed = 1;
}
nocbreak;
if (!confirmed) {
mvprintw(Q_LINE, 1, " Cancelled");
clrtoeol;
refresh;
sleep(1);
}
return confirmed;
}
4. Последней рассмотрим функцию insert_title
. Она вставляет в базу данных компакт-дисков заголовок, добавляя строку с заголовком в конец файла заголовков:
FILE *fp = fopen(title_file, "a");
if (!fp) {