C语言大作业之图书管理系统的实现详程

yizhihongxing

C语言大作业之图书管理系统的实现详程

概述

本文将详细讲解如何使用C语言编写一个简单的图书管理系统。该系统包含管理员和用户两种角色,主要实现以下功能:
- 管理员:图书的添加、删除与修改
- 用户:图书的查询、借阅、归还

系统设计

本系统由以下几个模块组成:

  1. main.c:主程序,实现系统的入口功能。
  2. user.c:用户模块,实现用户相关的功能,如图书查询、借阅、归还等。
  3. admin.c:管理员模块,实现管理员相关的功能,如图书添加、删除、修改等。
  4. book.h:书籍模块的头文件,定义了图书相关信息的结构体和函数原型。
  5. book.c:书籍模块,实现图书相关的操作,包括书籍信息的存储和修改等。

代码实现

book.h

图书信息结构体:

typedef struct book {
    char name[50];   // 书名
    char author[20]; // 作者
    char publisher[30];   // 出版社
    double price;    // 价格
    int num;         // 剩余数量
} Book;

书籍操作函数原型:

void add_book(Book *book_arr, int *count);
void delete_book(Book *book_arr, int *count);
void modify_book(Book *book_arr, int *count);
void search_book(Book *book_arr, int count);
void borrow_book(Book *book_arr, int count);
void return_book(Book *book_arr, int count);

book.c

书籍操作函数实现:

void add_book(Book *book_arr, int *count) {
    printf("\n请输入详细信息:\n");
    printf("书名:");
    scanf("%s", book_arr[*count].name);
    printf("作者:");
    scanf("%s", book_arr[*count].author);
    printf("出版社:");
    scanf("%s", book_arr[*count].publisher);
    printf("价格:");
    scanf("%lf", &book_arr[*count].price);
    printf("数量:");
    scanf("%d", &book_arr[*count].num);
    (*count)++;
    printf("\n添加成功!\n");
}

void delete_book(Book *book_arr, int *count) {
    char name[50];
    int index = -1;
    printf("\n请输入要删除的书名:");
    scanf("%s", name);

    for (int i = 0; i < *count; i++) {
        if (strcmp(name, book_arr[i].name) == 0) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("\n未找到相关书籍!\n");
        return;
    }

    for (int i = index; i < *count - 1; i++) {
        book_arr[i] = book_arr[i+1];
    }
    (*count)--;
    printf("\n删除成功!\n");
}

void modify_book(Book *book_arr, int *count) {
    char name[50];
    int index = -1;
    printf("\n请输入要修改的书名:");
    scanf("%s", name);

    for (int i = 0; i < *count; i++) {
        if (strcmp(name, book_arr[i].name) == 0) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("\n未找到相关书籍!\n");
        return;
    }

    printf("\n请输入修改后的详细信息:\n");
    printf("书名:");
    scanf("%s", book_arr[index].name);
    printf("作者:");
    scanf("%s", book_arr[index].author);
    printf("出版社:");
    scanf("%s", book_arr[index].publisher);
    printf("价格:");
    scanf("%lf", &book_arr[index].price);
    printf("数量:");
    scanf("%d", &book_arr[index].num);
    printf("\n修改成功!\n");
}

void search_book(Book *book_arr, int count) {
    printf("\n请输入要查询的书名:");
    char name[50];
    scanf("%s", name);

    int index = -1;
    for (int i = 0; i < count; i++) {
        if (strcmp(name, book_arr[i].name) == 0) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("\n未找到相关书籍!\n");
        return;
    }

    printf("\n书名:%s\n", book_arr[index].name);
    printf("作者:%s\n", book_arr[index].author);
    printf("出版社:%s\n", book_arr[index].publisher);
    printf("价格:%.2f\n", book_arr[index].price);
    printf("剩余数量:%d\n", book_arr[index].num);
}

void borrow_book(Book *book_arr, int count) {
    printf("\n请输入借阅的书名:");
    char name[50];
    scanf("%s", name);

    int index = -1;
    for (int i = 0; i < count; i++) {
        if (strcmp(name, book_arr[i].name) == 0) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("\n未找到相关书籍!\n");
        return;
    }

    if (book_arr[index].num == 0) {
        printf("\n该书已借完!\n");
        return;
    }

    book_arr[index].num--;
    printf("\n借阅成功!\n");
}

void return_book(Book *book_arr, int count) {
    printf("\n请输入归还的书名:");
    char name[50];
    scanf("%s", name);

    int index = -1;
    for (int i = 0; i < count; i++) {
        if (strcmp(name, book_arr[i].name) == 0) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("\n未找到相关书籍!\n");
        return;
    }

    book_arr[index].num++;
    printf("\n归还成功!\n");
}

admin.c

管理员相关函数的实现:

#include "book.h"

void admin_menu(Book *book_arr, int *count) {
    int choice;
    while (1) {
        printf("\n管理员菜单\n");
        printf("1. 添加图书\n");
        printf("2. 删除图书\n");
        printf("3. 修改图书\n");
        printf("0. 退出\n");
        printf("请选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 0: return;
            case 1: add_book(book_arr, count); break;
            case 2: delete_book(book_arr, count); break;
            case 3: modify_book(book_arr, count); break;
            default: printf("输入有误,请重新输入!\n");
        }
    }
}

user.c

用户相关函数的实现:

#include "book.h"

void user_menu(Book *book_arr, int count) {
    int choice;
    while (1) {
        printf("\n用户菜单\n");
        printf("1. 查询图书\n");
        printf("2. 借阅图书\n");
        printf("3. 归还图书\n");
        printf("0. 退出\n");
        printf("请选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 0: return;
            case 1: search_book(book_arr, count); break;
            case 2: borrow_book(book_arr, count); break;
            case 3: return_book(book_arr, count); break;
            default: printf("输入有误,请重新输入!\n");
        }
    }
}

main.c

主函数实现:

#include <stdio.h>
#include "book.h"

int main() {
    Book book_arr[100];
    int count = 0;
    int choice;

    while (1) {
        printf("\n欢迎使用图书管理系统\n");
        printf("1. 管理员登录\n");
        printf("2. 用户登录\n");
        printf("0. 退出\n");
        printf("请选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 0: return 0;
            case 1: admin_menu(book_arr, &count); break;
            case 2: user_menu(book_arr, count); break;
            default: printf("输入有误,请重新输入!\n");
        }
    }

    return 0;
}

示例说明

添加图书

管理员可以通过选择“1. 添加图书”功能来添加新的图书。添加图书功能会依次要求输入书名、作者、出版社、价格和数量等信息。

示例:

管理员菜单
1. 添加图书
2. 删除图书
3. 修改图书
0. 退出
请选择:1

请输入详细信息:
书名:C Primer Plus
作者:Stephen Prata
出版社:人民邮电出版社
价格:62.00
数量:50

添加成功!

借阅图书

用户可以通过选择“2. 借阅图书”功能来借阅图书。如果所选择的图书已经借完,则无法借阅。

示例:

用户菜单
1. 查询图书
2. 借阅图书
3. 归还图书
0. 退出
请选择:2

请输入借阅的书名:C Primer Plus

借阅成功!

总结

通过本文的讲解,我们掌握了如何使用C语言实现一个简单的图书管理系统。对于初学者来说,本系统可能仍存在一些不足和问题,但是通过不断地练习和完善,相信大家都能写出更加优秀和实用的图书管理系统。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言大作业之图书管理系统的实现详程 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C语言实现模拟银行系统

    C语言实现模拟银行系统攻略 概述 本文将介绍如何采用C语言实现简单的模拟银行系统。该系统主要包含账户管理、存款、取款、转账、查询余额等功能。 系统设计 账户结构体 一个账户包含三个属性:账户号、账户余额和持有者姓名。定义一个结构体表示账户: typedef struct account_t { int account_no; //账户号 float bala…

    C 2023年5月23日
    00
  • 解析C++中的字符串处理函数和指针

    解析C++中的字符串处理函数和指针 在C++中,字符串(String)是一种常见的数据类型。在使用字符串时,我们常常需要进行一些处理,例如拼接字符串、查找字符、截取子串等。此时,就需要用到字符串处理函数和指针。以下是详细的解析攻略。 字符串处理函数 在C++中,有一些常用的字符串处理函数,下面来一一介绍。 strlen strlen 函数用于计算字符串的长度…

    C 2023年5月23日
    00
  • C++实现车票管理系统

    C++实现车票管理系统 系统功能 该车票管理系统主要实现以下功能: 查询车票信息 购买车票 退票操作 统计车票销售额和余票数操作 设计思路 数据结构 使用结构体来存储车票信息,包括车次、起点站、终点站、发车时间、到达时间、车票价格和车票余量等信息。同时,为了方便对车票信息进行查找、添加和删除等操作,可以使用一个存储车票信息的数组来进行管理。 struct T…

    C 2023年5月22日
    00
  • C语言如何在字符数组中插入一个字符

    以下是使用C语言在字符数组中插入一个字符的详细攻略: 1. 按照索引位置分割字符数组 首先,我们需要对原始的字符数组进行分割,将需要插入字符的位置之前和之后的部分分别提取出来。 具体而言,对于一个字符数组 str 和需要插入字符的索引位置 index,我们可以分别使用 strncpy() 函数和指针运算来完成分割: char str[MAX_SIZE] = …

    C 2023年5月23日
    00
  • 基于C语言实现简单的扫雷小游戏

    基于C语言实现简单的扫雷小游戏攻略 思路 创建扫雷游戏棋盘 随机初始化地雷位置 统计每个格子周围地雷个数 打开格子、标记地雷 判断游戏是否结束 具体步骤 1. 创建扫雷游戏棋盘 此处使用一个二维数组来模拟一个扫雷棋盘。数组大小需要根据游戏难度来确定,通常为 $10 * 10$、 $16 * 16$ 或 $30 * 30$ 等。 #define ROW 10 …

    C 2023年5月23日
    00
  • python 提取key 为中文的json 串方法

    提取key为中文的JSON串的方法,可以利用Python的json模块和正则表达式实现。具体步骤如下: 步骤一:读取JSON文件 首先,使用Python中的open函数来读取JSON文件,并使用json.load函数将文件内容加载为JSON对象。示例代码如下: import json with open(‘data.json’, ‘r’, encoding=…

    C 2023年5月23日
    00
  • C指针原理教程之编译原理-小型计算器实现

    为了实现一个小型计算器,我们需要了解C语言中指针的使用原理和编译原理。以下是详细的攻略: 编译原理基础 编译器是将高级语言程序转换为机器语言程序的软件。编译过程分为四个阶段:预处理、编译、汇编和链接。具体步骤如下: 预处理:处理以#开头的预编译指令,如#include和#define。 编译:将源代码翻译成汇编语言。 汇编:将汇编语言转换成机器代码。 链接:…

    C 2023年5月23日
    00
  • Mysql基础之常见函数

    Mysql基础之常见函数 在Mysql中,除了基本的SQL语句外,还有很多内置函数可以方便我们进行数据操作。下面列举了一些常见的Mysql函数: 字符串函数 CONCAT(str1, str2, …) 将多个字符串拼接在一起,返回一个新的字符串。其参数可以是任意个字符串,拼接的顺序是按照参数顺序来的。 示例: SELECT CONCAT(‘Hello’,…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部