iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++利用链表实现图书信息管理系统
  • 563
分享到

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

2024-04-02 19:04:59 563人浏览 安东尼
摘要

c++利用链表实现一个简单的图书信息管理系统,供大家参考,具体内容如下 (1)图书信息包括ISBN号、书名、作者名、价格和数量等; (2)系统的主要功能包括:图书信息的创建、输出图书

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 search1(S *);//书名查找节点函数
void search2(S *);//作者查找节点函数
void search3(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://书名查找
                search1(head);
                break;
            case 6://作者查找
                search2(head);
                break;
            case 7://编号查找
                search3(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 search1(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 search2(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 search3(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;//指针后移
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C++利用链表实现图书信息管理系统

本文链接: https://www.lsjlt.com/news/158026.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C++利用链表实现图书信息管理系统
    C++利用链表实现一个简单的图书信息管理系统,供大家参考,具体内容如下 (1)图书信息包括ISBN号、书名、作者名、价格和数量等; (2)系统的主要功能包括:图书信息的创建、输出图书...
    99+
    2024-04-02
  • C++利用链表如何实现图书信息管理系统
    这篇文章将为大家详细讲解有关C++利用链表如何实现图书信息管理系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C++利用链表实现一个简单的图书信息管理系统,具体内容如下(1)图书信息包括I...
    99+
    2023-06-25
  • C++实现图书信息管理系统
    本文实例为大家分享了C++实现图书信息管理系统的具体代码,供大家参考,具体内容如下 1.题目: 类型有:编号:ISBN书名:name价格:price 完成如下的功能: ①录入:从键盘...
    99+
    2024-04-02
  • C/C++实现图书信息管理系统
    本文实例为大家分享了c/c++实现图书信息管理系统的具体代码,供大家参考,具体内容如下 程序流程图 源代码 #include <stdio.h> #include ...
    99+
    2024-04-02
  • C++使用链表实现图书管理系统
    本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下 一、程序实现功能 1.录入书籍:将书籍录入图书管理系统 2.浏览书籍:查看图书管...
    99+
    2024-04-02
  • 如何使用C++实现图书信息管理系统
    小编给大家分享一下如何使用C++实现图书信息管理系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下1.题目:类型有:编号:ISBN书名:name价格:price完成如下的功能:①录入:从键盘输入(或从文件读入)...
    99+
    2023-06-29
  • C++如何使用链表实现图书管理系统
    这篇文章主要为大家展示了“C++如何使用链表实现图书管理系统”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何使用链表实现图书管理系统”这篇文章吧。具体内容如下一、程序实现功能录入书籍:将...
    99+
    2023-06-29
  • C语言单链表实现图书管理系统
    本文实例为大家分享了C语言单链表实现图书管理系统的具体代码,供大家参考,具体内容如下 单链表实现的图书管理系统相比于结构体实现的管理系统,可以随时开辟新的空间,可以增加书的信息 单链...
    99+
    2024-04-02
  • C语言链表实现简单图书管理系统
    本文实例为大家分享了C语言链表实现图书管理系统的具体代码,供大家参考,具体内容如下 实现功能: 用C语言制作图书管理系统,实现图书进行登记书籍,浏览书籍,借阅书籍,归还书籍,书籍排序...
    99+
    2024-04-02
  • C语言实现学生信息管理系统(链表)
    目录1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1).定义提示菜单2).增加学生记录3).输入学号接口·4).遍历表...
    99+
    2024-04-02
  • C语言中单链表如何实现图书管理系统
    小编给大家分享一下C语言中单链表如何实现图书管理系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下单链表实现的图书管理系统相比于结构体实现的管理系统,...
    99+
    2023-06-29
  • C++顺序表实现图书管理系统
    本文为大家分享了C++顺序表实现图书管理系统的具体代码,供大家参考,具体内容如下 图书信息表包括以下10项常用的基本操作:图书信息表的创建和输出、排序、修改、逆序存储、最贵图书的查找...
    99+
    2024-04-02
  • C语言使用单链表实现学生信息管理系统
    本文实例为大家分享了C语言使用单链表实现学生信息管理系统,供大家参考,具体内容如下 初学数据结构,记录一下学习过程。 运行结果如图: 1.运行界面 2.录入学生信息 3.按照总分...
    99+
    2024-04-02
  • C#实现图书管理系统
    本文为大家分享了C#实现图书管理系统课程设计,供大家参考,具体内容如下 一、设计目的 通过模拟图书管理系统,实现以下功能学生账号的注册学生对馆藏图书状况的查询学生借书,还书状态的查询...
    99+
    2024-04-02
  • C++实现信息管理系统
    本文实例为大家分享了C++实现信息管理系统的具体代码,供大家参考,具体内容如下 有一个信息管理系统,要求检查每一个登录系统的用户(User)的用户名和口令,系统检查合格以后方可登录系...
    99+
    2024-04-02
  • C++实现图书馆管理系统
    本文实例为大家分享了C++实现图书馆管理系统的具体代码,供大家参考,具体内容如下 一、实验名称 图书馆管理系统 二、实验目的 利用C++语言设计开发一个小型的图书馆管理系统模拟程序,...
    99+
    2024-04-02
  • java单链表实现书籍管理系统
    本文实例为大家分享了java单链表实现书籍管理系统的具体代码,供大家参考,具体内容如下 书籍管理系统功能: 1).添加图书 2).删除图书 3).查看图书 4).修改书籍 5).修改...
    99+
    2024-04-02
  • C语言如何使用单链表实现学生信息管理系统
    这篇文章主要介绍了C语言如何使用单链表实现学生信息管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。运行结果如图:1.运行界面2.录入学生信息3.按照总分进行排序代码如下...
    99+
    2023-06-25
  • C语言链表实现学生信息管理系统程序设计
    本文实例为大家分享了C语言链表实现学生信息管理系统的具体代码,供大家参考,具体内容如下 事先存入的数据: 菜单 创建链表并倒序输出 输出链表中的全部信息 写入信息并保存至文件...
    99+
    2024-04-02
  • 基于php的图书信息管理系统
    本系统采用phpstudy开发平台,采用PHP和MySQL数据库进行开发,开发工具为HBuilder。 phpStudy是一个PHP调试环境的程序集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,...
    99+
    2023-10-03
    php mysql apache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作