#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std; #define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef int Status; //函数返回值类型,函数状态代码
#define MAXSIZE 100 //线性表可能达到的最大长度
int length=;
string head_1,head_2,head_3;
typedef struct{
string id; //图书编号
string name; //图书名称
double price; //图书价格
}Book;
typedef struct LNode{
Book data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
Status InitList_L(LinkList &L){
L=new LNode; //开辟以 LNode 大小的内存空间
L->next=NULL;
return OK;
}
Status CreateList_L(LinkList &L){
LinkList p,r;
r=L;
//string head_1,head_2,head_3;
fstream file;
file.open("d:\\book.txt");
if(!file){
cout<<"没有找到该文件,文件打开失败!"<<endl;
exit(ERROR);
}
file>>head_1>>head_2>>head_3;
while(!file.eof()){
p=new LNode;
file>>p->data.id>>p->data.name>>p->data.price;
p->next=NULL;
r->next=p;
r=p;
length++;
}
file.close();
return OK;
}
Status GetElem(LinkList &L,int i){
LinkList p;
Book data;
int j;
p=L->next;
j=;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i)
return ERROR;
cout<<p->data.id<<"\t\t"<<p->data.name<<"\t\t"<<p->data.price<<endl;
return OK;
}
Status ListInsert_L(LinkList &L,int i){
int j;
LinkList p,s;
p=L; //申明一个节点p,指向头节点
j=;
while(p&&j<i){ //寻找第i个节点
p=p->next;
j++;
}
if(!p||j>i) //第 i 个元素不存在
return ERROR;
s=new LNode; //在内存中生成新的节点
cin>>s->data.id>>s->data.name>>s->data.price;
s->next=p->next; //将p的后继赋值给s的后继
p->next=s; //将s的后继赋值给p
return OK;
}
Status ListDelete_L(LinkList &L,int i){//删除单链表的第 i 个数据元素,表长减一
int j;
LinkList p,r;
p=L; //申明一个节点p,指向第一个节点
j=;
while(p&&j<i){ //寻找将要删除的第 i 个数据
p=p->next;
j++;
}
if(!p||j>i) //链表中第 i 个数据不存在
return ERROR;
r=p->next;
p->next=r->next; //将r的后继赋值给p的后继
return OK;
}
int main()
{
int choose,i;
LinkList L,p; //定义头结点
cout<<"1.建立"<<endl;
cout<<"2.输入"<<endl;
cout<<"3.查找"<<endl;
cout<<"4.插入"<<endl;
cout<<"5.删除"<<endl;
cout<<"6.输出"<<endl;
cout<<"0.退出"<<endl<<endl;
choose=-;
while(choose!=){
cout<<"请选择:"<<endl;
cin>>choose;
switch(choose){
case : //退出
cout<<"您已经成功退出系统,欢迎您的到来!"<<endl;
break;
case : //建立
if(InitList_L(L))
cout<<"线性链式表已成功建立!"<<endl;
else
cout<<"线性链式表建立失败!"<<endl;
break;
case : //输入
if(CreateList_L(L))
cout<<"图书信息内容已经成功输入!"<<endl;
else
cout<<"图书信息内容输入失败"<<endl;
break;
case : //查找
int i;
cout<<"请您输入将要查找的第几本书"<<endl;
cin>>i;
cout<<"您要查找的第"<<i<<"本书的信息如下:"<<endl<<endl;
GetElem(L,i);
cout<<"----------------------------------------------------------------------"<<endl;
break;
case : //插入
cout<<"请您输入在第几行插入新的图书:"<<endl;
cin>>i;
cout<<"请您为将要插入新的图书依次输入 图书编号、图书名称、图书价格:"<<endl;
ListInsert_L(L,i);
cout<<"您插入新的图书信息,如下所示:"<<endl<<endl;
cout<<left<<head_1<<left<<"\t\t\t\t"<<head_2<<left<<"\t\t\t"<<head_3<<endl;
p=L->next;
while(p){
cout<<left<<setw()<<p->data.id<<"\t\t"<<left<<setw()<<p->data.name<<p->data.price<<endl;
p=p->next;
}
cout<<"----------------------------------------------------------------------"<<endl;
break;
case : //删除
cout<<"请您输入将要删除的第几个元素:"<<endl;
cin>>i;
ListDelete_L(L,i);
cout<<"您已经成功删除第"<<i<<"个数据"<<endl;
cout<<"新的图书信息如下所示:"<<endl<<endl;
cout<<left<<head_1<<left<<"\t\t\t\t"<<head_2<<left<<"\t\t\t"<<head_3<<endl;
p=L->next;
while(p){
cout<<left<<setw()<<p->data.id<<"\t\t"<<left<<setw()<<p->data.name<<p->data.price<<endl;
p=p->next;
}
cout<<"----------------------------------------------------------------------"<<endl;
break;
case : //输出
LinkList p;
cout<<"图书信息如下:"<<endl<<endl;
cout<<left<<head_1<<left<<"\t\t\t\t"<<head_2<<left<<"\t\t\t"<<head_3<<endl;
p=L->next;
while(p){
cout<<left<<setw()<<p->data.id<<"\t\t"<<left<<setw()<<p->data.name<<p->data.price<<endl;
p=p->next;
}
cout<<"----------------------------------------------------------------------"<<endl;
break;
}
}
return ;
}

图书管理(单链表C++)的更多相关文章

  1. day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)

    前情提要  Django  已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...

  2. 分离的思想结合单链表实现级联组件:CascadeView

    本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽可能地做到职责分离跟表现与行为分离,这个功能拆分成了2个组件并用到了单链表来实现关键的级联逻辑,下一段有演示效果的gif图.虽然这是个很常见 ...

  3. C语言实现单链表-02版

    我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...

  4. 简单约瑟夫环的循环单链表实现(C++)

    刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...

  5. 66、django之模型层(model)--多表相关操作(图书管理小练习)

    前面几篇随笔的数据库增删改查操作都是在单表的操作上的,然而现实中不可能都是单表操作,更多的是多表操作,一对一,一对多,多对多的表结构才是我们经常需要处理的,本篇将带我们了解多表操作的一些相关操作.也会 ...

  6. C语言 - 栈和单链表的实现

    单链表:linkList.h linkList.c #ifndef LINKLIST_H_INCLUDE #define LINKLIST_H_INCLUDE #include <Windows ...

  7. django之模型层(model)--多表相关操作(图书管理小练习)

    前面几篇随笔的数据库增删改查操作都是在单表的操作上的,然而现实中不可能都是单表操作,更多的是多表操作,一对一,一对多,多对多的表结构才是我们经常需要处理的,本篇将带我们了解多表操作的一些相关操作.也会 ...

  8. 图书管理(Loj0034)+浅谈哈希表

    图书管理 题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. ...

  9. 单链表删除(Delete)或者去除(Remove)节点面试题总结

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76061004冷血之心的博客) 关于单链表反转的多种形式请参见本博文 ...

随机推荐

  1. Scala学习十六——XML处理

    一.本章要点 XML字面量<like>this</like>的类型为NodeSeq 可以在XML字面量中内嵌Scala代码 Node的child属性产出后代节点 Node的at ...

  2. react 管理平台

    https://open.vbill.cn/react-admin/ 开源中国:https://gitee.com/sxfad/react-admin.git GitHub:https://githu ...

  3. [转载]linux的top命令中cpu信息的含义

    https://www.cnblogs.com/wjoyxt/p/4918742.html 原文很好,我就不摘录了.

  4. EF Core的级联删除

    级联删除由DeleteBehavior的枚举值来设置: 行为名称 对内存中的依赖项/子项的影响 对数据库中的依赖项/子项的影响 Cascade 删除实体 删除实体 ClientSetNull 外键属性 ...

  5. MySQL下载安装图文

    一. MySQL下载 1. 进入MySQL官网官网地址:https://www.mysql.com/ 2. 点击DOWNLOADS 3. 点击Community(GPL) Downloads 4. 找 ...

  6. for循环中的闭包

    // 问题1:判断下面一段代码运行的结果是什么? var data = [] for (var i = 0; i < 3; i++) { data[i] = function() { conso ...

  7. 如何对Linux内核参数进行优化?

    打开配置文件 vi /etc/sysctl.conf 输入配置,如下是内核优化的参数 # TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024(将其设置得大一些可以使出现Nginx繁忙来 ...

  8. Android Stdio部分配置

    一.Error:Cause: unable to find valid certification path to requested target主要是在根目录的build.gradle下配置的jc ...

  9. Vue介绍:vue导读3

    一.全局组件 二.父组件传递信息给子组件 三.子组件传递信息给父组件 四.vue项目开发 一.全局组件 <body> <!-- 两个全局vue实例可以不用注册全局组件,就可以使用 - ...

  10. 、M/C/U/简单加/密方法、

    ............................... 一.STM32Flash组织 STM32的Flash包括主存储器(HD版本,512KB)+信息块.信息块包括2KB的系统存储器(用于系统 ...