图书信息管理系统

原文链接
本代码是为了实现数据结构书上的案例2.3。由于书中对于代码功能的描述太过简单,很难理解他到底具体的要求是什么,所以我只能根据自己的理解来实现查找,插入,删除,修改,排序和计数功能。为了方便查看我们的代码功能是否成功实现,我创建了一个可以输出整个单链表存储的图书信息的函数TraverseList(LinkList L);

结构体结构

对于图书的基本信息的存储,我们采用结构体来实现。由于书中只说了图书的基本信息包括ISBN,书名,定价,所以我们只需要存储这三条信息就行。我们的整个管理系统是采用单链表来存储全部图书信息。

typedef struct
{char ISBN[20];char name[20];float price;
}Book;typedef struct LNode
{Book elem;struct LNode *next;
}LNode, *LinkList;

功能选择

通过使用switch语句来选择不同的功能。1代表插入,2代表查询,3代表删除,4代表修改,5代表计数,6代表排序功能。

插入

只有我们通过在线性表中插入图书信息以后才能使用其他功能,所以我们先设计插入功能。对于图书管理程序,每当别人还了一本书,把这本书插入到这个系统即可。所以,我们的代码将直接在单链表末尾插入这个图书信息。

int Insert(LinkList L, Book e)
{LNode *p;p= L;while(p->next){p=p->next;}LNode *s;s = (LNode *)malloc(sizeof(LNode));s->elem = e;s->next = p->next;p->next= s;return OK;
}

输出整个链表信息

通过遍历整个单链表,输出所有的图书信息。方便查看我们的查找,插入,删除,修改,排序和计数功能是否成功的实现。

int TraverseList(LinkList L)
{LNode *p;p=L->next;while(p){printf("ISBN:%s name:%s price:%f\n",p->elem.ISBN,p->elem.name,p->elem.price);p = p->next;}return OK;
}

查找

查找功能实现的通过输入图书的书名,来查找单链表中是否有这本书。

int Serch(LinkList L,char *bookname)
{LNode *p;p = L->next;while(p&& strcmp(p->elem.name,bookname)!=0){p = p->next;}if(p==NULL){printf("Can't find\n");}else{printf("have this book.\n");}return OK;
}

删除

通过输入图书的ISBN编号,删除单链表中这本图书的信息。如果没有这本书的话,直接输出Can’t find。

int Delete(LinkList L,char *ISBN)
{LNode *p;LNode *prior;p= L->next;while(p && strcmp(p->elem.ISBN,ISBN)!=0){prior = p;p = p->next;}if(p==NULL){printf("Can't find\n");}else{prior->next = p->next;printf("delete it\n");}return OK;
}

修改

通过输入图书的ISBN号码,然后输入新的图书名称和定价。代码会查找单链表中是否有输入的ISBN号码的这本图书,燃火把新的图书名称和定价改过去。

int Modify(LinkList L,char *ISBN,char *name,float price)
{LNode *p;p = L->next;while(p&& strcmp(p->elem.ISBN,ISBN)!=0){p = p->next;}if(p==NULL){printf("Can't find\n");}else{strcpy(p->elem.name,name);p->elem.price = price;}return OK;
}

计数

通过循环整个单链表,来查看整个链表有多少本图书。

int Count(LinkList L)
{LNode *p;int cnt = 0;p = L->next;while(p){cnt++;p = p->next;}return cnt;
}

排序

由于书中并没有说明到底根据什么排序,所以我是根据书的ISBN号码进行排序的。排序的方式是从小到大。

int bubbleSort(LinkList L)
{if(L->next == NULL || L->next->next == NULL)return OK;   //如果链表是空的或者只有一个元素,直接返回int flag = 0;LNode *cur;     //游标节点LNode *pre;     //游标节点的前驱节点LNode *tail = NULL;   //尾指针节点LNode *temp;   //临时节点while(L->next != tail){cur = L->next;pre = L;  //这样确保pre是cur前面的那个节点while(cur->next != tail ){if(strcmp(cur->elem.ISBN,cur->next->elem.ISBN)>0)  //这里是根据ISBN的大小进行排序{temp = cur->next;cur->next = temp->next;temp->next = cur;pre->next = temp;pre = temp;flag = 1;}else{pre = pre->next;cur=cur->next;}}if(flag == 0)return OK;tail = cur; //使得每次循环结束后,最后一个节点就是最大的元素,尾节点往前挪一位}
}

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define OK 1
#define ERROR 0
typedef struct
{char ISBN[20];char name[20];float price;
}Book;typedef struct LNode
{Book elem;struct LNode *next;
}LNode, *LinkList;int Insert(LinkList L, Book e);
int TraverseList(LinkList L);
int Serch(LinkList L,char *bookname);
int Delete(LinkList L,char *ISBN);
int Modify(LinkList L,char *ISBN,char *name,float price);
int Count(LinkList L);
int bubbleSort(LinkList L);
int main()
{int sign;int status;LinkList L;char ISBN[20],name[20];float price;Book e;int cnt;L = (LNode *)malloc(sizeof(LNode));L->next = NULL;while(scanf("%d",&sign)!=EOF){switch (sign){case 1:scanf("%s %s %f",ISBN,name,&price);strcpy(e.ISBN,ISBN);strcpy(e.name,name);e.price = price;Insert(L,e);TraverseList(L);break;case 2:scanf("%s",name);Serch(L,name);break;case 3:scanf("%s",ISBN);Delete(L,ISBN);TraverseList(L);break;case 4:scanf("%s %s %f",ISBN,name,&price);Modify(L,ISBN,name,price);TraverseList(L);break;case 5:cnt = Count(L);printf("book has %d\n",cnt);break;case 6:bubbleSort(L);TraverseList(L);break;default:break;}}
}int Insert(LinkList L, Book e)
{LNode *p;p= L;while(p->next){p=p->next;}LNode *s;s = (LNode *)malloc(sizeof(LNode));s->elem = e;s->next = p->next;p->next= s;return OK;
}int TraverseList(LinkList L)
{LNode *p;p=L->next;while(p){printf("ISBN:%s name:%s price:%f\n",p->elem.ISBN,p->elem.name,p->elem.price);p = p->next;}return OK;
}int Serch(LinkList L,char *bookname)
{LNode *p;p = L->next;while(p&& strcmp(p->elem.name,bookname)!=0){p = p->next;}if(p==NULL){printf("Can't find\n");}else{printf("have this book.\n");}return OK;
}int Delete(LinkList L,char *ISBN)
{LNode *p;LNode *prior;p= L->next;while(p && strcmp(p->elem.ISBN,ISBN)!=0){prior = p;p = p->next;}if(p==NULL){printf("Can't find\n");}else{prior->next = p->next;printf("delete it\n");}return OK;
}int Modify(LinkList L,char *ISBN,char *name,float price)
{LNode *p;p = L->next;while(p&& strcmp(p->elem.ISBN,ISBN)!=0){p = p->next;}if(p==NULL){printf("Can't find\n");}else{strcpy(p->elem.name,name);p->elem.price = price;}return OK;
}int Count(LinkList L)
{LNode *p;int cnt = 0;p = L->next;while(p){cnt++;p = p->next;}return cnt;
}int bubbleSort(LinkList L)
{if(L->next == NULL || L->next->next == NULL)return OK;   //如果链表是空的或者只有一个元素,直接返回int flag = 0;LNode *cur;     //游标节点LNode *pre;     //游标节点的前驱节点LNode *tail = NULL;   //尾指针节点LNode *temp;   //临时节点while(L->next != tail){cur = L->next;pre = L;  //这样确保pre是cur前面的那个节点while(cur->next != tail ){if(strcmp(cur->elem.ISBN,cur->next->elem.ISBN)>0)  //这里是根据ISBN的大小进行排序{temp = cur->next;cur->next = temp->next;temp->next = cur;pre->next = temp;pre = temp;flag = 1;}else{pre = pre->next;cur=cur->next;}}if(flag == 0)return OK;tail = cur; //使得每次循环结束后,最后一个节点就是最大的元素,尾节点往前挪一位}
}

图书信息管理系统 数据结构 C语言版相关推荐

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

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

  2. 课程设计--图书信息管理系统(C语言)

    图书信息管理系统(C语言) 图书信息包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: 系统以菜单方式工作 1) 图书信息录入功能(图书信息 ...

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

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

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

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

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

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

  6. c语言图书信息管理系统报告,c语言实习报告--图书信息管理系统设计

    <c语言实习报告--图书信息管理系统设计>由会员分享,可在线阅读,更多相关<c语言实习报告--图书信息管理系统设计(16页珍藏版)>请在皮匠网上搜索. 1.C 语 言 课 程 ...

  7. 成绩查询数据结构c语言,学生成绩管理系统(数据结构c语言版源代码)09169.pdf

    不必问别人你能做什么,除了你自己,没有人知道.也不必问别人你到底该做什么,除了行 动,没有任何解答. #include #include #include struct students{ char ...

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

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

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

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

最新文章

  1. 如何设计一门语言(七)——闭包、lambda和interface
  2. java 反射机制--根据属性名获取属性值
  3. excel 两组数据交点_30秒即可完成Excel数据对比,超高效率,快学起来不要犹豫!...
  4. 登录界面的滑动_【提醒】电子税务局登录方式有变化! 8月31日关闭“原方式登录”...
  5. 自定义UITableViewCell需注意的问题
  6. C和C++太难了。。搞这个方向进大厂它不香吗?
  7. 工作221:控制弹出框不全屏
  8. linux 修改当前系统时间
  9. c++,派生类对象可以对基类赋值,基类对派生类不可以赋值
  10. sql索引的填充因子多少最好,填充因子的作用?
  11. Expected authority at index 7: hdfs://
  12. 继续南山聊代码!Apache Kafka × Apache Flink Meetup · 深圳站
  13. 微信开放平台:微信扫码登录功能
  14. JavaSE Map集合 HashMap和Hashtable的区别 Collections(集合工具类) 集合练习 模拟斗地主(洗牌,发牌,看牌)
  15. zic - 时区编辑器
  16. 百度网盘在电脑端取消自动续费
  17. 利用代码实现山脊线、山谷线的提取(arcpy版)
  18. 蓝桥杯模块学习9——PWM脉冲宽度调制(深夜学习——单片机)
  19. [置顶]类的加载连接初始化
  20. Ocelot一个优秀的.NET API网关框架

热门文章

  1. Audacity之清浊音频谱分析
  2. 电影网站 php asp,asp电影网址导航大全 V20201218
  3. [流媒体]实例解析MMS流媒体协议,下载LiveMediaVideo[1][修正版,增加了带宽测试包]
  4. Spring Security OAuth2 实现使用JWT
  5. #VCS# 关于VCS 编译选项 《-v 、 -y 、+libext+》 的理解
  6. Deepin java开发环境的搭建jdk8,tomcat9,maven3.3.9,nodejs,vue3+
  7. python 压缩图片为指定大小
  8. 出书最多 [2021年12月 电子学会C语言编程等级考试二级真题解析]
  9. 腾讯云实时音视频带你玩转语音聊天室
  10. 中国成语测试软件,中国汉字水平测试