我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++利用链表如何实现图书信息管理系统

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++利用链表如何实现图书信息管理系统

这篇文章将为大家详细讲解有关C++利用链表如何实现图书信息管理系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

C++利用链表实现一个简单的图书信息管理系统,具体内容如下

(1)图书信息包括ISBN号、书名、作者名、价格和数量等;
(2)系统的主要功能包括:图书信息的创建、输出图书信息、查询图书信息、增加图书信息、删除图书信息。

#include <stdio.h>#include  <stdlib.h>#include <string.h>//创建结构体及其成员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++利用链表如何实现图书信息管理系统就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++利用链表如何实现图书信息管理系统

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++利用链表如何实现图书信息管理系统

这篇文章将为大家详细讲解有关C++利用链表如何实现图书信息管理系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C++利用链表实现一个简单的图书信息管理系统,具体内容如下(1)图书信息包括I
2023-06-25

C++如何使用链表实现图书管理系统

这篇文章主要为大家展示了“C++如何使用链表实现图书管理系统”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何使用链表实现图书管理系统”这篇文章吧。具体内容如下一、程序实现功能1.录入书籍
2023-06-29

如何使用C++实现图书信息管理系统

小编给大家分享一下如何使用C++实现图书信息管理系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下1.题目:类型有:编号:ISBN书名:name价格:price完成如下的功能:①录入:从键盘输入(或从文件读入)
2023-06-29

C语言中单链表如何实现图书管理系统

小编给大家分享一下C语言中单链表如何实现图书管理系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下单链表实现的图书管理系统相比于结构体实现的管理系统,
2023-06-29

C语言如何使用单链表实现学生信息管理系统

这篇文章主要介绍了C语言如何使用单链表实现学生信息管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。运行结果如图:1.运行界面2.录入学生信息3.按照总分进行排序代码如下
2023-06-25

C++如何实现图书管理系统

本文小编为大家详细介绍“C++如何实现图书管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现图书管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。功能:1.首先是注册,登录,找回密码和修改
2023-06-29

C#如何实现图书管理系统

本文小编为大家详细介绍“C#如何实现图书管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#如何实现图书管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、设计目的通过模拟图书管理系统,实现以下功能
2023-06-29

如何使用C++实现信息管理系统

小编给大家分享一下如何使用C++实现信息管理系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下有一个信息管理系统,要求检查每一个登录系统的用户(Use
2023-06-29

如何实现C++版图书管理系统

这篇文章主要介绍了如何实现C++版图书管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下使用介绍图书管理系统源码由两部分组成,第一部分book.h头文件,第二
2023-06-29

C语言如何实现图书管理系统

这篇文章将为大家详细讲解有关C语言如何实现图书管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。主要内容 开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版
2023-06-28

C++如何实现小型图书管理系统

这篇文章给大家分享的是有关C++如何实现小型图书管理系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下因为课程设计的原因,需要实现一个小型图书管理系统包含功能:问题描述:设计一个系统,对图书信息进行管
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录