【无标题】C++实现 图书管理系统 (涉及嵌套结构)

book.h

//book.h
struct Book
{
	char name[50];
	float price;
	int count;
	Book *next;
};


void addBook(Book* head);//1
void listBook(Book* head);//2
void findBook(Book* head, char* name);//3
void editBook(Book* head, char* name);//4
void statBook(Book* head);//5

void sort(Book* head);//7
void menu();

book.cpp

//book.cpp
#include <iostream>
#include <iomanip>
#include<cstring>

#include "book.h"

using namespace std;

void menu()
{
	cout<<"************图书销售管理系统****************"<<endl;
	cout<<"            1. 添加图书"<<endl;
	cout<<"            2. 显示图书信息"<<endl;
	cout<<"            3. 查找图书"<<endl;
	cout<<"            4. 修改图书信息"<<endl;
	cout<<"            5. 图书信息统计"<<endl;
	cout<<"            6. 清除屏幕重置"<<endl;
	cout<<"            7. 排序"<<endl;
	cout<<"            0. 退出系统"<<endl;
	cout<<"*******************************************"<<endl;
	cout<<"输入对应的编号,执行相应的功能:"<<endl;
}
void addBook(Book *head)
{ 
	//移动到尾链的尾部。
	Book *p=head;
	while(p->next)
	{
		p=p->next;
	}
	
	Book *book=new Book;
	
    cout<<"请依次输入图书的名称、价格和数量"<<endl;
    cin>>book->name>>book->price>>book->count;
	
	p->next=book;
	book->next=NULL;

	system("cls");
	cout<<"信息输入完毕。"<<endl;
	menu(); 
}
void listBook(Book *head)
{
	Book *p=head->next;
	while(p)
	{
		cout<<p->name<<" "<<p->price<<" "<<p->count<<endl;
		p=p->next;
	}

	cout<<"信息输出完毕,请选择操作代码:"<<endl;
}
void findBook(Book* head, char* name)
{
	Book* p = head->next;
	while (strcmp(p->name, name))//名称查找
	{
		p = p->next;
	}

	cout << "您要查找的图书价格为: " << p->price << endl;
	cout << "您要查找的图书库存为: " << p->count << endl;

	cout << "查找完毕,请选择操作代码:" << endl;
}
void editBook(Book* head, char* name)
{
	Book* p = head->next;
	while (strcmp(p->name, name))//名称查找
	{
		p = p->next;
	}

	cout << "您要把它的价格修改为: " << endl;
	cin >> p->price;
	cout << "您要把它的库存修改为: " << endl;
	cin >> p->count;

	cout << "信息修改成功,请选择操作代码:" << endl;
}
void statBook(Book* head)
{
	double sum_price = 0; int sum = 0;
	Book* p = head->next;
	while (p)
	{
		sum_price += p->price * p->count;
		sum += p->count;
		p = p->next;
	}

	cout << "图书总的数量为: " << sum << endl;
	cout << "图书价格的平均值为: " << sum_price / sum << endl;

    cout<<"统计完成,请选择操作代码:"<<endl;
}
void sort(Book * head)
{
	Book* p = head->next;
	Book* P[100];
	int n = 0;
	while (p)
	{
		P[n] = p;
		n++;
		p = p->next;
	}

	cout << "该排序为价格排序,请选择:1、升序  2、降序" << endl;
	int ch; 

	while (1)
	{
		cin >> ch;
		if (ch == 1)
		{
			for (int i = 0; i < n - 1; i++)//冒泡排序
			{
				for (int j = 0; j < n - i - 1; j++)
				{
					if (P[j]->price > P[j + 1]->price)
					{
						Book* temp = P[j];
						P[j] = P[j + 1];
						P[j + 1] = temp;
					}
				}
			}
			break;
		}
		else if (ch == 2)
		{
			for (int i = 0; i < n - 1; i++)//反向冒泡排序
			{
				for (int j = 0; j < n - i - 1; j++)
				{
					if (P[j]->price < P[j + 1]->price)
					{
						Book* temp = P[j];
						P[j] = P[j + 1];
						P[j + 1] = temp;
					}
				}
			}
			break;
		}
		else
		{
			cout << "输入错误,请重新输出" << endl;
		}
	}

	for (int i = 0; i < n; i++)
		cout << P[i]->name << " " << P[i]->price << " " << P[i]->count << endl;

	cout << "排序完成,请选择操作代码: " << endl;
}

main.cpp

//main.cpp
#include <iostream>
#include <iomanip>
#include <cstring>

#include "book.h" 

using namespace std;

struct Book *head=new Book;

int main()
{
	int ch;

	head->next = NULL;

	menu();

	while (1)
	{
		cin >> ch;
		switch (ch)
		{
		case 1: addBook(head);
			break;
		case 2: listBook(head);
			break;
		case 3:
		{
			cout << "请输入要查找的图书名称: " << endl;
			char name[50];
			cin >> name;
			findBook(head, name);
			break;
		}
		case 4: 
		{
			cout << "请输入要修改的图书名称: " << endl;
			char name[50];
			cin >> name;
			editBook(head, name);
			break;
		}
		case 5: statBook(head);
			break;
		case 6: system("cls");
			menu();
			break;
		case 7: sort(head);
			break;
		case 0: exit(0);
			break;

		default:
			cout << "选择错误,请重新选择。" << endl;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_62468874/article/details/121891874
今日推荐