C++如何使用链表实现图书管理系统
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要为大家展示了"C++如何使用链表实现图书管理系统",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++如何使用链表实现图书管理系统"这篇文章吧。
千家信息网最后更新 2025年01月31日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安全错误
数据库的锁怎样保障安全
阿里云服务器怎么设置安全组
网络安全有哪些检查
英语口语视频软件开发
智能家居 网络安全审计
软件开发广告视频网站
小米软件开发工程师工资
请检查服务器文档
微信好友申请服务器繁忙
网络技术员个人简介
校园服务器建设项目
数据库储存和处理技术
软件开发要用什么条件
签订网络安全协议
十二部委联合发布网络安全审查
微小软件开发
数据库优化技术分析
网络安全服务存在问题
一年级画画网络安全
钱海网络技术有限公司怎么样
女生软件开发和软件测试
幼儿园网络安全等级保护工作
PEW数据库
信都区网络安全专项培训班
网络安全之电信诈骗
网络安全学博士
plsql怎么新建数据库
计算机软件开发的英文简历
网络安全的机遇的论述
长沙亿软软件开发有限公司
网络安全监管机构图片