第1个回答 2008-02-05
//以前做的一个,参考哈吧
/*c++程序设计:书店销售管理软件:
本系统使用计算机对书店的销售进行管理,该书店拥有最多图书不超过200本
,每本图书的信息包括:书名、书号(出版序列号)、编号、出版社、作者、定价、库存量、出版日期等
现要求用菜单选择并完成下述的功能:
(1)增加新图书,即将图书的全部信息输入到文件中;
(2)根据销售情况和采购情况实时修改图书文件中的库存量;
(3)根据当天日期修改图书价格:1年前出版的图书打九折,两年前出版的打八折,
三年前出版的全部打七折
(4)根据书名查询某本图书的信息
(5)分别打印根据库存量和出版日期排序的结果*/
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
class Date //定义日期类
{
public:
void set_date(); //设置日期
void show_date(); //显示日期
int year;
int mouth;
int day;
};
void Date:: set_date()
{
cout<<"输入year mouth day:";
cin>>year>>mouth>>day;
bool teap=true;
while(teap==true)
{
if(year>2020||mouth>12||mouth<0||day<0||day>31)//默认输入年必须在2020年以前
{
cout<<"\t您的输入有错误!请重新输入!\n";
cout<<"输入year mouth day:";
cin>>year>>mouth>>day;
}
else teap=false;
}
}
void Date:: show_date()
{
cout<<year<<'/'<<mouth<<'/'<<day;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
class books //定义图书类
{
public:
void get_books(); //录入图书信息
void display(); //显示图书的信息
void display2(); //显示图书的信息
void f(books b); //用来交换图书信息,排序的时候用
void chang_price(Date dt); //根据当天日期修改图书价格
void chang_sum(); //修改图书文件中的库存量
void name_show(); //根据书名查询某本图书的信息
int sum; //库存量
Date date; //日期
string name;
private:
string num; // 书号
string serial_num; //编号
string pub_comp; //出版社
string Author; // 作者
float price;
};
books book[200];
int t; //定义全局变量t累计书的种类
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void books::get_books() //录入图书信息,注意:以下录入时都是以回车结束的,若录入时候用到了空格,查询和修改时也要记得录入空格,否则会出错
{
cout<<"书名:";
cin>>name;
cout<<"\n书号(出版序列号):";
cin>>num;
cout<<"\n编号:";
cin>>serial_num;
cout<<"\n出版社:";
cin>>pub_comp;
cout<<"\n作者:";
cin>>Author;
cout<<"\n定价:";
cin>>price;
cout<<"\n库存量:";
cin>>sum;
cout<<"\n出版日期:";
date.set_date();
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void books::display()//显示图书的信息
{
cout<<"书名"<<setw(10)<<"书号"<<setw(10)<<"编号"<<setw(10)<<"出版社"
<<setw(10)<<"作者"<<setw(10)<<"定价"<<setw(10)<<"库存量"<<setw(10)
<<"出版日期\n";
cout<<name<<setw(10)<<num<<setw(10)<<serial_num
<<setw(10)<<pub_comp<<setw(10)<<Author<<setw(10)<<price
<<setw(10)<<sum<<" ";
date.show_date();
cout<<endl;
}
void books::display2()//显示图书的信息
{
cout<<name<<setw(10)<<num<<setw(10)<<serial_num
<<setw(10)<<pub_comp<<setw(10)<<Author<<setw(10)<<price
<<setw(10)<<sum<<" ";
date.show_date();
cout<<endl;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void books::f(books b)//用来交换图书信息,排序的时候用
{
string c;
int a;
float d;
a=sum;sum=b.sum;b.sum=a;
a=b.date.year;b.date.year=date.year ;date.year=a;
a=b.date.mouth;b.date.mouth=date.mouth ;date.mouth=a;
a=b.date.day;b.date.day=date.day ;date.day=a;
c=name;name=b.name;b.name=c;
c=num;num=b.num;b.num=c;
c=serial_num;serial_num=b.serial_num;b.serial_num=c;
c= pub_comp; pub_comp=b.pub_comp;b.pub_comp=c;
c=Author;Author=b.Author;b.Author=c;
d=price;price=b.price;b.price=d;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void books:: chang_price(Date dt)//根据当天日期修改图书价格,1年以360天算, 每个月以30天算
{
int days;
if(dt.mouth<date.mouth)
days=(dt.year-date.year)*360-(date.mouth-dt.mouth)*30+dt.day-date.day;
else
days=(dt.year-date.year)*360+(dt.mouth-date.mouth)*30+dt.day-date.day;
if(days<360)
;//图书没超过一年,什么也不做
else if(days<360*2)
price=price*0.9;//1年前出版的图书打九折
else if(days<360*3)
price=price*0.8;//两年前出版的打八折,
else
price=price*0.7;//三年前出版的全部打七折
}
void books::chang_sum()//修改图书文件中的库存量
{
int a,b;
cout<<endl<<name<<"原库存量:"<<sum<<endl;
cout<<"销售数量:";
cin>>a;
cout<<setw(10)<<"采购数量:";
cin>>b;
sum=sum+b-a;
cout<<endl<<name<<"现在库存量:"<<sum<<endl;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void get_in() // 主录入函数
{
int i=1;
char c;
cout<<"\t输入图书信息\n";
// book[t].get_books(); //录入图书信息
while(i!=0)
{
i++;
t=i;
book[i].get_books(); //录入图书信息
cout<<"要继续录入请按任意键,否则按n键退出录入!\n";
cin>>c;
if(c=='n'||c=='N')
i=0;
}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void changprice()//根据当天日期修改图书价格,1年以360天算, 每个月以30天算
{
Date da;
cout<<"\t修改图书价格\n";
da.set_date();
int k=0;
string na;
cout<<"您要修改价格的书名是:";
cin>>na;
for(int i=0;i<t+1;i++)
{
if(book[i].name==na)
{
book[i].chang_price(da);
book[i].display();
}
else k++;
}
if(k==t)
{
k=0;
cout<<"\t没找到与你的输入对应的书名!\n";
}
int c=1;
char ch;
k=0;
while(c!=0)
{
cout<<"\t请按任意键继续修改,否则按n键退出!\n";
cin>>ch;
if(ch=='n'||ch=='N')
c=0;
else
{
da.set_date();
string na;
cout<<"您要修改价格的书名是:";
cin>>na;
for(int i=0;i<t+1;i++)
{
if(book[i].name==na)
{
book[i].chang_price(da);
book[i].display();
}
else k++;
}
if(k==t)
{
k=0;
cout<<"\t没找到与你的输入对应的书名!\n";
}
}
}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void changesum() //修改图书文件中的库存量
{
string na;
int k=0;
cout<<"\t修改图书文件中的库存量\n";
cout<<"您要修改库存量的书名是:";
cin>>na;
for(int i=1;i<t+1;i++)
{
if(book[i].name==na)
book[i].chang_sum();
else k++;
}
if(k==t)
{
k=0;
cout<<"\t没找到与你的输入对应的书名!\n";
}
k=0;
int c=1;
char ch;
while(c==1)
{
cout<<"\t请按任意键继续修改,否则按n键退出!\n";
cin>>ch;
if(ch=='n'||ch=='N')
c=-1;
else
{
cout<<"您要修改库存量的书名是:";
cin>>na;
for(i=1;i<t+1;i++)
{
if(book[i].name==na)
book[i].chang_sum();
else k++;
}
if(k==t)
{
k=0;
cout<<"\t没找到与你的输入对应的书名!\n";
}
}
}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void serchbook()//根据书名查询某本图书的信息
{
cout<<"\t根据书名查询某本图书的信息\n";
string nam;
int k=0;
cout<<"\t输入你要查询书的书名:";
cin>>nam;
for(int i=0;i<t+1;i++)
{
if(book[i].name ==nam)
book[i].display();
else k++;
}
if(k==t)
{
k=0;
cout<<"\t没找到与你的输入对应的书名!\n";
}
int c=1;
char ch;
while(c==1)
{
cout<<"\n\t请按任意键继续查询,否则按n键退出!\n";
cin>>ch;
if(ch=='n'||ch=='N')
c=-1;
else
{
cout<<"\t输入你要查询书的书名:";
cin>>nam;
for(int i=0;i<t+1;i++)
{
if(book[i].name ==nam)
book[i].display();
else k++;
}
if(k==t)
{
k=0;
cout<<"\t没找到与你的输入对应的书名!\n";
}
}
}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void oder() //分别打印根据库存量和出版日期排序的结果
{
cout<<"\t1.根据库存量和出版日期排序的结果\n";
for(int i=1;i<t;i++) // 根据库存量
for(int j=1;j<t-i;j++)
if(book[j].sum<book[j+1].sum)
book[j].f (book[j+1]);
cout<<"\n\t根据库存量排序的结果\n";
cout<<"\n________________________________________________________________________\n";
cout<<"书名"<<setw(10)<<"书号"<<setw(10)<<"编号"<<setw(10)<<"出版社"
<<setw(10)<<"作者"<<setw(10)<<"定价"<<setw(10)<<"库存量"<<setw(10)
<<"出版日期\n";
for(int j=1;j<t+1;j++)
book[j].display2();
cout<<"\n________________________________________________________________________\n";
for(i=1;i<t;i++) // 根据出版日期排序的结果
for(int j=1;j<t-i;j++)
{
if(book[j].date .year >book[j+1].date .year )
book[j].f (book[j+1]);
if((book[j].date .year ==book[j+1].date .year )&&
(book[j].date .mouth >book[j+1].date .mouth))
book[j].f (book[j+1]);
if((book[j].date .year ==book[j+1].date .year )&&
(book[j].date .mouth ==book[j+1].date .mouth)&&
(book[j].date.day >book[j+1].date.day))
book[j].f (book[j+1]);
}
cout<<"\n\t2.根据出版日期排序的结果\n";
cout<<"\n________________________________________________________________________\n";
cout<<"书名"<<setw(10)<<"书号"<<setw(10)<<"编号"<<setw(10)<<"出版社"
<<setw(10)<<"作者"<<setw(10)<<"定价"<<setw(10)<<"库存量"<<setw(10)
<<"出版日期\n";
for(j=1;j<t+1;j++)
book[j].display2();
cout<<"\n________________________________________________________________________\n";
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
int main()
{
int c;
bool tp=1;
while(tp==1)
{
cout<<"\t\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n"
<<"\t请选择数字操作 \n\n"
<<"\t1.增加新图书,即将图书的全部信息输入到文件中 \n\n"
<<"\t2.根据销售情况和采购情况实时修改图书文件中的库存量\n\n"
<<"\t3.根据当天日期修改图书价格"
<<"\n\t一年前出版的图书打九折,\n\n"
<<"\t 两年前出版的打八折, \n\n"
<<"\t 三年前出版的全部打七折 \n\n"
<<"\t4.根据书名查询某本图书的信息 \n\n"
<<"\t5.分别打印根据库存量和出版日期排序的结果 \n\n"
<<"\t6.退出. \n\n"
<<"\t\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n";
cin>>c;
cout<<"\n你选择了"<<c<<"操作!\n";
switch(c)
{
case 1: get_in();tp=1;break;
case 2: changesum();tp=1;break;
case 3: changprice();tp=1;break;
case 4: serchbook();tp=1;break;
case 5:oder();tp=1;break;
case 6:tp=0;cout<<"\t已推出所有操作!";break;
default: cout<<"\n\n\t错误选择!\n";tp=1;break;
}
}
return 0;
}本回答被网友采纳