C语言制作简单的图书管理系统

1、 基本功能: 1) 相对应操作实现录入(可以直接从键盘录入) 2) 登录界面实现

1.1)管理员登录界面输入用户名和密码

判断用户名和密码是否正确

正确则:成功登录跳转到管理员界面

错误则:显示用户名或密码错误

是否重新输入 1. 是 2. 否

1.2)读者登录界面输入用户名和密码

判断用户名和密码是否正确

正确则:成功登录跳转到读者操作界面

错误则:显示用户名或密码错误

是否重新输入 1. 是 2. 否

1.3)注册账号界面输入注册的用户名和密码

检查用户名是否已存在,若已存在,则显示 用户名已存在请重新输入

若不存在,则 增加用户信息到用户存储链表中,并显示用户注册成功,请返回登录

下面介绍相关代码

此项目一共是五个文件,分别是

login.c  login.h  user.c  user.h main.c

//此处为main.c文件

#include <stdio.h>
#include <stdbool.h>
#include "login.h"
#include "user.h"
struct H_User *H_user = NULL;
struct H_Book *H_book = NULL;

// 地址设问全局指针
int main()
{
    // 初始化
    // 用户存储链表
    H_user = Create_LinkedList_User();
    // 图书存储链表
    H_book = Create_LinkedList_Book();
    // 图书系统开始操作
    bool running = true;

    while (running)
    {
        // 1、输出登陆界面的信息
        printf("************登录************\n");
        printf("\t1、管理员登陆\n");
        printf("\t2、读者登陆\n");
        printf("\t3、注册账号\n");
        printf("\t4、退出账号\n");
        printf("****************************\n");

        // 2、获取选项,根据选项执行不同的操作
        int x;
        scanf("%d", &x);

        switch (x)
        {
        case 1:
            admin_login();
            // admin_UI(); // 进入管理员的登录成功界面
            break;
        case 2:
            reader_login();
            // reader_UI(); // 进入读者的登录成功界面
            break;
        case 3:
            reader_register();
            break;
        case 4:
            running = false;
            break;
        }
    }
    return 0;
}
//此处为 login.c 文件
#include "login.h"
#include "user.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

extern struct H_User *H_user;
extern struct H_Book *H_book;

void admin_login()
{

    while (1)
    {
        // 显示管理员登录界面
        printf("****************************\n");
        printf("请输入用户名:");
        char admin_user_name[32] = {0};
        scanf("%s", admin_user_name);
        printf("请输入密码:");
        char admin_user_pwd[32] = {0};
        scanf("%s", admin_user_pwd);

        if (strcmp(admin_user_name, "admin") == 0 && strcmp(admin_user_pwd, "123456") == 0)
        {
            printf("登录成功\n");
            admin_UI();
            break;
        }
        else
        {
            printf("用户名或密码输入错误,是否重新输入\n");
            printf("1、是   2、否\n");
            int x;
            scanf("%d", &x);
            if (x == 2)
            {
                break;
            }
        }
    }
}

void reader_login()
{
    struct User_Node *current_user = NULL;
    int flag = 0; // 0表示未成功登陆
    while (1)
    {
        // 显示读者登录界面
        printf("************读者登录界面************\n");
        printf("请输入用户名:");
        char reader_user_name[32] = {0};
        scanf("%s", reader_user_name);
        printf("请输入密码:");
        char reader_user_pwd[32] = {0};
        scanf("%s", reader_user_pwd);

        // 读者信息包含:读者编号 账户名 密码 借书 等等
        //              1、XXX 12345
        //              2、YYY 12345
        // 读者用户信息进行依次比较
        struct User_Node *p = H_user->first;
        while (p)
        {

            if (strcmp(reader_user_name, p->name) == 0 && strcmp(reader_user_pwd, p->pwd) == 0)
            {
                printf("读者登录成功\n");

                current_user = p; // 将当前用户设置为成功登录的用户
                flag = 1;
                break;
            }
            else if (strcmp(reader_user_name, p->name) == 0 && strcmp(reader_user_pwd, p->pwd) != 0)
            {
                printf("密码错误,请重新输入\n");
                break;
            }
            else
            {
                p = p->next;
            }
        }
        if (p && flag) // 成功登录结束
        {
            reader_UI(current_user); // 将成功登录的用户传递给用户界面函数
            break;
        }

        else if (p && flag == 0)
        {
            continue;
        }
        else
        {
            printf("该用户不存在,请返回注册\n");
            break;
        }
    }
}

void reader_register()
{
    printf("请输入用户名:\n");
    char username[20];
    scanf("%s", username);
    printf("请输入密码:\n");
    char password[20];
    scanf("%s", password);

    // 检查是否用户名已存在
    struct User_Node *p = H_user->first;
    while (p)
    {
        if (strcmp(username, p->name) == 0)
        {
            printf("用户名重复,注册失败,请重新注册\n");
            return; // 用户名重复,直接返回,不进行注册操作
        }
        p = p->next;
    }

    // 创建新的用户节点
    struct User_Node *new_user = (struct User_Node *)malloc(sizeof(struct User_Node));
    if (new_user == NULL)
    {
        printf("内存分配失败\n");
        return;
    }
    strcpy(new_user->name, username);
    strcpy(new_user->pwd, password);
    new_user->next = NULL;

    // 将新用户节点添加到链表中
    if (H_user->first == NULL)
    {
        H_user->first = new_user;
    }
    else
    {
        H_user->last->next = new_user;
    }
    H_user->last = new_user;
    H_user->num++;

    printf("用户注册成功\n");
}

// 管理员界面
void admin_UI()
{
    while (1)
    {
        printf("************管理员界面************\n");
        printf("\t1、录入新书信息\n");
        printf("\t2、修改新书信息\n");
        printf("\t3、删除图书信息\n");
        printf("\t4、浏览全部图书\n");
        printf("\t5、按书名或作者名查找\n");
        printf("\t6、退出\n");
        printf("****************************\n");

        int x;
        scanf("%d", &x);

        switch (x)
        {
        case 1:
            add_new_book();
            break;
        case 2:
            modify_book_info();
            break;
        case 3:
            delete_book();
            break;
        case 4:
            display_all_books();
            break;
        case 5:
            display_all_books();
            break;
        case 6:
            exit_admin_menu();
            return ;
        }
    }
}

// 1、录入新书信息
void add_new_book()
{
    if (H_book == NULL)
    {
        printf("图书链表尚未创建,请先创建图书链表\n");
        return;
    }

    struct Book *new_book = (struct Book *)malloc(sizeof(struct Book));
    if (new_book == NULL)
    {
        printf("内存分配失败\n");
        return;
    }

    printf("请输入书名:\n");
    scanf("%s", new_book->book_name);
    printf("请输入作者名:\n");
    scanf("%s", new_book->author);
    printf("请输入出版日期:\n");
    scanf("%s", new_book->date);
    printf("请输入数量:\n");
    scanf("%d", &(new_book->count));

    new_book->next = NULL;

    if (H_book->first == NULL)
    {
        H_book->first = new_book;
    }
    else
    {
        H_book->last->next = new_book;
    }

    H_book->last = new_book;
    H_book->num++;

    printf("新书信息录入成功\n");
}

// 2、修改新书信息
void modify_book_info()
{
    // 实现书名或作者名的查找
    printf("请输入要修改信息的书名或作者名:\n");
    char search_key[32];
    scanf("%s", search_key);

    struct Book *current = H_book->first;
    struct Book *prev = NULL;
    bool found = false;

    while (current != NULL)
    {
        if (strcmp(current->book_name, search_key) == 0 || strcmp(current->author, search_key) == 0)
        {
            found = true;
            printf("书名:%s  作者:%s  出版日期:%s  数量:%d\n",
                   current->book_name, current->author, current->date, current->count);

            printf("请选择要修改的信息:\n");
            printf("\t1、修改书名\n");
            printf("\t2、修改作者\n");
            printf("\t3、修改出版日期\n");
            printf("\t4、修改数量\n");
            printf("\t5、取消修改\n");

            int choice;
            scanf("%d", &choice);

            switch (choice)
            {
            case 1:
                printf("请输入新的书名:\n");
                scanf("%s", current->book_name);
                break;
            case 2:
                printf("请输入新的作者名:\n");
                scanf("%s", current->author);
                break;
            case 3:
                printf("请输入新的出版日期:\n");
                scanf("%s", current->date);
                break;
            case 4:
                printf("请输入新的数量:\n");
                scanf("%d", &(current->count));
                break;
            case 5:
                printf("取消修改\n");
                return;
            default:
                printf("无效的选项\n");
            }
            break;
        }
        prev = current;
        current = current->next;
    }

    if (!found)
    {
        printf("未找到匹配的书籍信息\n");
    }
}

// 3、删除图书信息
void delete_book()
{
    // 实现书名或作者名的查找
    printf("请输入要删除信息的书名或作者名:\n");
    char search_key[32];
    scanf("%s", search_key);

    struct Book *current = H_book->first;
    struct Book *prev = NULL;
    bool found = false;

    while (current != NULL)
    {
        if (strcmp(current->book_name, search_key) == 0 || strcmp(current->author, search_key) == 0)
        {
            found = true;
            printf("找到匹配的书籍信息:\n");
            printf("书名:%s  作者:%s  出版日期:%s  数量:%d\n",
                   current->book_name, current->author, current->date, current->count);
            printf("确认要删除(1、是 2、否)\n");

            int choice;
            scanf("%d", &choice);

            if (choice == 1)
            {
                // 删除图书信息
                if (prev == NULL)
                {
                    // 要删除的是第一个节点
                    H_book->first = current->next;
                }
                else
                {
                    prev->next = current->next;
                }

                // 如果删除的是最后一个节点,更新last指针
                if (current == H_book->last)
                {
                    H_book->last = prev;
                }

                free(current); // 释放内存
                H_book->num--; // 减少书籍种类数
                printf("图书信息删除成功\n");
            }
            else
            {
                printf("取消删除\n");
            }

            break;
        }
        prev = current;
        current = current->next;
    }

    if (!found)
    {
        printf("未找到匹配的书籍信息\n");
    }
}

// 4、浏览全部图书
void display_all_books()
{
    struct Book *current = H_book->first;
    while (current != NULL)
    {
        printf("书名:%s  作者:%s  出版日期:%s  数量:%d\n",
               current->book_name, current->author, current->date, current->count);
        current = current->next;
    }
}

// 5、按书名或者作者名查找
void search_books()
{
    printf("请输入要查找的书名或作者名:\n");
    char keyword[32];
    scanf("%s", keyword);

    struct Book *current_book = H_book->first;
    bool found = false;

    while (current_book != NULL)
    {
        if (strcmp(current_book->book_name, keyword) == 0 || strcmp(current_book->author, keyword) == 0)
        {
            printf("书名:%s\n", current_book->book_name);
            printf("作者:%s\n", current_book->author);
            printf("出版日期:%s\n", current_book->date);
            printf("数量:%d\n", current_book->count);
            printf("----------------\n");
            found = true;
        }
        current_book = current_book->next;
    }

    if (!found)
    {
        printf("未找到匹配的书籍。\n");
    }
}

// 6、退出
void exit_admin_menu()
{
    printf("管理员界面已退出\n");
    return;
    //回到登录界面
}

// 读者界面
void reader_UI(struct User_Node *current_user)
{
    while (1)
    {
        printf("************读者界面************\n");
        printf("\t1、修改登录密码\n");
        printf("\t2、按照书名查询\n");
        printf("\t3、按照作者名查询\n");
        printf("\t4、按照书名查找数量\n");
        printf("\t5、退出\n");
        printf("****************************\n");

        printf("请输入您的选择:");
        int choice;
        scanf("%d", &choice);

        switch (choice)
        {
        case 1:
            // 执行修改登录密码的功能,并传递当前用户信息
            modify_password(current_user);
            break;
        case 2:
            // 执行按书名查询的功能
            search_by_book_name();
            break;
        case 3:
            // 执行按作者名查询的功能
            search_by_author_name();
            break;
        case 4:
            // 执行按书名查找数量的功能
            search_book_count();
            break;
        case 5:
            printf("退出读者界面\n");
            return; // 退出读者界面
        default:
            printf("无效的选项,请重新输入\n");
            break;
        }
    }
}

// 修改登录密码的函数
void modify_password(struct User_Node *user)
{
    char new_password[32];
    printf("请输入新的密码:");
    scanf("%s", new_password);

    // 更新用户密码
    strcpy(user->pwd, new_password);
    printf("密码修改成功\n");
}

// 按书名查询书籍的函数
void search_by_book_name()
{
    char book_name[64];
    printf("请输入要查询的书名:");
    scanf("%s", book_name);

    struct Book *current = H_book->first;
    bool found = false;

    while (current != NULL)
    {
        if (strcmp(current->book_name, book_name) == 0)
        {
            // 找到匹配的书籍
            printf("书名:%s\n", current->book_name);
            printf("作者:%s\n", current->author);
            printf("出版日期:%s\n", current->date);
            printf("数量:%d\n", current->count);
            printf("----------------\n");
            found = true;
        }
        current = current->next;
    }

    if (!found)
    {
        printf("未找到匹配的书籍。\n");
    }
}

// 按作者名查询书籍的函数
void search_by_author_name()
{
    char author_name[64];
    printf("请输入要查询的作者名:");
    scanf("%s", author_name);

    struct Book *current = H_book->first;
    bool found = false;

    while (current != NULL)
    {
        if (strcmp(current->author, author_name) == 0)
        {
            // 找到匹配的书籍
            printf("书名:%s\n", current->book_name);
            printf("作者:%s\n", current->author);
            printf("出版日期:%s\n", current->date);
            printf("数量:%d\n", current->count);
            printf("----------------\n");
            found = true;
        }
        current = current->next;
    }

    if (!found)
    {
        printf("未找到匹配的书籍。\n");
    }
}

// 按照书名查找数量的函数
void search_book_count()
{
    char book_name[64];
    printf("请输入要查询的书名:");
    scanf("%s", book_name);

    struct Book *current = H_book->first;
    bool found = false;

    while (current != NULL)
    {
        if (strcmp(current->book_name, book_name) == 0)
        {
            // 找到匹配的书籍
            printf("书名:%s\n", current->book_name);
            printf("数量:%d\n", current->count);
            printf("----------------\n");
            found = true;
            break; // 找到了目标书籍,退出循环
        }
        current = current->next;
    }

    if (!found)
    {
        printf("未找到匹配的书籍。\n");
    }
}
//此处为 login.h 文件
#ifndef __LOGIN_H__
#define __LOGIN_H__
#include "user.h"

extern void admin_login();
extern void reader_login();
extern void reader_register();
extern void admin_UI();
extern void reader_UI();
extern void add_new_book();
extern void modify_book_info();
extern void delete_book();
extern void display_all_books();
extern void search_books();
extern void exit_admin_menu();
extern void modify_password(struct User_Node *user);
extern void search_by_book_name();
extern void search_by_author_name();
extern void search_book_count();

#endif
//此处是 user.c 文件
#include "user.h"
#include "login.h"
#include <stdio.h>
#include <stdlib.h>

struct H_User *Create_LinkedList_User()
{
    struct H_User *h = malloc(sizeof(*h));
    h->num = 0;
    h->first = h->last = NULL;

    return h;
}

struct H_Book *Create_LinkedList_Book()
{
    struct H_Book *h = malloc(sizeof(*h));
    h->num = 0;
    h->first = h->last = NULL;

    return h;
}



//此处是 user.h 文件
#ifndef __USER_H__
#define __USER_H__
#include <stdio.h>
#include <stdbool.h>

struct User_Node // 读者用户类型
{
    char name[32];
    char pwd[32];
    struct User_Node *next;
};

struct H_User
{
    struct User_Node *first; // 指向第一个用户
    struct User_Node *last;  // 指向最后一个用户
    int num;
};

struct Book
{
    // int num; // 书籍编号
    char book_name[32];
    char author[32];
    char date[32];
    int count; // 数量
    struct Book *next;
};
struct H_Book
{
    struct Book *first; // 指向第一种书籍
    struct Book *last;  // 指向最后一种书籍
    int num;            // 书籍的种类数
};

extern struct H_User *Create_LinkedList_User();
extern struct H_Book *Create_LinkedList_Book();
//extern bool Insert_Node(const char *user_name, const char *user_pwd);

#endif

展示效果如下:(注意:用户需要注册再登录操作!!!)

 

 

 

 

 

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简易的图书管理系统的代码,使用了C语言编写。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_BOOKS 100 // 最大书籍数量 // 书籍结构体 typedef struct { char title[50]; // 书名 char author[30]; // 作者 int year; // 出版年份 float price; // 价格 } Book; // 函数声明 void add_book(Book books[], int *count); void search_book(Book books[], int count); void print_books(Book books[], int count); int main() { Book books[MAX_BOOKS]; // 存储书籍的数组 int count = 0; // 当前书籍数量 int choice = 0; // 用户选择的操作 do { // 显示菜单 printf("请选择操作:\n"); printf("1. 添加书籍\n"); printf("2. 查找书籍\n"); printf("3. 显示所有书籍\n"); printf("4. 退出程序\n"); printf("请输入数字选择操作: "); scanf("%d", &choice); switch (choice) { case 1: add_book(books, &count); break; case 2: search_book(books, count); break; case 3: print_books(books, count); break; case 4: printf("程序已退出.\n"); break; default: printf("无效输入,请重新输入.\n"); break; } } while (choice != 4); return 0; } // 添加书籍 void add_book(Book books[], int *count) { if (*count >= MAX_BOOKS) { printf("图书库已满,无法继续添加书籍.\n"); return; } Book book; printf("请输入书籍信息:\n"); printf("书名: "); getchar(); fgets(book.title, 50, stdin); printf("作者: "); fgets(book.author, 30, stdin); printf("出版年份: "); scanf("%d", &book.year); printf("价格: "); scanf("%f", &book.price); books[*count] = book; *count += 1; printf("书籍添加成功.\n"); } // 查找书籍 void search_book(Book books[], int count) { char title[50]; printf("请输入要查找的书籍名称: "); getchar(); fgets(title, 50, stdin); int found = 0; // 是否找到书籍 for (int i = 0; i < count; i++) { if (strcmp(books[i].title, title) == 0) { printf("书名: %s", books[i].title); printf("作者: %s", books[i].author); printf("出版年份: %d\n", books[i].year); printf("价格: %.2f\n", books[i].price); found = 1; break; } } if (!found) { printf("没有找到该书籍.\n"); } } // 显示所有书籍 void print_books(Book books[], int count) { if (count == 0) { printf("图书库为空.\n"); return; } printf("所有书籍如下:\n"); for (int i = 0; i < count; i++) { printf("书名: %s", books[i].title); printf("作者: %s", books[i].author); printf("出版年份: %d\n", books[i].year); printf("价格: %.2f\n", books[i].price); } } ``` 这个程序是一个简单图书管理系统,可以添加书籍、查找书籍和显示所有书籍。其中,书籍的信息以结构体的形式存储,使用了数组来存储所有的书籍。程序使用了循环和条件语句来实现菜单操作,同时使用了字符串比较函数来查找书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值