C++利用链表如何实现图书信息管理系统
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关C++利用链表如何实现图书信息管理系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C++利用链表实现一个简单的图书信息管
千家信息网最后更新 2025年01月20日C++利用链表如何实现图书信息管理系统
这篇文章将为大家详细讲解有关C++利用链表如何实现图书信息管理系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
C++利用链表实现一个简单的图书信息管理系统,具体内容如下
(1)图书信息包括ISBN号、书名、作者名、价格和数量等;
(2)系统的主要功能包括:图书信息的创建、输出图书信息、查询图书信息、增加图书信息、删除图书信息。
#include#include #include //创建结构体及其成员typedef struct Node { int num;//编号 char name[20];//书名 char author[20];//作者 int isexsit;//数量 float price;//价格 struct Node *next;//指针域} S;//结构体定义为S//各函数定义void choose();void menu(); //菜单函数S *create();//创建链表函数void print(S *);//输出链表函数void pop_sort(S *);//排序void insert(S *);//插入节点函数void del(S *);//删除节点函数void search2(S *);//书名查找节点函数void search3(S *);//作者查找节点函数void search4(S *);//编号查找void mod(S *);//修改图书信息//主函数int main() { choose();}void choose() { S *head; int n, a = 1;//n用来控制选择操作类型,a控制循环,以-1终止 while (a > 0) { menu();//显示菜单 printf("选择你想使用的功能:"); scanf("%d", &n);//选择操作 switch (n)//各操作数字对应菜单数字,通过n确定操作类型 { case 1://创建 head = create(); break; case 2://输出 printf("图书信息为(按价格排序后)\n"); pop_sort(head); printf("编号\t书名\t作者\t数量\t价格\n"); print(head); break; case 3://插入 insert(head); printf("插入后\n"); printf("编号\t书名\t作者\t数量\t价格\n"); print(head); break; case 4://删除 del(head); printf("删除后\n"); printf("编号\t书名\t作者\t数量\t价格\n"); print(head); break; case 5://书名查找 search2(head); break; case 6://作者查找 search3(head); break; case 7://编号查找 search4(head); break; case 8://修改 mod(head); pop_sort(head); printf("图书信息为\n"); printf("编号\t书名\t作者\t数量\t价格\n"); print(head); break; default: a = -1;//跳出循环条件 break; } }}//菜单模块直接显示void menu() { printf("\n\n"); printf("\t\t 欢迎使用图书管理系统\n"); printf("\t\t|----------SCORE-----------|\n"); printf("\t\t|\t1.创建图书 |\n"); printf("\t\t|\t2.展示图书信息 |\n"); printf("\t\t|\t3.添加图书信息 |\n"); printf("\t\t|\t4.删除图书 |\n"); printf("\t\t|\t5.按图书名搜索 |\n"); printf("\t\t|\t6.按作者名搜索 |\n"); printf("\t\t|\t7.按图书编号搜索 |\n"); printf("\t\t|\t8.修改图书信息 |\n"); printf("\t\t|\t9.退出程序 |\n"); printf("\t\t|--------------------------|\n"); printf("\t\t\tchoice(1-9):\n");}//创建链表模块S *create() { S *head, *p, *q;//定义指针 int i; head = (S *) malloc(sizeof(S));//头节点开辟空间 head->next = NULL;//置空头节点的指针域 q = head;//q指针记录头节点的地址 p = head->next;//p指针记录头节点的指针域的地址 printf("请输入图书编号,图书名,作者,图书数量,价格,最后输入0结束\n"); int num; scanf("%d", &num); while (num != 0)//输入书籍编号输入为零停止循环 { p = (S *) malloc(sizeof(S));//p指针开辟空间 //输入各成员 p->num = num; scanf("%s %s %d %f", p->name, p->author, &p->isexsit, &p->price); p->next = NULL;//置空p节点的指针域 q->next = p;//p,q节点连接 q = p;//q指针后移 printf("请输入图书编号,图书名,作者,图书数量,价格,最后输入0结束\n"); scanf("%d", &num); } return head;//返回链表的起始地址}//插入节点模块(可多个插入)void insert(S *head) { int i, num, flag = 1;//flag实现判断指针是否到达最后一个节点 S *p, *q, *r; //定义指针便于插入操作 printf("请输入一本图书的信息:\n"); printf("请输入图书的编号,输入0结束\n"); scanf("%d", &num); while (num != 0)//输入编号不为零时循环,以零终止,可实现多个插入 { r = (S *) malloc(sizeof(S));//为r开辟空间 r->next = NULL;//置空r的指针域 r->num = num; printf("请输入图书名,作者,图书数量,图书价格\n"); scanf("%s %s %d %f", r->name, r->author, &r->isexsit, &r->price); q = head;//q指针记录头节点的地址 p = head->next;//p指针记录头节点的指针域的地址 while (q->next != NULL && p->price < r->price)//循环条件:当q->next不为空,以及按价格排序插入 { p = p->next;//p指针后移 q = q->next;//q指针后移 if (q->next == NULL)//这个判断防止q->next为空时,在执行循环是出现野指针使程序出错 { p = NULL;//防止出现野指针p q->next = r;//连接节点 r->next = NULL;//置空r指针域 flag = 0;//到达最后一个节点更改flag break; } } if (flag)//判断是否到达最后一个节点,为真执行该操作 { r->next = p; q->next = r; //实现将r节点插入链表 } printf("请输入图书编号,输入0结束\n"); scanf("%d", &num); }}//删除节点模块void del(S *head) { S *p, *q;//定义指针 int b;//用于输入编号查找删除 p = head;//p记录头节点的地址 q = head->next;//q记录头节点的指针域的地址 printf("请输入你想要删除的图书编号:"); //输入编号 scanf("%d", &b); while (q != NULL)//q不为空时执行循环 { if (q->num == b)//判断是否找到输入的编号 //为真时 { p->next = q->next;//断开q节点 free(q);//释放q节点neicun q = NULL; //置空q指针防止出现野指针 } else { //判断为假时 p = p->next;//p指针后移 q = q->next;//q指针后移 } } if (p == NULL)//当查找到最后一个节点还未查到要删除的编号时,输出输入错误 printf("输入错误\n");}//书名查找模块void search2(S *head) { S *p;//定义指针 char name1[20];//定义name1用于输入查找书名 printf("请输入你要搜素的书名:"); //输入查找书名 scanf("%s", name1); p = head->next; while (p != NULL) { if (strcmp(p->name, name1) == 0)//判断是否找到书籍 { //为真时,输出信息 printf("书籍信息\n"); printf("编号\t书名\t作者\t数量\t价格\n"); printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price); break; } else //为假时 p = p->next;//指针后移 } if (p == NULL)//查找到最后一个节点还未查到要的编号时,输出输入错误 printf("输入错误\n");}//作者查找模块void search3(S *head) { S *p;//定义指针 char name2[20];//定义name2用于输入查找书籍 printf("输入你想要查询的作者:"); //输入查找作者 scanf("%s", name2); p = head->next; while (p != NULL) { if (strcmp(p->author, name2) == 0)//判断是否找到书籍 { //为真时,输出信息 printf("书籍信息\n"); printf("编号\t书名\t作者\t数量\t价格\n"); printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price); break; } else //为假时 p = p->next;//指针后移 } if (p == NULL)//查找到最后一个节点还未查到要的编号时,输出输入错误 printf("输入错误\n");}//编号查找void search4(S *head) { S *p;//定义指针 int num1;//定义num1用于输入查找书籍 printf("请输入你要搜索的图书编号:"); //输入查找编号 scanf("%d", &num1); p = head->next; while (p != NULL) { if (p->num == num1)//判断是否找到书籍 { //为真时,输出信息 printf("书籍信息\n"); printf("编号\t书名\t作者\t数量\t价格\n"); printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price); break; } else //为假时 p = p->next;//指针后移 } if (p == NULL)//查找到最后一个节点还未查到要的编号时,输出ERROR INPUT printf("输入错误\n");}//修改信息模块void mod(S *head) { S *p;//定义指针 int num1, num2, isexsit1;//定义num1用于输入查找书籍修改信息,num2用于修改 char name1[20], author1[20]; float price1; printf("请输入你要修改的图书编号:"); //输入要修改的图书编号 scanf("%d", &num1); p = head->next; while (p != NULL) { if (p->num == num1)//判断是否找到书籍 { printf("请再次输入 图书编号,书名,作者,图书数量 ,价格\n"); //为真时,重输图书信息 scanf("%d %s %s %d %f", &num2, name1, author1, &isexsit1, &price1); p->num = num2; strcpy(p->name, name1); strcpy(p->author, author1); p->isexsit = isexsit1; p->price = price1; break; } else //为假时 p = p->next;//指针后移 } if (p == NULL)//查找到最后一个节点还未查到要的编号时,输出输入错误 printf("输入错误\n");}void pop_sort(S *head) //链表冒泡排序{ //排序中没有修改头节点指针值,只是修改指针内容head->next的值 S *pre, *p, *tail, *temp; tail = NULL; pre = head; while ((head->next->next) != tail)//(head->next)!=tail同样适用 ,多执行最后一个步比较 { p = head->next; pre = head; while (p->next != tail) { if ((p->price) > (p->next->price)) { pre->next = p->next; //交换节点方法 temp = p->next->next; p->next->next = p; p->next = temp; p = pre->next; //p回退一个节点 } p = p->next; //p再前进一个节点 pre = pre->next; } tail = p; }}//输出链表模块void print(S *head) { int i; S *p = head->next; while (p)//当p不为空的时候执行 { printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price); printf("\n"); p = p->next;//指针后移 }}
关于C++利用链表如何实现图书信息管理系统就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
输入
图书
指针
节点
信息
作者
书名
价格
数量
输出
书籍
后移
函数
错误
模块
地址
循环
系统
排序
管理系统
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
无锡江苏服务器云空间
福建工程学院计算机网络技术
长安的DNS服务器
阿里轻量云服务器 香港 新加坡
桌面程序用哪个数据库
2008数据库 无法启动
河北app软件开发费用是多少
数据库表创建在哪个阶段
家电电控软件开发区别知乎
内蒙古通信软件开发五星服务
贵阳市bim软件开发工程
大华存储服务器管理设置
石桥铺99年的软件开发公司
山东智慧社区软件开发公司
服务器防护是什么情况
加大舆情监测守好网络安全
如何修改电脑dns服务器地址
火线精英服务器
服务器启用不了网络发展
免费外文期刊数据库
阿里云服务器可以扩展存储么
吕梁网络安全演练
如何抓取服务器所有网页
相关网络安全技术发展现状
西安初创软件开发现状
深圳软件开发公司类似贝店
u点服务器 网络不通
阿里云虚机数据库不够
性能优良网络技术哪家强
众安网络安全保险条款