如果您希望实现更灵活的图书管理系统,可以考虑使用菜单和用户输入来实现各种操作。以下是一个示例,演示了如何在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编译器进行编译和运行。这个程序将根据用户的选择执行相应的操作,并输出相应的结果。希望这个基于链式存储结构的图书管理系统满足您的需求!

C语言链式存储结构实现灵活的图书管理系统

原文地址: https://www.cveoy.top/t/topic/c1SJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录