用C语言设计一个图书信息管理系统,运用菜单,可实现以下功能: 图书信息录入、排序(按书名或作者名或价格) 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。 写出完整代码和注释
时间: 2023-10-20 22:13:23 浏览: 129
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 100 // 最大图书数量
struct Book {
char id[20]; // 登录号
char name[50]; // 书名
char author[50]; // 作者名
char type[20]; // 分类号
char publisher[50]; // 出版单位
char publish_time[20]; // 出版时间
float price; // 价格
};
// 函数声明
void print_menu();
void add_book(struct Book books[], int *count);
void sort_books(struct Book books[], int count, int sort_type);
void print_books(struct Book books[], int count);
int main() {
struct Book books[MAX_BOOKS]; // 定义图书数组
int count = 0; // 当前图书数量
int choice, sort_type;
do {
print_menu();
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1: // 录入图书信息
add_book(books, &count);
break;
case 2: // 按书名排序
sort_type = 1;
sort_books(books, count, sort_type);
print_books(books, count);
break;
case 3: // 按作者名排序
sort_type = 2;
sort_books(books, count, sort_type);
print_books(books, count);
break;
case 4: // 按价格排序
sort_type = 3;
sort_books(books, count, sort_type);
print_books(books, count);
break;
case 5: // 打印所有图书信息
print_books(books, count);
break;
case 0: // 退出程序
printf("谢谢使用!\n");
break;
default:
printf("输入错误,请重新输入!\n");
}
} while (choice != 0);
return 0;
}
// 打印菜单
void print_menu() {
printf("\n");
printf("**********************************\n");
printf(" 图书信息管理系统 \n");
printf("**********************************\n");
printf("1. 录入图书信息\n");
printf("2. 按书名排序\n");
printf("3. 按作者名排序\n");
printf("4. 按价格排序\n");
printf("5. 打印所有图书信息\n");
printf("0. 退出程序\n");
}
// 录入图书信息
void add_book(struct Book books[], int *count) {
if (*count >= MAX_BOOKS) {
printf("图书数量已达到最大值,无法录入!\n");
return;
}
struct Book new_book;
printf("请输入登录号:");
scanf("%s", new_book.id);
printf("请输入书名:");
scanf("%s", new_book.name);
printf("请输入作者名:");
scanf("%s", new_book.author);
printf("请输入分类号:");
scanf("%s", new_book.type);
printf("请输入出版单位:");
scanf("%s", new_book.publisher);
printf("请输入出版时间:");
scanf("%s", new_book.publish_time);
printf("请输入价格:");
scanf("%f", &new_book.price);
books[*count] = new_book;
*count += 1;
printf("图书信息录入成功!\n");
}
// 按照排序类型排序
void sort_books(struct Book books[], int count, int sort_type) {
int i, j;
struct Book temp;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - 1 - i; j++) {
switch (sort_type) {
case 1: // 按书名排序
if (strcmp(books[j].name, books[j+1].name) > 0) {
temp = books[j];
books[j] = books[j+1];
books[j+1] = temp;
}
break;
case 2: // 按作者名排序
if (strcmp(books[j].author, books[j+1].author) > 0) {
temp = books[j];
books[j] = books[j+1];
books[j+1] = temp;
}
break;
case 3: // 按价格排序
if (books[j].price > books[j+1].price) {
temp = books[j];
books[j] = books[j+1];
books[j+1] = temp;
}
break;
default:
break;
}
}
}
}
// 打印所有图书信息
void print_books(struct Book books[], int count) {
int i;
printf("共有%d本图书:\n", count);
printf("登录号\t书名\t作者名\t分类号\t出版单位\t出版时间\t价格\n");
for (i = 0; i < count; i++) {
printf("%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n", books[i].id, books[i].name,
books[i].author, books[i].type, books[i].publisher, books[i].publish_time, books[i].price);
}
}
```
阅读全文