zoukankan      html  css  js  c++  java
  • C++自动糖果贩卖机

    #include<map>
    #include<vector>
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    
    class Users{
    private:
    	std::map<std::string,std::string> m;
    public:
    	Users(){m["boss"]=std::string("123");}
    	bool addUser(std::string username,std::string password)
    	{
    		auto it=m.find(username);
    		if(it!=m.end()) return false;
    		m[username]=password;
    		return true;
    	}
    	bool check(std::string username,std::string password)
    	{
    		auto it = m.find(username);
    		if(it==m.end()) return false;
    		if(it->second!=password) return false;
    		return true;
    	}
    	bool login()
    	{
    		puts("输入用户名:");
    		std::string uname;
    		std::cin >> uname;
    		puts("输入密码:");
    		std::string passw;
    		std::cin >> passw;
    		if (!check(uname, passw))
    		{
    			puts("用户名或密码错误");
    			system("sleep 0.6");
    			return false;
    		}
    		puts("登录成功");
    		system("sleep 0.6");
    		system("cls");
    		return true;
    	}
    }users;
    
    class CandyList{
    private:
    	std::map<std::string,int> list;//名字到id的映射
    	std::vector<std::string> nameList;
    public:
    	CandyList(){nameList.resize(1);}
    	int queryId(std::string name)//传入名字,返回id,不存在返回0
    	{
    		auto it = list.find(name);
    		if(it!=list.end())
    			return it->second;
    		return 0;
    	}
    	std::string queryName(int id)
    	{
    		if(id>nameList.size()) return std::string("");
    		return nameList[id];
    	}
    	int addCandyKind(std::string name)//无论有没有,都返回id
    	{
    		int id=queryId(name);
    		if(id) return id;
    		id=list.size()+1;
    		// printf("&&DEBUG&&
    %s %d
    
    ",name.c_str(),id);
    		list[name]=id;
    		nameList.push_back(name);
    		return id;
    	}
    }candyList;
    
    class Store{//仓库
    private:
    	std::vector<std::pair<int, int> > s; //数量、单价
    	int sum;
    public:
    	Store()
    	{
    		s.clear();
    		s.resize(100);
    		sum=0;
    	}
    	int getSum(){return sum;}
    	int getPrice(int id){return s[id].second;}
    	void displayCandy()
    	{
    		// std::cout<<s.size()<<" ***"<<std::endl;
    		std::cout << "编号	品名	剩余数量	单价" << std::endl;
    		for(int i=0;i<s.size();i++)
    		{
    			if(s[i].first>0)
    			{
    				std::cout<<i<<"	"<<candyList.queryName(i)<<"	"<<s[i].first<<"	"<<s[i].second<<std::endl;
    			}
    		}
    	}
    	void addCandy(std::string name,int num,int price=-1)
    	{
    		bool ok=1;
    		if(num<1)
    			ok=0,puts("数量错误");
    		if(price<-1||price==0)
    			ok=0,puts("价格错误");
    		if(!ok) return;
    		int id=candyList.addCandyKind(name);
    		// if(s.capacity()<id-1)
    		// {
    		// 	// std::cout<<"haha"<<std::endl;
    		// 	if(price==-1)
    		// 	{
    		// 		puts("新品必须定价");
    		// 		return;
    		// 	}
    		// 	s.resize(id+1);//仓库扩容
    		// 	s[id]=std::make_pair(num,price);
    		// 	return;
    		// }
    		s[id].first+=num;
    		sum+=num;
    		if(~price) s[id].second=price;//更新价格
    	}
    	int rmCandy(int id,int num,int pay)//卖糖
    	{
    		if(!id)
    		{
    			puts("查无此糖");
    			return 0;
    		}
    		if(s[id].first<num)
    		{
    			puts("数量不足");
    			return 0;
    		}
    		int totPrice=num*s[id].second;
    		if(pay<totPrice)
    		{
    			puts("钱不够");
    			return 0;
    		}
    		s[id].first-=num;
    		sum-=num;
    		return pay-totPrice;
    	}
    }store;
    
    class FrontPage{//前端
    private:
    	inline void read(int &x)
    	{
    		int s = 0, w = 1;
    		char ch = getchar();
    		while (ch < '0' || ch > '9')
    		{
    			if (ch == '-')
    				w = -1;
    			ch = getchar();
    		}
    		while (ch >= '0' && ch <= '9')
    			s = s * 10 + ch - '0', ch = getchar();
    		x = s * w;
    	}
    
    public:
    	FrontPage(){store.addCandy(std::string("默认糖"),10,10);}
    	void run()
    	{
    		printf("启动中");
    		for(int i=1;i<=5;i++)
    			system("sleep 0.1"),printf(".");
    		while(1)
    		{
    			system("cls");
    			if(store.getSum()) printf("营业中!
    买糖请输入1,");
    			else printf("缺货,");
    			puts("加糖请输入2");
    			int type=0;
    			read(type);//提高容错性
    			if(type==2)
    			{
    				if(!users.login()) continue;
    				puts("请输入品名");
    				std::string name;
    				std::cin>>name;
    				int id=candyList.queryId(name);
    				puts("请输入数量");
    				int num,price;
    				bool transPrice=0;
    				read(num);
    				if(!id)
    					puts("输入定价(分/个)"),read(price),transPrice=1;
    				else
    				{
    					printf("要更改该商品定价请输入1,保持原定价%d 分/个 请输入0
    ",store.getPrice(id));
    					int temp;
    					read(temp);
    					if(temp)
    					{
    						puts("输入新定价(分/个)"),read(price),transPrice=1;
    					}
    				}
    				if(transPrice) store.addCandy(name,num,price);
    				else store.addCandy(name,num);
    				continue;
    			}
    			if(type==1)
    			{
    				puts("欢迎光临");
    				store.displayCandy();
    				puts("输入编号");
    				int id;
    				read(id);
    				puts("输入数量");
    				int num;
    				read(num);
    				puts("输入付款数量");
    				int pay;
    				read(pay);
    				int temp=store.rmCandy(id,num,pay);
    				if(temp) std::cout<<"给你找零"<<temp<<"分"<<std::endl<<"欢迎再次光临";
    				system("sleep 2");
    				system("cls");
    				continue;
    			}
    			puts("输入错误");
    			system("sleep 2");
    		}
    	}
    };
    
    int main()
    {
    	FrontPage temp;
    	temp.run();
    	return 0;
    }
    
    
  • 相关阅读:
    二叉查找树
    二叉树
    广度优先搜索
    深度优先搜索
    algorithm:next_permutation
    Grafana Labs 携手阿里云,将提供国内首款 Grafana 托管服务
    台积电TSMC一些技术特点
    TSMC台积电各种制程工艺技术
    激光雷达激烈竞争市场
    边端云处理器系列技术参数
  • 原文地址:https://www.cnblogs.com/wawcac-blog/p/12045706.html
Copyright © 2011-2022 走看看