1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define judge(a,func) case a:func();break;
  4. using namespace std;
  5. void println(string s){
  6. cout<<s<<'\n';
  7. }
  8. void main_menu(){
  9. println("Welcome to Student Performance Management System (SPMS).");
  10. println("");
  11. println("1 - Add");
  12. println("2 - Remove");
  13. println("3 - Query");
  14. println("4 - Show ranking");
  15. println("5 - Show Statistics");
  16. println("0 - Exit");
  17. println("");
  18. }
  19. struct Student{
  20. string sid,name;
  21. int cid;
  22. int chinese,mathematics,english,programming;
  23. bool operator==(const Student &x) const{
  24. return sid==x.sid && cid==x.cid && chinese==x.chinese && mathematics==x.mathematics && english==x.english && programming == x.programming;
  25. }
  26. };
  27. vector<Student> v;
  28. map<string,bool> duplicated;
  29. void add(){
  30. println("Please enter the SID, CID, name and four scores. Enter 0 to finish.");
  31. string sid;
  32. cin>>sid;
  33. if(sid=="0")return;
  34. Student student;
  35. student.sid=sid;
  36. cin>>student.cid>>student.name>>student.chinese>>student.mathematics>>student.english>>student.programming;
  37. if(duplicated[sid]){
  38. println("Duplicated SID.");
  39. }
  40. else{
  41. duplicated[sid]=1;
  42. v.push_back(student);
  43. }
  44. add();
  45. }
  46. void remove(){
  47. println("Please enter SID or name. Enter 0 to finish.");
  48. string str;
  49. cin>>str;
  50. stack<vector<Student>::iterator> removing;
  51. if(str=="0")return;
  52. int tot=0;
  53. for(auto ite=v.begin();ite!=v.end();ite++){
  54. if((*ite).sid==str || (*ite).name==str){
  55. tot++;
  56. duplicated[(*ite).sid]=0;
  57. removing.push(ite);
  58. }
  59. }
  60. while(!removing.empty()){
  61. v.erase(removing.top());
  62. removing.pop();
  63. }
  64. cout<<tot;
  65. println(" student(s) removed.");
  66. remove();
  67. }
  68. int total(Student x){
  69. return x.chinese+x.english+x.mathematics+x.programming;
  70. }
  71. void query(){
  72. println("Please enter SID or name. Enter 0 to finish.");
  73. string str;
  74. cin>>str;
  75. if(str=="0")return;
  76. for(Student i : v){
  77. if(i.sid==str || i.name==str){
  78. vector<Student> same_class;
  79. for(Student j : v){
  80. same_class.push_back(j);
  81. }
  82. sort(same_class.begin(),same_class.end(),[&](const Student &x,const Student &y){
  83. return x.chinese+x.mathematics+x.english+x.programming>y.chinese+y.mathematics+y.english+y.programming;
  84. });
  85. int ret=0;
  86. for(vector<Student>::size_type j=0;j<same_class.size();j++){
  87. if(j>0&&total(same_class[j])==total(same_class[j-1])){}
  88. else ret=j+1;
  89. if(same_class[j]==i){
  90. break;
  91. }
  92. }
  93. cout<<ret<<' '<<i.sid<<' '<<i.cid<<' '<<i.name<<' ';
  94. cout<<i.chinese<<' '<<i.mathematics<<' '<<i.english<<' '<<i.programming<<' ';
  95. cout<<(i.chinese+i.mathematics+i.english+i.programming)<<' ';
  96. printf("%.2lf\n",((double)((i.chinese+i.mathematics+i.english+i.programming))/4.0)+1e-5);
  97. }
  98. }
  99. query();
  100. }
  101. void show_ranking(){
  102. println("Showing the ranklist hurts students' self-esteem. Don't do that.");
  103. }
  104. void show_statisitics(){
  105. println("Please enter class ID, 0 for the whole statistics.");
  106. int cid;cin>>cid;
  107. int passed=0,failed=0;
  108. double aver=0;
  109. int cnt=0;
  110. for(Student i : v){
  111. if(i.cid!=cid&&cid!=0)continue;
  112. cnt++;
  113. }
  114. {
  115. println("Chinese");
  116. for(Student i : v){
  117. if(i.cid!=cid&&cid!=0)continue;
  118. aver += i.chinese;
  119. passed += (i.chinese >= 60);
  120. failed += (i.chinese < 60);
  121. }
  122. aver /= cnt;
  123. cout<<"Average Score: ";
  124. printf("%.2lf\n",aver+1e-5);
  125. cout<<"Number of passed students: "<<passed<<'\n';
  126. cout<<"Number of failed students: "<<failed<<'\n';
  127. println("");
  128. }
  129. {
  130. aver=0;failed=0;passed=0;
  131. println("Mathematics");
  132. for(Student i : v){
  133. if(i.cid!=cid&&cid!=0)continue;
  134. aver += i.mathematics;
  135. passed += (i.mathematics >= 60);
  136. failed += (i.mathematics < 60);
  137. }
  138. aver /= cnt;
  139. cout<<"Average Score: ";
  140. printf("%.2lf\n",aver+1e-5);
  141. cout<<"Number of passed students: "<<passed<<'\n';
  142. cout<<"Number of failed students: "<<failed<<'\n';
  143. println("");
  144. }
  145. {
  146. aver=0;failed=0;passed=0;
  147. println("English");
  148. for(Student i : v){
  149. if(i.cid!=cid&&cid!=0)continue;
  150. aver += i.english;
  151. passed += (i.english >= 60);
  152. failed += (i.english < 60);
  153. }
  154. aver /= cnt;
  155. cout<<"Average Score: ";
  156. printf("%.2lf\n",aver+1e-5);
  157. cout<<"Number of passed students: "<<passed<<'\n';
  158. cout<<"Number of failed students: "<<failed<<'\n';
  159. println("");
  160. }
  161. {
  162. aver=0;failed=0;passed=0;
  163. println("Programming");
  164. for(Student i : v){
  165. if(i.cid!=cid&&cid!=0)continue;
  166. aver += i.programming;
  167. passed += (i.programming >= 60);
  168. failed += (i.programming < 60);
  169. }
  170. aver /= cnt;
  171. cout<<"Average Score: ";
  172. printf("%.2lf\n",aver+1e-5);
  173. cout<<"Number of passed students: "<<passed<<'\n';
  174. cout<<"Number of failed students: "<<failed<<'\n';
  175. println("");
  176. }
  177. println("Overall:");
  178. int all=0,one=0,two=0,three=0,failed_all=0;
  179. for(Student i : v){
  180. if(i.cid!=cid&&cid!=0)continue;
  181. int ret = (int)(i.chinese>=60)+(int)(i.mathematics>=60)+(int)(i.english>=60)+(int)(i.programming>=60);
  182. if(ret>=1)one++;
  183. if(ret>=2)two++;
  184. if(ret>=3)three++;
  185. if(ret>=4)all++;
  186. if(ret==0)failed_all++;
  187. }
  188. cout<<"Number of students who passed all subjects: "<<all<<'\n';
  189. cout<<"Number of students who passed 3 or more subjects: "<<three<<'\n';
  190. cout<<"Number of students who passed 2 or more subjects: "<<two<<'\n';
  191. cout<<"Number of students who passed 1 or more subjects: "<<one<<'\n';
  192. cout<<"Number of students who failed all subjects: "<<failed_all<<'\n';
  193. println("");
  194. }
  195. signed main(){
  196. // freopen("1.out","w",stdout);
  197. while(1){
  198. main_menu();
  199. int op;
  200. cin>>op;
  201. switch(op){
  202. judge(1,add);
  203. judge(2,remove);
  204. judge(3,query);
  205. judge(4,show_ranking);
  206. judge(5,show_statisitics);
  207. case 0:return 0;
  208. }
  209. }
  210. }

UVA12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) 代码的更多相关文章

  1. 【例题4-6 uva12412】A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 训练编程的题. 原题中没有除0的数据,所以别担心你的代码是因为除0错了. 多半跟我一样. 也是因为没有+eps 就是比如你要算tot ...

  2. UVA12412 师兄帮帮忙 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) 题解

    Content 自己去看题面去. Solution 算不上很繁琐的一道大模拟. 首先,既然是输出 \(0\) 才退出,那么在此之前程序应当会执行菜单 \(\Rightarrow\) 子操作 \(\Ri ...

  3. UVA 12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)

    题目链接:https://vjudge.net/problem/UVA-12412 题目大意 略. 分析 比较大规模的模拟,注意输入输出,浮点数精度,还有排名相同的输出顺序,还有一些边界情况处理. 代 ...

  4. A Typical Homework(学生信息管理系统)

    A Typical Homework(a.k.a Shi Xiong Bang Bang Mang) Hi, I am an undergraduate student in institute of ...

  5. 《K&R》里贯穿全书的代码

    个人阅读<K&R>的感觉就是:前后内容联系特别紧密,前面的代码没有理解好到了后面就看不下去. 1.getline(char s[], int lim) 调用结果:往参数数组中读入字 ...

  6. k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建

    更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...

  7. k/3cloud表格控件块粘贴代码逻辑

    大家可以在表单插件EntityBlockPasting事件中自己处理,然后将cancel设置为true.以下代码可以参考一下,插件代码中需要将其中一些属性或方法修改,例如this.BusinessIn ...

  8. [LeetCode] Top K Frequent Elements 前K个高频元素

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  9. 71. Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  10. 【编程题目】查找最小的 k 个元素

    5.查找最小的 k 个元素(数组)题目:输入 n 个整数,输出其中最小的 k 个.例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4. 算法里面学 ...

随机推荐

  1. .NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度

    作业调度其实就是一个定时器,定时完成某件事, 比如:每分钟执行一次,每小时执行一次,每天执行一次,第二周几执行,每月几号几点执行,间隔多少个小时执行一次等. 作业类:XiaoFeng.Threadin ...

  2. http://localhost:8282/user/findsomeuser[object%20Object]

    查看vue中的方法的访问路径是否填写正确. 后端:

  3. 题解 UVA10285 最长的滑雪路径 Longest Run on a Snowboard

    Solution 双倍经验 就是记搜嘛. 搞一个二维数组记录一下当前的最长滑雪路径,其他和普通 dfs 没什么两样. 向 \(4\) 个方向搜索,如果高度符合就 \(+1\) . 多测要注意数组初始化 ...

  4. nrf9160 做modem—— 连接云(接入方式MQTT)

    今天测试把nrf9160作为modem的例程Serial LTE Modem程序(后面简称slm),何为做modem,通俗来说就是将nrf9160作为无线模块,主控由其余MCU做,主控通过AT命令控制 ...

  5. letcode刷题记录-day03-罗马转整数

    题目 罗马转整数 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 ...

  6. Codeforces Round #832 (Div. 2) A-D

    比赛链接 A 题解 知识点:贪心. 我们考虑把正数和负数分开放,显然把负数和正数放在一起的结果不会更优. 时间复杂度 \(O(n)\) 空间复杂度 \(O(1)\) 代码 #include <b ...

  7. Git 分支管理策略汇总

    原文链接: Git 分支管理策略 最近,团队新入职了一些小伙伴,在开发过程中,他们问我 Git 分支是如何管理的,以及应该怎么提交代码? 我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的 ...

  8. 【题解】CF631B Print Check

    题面传送门 解决思路: 首先考虑到,一个点最终的情况只有三种可能:不被染色,被行染色,被列染色. 若一个点同时被行.列染色多次,显示出的是最后一次被染色的结果.所以我们可以使用结构体,对每一行.每一列 ...

  9. Vue3 企业级优雅实战 - 组件库框架 - 4 组件库的 CSS 架构

    在前一篇文章中分享了搭建组件库的基本开发环境.创建了 foo 组件模块和组件库入口模块,本文分享组件库的样式架构设计. 1 常见的 CSS 架构模式 常见的 CSS 架构模式有很多:OOCSS.ACS ...

  10. 推荐三个实用的 Go 开发工具

    孙悟空在花果山称王的时候,特意去了一趟东海,在那里淘到了如意金箍棒.因为身为一个山大王,怎么能没有一件趁手的兵器呢? 作为程序员的我们也一样,除了我们的傍身武器 Ctrl C + V 之外,还要不停的 ...