新微赢技术网
标题:
新手问题
[打印本页]
作者:
ご倾城↘恋
时间:
2009-11-3 03:51
标题:
新手问题
谢谢回
统计成绩
[问题描述]
给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。
[基本要求]
(1) 按总数高低次序,打印出名次表,分数相同的为同一名次;
(2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。
作者:
攸哉vs攸哉
时间:
2009-11-3 03:51
先设一个学生类,包含各门课程,和总分。再弄个该类数组
再来一个排序算法就行了。自己遍遍吧,看别人写,不如自己写
作者:
藍麥可兒
时间:
2009-11-3 03:51
谢了,不过平时不努力,这个我写了点,总有错误
作者:
seeYa
时间:
2009-11-3 03:51
以前写的一个,没写完
程序代码:
/*
Name:
Copyright:
Author:
Date: 20-11-07 22:16
Description:
1、add()记录每个学生的各科成绩
2、place()根据总分排出名次
3、aver()求平均分
4、search()根据姓名查询成绩
5、print_result()打印出成绩单
*/
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <algorithm>
#include <utility>
using namespace std;
typedef multimap <string, pair <string, float> > multi_map;
typedef multimap <string, pair <string, float> > ::iterator map_iter;
const int subject_num = 6;
/*=========函数声明===============*/
multi_map add();
map_iter search(multi_map name_score, string name, map_iter &beg);
float aver(multi_map name_score, map_iter beg, map_iter end);
/*========1、add()记录每个学生的各科成绩=============*/
multi_map add()
{
cout << "添加一个记录: " << endl;
cout << "姓名: " << flush;
string name;
cin >> name;
cout << "学号: " << flush;
int stu_num;
cin >> stu_num;
//添加成绩
multimap <string, pair <string, float> > name_score;
float temp;
string subject[] = { "语文 ", "数学 ", "英语 ", "物理 ", "化学 ", "生物 "};
for (int ix = 0; ix != subject_num; ++ix)
{
cout << subject[ix] << ": " << flush;
cin >> temp;
name_score.insert(make_pair(name, make_pair(subject[ix], temp)));
if (ix == subject_num-1)
cout << "输入完成! " << endl;
}
return name_score;
}
/*============search()根据姓名查询成绩=============*/
/*它接受三个参数:name_score为存放信息的容器
name为要查询的姓名
&beg为额外返回的一个name_score.lower_bound(name)产生的迭代器
end函数本身返回一个name_score.upper_bound(name)产生的迭代器
end和&beg用于初始化函数aver()的形参
*/
map_iter
search(multi_map name_score, string name, map_iter &beg)
{
beg = name_score.lower_bound(name);
map_iter end = name_score.upper_bound(name);
if(beg != name_score.end())
{
cout << "以下是为您查询到的内容: " << endl;
while(beg != end)
{
cout << beg-> second.first << flush
<<beg-> second.second << endl;
++beg;
}
}
else
cout << "您要查找的数据不存在! " << endl;
return end;
}
/*============aver()求平均分=============*/
float aver(multi_map name_score, string name, map_iter beg, map_iter end) //
{
float sum = 0;
beg = name_score.lower_bound(name);
end = name_score.upper_bound(name);
while(end != beg)
{
sum += beg-> second.second;
++beg;
}
float average = sum/subject_num;
return average;
}
/*=============主函数===========*/
int main()
{
multi_map add_it;
add_it = add();
cout << "输入要查找的姓名: " << flush;
string name;
cin >> name;
map_iter beg, end;
end = search(add_it, name, beg);
cout << "平均分: " << aver(add_it, name, beg, end) <<endl;
system( "pause ");
return 0;
}
[[italic] 本帖最后由 随心 于 2008-1-9 20:50 编辑 [/italic]]
作者:
爱(じΩvê)
时间:
2009-11-3 03:51
用了C++的语法,面向过程的(当然,你也可以把它封装起来),你参考下。
[[italic] 本帖最后由 随心 于 2008-1-9 20:53 编辑 [/italic]]
欢迎光临 新微赢技术网 (http://bbs.weiying.cn/)
Powered by Discuz! X3.2