C++基于线性表的图书信息管理-创新互联

仍旧是因为写作业,作业的要求如题:基于线性表的图书信息管理,这里我用的是顺序表。对顺序表有不了解可以看一下http://t.csdn.cn/cGDdG

我们提供的服务有:成都网站设计、成都网站制作、外贸网站建设、微信公众号开发、网站优化、网站认证、爱民ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的爱民网站制作公司

  写的比较简单还有点潦草,用的是http://t.csdn.cn/cGDdG非常简单的思路,以及非常易懂的代码写法。

  首先,我们要确定的是,需要管理的图书信息:1.书名、2.作者名。

图书名字和作者名字,可以用来管理的类型,常规来讲就两种,char数组,或者string,后者我是我一开始的选择,但是在“终端获取信息并存储”这个步骤上,引发了断点,所以最后用了char数组进行管理。

  其实char数组进行管理的话,在遍历的时候,大致是有两种输出方式:for循环遍历(这就要求知道数组内字符的数量),以及printf("%s",xxx);

  我采用的是for遍历,因此在设置了额外的变量,来存储数组内的字符长度。

  

  当然,其实一开始我是不想设置这两个额外的变量的,我本意是打算用length() 来获取长度的,但是发现不行,获取到的始终是一个固定的数值4,原因不深究,总之是不能这么干。

#pragma once
#include#define SEQLIST_INIT_SIZE  100;
#define SeqList_h
using namespace std;

class Books
{
public:
	char name[20];
	int nameNum;//存储图书名字长度
	char author[20];
	int authorNum;//存储作者名字长度;
};

然后确定我们的顺序表的内容:1.容量、2.当前储存量、3.存储的数据

以及我们需要实现的功能:

class SeqList
{
private:
	int capacity;//容量;
	int size;//当前元素个数;
	Books* books;//指向动态内存分配的空间的指针;
public:
	//初始化线性表
	SeqList* initSeqList(SeqList* list);
	//新增图书;
	void push_back(SeqList* list);
	//展示图书内容
	void show(SeqList* list);
	//展示当前图书的数量;
	void showLen(SeqList* list);
	//判断管理的书籍是否为空;
	bool empty(SeqList* list);
	//删除第几本书;
	void earse(SeqList* list, int pos);
	//析构函数
	~SeqList();
};

1.初始化线性表

#include"books.h"
#include"string"

//初始化顺序表;
SeqList* SeqList::initSeqList(SeqList* list)
{
	list->capacity = SEQLIST_INIT_SIZE;
	list->size = 0;
	list->books = (Books*)malloc(sizeof(Books));
	return list;
}

2.新增图书

因为不能直接从终端获取字符存进   list->books[n].name,(至于为什么不能,是因为cin不能用,用scanf不符合条件),所以这里我是用了string类型的变量来进行一个临时的存储,然后再给  list->books[n].name  进行赋值。

//在链表末尾插入图书元素;
void SeqList::push_back(SeqList* list)
{
	//如果没有存满元素
	if (list->size< list->capacity)
	{
		string sname, sauthor;
		cout<< "请输入要添加的图书名字:"<< endl;
		cin >>sname;
		//把这个长度赋给nameNum;
		list->books[list->size].nameNum = sname.length();
		for (int i=0;ibooks[list->size].name[i] = sname[i];
		}

		cout<< "请输入该图书的作者名字:"<< endl;
		cin >>sauthor;
		list->books[list->size].authorNum = sauthor.length();
		for (int i = 0; i< sauthor.length(); i++)
		{
			list->books[list->size].author[i] = sauthor[i];
		}

		list->size++;
	}
	else
	{
		printf("顺序表已满,无法插入");
	}
};

3.展示图书内容

  就是非常简单的循环套循环的写法,外面是个大循环,循环 i 本书,里面两个小循环,执行规则是:第一个小循环结束,进入第二个小循环。

第一个小循环输出图书名字,第二个小循环输出作者名字。

//展示链表中的图书内容
void SeqList::show(SeqList* list)
{
	for (int i = 0; i< list->size; i++)
	{
		cout<< "书名为:"<< endl;
		for (int j = 0; j< list->books[i].nameNum; j++)
		{
			cout<< list->books[i].name[j];
		}
		cout<< endl<<"该书作者为:"<< endl;

		for (int j = 0; j< list->books[i].authorNum; j++)
		{
			cout<< list->books[i].author[j];
		}
		cout<< endl;
	}
}

4.展示当前的图书数量

//展示图书管理的链表的长度;
void SeqList::showLen(SeqList* list)
{
	cout<< "当前图书馆的图书数量为:"<< list->size<< endl;
}

5.判断管理的图书是否为空

//判断链表是否为空;
bool  SeqList::empty(SeqList* list)
{
	return list->size == 0;
}

6.删除某本书籍

//删除指定位置的书籍,pos是书的位置;
void  SeqList::earse(SeqList* list, int pos)
{
	if (empty(list))
		return;

	for (int i = pos; i< list->size; i++)
	{
		list->books[i] = list->books[i + 1];
	}

	list->size--;
}
SeqList::~SeqList()
{
}

最后是主函数,对这些方法的调用:

#pragma once
#include#include"books.h"
#define SeqList_h
using namespace std;

int main() 
{
	SeqList ls;//实例化一个对象;
	ls.initSeqList(&ls);
	int num;
	cout<< "请输入想添加的书籍的数量:"<< endl;
	cin >>num;
	for (int i = 0; i< num; i++)
	{
		ls.push_back(&ls);
	}

	ls.show(&ls);
	int pos;
	cout<< "从零开始计算,请输入想要删除的书籍排序:"<< endl;
	cin >>pos;
	ls.earse(&ls, pos);

	ls.showLen(&ls);
	ls.show(&ls);

	return -1;
	system("pause");
}

  放一个我的运行结果:

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:C++基于线性表的图书信息管理-创新互联
本文网址:http://myzitong.com/article/disssd.html