C 语言图书管理系统:添加、删除、更新、查找和排序书籍
#include <stdio.h> #include <stdbool.h> #include <string.h>
#define MAX_SIZE 100
struct Book { char isbn[20]; char title[100]; float price; };
struct Library { struct Book books[MAX_SIZE]; int size; };
void initializeLibrary(struct Library* library) { library->size = 0; }
boolean isLibraryEmpty(struct Library* library) { return library->size == 0; }
boolean isLibraryFull(struct Library* library) { return library->size == MAX_SIZE; }
void insertBook(struct Library* library, struct Book book) { if (isLibraryFull(library)) { printf("图书馆已满,无法插入图书。\n"); return; }
library->books[library->size] = book;
library->size++;
printf("图书已成功插入。\n");
}
int findBook(struct Library* library, char* isbn) { for (int i = 0; i < library->size; i++) { if (strcmp(library->books[i].isbn, isbn) == 0) { return i; } } return -1; }
void deleteBook(struct Library* library, char* isbn) { int index = findBook(library, isbn); if (index == -1) { printf("未找到图书,无法删除。\n"); return; }
for (int i = index; i < library->size - 1; i++) {
library->books[i] = library->books[i + 1];
}
library->size--;
printf("图书已成功删除。\n");
}
void updateBook(struct Library* library, char* isbn, struct Book newBook) { int index = findBook(library, isbn); if (index == -1) { printf("未找到图书,无法更新。\n"); return; }
library->books[index] = newBook;
printf("图书已成功更新。\n");
}
void sortByTitle(struct Library* library) { for (int i = 0; i < library->size - 1; i++) { for (int j = 0; j < library->size - i - 1; j++) { if (strcmp(library->books[j].title, library->books[j + 1].title) > 0) { struct Book temp = library->books[j]; library->books[j] = library->books[j + 1]; library->books[j + 1] = temp; } } } printf("图书已按标题成功排序。\n"); }
void printLibrary(struct Library* library) { printf("ISBN\t\t\t\t\t标题\t\t\t价格\n"); printf("--------------------------------------------------\n"); for (int i = 0; i < library->size; i++) { printf("%s\t%s\t%.2f\n", library->books[i].isbn, library->books[i].title, library->books[i].price); } printf("--------------------------------------------------\n"); }
void saveLibraryToFile(struct Library* library) { FILE* file = fopen("library.txt", "w");
if (file == NULL) {
printf("无法打开文件。\n");
return;
}
for (int i = 0; i < library->size; i++) {
fprintf(file, "%s,%s,%.2f\n", library->books[i].isbn, library->books[i].title, library->books[i].price);
}
fclose(file);
printf("图书馆已成功保存到文件。\n");
}
void loadLibraryFromFile(struct Library* library) { FILE* file = fopen("library.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return;
}
char line[100];
while (fgets(line, sizeof(line), file)) {
struct Book book;
sscanf(line, "%[^,],%[^,],%f", book.isbn, book.title, &book.price);
insertBook(library, book);
}
fclose(file);
printf("图书馆已成功从文件加载。\n");
}
int main() { struct Library library; initializeLibrary(&library);
int choice;
while (1) {
printf("\n***** 图书馆管理系统 *****\n");
printf("1. 插入图书\n");
printf("2. 删除图书\n");
printf("3. 更新图书\n");
printf("4. 查找图书\n");
printf("5. 按标题排序图书馆\n");
printf("6. 显示图书馆\n");
printf("7. 存储图书馆到文件\n");
printf("8. 从文件中加载图书馆\n");
printf("0. 退出\n");
printf("请输入您的选择:");
scanf("%d", &choice);
if (choice == 0) {
break;
}
switch (choice) {
case 1: {
struct Book book;
printf("请输入ISBN:");
scanf("%s", book.isbn);
printf("请输入标题:");
scanf(" %[^
]s", book.title); printf("请输入价格:"); scanf("%f", &book.price);
insertBook(&library, book);
break;
}
case 2: {
char isbn[20];
printf("请输入ISBN:");
scanf("%s", isbn);
deleteBook(&library, isbn);
break;
}
case 3: {
char isbn[20];
printf("请输入ISBN:");
scanf("%s", isbn);
struct Book newBook;
printf("请输入新的ISBN:");
scanf("%s", newBook.isbn);
printf("请输入新的标题:");
scanf(" %[^
]s", newBook.title); printf("请输入新的价格:"); scanf("%f", &newBook.price);
updateBook(&library, isbn, newBook);
break;
}
case 4: {
char isbn[20];
printf("请输入ISBN:");
scanf("%s", isbn);
int index = findBook(&library, isbn);
if (index == -1) {
printf("未找到该图书。\n");
}
else {
printf("该图书位于索引 %d。\n", index);
}
break;
}
case 5: {
sortByTitle(&library);
break;
}
case 6: {
printLibrary(&library);
break;
}
case 7: {
saveLibraryToFile(&library);
break;
}
case 8: {
loadLibraryFromFile(&library);
break;
}
default:
printf("无效选择。请重新选择。\n");
}
}
return 0;
原文地址: https://www.cveoy.top/t/topic/pNUT 著作权归作者所有。请勿转载和采集!