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

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

2024-04-02 19:04:59 177人浏览 独家记忆
摘要

本文实例为大家分享了C语言单链表实现图书管理系统的具体代码,供大家参考,具体内容如下 单链表实现的图书管理系统相比于结构体实现的管理系统,可以随时开辟新的空间,可以增加书的信息 单链

本文实例为大家分享了C语言链表实现图书管理系统的具体代码,供大家参考,具体内容如下

单链表实现的图书管理系统相比于结构体实现的管理系统,可以随时开辟新的空间,可以增加书的信息

单链表的实现

首先肯定还是打印单链表的常规操作,创建表头,创建节点,表头法插入,特定位置删除,打印链表

struct book
{
    char name[20];
    float price;
    int num;          //书的数量
};
//3 数据容器——链表
struct node
{
    struct book data;
    struct Node*next;
};
void printflist(struct Node*headnode);
struct Node*headnode = NULL;
//创建表头
struct Node*createlisthead()
{
    //动态内存申请
    struct Node*headnode = (struct Node*)malloc(sizeof(struct Node));
    //变量的基本规则:使用前必须初始化
    headnode->next = NULL;
    return headnode;
}
//创建节点,为插入做准备
//把用户的数据变为结构体变量
struct Node* createnewnode(struct book data)
{
    struct Node*newnode = (struct Node*)malloc(sizeof(struct Node));
    newnode->data = data;
    newnode->next = NULL;
    return newnode;
}
//表头法插入
void insertbyhead(struct Node*headnode, struct book data)
{
    struct Node* newnode = createnewnode(data);
    //必须先连后断
    newnode->next = headnode->next;
    headnode->next = newnode;

}
//指定位置删除
void deletenodebyname(struct Node*headnode, char *bookname)
{
    struct Node*posleftnode = headnode;
    struct Node*posnode = headnode->next;
    //字符串比较函数
    while (posnode != NULL && strcmp(posnode->data.name,bookname))
    {
        posleftnode = posnode;
        posnode = posnode->next;
    }
    //讨论结果
    if (posnode == NULL)
    {
        printf("未找到数据");
        return ;
    }
    else
    {
        posleftnode->next = posnode->next;
        free(posnode);
        posnode = NULL;
    }
    printflist(headnode);
}
//查找书籍
struct Node*searchbyname(struct Node*headnode, char *bookname)
{
    struct Node *posnode = headnode->next;
    while (posnode != NULL &&strcmp(posnode->data.name, bookname))
    {
        posnode = posnode->next;
    }
    return posnode;
}
//打印链表——从第二个节点开始打印
void printflist(struct Node*headnode)
{
    struct Node* pmove = headnode->next;
    printf("书名\t价格\t数量\n");

    while (pmove!=NULL)
    {
        printf("%s\t%.1f\t%d\n", pmove->data.name,pmove->data.price,pmove->data.num );
        pmove = pmove->next;
    }
    printf("\n");
}

冒泡排序——通过价格

第一个for循环表示遍历次数,第二个for循环使相邻的两个元素进行比较并交换
1 比较条件里,只用q指针即可
2 交换时需要创建一个临时变量

//冒泡排序算法
void bubblesortlist(struct Node*headnode)
{
    for (struct Node*p = headnode->next; p != NULL; p = p->next)
    {
        for (struct Node*q = headnode->next; q->next != NULL; q = q->next)
        {
            if (q->data.price > q->next->data.price)
            {
                //交换
                struct book tempdata = q->data;
                q->data = q->next->data;
                q->next->data = tempdata;
            }
        }
    }
    printflist(headnode);
}

如果不储存信息,那么每次在输入信息完毕后关闭控制台,信息无法保留,所以我们通过文件的方式来储存信息

文件写操作

1 通过创建节点指针变量来遍历输出文件中的信息
2 通过fprintf可以将输入的信息保持下来

//写操作
void savefile(const char*filename, struct Node*headnode)
{
    FILE*fp = fopen(filename, "w");
    struct Node*pmove = headnode->next;
    while (pmove != NULL)
    {
        fprintf(fp, "%s\t%.1f\t%d\n", pmove->data.name, pmove->data.price, pmove->data.num);
        pmove = pmove->next;
    }

    fclose(fp);
    fp = NULL;
}

文件读操作

1 当用 “r”的形式打开文件失败时,说明没有此文件,则可以用“w+”的形式打开,当没有文件时,会创建一个文件
2 把读取出的数据以表头法插入到链表中则可以再次打印出信息

//文件读操作
void readfile(const char *filename, struct Node*headnode)
{
    FILE*fp = fopen(filename, "r");
    if (fp == NULL)
    {
        //不存在文件则创建
        fp = fopen(filename, "w+");
    }
    struct book tempdata;
    while (fscanf(fp, "%s\t%f\t%d\n", tempdata.name, &tempdata.price, &tempdata.num) != EOF)
    {
        insertbyhead(headnode, tempdata);
    }
    fclose(fp);
    fp = NULL;
}

剩余代码

1 当查找书籍时先用临时指针接受找到书籍的指针,然后再打印书籍信息

//1 界面
void menu()
{
    printf("---------------------------------\n");
    printf("\t图书管理系统\n");
    printf("\t0.退出系统\n");
    printf("\t1.登记书籍\n");
    printf("\t2.浏览书籍\n");
    printf("\t3.借阅书籍\n");
    printf("\t4.归还书籍\n");
    printf("\t5.书籍排序\n");
    printf("\t6.删除书籍\n");
    printf("\t7.查找书籍\n");
    printf("---------------------------------\n");
    printf("请输入0~7\n");

}
//2  做交互
void keydown()
{
    int input = 0;
    struct book tempbook;  //创建临时变量,存储书籍信息
    struct Node*result = NULL;     //创建临时指针变量,指向查找书籍的节点
    scanf("%d", &input);
    switch (input)
    {
    case 0:
        printf("【退出】\n");
        printf("退出成功\n");
        system("pause");
        exit(0);   //关闭整个程序
        break;
    case 1:
        printf("【登记】\n");
        printf("输入书籍的信息(name,price,num)");
        scanf("%s%f%d", tempbook.name, &tempbook.price, &tempbook.num);
        insertbyhead(headnode, tempbook);
        savefile("book.txt", headnode);
        break;
    case 2:
        printf("【浏览】\n");
        printflist(headnode);
        break;
    case 3:
        printf("【借阅】\n");          //书籍存在,数量-1
        printf("请输入要借阅的书籍");
        scanf("%s", tempbook.name);
        result = searchbyname(headnode, tempbook.name);
        if (result == NULL)
        {
            printf("没有相关书籍,无法借阅");
        }
        else
        {
            if (result->data.num > 0)
            {
                result->data.num--;
                printf("借阅成功");
            }
            else
                printf("无库存");
            
        }

        break;
    case 4:
        printf("【归还】\n");      //书记归还,数量+1
        printf("请输入要归还的书籍");
        scanf("%s", tempbook.name);
        result = searchbyname(headnode, tempbook.name);
        if (result == NULL)
            printf("来源非法");
        else
        {
            result->data.num++;
            printf("书籍归还成功!");
        }
    
        break;
    case 5:
        printf("【排序】\n");
        bubblesortlist(headnode);
        savefile("book.txt", headnode);
        break;
    case 6:
        printf("【删除】\n");
        printf("输入要删除的书名");
        scanf("%s", tempbook.name);
        deletenodebyname(headnode, tempbook.name);
        savefile("book.txt", headnode);
        break;
    case 7:
        printf("【查找】\n");
        printf("请输入要查找的书籍");
        scanf("%s", tempbook.name);
        result = searchbyname(headnode, tempbook.name);
        if (result == NULL)
        {
            printf("未找到相关信息!\n");

        }
        else
        {
            printf("书名\t价格\t数量\n");
            printf("%s\t%.1f\t%d\t", result->data.name, result->data.price, result->data.num);
        }
        break;
    default:
        printf("选择错误,请重新选择:>");
        break;
    }
}
int main()
{
    headnode = createlisthead();
    readfile("book.txt", headnode);
    while (1)
    {
        menu();
        keydown();
        system("pause");
        system("cls");

    }
    system("pause");
    return 0;
}

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

--结束END--

本文标题: C语言单链表实现图书管理系统

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

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

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

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

下载Word文档
猜你喜欢
  • C语言单链表实现图书管理系统
    本文实例为大家分享了C语言单链表实现图书管理系统的具体代码,供大家参考,具体内容如下 单链表实现的图书管理系统相比于结构体实现的管理系统,可以随时开辟新的空间,可以增加书的信息 单链...
    99+
    2024-04-02
  • C语言链表实现简单图书管理系统
    本文实例为大家分享了C语言链表实现图书管理系统的具体代码,供大家参考,具体内容如下 实现功能: 用C语言制作图书管理系统,实现图书进行登记书籍,浏览书籍,借阅书籍,归还书籍,书籍排序...
    99+
    2024-04-02
  • C语言中单链表如何实现图书管理系统
    小编给大家分享一下C语言中单链表如何实现图书管理系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下单链表实现的图书管理系统相比于结构体实现的管理系统,...
    99+
    2023-06-29
  • C++使用链表实现图书管理系统
    本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下 一、程序实现功能 1.录入书籍:将书籍录入图书管理系统 2.浏览书籍:查看图书管...
    99+
    2024-04-02
  • C语言实现图书馆管理系统
    本文实例为大家分享了C语言实现图书馆管理系统的具体代码,供大家参考,具体内容如下 全部代码如下: #include <stdio.h> #include<str...
    99+
    2024-04-02
  • C语言单链表实现通讯录管理系统
    本文实例为大家分享了C语言单链表实现通讯录管理系统的具体代码,供大家参考,具体内容如下 本人前几天刚刚自学了单链表,趁热打铁,赶紧写一个小小的项目练练手。 单链表的实现在本人之前的博...
    99+
    2024-04-02
  • C语言怎么实现简单的图书管理系统
    实现一个简单的图书管理系统可以使用C语言来实现,以下是一个简单的示例代码: #include <stdio.h> #in...
    99+
    2024-03-08
    c语言
  • java单链表实现书籍管理系统
    本文实例为大家分享了java单链表实现书籍管理系统的具体代码,供大家参考,具体内容如下 书籍管理系统功能: 1).添加图书 2).删除图书 3).查看图书 4).修改书籍 5).修改...
    99+
    2024-04-02
  • C语言图书管理系统实验
    本文实验为大家分享了C语言图书管理系统的具体代码,供大家参考,具体内容如下 实验要求: 1、图书信息:包括ISBN、书名、主编、出版社、定价 2、功能: (1)插入:若表中不存在新...
    99+
    2024-04-02
  • C语言实现图书管理系统开发
    本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家参考,具体内容如下 程序介绍 图书管理系统主要有以下功能: 1、录入图书信息。2、实现删除功能,即输入图书号删除相应的记录...
    99+
    2022-11-13
    C语言图书管理系统 C语言图书系统 C语言图书管理
  • C语言如何实现图书管理系统
    这篇文章将为大家详细讲解有关C语言如何实现图书管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。主要内容        开发一个图书信息管理系统,图书信息包括:...
    99+
    2023-06-28
  • C语言怎么实现图书管理系统
    要实现一个图书管理系统,可以按照以下步骤进行:1. 定义图书结构体:首先要定义一个图书的结构体,包括图书的编号、名称、作者等信息。`...
    99+
    2023-08-09
    C语言
  • C++如何使用链表实现图书管理系统
    这篇文章主要为大家展示了“C++如何使用链表实现图书管理系统”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何使用链表实现图书管理系统”这篇文章吧。具体内容如下一、程序实现功能录入书籍:将...
    99+
    2023-06-29
  • C++利用链表实现图书信息管理系统
    C++利用链表实现一个简单的图书信息管理系统,供大家参考,具体内容如下 (1)图书信息包括ISBN号、书名、作者名、价格和数量等; (2)系统的主要功能包括:图书信息的创建、输出图书...
    99+
    2024-04-02
  • C语言链表实现工资管理系统
    本文实例为大家分享了C语言链表实现工资管理系统的具体代码,供大家参考,具体内容如下 自己的作业,分享一下,自己为了调试方便,又多加入了一些功能 题目:建立工资管理系统,对职工工资的相...
    99+
    2024-04-02
  • C语言链表实现销售管理系统
    本文实例为大家分享了C语言链表实现销售管理系统的具体代码,供大家参考,具体内容如下 源码 #include<stdio.h> #include<stdlib.h&g...
    99+
    2024-04-02
  • C语言如何实现图书馆管理系统
    这篇文章主要介绍了C语言如何实现图书馆管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。全部代码如下:#include <stdio.h>#incl...
    99+
    2023-06-20
  • C语言单链表如何实现通讯录管理系统
    这篇文章将为大家详细讲解有关C语言单链表如何实现通讯录管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通讯录管理系统保存人的信息有: 名字   name电话 ...
    99+
    2023-06-15
  • C++实现简单版图书管理系统
    本文实例为大家分享了C++实现简单版图书管理系统的具体代码,供大家参考,具体内容如下 1、系统需求 图书管理系统是一个可以记录图书借记和存储的工具。 本教程主要利用C++来实现一个图...
    99+
    2024-04-02
  • java单链表怎么实现书籍管理系统
    这篇文章主要介绍“java单链表怎么实现书籍管理系统”,在日常操作中,相信很多人在java单链表怎么实现书籍管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java单链表怎么实现书籍管理系统”的疑惑有所...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作