A Typical Homework UVA - 12412 师兄帮帮忙
题目链接
(题目背景略,有兴趣的读者请自行阅读原题)
编写一个成绩管理系统(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 师兄帮帮忙相关推荐
- UVA12412 A Typical Homework (a.k.a 师兄帮帮忙) 题解
题意 实现一个学生信息管理系统,完成要求功能,并按要求输出.具体内容可以看[UVA12412](UVA12412 A Typical Homework (a.k.a 师兄帮帮忙) - 洛谷 | 计算机 ...
- HDU4506 小明系列故事——师兄帮帮忙
问题链接:HDU4506 小明系列故事--师兄帮帮忙. 问题描述:参见上述链接. 问题分析:(略). 程序说明:函数powermod()是快速模幂函数. AC的C++语言程序如下: /* HDU450 ...
- 杭电4506小明系列故事——师兄帮帮忙
小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- HDU4506 小明系列故事——师兄帮帮忙【水题】
小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- 师兄帮帮忙:有困难,找师兄!
"爱国爱家爱师妹,防火防盗防师兄"这是小编上学时非常流行的一幅对联.不过,现在一切都与时俱进了,师妹当然还是用来爱的,而师兄早已从防范对象升级为求助对象,一则"学长帮我修 ...
- 杭电4506-小明系列故事——师兄帮帮忙
小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- 例题4-6 师兄帮帮忙 UVa12412
例题4-6 师兄帮帮忙 UVa12412 感悟. 1.阅读书中题目,从网站下载英文原题,重点在看输出数据与格式. 2.开始编码,先搭函数框架,具体功能实现,待主体框架打好后,再进行. 3.程序测试比较 ...
- hdu 4506 小明系列故事——师兄帮帮忙
小明系列故事--师兄帮帮忙 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...
- HDU 4506 小明系列故事——师兄帮帮忙
小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
最新文章
- Fiddler可以支持Websocket抓包了
- NBU备份之一 Windows操作系统BMR的配置
- PHP编译安装时常见错误解决办法,php编译常见错误
- 001_Layout布局
- DIV Scroll属性
- 层次聚类 matlab代码_聚类算法解析一
- Angular 的概念模型
- 子元素个数不定的垂直居中布局
- 不等式解集怎么取_七年级下学期《8.2不等式及不等式组的解集》2020年高频易错题集...
- Uncaught TypeError: Cannot read property 'tagNa...
- 克隆的仓库 设置全局https协议转换成git协议,加快拉取速度(git)
- Linux数据管理——文件锁定
- 模板 | 年度财务分析报告财务工作汇报PPT
- php smarty key,php Smarty模版详解
- 20220915使用python3下载ts格式的视频切片文件
- 黑马程序员-随笔-我与程序员
- 计算机网络CDMA是什么,CDMA是什么
- ABP 代理JS 生成
- 51、C# 图片中非白色动态转换成红色,主要应用于指纹图片,呈现红色印泥效果
- thinkphp5+数据大屏展示效果