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日

相关文章

  • C++学习之算术运算符使用详解

    C++学习之算术运算符使用详解 在C++语言中,算术运算符是一组用于执行算术运算(如加减乘除)的运算符。在本篇文章中,我们将进行深入的讨论和示范 C++ 中常用的算术运算符。本文主要包括以下内容: 算术运算符概述 算术运算符优先级 算术运算符使用示例 算术运算符概述 C++ 中的算术运算符如下表所示: 运算符 描述 + 加法 – 减法 * 乘法 / 除法 %…

    C 2023年5月23日
    00
  • 结合Mybatis聊聊对SQL注入的见解

    结合MyBatis聊聊对SQL注入的见解 什么是SQL注入? SQL注入(SQL Injection),也称为SQL攻击,是一种代码注入攻击。攻击者利用Web应用程序通过将恶意的SQL代码注入到输入字段中来攻击后台数据库服务器,从而获得敏感信息或者完全控制后台数据库。这些注入代码可能在数据请求中或者输入URL参数中出现。SQL注入是当前Web应用程序的最大安…

    C 2023年5月22日
    00
  • C++ 学习之旅二 说一说C++头文件

    C++ 学习之旅二 说一说C++头文件 在C++编程中,我们有时需要引入头文件来使用其中的函数和变量等内容。那么什么是头文件?如何使用头文件呢?本文将从以下两个方面来详细讲解C++头文件的使用: 头文件的作用 如何使用头文件 头文件的作用 头文件(Header File)是一种特殊的文件,一般用来存放程序中的函数声明、define值和类声明等等。头文件的作用…

    C 2023年5月23日
    00
  • c语言没有try catch的替代方案

    下面是详细讲解C语言没有try catch的替代方案的完整攻略。 1. C语言中的错误处理 在C语言中,可用来处理错误的方式有两种,分别是: 1.1 错误码 使用错误码(error code)的方式来表示函数的返回值,若返回值为0,则表示执行成功,否则返回的是对应的错误码。调用函数时,需要根据返回值进行错误处理。比如,在读取文件时,如果读取成功,返回0;否则…

    C 2023年5月23日
    00
  • C语言零基础彻底掌握预处理下篇

    让我来为您详细讲解一下“C语言零基础彻底掌握预处理下篇”的完整攻略。 一、预处理概述 在了解C语言预处理下篇之前,我们先来了解一下预处理的概念和作用。 预处理器是C语言的编译器的组成部分,可以看成是在编译正式开始之前对源程序的预先处理。它会将源程序中以“#”开头的预处理指令(例如#include、#define、#ifdef等)进行处理,生成新的源程序,并将…

    C 2023年5月23日
    00
  • c语言全盘搜索指定文件的实例代码

    C语言全盘搜索指定文件的实例代码攻略 确定需求 在代码编写之前,我们需要明确需要完成的功能和要求。此次编写的代码需要能够进行全盘搜索指定文件,并输出文件的路径信息。 确定实现方式 具体实现方式可以使用递归算法来实现。步骤如下: 在指定的目录下,搜索该文件或文件夹; 若搜到的是文件夹,则递归执行搜索该文件或文件夹; 若搜到的是文件,则输出输出文件路径信息。 确…

    C 2023年5月24日
    00
  • Linux网络编程之UDP Socket程序示例

    下面是关于使用UDP Socket进行Linux网络编程的攻略及示例. UDP Socket编程简介 UDP全称User Datagram Protocol,是一种无连接的,不可靠的面向数据报的传输协议,采用UDP传输需要自行保证数据的可靠性和完整性。因为UDP通信无连接,所以它发送的数据报文既不需要建立连接,也不需要断开连接,数据报文也不需要发送端和接收端…

    C 2023年5月30日
    00
  • c++ For循环执行顺序流程图解

    下面是“c++ For循环执行顺序流程图解”的详细攻略。 什么是 For 循环? For循环是 C++ 中最常用的迭代结构之一。它可以用于循环任何可迭代的数据类型,例如整数、浮点数、数组或容器等。 For循环通常涉及以下三个部分: 初始化 (Initialization) —— 对循环变量进行初始化,通常是将其设置为零或某个初始值。 布尔表达式 (Boole…

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