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

描述

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

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

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

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

各部分内容之间均用单个英文逗号","隔开,无多余空格。
样例输入
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;
}


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值