C语言链式存储结构实现灵活的图书管理系统
如果您希望实现更灵活的图书管理系统,可以考虑使用菜单和用户输入来实现各种操作。以下是一个示例,演示了如何在C语言中实现一个基于链式存储结构的图书管理系统,其中用户可以选择执行不同的操作:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Book {
char book_number[50];
char book_name[50];
float price;
struct Book* next_book;
} Book;
typedef struct BookInfoTable {
Book* head;
} BookInfoTable;
Book* create_book(char book_number[], char book_name[], float price) {
Book* new_book = (Book*)malloc(sizeof(Book));
strcpy(new_book->book_number, book_number);
strcpy(new_book->book_name, book_name);
new_book->price = price;
new_book->next_book = NULL;
return new_book;
}
void add_book(BookInfoTable* book_table, char book_number[], char book_name[], float price) {
Book* new_book = create_book(book_number, book_name, price);
if (book_table->head == NULL) {
book_table->head = new_book;
} else {
Book* current_book = book_table->head;
while (current_book->next_book != NULL) {
current_book = current_book->next_book;
}
current_book->next_book = new_book;
}
printf('新图书已成功入库。\n');
}
void display_books(BookInfoTable* book_table) {
Book* current_book = book_table->head;
while (current_book != NULL) {
printf('书号: %s\n', current_book->book_number);
printf('书名: %s\n', current_book->book_name);
printf('价格: %.2f\n\n', current_book->price);
current_book = current_book->next_book;
}
}
void remove_book(BookInfoTable* book_table, char book_number[]) {
Book* current_book = book_table->head;
Book* previous_book = NULL;
while (current_book != NULL) {
if (strcmp(current_book->book_number, book_number) == 0) {
if (previous_book != NULL) {
previous_book->next_book = current_book->next_book;
} else {
book_table->head = current_book->next_book;
}
free(current_book);
printf('图书已成功出库。\n');
return;
}
previous_book = current_book;
current_book = current_book->next_book;
}
printf('未找到指定书号的图书。\n');
}
void search_by_number(BookInfoTable* book_table, char book_number[]) {
Book* current_book = book_table->head;
while (current_book != NULL) {
if (strcmp(current_book->book_number, book_number) == 0) {
printf('找到指定书号的图书信息:\n');
printf('书号: %s\n', current_book->book_number);
printf('书名: %s\n', current_book->book_name);
printf('价格: %.2f\n', current_book->price);
return;
}
current_book = current_book->next_book;
}
printf('未找到指定书号的图书。\n');
}
void search_by_price_range(BookInfoTable* book_table, float min_price, float max_price) {
Book* current_book = book_table->head;
int found_books = 0;
printf('找到价格区间为 %.2f 到 %.2f 的图书信息:\n\n', min_price, max_price);
while (current_book != NULL) {
if (current_book->price >= min_price && current_book->price <= max_price) {
printf('书号: %s\n', current_book->book_number);
printf('书名: %s\n', current_book->book_name);
printf('价格: %.2f\n\n', current_book->price);
found_books = 1;
}
current_book = current_book->next_book;
}
if (!found_books) {
printf('未找到价格区间为 %.2f 到 %.2f 的图书。\n', min_price, max_price);
}
}
void sort_by_price(BookInfoTable* book_table) {
int swapped;
Book* current_book;
Book* last_book = NULL;
if (book_table->head == NULL) {
return;
}
do {
swapped = 0;
current_book = book_table->head;
while (current_book->next_book != last_book) {
if (current_book->price > current_book->next_book->price) {
char temp_number[50];
char temp_name[50];
float temp_price;
strcpy(temp_number, current_book->book_number);
strcpy(temp_name, current_book->book_name);
temp_price = current_book->price;
strcpy(current_book->book_number, current_book->next_book->book_number);
strcpy(current_book->book_name, current_book->next_book->book_name);
current_book->price = current_book->next_book->price;
strcpy(current_book->next_book->book_number, temp_number);
strcpy(current_book->next_book->book_name, temp_name);
current_book->next_book->price = temp_price;
swapped = 1;
}
current_book = current_book->next_book;
}
last_book = current_book;
} while (swapped);
}
void update_price(BookInfoTable* book_table, char book_number[], float new_price) {
Book* current_book = book_table->head;
while (current_book != NULL) {
if (strcmp(current_book->book_number, book_number) == 0) {
current_book->price = new_price;
printf('图书价格已成功修改。\n');
return;
}
current_book = current_book->next_book;
}
printf('未找到指定书号的图书。\n');
}
void adjust_prices(BookInfoTable* book_table, float percentage) {
Book* current_book = book_table->head;
while (current_book != NULL) {
current_book->price += current_book->price * (percentage / 100);
current_book = current_book->next_book;
}
printf('图书价格已成功普调。\n');
}
void find_most_expensive_book(BookInfoTable* book_table) {
Book* current_book = book_table->head;
Book* most_expensive_book = current_book;
while (current_book != NULL) {
if (current_book->price > most_expensive_book->price) {
most_expensive_book = current_book;
}
current_book = current_book->next_book;
}
printf('最贵图书的信息:\n');
printf('书号: %s\n', most_expensive_book->book_number);
printf('书名: %s\n', most_expensive_book->book_name);
printf('价格: %.2f\n', most_expensive_book->price);
}
void remove_duplicates(BookInfoTable* book_table) {
Book* current_book = book_table->head;
Book* previous_book = NULL;
while (current_book != NULL) {
Book* inner_book = current_book->next_book;
Book* inner_previous_book = current_book;
while (inner_book != NULL) {
if (strcmp(inner_book->book_number, current_book->book_number) == 0) {
inner_previous_book->next_book = inner_book->next_book;
free(inner_book);
inner_book = inner_previous_book->next_book;
} else {
inner_previous_book = inner_book;
inner_book = inner_book->next_book;
}
}
previous_book = current_book;
current_book = current_book->next_book;
}
printf('图书去重已完成。\n');
}
int main() {
BookInfoTable book_table;
book_table.head = NULL;
int choice;
char book_number[50], book_name[50];
float price, min_price, max_price, new_price, percentage;
do {
printf('图书管理系统\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('9. 按最贵图书查找\n');
printf('10. 图书去重\n');
printf('0. 退出\n');
printf('请输入您的选择:');
scanf('%d', &choice);
switch (choice) {
case 1:
printf('请输入书号: ');
scanf('%s', book_number);
printf('请输入书名: ');
scanf('%s', book_name);
printf('请输入价格: ');
scanf('%f', &price);
add_book(&book_table, book_number, book_name, price);
break;
case 2:
display_books(&book_table);
break;
case 3:
printf('请输入要出库的书号: ');
scanf('%s', book_number);
remove_book(&book_table, book_number);
break;
case 4:
printf('请输入要查找的书号: ');
scanf('%s', book_number);
search_by_number(&book_table, book_number);
break;
case 5:
printf('请输入价格区间的最小值: ');
scanf('%f', &min_price);
printf('请输入价格区间的最大值: ');
scanf('%f', &max_price);
search_by_price_range(&book_table, min_price, max_price);
break;
case 6:
sort_by_price(&book_table);
printf('图书已按价格升序排序。\n');
break;
case 7:
printf('请输入要修改价格的书号: ');
scanf('%s', book_number);
printf('请输入新的价格: ');
scanf('%f', &new_price);
update_price(&book_table, book_number, new_price);
break;
case 8:
printf('请输入价格调整的百分比: ');
scanf('%f', &percentage);
adjust_prices(&book_table, percentage);
break;
case 9:
find_most_expensive_book(&book_table);
break;
case 10:
remove_duplicates(&book_table);
break;
case 0:
printf('感谢使用图书管理系统,再见!\n');
break;
default:
printf('无效的选择!请重新输入。\n');
break;
}
printf('\n');
} while (choice != 0);
return 0;
}
使用上面的代码,您可以在一个循环中根据用户的选择执行不同的操作,并根据需要输入相应的参数。用户可以使用菜单选择添加新图书、输出图书信息、出库图书、按书号查找图书、按价格区间查找图书、按价格升序排序、修改图书价格、调整图书价格、按最贵图书查找和去重等操作。
请将上述代码保存为一个名为book_management.c的文件,并使用C编译器进行编译和运行。这个程序将根据用户的选择执行相应的操作,并输出相应的结果。希望这个基于链式存储结构的图书管理系统满足您的需求!
原文地址: https://www.cveoy.top/t/topic/c1SJ 著作权归作者所有。请勿转载和采集!