C:简单的学生信息处理程序实现
描述
在一个学生信息处理程序中,要求实现一个代表学生的类,并且所有成员变量都应该是私有的。
(注:评测系统无法自动判断变量是否私有。我们会在结束之后统一对作业进行检查,请同学们严格按照题目要求完成,否则可能会影响作业成绩。)
输入姓名,年龄,学号,第一学年平均成绩,第二学年平均成绩,第三学年平均成绩,第四学年平均成绩。
其中姓名、学号为字符串,不含空格和逗号;年龄为正整数;成绩为非负整数。
各部分内容之间均用单个英文逗号","隔开,无多余空格。输出一行,按顺序输出:姓名,年龄,学号,四年平均成绩(向下取整)。
各部分内容之间均用单个英文逗号","隔开,无多余空格。样例输入
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:简单的学生信息处理程序实现的更多相关文章
- 编程作业—C++初探 简单的学生信息处理程序实现
简单的学生信息处理程序实现 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 ...
- 【python免费代码】设计一个简单的学生信息管理系统
文章目录 前言 一.理解 二.部分截图展示 三.代码 四.总结 前言 设计一个简单的学生信息管理系统,实现以下功能(bug) : 录入学生信息,信息以文件方式存储 以学生学号或者学生姓名为条件查询该学 ...
- PHP实现简单的学生信息管理系统(web版)
(∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...
- C++ 简单的学生信息管理系统
// // main.cpp // 2013-7-17作业1 // // Created by 丁小未 on 13-7-17. // Copyright (c) 2013年 dingxiaowei. ...
- 程序阅读:简单C++学生信息管理系统
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读并执行以下的程序,找出当中出现 ...
- javaweb简单的学生信息录入系统
讲一下思路,主界面的设计就是用html表单元素,百度查找各个元素的用法,按照自己的想法摆放即可,表单提交后会把数据交给serverlet去处理,在那里定义几个字符串变量来储存获取到的数据,然后按照项目 ...
- Py学生信息管理系统 案例(优化版)
# 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...
- Python学生信息管理系统的开发
# 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...
- Python基础案例练习:制作学生信息管理系统
一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...
随机推荐
- 减小SSN影响
单板级SSN 从单板级来看,芯片中多个逻辑门同时翻转时,将从单板电源和地平面瞬间汲取较大的电流.任何电源分配系统都存在着阻抗,特别是感抗,导致在短时间内电压调整模块来不及供应这些电流,从而在单板和电源 ...
- HDU4135(容斥原理)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- Mingw版QtCreator调用VS编译的C++库的方法
https://wenku.baidu.com/view/ae3667fe0b1c59eef8c7b4bc.html
- 机器学习:PCA(人脸识别中的应用——特征脸)
一.思维理解 X:原始数据集: Wk:原始数据集 X 的前 K 个主成分: Xk:n 维的原始数据降维到 k 维后的数据集: 将原始数据集降维,就是将数据集中的每一个样本降维:X(i) . WkT = ...
- java代码继承------多层继承
总结:继承.方法的重要性, 运行结果显示: class A is callingclass B is callingclass C is calling package com.addd; //jav ...
- SQL 用;with 由所有的子节点查询到树结构中所有父节点
1.所有的子节点查询到树结构中所有父节点 RETURNS @Tree Table(PID )) as begin --DECLARE @ID VARCHAR() --SET @ID = ' ;with ...
- 文件锁简单操作(lockfileEx\unlockfileEx)
#include "stdafx.h"#include <Windows.h>#include <iostream> using namespace std ...
- [hdu4333]Revolving Digits
/*注意注意:本题非hdu4333原题,而是简化版,原版有多组数据.但此代码在修改输入后依旧可以通过多组数据*/ 给出一个数字串,问有多少本质不同同构串比原串小,一样,大.同构串是指,对于原串S[1- ...
- elasticsearch(3) curl命令
curl 操作http的get/post/put/delete CURL 命令参数-a/--append 上传文件时,附加到目标文件-A/--user-agent <string> 设置用 ...
- 1-EasyNetQ介绍(黄亮翻译)
EasyNetQ 是一个容易使用,坚固的,针对RabbitMQ的 .NET API. 假如你尽可能快的想去安装和运行RabbitMQ,请去看入门指南. EasyNetQ是为了提供一个尽可能简洁的适用与 ...