栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++单链表实现图书管理系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++单链表实现图书管理系统

#include
#include
#include
using namespace std;
typedef class lnode {
public:
	int serial;
	int value;
	string name;
	class lnode* next;
}lnode, * linklist;





//初始化链表
bool initlist(linklist& L)
{
	L = (lnode*)new lnode;//指向头结点
	if (L == NULL)
		return false;//内存不足,分配空间失败
	(*L).next = NULL;//头节点为空
	return true;
}



//在第i个节点插入(链表指针,链表序号,序号s,书名n,价格v)
bool listinsert(linklist& L, int i, int s, string n, int v)
{

	if (i < 1)
		return false;
	lnode* p;//当前扫描到的节点指针
	int j = 0;//p指向的是第几个节点
	p = L;//指向头节点
	while (p != NULL && j < i - 1)//使p指向插入节点的前一个节点
	{
		p = p->next;
		j++;
	}

	if (p == NULL)
		return false;
	lnode* s1 = (lnode*)new lnode;
	s1->serial = s;
	s1->name = n;                                                
	s1->value = v;
	s1->next = p->next;
	p->next = s1;
	return true;
}



//删除第i个节点
bool listdelete(linklist& L, int i)
{
	if (i < 1)
		return false;
	lnode* p;//当前节点指针
	int j = 0;
	p = L;
	while (p != NULL && j < i - 1)//使p指向i-1节点处
	{
		p = p->next;
		j++;
	}

	if (p == NULL)
		return false;
	if (p->next == NULL)
		return false;
	lnode* q = p->next;
	cout << "ceshi";
	p->next = q->next;

	delete q;
	return true;
}



//菜单显示
void menu()
{
	cout << "-------------------------------------------------------------------------" << endl;
	cout << "请操作:" << endl;
	cout << "1:初始化图书链表(从链表标号一插入)" << endl;
	cout << "2:链表序号插入图书信息" << endl;
	cout << "3:链表序号删除图书信息" << endl;
	cout << "4:显示全部图书信息" << endl;
	cout << "5:查找" << endl;
	cout << "6:退出" << endl;
	cout << "-------------------------------------------------------------------------" << endl;
}



void menu2()
{
	cout << "-------------------------------------------------------------------------" << endl;
	cout << "请操作:" << endl;
	cout << "1:按链表位序查找" << endl;
	cout << "2:按书名查找" << endl;
	cout << "-------------------------------------------------------------------------" << endl;
}


void listInitialization(linklist& L)//第一次输入链表
{
	int z;
	cout << "你要输入几本书?" << endl;
	cin >> z;
	int a, b;
	string c;
	for (int i = 1; i <= z; i++)
	{
		cout << "请输入第" << i << "本书的信息,格式为:序号,书名,价格" << endl;
		cin >> a >> c >> b;
		listinsert(L, i, a, c, b);
	}
	cout << "操作完毕" << endl;
}



//选定一个节点,插入多本书
bool listinsertmany(linklist& L)//选定一个节点,插入多本书
{
	int z,i;
	cout << "你要输入几本书的信息?" << endl;
	cin >> z;
	if(z<1)
	{
		cout << "输入错误" << endl;
		return false;
	}
	cout << "要插入到序号几?" << endl;
	cin >> i;


	int a, b;
	string c;
	for (int w=0; w< z;w++, i++)
	{
		cout << "请输入序号为" << i << "的书的信息,格式为:类别编号,书名,价格" << endl;
		cin >> a >> c >> b;
		if (listinsert(L, i, a, c, b))
		cout << "序号为" << i << "的书的信息已成功输入" << endl;
		else
		cout << "超出链表范围" << endl;
	}
	cout << "操作完毕" << endl;
	return true;
}


//按链表位序查找(链表指针,节点位序),返回要查找节点的指针(注意:会返回头结点)
lnode* get_elem_in_order(linklist L, int i)
{

	if (i < 0)
		return NULL;
	lnode* p;
	p = L;
	int j = 0;
	while (p != NULL && j < i) 
	{
		p = p->next;
		j++;
	}
	return p;
}




//按书名查找(链表指针,书名)(注:如未找到,会返回NULL)
lnode* get_elem_by_name(linklist L, string e)
{
	lnode* p = L->next;
	while(p!=NULL&&p->name!=e)
	{
		p = p->next;
	}
	return p;
}

//显示全部图书(链表指针),返回值无意义
bool showall(linklist& L) {
	lnode* p=L->next;//指针p指向节点1
	cout << "------------------------------------------------------------------------" << endl;
	cout << "序号" << setw(20) << "书名" << setw(20) << "价格" << endl;
	for(;p!=NULL;p=p->next)
	{
		cout <<  p->serial << setw(20) << p->name << setw(20) << p->value<serial << setw(20) << p->name << setw(20) << p->value << endl;
		return true;
}





int main()
{
	linklist b;
	lnode* p;
	int a;
	if (initlist(b))
		cout << "链表初始化成功" << endl << endl;
	else
		cout << "链表初始化失败" << endl;
	for (int e = 0; e == 0; e = e + 0)
	{
		menu();

		int c; cin >> c;

		switch (c)
		{
		case 1:listInitialization(b); break;
		case 2:listinsertmany(b); break;

		case 3: 
		      {cout << "删除序号为几的图书?" << endl;
			   int d;//swwitch选择用数
			   cin >> d;
			   listdelete(b, d);
		      }; break;
		case 4:showall(b); break;
		case 5: 
		   {menu2(); int h;cin >> h;
			switch (h)
			   {
			case 1: {int hr; cout << "要查找的书链表位序为" << endl; cin >> hr;show(get_elem_in_order(b, hr)); }; break;
			case 2: {string hg; cout << "要查找的书的名字是" << endl; cin >> hg; show(get_elem_by_name(b, hg)); }; break;
			    }
		   }  break;
		case 6:e++; break;
		default:cout << "请重新输入" << endl;
		}

	}
		cout << "程序退出" << endl;
		return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号