const char *Genre_Zn(Genre i) { switch (i) { case SCIENCE_FICTION: return "科幻"; case LITERATURE: return "文学"; case HISTORY: return "历史"; case TECHNOLOGY: return "科技"; case OTHER: return "其他"; default: return "未知"; // 处理非法输入 } }
3.2 函数2:print_book_info——打印所有书籍信息
该函数遍历书籍数组,按固定格式打印每本书的详细信息。为了美观,使用分隔线增强可读性:
1 2 3 4 5 6 7 8 9 10 11 12
void print_book_info(Book *books, int count) { // 打印分隔线(21个"-") for (int i = 0; i < 21; i++) printf("-"); printf(" 所有的书籍信息 "); for (int i = 0; i < 21; i++) printf("-"); printf("\n");
// 遍历并打印每本书 for (int i = 0; i < MAX_BOOKS; i++) { printf("编号:%-2d 书名:%-12s 作者:%-13s 类别:%-8s\n",books[i].num, books[i].name,books[i].author,Genre_Zn(books[i].genre)); } }
3.3 函数3:find_books_by_genre——按类别筛选书籍
用户输入类别编号后,该函数遍历数组,只打印符合条件的书籍:
1 2 3 4 5 6 7
void find_books_by_genre(Book *books, int count, Genre genre) { for (int i = 0; i < count; i++) { if (books[i].genre == genre) { printf("编号:%-2d 书名:%-12s 作者:%-13s 类别:%-8s\n",books[i].num, books[i].name,books[i].author,Genre_Zn(books[i].genre)); } } }
四、主函数:用户交互流程
主函数负责调用上述函数,提供交互界面。用户可以查看所有书籍,或按类别筛选书籍,输入5退出程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
int main(void) { // 打印所有书籍信息 print_book_info(books, MAX_BOOKS);
const char *Genre_Zn(Genre i) { switch (i) { case SCIENCE_FICTION: return "科幻"; case LITERATURE: return "文学"; case HISTORY: return "历史"; case TECHNOLOGY: return "科技"; case OTHER: return "其他"; default: return "未知"; } }
void print_book_info(Book *books, int count) { for (int i = 0; i < 21; i++) printf("-"); printf(" 所有的书籍信息 "); for (int i = 0; i < 21; i++) printf("-"); printf("\n");
for (int i = 0; i < MAX_BOOKS; i++) { printf("编号:%-2d 书名:%-12s 作者:%-13s 类别:%-8s\n", books[i].num, books[i].name, books[i].author, Genre_Zn(books[i].genre)); } }
void find_books_by_genre(Book *books, int count, Genre genre) { for (int i = 0; i < count; i++) { if (books[i].genre == genre) { printf("编号:%-2d 书名:%-12s 作者:%-13s 类别:%-8s\n", books[i].num, books[i].name, books[i].author, Genre_Zn(books[i].genre)); } } }