数据结构—— 线性表的顺序表示与实现小程序(用线性表制作图书管理系统)

《图书信息管理系统》的制作:

例:
在这里插入图片描述
全部代码如下(各部分已注释):

#include "pch.h"
#include<string>
#include<fstream>
#include <iomanip>
#include <iostream>

using namespace std;
#define MAXSIZE  100

struct Book
{
	string id;
	string name;
	double price;
};

//顺序表结构体
struct SqList
{
	Book *elem;		//线性表初始位置
	int length;		//线性表长度

};

//初始化线性表
void initSqList(SqList &L)
{
	L.elem = new Book[MAXSIZE];
	if (!L.elem)
	{
		exit(0);
	}
	L.length = 0;
}

//线性表的取值
int GetElem(SqList &L, int i, Book &e)
{
	if (i<1||i>L.length)
	{
		return -1;
	}

	e=L.elem[i - 1];
	return 0;
} 

//线性表的查找
int LocateElem(SqList &L,string e)
{
	for (int i = 0; i < L.length; i++)
	{
		if (L.elem[i].id==e)
		{
			cout << "所查找书籍信息为:";
			cout << L.elem[i].id << "          ";
			cout << L.elem[i].name << "          ";
			cout << L.elem[i].price << endl;
			cout << "书籍查找成功!!" << endl;
			return i + 1;
		}
	}
	cout << "查无此书!!" << endl;
	return 0;
}

//线性表的插入
int InsertSqList(SqList &L, int i, Book e)
{
	//是否超出线性表的区间范围
	if (i<1||i>L.length+1)
	{
		return -1;
	}
	//当前元素超过线性表长度则无法插入
	if (L.length==MAXSIZE)
	{
		return -1;
	}

	//
	for (int j = L.length-1; j>=i-1; j--)
	{
		L.elem[j + 1] = L.elem[j];
	}
	L.elem[i - 1] = e;
	++L.length;
	return 1;
}

//线性表的删除
int DeleteSqList(SqList &L, int i)
{
	//是否超出线性表的区间范围
	if (i<1 || i>L.length + 1)
	{
		return 0;
	}
	for (int j = i; j <=L.length; j++)
	{
		L.elem[j - 1] = L.elem[j];
	}
	--L.length;
	return 1;
}

int main()
{
	SqList L;
	int c;					//删除书籍位置
	int choice = -1;
	string str1, str2, str3;

	cout << "*****************************************" << endl;
	cout << "******          图书管理系统        *****" << endl;
	cout << "*****************************************" << endl;
	cout << "******      1.建立       2.录入     *****" << endl;
	cout << "******      3.取值       4.查找     *****" << endl;
	cout << "******      5.插入       6.删除     *****" << endl;
	cout << "******      7.输出       0.退出     *****" << endl;
	cout << "*****************************************" << endl;

	while (choice != 0)
	{
		cout << "请输入操作指令【0-7】" << endl;

		cin >> choice;
		int i = 0;
		switch (choice)
		{
			
		case 1:
		{
			initSqList(L);
			cout << "顺序表创建成功" << endl;
			cout << endl;
			cout << "*****************************************" << endl;
			cout << "******          图书管理系统        *****" << endl;
			cout << "*****************************************" << endl;
			cout << "******      1.建立       2.录入     *****" << endl;
			cout << "******      3.取值       4.查找     *****" << endl;
			cout << "******      5.插入       6.删除     *****" << endl;
			cout << "******      7.输出       0.退出     *****" << endl;
			cout << "*****************************************" << endl;

			break;
		}
		case 2:
		{
			L.elem = new Book[MAXSIZE];
			if (!L.elem)
			{
				exit(0);
			}
			L.length = 0;

			fstream file;
			file.open("book.txt");

			file >> str1 >> str2 >> str3;

			while (!file.eof())
			{
				file >> L.elem[i].id >> L.elem[i].name >> L.elem[i].price;
				i++;
			}
			cout << "book书库书籍信息导入成功" << endl;

			L.length = i;
			file.close();
			cout << endl;
			cout << "*****************************************" << endl;
			cout << "******          图书管理系统        *****" << endl;
			cout << "*****************************************" << endl;
			cout << "******      1.建立       2.录入     *****" << endl;
			cout << "******      3.取值       4.查找     *****" << endl;
			cout << "******      5.插入       6.删除     *****" << endl;
			cout << "******      7.输出       0.退出     *****" << endl;
			cout << "*****************************************" << endl;

			break;

		}
		case 3:
		{
			cout << "请输入取值图书位置:";
			cin >> i;
			Book em;
			GetElem(L,i,em);
			cout << em.id << "          ";
			cout << em.name << "          ";
			cout << em.price << endl;
			cout << "书籍取值成功!" << endl;
			cout << endl;
			cout << "*****************************************" << endl;
			cout << "******          图书管理系统        *****" << endl;
			cout << "*****************************************" << endl;
			cout << "******      1.建立       2.录入     *****" << endl;
			cout << "******      3.取值       4.查找     *****" << endl;
			cout << "******      5.插入       6.删除     *****" << endl;
			cout << "******      7.输出       0.退出     *****" << endl;
			cout << "*****************************************" << endl;
			break;
		}
		case 4:
		{
			Book em;	
			cout << "请输入查找图书编号:";
			cin >>em.id;
			LocateElem(L, em.id);

			cout << endl;
			cout << "*****************************************" << endl;
			cout << "******          图书管理系统        *****" << endl;
			cout << "*****************************************" << endl;
			cout << "******      1.建立       2.录入     *****" << endl;
			cout << "******      3.取值       4.查找     *****" << endl;
			cout << "******      5.插入       6.删除     *****" << endl;
			cout << "******      7.输出       0.退出     *****" << endl;
			cout << "*****************************************" << endl;

			break;
		}
		case 5:
		{
			cout << "请输入所要插入的位置:";
			cin >> i;
			Book em;
			cout << "请输入所要插入书籍的ID,书名,价格:";
			cin >> em.id >> em.name >> em.price;
			InsertSqList(L, i, em);
			cout << "书籍插入成功!" << endl;
			cout << endl;
			cout << "*****************************************" << endl;
			cout << "******          图书管理系统        *****" << endl;
			cout << "*****************************************" << endl;
			cout << "******      1.建立       2.录入     *****" << endl;
			cout << "******      3.取值       4.查找     *****" << endl;
			cout << "******      5.插入       6.删除     *****" << endl;
			cout << "******      7.输出       0.退出     *****" << endl;
			cout << "*****************************************" << endl;

			break;
		}
		case 6:
		{
			cout << "请输入要删除书籍位置:";
			cin >> c;
			if (DeleteSqList(L, c))
			{
				cout << "书籍删除成功!" << endl;
			}
			else
			{
				cout << "书籍删除失败!" << endl;
			}
			cout << endl;
			cout << "*****************************************" << endl;
			cout << "******          图书管理系统        *****" << endl;
			cout << "*****************************************" << endl;
			cout << "******      1.建立       2.录入     *****" << endl;
			cout << "******      3.取值       4.查找     *****" << endl;
			cout << "******      5.插入       6.删除     *****" << endl;
			cout << "******      7.输出       0.退出     *****" << endl;
			cout << "*****************************************" << endl;

			break;
		}
		case 7:
		{
			cout << "当前图书管理系统的所有图书信息如下:" << endl;
			for (int i = 0; i < L.length; i++)
			{
				cout << L.elem[i].id << setw(25);
				cout << L.elem[i].name << setw(15);
				cout << L.elem[i].price << endl;
			}
			cout << endl;
			cout << "*****************************************" << endl;
			cout << "******          图书管理系统        *****" << endl;
			cout << "*****************************************" << endl;
			cout << "******      1.建立       2.录入     *****" << endl;
			cout << "******      3.取值       4.查找     *****" << endl;
			cout << "******      5.插入       6.删除     *****" << endl;
			cout << "******      7.输出       0.退出     *****" << endl;
			cout << "*****************************************" << endl;

			break;
		}
		case 0:
		{
			break;
		}
		}
	}
	return 0;
}

结果为:
在这里插入图片描述

发布了35 篇原创文章 · 获赞 27 · 访问量 968

猜你喜欢

转载自blog.csdn.net/weixin_45525272/article/details/104301494