超市管理?
来源:互联网 发布: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
- 超市管理?
- 超市管理系统
- 超市管理大全
- 超市POS管理系统
- 超市的后台管理
- 超市管理 java
- 超市购物管理系统
- 模拟超市管理系统
- 超市管理系统
- 超市库存管理系统
- 超市生鲜食品采购管理
- 超市管理系统 基础程序
- 超市管理系统设计报告
- 超市VIP卡管理系统
- 求教JAVA超市管理系统
- 商品超市管理系统作业
- 小型超市管理系统.c
- 超市商品管理系统 考试题
- NYOJ 214.单调递增子序列(二)(动态规划)
- TCP-IP详解: RTT和RTO的计算方法
- Cocircular Points
- LeetCode House Robber II
- 编程_VC++_txt文件操作实例
- 超市管理?
- 机器学习模型 概率图模型
- 1059. C语言竞赛(20)-PAT乙级真题
- oracle的dual表
- 大型网站架构系列:20本技术书籍推荐
- android-音乐播放器实现及源码下载(一)
- ZJIT-Catheryan-安卓项目框架
- ARM学习视频观後感 3:ARM那些你得知道的事儿 10 -13
- springmvc和controller