图书信息管理系统的设计

首先,我们的课程设计主要实现的目标是

基于顺序存储结构的图书信息表的创建和输出

基于顺序存储结构的图书信息表的修改

基于顺序存储结构的图书信息表的最贵图书查找

基于顺序存储结构的图书信息表的最爱图书的查找

基于顺序存储结构的图书信息表的新书入库

基于顺序存储结构的图书信息表的旧书出库

基于顺序存储结构的图书信息表的图书去重

以下为SqList.h

#ifndef LIST_H
#define LIST_H

typedef struct{
	char no[20];	//13位书号
	char name[40];	//书名
	double price;	//价格 
}Book;

class SqList
{
	public:
		SqList();

		void Cout();	//输出 
		void profitMargin();	//奸商赚差价 
		void getMostExpensive();//获取最贵的书目 
		void getMostLove();//最喜欢的书目 
		void newBookInput(int place);//新书入库 
		void outPutOldBook(int place);//旧书出库 
		void delRepet();
	private:
		Book elem[100];
		int length;
		Book MostLove;
};

#endif

以下为SqList.cpp

#include "SqList.h"
#include<iostream>
#include<iomanip>
using namespace std;
#include"SqList.h"
#pragma once

SqList::SqList(){
	cout<<"请按顺序输入书号;书名;价格;如想结束,请连续输入0"<<endl;
	length=0;
	elem->price=0;
	Book B[20];
	for(;;length++){
		cin>>B[length].name;
		cin>>B[length].no;
		cin>>B[length].price;
		if(B[length].name[0]=='0'&&B[length].no[0]=='0'&&B[length].price==0.0)
			break;
	}
	for(int i=0;i<length;i++)
		elem[i]=B[i];
	MostLove.name[0]='0';MostLove.name[1]='\0';//初始化最爱书目的名字 
	MostLove.price=0;
}

void SqList::Cout(){
	for(int len=0;len<length;len++){
		cout.setf(ios::fixed);
		cout <<elem[len].name<<'\t';
		cout<<elem[len].no<<'\t'<<fixed<<setprecision(2)<<elem[len].price<<endl;
	}
	cout<<"______________________________________"<<endl;
}

void SqList::profitMargin(){
	double Average=0;
	for(int len=0;len<length;len++)
		Average+=elem[len].price;
	Average/=length;
	for(int len=0;len<length;len++){
		if(elem[len].price<Average)
			elem[len].price*=1.2;
		else
			elem[len].price*=1.1;
	}
	cout<<"所有书目的平均价格为:"<<Average<<endl;
	Cout();
}

void SqList::getMostExpensive(){
	double MostExpensive=0.0;
	for(int len=0;len<length;len++)
		if(MostExpensive<elem[len].price)
			MostExpensive=elem[len].price;
	
	cout<<"______________________________________"<<endl;
	for(int len=0;len<length;len++)
		if(MostExpensive==elem[len].price)
			cout<<"最贵书目为:"<<elem[len].no<<'\t'<<fixed<<setprecision(2)<<elem[len].price<<endl;
	cout<<"______________________________________"<<endl;
	Cout();
}

void SqList::getMostLove(){
	if(MostLove.name[0]=='0'&&MostLove.name[1]=='\0'){
		cout<<"目前还未输入最爱的书目,请输入最爱书目的名字:";
		cin>>MostLove.name;
	}
	bool judge=0;
	cout<<"______________________________________"<<endl;
	for(int len=0;len<length;len++)
		for(int i=0;i<13;i++)
		{
			if(MostLove.name[i]==elem[len].no[i]&&i==12)
			{
				cout<<"最爱书目为:"<<elem[len].no<<'\t'<<fixed<<setprecision(2)<<elem[len].price<<endl;
				judge=1;
				break;
			}
			if(len==length-1&&judge==0)
			{
				cout<<"抱歉,没有你的最爱"<<endl;
				break;
			}
			if(MostLove.name[i]!=elem[len].no[i])
				break;
		}
	cout<<"______________________________________"<<endl;
	Cout();
	cout<<"是否更改最爱书目的名字?(Y/N)";
	char judge_ID;
	cin>>judge_ID;
	if(judge_ID=='Y'||judge_ID=='y')
		cin>>MostLove.name;
}

void SqList::newBookInput(int place){
	cout<<"______________________________________"<<endl;
	if(place>length||place<=0){
		cout<<"抱歉,输入位置非法!"<<endl;
		cout<<"请选择位于第 1 行至第 "<<length<<" 行的位置!"<<endl;
	}
	else{
		length++;
		for(int i=length;i>place;i--)
			elem[i]=elem[i-1];
		cout<<"请按顺序输入书号;书名;价格;"<<endl;
		cin>>elem[place].name;
		elem[place].name[13]='\0'; 
		cin>>elem[place].no;
		cin>>elem[place].price;
		cout<<"______________________________________"<<endl;
	}
	Cout();
}

void SqList::outPutOldBook(int place){
	cout<<"______________________________________"<<endl;
	if(place>length||place<=0){
		cout<<"出库失败,未找到该图书!"<<endl;
		cout<<"请选择位于第 1 行至第 "<<length<<" 行的位置!"<<endl;
		}
	else{
		for(int i=place;i<length;i++)
			elem[i]=elem[i+1];
		length--;
		cout<<"出库成功!"<<endl;
	}
}

void SqList::delRepet(){
	int times=0;
	for(int len=0;len<length-1;len++)
		for(int i=len+1;i<length;i++)
			for(int j=0;elem[i].no[j]!='\0';j++){
				if(elem[i].no[j]!=elem[len].no[j])
				{	break;}
				else
					if(j==12){
						outPutOldBook(i);
						times++;
					}
			}
	cout<<"重复的书目共有:"<<times<<"本"<<endl; 
	Cout();
}

以下为主函数:

#include<iostream>
#include<iomanip>
using namespace std;
#include"SqList.h"
int main(){
	SqList Sq;
	
	for(bool judge=0;judge==0;){
		cout<<"1、输出图书信息表"<<'\n'<<"2、信息表的修改"<<'\n'<<"3、最贵书目查找"<<'\n'<<"4、最爱书目查找"<<'\n'<<"5、新书入库"<<'\n'<<"6、旧书出库"<<'\n'<<"7、查找删除重复书目"<<'\n'<<"8、退出系统"<<'\n';
		int judge_1;
		cin>>judge_1;
		switch (judge_1){
		case 1:
			Sq.Cout();break;
		case 2:
			Sq.profitMargin();break;
		case 3:
			Sq.getMostExpensive();break;
		case 4:
			Sq.Cout();
			Sq.getMostLove();break;
		case 5:
			Sq.Cout();
			cout<<"请输入入库的位置:(第几行)"<<endl;
			int place;
			cin>>place;
			Sq.newBookInput(place-1);
			break;
		case 6:
			Sq.Cout();
			cout<<"请输入出库的位置:(第几行)"<<endl;
			int place_2;
			cin>>place_2;
			Sq.outPutOldBook(place_2-1);
			break;
		case 7:	
			Sq.delRepet();break;
		default :
			break;
		}
		system("pause");
		system("CLS");
		if(judge_1==8)
			break;
	}
	cout<<"---------------谢谢使用,再会!----------------"<<endl; 
	system("pause");
	return 0;
}

注:1、作者使用的编译器为Dev5.11版本,若出现奇奇怪怪的bug这个锅不背

       2、system("CLS");是清屏函数,若有需求可删去。

       3、作者编程较小白,请各位发现问题在评论讲讲,大家共同进步(一厢情愿)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值