当前位置: 首页 > news >正文

【C语言课程设计】图书管理系统

  1. 引言

图书管理系统是一个重要的信息管理系统,对于图书馆和书店等机构来说,它能够方便地管理图书的录入、显示、查询、修改和删除等操作。本实验基于C语言开发了一个简单的图书管理系统,通过账户名和密码进行系统访问和权限控制,并实现了上述功能。在本实验报告中,我们将详细介绍该系统的背景和需求分析、系统设计、系统实现以及实验结果与分析。

  1. 背景和需求分析

在现代社会的图书馆和书店中,图书的管理是一项重要的工作。传统的图书管理方式往往需要耗费大量人力和时间,且容易出现错误。因此,开发一个图书管理系统来自动化和简化这一过程具有重要意义。

  • 需求分析如下:

录入图书:系统应该允许用户输入图书的相关信息,包括书名、作者、出版社等,并将这些信息保存到图书数据库中。
显示图书:系统应该能够将图书馆中所有图书的信息进行显示,以方便用户查看。
查询图书:系统应该支持用户通过书名或作者进行图书查询,并将查询结果返回给用户。
修改图书:系统应该允许用户选择要修改的图书,并输入新的图书信息进行修改。
删除图书:系统应该支持用户选择要删除的图书,并将其从图书馆中删除。

  1. 系统实现
  • 录入图书功能的实现代码如下:
void WriteToFile()
{FILE *fp = NULL;book stu;char flag = 'y';fp = fopen("book1.dat", "ab+");//打开文件if (fp == NULL){printf("文件打开失败!\n");exit(1);//1表示在有错的方式退出程序}while ((flag == 'y' || flag == 'Y')){system("cls");Menu1();printf("请输入图书id:");scanf("%s", stu.id);printf("请输入书名:");scanf("%s", stu.name);printf("请输入书籍作者:");scanf("%s", &stu.author);printf("请输入出版社:");scanf("%s", &stu.publish);printf("请输入价格:");scanf("%lf", &stu.price);fwrite(&stu, LEN, 1, fp);fflush(stdin);printf("继续输入吗?继续请输入y或Y:");getchar();scanf("%c", &flag);}fclose(fp);//关闭文件return;
}//图书添加的函数
  • 显示图书功能的实现代码如下:
void ReadFromFile()
{system("cls");Menu1();FILE *fp = NULL;book stu;fp = fopen("book1.dat", "rb");if (fp == NULL){printf("文件打开失败");exit(1);}printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("         id\t\t书名\t\t作者\n");fseek(fp, 0, SEEK_SET);while (!feof(fp)){if (fread(&stu, LEN, 1, fp)){printf("%10s\t%8s\t\t%5s\n", stu.id, stu.name, stu.author);}}printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");system("pause");system("cls");fclose(fp);return;
}
  • 查询图书功能的实现代码如下:
void QueryFile()
{system("cls");Menu1();book stu;char x[8];int flag = 0;FILE *fp;printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t请输入图书id:");scanf("%s", x);printf("  ID  书名    作者     出版社     价格\n");fp = fopen("book1.dat", "rb");if (fp == NULL){printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("错误\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");return;}fseek(fp, 0, SEEK_SET);while (fread(&stu, LEN, 1, fp)){if (strcmp(x, stu.id) == 0){printf("%3s  %5s  %5s    %10s %5.2lf\n", stu.id, stu.name, stu.author, stu.publish, stu.price);flag = 1;}if (flag = 0){printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("没有图书信息");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}}printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");fclose(fp);system("pause");system("cls");return;
}
  • 修改图书功能的实现代码如下:
void ModifyFile()
{system("cls");Menu1();book stu;FILE *fp;char x[8];printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("请输入图书id:");scanf("%s", x);fp = fopen("book1.dat", "rb+");if (fp == NULL){printf("文件打开失败");exit(1);}fseek(fp, 0, SEEK_SET);while (fread(&stu, LEN, 1, fp)){if (strcmp(x, stu.id) == 0){printf("请重新输入图书id:   ");scanf("%s", stu.id);printf("请重新输入书名:    ");scanf("%s", stu.name);printf("请重新输入书籍作者  : ");scanf("%s", &stu.author);printf("请重新输入图书出版社  : ");scanf("%s", &stu.publish);printf("请重新输入图书价格 :   ");scanf("%lf", &stu.price);printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");fflush(stdin);fseek(fp, 0-LEN, SEEK_CUR);fwrite(&stu, LEN, 1, fp);fclose(fp);}if (feof(fp)){printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("没有图书信息");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");}}system("pause");system("cls");return;
}
  • 删除图书功能的实现代码如下:
void DeletFile()
{system("cls");Menu1();book s;FILE* fp;char a[10];fp = fopen("book1.dat", "rb+");if (fp == NULL){printf("打开文件错误!!!\n");exit(1);}printf("\n请输入图书ID:");scanf("%s", a);printf("\n\t\t\t删除成功\n");fseek(fp, 0, SEEK_SET);FILE* fp1;fp1 = fopen("linshi.dat", "ab+");//读写新建一个临时文件while (fread(&s, LEN, 1, fp))//从原文件读一个结点{if (strcmp(a, s.id) != 0)//不是要删除的内容{fwrite(&s, LEN, 1, fp1);}}fclose(fp);fclose(fp1);remove("book1.dat");//删除原文件rename("linshi.dat", "book1.dat");//重命名为原文件fflush(stdin);system("pause");system("cls");return;
}
  1. 实验结果与分析:

经过代码的实现和编译后,我们进行了多次功能测试,确保系统正常运行,并可按照预期完成各项操作。用户可以登录系统,输入合法的账户名和密码后进入系统,然后可以根据自己的需要执行各种功能操作。

本次实验设计并实现了一个基于C语言的图书管理系统,它具备了录入图书、显示图书、查询图书、修改图书和删除图书等功能。通过使用面向对象的思想和结构体数组来存储图书信息,我们使系统结构清晰、操作简单。另外,通过账户名和密码的验证,我们保证了系统的安全性和可靠性。

在这里插入图片描述

然而,本系统还有一些可以改进的地方。例如,可以增加图书的分类和编号功能,以便更详细和便捷地组织和查找图书。另外,可以引入文件操作,将图书信息保存到文件中,以实现长久的数据存储和备份。此外,还可以增加借阅和归还图书的功能,完善整个图书管理流程。

综上所述,基于C语言的图书管理系统在方便了图书管理的同时,也为后续的功能扩展和改进提供了基础。通过进一步的优化和功能增加,该系统有望成为一个更加完善和实用的图书管理工具。

http://www.lryc.cn/news/97946.html

相关文章:

  • 在 ArcGIS Pro 中使用 H3 创建蜂窝六边形
  • 创建Electron项目
  • Spring Boot实践一
  • 简单认识NoSQL的Redis配置与优化
  • 开发一个RISC-V上的操作系统(二)—— 系统引导程序(Bootloader)
  • Git安装与学习
  • 【Docker】docker中容器之间通信方式
  • 算法-归并排序-JAVA
  • Flask 进阶
  • home-assistant整合sso
  • Ip-Limit: 轻量级注解式IP限流组件(二)
  • 【C++】开源:Redis数据库配置与使用
  • TCP/IP网络编程 第二十四章:制作HTTP服务器端
  • React 前端应用中快速实践 OpenTelemetry 云原生可观测性(SigNoz/K8S)
  • Linux 多线程并发Socket服务端的实现( 11 ) -【Linux通信架构系列 】
  • 2.7. Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?
  • 单例模式与构造器模式
  • SQL力扣练习(七)
  • C语言假期作业 DAY 05
  • php-golang-rpc使用roadrunner-server/goridge/v3/pkg/rpc和php的spiral/goridge3.2实践
  • API常用签名验证方法(PHP实现)
  • kotlin高阶函数
  • kotlin list集合树
  • 基于Autoencoder自编码的64QAM星座图整形调制解调通信系统性能matlab仿真
  • 【Spring】Spring 总览
  • 微软、OpenAI用上“数据永动机” 合成数据是晨曦还是暮光?
  • 简单认识Redis 数据库的高可用
  • 超级实用!,掌握这9个鲜为人知的CSS属性
  • 深圳国际新能源及智能网联汽车全产业博览会今年10月举办
  • 【具有非线性反馈的LTI系统识别】针对反馈非线性的LTI系统,提供非线性辨识方案(SimulinkMatlab代码实现)