C++如何使用链表实现图书管理系统
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要为大家展示了"C++如何使用链表实现图书管理系统",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++如何使用链表实现图书管理系统"这篇文章吧。
千家信息网最后更新 2025年11月15日C++如何使用链表实现图书管理系统
这篇文章主要为大家展示了"C++如何使用链表实现图书管理系统",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++如何使用链表实现图书管理系统"这篇文章吧。
具体内容如下
一、程序实现功能
1.录入书籍:将书籍录入图书管理系统
2.浏览书籍:查看图书管理系统里的所有书籍
3.借阅书籍:书籍存在可以借阅,库存-1,书的库存不足则无法借阅
4.归还书籍:库存+1,如果该书不是图书馆里的书籍,则无法录入
5.删除书籍:以书名为基础从图书管理系统中删除该书籍
6.查找书籍:按书名查找书籍,显示书籍的基本信息
7.排序书籍:按价格将书籍排序(降序)
二、要求
使用函数、指针和链表编写。
三、程序功能图

四、具体函数

五、程序代码
#include#include #include struct bookinfo{ char name[20]; //书名 char author[10]; //作者 char date[20]; //出版日期 float price; //价格 int num; //数量}; struct Node{ struct bookinfo data; struct Node* next;}; /*全局链表*/struct Node* list = NULL; /*创建表头*/struct Node* createhead(){ /*动态内存申请*/ struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); headNode->next = NULL; return headNode;} /*创建节点*/struct Node* createNode(struct bookinfo data){ struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode;} void printList();void display_menu();void savebookfile();void insertbook();void readbookfile();void deletebook();struct Node* searchbook();void sortbook();void selectkey(); /*打印链表*/void printList(struct Node* headNode){ struct Node* Bmove = headNode->next; printf("书名\t作者\t出版日期\t价格\t库存\n"); while(Bmove != NULL) { printf("%s\t%s\t%s\t%.1f\t%d\n",Bmove->data.name,Bmove->data.author,Bmove->data.date,Bmove->data.price,Bmove->data.num); Bmove = Bmove->next; } } /*菜单登录界面*/void display_menu(){ char str[100]; FILE *fp; char *txt; fp = fopen("menu.txt","r"); txt = fgets(str,100,fp); while(txt != NULL) { printf("%s",str); txt = fgets(str,100,fp); } fclose(fp);} /*将信息存到文件中*/void savebookfile(const char* filename,struct Node* headNode){ FILE* fp = fopen(filename,"w"); struct Node* Bmove = headNode->next; while(Bmove != NULL) { fprintf(fp,"%s\t%s\t%s\t%.1f\t%d\n",Bmove->data.name,Bmove->data.author,Bmove->data.date,Bmove->data.price,Bmove->data.num); Bmove = Bmove->next; } fclose(fp);} /*录入书籍*/void insertbook(struct Node* headNode,struct bookinfo data){ struct Node* newNode = createNode(data); newNode->next = headNode->next; headNode->next = newNode; } /*读取文件*/void readbookfile(const char* filename, struct Node* headNode){ FILE* fp = fopen(filename,"r"); if(fp == NULL) { fp = fopen(filename,"w+"); } struct bookinfo tempinfo; while(fscanf(fp, "%s\t%s\t%s\t%.1f\t%d\n",tempinfo.name,&tempinfo.author,&tempinfo.date,&tempinfo.price,&tempinfo.num ) != EOF) { insertbook(list,tempinfo); } fclose(fp);} /*删除书籍*/void deletebook(struct Node* headNode,char *bookname){ struct Node* leftNode = headNode; struct Node* rightNode = headNode->next; while(rightNode != NULL && strcmp(rightNode->data.name,bookname)) { leftNode = rightNode; rightNode = leftNode->next; } if(leftNode == NULL) { return; } else { printf("删除书籍成功!\n"); leftNode->next = rightNode->next; free(rightNode); rightNode = NULL; }} /*查找书籍*/struct Node* searchbook(struct Node* headNode, char* bookname){ struct Node* rightNode = headNode->next; while (rightNode != NULL && strcmp(rightNode->data.name, bookname)) { rightNode = rightNode->next; } return rightNode;} /*排序书籍*/void sortbook(struct Node* headNode){ for(struct Node* i = headNode->next; i != NULL; i = i->next) { for(struct Node* j = headNode->next;j->next != NULL;j = j->next) { /*排序书籍(按价格降序)*/ if (j->data.price < j->next->data.price) { /*交换值*/ struct bookinfo tempdata = j->data; j->data = j->next->data; j->next->data = tempdata; } } } /*排序后查看效果*/ printList(headNode);} /*交互界面*/void selectkey(){ int userkey = 0; struct bookinfo tempbook; //生成一个临时的变量存储书籍信息 struct Node* searchname = NULL; //生成一个临时变量存储查找的书名 struct Node* borrowbook = NULL; //生成一个临时变量存储要借阅的书名 struct Node* returnbook = NULL; //生成一个临时变量存储要归还的书名 scanf("%d",&userkey); switch(userkey) { case 1: printf("[ 录入书籍 ]\n"); printf("输入书籍的信息(name,author,date,price,num):"); scanf("%s%s%s%f%d",tempbook.name,&tempbook.author,&tempbook.date,&tempbook.price,&tempbook.num); insertbook(list,tempbook); /*把书籍信息保存到booksinfo文本文件里*/ savebookfile("bookinfo.txt",list); break; case 2: printf("[ 浏览书籍 ]\n"); printList(list); break; case 3: printf("[ 借阅书籍 ]\n"); /*书籍存在可以借阅,库存-1,书的库存不足则无法借阅*/ printf("请输入要借阅的书名:"); scanf("%s",tempbook.name); borrowbook = searchbook(list,tempbook.name); if(borrowbook == NULL) { printf("不存在该书,无法借阅!\n"); } else { if(borrowbook->data.num > 0) { borrowbook->data.num--; printf("借阅成功!\n"); printList(list); } else { printf("当前书籍库存不足,借阅失败!\n"); } } break; case 4: printf("[ 归还书籍 ]\n"); //库存+1 printf("请输入要归还的书名:"); scanf("%s",tempbook.name); returnbook = searchbook(list,tempbook.name); if(returnbook == NULL) { printf("该书不是图书馆里的书籍!\n"); } else { returnbook->data.num++; printf("书籍归还成功!\n"); printList(list); } break; case 5: printf("[ 删除书籍 ]\n"); printf("请输入要删除的书名:"); scanf("%s",tempbook.name); deletebook(list,tempbook.name); /*按书名删除书籍*/ printList(list); break; case 6: printf("[ 查找书籍 ]\n"); printf("请输入要查询的书名:"); scanf("%s",tempbook.name); searchname = searchbook(list,tempbook.name); if(searchname == NULL) { printf("不存在该书,请加购录入!\n"); } else { /*输出该书的信息*/ printf("书名\t作者\t出版日期\t价格\t库存\n"); printf("%s\t%s\t%s\t%.1f\t%d\n",searchname->data.name,searchname->data.author,searchname->data.date,searchname->data.price,searchname->data.num); } break; case 7: printf("[ 排序书籍 ]\n"); /*按价格排序(降序)*/ sortbook(list); break; case 8: printf("[ 退出系统 ]\n"); printf("退出成功\n"); system("pause"); exit(0); /*关闭整个程序*/ break; default: printf("[ 错误 ]\n"); break; }} /*主界面*/int main(){ list = createhead(); readbookfile("bookinfo.txt",list); while(1) { display_menu(); selectkey(); system("pause"); system("cls"); } system("pause"); return 0;}
六、效果
1.录入书籍
2.浏览书籍
3.借阅书籍
存在该书时,借阅成功,库存-1:
不存在该书时,无法借阅:
4.归还书籍
当图书管理系统里本不存在该书,则归还失败:
5.查找书籍
不存在该书时,则查找失败:
6.排序书籍
再录入书籍:
排序(降序):
7.删除书籍
以上是"C++如何使用链表实现图书管理系统"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
书籍
借阅
书名
库存
图书
排序
系统
管理系统
管理
价格
信息
成功
输入
内容
变量
程序
存储
生成
C++
作者
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海致骋互联网科技
软件开发可以做到多少岁
未来网络技术专业排名
河南网络安全违法案例
做好网络安全工作政策依据
华梦网络技术有限公司
服务器硬件配置 达梦
长安保安新服务器安全包
软件开发有哪几个过程
电车计划软件开发
宁夏云海网络技术公司
saperp数据库使用方法
浪潮服务器怎么关闭开机启动
查服务器的快捷键
app的开发属于软件开发吗
网络安全知识小插图
keypass数据库
软件开发技术定级
派出所网络安全周工作小结
佳伟互联网科技有限公司
青海公安网络安全
软件开发项目管理图表
手机指纹机数据库连接失败
数据库系统概论dba作用
福建佲拓网络技术有限公司
萍乡香港服务器价格多少
菲律宾跑分软件开发
底层的安全软件开发
东莞市旭特网络技术有限公司
云冈区网络安全创新服务