C语言图书借阅系统源码

C语言图书借阅系统是一个非常基础的实现管理图书的系统,通常包含图书的信息、借阅状态等要素。以下是完整的攻略:

1. 系统功能设计

1.1 系统界面设计

考虑到C语言的控制台界面较为基础,因此可以采用类似以下的控制台菜单交互方式:

欢迎使用图书借阅系统

1. 添加图书信息
2. 显示图书信息
3. 借阅图书
4. 归还图书
5. 统计图书信息
6. 退出

请选择操作:

1.2 功能实现

根据上述菜单设计应用程序的各项功能实现:

  1. 添加图书信息

用户输入图书信息,如书名、作者、出版社等,将信息存入文件或数据库。关于文件操作,可以使用C语言库函数进行操作。例如,使用fprintf函数将图书信息写入文件:

```c
FILE *fp;
char filename[20];
printf("请输入文件名:");
scanf("%s", filename);
fp = fopen(filename, "a");

fprintf(fp, "图书名称:%s,作者:%s,出版社:%s\n", book_name, author, publisher);

fclose(fp);
```

  1. 显示图书信息

将保存在文件或数据库中的图书信息读取出来,并在控制台上显示出来。使用fscanf函数读取文件中的内容,并使用printf函数在控制台上显示信息。

```c
FILE *fp;
char filename[20];
printf("请输入文件名:");
scanf("%s", filename);
fp = fopen(filename, "r");

while(fscanf(fp, "图书名称:%s,作者:%s,出版社:%s\n", book_name, author, publisher) != EOF) {
printf("图书名称:%s,作者:%s,出版社:%s\n", book_name, author, publisher);
}

fclose(fp);
```

  1. 借阅图书

从保存在文件或数据库中的图书信息中查询指定书名的图书信息,将借阅状态修改为“借阅中”。对于文件操作,可以先将所有数据读取到内存中,进行相应修改后再将修改后的数据写回文件中。例如:

```c
FILE *fp;
char filename[20];
char book_name[20];
Book books[100];
int i = 0;
int is_find = 0;

printf("请输入文件名:");
scanf("%s", filename);
printf("请输入图书名称:");
scanf("%s", book_name);

fp = fopen(filename, "r");
while(fscanf(fp, "图书名称:%s,作者:%s,出版社:%s,借阅状态:%d\n", books[i].book_name, books[i].author, books[i].publisher, &books[i].status) != EOF) {
if(strcmp(book_name, books[i].book_name) == 0) {
books[i].status = BORROWED;
is_find = 1;
break;
}
i++;
}
fclose(fp);

if(is_find) {
fp = fopen(filename, "w");
for(int j = 0; j <= i; j++) {
fprintf(fp, "图书名称:%s,作者:%s,出版社:%s,借阅状态:%d\n", books[j].book_name, books[j].author, books[j].publisher, books[j].status);
}
fclose(fp);

   printf("借阅成功!\n");

} else {
printf("未找到该书籍!\n");
}
```

  1. 归还图书

从文件或数据库中查询指定书名的图书信息,将借阅状态修改为“未借阅”。同样可以先将所有数据读取到内存中,进行相应修改后再将修改后的数据写回文件中。

  1. 统计图书信息

统计图书库存总数、已借出图书数和未借出图书数。可以先读取所有数据到内存中,再进行相应统计。例如:

```c
FILE *fp;
char filename[20];
Book books[100];
int i = 0;
int total = 0, borrowed = 0, available = 0;

printf("请输入文件名:");
scanf("%s", filename);

fp = fopen(filename, "r");
while(fscanf(fp, "图书名称:%s,作者:%s,出版社:%s,借阅状态:%d\n", books[i].book_name, books[i].author, books[i].publisher, &books[i].status) != EOF) {
total++;
if(books[i].status == BORROWED) {
borrowed++;
} else if(books[i].status == AVAILABLE) {
available++;
}
i++;
}
fclose(fp);

printf("共计图书%d本,其中已借出%d本,未借出%d本。\n", total, borrowed, available);
```

2. 示例说明

以下是两个示例,分别演示了添加图书信息和统计图书信息的操作:

2.1 示例一:添加图书信息

以下是一段示例代码,演示了添加图书信息的操作。图书信息将保存在文件中,文件名由用户输入。

#include <stdio.h>

int main() {
    char book_name[20];
    char author[20];
    char publisher[20];
    char filename[20];
    FILE *fp;

    printf("请输入文件名:");
    scanf("%s", filename);

    printf("请输入图书名称:");
    scanf("%s", book_name);
    printf("请输入作者:");
    scanf("%s", author);
    printf("请输入出版社:");
    scanf("%s", publisher);

    fp = fopen(filename, "a");

    fprintf(fp, "图书名称:%s,作者:%s,出版社:%s\n", book_name, author, publisher);

    fclose(fp);

    printf("添加成功!\n");

    return 0;
}

2.2 示例二:统计图书信息

以下是一段示例代码,演示了统计图书信息的操作。图书信息保存在文件中,文件名由用户输入。

#include <stdio.h>

typedef enum {
    AVAILABLE = 0,
    BORROWED = 1
} BookStatus;

typedef struct {
    char book_name[20];
    char author[20];
    char publisher[20];
    BookStatus status;
} Book;

int main() {
    char filename[20];
    Book books[100];
    int i = 0;
    int total = 0, borrowed = 0, available = 0;

    printf("请输入文件名:");
    scanf("%s", filename);

    FILE *fp = fopen(filename, "r");

    while(fscanf(fp, "图书名称:%s,作者:%s,出版社:%s,借阅状态:%d\n", books[i].book_name, books[i].author, books[i].publisher, &books[i].status) != EOF) {
        total++;
        if(books[i].status == BORROWED) {
            borrowed++;
        } else if(books[i].status == AVAILABLE) {
            available++;
        }

        i++;
    }

    printf("共计图书%d本,其中已借出%d本,未借出%d本。\n", total, borrowed, available);

    fclose(fp);

    return 0;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言图书借阅系统源码 - Python技术站

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

相关文章

  • iOS实现高效裁剪图片圆角算法教程

    iOS实现高效裁剪图片圆角算法教程 简介 在iOS 开发中,常常需要对图片进行裁剪,比如实现图片的圆角,圆形等效果。在实现这些效果时,我们通常会遇到性能问题和视觉效果不好的问题。因此,我们需要一种高效裁剪图片的算法。 本文主要介绍一种高效的裁剪图片算法,可以实现圆角、圆形裁剪等效果。 步骤 步骤1:创建CALayer 我们先创建一个 CALayer 对象,作…

    C 2023年5月23日
    00
  • C语言大作业之图书管理系统的实现详程

    C语言大作业之图书管理系统的实现详程 概述 本文将详细讲解如何使用C语言编写一个简单的图书管理系统。该系统包含管理员和用户两种角色,主要实现以下功能:- 管理员:图书的添加、删除与修改- 用户:图书的查询、借阅、归还 系统设计 本系统由以下几个模块组成: main.c:主程序,实现系统的入口功能。 user.c:用户模块,实现用户相关的功能,如图书查询、借阅…

    C 2023年5月22日
    00
  • Windows 环境下使用 Qt 连接 MySQL

    下面我将为您详细讲解“Windows 环境下使用 Qt 连接 MySQL”的完整攻略。 前置条件 在进行本教程之前,您需要确保您已经做好了以下几项准备: 您已经在 Windows 系统中安装了 Qt; 您已经在 Windows 系统中安装了 MySQL 数据库,并且已经创建了一个数据库。 如果您还没有完成上述准备,请先完成准备工作。 步骤一:安装 MySQL…

    C 2023年5月23日
    00
  • c#和Javascript操作同一json对象的实现代码

    下面我将详细讲解如何通过C#和JavaScript操作同一个JSON对象的实现代码攻略。 1.使用Newtonsoft.Json库 在C#中,我们可以通过使用 Newtonsoft.Json 库来轻松地序列化和反序列化 JSON 数据,包括将 JSON 数据转换为 .NET 中的对象,或者将 .NET 对象序列化为 JSON 格式。 在项目中添加 Newto…

    C 2023年5月23日
    00
  • C/C++ – 从代码到可执行程序的过程详解

    那我就详细讲解一下C/C++代码从源码到可执行程序的过程,包括编译、链接和生成可执行文件的流程。具体的攻略如下: 一、编译过程 1. 预处理器(Preprocessor) 编译指令 gcc -E main.c -o main.i 或 g++ -E main.cpp -o main.i 将源代码文件 main.c 或 main.cpp 放入预处理器,对含有 #…

    C 2023年5月23日
    00
  • 详解Ubuntu18.04配置VSCode+CMake的C++开发环境

    详解Ubuntu18.04配置VSCode+CMake的C++开发环境 本文将会介绍如何在Ubuntu 18.04配置VSCode和CMake的C++开发环境。以下是具体的步骤: 步骤1:安装必要的软件包 打开终端,使用以下命令来安装必要的软件包: sudo apt-get update sudo apt-get install build-essentia…

    C 2023年5月23日
    00
  • C++设计模式之原型模式

    下面我将详细讲解 C++ 设计模式之原型模式的完整攻略。 什么是原型模式? 原型模式是一种创建者模式,它通过复制现有对象来创建新对象,而不是直接实例化新对象。它通过在运行时动态生成对象副本的方式来创建新对象,避免了创建新对象的成本,并提高了性能。 原型模式的优缺点 优点: 在运行时生成新对象,避免了创建新对象的成本。 代码复杂度低,易于实现。 可以实现对象动…

    C 2023年5月22日
    00
  • C语言 详细讲解接续符和转义符的使用

    C语言 详细讲解接续符和转义符的使用 在C语言中,接续符(\\)和转义符(\)是常用的符号。本文将详细讲解其使用。 接续符的使用 接续符是用于让一行代码换行继续写的符号,可以避免一行代码过长而难以阅读。其语法为 \,使用方式如下: // 例1:用于字符串常量中换行 char str[] = "这是一个比较长的\n字符串"; // 例2:用…

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