首先,我们的课程设计主要实现的目标是
基于顺序存储结构的图书信息表的创建和输出
基于顺序存储结构的图书信息表的修改
基于顺序存储结构的图书信息表的最贵图书查找
基于顺序存储结构的图书信息表的最爱图书的查找
基于顺序存储结构的图书信息表的新书入库
基于顺序存储结构的图书信息表的旧书出库
基于顺序存储结构的图书信息表的图书去重
以下为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、作者编程较小白,请各位发现问题在评论讲讲,大家共同进步(一厢情愿)。