图书管理(单链表C++)
#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++)的更多相关文章
- day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)
前情提要 Django 已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...
- 分离的思想结合单链表实现级联组件:CascadeView
本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽可能地做到职责分离跟表现与行为分离,这个功能拆分成了2个组件并用到了单链表来实现关键的级联逻辑,下一段有演示效果的gif图.虽然这是个很常见 ...
- C语言实现单链表-02版
我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...
- 简单约瑟夫环的循环单链表实现(C++)
刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...
- 66、django之模型层(model)--多表相关操作(图书管理小练习)
前面几篇随笔的数据库增删改查操作都是在单表的操作上的,然而现实中不可能都是单表操作,更多的是多表操作,一对一,一对多,多对多的表结构才是我们经常需要处理的,本篇将带我们了解多表操作的一些相关操作.也会 ...
- C语言 - 栈和单链表的实现
单链表:linkList.h linkList.c #ifndef LINKLIST_H_INCLUDE #define LINKLIST_H_INCLUDE #include <Windows ...
- django之模型层(model)--多表相关操作(图书管理小练习)
前面几篇随笔的数据库增删改查操作都是在单表的操作上的,然而现实中不可能都是单表操作,更多的是多表操作,一对一,一对多,多对多的表结构才是我们经常需要处理的,本篇将带我们了解多表操作的一些相关操作.也会 ...
- 图书管理(Loj0034)+浅谈哈希表
图书管理 题目描述 图书管理是一件十分繁杂的工作,在一个图书馆中每天都会有许多新书加入.为了更方便的管理图书(以便于帮助想要借书的客人快速查找他们是否有他们所需要的书),我们需要设计一个图书查找系统. ...
- 单链表删除(Delete)或者去除(Remove)节点面试题总结
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76061004冷血之心的博客) 关于单链表反转的多种形式请参见本博文 ...
随机推荐
- 正则表达式(Regular Expression)分组(Group)
基本语法 (exp)匹配exp, 并捕获文本到自动命名的组里 (?<name>exp) 自己命名分组 static void Main(string[] args) { ...
- dev gridview 单元格值拖拽替换
public class GridViewDropCell { //dvginfo根据鼠标点击的x.y坐标获取该点的相关信息 private GridHitInfo downHitInfo; priv ...
- 使用XPath爬取网页数据
我们以我的博客为例,来爬取我所有写过的博客的标题. 首先,打开我的博客页面,右键“检查”开始进行网页分析.我们选中博客标题,再次右键“检查”即可找到标题相应的位置,我们继续点击右键,选择Copy,再点 ...
- 禁止Steam VR随着虚幻4自动启动
1.禁止启动UE4的时候启动修改这个文件Program Files\Epic Games\XXXX\Engine\Plugins\Runtime\Steam\SteamVR\SteamVR.uplug ...
- bash shell脚本之查看当前日期以及登陆用户
查看当前日期以及登陆用户: cat test1: #!/bin/bash # This script displays the date and who's logged on echo -n The ...
- 行级安全(Row
通过授予和拒绝(Grant/Deny)命令控制用户的权限,只能控制用户对数据库对象的访问权限,这意味着,用户访问的粒度是对象整体,可以是一个数据表,或视图等,用户要么能够访问数据库对象,要么没有权限访 ...
- Win8电脑更新出现错误代码80070003的解决方法
有Win8系统用户在进行KB2894853更新时会碰到系统报错的问题,错误代码是80070003,那么在遇到这个问题的时候,我们该怎么去解决呢?下面好系统U盘启动就来告诉你相应的解决方法. Win8系 ...
- ffmpeg 命令行 杂记
输入mp4文件中的音频每一帧的信息 ffprobe -show_streams -select_streams a -show_format -show_frames .\HYUNDAIMOBIS.m ...
- 原生js为页面添加爱心特效和判断手机端还是电脑端登录
<!-- 为页面添加爱心特效 --> <script type="text/javascript"> (function (window, document ...
- 关于JPype报FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/jvm'错误的解决
部署到线上的项目正常运行一年,今天早上突然报FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/jvm'错误. JPyp ...