#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. mac 下 vscode配置SFTP连接

    VScode中使用SFTP插件连接远程服务器进行文件修改 下载SFTP插件后,使用Ctrl+Shift+P.输入SFTP,选择第一个将会生成简短的默认配置文件 然后把sftp.json文件内内容换成以 ...

  2. 张小龙用这8句话表达了NB产品的一切(转)

    1.一个好的产品应该是用完即走 真正好的产品,应该是让用户提高效率而不是消磨时光.但现在大部分用户使用微信的时间让我们很担忧. 包括我们自己的同事,在开会的时候,有同事隔两分钟就看一下手机,我觉得他们 ...

  3. footer始终在页面最底部的方法(问题待检验)

    一.css方法 <style type="text/css"> html,body{ height: 100%; } body{ display: flex; flex ...

  4. 安卓开发之sql语句增删改查2(利用谷歌封装好的API进行增删改查)

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  5. 安卓开发之利用XmlPullParser解析XML文件

    package com.lidaochen.phonecall; import android.support.v7.app.AppCompatActivity; import android.os. ...

  6. mORMot学习笔记 (一)

    官方网站:https://synopse.info/fossil/wiki/Synopse+OpenSource 下载地址:https://synopse.info/fossil/wiki?name= ...

  7. Scala高阶函数与泛型

    1. Scala中的函数 在Scala中,函数是“头等公民”,就和数字一样.可以在变量中存放函数,即:将函数作为变量的值(值函数). 2. scala中的匿名函数,即没有函数名称的函数,匿名函数常作为 ...

  8. Phoenix安装批次提交插入更新语句

    1 贴一下官方的代码 https://phoenix.apache.org/tuning_guide.html try (Connection conn = DriverManager.getConn ...

  9. java——多线程并发库

    JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性. java.util.current包中提供了对线程优化.管理的各项操作,使得线程的使用变得的心应手.该 ...

  10. gerapy+scrapyd组合管理分布式爬虫

    Scrapyd是一款用于管理scrapy爬虫的部署和运行的服务,提供了HTTP JSON形式的API来完成爬虫调度涉及的各项指令.Scrapyd是一款开源软件,代码托管于Github上. 点击此链接h ...