描述

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

(注:评测系统无法自动判断变量是否私有。我们会在结束之后统一对作业进行检查,请同学们严格按照题目要求完成,否则可能会影响作业成绩。)

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

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

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

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

Tom,18,7817,80,80,90,70

样例输出

Tom,18,7817,80

Analysis:

how to let the string become stream, and split the stream with ',':

this is my first OOP's code, At the first time I think it will be easy, but when i was trying to solve it I found it is so difficute. The main question is that I am not familar with Object-Oriented Programming.

this is my code:

#include<bits/stdc++.h>
#include<iostream> using namespace std; class Student {
string name;
int age;
int number;
int grade[4];
int averageSocre; public:
void calculateAverageSocre() {
int sum = 0;
for (int i = 0; i < 4; ++i) {
sum += grade[i];
}
averageSocre = (sum / 4);
} int print() {
cout << name << ',' << age << ',' << number << ',' << averageSocre << endl;
} void init(string str) {
stringstream ss;
ss << str;
string token;
getline(ss, token, ',');
name = token;
getline(ss, token, ',');
age = stoi(token);
getline(ss, token, ',');
number = stoi(token);
int index = 0;
while (getline(ss, token, ',')) {
grade[index++] = stoi(token);
}
}
}; int main() {
Student A; string str; cin >> str; A.init(str);
A.calculateAverageSocre();
A.print(); return 0;
}

  

The below code are more better:

/* 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;
}

  

C:简单的学生信息处理程序实现的更多相关文章

  1. 编程作业—C++初探 简单的学生信息处理程序实现

    简单的学生信息处理程序实现 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 ...

  2. 【python免费代码】设计一个简单的学生信息管理系统

    文章目录 前言 一.理解 二.部分截图展示 三.代码 四.总结 前言 设计一个简单的学生信息管理系统,实现以下功能(bug) : 录入学生信息,信息以文件方式存储 以学生学号或者学生姓名为条件查询该学 ...

  3. PHP实现简单的学生信息管理系统(web版)

    (∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...

  4. C++ 简单的学生信息管理系统

    // // main.cpp // 2013-7-17作业1 // // Created by 丁小未 on 13-7-17. // Copyright (c) 2013年 dingxiaowei. ...

  5. 程序阅读:简单C++学生信息管理系统

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读并执行以下的程序,找出当中出现 ...

  6. javaweb简单的学生信息录入系统

    讲一下思路,主界面的设计就是用html表单元素,百度查找各个元素的用法,按照自己的想法摆放即可,表单提交后会把数据交给serverlet去处理,在那里定义几个字符串变量来储存获取到的数据,然后按照项目 ...

  7. Py学生信息管理系统 案例(优化版)

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  8. Python学生信息管理系统的开发

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  9. Python基础案例练习:制作学生信息管理系统

    一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...

随机推荐

  1. Linux网络编程——tcp并发服务器(poll实现)

    想详细彻底地了解poll或看懂下面的代码请参考<Linux网络编程——I/O复用之poll函数> 代码: #include <string.h> #include <st ...

  2. 使用Azure Site Recovery把VM批量搬迁到Azure

    Azure Site Recovery可以提供如下服务: Site Recovery 服务:Site Recovery 可以在站点出现故障时,让应用在其他站点继续可用,从而确保业务连续性. Site ...

  3. laravel的批量插入

    在日常开发中,用到批量插入的操作还是挺多的.记得很早很早以前,我还是在循环中写sql插入,结果被项目经理按在地上摩擦.好吧,性能这东西,用不到的时候还好,万一性能成为瓶颈,那代码优化,数据库优化就首当 ...

  4. HDU5468(dfs序+容斥原理)

    Puzzled Elena Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. 第 十六 课 Map

    Map 是一种无序的键值对的集合 var mymap map[string]string //先声明一个字典(map)名字叫做mymap,其key所对应的数据类型是string[字符串],value所 ...

  6. windows下查看端口占用(砖)

    第一步,执行命令:netstat -ano -a 显示所有连接和监听端口 -n 以数字形式显示地址和端口号. 此选项一般与 -a选项组合使用 -o 显示与每个连接相关的所属进程 ID. Active ...

  7. TCP/IP 笔记 7 Ping

    lenovo-myc@lenovomyc-Lenovo-Product:~$ ping www.baidu.com PING www.a.shifen.com (() bytes of data. 这 ...

  8. 《Android应用性能优化》 第8章 图形

    1.例子中 30个部件的xml setContentView 几乎占用了从onCreate() 到 onResume() 结束之前所有时间的99% 因为展开布局的开销很大.要尽量用不同的布局方式.比如 ...

  9. Oracle之DBMS_SQL包用法详解

    对于一般的(select)操作,如果使用动态的sql语句则需要进行以下几个步骤:open  cursor--->parse---> bind  variable  ---> defi ...

  10. JAVA中几个修饰符的作用以及一些相关话题

    几个传统的修饰符: public 该类的子类,以及同包,或者其他情况下可以访问该修饰符修饰的方法/变量 protacted 只有同包,子类,该类本身可以访问 private 只有该类自身能访问 无修饰 ...