-
2021-05-21 05:10:13
图书管理系统C语言程序设计实验分析报告
C语言程序设计实验报告
系别
专业
班级
姓名
学号
时间
实验题目 图书信息管理系统
一、实验目的
(1)熟练掌握C语言的相关操作。
(2)综合应用C语言的知识,独立完成一个完整的系统,提高编程能力,体会软件程序的开发过程。
二、实验内容
(1)运用数组、循环、文件等编辑一个图书管理系统,其中具有输入、修改、删除、添加、查询、排序、统计、保存、读取模块。
(2)执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直到编译成功为止。
(3)执行运行操作,逐一对每个模块进行调试,直到全部程序运行成功为止。
(4)请老师检查,向老师演练此程序,并能回答老师提出的相关问题。
三、 需求分析
(1)该图书信息管理系统,使之能够完成图书信息的输入、打印、修改、删除、添加、查询、排序、统计、保存、读取、退出。
每个模块的功能如下:
1、输入模块能够按照图书号的先后顺序完成图书号、书名、出版社、出版日期、作者、所在书库、价格。
2、打印模块能输出刚刚输入的信息。
3、修改模块中输入要修改相应的图书号后,选择需要须改的项目就能完成修改操作。
4、删除模块中输入相应的图书号后可完成删除操作。
5、添加模块能完成添加新书的操作。
6、查询模块能够按图书名称查询该书的全部信息。
7、排序模块能按照图书的价格进行排行。
8、统计模块能根据输入的图书名统计该书的种数。
9、保存模块能够将所有图书的信息保存。
10、读取模块能读取已保存的图书信息并显示。
11、退出模块可直接退出此程序,结束操作。
(2)创建该图书信息管理系统目的就是能够对图书信息进行输入、打印、修改、删除、添加、查询、排序、统计、保存、读取、退出等功能。
(3)该图书信息管理系统是在VC中文简体环境下运行。
该系统要测试的数据如下:
输入模块:
第1种图书
图书号--图书名称--出版社--出版日期(年-月-日)--作者--所在书库--价格
01 履历表 人文 2008-8-7 几米 文艺 23
第2种图书
图书号--图书名称--出版社--出版日期(年-月-日)--作者--所在书库--价格
02 沙漏 湖南 2007-6-5 饶雪漫 文艺 22
第3种图书
图书号--图书名称--出版社--出版日期(年-月-日)--作者--所在书库--价格
03 世界是平的 科技 2003-11-2 托马斯 经济 56
第4种图书
图书号--图书名称--出版社--出版日期(年-月-日)--作者--所在书库--价格
04 天使与魔鬼 人文 2007-9-8 丹布朗 文艺 29
第5种图书
图书号--图书名称--出版社--出版日期(年-月-日)--作者--所在书库--价格
05 向左走向右走 人文 2005-6-23 几米 文艺 26
修改模块:(修改《天使与魔鬼》的价格)
(输入)04(修改图书号)
(输入)6(修改价格的选项)
(输入)(修改后的分数)
插入模块:(插入06《傲慢与偏见》))
(输入图书号)06
(输入书名)傲慢与偏见
(输入出版社)人文
(输入出版日期)2006-5-21
(输入作者)简奥斯丁
(输入所在书库)文艺
(输入价格)24
查询模块:(查询《沙漏》的基本信息)
沙漏(输入书名即可查询)
删除模块:(删除《世界是平的》)
03(输入图书号即可删除)
排序模块:(输入排序模块的执行键即可完成)
输出模块:(输入输出模块的执行键即可完成)
退出模块:(输入)0
四、概要设计
(1)、主函数结构图
主函数
主函数
输入模块
打印模块
修改模块
删除模块
添加模块
查询模块
排序模块
统计模块
保存模块
读取模块
退出系统
2)、模块功能详细说明
A、输入模块: 它可以通过循环完成对全部图书基本信息(包括: 图书号、书名、出版社、出版日期、作者、所在书库、价格)的一次性录入,其中书名
更多相关内容 -
图书管理系统 C语言
2018-01-26 10:38:37图书管理 C语言 TCP/IP SQLITE -
图书管理系统c语言版
2020-10-20 23:55:55请设计一个图书管理系统,基本功能要求如下: 1、图书信息包括:书名、出版日期、入库日期等; 2、图书信息录入功能——输入; 3、图书信息浏览(查询)功能——输出; 按照入库日期查询;按照书名查询; 4、图书... -
图书管理系统C语言实现源代码.pdf
2019-09-28 14:15:34图书管理系统源代码,C语言实现图书管理系统源代码,进行图书管理系统的构建与实现的设计,采用自顶向下,逐层细化,最终设计出详细的功能,从而实现整个系统。 -
图书管理系统C语言版-操作系统版.rar
2021-06-20 09:31:58在压缩包下存放的是图书管理系统课设报告以及在 centos 7 操作系统下开发的基于 C 语言开发的图书管理系统,开发环境为 centos 7 下的 gcc 编译器,本代码复制粘贴到该编译器下后,配置好必要的环境之后,便可以正常... -
c语言图书管理系统(包含完整代码和本地数据)
2020-07-12 17:18:39大一下学期工程实践课程的作业内容,系统完全由c语言编写,采用dev-c++开发,数据类型为结构体数组,用户信息和图书信息保存在本地文本文件中,主要功能有:1、以管理员或读者不同身份注册账户。2、登录、找回密码、... -
C语言图书管理系统课程设计
2021-01-20 06:35:16这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中竟然在QQ网络硬盘中找到了当初的teta版,发布于此,以作纪念。 C 源代码如下: #include #include #include struct book{ ... -
数据库系统 图书管理系统 C语言
2022-05-06 00:03:10浙江大学数据库系统的一个小lab数据库系统 图书管理系统 C语言
1. 实验环境配置
实验所需环境:Visual Studio 2022以及MySQL.
配置环境过程:
-
下载并安装MySQL。
-
下载并安装Navicat Premium使SQL可视化更方便。
-
将VS和MySQL进行连接,步骤如下:
-
打开项目属性
-
C/C++—常规—附加包含目录—添加MySQL include路径
(注意这里的路径是你安装mysql时候的路径)
-
连接器—常规—附加库目录—添加lib路径
-
链接器—输入—附加依赖项—添加libmysql.lib
-
后续在代码中添加
#include "mysql.h"
即可使用MySQL库。
-
2. mysql.h库函数解析
参考:(1条消息) C++ 连接数据库代码_Mr.禾的博客-CSDN博客_c++连接数据库代码
mysql_init
获得或初始化一个MYSQL结构。
mysql_real_connect
连接一个MySQL服务器。
mysql_query
执行指定为一个空结尾的字符串的SQL查询。
需要注意的是,返回0是执行成功,返回1是执行失败。
后续的每一个具体模块都是通过此函数在MySQL中执行语句,需要实现的就是创建MySQL语句字符串即可,需要注意字符串结尾不是
;
而是\0
。mysql_store_result
检索一个完整的结果集合给客户。
需要注意的是,本函数可能返回空值,因此在判断select是否有返回值时,需要判断返回的字符串是否为nullptr。
mysql_query(&mysql, "set names gbk")
防止中文查询结果乱码。
mysql_query(&mysql, "SET CHARACTER SET GBK")
保证插入成功。
在实际设计中,创建符合MYSQL语法的query语句(结尾为’\0’),然后使用mysql_query函数执行该语句。
3. 具体实现
3.1 数据库连接
bool ConnectDatabase() { mysql_init(&mysql); const char host[] = "localhost";//在本地创建的数据库 const char table[] = "library";//数据库的名称 const char user[] = "root";//设置的登录用户名 const char psw[] = "111111";//设置的登录密码 const int port = 3306;//端口 //使用库函数mysql_real_connect进行数据库连接 if (!(mysql_real_connect(&mysql, host, user, psw, table, port, NULL, 0))) { printf("连接失败!!\n"); return false; } else { printf("成功连接~\n"); return true; } }
3.2 查询语句实现(以管理员登录为例)
SA存储在library数据库的SA表中,包含ID和pas等信息。
若能够成功的管理员登陆,即为在SA表中含有输入的ID和密码组合,那么成功登录。
bool login() { int choice; choice = 0; do { printf("请选择登录模式:1 普通用户 2 管理员 -1 退出\n"); scanf("%d", &choice); if (choice == 1) { return false; } else if (choice == 2) { char pass[30]; printf("请输入编号:"); scanf("%s", &user); printf("请输入密码:"); scanf("%s", &pass); //创建query语句 strcpy(query, "select * from sa where id = "); strcat(query, user); strcat(query, " and pas = '"); strcat(query, pass); strcat(query, "'"); mysql_query(&mysql, "set names gbk"); mysql_query(&mysql, query); char* str_field[32]; //定义一个字符串数组存储字段信息 res = mysql_store_result(&mysql); for (int i = 0; i < 4; i++) //在已知字段数量的情况下获取字段名 { str_field[i] = mysql_fetch_field(res)->name; //返回一个所有字段结构的数组。 } //打印获取的数据 column = mysql_fetch_row(res); //在已知字段数量情况下,获取并打印下一行 //如果是空值,即没有这个SA,可能是账号密码输错了 if (column==nullptr) { printf("请检查输入的账号密码或重新选择登录模式!!\n"); continue; } else { printf("登陆成功~\n"); return true; } } } while (choice != -1); }
3.3 插入/删除语句实现
void insertbook() { int num; printf("请输入你要插入的书的个数:"); scanf("%d", &num); char query[1000]; char values[100]; getchar(); int i; for (i = 0; i < num; i++) { gets_s(values); mysql_query(&mysql, "SET CHARACTER SET GBK"); strcpy(query, "INSERT INTO book values"); strcat(query, values); if (mysql_query(&mysql, query)) { printf("插入成功!\n"); } else { printf("第%d条数据插入失败,请检查。\n", i + 1); } } }
输入的信息文件类似:
(101,'摄影','绘画、摄影、电影','华中科技大学出版社',2021,'拉兹洛·莫霍利-纳吉',49.80,1,1) (102,'摄影','新视觉 : 从材料到建筑','重庆大学出版社',2020,'拉兹洛·莫霍利-纳吉',38.00,2,2) (103,'摄影','森山大道','北京美术摄影出版社',2017,'森山大道',98.00,2,2) (104,'摄影','电视摄像','上海交通大学出版社',2018,'滕方',56.00,1,1) (105,'摄影','拍出电影感','九州出版社',2021,'屠明非',180.00,1,1) (106,'摄影','摄影曝光','浙江摄影出版社',2020,'屠明非',48.00,1,0) (107,'摄影','风光的超越 : 摄影的审美探索','浙江摄影出版社',2020,'戴维·沃德',55.00,3,3) (108,'摄影','风光的内在 : 摄影师的洞察力与灵感','浙江摄影出版社',2017,'戴维·沃德',55.00,1,1) (109,'建筑','高层建筑结构设计','武汉大学出版社',2021,'白国良',58.00,2,1) (110,'建筑','江南传统建筑文化及其对当代建筑创作思维的启示','东南大学出版社',2020,' 陈鑫',78.00,2,2) (111,'建筑','意大利古建筑散','清华大学出版社',2021,'陈志华',68.00,2,1) (112,'建筑','觉筑生生 : 可持续建筑的人文之道','东南大学出版社',2021,'高云亭',68.00,4,1) (113,'建筑','民用建筑空气调节','中国建筑工业',2021,'公绪金',49.00,11,7) (114,'建筑','平城京奈良 : 古代的都市规划与营建','上海人民出版社',2021,'宫本长二郎',298.00,5,5) (115,'建筑','智能建筑节能技术研究','北京工业大学出版社',2020,'姜杰',52.00,3,0) (116,'建筑','点构与建筑','江苏凤凰美术出版社',2020,'姜妍',88.00,1,1) (117,'建筑','建筑构造','中国建筑工业出版社',2021,'姜勇',69.00,10,7) (118,'建筑','建筑工程拆除技术与组织','中国建筑工业出版社',2021,'李永福',48.00,2,0) (119,'建筑','陕北窑洞建筑及其装饰中的匠作彩画研究','中国原子能出版社',2018,'李玉龙',58.00,2,1) (120,'建筑','装配式建筑数字化管理与实践','中国建筑工业出版社',2021,'李政道',59.00,7,3)
此处也可以写成文件输入,加入文件读写头文件即可。但需要防止中文乱码,需要更改txt的编码模式,方式如下:
文件-另存问-编码模式选择ANSI
void insertbook() { printf("请输入你要导入的图书所在的文件名:"); char filename[30]; scanf("%s", &filename); FILE* fp; fp = fopen(filename, "r"); if (fp == NULL) { printf("打开文件错误!"); return; } char values[1000]; while (!feof(fp)) { fgets(values, 1000, fp); mysql_query(&mysql, "set names gbk"); mysql_query(&mysql, "SET CHARACTER SET GBK"); strcpy(query, "INSERT INTO book values"); strcat(query, values); if (!mysql_query(&mysql, query)) { printf("插入成功!\n"); } else { printf("插入失败,请检查。\n"); } } fclose(fp); }
删除与插入基本相同,在创建query字符串时更改即可,此处不多赘述。
3.4 书余量自动更新
借助数据库中的trigger
CREATE TRIGGER add_stock AFTER UPDATE ON borrow FOR EACH ROW BEGIN UPDATE book SET stock = stock + 1 WHERE bno = old.bno and old.return_date is null and new.return_date is not null; END
心得
差不多就是上面这样,其实写起来也挺简单的,不需要配很久环境其实,主要任务就是创建SQL语句。
(没写UI,如果需要的话可以自己加,我不是很会555)
-
-
图书管理系统 c语言 可直接运行
2022-06-08 19:34:36图书管理系统 c语言 可直接运行 -
C语言链表实现图书管理系统
2021-01-01 13:44:29之前参照网上的资料用链表实现了图书管理系统,包括简单的增删改查功能以及借书还书功能,我是VC6.0下写的一个控制台程序,格式参照的网上的。在动手编码之前,你需要理清自己的思路。首先,需要确定图书馆里系统中... -
图书管理系统C语言.rar
2022-01-04 12:20:56C语言制作,包含报告+代码 -
c语言图书管理系统c语言图书管理系统.docx
2022-06-30 00:18:46c语言图书管理系统c语言图书管理系统 -
c语言图书管理系统c语言图书管理系统.doc
2022-06-30 00:18:18c语言图书管理系统c语言图书管理系统 -
C语言课程设计——图书管理系统(源代码+详细注释).zip
2021-10-01 16:00:422、图书管理 ①图书添加 ②图书删除 ③图书查找 ④图书修改 3、借书管理 ①借书 ②还书 ③结出 三、普通用户界面 1、我的资料 2、修改资料 3、已借图书 4、图书查询 以上功能: 诚实有效!!!亲测有效... -
c语言图书管理系统源码
2018-06-03 23:18:34图书管理系统 。 -
图书管理系统(C语言课程设计报告+代码)
2019-03-01 11:20:12内容:主要利用c语言的文件操作能力设计开发一个小型的管理信息系统,至少具有如下功能:图书入库,按书名、出版社、价格、作者进行查询和分类统计。操作界面要符合用户的一般习惯,图形或文本界面都可以。 要求:... -
商业编程-源码-图书管理系统C语言.zip
2022-06-23 17:34:00商业编程-源码-图书管理系统C语言.zip -
图书管理系统c语言程序设计实验报告
2021-05-20 14:24:08二、实验内容(1)运用数组、循环、文件等编辑一个图书管理系统,其中具有输入、修改、删除、添加、查询、排序、统计、保存、读取模块。(2)执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直到...C语言程序设计实验报告系别专业班级姓名学号时间实验题目图书信息管理系统一、实验目的(1)熟练掌握C语言的相关操作。(2)综合应用C语言的知识,独立完成一个完整的系统,提高编程能力,体会软件程序的开发过程。二、实验内容(1)运用数组、循环、文件等编辑一个图书管理系统,其中具有输入、修改、删除、添加、查询、排序、统计、保存、读取模块。(2)执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直到编译成功为止。(3)执行运行操作,逐一对每个模块进行调试,直到全部程序运行成功为止。(4)请老师检查,向老师演练此程序,并能回答老师提出的相关问题。三、需求分析(1)该图书信息管理系统,使之能够完成图书信息的输入、打印、修改、删除、添加、查询、排序、统计、保存、读取、退出。每个模块的功能如下1、输入模块能够按照图书号的先后顺序完成图书号、书名、出版社、出版日期、作者、所在书库、价格。2、打印模块能输出刚刚输入的信息。3、修改模块中输入要修改相应的图书号后,选择需要须改的项目就能完成修改操作。4、删除模块中输入相应的图书号后可完成删除操作。5、添加模块能完成添加新书的操作。6、查询模块能够按图书名称查询该书的全部信息。7、排序模块能按照图书的价格进行排行。8、统计模块能根据输入的图书名统计该书的种数。9、保存模块能够将所有图书的信息保存。10、读取模块能读取已保存的图书信息并显示。11、退出模块可直接退出此程序,结束操作。(2)创建该图书信息管理系统目的就是能够对图书信息进行输入、打印、修改、删除、添加、查询、排序、统计、保存、读取、退出等功能。(3)该图书信息管理系统是在VC中文简体环境下运行。该系统要测试的数据如下输入模块第1种图书图书号图书名称出版社出版日期(年月日)作者所在书库价格01履历表人文200887几米文艺23第2种图书图书号图书名称出版社出版日期(年月日)作者所在书库价格02沙漏湖南200765饶雪漫文艺22第3种图书图书号图书名称出版社出版日期(年月日)作者所在书库价格03世界是平的科技2003112托马斯经济56第4种图书图书号图书名称出版社出版日期(年月日)作者所在书库价格04天使与魔鬼人文200798丹布朗文艺29第5种图书图书号图书名称出版社出版日期(年月日)作者所在书库价格05向左走向右走人文2005623几米文艺26修改模块(修改天使与魔鬼的价格)(输入)04(修改图书号)(输入)6(修改价格的选项)(输入)(修改后的分数)插入模块(插入06傲慢与偏见))(输入图书号)06(输入书名)傲慢与偏见(输入出版社)人文(输入出版日期)2006521(输入作者)简奥斯丁(输入所在书库)文艺(输入价格)24查询模块(查询沙漏的基本信息)沙漏(输入书名即可查询)删除模块(删除世界是平的)03(输入图书号即可删除)排序模块(输入排序模块的执行键即可完成)输出模块(输入输出模块的执行键即可完成)退出模块(输入)0四、概要设计(1)、主函数结构图主函数TI输入模块打印模块修改模块删除模块添加模块查询模块排序模块统计模块保存模块读取模块退出系统2)、模块功能详细说明A、输入模块它可以通过循环完成对全部图书基本信息包括图书号、书名、出版社、出版日期、作者、所在书库、价格的一次性录入,其中书名、出版社定义为10个字节的字符型,作者、所在书库定义为20个字节的字符型图书号和价格则定义为整型。B、打印模块输出所有的图书信息。C、修改模块在输入要修改图书的相应的序号后,系统便开始查找该图书号,如果存在该图书号,只要选择17选项可以分别完成对图书基本信息中图书名称、出版社、出版日期、作者、所在书库、价格的修改及退出。D、删除模块输入图书号即可完成删除该书信息的操作。E、添加模块输入一个图书的全部信息后,该程序会按照书号由小到大的顺序查找到相应的位置,并把输入该图书的全部信息插入到相关位置。F、查询模块此模块按书名进行查询,它也是通过指针和链表进行推移查找,如果找到则显示该图书的全部信息,否则,将输出没有查到该图书信息,以便给以提示G、排序模块该模块利用循环按图书价格由低到高进行排序并显示排序结果。H、统计模块该模块根据输入的图书名统计该图书的本数,若没有相应信息则显示有0本该书。I、保存模块该模块将已输入的图书信息保存。J、读取模块该模块将通过打开指定的文件读取已有的信息。H、退出模块可直接退出此程序,结束操作。五、详细设计及运行结果1函数之间的相互调用主函数调用输入函数调用打印函数调用修改函数调用删除函数调用添加函数调用排序函数调用查询函数调用统计函数调用保存函数调用读取函数结束结束主主调用输入函数调用打印函数调用修改函数调用删除函数调用添加函数调用排序函数调用查询函数调用统计函数调用保存函数调用读取函数结束结束结束结束结束结束结束结束结束结束结束结束结束结束结束主主调用输入函数调用打印函数调用修改函数调用删除函数调用添加函数调用排序函数调用查询函数调用统计函数调用保存函数调用读取函数结束结束结束结束结束结束结束结束结束主主调用输入函数调用打印函数调用修改函数调用删除函数调用添加函数调用排序函数调用查询函数调用统计函数调用保存函数调用读取函数结束结束结束结束结束结束结束结束(2)该图书信息管理系统的源代码。INCLUDE“STDIOH“INCLUDE“STRINGH“INCLUDE“STDLIBH“INCLUDE“CONIOH“DEFINEMAX10DEFINEN5/日期结构体类型/TYPEDEFSTRUCT{INTYEARINTMONTHINTDAY}DATE/图书结构体类型/TYPEDEFSTRUCT{INTNUM/图书编号/CHARNAME10/图书名称/CHARPRESS10/出版社/DATEPRO_TIME/出版日期/FLOATPRICE/价格/CHARAUTHOR20/作者/CHARADD20/所在书库/}BOOK/保存信息/VOIDSAVE_FILEBOOKBOOKS,INTSUM{FILEFPINTICHARFILENAME40//CLRSCRPRINTF“\NINPUTSAVEFILENAME“SCANF“S“,FILENAMEIFFPFOPENFILENAME,“W“NULL{PRINTF“\NSFILENOTOPENPRESSANYKEYEXITSYSTEM“GETCHEXIT0}FORI0IBOOKSJPRICEKJIFKI{TBOOKSIBOOKSIBOOKSKBOOKSKT}}OUTPUTBOOKS,//BIOSKEY0FLUSHALL}/统计信息/VOIDCOUNTBOOKBOOKS,INTSUM{INTI,T,J,FLAGCHARCOUNT_NAME10CHARCHOICEDO{SYSTEM“CLS“T0,J0PRINTF“\N请输入要统计的图书名称“SCANF“S“,COUNT_NAMEFORI0ISUMI{IFSTRCMPBOOKSINAME,COUNT_NAME0TELSEJ}PRINTF“该种图书共有D本“,TIFJSUM{PRINTF“\N该种图书不存在“//BIOSKEY0FLUSHALL}PRINTF“\N\N继续统计吗Y/N“FLUSHALLCHOICEGETCHARIFCHOICE'Y'||CHOICE'Y'{FLAG1PRINTF“\N继续\N“}ELSEFLAG0}WHILEFLAG1PRINTF“\N按任意键返回主菜单“GETCHAR//BIOSKEY0FLUSHALL}/图书信息管理主程序/VOIDMAIN{BOOKBOOKSMAXINTCHOICE,SUMDO{SYSTEM“CLS“PRINTF“\N\N\N图书管理系统\N\N“PRINTF“1输入图书信息\N\N“PRINTF“2打印图书信息\N\N“PRINTF“3修改图书信息\N\N“PRINTF“4删除图书信息\N\N“PRINTF“5添加图书信息\N\N“PRINTF“6查询图书信息\N\N“PRINTF“7图书排行信息\N\N“PRINTF“8统计图书信息\N\N“PRINTF“9保存图书信息\N\N“PRINTF“10读取图书信息\N\N“PRINTF“0退出系统\N\N“PRINTF“请选择010“SCANF“D“,SWITCHCHOICE{CASE1SUMINPUTBOOKSBREAKCASE2OUTPUTBOOKS,BREAKCASE3MODIFYBOOKS,SUMBREAKCASE4SUMDELBOOKS,SUMBREAKCASE5SUMAPPENDBOOKS,SUMBREAKCASE6INQUIREBOOKS,SUMBREAKCASE7SORTBOOKS,SUMBREAKCASE8COUNTBOOKS,SUMBREAKCASE9SAVE_FILEBOOKS,SUMBREAKCASE10WRITE_FILEBOOKS,BREAKCASE0BREAKDEFAULTBREAK}}WHILECHOICE0SAVE_FILEBOOKS,SUM}六、调试情况,设计技巧及体会此次课程设计让我对C语言有了新的认识,编程的过程是辛苦的,即使一个微小的错误对程序而言都将无法顺利执行。同时在编程的过程中需要不断的看书,弄明白一些知识。再则,在实习中,我深刻体会遇到困难要及时向老师寻求帮助,同时也明白学好C语言的重要性。C语言程序对我们来说比较难,在匆忙的学习中更是难上加难,但在老师的帮助下我终于把一直困扰我的错误改正,最后终于做好了自己的程序。
展开阅读全文
-
C语言图书管理系统C语言图书管理系统C语言图书管理系统C语言图书管理系统
2010-06-08 19:58:58C语言图书管理C语言C语言图书管理C语言图书管理C语言图书管理C语言图书管理图书管理C语言图书管理C语言图书管理 -
C语言课程设计个人图书管理系统
2019-11-04 21:31:43C语言课程设计,一个功能较为详尽的图书管理系统,可以实现图书的信息录入删除,能按照几种不同方式查询所需图书,并能完成借书还书操作,图书信息与借书人信息均保存在文本文档中(保存的文本文档需自己创立,命名... -
图书管理系统 C语言源代码文件
2022-06-03 09:06:35图书管理系统 C语言源代码文件 -
图书管理系统C语言(大学小组项目实践)
2022-06-15 22:53:13项目题目:图书管理系统 内容简介: 该系统作为图书管理系统,包含了多个功能模块,目的在于为图书信息的管 理提供方便,提高图书信息管理的效率。 该系统的功能模块具体包括:登录退出功能模块,图书信息的录入,修改... -
简易图书管理系统(C语言)
2018-03-18 11:10:45C语言写的图书管理系统,不足之处多多指教。该系统包含了,图书信息录入,查询,修改,导出等功能。 -
【课程设计】图书管理系统 C语言版---操作系统版
2021-06-22 19:34:51本篇文章主要是介绍在 Linux 系统下采用 C 语言开发的图书管理系统,开发的系统能够实现增、删、改、查、借阅和浏览图书信息,采用动态函数来实现图书信息的存储。 具体的内容可查看本文章,欢迎广大朋友们前来学习...本篇文章主要是介绍在 Linux 系统下采用 C 语言开发的图书管理系统,开发的系统能够实现增、删、改、查、借阅和浏览图书信息,采用动态函数来实现图书信息的存储。 具体的内容可查看本文章,欢迎广大朋友们前来学习和指教。如果有需要源代码的朋友们可点击博主的主页资源页面进行下载。
一、设计思路
本系统是利用 C 语言在操作系统环境下开发的图书管理系统,主要实现了图书信息管理的功能,通过此系统可以对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、删除、统计、修改、图书信息等,所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、出版社、出版日期、价格等,图书信息的录入要求和显示要求是一定的规范要求,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。
二、开发环境
(1)操作系统:Windows 10 专业版(没有要求)
(2)虚拟机版本:Vmware Workstation Pro14
(3)Linux 版本:Centos 7
(4)编译器:gcc 编译器三、系统流程图
(1)系统功能总体流程图
(2)借阅图书功能流程图
(3)归还图书功能流程图
四、数据库设计
1、数据存储结构
首先定义一个结构体变量,通过定义的结构体变量来保存图书的属性以及图书借出与归还的相关信息,也保证了后面各子函数的相互嵌套调用,并且降低了系统的开支。为了便于统计,将书的数量以及库存定义于同一个结构体中,定义的数据存储如下:
struct book { char number[m];//编号 char name[m];//书名 char writer[m];//作者 int count;//总数 int loan;//借出 int residue;//剩余 }book; struct book bk[MAX]; //图书结构体
2.动态函数声明
系统调用动态函数 open、read、write 以及库函数 snprintf、sscanf 的格式声明如下:
int open(const char *pathname,int flags); //pathname为打开的文件名称,flag为标志信息 ssize_t read(int fd,void *buf,size_t count);//fd为文件描述符,buf为写入字符串,count为字符串大小 ssize_t write(int fd,const void *buf,size_t count);//fd为文件描述符,buf为写入字符串,count为字符串大小 int snprintf(char *restrict buf,size_t n,const char * restrict format....); int sscanf(const char *str,const char *format.....);
通过 open 函数创建一个 txt 文本文件,然后将输入的有关图书的属性全部通过文件保存,输入图书的一个属性,通过 write 函数写入文件,对于整型数据,通过 snprintf 函数将其转变为字符串,并存入,读出则通过 sscanf 函数,将字符串转变为对应的数据。保存到文件中的数据在读取过程中,通过 read 来读取进入对应的结构体数组当中。
3.函数功能模块
(1)添加信息函数:调用add_book()函数,通过输入要录入的图书数量,再依次输入图书的属性,并且输入过程当中,通过write系统调用函数,边输入边存储数据进入文件,输入完成后,退出添加图书函数模块;
void add_book()//添加函数 { int i;//变量i int fd;//文件描述符 int number;//书的数量 fd=open("t.txt",O_RDWR|O_APPEND|O_CREAT);//打开文件t.txt,存在打开,不存在创建、可追加、读写数据进入文件 if(fd<0)//判断文件状态 { perror("文件打开失败!\n"); exit(-1); } printf("请输入添加的图书数量:"); scanf("%d",&number);//输入书的数量 for(i=0;i<number;i++)//输入number个书的数量 { printf("添加第%d本图书的信息:\n",i+1); printf("编号:"); scanf("%s",bk[i].number);//输入编号 write(fd,bk[i].number,sizeof(bk[i].number));//编号写入文件 printf("书名:"); scanf("%s",bk[i].name);//输入姓名 write(fd,bk[i].name,sizeof(bk[i].name));//姓名写入文件 printf("作者:"); scanf("%s",bk[i].writer);//输入作者 write(fd,bk[i].writer,sizeof(bk[i].writer));//作者写入文件 printf("数量:"); scanf("%d",&bk[i].count);//输入总数 snprintf(str,m,"%d ",bk[i].count);//整型转化为字符串 write(fd,str,sizeof(str));//字符串存入文件 book_count=bk[i].count; printf("借出(0):"); scanf("%d",&bk[i].loan);//初始化借出数 snprintf(str1,m,"%d ",bk[i].loan);//整型转化为字符串 write(fd,str1,sizeof(str1)); //字符串存入文件 printf("剩余(%d):",bk[i].count); scanf("%d",&bk[i].residue);//初始化剩余数 snprintf(str2,m,"%d\n",bk[i].residue);//整型转化为字符串 write(fd,str2,sizeof(str2)); //字符串存入文件 } book_number=number;//书总数赋值于全局变量 close(fd);//关闭文件 read_book();//读取文件 }
(2)查询信息函数:通过调用find_book()函数,根据你输入需要查询的图书信息,通过遍历文件中的数据,如果文件中存在该图书相关信息,则输出图书信息;反之,提示信息,图书不存在;
void find_book()//查询函数 { int i; int flag=0;//标记,不存在为0,存在为1 char name[m];//定义变量 printf("请输入查询的书名为:"); scanf("%s",name);//输入变量 for(i=0;i<book_number;i++)//遍历所有图书 { if(strcmp(bk[i].name,name)==0)//找到 { flag=1;//标记为1 //输出书的信息 printf("编号:%s\n",bk[i].number); printf("书名:%s\n",bk[i].name); printf("作者:%s\n",bk[i].writer); printf("总数:%d\n",bk[i].count); printf("借出:%d\n",bk[i].loan); printf("剩余:%d\n",bk[i].residue); } } if(flag==0)//未找到 { printf("没有找到%s图书信息\n",name); } }
(3)借阅信息函数:通过调用borrow_book()函数,当文件读取进入结构体数组后,通过输入你需要借出的书名,遍历结构体数组,如果存在,则提示借阅该书籍的本数,如果借出数大于书籍总数,则默认借出数为书籍总数;如果不存在,则提示书籍不存在;
void borrow_book()//借出函数 { int i,t; int num; int flag=0; char name[m]; printf("请输入借阅的书名:"); scanf("%s",name); for(i=0;i<book_number;i++) { if(strcmp(bk[i].name,name)==0)//比较图书 { flag=1; printf("已找到%s书籍,总数%d,已借出%d,剩余%d:\n",name,bk[i].count,bk[i].count-bk[i].residue,bk[i].residue);//提示相关书籍信息 printf("输入借阅%s的数量:",name); scanf("%d",&num);//输入借出数量 if(num>bk[i].count)//借出数大于书总数 { printf("最多可借出%d本书籍\n",bk[i].count); num=bk[i].count; //借出数赋值于书总数 } bk[i].residue=bk[i].count-num;//求剩余数 bk[i].loan=num;//借出数赋值 printf("%s成功借出\n",name); } } if(flag==0) { printf("没有任何%s图书信息\n"); } }
(4)归还信息函数:通过调用return_book()函数,输入你需要归还的书籍书名,如果书籍未借出,则无需归还,若书籍存在,则输入要归还的书的本数,最后提示归还成功;反之,归还失败;
void return_book()//归还函数 { int i; int flag=0; int total=0; int number=0;//定义归还书数量 char name[m]; printf("请输入归还的书名:"); scanf("%s",name); for(i=0;i<book_number;i++) { if(strcmp(bk[i].name,name)==0) { flag=1; printf("输入归还%s的数量:",name); scanf("%d",&number);//输入归还书数量 total=bk[i].residue+number;//更新剩余数 if(bk[i].loan==0)//没有借出 { printf("%s没有借出,无需归还\n"); break; } if(total<=bk[i].count)//有借出 { bk[i].loan=bk[i].loan-number;//更新借出数 bk[i].residue=number+bk[i].residue;//更新剩余数 printf("%s归还成功\n",name); break; } } } if(flag==0) { printf("没有任何%s图书信息\n"); } }
(5)删除信息函数:调用delete_book()函数,输入需要删除的书籍书名,遍历所有图书信息,存在则删除该图书所有信息;不存在则提示信息错误;
void delete_book()//删除图书 { int i,j; int flag=0;//定义标记 char name[m]; printf("输入删除书籍的书名:"); scanf("%s",name); for(i=0;i<book_number;i++) { if(strcmp(bk[i].name,name)==0) { flag=1; if(i==book_number)//删除的书在最后一个 book_number-=1;//书总数减1 else//在中间 { bk[i]=bk[book_number-1]; book_number-=1; } printf("成功删除%s书籍信息\n",name); } } if(flag==0) { printf("没有任何%s图书信息\n"); } }
(6)统计信息函数:调用statistic_book()函数,从文件中读取信息后,遍历所有图书,并且输出所有图书信息,当有书籍的输入、借阅以及归还时,更新图书状态信息,并且打印出所有图书相关信息;
void statistic_book()//统计函数 { int i; int flag=0; printf("编号\t书名\t作者\t总数\t借出\t剩余\n"); for(i=0;i<book_number;i++)//遍历所有图书 { flag=1; printf("%s\t",bk[i].number); printf("%s\t",bk[i].name); printf("%s\t",bk[i].writer); printf("%d\t",bk[i].count); printf("%d\t",bk[i].loan); printf("%d\n",bk[i].residue); } if(flag==0) { printf("没有任何图书信息\n"); } }
(7)读取文件函数:调用read_book()函数,将add_book()函数中输入文件的所有数据进行读出,并且将读出的信息存储进入结构体数组中,便于对图书进行相关操作;
void read_book()//读取文件 { int t; int fd;//文件描述符 //定义总数、借出数、剩余数变量 int num; int num1; int num2; book_number=0; //定义编号、书名、作者变量 char number[m]; char name[m]; char writer[m]; fd=open("t.txt",O_RDONLY);//打开文件 if(fd<0)//打开失败 { perror("文件打开失败!"); } else { while((t=read(fd,number,sizeof(number)))!=0&&t!=-1)//读取文件中的数据 { strcpy(bk[book_number].number,number);//文件中读取的数据付给结构体 read(fd,name,sizeof(name));//读取书名 strcpy(bk[book_number].name,name);//文件中读取的数据付给结构体 read(fd,writer,sizeof(writer));//读取作者 strcpy(bk[book_number].writer,writer);//文件中读取的数据付给结构体 read(fd,str,sizeof(str));//读取总数 sscanf(str,"%d",&num);//字符串转化为整数 bk[book_number].count=num;//赋值为结构体 read(fd,str1,sizeof(str1)); sscanf(str1,"%d",&num1);//字符串转化为整数 bk[book_number].loan=num1;//赋值为结构体 read(fd,str2,sizeof(str2));//读取借出数 sscanf(str2,"%d",&num2);//字符串转化为整数 bk[book_number].residue=num2;//赋值为结构体 book_number++; } } close(fd);//关闭文件 }
五、功能运行结果
1.功能选择页面
2.添加图书信息
3.查询图书信息
4.借阅图书信息
5.归还图书信息
6.删除图书信息
7.统计图书信息
8.文件读取信息
9.退出管理系统
非常感谢广大朋友们的查看,如果对本篇文章有任何问题或者有什么不足之处,还请广大朋友们的不吝赐教。如果有喜欢本篇文章的朋友们还请给博主一个一键三连吧。
-
图书管理系统C语言版
2013-06-14 16:17:56虽然是一个简单的系统,但确实花了不少时间,从最开始的三四十行,一步步完善,到现在的接近三百行,当然从中也学到了不少,获得了不少.每一个困难被克服后就是无尽的成就感.如果对这个感兴趣,可以到WIN-TC上运行试一下.... -
图书管理系统 C语言.zip
2021-05-05 15:04:26功能菜单展示如下: 1、图书信息管理 1.图书信息的录入 2.打印图书信息 3.删除图书信息 4.修改图书信息 5.返回上级菜单 2、借书信息管理 1.借书 2.还书 3.查看借阅情况 4.返回上级菜单 3、退出程序 -
图书管理系统C语言.pdf
2021-11-25 02:29:22图书管理系统C语言.pdf