超市管理?

来源:互联网 发布:java用什么开发工具 编辑:程序博客网 时间:2024/05/29 04:44

record.h

#ifndef _RECORD_H#define _RECORD_H#include<cstdlib>#include<iostream>#include<map>#include<ctime>#include<string>using namespace std;class Record;                                                       //存放购物记录的类ostream & operator <<(ostream & os,const Record & obj);ostream & operator *(ostream & os,const Record & obj);class Record{public:    Record(int h,int k,int b):hgs(h),kgs(k),bzs(b){getTime();sum=bzs*2000+hgs*5+kgs*400;}    Record(int h,int k,int b,int s,int y,int mon,int d,int ho,int m):hgs(h),kgs(k),bzs(b),sum(s),year(y),month(mon),day(d),hour(ho),min(m){}    void getTime();    bool deletR(int ye,int mon);    friend ostream & operator <<(ostream &os,const Record & obj);    friend ostream & operator *(ostream & os,const Record & obj);    int hgs;    int kgs;    int bzs;    int year;    int month;    int day;    int hour;    int min;    int sum;};bool Record::deletR(int ye,int mon){    if((ye>year)&&(mon>=month))        return true;    else return false;}void Record::getTime(){    time_t timer;    time(&timer);    tm* t_tm=localtime(&timer);    year=t_tm->tm_year+1900;    month=t_tm->tm_mon+1;    day=t_tm->tm_mday;    hour=t_tm->tm_hour;    min=t_tm->tm_min;}ostream & operator <<(ostream &os,const Record & obj){    os<<"购买啤酒"<<obj.hgs<<"瓶.每瓶5元"<<endl;    os<<"购买白酒"<<obj.kgs<<"瓶.每瓶400元"<<endl;    os<<"购买红酒"<<obj.bzs<<"瓶.每瓶2000元"<<endl;    os<<"总共消费"<<obj.sum<<"元."<<endl;    os<<"购物时间"<<obj.year<<"/"<<obj.month<<"/"<<obj.day<<endl;    os<<obj.hour<<":"<<obj.min<<endl;    return os;}ostream & operator *(ostream & os,const Record & obj){    os<<obj.hgs<<endl;    os<<obj.kgs<<endl;    os<<obj.bzs<<endl;    os<<obj.sum<<endl;    os<<obj.year<<endl;    os<<obj.month<<endl;    os<<obj.day<<endl;    os<<obj.hour<<endl;    os<<obj.min<<endl;    return os;}#endif

cust.h

#ifndef _Customer_H#define _Customer_H#include"goods.h"#include<utility>class Customer{                                     //顾客public:    Customer(){id=rand()%101;money=0;}    void show(){cout<<id<<endl;}    void buy(goods &g);    bool morethan1000(){return money>=1000;}    bool morethan2000(){return money>=2000;}private:    int id;    int money;};void Customer::buy(goods &g){    cout<<"顾客 :"<<id<<"欢迎来到supersuper超市."<<endl;    g.buy();    money=g.money();    g.moneyc();    float cost=money;    cout<<"实际消费:"<<cost<<endl;}#endif

goods.h

#ifndef _GOODS_H#define _GOODS_H#include<cstdlib>#include<iostream>#include<map>#include<string>#include"record.h"using namespace std;class goods{        public:    goods(int h=100,int k=100,int b=100):pi(h),bai(k),hong(b){moneys=0;}    Record buy();    void show();    int money(){return moneys;}    void moneyc(){moneys=0;}private:    int moneys;    int pi;    int bai;    int hong;};void goods::show(){    cout<<"啤酒库存 "<<pi<<" 件"<<endl;    cout<<"白酒库存 "<<bai<<" 件"<<endl;    cout<<"红酒库存 "<<hong<<" 件"<<endl;}Record goods::buy(){    cout<<"now show your the product??"<<endl;    cout<<"1:啤酒  5元; 2:白酒 400元 ;3:红酒 2000 元"<<endl;    show();    cout<<"输入字符以退出买东西."<<endl;    int h=0,k=0,b=0;    int choose;    while(cin>>choose){        switch(choose){        case 1:if(pi>=0){moneys+=5;pi-=1;h+=1;}else cout<<"no more pi jiu!"<<endl;break;        case 2:if(bai>=0){moneys+=400;bai-=1;k+=1;}else cout<<"no more bai jiu!"<<endl;break;        case 3:if(hong>=0){moneys+=2000;hong-=1;b+=1;}else cout<<"no more hong jiu!"<<endl;break;        default:cout<<"error,please input another number"<<endl;        }    system("cls");    cout<<"买的东西总价钱: "<<moneys<<endl;    show();    }    cin.clear();    while(cin.get()!='\n')        continue;    Record r(h,k,b);    cout<<r<<endl;    return r;}#endif

pcust.h

#ifndef _Pcust_H#define _Pcust_H#include"cust.h"class Pcust;                                                //普通客户ostream & operator <<(ostream &out,const Pcust &p);class Pcust{public:    Pcust():id(0),name(" "),number(" "),jifen(0),money(0){}    Pcust(int i,string n,string m,int j=0):id(i),name(n),number(m),jifen(j){money=0;}    virtual void buy(goods &g);    bool morethan1000(){return money>=1000;}    int showid(){return id;}    string showname(){return name;}    string shownumber(){return number;}    int showjifen(){return jifen;}    void insetjilu(Record &s){jilu.insert(pair<int,Record>(id,s));}    void showJilu();    virtual void show();    friend ostream& operator <<(ostream &out,const Pcust &p);    bool deletP(int y,int m);protected:    int id;    string name;    string number;    int jifen;    int money;public:    multimap<int,Record> jilu;};bool Pcust::deletP(int y,int m){    pair<multimap<int,Record>::iterator,multimap<int,Record>::iterator>range=jilu.equal_range(id);    multimap<int,Record>::iterator itr;    for(itr=range.first;itr!=range.second;++itr){        if((*itr).second.deletR(y,m))            return true;    }    return false;}void Pcust::buy(goods &g){    cout<<"顾客 :"<<id<<"欢迎来到supersuper超市."<<endl;    cout<<"您剩余积分为 : "<<jifen<<endl;    Record t=g.buy();    insetjilu(t);    money=g.money();    g.moneyc();    float cost=money*0.98;    cout<<"实际消费:"<<cost<<endl;    jifen+=money;    cout<<"积分增加至: "<<jifen<<endl;}void Pcust::showJilu(){    pair<multimap<int,Record>::iterator,multimap<int,Record>::iterator>range=jilu.equal_range(id);    multimap<int,Record>::iterator itr;    for(itr=range.first;itr!=range.second;++itr)        cout<<(*itr).second<<endl;}void Pcust::show(){    cout<<"卡号: "<<id<<endl;    cout<<"姓名: "<<name<<endl;    cout<<"手机: "<<number<<endl;    cout<<"积分: "<<jifen<<endl;}ostream & operator <<(ostream &out,const Pcust &p){    out<<p.id<<endl;    out<<p.name<<endl;    out<<p.number<<endl;    out<<p.jifen<<endl;    return out;}#endif

vip.h

#ifndef _VIP_H#define _VIP_H#include"pcust.h"class Vip;                                  //vip客户ostream & operator <<(ostream & os,const Vip &v);struct shangPing{    int id;    string name;    int cost;    shangPing(int i,string n,int c):id(i),name(n),cost(c){}    void show(){cout<<"ID: "<<id<<endl;cout<<"名称: "<<name<<endl;cout<<"价格: "<<cost<<endl;}};class Vip:public Pcust{public:    Vip(int i,string n,string m,int j=0):Pcust(i,n,m){fuID=rand()%1000;}    Vip(int i,string n,string m,int j,int f):Pcust(i,n,m),fuID(f){}    Vip(Pcust p){name=p.showname();number=p.shownumber();jifen=p.showjifen();fuID=p.showid();id=0;}    void buy(goods &g);    void show();    void changeId(int l){id=l;}    friend ostream & operator <<(ostream & os,const Vip &p);private:    int fuID;};void Vip::buy(goods &g){    cout<<"vip顾客 :"<<id<<"欢迎来到supersuper超市."<<endl;    cout<<"您剩余积分为 : "<<jifen<<endl;    Record t=g.buy();    insetjilu(t);    money=g.money();    g.moneyc();    double cost=money*0.95;    cout<<"实际消费:"<<cost<<endl;    jifen+=money;    cout<<"积分增加至: "<<jifen<<endl;    cin.get();}void Vip::show(){    cout<<"卡号: "<<id<<endl;    cout<<"姓名: "<<name<<endl;    cout<<"手机: "<<number<<endl;    cout<<"积分: "<<jifen<<endl;    cout<<"副卡:  "<<fuID<<endl;}ostream & operator <<(ostream & out,const Vip &p){    out<<p.id<<endl;    out<<p.name<<endl;    out<<p.number<<endl;    out<<p.jifen<<endl;    out<<p.fuID<<endl;    return out;}#endif

main.cpp

#include"cust.h"#include"vip.h"#include<algorithm>#include<utility>#include<string>#include<fstream>#include<sstream>#include<stack>using namespace std;typedef std::pair<int,Vip> Pair;       //用以替换pair<int,Vip>typedef std::pair<int,Pcust> Pairs;    //用以替换typedef std::map<int,Pcust> Mappc;typedef std::map<int,Vip> Mapvi;stack<int> ID;                          //用栈来记录被删除的会员的id号,并优先分配给新会员map<int,Pcust> pc;                      //用来存储普通会员的资料map<int,Vip> vi;                        //用来存储vip的资料typedef std::pair<int,shangPing> PairSP;typedef std::map<int,shangPing> MapSP;map<int,shangPing> SP;void creatSP(){    int id,cost;    cout<<"输入商品id,名称,价格。id请输入三位数。"<<endl;    string n;    cin>>id;    cin.get();    getline(cin,n);    cin>>cost;    struct shangPing sp(id,n,cost);    SP.insert(PairSP(id,sp));    cout<<" creat successful "<<endl;}void showSP(){    MapSP::iterator itr;    for(itr=SP.begin();itr!=SP.end();++itr){        (*itr).second.show();        cout<<endl;    }}void SPP(goods g){    cout<<"1.删除商品信息 2.修改商品信息 3.添加商品信息 4.展示商品信息   输入其他数字以返回菜单"<<endl;    int c,cc=0;    while(cc==0){    cout<<"输入你的选择,删除,修改或添加,还是展示"<<endl;    cin>>c;    switch(c){    case 1:{        cout<<"输入想要删除商品的ID"<<endl;            MapSP::iterator itr;            showSP();            int id;            cin>>id;            itr=SP.find(id);            if(itr!=SP.end()){                SP.erase(id);                cout<<"delete successful"<<endl;                break;            }            else {cout<<"未找到该商品。"<<endl;break;}           }    case 2:{        cout<<"输入想要修改商品的ID"<<endl;            MapSP::iterator itr;            showSP();            int id;            cin>>id;            itr=SP.find(id);            if(itr!=SP.end()){                SP.erase(id);                cout<<"请输入名称与价格"<<endl;                string n;                int cost;                cin.get();                getline(cin,n);                cin>>cost;                cout<<"输入的名称是: "<<n<<endl;                cout<<"输入的价格是: "<<cost<<endl;                struct shangPing sp(id,n,cost);                SP.insert(PairSP(id,sp));                cout<<"change successful"<<endl;                break;            }            else {cout<<"未找到该商品信息。"<<endl;break;}           }    case 3:{creatSP();break;}    case 4:{g.show(); showSP();break;}    default:break;    }    cout<<"请确认是否退出。输入0继续修改商品信息。"<<endl;    cin>>cc;    }}int idGetP(){                           //普通新会员获取卡号,先从栈中取,栈中没有再按pc中会员数量分配    if(ID.size()>0){        int i=ID.top();        ID.pop();        return i;    }    else        return pc.size();}void getNewPcustorVip(Customer &p){     //顾客晋升为会员或者vip的通道    if(p.morethan2000()){               //判断消费数额        int l=vi.size();        cout<<"输入姓名与手机号以成为vip用户:"<<endl;        string n,m;        int t=rand()%10000;             //顾客成为vip则随机分配副卡号        getline(cin,n);        cin>>m;        cout<<"卡号为: "<<l<<endl;        cout<<"输入的姓名是: "<<n<<endl;        cout<<"输入的手机号是: "<<m<<endl;        cout<<"副卡ID为: "<<t<<endl;        Vip vc(l,n,m);        vi.insert(Pair(l,vc));        cout<<"添加成功!"<<endl;    }    else if(p.morethan1000()){        int l=idGetP();        cout<<"输入姓名与手机号以成为会员:"<<endl;        string n,m;        getline(cin,n);        cin>>m;        cout<<"卡号为: "<<l<<endl;        cout<<"输入的姓名是: "<<n<<endl;        cout<<"输入的手机号是: "<<m<<endl;        Pcust pt(l,n,m);        pc.insert(Pairs(l,pt));        cout<<"添加成功!"<<endl;    }}void getNewPcustorVip(Pcust &p){            //会员成为vip,用其原来的卡号作为副卡号,被分配新的卡号    if(p.morethan1000()){        cout<<"恭喜,您已升级为vip用户"<<endl;        int l=vi.size();        Vip vis(p);        vis.changeId(l);        vi.insert(Pairs(l,vis));        pc.erase(pc.find(p.showid()));        cout<<"名单已从会员移到vip客户中."<<endl;        cout<<"您的卡号更正为: "<<l<<endl;        cin.get();    }}int getY(){                                     //得到本地的年份    time_t timer;    time(&timer);    tm* t_tm=localtime(&timer);    int year=t_tm->tm_year+1900;    return year;}int getM(){                                     //月份    time_t timer;    time(&timer);    tm* t_tm=localtime(&timer);    int month=t_tm->tm_mon+1;    return month;}void menu(){    cout<<"1.普通顾客"<<endl;    cout<<"2.会员"<<endl;    cout<<"3.vip客户"<<endl;    cout<<"4.删除一年无购物的会员"<<endl;    cout<<"5.查看所有用户信息"<<endl;    cout<<"6.商品操作"<<endl;    cout<<"输入字符来退出并保存信息。"<<endl;}void deleteOne(){                                   //删除一年无购物记录的会员    int year=getY();    int month=getM();    int id;    int i;    stack<int> a;    Mappc::iterator itr;    for(itr=pc.begin();itr!=pc.end();++itr){        if((*itr).second.deletP(year,month)){            id=(*itr).second.showid();            cout<<"卡号为"<<id<<"的会员需要被删除"<<endl;            a.push(id);        }    }    if(a.size()>0){        cout<<"删除成功。"<<endl;    }    else {        cout<<"无一年未购物会员。"<<endl;    }    while(a.size()>0){    i=a.top();    a.pop();    ID.push(i);    pc.erase(i);    }}void showAll(){                                     //显示所有客户信息    Mappc::iterator itr;    cout<<"普通会员信息: "<<endl;    for(itr=pc.begin();itr!=pc.end();++itr){        (*itr).second.show();        cout<<endl;    }    cout<<"VIP客户信息: "<<endl;    Mapvi::iterator it;    for(it=vi.begin();it!=vi.end();++it){        (*it).second.show();        cout<<endl;    }}void showPcust(){    Mappc::iterator itr;    cout<<"普通会员信息: "<<endl;    for(itr=pc.begin();itr!=pc.end();++itr){        (*itr).second.show();        cout<<endl;    }}void changeInformation(){    cout<<"1.删除某会员信息 2.修改某会员信息    输入其他数字以返回菜单"<<endl;    int c,cc=0;    while(cc==0){    cout<<"输入你的选择,删除还是修改"<<endl;    cin>>c;    switch(c){    case 1:{ cout<<"输入想要删除会员的ID"<<endl;            Mappc::iterator itr;            showPcust();            int id;            cin>>id;            itr=pc.find(id);            if(itr!=pc.end()){                ID.push(id);                pc.erase(id);                cout<<"delete successful"<<endl;                break;            }            else {cout<<"未找到该会员。"<<endl;break;}           }    case 2:{cout<<"输入想要修改会员的ID"<<endl;            Mappc::iterator itr;            showPcust();            int id;            cin>>id;            itr=pc.find(id);            if(itr!=pc.end()){                pc.erase(id);                int jifen=(*itr).second.showjifen();                cout<<"请输入姓名与手机号"<<endl;                string n,m;                cin.get();                getline(cin,n);                cin>>m;                cout<<"输入的姓名是: "<<n<<endl;                cout<<"输入的手机号是: "<<m<<endl;                Pcust pt(id,n,m,jifen);                pc.insert(Pairs(id,pt));                cout<<"change successful"<<endl;                break;            }            else {cout<<"未找到该会员。"<<endl;break;}           }    default:break;    }    cout<<"请确认是否退出。输入0继续修改会员信息。"<<endl;    cin>>cc;    }}void doIt(goods & g){                                   //运行的主要程序    menu();    int c;    while(cin>>c){    switch(c){    case 1:{        Customer c;        cout<<"输入1来进行购物"<<endl;        int t;        cin>>t;        system("cls");        if(t==1){c.buy(g);getNewPcustorVip(c);break;}        else exit(1);           }    case 2:{        Mappc::iterator itr;        cout<<"请输入你的卡号 "<<endl;        int id;        cin>>id;        itr=pc.find(id);        if(itr!=pc.end()){             Pcust &p=(*itr).second;            string n=p.showname();            cout<<"欢迎会员 "<<n<<endl;            cout<<" 输入1来购物,输入2来查看购物记录,输入3来查看个人记录"<<endl;            int t;            cin>>t;            system("cls");            if(1==t){p.buy(g);getNewPcustorVip(p);system("cls");break;}            else if(2==t){p.showJilu();break;}            else if(3==t){p.show();break;}            else {cout<<"error input"<<endl;                break;            }           }        else {cout<<"未找到该会员。"<<endl;break;}         }    case 3:{        Mapvi::iterator itr;        cout<<"请输入你的卡号 "<<endl;        int id;        cin>>id;        itr=vi.find(id);        if(itr!=vi.end()){             Vip &p=(*itr).second;            string n=p.showname();            cout<<"欢迎会员 "<<n<<endl;            cout<<" 输入1来购物,输入2来查看购物记录,输入3来查看个人记录"<<endl;            int t;            cin>>t;            system("cls");            if(1==t){p.buy(g);system("cls");break;}            else if(2==t){p.showJilu();break;}            else if(3==t){p.show();break;}            else {cout<<"error input"<<endl;            break;            }           }        else {cout<<"未找到该会员。"<<endl;break;}         }    case 4:{cout<<"开始检索并删除一年无购物的会员......"<<endl;        deleteOne();        break;           }    case 5:{showAll();        changeInformation();        break;           }    case 6:{SPP(g);        break;           }    default:cout<<"flase input.\a.try again"<<endl;    }    menu();    }}void writeCustomer(){                                           //保存客户信息    Mappc::iterator itr;    Mapvi::iterator it;    ofstream fout("pc.dat");    if(!fout.is_open())        cerr<<"can not open pc.dat"<<endl;    for(itr=pc.begin();itr!=pc.end();++itr){        fout<<"#"<<endl;        fout<<(*itr).second<<endl;    }    fout.close();    fout.open("vip.dat");    if(!fout.is_open())        cerr<<"can not open vip.dat"<<endl;    for(it=vi.begin();it!=vi.end();++it){        fout<<"#"<<endl;        fout<<(*it).second<<endl;    }    fout.close();}string num2str(int i){                                  //数字转字符串stringstream ss;ss << i;return ss.str();}void writeJilu(){                                           //保存购物记录    string file,f;    string p="p";    string v="v";    string dat=".dat";    int id;    Mappc::iterator itr;    Mapvi::iterator it;    for(itr=pc.begin();itr!=pc.end();++itr){        id=(*itr).first;        file=num2str(id);        f=p+file+dat;        const char*fp=f.c_str();        ofstream fout(fp);        pair<multimap<int,Record>::iterator,multimap<int,Record>::iterator>range=(*itr).second.jilu.equal_range(id);        multimap<int,Record>::iterator itr;        for(itr=range.first;itr!=range.second;++itr){            fout<<"#"<<endl;            fout*(*itr).second<<endl;        }        fout.close();    }    for(it=vi.begin();it!=vi.end();++it){        id=(*it).first;        file=num2str(id);        f=v+file+dat;        const char*ff=f.c_str();        ofstream fout(ff);        pair<multimap<int,Record>::iterator,multimap<int,Record>::iterator>range=(*it).second.jilu.equal_range(id);        multimap<int,Record>::iterator itv;        for(itv=range.first;itv!=range.second;++itv){            fout<<"#"<<endl;            fout*(*itv).second<<endl;        }        fout.close();    }}void read(){                                                    //读取客户信息,购物记录    string file,fname;    string pt="p";    string v="v";    string dat=".dat";    ifstream fin("pc.dat");    int hg,kg,bz,ye,su,mo,da,ho,mi;    double f,j;    int l;    char ch,cp,cv;    string n,m;    while((ch=fin.get())=='#'){    fin>>l;    fin.get();    getline(fin,n);    fin>>m;    fin>>j;    Pcust p(l,n,m,j);    file=num2str(l);    fname=pt+file+dat;    const char *ppname=fname.c_str();    ifstream ins(ppname);    while((cp=ins.get())=='#'){    ins>>hg;    ins>>kg;    ins>>bz;    ins>>su;    ins>>ye;    ins>>mo;    ins>>da;    ins>>ho;    ins>>mi;    Record R(hg,kg,bz,su,ye,mo,da,ho,mi);    p.insetjilu(R);    ins.get();    ins.get();    }    ins.close();    pc.insert(Pairs(l,p));    fin.get();    fin.get();    }    fin.close();    fin.clear();    fin.open("vip.dat");    while((ch=fin.get())=='#'){    fin>>l;    fin.get();    getline(fin,n);    fin>>m;    fin>>j;    fin>>f;    Vip ip(l,n,m,j,f);    file=num2str(l);    fname=v+file+dat;    ifstream ins;    const char *pname=fname.c_str();    ins.open(pname);    while((cv=ins.get())=='#'){    ins>>hg;    ins>>kg;    ins>>bz;    ins>>su;    ins>>ye;    ins>>mo;    ins>>da;    ins>>ho;    ins>>mi;    Record R(hg,kg,bz,su,ye,mo,da,ho,mi);    ip.insetjilu(R);    ins.get();    ins.get();    }    ins.close();    vi.insert(Pair(l,ip));    fin.get();    fin.get();    }}void writeStack(){                              //保存栈中存放的id号    int i;    ofstream fout("stack.dat");    while(ID.size()>0){        i=ID.top();        fout<<"#"<<endl;        fout<<i<<endl;        ID.pop();    }}void readStack(){                                   //读取栈    ifstream fin("stack.dat");    int i;    char ch;    while((ch=fin.get())=='#'){        fin>>i;        ID.push(i);        fin.get();        fin.get();    }}int main(){    goods g;    readStack();//读栈    read();//读客户信息与其购物记录    doIt(g);//主要函数    writeStack();//保存    writeCustomer();//以上    writeJilu();//以上return 0;}
0 0
原创粉丝点击