图书信息管理系统 链表

  • 一、实验题目
  • 二、工具环境
  • 三、实验问题
  • 四、实验代码
  • 五、实验总结

一、实验题目

图书信息管理系统

出版社有一些图书数据,为简单起见,在此假设每种图书只包括三部分信息:ISBN (书号)、书名和价格,文件中的部分数据如图2.1所示。现要求实现一个图书信息管理系统,包括以下6个具体功能。
​ (1)查找:根据指定的ISBN或书名查找相应图书的有关信息,并返回该图书在表中的位置序号。
​ (2)插入:插入一种新的图书信息。
​ (3)删除:删除一种图书信息。
​ (4)修改:根据指定的ISBN,修改该图书的价格。
​ (5)排序:将图书按照价格由低到高进行排序。
​ (6)计数:统计图书表中的图书数量。

二、工具环境

Window10操作系统,Microsoft Visual C++2010学习版 集成开发环境,C语言

三、实验问题

在使用结构体指针的时候,必须先用malloc分配空间,再进行赋值,并且每次没有明确指向的指针都要赋值为NULL

四、实验代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N   100
#define OK  1
#define ERROR  0typedef int Status;typedef struct {int   num;//序号char  ISBN[20];char  name[N+1];int   price;
}Book;typedef struct LNode{Book  * book;//结点的数据域struct LNode *next;//结点的指针域
}LNode,*LinkList;//LinkList 为指向结构体 LNode 的指针类型Status InitList(LinkList *L); //初始化指针L
Status CreateList(LinkList L,LinkList q,Book *book);//初始化指针L的next指针p
LNode *LocateELem(LinkList L, char ISBN[],char name[]);//查找
Status Listinsert(LinkList L,LinkList p,LinkList q);//添加
Status ListDelete(LinkList L,LinkList p);//删除
Status ListAlter(LinkList L,LinkList p);//修改
Status ListOrder(LinkList L);//排序
Status ListDefaultOrder(LinkList L);//默认排序
int GetNumber(LinkList L);//统计个数
Status showbook(LinkList L);int main()//---------------------------------主函数---------------------------------
{LinkList L=NULL,p=NULL,temp=NULL;Book  book1={1,"9787302257646","程序设计基础",25};Book  book2={2,"9787302219972","单片机技术及应用",32};Book  book3={3,"9787302203513","编译原理",46};Book  book4={4,"9787811234923","汇编语言程序设计教程",21};Book  book5={5,"9787512100831","计算机操作系统",17};Book  book6={6,"9787302265436","计算机导论实验指导",18};Book  book7={7,"9787302180630","实用数据结构",29};Book  book8={8,"9787302225065","数据结构(C语言版)",38};Book  book9={9,"9787302171676","C#面向对象程序设计",39};Book  book10={10,"9787302250692","C语言程序设计",42};Book  book11={11,"9787302150664","数据库原理",35};Book  book12={12,"9787302260806","Java编程与实践",56};Book  book13={13,"9787302252887","Java程序设计与应用教程",39};Book  book14={14,"9787302198505","嵌入式操作系统及编程",25};Book  book15={15,"9787302169666","软件测试",24};Book  book16={16,"9787811231557","Eclipse基础与应用",35};char ISBN[20],name[N+1];int length;system("color f1");InitList(&L);InitList(&p);InitList(&temp);//初始化头指针,L做头指针始终指向头节点//现在L和p的数据域空,指针域指向空CreateList(p,p->next,&book1);p=p->next;//p的指针域指向第一条图书信息L->next=p;//L的下一个指向首元结点temp=p;//记录首元结点位置CreateList(p,p->next,&book2);p=p->next;CreateList(p,p->next,&book3);p=p->next;CreateList(p,p->next,&book4);p=p->next;CreateList(p,p->next,&book5);p=p->next;CreateList(p,p->next,&book6);p=p->next;CreateList(p,p->next,&book7);p=p->next;CreateList(p,p->next,&book8);p=p->next;CreateList(p,p->next,&book9);p=p->next;CreateList(p,p->next,&book10);p=p->next;CreateList(p,p->next,&book11);p=p->next;CreateList(p,p->next,&book12);p=p->next;CreateList(p,p->next,&book13);p=p->next;CreateList(p,p->next,&book14);p=p->next;CreateList(p,p->next,&book15);p=p->next;CreateList(p,p->next,&book16);p=p->next;//现在p在16printf("\t------------------------------------\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");showbook(L);while(1){int choose;printf("\n\t请输入你要选择的功能前的序号:");scanf("%d",&choose);if(choose==0){printf("\n\t退出成功,谢谢使用图书信息管理系统!");break;}switch(choose){case 1://"1. 查找图书\n");LocateELem(L,ISBN,name);break;case 2://"2. 添加图书\n");Listinsert(L,p,p->next);  break;case 3://3. 删除图书\n");ListDelete(L,p);break;case 4://4. 修改图书\n");ListAlter(L,p);break;case 5://5. 按图书价格排序\n");ListOrder(L);ListDefaultOrder(L);//默认按序号排序break;case 6://6. 统计图书数量\n");length=GetNumber(L);printf("\n\t共有%d本图书\n",length);break;}}return 0;
}//---------------------------------主函数---------------------------------Status InitList(LinkList *L)
{*L=(LinkList)malloc(1*sizeof(LNode));(*L)->next=NULL;//★return OK;
}
Status CreateList(LinkList p,LinkList q,Book *book)
{                          //q=p->next;q=(LinkList)malloc(1*sizeof(LNode));//p->next初始化★q->book=book;//p->next数据域赋值q->next=NULL;//p->next指针域为空,等待后续建立连接★p->next=q;p->next指针域与初始化后的指针建立连接return OK;
}LNode *LocateELem(LinkList L, char ISBN[],char name[])
{int i=0,choose=0,flag=0;//flag=1说明选择方式正确;flag=-1说明查找到图书LinkList p=L->next;//初始化,p指向首元结点printf("\n\t请选择查找图书的方式: 1.按ISBN查找,2.按书名查找:\n");printf("\t请输入:");scanf("%d",&choose);while(flag!=1){switch(choose){case 1:printf("\t请输入要查找图书的ISBN:");scanf("%s",ISBN);while(p!=NULL){if(strcmp(ISBN,p->book->ISBN)==0){printf("\n\t查找到ISBN为%s的图书序号为%d\n",ISBN,p->book->num);flag=-1;break;}p=p->next;}if(flag!=-1)printf("\n\t不存在该图书\n");flag=1;break;case 2:printf("\t请输入要查找图书的名字:");scanf("%s",name);while(p!=NULL){if(strcmp(name,p->book->name)==0){printf("\n\t查找到名字为%s的图书序号为%d\n",name,p->book->num);flag=-1;break;}p=p->next;}if(flag!=-1)printf("\n\t不存在该图书\n");flag=1;break;default:printf("\n\t请重新输入:");scanf("%d",&choose);break;}}return p;
}Status Listinsert(LinkList L,LinkList p,LinkList q)
{char ISBN[20],name[N+1];int price;Book *book=(Book *)malloc(1*sizeof(Book));p=L;q=(LinkList)malloc(1*sizeof(LNode));//插入结点while(p->next!=NULL){p=p->next;} printf("\t请输入要添加的图书信息:\n");printf("\t请输入图书的ISBN:");scanf("%s",book->ISBN);printf("\t请输入图书的名字:");scanf("%s",book->name);printf("\t请输入图书的价格:");scanf("%d",&(book->price));book->num=(p->book->num) +1;q->book=book;q->next=NULL;p->next=q;printf("\n\t添加成功\n");return OK;
}Status ListDelete(LinkList L,LinkList p)
{int i,j,num,flag=0;char ISBN[20];LinkList q=(LinkList)malloc(1*sizeof(LNode));//保存被释放的结点LinkList temp=(LinkList)malloc(1*sizeof(LNode));p=L;printf("\t请输入你要删除的图书的ISBN:");scanf("%s",ISBN);while(p->next!=NULL){if(strcmp(ISBN,p->next->book->ISBN)==0){q=p->next;temp=p->next;flag=1;break;}p=p->next;}if(flag!=1){printf("\n\t找不到此图书\n");return ERROR; }else{if(temp->next!=NULL){temp->next->book->num=temp->book->num;temp=temp->next;}while(temp->next!=NULL){temp->next->book->num=(temp->book->num)+1;temp=temp->next;}if(q->next!=NULL){p->next=q->next;free(q);}else{    p->next=NULL;}printf("\n\t删除成功\n");return OK;}
}Status ListAlter(LinkList L,LinkList p)
{int i,choose,price,flag=0;char ISBN[20],name[N+1];p=L;printf("\t请输入你要修改的图书的ISBN:");scanf("%s",ISBN);while(p->next!=NULL){if(strcmp(ISBN,p->next->book->ISBN)==0){p=p->next;flag=1;break;}p=p->next;}if(flag==1){while(1){printf("\t0. 退出修改\n");printf("\t1. 修改ISBN\n");printf("\t2. 修改名字\n");printf("\t3. 修改价格\n");printf("\n\t请输入你要选择的功能前的序号:");scanf("%d",&choose);if(choose==0)   break;switch(choose){case 1://"1. 修改ISBN");printf("\t请输入图书的ISBN:");scanf("%s",ISBN);strcpy(p->book->ISBN,ISBN);break;case 2://"2. 修改名字");printf("\t请输入图书的名字:");scanf("%s",name);            strcpy(p->book->name,name);break;case 3://3. 修改价格");printf("\t请输入图书的价格:");scanf("%d",&price);p->book->price=price;break;}}//whileprintf("\n\t修改成功\n");}else{printf("\t找不到此图书\n");return ERROR;}return OK;
}Status ListOrder(LinkList L)
{LinkList E=(LinkList)malloc(1*sizeof(LNode));LinkList p=(LinkList)malloc(1*sizeof(LNode));LinkList q=(LinkList)malloc(1*sizeof(LNode));Book *temp=(Book *)malloc(1*sizeof(Book));E=L;L=L->next;while(L->next!=NULL){p=L;q=L->next;while(q!=NULL){   if(p->book->price > q->book->price){temp=p->book;p->book=q->book;q->book=temp;}   q=q->next;}L=L->next;}L=E->next;printf("\n\t序号\t\tISBN\t\t名字\t\t\t价格\n");while(L!=NULL){printf("\t %d \t %-13s \t %-22s \t %d\n",L->book->num,L->book->ISBN,L->book->name,L->book->price);L=L->next;}L=E;return OK;
}
Status ListDefaultOrder(LinkList L)
{LinkList E=(LinkList)malloc(1*sizeof(LNode));LinkList p=(LinkList)malloc(1*sizeof(LNode));LinkList q=(LinkList)malloc(1*sizeof(LNode));Book *temp=(Book *)malloc(1*sizeof(Book));E=L;L=L->next;while(L->next!=NULL){p=L;q=L->next;while(q!=NULL){   if(p->book->num > q->book->num){temp=p->book;p->book=q->book;q->book=temp;}   q=q->next;}L=L->next;}L=E;return OK;
}int GetNumber(LinkList L)
{LinkList p=(LinkList)malloc(1*sizeof(LNode));p=L;while(p->next!=NULL){p=p->next;}return p->book->num;
}Status showbook(LinkList L)
{LinkList p=(LinkList)malloc(1*sizeof(LNode));p=L->next;printf("\t---------------------------------------------------------------\n");printf("\t序号\t\tISBN\t\t名字\t\t\t价格\n");while(p!=NULL){printf("\t %d \t %-13s \t %-22s \t %d\n",p->book->num,p->book->ISBN,p->book->name,p->book->price);p=p->next;}free(p);printf("\t---------------------------------------------------------------\n");return OK;
}

五、实验总结

空间:
顺序表:空间大小需要提前分配,会有闲置和溢出
链表:大小可以任意改变,不会出现闲置和溢出

时间:
顺序表:增删比较麻烦,平均需要移动一半的元素
链表:增删比较容易只需要改结点指向


感觉写图书信息管理系统还是顺序表好用,但是不易扩展,链表每次不管增删改查,使用完指针位置都会变,就感觉好麻烦


图书信息管理系统(数据结构链表,c语言版)相关推荐

  1. 图书信息管理系统(数据结构顺序表,c语言版)

    图书信息管理系统 顺序表 一.实验题目 二.工具环境 三.实验问题 问题: 四.实验代码 五.解决方法 方法: 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括 ...

  2. 图书信息管理系统 数据结构 C语言版

    图书信息管理系统 原文链接 本代码是为了实现数据结构书上的案例2.3.由于书中对于代码功能的描述太过简单,很难理解他到底具体的要求是什么,所以我只能根据自己的理解来实现查找,插入,删除,修改,排序和计 ...

  3. 数据结构实验--个人图书信息管理系统

    数据结构实验 第一章 个人图书信息管理系统 第二章 停车场管理 第三章 哈夫曼编码 第一章 个人图书信息管理系统 数据结构实验 前言 一.需求分析 二.概要设计 三.详细设计 1.全局变量.元素类型. ...

  4. 初识数据结构:链表实现图书信息管理系统(C语言,仅供参考)

    目录 1.创建表结构 2.创建表 3.打印链表 4.查找功能的实现 5.插入功能的实现 6.删除功能的实现 7.修改功能的实现 8.计数功能的实现 9.排序功能的实现 10.封装图书信息管理系统 1. ...

  5. C语言图书信息管理系统简单,线性表简单实现图书信息管理系统(C语言版)

    #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE ...

  6. 数据结构课程设计实验一:图书信息管理系统的设计与实现

    目录 (一)实验内容 (二)实验目的 (三)实验主要数据类型定义 (四)系统功能概述 (五)实验代码 (六)实验内容展示 (一)实验内容 设计并实现一个图书信息管理系统.根据实验要求设计该系统的菜单和 ...

  7. c语言课程图书信息管理系统,c语言课程设图书信息管理系统.doc

    c语言课程设图书信息管理系统 课程设计报告 课程:高级语言程序设计 学号: 1010431059 姓名: 胡维维 班级: 嵌入式一班 教师: 王群芳 时间: 2011年6月 计算机科学与技术系 设计名 ...

  8. 大一c语言图书管理系统查询,大一C语言课程设计图书信息管理系统.doc

    高级语言程序设计 课程设计 评语: 学 院 班 级 姓 名 学 号 成 绩 指导老师 年 月 日 一.目的 1. 进一步掌握和利用C语言进行程设计的能力: 2.? 进一步理解和运用结构化程设计的思想和 ...

  9. 修改图书信息c语言,图书信息管理系统c语言.doc

    图书信息管理系统c语言.doc 沈阳航空航天大学理学院 C语言程序设计课程设计报告 题目: 图书信息管理系统 专 业: 信息与计算科学 班 级: 学 号: 学生姓名: 指导教师: 2010年 7月 9 ...

最新文章

  1. 浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)
  2. Springboot:开发时工程启动慢
  3. python如何写日志_【Python】教你如何在python中添加日志
  4. [python-图像处理]python图片处理技巧[基本操作]
  5. createDocumentFragment 详解
  6. 2336: [HNOI2011]任务调度 - BZOJ
  7. (1) nginx的安装
  8. linux配置ip地址 routes,CentOS 7 设置网络IP地址(示例代码)
  9. 【Spark】Spark 报错 error writing stream metadata exitcode=1073741515
  10. Linux内核入门-如何获取Linux内核源代码、生成配置内核
  11. mysql jndi 实例_自己收藏-JNDI应用实例
  12. 将网站转换为应用程序的软件—“Unite”
  13. 算法竞赛入门经典 电子书(附习题解析)网盘下载
  14. step7设置pcpg_安装STEP7编程软件过程及PG/PC接口设置
  15. Introduce·哲学核心期刊推荐之《哲学分析》
  16. 聊下如何设计知识中台?(附代码)
  17. 淘客app开发成本要多少
  18. linux websphere 端口号,Linux环境下配置websphere7.0的一些命令
  19. 基于c语言的哈希表电话簿
  20. python写文件自动换行_python怎么换行继续写脚本

热门文章

  1. IP地址分类及特殊IP地址
  2. 采集文章发布到Discuz论坛指定版块
  3. 代码签名证书如何申请,有什么好处?
  4. 特别策划 | 5G最新进展深度解析2020版-国内市场篇(56页附下载)
  5. 深聊全链路压测之:第二十讲 | 如何落地日志隔离方案。
  6. 国家地理2008最受关注图片
  7. HF-Net初探之一:简介与配置使用
  8. DSP应用技术(第二章)
  9. 电子计算机发明于1946年对不对,国家公务员测验考试常识题.doc
  10. chrome浏览器发布文章(发贴)辅助的实现思路