#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. Django rest-framework框架-解析器

    解析器: 开始: django: request.POST/ request.body 满足一下两个要求POST中才有值 1. 如果请求头中的 Content-Type: application/x- ...

  2. sketch最强切图工具Sketch Measure

    https://www.inpandora.com/sketch-measure.html https://www.jianshu.com/p/c11ae88e6b1d

  3. IOS开发copy,nonatomic, retain,weak,strong用法

     readwrite 是可读可写特性;需要生成getter方法和setter方法时  readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变  ass ...

  4. 【atcoder】Enclosed Points [abc136F]

    题目传送门:https://atcoder.jp/contests/abc136/tasks/abc136_f 题目大意:在平面上有$n$个点我们,定义一个点集的权值为平面上包含这个点集的最小矩形所包 ...

  5. kubernetes容易混淆的几个端口

    k8s服务的配置文件中几个端口参数,nodePort.port.targetPort,刚开始的时候不理解什么意思很容易混淆写错,这里总结一下,概括来说就是nodePort和port都是k8s的serv ...

  6. golang结构体json格式化的时间格式

    golang结构体json格式化的时间格式 在我们开发中,经常会解析time.Time 往往前台传过来的时候,是个string 但是我们希望在结构体转成time.Time type Param str ...

  7. Ubuntu下PHP+MySQL+Apache+PHPStorm的安装和配置

    粘贴自:https://www.jianshu.com/p/a6a0d2a29591 1.Apache的安装: $ sudo apt-get update $ sudo apt-get install ...

  8. Linux学习日志(一)

    1 .Ubuntu 自带python 2 和 python 3的版本,切换方法如下: shell里执行: sudo update-alternatives --install /usr/bin/pyt ...

  9. vulkan 的icb

    https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/chap30.html#device-generated-comma ...

  10. C语言例题

    1.连接两个字符串 将两个字符串连接,不要用stract函数 2.求矩阵外围元素之和 求3行3列矩阵的外围元素之和. 3.求矩阵主对角线和副对角线元素之和 求5行5列矩阵的主对角线和副对角线元素之和. ...