前面都可以顺利执行,但是到case3和4就不能运行了,程序自动结束,救命啊/(ㄒoㄒ)/~~
#include<iostream>
#include<cstring>
#define NUM1 2
//#define NUM2 3
using namespace std;
int menu();
void establish();
void book_buyer();
void dis_all();
void calculate();
//int cart_menu();
int menu() {
int select;
printf("******************************\n");
printf("1.建立图书信息\n");
printf("2.建立购书人信息\n");
printf("3.显示订单信息\n");
printf("4.结算\n");
printf("5.退出\n");
printf("******************************\n");
printf("请选择对应数字 1-5:");
while(1){ //循环一直进行,直到输入正确的数后break出循环
scanf("%d",&select);
if (select<1||select>5)
printf("输入错误,请重新输入:");
else
break;
}
return select;
}
class buyer{
protected:
string name;
int buyerID;
string address;
double pay;
int shu1;
int shu2;
public:
buyer();
buyer(string n,int b,string a,double p,int s1,int s2);
string getbuyname();
string getaddress();
double getpay();
int getid();
int getshu1();
int getshu2();
virtual void display()=0;
virtual void setpay(double=0)=0;
};
class member:public buyer{
private:
int leaguer_grade;
public:
member(string n,int b,int l,string a,double p,int s1,int s2):buyer(n,b,a,p,s1,s2){
leaguer_grade=1;
}
void display();
void setpay(double p);
};
class honoured_guest:public buyer{
double discount_rate;
public:
honoured_guest(string n,int b,double r,string a,double p,int s1,int s2):buyer(n,b,a,p,s1,s2){
discount_rate=r;
}
void display();
void setpay(double p);
};
class layfolk:public buyer{
public:
layfolk(string n,int b,string a,double p,int s1,int s2):buyer(n,b,a,p,s1,s2){}
void display();
void setpay(double p);
};
buyer::buyer(){
name="";
buyerID=0;
address="";
pay=0;
shu1=0;
shu2=0;
}
buyer::buyer(string n,int b,string a,double p,int s1,int s2){
name=n;
buyerID=b;
address=a;
pay=p;
shu1=s1;
shu2=s2;
}
double buyer::getpay(){
return pay;
}
string buyer::getaddress(){
return address;
}
string buyer::getbuyname(){
return name;
}
int buyer::getid(){
return buyerID;
}
int buyer::getshu1(){
return shu1;
}
int buyer::getshu2(){
return shu2;
}
void member::display(){
cout<<"购书人姓名:"<<name<<"\t";
cout<<"购书人编号:"<<buyerID<<"\t";
cout<<"购入第一种图书"<<shu1<<"本"<<"\t";
cout<<"购入第二种图书"<<shu2<<"本"<<"\t";
cout<<"购书人为会员,级别:"<<leaguer_grade<<"\n";
cout<<"地址:"<<address<<"\n";
}
void member::setpay(double p){
if(leaguer_grade==1)
pay=.95*p+pay;
else if(leaguer_grade==2)
pay=.90*p+pay;
else if(leaguer_grade==3)
pay=.85*p+pay;
else if(leaguer_grade==4)
pay=.80*p+pay;
else if(leaguer_grade==5)
pay=.7*p+pay;
else
cout<<"级别错误!";
}
void honoured_guest::display(){
cout<<"购书人姓名:"<<name<<"\t";
cout<<"购书人编号:"<<buyerID<<"\t";
cout<<"购入第一种图书"<<shu1<<"本"<<"\t";
cout<<"购入第二种图书"<<shu2<<"本"<<"\t";
cout<<"购书人为贵宾!折扣率为:"<<discount_rate*100<<"\n";
cout<<"地址:"<<address<<"\n\n";
}
void honoured_guest::setpay(double p){
pay=pay+(1-discount_rate)*p;
}
void layfolk::display(){
cout<<"购书人姓名:"<<name<<"\t";
cout<<"购书人编号:"<<buyerID<<"\t";
cout<<"购入第一种图书"<<shu1<<"本"<<"\t";
cout<<"购入第二种图书"<<shu2<<"本"<<"\t";
cout<<"购书人为普通人"<<"\n";
cout<<"地址:"<<address<<"\n\n";
}
void layfolk::setpay(double p){
pay=pay+p;
}
class book{
protected:
string book_ID;
string book_name;
string author;
string publishing;
double price;
public:
book();
book(string b_id,string b_n,string au,string pu,double pr);
void display();
string getbook_ID();
string getbook_name();
string getauthor();
string getpublishing();
double getprice();
};
book::book(string b_id,string b_n,string au,string pu,double pr){
book_ID=b_id;
book_name=b_n;
author=au;
publishing=pu;
price=pr;
}
book::book(){
book_ID="";
book_name="";
author="";
publishing="";
price=0;
}
void book::display(){
cout<<"书号:"<<book_ID<<"\t";
cout<<"书名:"<<book_name<<"\t";
cout<<"作者:"<<author<<"\n";
cout<<"出版社:"<<publishing<<"\t";
cout<<"定价:"<<price<<"\n";
}
string book::getbook_ID(){
return book_ID;
}
string book::getbook_name(){
return book_name;
}
string book::getauthor(){
return author;
}
string book::getpublishing(){
return publishing;
}
double book::getprice(){
return price;
}
static book *b[NUM1];
static buyer *bu[3];
int main()
{
printf(" 欢迎进入线上购书系统\n");
while(1){
switch(menu()){ //菜单运行功能路径
case 1:
establish();break; //建立图书信息
case 2:
book_buyer();break; //建立购书人信息
case 3:
dis_all();break; //显示订单信息
case 4:
calculate();break; //结算
case 5:
printf("感谢使用,再见!\n");
return 0;
}
}
}
void establish(){
book c1("7-302-04504-6","c++程序设计","谭浩强","清华",25);
book c2("7-402-03388-9","数据结构","许卓群","北大",20);
b[0]=&c1;
b[1]=&c2;
cout<<"\n图书信息:\n\n";
for(int i=0;i<2;i++)
b[i]->display();
}
void book_buyer(){
layfolk b1("林小茶",1,"北京",0,1,1);
honoured_guest b2("王遥遥",2,.6,"上海",0,1,2);
member b3("赵红艳",3,5,"广州",0,2,1);
buyer *bu[3]={&b1,&b2,&b3};
cout<<"购书人信息:\n\n";
for(int i=0;i<3;i++)
bu[i]->display();
}
void dis_all(){
int dingdan=1001,j;
for(j=0;j<3;j++,dingdan++){
cout<<endl<<"订单编号:"<<dingdan<<" 购书人编号:"<<bu[j]->getid()<<" 购书数量:" <<bu[j]->getshu1()+bu[j]->getshu2()<<"\n\n";
}
}
void calculate(){
int q,x,flag,money;
cout<<"\n\n请输入购书人编号:";
cin>>x;
flag=0;
for(q=0;q<3;q++){
if(bu[q]->getid()==x){
flag=1;break;
}
}
if(flag==0){
cout<<"编号不存在"<<endl;
}
else{
bu[q]->setpay(b[0]->getprice()*bu[q]->getshu1());
bu[q]->setpay(b[1]->getprice()*bu[q]->getshu2());
cout<<endl<<"购书人需要付费:"<<bu[q]->getpay()<<"\n\n";
}
cout<<"请付款:";
cin>>money;
if(money>=bu[q]->getpay())
cout<<"收款"<<money<<"元,找零"<<money-bu[q]->getpay()<<"元"<<endl;
else
cout<<"金额不足!"<<endl;
}