题目链接

(题目背景略,有兴趣的读者请自行阅读原题)
编写一个成绩管理系统(SPMS)。最多有100个学生,每个学生有如下属性。

  • SID:学生编号,包含10位数字。
  • CID:班级编号,为不超过20的正整数。
  • 姓名:不超过10的字母和数字组成,第一个字符为大写字母。名字中不能有空白字符。
  • 4门课程(语文、数学、英语、编程)成绩,均为不超过100的非负整数。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int N = 1000+5;
const double EPS = 1e-5;
const string CLASS_NAME[4] = {"Chinese", "Mathematics", "English", "Programming"};
int removes[N], len;
struct Student{string sid, name;int cid, scores[5], total;
}stu[N];void mune(){cout<< "Welcome to Student Performance Management System (SPMS).\n\n""1 - Add\n""2 - Remove\n""3 - Query\n""4 - Show ranking\n""5 - Show Statistics\n""0 - Exit\n\n";
}bool find(const string &s){for(int i = 0; i < len; i++)if(!removes[i] && stu[i].sid == s)  return true;return false;
} void addStudent(){while(true){cout<< "Please enter the SID, CID, name and four scores. Enter 0 to finish.\n";cin>> stu[len].sid;if(stu[len].sid == "0") break; cin>> stu[len].cid>> stu[len].name>> stu[len].scores[0]>> stu[len].scores[1]>> stu[len].scores[2]>> stu[len].scores[3];      if(find(stu[len].sid)){cout<< "Duplicated SID.\n";}else{stu[len].total = stu[len].scores[0]+stu[len].scores[1]+stu[len].scores[2]+stu[len].scores[3];len++;}}
}void removeStudent(){while(true){cout<< "Please enter SID or name. Enter 0 to finish.\n";string s;cin>> s;if(s == "0") return;int cnt = 0;for(int i = 0; i < len; i++){if( !removes[i] && (stu[i].name == s || stu[i].sid == s)){cnt++;removes[i] = true;}}cout<< cnt<< " student(s) removed.\n";}
}int findRank(int tot){int rank = 1;for(int i = 0; i < len; i++)if(!removes[i] && stu[i].total > tot)  rank++;return rank;
}void query(){while(true){cout<< "Please enter SID or name. Enter 0 to finish.\n";string s;cin>> s;if( !s.compare("0")) return;for(int i = 0; i < len; i++){if(!removes[i] && ( !s.compare(stu[i].sid) || s == stu[i].name)){cout<< findRank(stu[i].total)<< " "<< stu[i].sid << " "<< stu[i].cid<< " "<< stu[i].name<< " ";for(int j = 0; j < 4; j++) cout<< stu[i].scores[j]<< " "; cout<< stu[i].total;printf(" %.2lf\n",stu[i].total/4.0+EPS); //必须要加EPS }}}
}void statistics(){cout<< "Please enter class ID, 0 for the whole statistics.\n";   double avg[4] = {};int pass[4] = {}, sum = 0, passCnt[5] = {}, cnt = 0,id; cin>> id;  for(int i = 0; i < len; i++){if(!removes[i] &&( !id || id == stu[i].cid)){sum++;cnt = 0;for(int j = 0; j < 4; j++){avg[j] += stu[i].scores[j];if(stu[i].scores[j] >= 60){pass[j]++;cnt++; }}passCnt[cnt]++;}  }if( sum > 0)  for(int i = 0; i < 4; i++) avg[i] /= sum;for(int i = 0; i < 4; i++){cout<< CLASS_NAME[i]<< "\n";   printf("Average Score: %.2lf\n", avg[i]+EPS);printf("Number of passed students: %d\n", pass[i]);printf("Number of failed students: %d\n\n",sum-pass[i]);}cout<< "Overall:\n";printf("Number of students who passed all subjects: %d\n",passCnt[4]);printf("Number of students who passed 3 or more subjects: %d\n",passCnt[3]+passCnt[4]);printf("Number of students who passed 2 or more subjects: %d\n",passCnt[2]+passCnt[3]+passCnt[4]);printf("Number of students who passed 1 or more subjects: %d\n",passCnt[1]+passCnt[2]+passCnt[3]+passCnt[4]);printf("Number of students who failed all subjects: %d\n\n",passCnt[0]);}int main(int argc, char** argv) {mune();int cmd;while(cin>> cmd && cmd){     if( cmd == 1)  addStudent();else if( cmd == 2)  removeStudent();else if( cmd == 3)  query();else if( cmd == 4)  cout<< "Showing the ranklist hurts students' self-esteem. Don't do that.\n";else if( cmd == 5)  statistics();mune();}return 0;
}

A Typical Homework UVA - 12412 师兄帮帮忙相关推荐

  1. UVA12412 A Typical Homework (a.k.a 师兄帮帮忙) 题解

    题意 实现一个学生信息管理系统,完成要求功能,并按要求输出.具体内容可以看[UVA12412](UVA12412 A Typical Homework (a.k.a 师兄帮帮忙) - 洛谷 | 计算机 ...

  2. HDU4506 小明系列故事——师兄帮帮忙

    问题链接:HDU4506 小明系列故事--师兄帮帮忙. 问题描述:参见上述链接. 问题分析:(略). 程序说明:函数powermod()是快速模幂函数. AC的C++语言程序如下: /* HDU450 ...

  3. 杭电4506小明系列故事——师兄帮帮忙

    小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  4. HDU4506 小明系列故事——师兄帮帮忙【水题】

    小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  5. 师兄帮帮忙:有困难,找师兄!

    "爱国爱家爱师妹,防火防盗防师兄"这是小编上学时非常流行的一幅对联.不过,现在一切都与时俱进了,师妹当然还是用来爱的,而师兄早已从防范对象升级为求助对象,一则"学长帮我修 ...

  6. 杭电4506-小明系列故事——师兄帮帮忙

    小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  7. 例题4-6 师兄帮帮忙 UVa12412

    例题4-6 师兄帮帮忙 UVa12412 感悟. 1.阅读书中题目,从网站下载英文原题,重点在看输出数据与格式. 2.开始编码,先搭函数框架,具体功能实现,待主体框架打好后,再进行. 3.程序测试比较 ...

  8. hdu 4506 小明系列故事——师兄帮帮忙

    小明系列故事--师兄帮帮忙 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total ...

  9. HDU 4506 小明系列故事——师兄帮帮忙

    小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

最新文章

  1. Fiddler可以支持Websocket抓包了
  2. NBU备份之一 Windows操作系统BMR的配置
  3. PHP编译安装时常见错误解决办法,php编译常见错误
  4. 001_Layout布局
  5. DIV Scroll属性
  6. 层次聚类 matlab代码_聚类算法解析一
  7. Angular 的概念模型
  8. 子元素个数不定的垂直居中布局
  9. 不等式解集怎么取_七年级下学期《8.2不等式及不等式组的解集》2020年高频易错题集...
  10. Uncaught TypeError: Cannot read property 'tagNa...
  11. 克隆的仓库 设置全局https协议转换成git协议,加快拉取速度(git)
  12. Linux数据管理——文件锁定
  13. 模板 | 年度财务分析报告财务工作汇报PPT
  14. php smarty key,php Smarty模版详解
  15. 20220915使用python3下载ts格式的视频切片文件
  16. 黑马程序员-随笔-我与程序员
  17. 计算机网络CDMA是什么,CDMA是什么
  18. ABP 代理JS 生成
  19. 51、C# 图片中非白色动态转换成红色,主要应用于指纹图片,呈现红色印泥效果
  20. thinkphp5+数据大屏展示效果

热门文章

  1. 最全面!2019年最新UX设计趋势预测集锦
  2. 根据IP地址判断客户端属于哪个国家或地区
  3. npm安装依赖太慢问题
  4. Go text模版和HTML模版【Go语言圣经笔记】
  5. UniswapV2核心合约学习(1)— UniswapV2Factory.sol
  6. 《二》ODOO15的产品成本核算报表说明
  7. html5 自建工作流,flowable可视化工作流设计器,html5工作流设计器,vue版本工作流...
  8. sql如何根据时间取出最新的数据记录
  9. 今年支付宝的集福字就靠这个了,天天不重样
  10. 计算机图形学 实验补充一二 层级建模