有没有大佬可以帮忙看一下这个switch语句有什么问题吗?!

前面都可以顺利执行,但是到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; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值