您的位置:首页 > 其它

简单的学生信息处理程序实现

2014-03-19 17:16 344 查看
描述

在一个学生信息处理程序中,要求实现一个代表学生的类,并且所有成员变量都应该是私有的。

输入
姓名,年龄,学号,第一学年平均成绩,第二学年平均成绩,第三学年平均成绩,第四学年平均成绩。

其中姓名、学号为字符串,不含空格和逗号;年龄为正整数;成绩为非负整数。

各部分内容之间均用单个英文逗号","隔开,无多余空格。
输出
一行,按顺序输出:姓名,年龄,学号,四年平均成绩(向下取整)。

各部分内容之间均用单个英文逗号","隔开,无多余空格。
样例输入
Tom,18,7817,80,80,90,70


样例输出
Tom,18,7817,80

#include <iostream>
#include <string>

using namespace std;

class STU
{
private:
char name[30];
int age;
char ID[30];
int grade1, grade2, grade3, grade4;
public:
void init();
int ave();
void print();
};

void STU::init()
{
char ch;
cin.getline(name, 30, ',');
cin >> age >> ch;
cin.getline(ID, 30, ',');
cin >> grade1 >> ch >> grade2 >> ch >> grade3 >>
ch >> grade4;
}

int STU::ave()
{
return (grade1 + grade2 + grade3 + grade4)/4;
}

void STU::print()
{
cout << name << "," << age << "," <<
ID << "," << ave() << endl;
}

int main()
{
STU student;
student.init();
student.print();
return 0;
}

下面是郭老师的代码,学习的榜样
/* by Guo Wei
个人习惯:类名和函数名首字母大写,变量名第一个单词小写,后面的单词首字母大写
*/
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
class Student
{
private:
static const int GRADES = 4; //只和Student相关的常量,写在 CStudent类内部比较好
string name;
int id;
int age;
int score[GRADES];
public:
int Average();
string GetName() { return name; }
//返回值不要设成 string & ,哪怕是 const string & 也不太好,因为这样等于向外暴露了 name 属性,“隐藏”的效果不好了
//虽然效率低了点,但面向对象的思想本来就会用程序的运行效率换取工程实现的效率以及可维护性,可重用性等。
int GetId() { return id; }
int GetAge() { return age; }
void SetName( const string & name_) { name = name_; }
void SetAge( int age_) { age = age_; }
void SetId( int id_) { id = id_; }
void SetScore(int score_[]) {
memcpy(score,score_,sizeof(score));
}
void Init(const char *);
};
void Student::Init(const char * line)
{
const char * p = strchr(line,','); //p指向line中的第一个  ','
string s = line;
name = s.substr(0,p-line); // substr(i,l)取从下标i开始,长度为 l 的子串
sscanf(p + 1, "%d,%d,%d,%d,%d,%d",&age,&id,score,score+1,score+2,score+3); // p + 1 指向后面的年龄,学号等的字符串
}
int Student::Average() {
int sum = 0;
for( int i = 0;i < Student::GRADES; ++i )
sum += score[i];
return sum / Student::GRADES;
}
int main()
{
Student stu;
char line[200];
gets(line);
stu.Init(line);
printf("%s,%d,%d,%d",stu.GetName().c_str(),stu.GetAge(),stu.GetId(),stu.Average());
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐