1. #include<map>
  2. #include<vector>
  3. #include<cstdio>
  4. #include<iostream>
  5. #include<algorithm>
  6. class Users{
  7. private:
  8. std::map<std::string,std::string> m;
  9. public:
  10. Users(){m["boss"]=std::string("123");}
  11. bool addUser(std::string username,std::string password)
  12. {
  13. auto it=m.find(username);
  14. if(it!=m.end()) return false;
  15. m[username]=password;
  16. return true;
  17. }
  18. bool check(std::string username,std::string password)
  19. {
  20. auto it = m.find(username);
  21. if(it==m.end()) return false;
  22. if(it->second!=password) return false;
  23. return true;
  24. }
  25. bool login()
  26. {
  27. puts("输入用户名:");
  28. std::string uname;
  29. std::cin >> uname;
  30. puts("输入密码:");
  31. std::string passw;
  32. std::cin >> passw;
  33. if (!check(uname, passw))
  34. {
  35. puts("用户名或密码错误");
  36. system("sleep 0.6");
  37. return false;
  38. }
  39. puts("登录成功");
  40. system("sleep 0.6");
  41. system("cls");
  42. return true;
  43. }
  44. }users;
  45. class CandyList{
  46. private:
  47. std::map<std::string,int> list;//名字到id的映射
  48. std::vector<std::string> nameList;
  49. public:
  50. CandyList(){nameList.resize(1);}
  51. int queryId(std::string name)//传入名字,返回id,不存在返回0
  52. {
  53. auto it = list.find(name);
  54. if(it!=list.end())
  55. return it->second;
  56. return 0;
  57. }
  58. std::string queryName(int id)
  59. {
  60. if(id>nameList.size()) return std::string("");
  61. return nameList[id];
  62. }
  63. int addCandyKind(std::string name)//无论有没有,都返回id
  64. {
  65. int id=queryId(name);
  66. if(id) return id;
  67. id=list.size()+1;
  68. // printf("&&DEBUG&&\n%s %d\n\n",name.c_str(),id);
  69. list[name]=id;
  70. nameList.push_back(name);
  71. return id;
  72. }
  73. }candyList;
  74. class Store{//仓库
  75. private:
  76. std::vector<std::pair<int, int> > s; //数量、单价
  77. int sum;
  78. public:
  79. Store()
  80. {
  81. s.clear();
  82. s.resize(100);
  83. sum=0;
  84. }
  85. int getSum(){return sum;}
  86. int getPrice(int id){return s[id].second;}
  87. void displayCandy()
  88. {
  89. // std::cout<<s.size()<<" ***"<<std::endl;
  90. std::cout << "编号\t品名\t剩余数量\t单价" << std::endl;
  91. for(int i=0;i<s.size();i++)
  92. {
  93. if(s[i].first>0)
  94. {
  95. std::cout<<i<<"\t"<<candyList.queryName(i)<<"\t"<<s[i].first<<"\t"<<s[i].second<<std::endl;
  96. }
  97. }
  98. }
  99. void addCandy(std::string name,int num,int price=-1)
  100. {
  101. bool ok=1;
  102. if(num<1)
  103. ok=0,puts("数量错误");
  104. if(price<-1||price==0)
  105. ok=0,puts("价格错误");
  106. if(!ok) return;
  107. int id=candyList.addCandyKind(name);
  108. // if(s.capacity()<id-1)
  109. // {
  110. // // std::cout<<"haha"<<std::endl;
  111. // if(price==-1)
  112. // {
  113. // puts("新品必须定价");
  114. // return;
  115. // }
  116. // s.resize(id+1);//仓库扩容
  117. // s[id]=std::make_pair(num,price);
  118. // return;
  119. // }
  120. s[id].first+=num;
  121. sum+=num;
  122. if(~price) s[id].second=price;//更新价格
  123. }
  124. int rmCandy(int id,int num,int pay)//卖糖
  125. {
  126. if(!id)
  127. {
  128. puts("查无此糖");
  129. return 0;
  130. }
  131. if(s[id].first<num)
  132. {
  133. puts("数量不足");
  134. return 0;
  135. }
  136. int totPrice=num*s[id].second;
  137. if(pay<totPrice)
  138. {
  139. puts("钱不够");
  140. return 0;
  141. }
  142. s[id].first-=num;
  143. sum-=num;
  144. return pay-totPrice;
  145. }
  146. }store;
  147. class FrontPage{//前端
  148. private:
  149. inline void read(int &x)
  150. {
  151. int s = 0, w = 1;
  152. char ch = getchar();
  153. while (ch < '0' || ch > '9')
  154. {
  155. if (ch == '-')
  156. w = -1;
  157. ch = getchar();
  158. }
  159. while (ch >= '0' && ch <= '9')
  160. s = s * 10 + ch - '0', ch = getchar();
  161. x = s * w;
  162. }
  163. public:
  164. FrontPage(){store.addCandy(std::string("默认糖"),10,10);}
  165. void run()
  166. {
  167. printf("启动中");
  168. for(int i=1;i<=5;i++)
  169. system("sleep 0.1"),printf(".");
  170. while(1)
  171. {
  172. system("cls");
  173. if(store.getSum()) printf("营业中!\n买糖请输入1,");
  174. else printf("缺货,");
  175. puts("加糖请输入2");
  176. int type=0;
  177. read(type);//提高容错性
  178. if(type==2)
  179. {
  180. if(!users.login()) continue;
  181. puts("请输入品名");
  182. std::string name;
  183. std::cin>>name;
  184. int id=candyList.queryId(name);
  185. puts("请输入数量");
  186. int num,price;
  187. bool transPrice=0;
  188. read(num);
  189. if(!id)
  190. puts("输入定价(分/个)"),read(price),transPrice=1;
  191. else
  192. {
  193. printf("要更改该商品定价请输入1,保持原定价%d 分/个 请输入0\n",store.getPrice(id));
  194. int temp;
  195. read(temp);
  196. if(temp)
  197. {
  198. puts("输入新定价(分/个)"),read(price),transPrice=1;
  199. }
  200. }
  201. if(transPrice) store.addCandy(name,num,price);
  202. else store.addCandy(name,num);
  203. continue;
  204. }
  205. if(type==1)
  206. {
  207. puts("欢迎光临");
  208. store.displayCandy();
  209. puts("输入编号");
  210. int id;
  211. read(id);
  212. puts("输入数量");
  213. int num;
  214. read(num);
  215. puts("输入付款数量");
  216. int pay;
  217. read(pay);
  218. int temp=store.rmCandy(id,num,pay);
  219. if(temp) std::cout<<"给你找零"<<temp<<"分"<<std::endl<<"欢迎再次光临";
  220. system("sleep 2");
  221. system("cls");
  222. continue;
  223. }
  224. puts("输入错误");
  225. system("sleep 2");
  226. }
  227. }
  228. };
  229. int main()
  230. {
  231. FrontPage temp;
  232. temp.run();
  233. return 0;
  234. }

C++自动糖果贩卖机的更多相关文章

  1. 自动贩卖机VS无人门店:谁是真正的零售新风口?

    ​ ​原本在线上不断发力,让实体店几乎凋敝的电商,却忽然对线下兴趣大增.阿里疯狂入股.收购线下商超:京东要在全国范围内开设百万家便利店,仅在农村就将开设50万家--这一股浪潮,或将直接改变整个百货零售 ...

  2. 【BZOJ-4590】自动刷题机 二分 + 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

  3. BZOJ4590 自动刷题机

    Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...

  4. 有限状态机FSM(自动售报机Verilog实现)

    有限状态机FSM(自动售报机Verilog实现) FSM 状态机就是一种能够描述具有逻辑顺序和时序顺序事件的方法. 状态机有两大类:Mealy型和Moore型. Moore型状态机的输出只与当前状态有 ...

  5. AOI自动光学检测机技术在电路板检查中的应用

    1.简述 AOI技术在许多不同的制造业领域使用,自从电子影像技术开始发展,就被各种人利用在不同的应用领域.大家最熟悉的数字相机.数字摄影机是大家生活中最常用到的器材之一,而工业产品的生产也大量使用这些 ...

  6. 做一个自动修改本机IP和mac的bat文件

    原文:做一个自动修改本机IP和mac的bat文件 1.ip bat修改理论探讨 前两天我突然萌生了一个念头:能不能做一个小程序来实现自动配置或修改IP和mac,达到一键搞定的目的,这样尤其适合那些带着 ...

  7. BZOJ_4590_[Shoi2015]自动刷题机_二分答案

    BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...

  8. SMD 自动点料机维修

    SMD 自动点料机维修 这个工具是一个好帮手,但是过完年回来发现坏了. 设置了数量不会自动停,按停止键没有反应,一定要按打印键才能停止. 这可愁死我了. 正常情况下开机设置好数量,然后开始点数,点到数 ...

  9. PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置)

    目录 1. PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置) 1.1. 需要的软件 1.2. 启动 proxy dhcp 服务 1.3. 关键的几个配置文件 PXE 自动安装物理机 ( ...

随机推荐

  1. python 爬虫--下载图片,下载音乐

    #下载图片 imgUrl='http://www.pptbz.com/pptpic/UploadFiles_6909/201211/2012111719294197.jpg' r=requests.g ...

  2. jQuery Mobile Slider Widget 使用js控制

    jQuery Mobile 滑动条控件 基本用法不用多说了,看这里: http://www.runoob.com/jquerymobile/jquerymobile-form-sliders.html ...

  3. luogu题解 P2419 【牛大赛Cow Contest】传递丢包

    题目链接: https://www.luogu.org/problemnew/show/P2419 分析: "在交际网络中,给定若干元素和若干对二元关系,且关系具有传递性. 通过传递性推导出 ...

  4. MySQL两种内核对比

    MySQL内核 https://blog.csdn.net/baichoufei90/article/details/83504446 关键字:全文索引 索引外置 两种内核:MyISAM 和InnoD ...

  5. Maven之私服配置

    一.配置从私服下载 从私服下载主要是将 central 库的下载地址从https://repo1.maven.org/maven2/修改为私服地址,比如http://localhost:8081/re ...

  6. 小程序之textarea层级最高问题

    1.textarea位于底部固定定位按钮下方,会导致点击底部按钮,textarea获取到焦点. 解决方法如下 view与textarea之间在聚焦和失去焦点进行切换 cursor-spacing是te ...

  7. 改变font-weight的数值,样式并不会改变的原因

    通常情况下,一个特定的字体仅会包含少数的可用字重.若所指定的字重不存在直接匹配,则会通过字体匹配算法规则匹配使用邻近的可用字重.这也就是为什么我们有时候使用特定字重时没有“生效”,看起来跟其它字重差不 ...

  8. Linux使用Docker启动Elasticsearch并配合Kibana使用,安装ik分词器

    注意事项 这里我的Linux虚拟机的IP地址是192.168.1.3 Docker运行Elasticsearch容器之后不会立即有反应,要等一会,等待容器内部启动Elasticsearch,才可以访问 ...

  9. win7-32位安装mysql-5.7.27

    下载 https://dev.mysql.com/downloads/mysql/5.7.html#downloads 参考链接 https://blog.csdn.net/qq_41307443/a ...

  10. pyquery:轻松、灵活的处理html

    介绍 pyquery是一个专门用来解析html的库,从名字很容易想到jQuery,没错,这完全是仿照jQuery的语法实现的.如果用过jQuery,那么pyquery也很容易上手 初始化html py ...