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

这道题总体还好就是过程挺长的要考虑的东西就多起来了

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

#define MAX 105
#define EPS 1e-5

struct student{
	string sid;
	int cid;
	string name;
	int score[5];
	int removed;
} students[MAX];

int counts = 0;

void print_menu();
void add();
int Rank(int);
void DQ(int);
void output(int, int);
void stat();

int main() {
	/*
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	*/
	while (1) {
		int choice;
		print_menu();
		cin >> choice;
		if (choice == 0)
			break;
		if (choice == 1)
			add();
		if (choice == 2)
			DQ(0);
		if (choice == 3)
			DQ(1);
		if (choice == 4)
			puts("Showing the ranklist hurts students' self-esteem. Don't do that.");
		if (choice == 5)
			stat();
	}
	return 0;
}

void print_menu() {
	puts("Welcome to Student Performance Management System (SPMS).\n");
	puts("1 - Add");
	puts("2 - Remove");
	puts("3 - Query");
	puts("4 - Show ranking");
	puts("5 - Show Statistics");
	puts("0 - Exit\n");
}

void add() {
	while(1) {
		puts("Please enter the SID, CID, name and four scores. Enter 0 to finish.");
		student input;
		cin >> input.sid;
		if(input.sid == "0")
			break;
		cin >> input.cid;
		cin >> input.name;
		cin >> input.score[0];
		cin >> input.score[1];
		cin >> input.score[2];
		cin >> input.score[3];
		
		int flag = 0;
		for(int i = 0; i < counts; i++)
			if(!students[i].removed && input.sid == students[i].sid) {
                puts("Duplicated SID.");
                flag = 1;
                continue;
            }
        if(!flag) {
			input.score[4] = input.score[0] + input.score[1] + input.score[2] + input.score[3];
			input.removed = 0;
			students[counts++] = input;
        }
    }
}

int Rank(int x) {
	int score = students[x].score[4];
	int n = 1;
	for(int i = 0; i < counts; i++)
		if (!students[i].removed && students[i].score[4] > score)
			n++;
	return n;
}

void DQ(int isq) {
	string s;
	while (1) {
		puts("Please enter SID or name. Enter 0 to finish.");
		cin >> s;
		if (s == "0")
			break;
		int r = 0;
		for (int i = 0; i < counts; i++)
			if (!students[i].removed) {
				if (students[i].sid == s || students[i].name == s) {
					if (isq) {
						cout << Rank(i) << ' ' << students[i].sid << ' ' << students[i].cid << ' ' << students[i].name << ' '
							 << students[i].score[0] << ' ' << students[i].score[1] << ' ' << students[i].score[2] << ' ' 
							 << students[i].score[3] << ' ' << students[i].score[4] << ' ';
						printf("%.2f\n", students[i].score[4]/4.0+EPS);
					}
					else {
						students[i].removed = 1;
						r++;
					}
				}
			}
			if (!isq)
				printf("%d student(s) removed.\n", r);
	}
}

void output(int id, int type) {
	int sum = 0, count1 = 0, count2 = 0;
	for(int i = 0; i < counts; i++) {
		if(!students[i].removed && (id == 0 || students[i].cid == id)) {
			sum += students[i].score[type];
			if(students[i].score[type] >= 60)
				count1++;
			else
				count2++;
		}
	}
	printf("Average Score: %.2f\n", count1 + count2 == 0 ? 0 : sum * 1.0/ (count1+count2) + EPS);
	printf("Number of passed students: %d\n", count1);
	printf("Number of failed students: %d\n", count2);
	putchar('\n');
}

void stat() {
	int id;
	puts("Please enter class ID, 0 for the whole statistics.");
	cin >> id;
	puts("Chinese");
	output(id, 0);
	puts("Mathematics");
	output(id, 1);
	puts("English");
	output(id, 2);
	puts("Programming");
	output(id, 3);
	puts("Overall:");
	int passcount[5];
	memset(passcount, 0, sizeof(passcount));
	for(int i = 0; i < counts; i++) {
		if(!students[i].removed && (id == 0 || students[i].cid == id)) {
			int pass = 0;
			for(int j = 0; j < 4; j++)
				if(students[i].score[j] >= 60)
					pass++;
			passcount[pass]++;
		}
	}
	printf("Number of students who passed all subjects: %d\n", passcount[4]);
	printf("Number of students who passed 3 or more subjects: %d\n", passcount[3] + passcount[4]);
	printf("Number of students who passed 2 or more subjects: %d\n", passcount[2] + passcount[3] + passcount[4]);
	printf("Number of students who passed 1 or more subjects: %d\n", passcount[1] + passcount[2] + passcount[3] + passcount[4]);
	printf("Number of students who failed all subjects: %d\n", passcount[0]);
	putchar('\n');
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值