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

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日

相关文章

  • 中国式家长特长有哪些 特长种类及品质一览

    中国式家长特长有哪些 1. 家长特长一览 中国式家长的特长主要包括以下领域: 学术特长:对学术成果有着强烈的追求,希望自己的孩子在学术上有所突出。 才艺特长:对于音乐、美术、舞蹈、书法等领域有一定的天赋或爱好,希望孩子能够在这方面有所发展。 运动特长:注重体育锻炼,希望孩子在体育运动领域能够有所表现。 社交特长:去关注孩子的人际关系及社交技巧。 实用特长: …

    C 2023年5月22日
    00
  • C语言实现空战游戏

    C语言实现空战游戏 简介 本文将介绍如何用C语言实现一个简单的空战游戏。通过本文,你将会学会如何使用C语言开发游戏,包括游戏物体的移动、碰撞检测、游戏关卡的设计等方面。 游戏框架 游戏框架指的是游戏的基本结构,由游戏引擎和游戏逻辑两部分构成。 游戏引擎用于处理游戏中的渲染、音效、输入等操作,我们可以使用一些现成的游戏引擎,例如SDL、Allegro等。这里我…

    C 2023年5月24日
    00
  • C语言实现的猴子偷桃之类算法

    C语言实现的猴子偷桃之类算法 算法思路 猴子偷桃是一个经典的算法问题,其思路如下: 有一堆桃子,猴子第一天吃掉一半,发现还不过瘾,就又吃了一个;第二天又吃掉剩下的一半,发现还不过瘾,又吃了一个;以后每天都这样吃,直到最后只剩一个桃子为止。求原来有多少桃子。 为了方便解题,我们可以反向思考,即从最后一天向前推断。假设在第N天时只剩下一个桃子,那么在第N-1天时…

    C 2023年5月22日
    00
  • 基于C语言实现学生管理系统

    “基于C语言实现学生管理系统”攻略 1. 需求分析 在开发学生管理系统前,需要对需求进行分析,基本功能包括添加学生信息、查询学生信息、删除学生信息、修改学生信息。在此基础上,还可以增加更多功能,如按成绩排序、导出学生信息等。 2. 数据结构设计 学生信息需要被存储,通常采用结构体的方式来组织数据。结构体可以定义多个数据类型,方便程序处理。 以下为示例代码: …

    C 2023年5月23日
    00
  • 希望所有计算机学生能看到这篇c语言教程

    大部分程序员走入编程世界第一个学习的语言就是C语言。 作为一门古老的编程语言,c语言拥有48年的发展历程。 为什么要学习 C语言? C语言是学习计算机程序设计语言的入门语言。最全面的编程面试网站 C语言是一门偏底层的语言,学好它,可以让你更好的了解计算机。 学会了C语言,你就能学习现在任何的高级编程语言。因为所有的高级语言都是以C语言为基础的。 怎么学习c语…

    C 2023年4月30日
    00
  • C/C++ 原生API实现线程池的方法

    C/C++原生API实现线程池,可以通过以下步骤来实现: 第一步:定义线程池结构体 线程池结构体的定义通常包含以下几个成员: 线程池中线程的数量:通过这个成员可以控制线程池中线程的数量 任务队列:用来存储要执行的任务 线程池是否正在运行:通过这个成员可以控制是否继续执行任务 定义如下: typedef struct threadpool { int thre…

    C 2023年5月22日
    00
  • C#使用LitJson解析JSON的示例代码

    首先我们需要了解什么是JSON和LitJson,JSON是一种轻量级的数据交换格式,而LitJson则是一款C#的JSON序列化和反序列化库。 接下来,我们将用LitJson来解析JSON数据。以下是示例代码: 引用LitJson 在项目中引入LitJson.dll并添加LitJson命名空间 using LitJson; 创建一个类来接收JSON数据 在此…

    C 2023年5月23日
    00
  • 华硕x550c笔记本电脑很卡怎么拆机清灰?

    针对“华硕x550c笔记本电脑很卡怎么拆机清灰?”这个问题,我提供以下攻略: 1. 准备材料 在拆机清灰之前,我们需要准备以下工具和材料: 气罐喷雾器、无尘布 螺丝刀 清灰软刷或者毛刷 硅脂(可选) 2. 拆机 首先,将电脑关闭,并断开电源线和所有外设。 将电脑背面的电池拆掉。如果是固态硬盘版本,需要拆下固态硬盘。 用螺丝刀卸下电脑底部的螺丝。不同型号的笔记…

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