仍旧是因为写作业,作业的要求如题:基于线性表的图书信息管理,这里我用的是顺序表。对顺序表有不了解可以看一下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://scgulin.cn/article/disssd.html