从键盘输入若干学生信息,写入文本文件中,再从该文本文件中读出学生的信息。

该代码示例展示了如何使用C++定义一个学生类,包括学号、姓名和成绩等成员数据,并通过友元函数重载输入输出流操作符。程序能够从键盘接收学生信息,将其写入文件,然后从文件读取并显示所有学生信息,同时计算并输出平均成绩。
摘要由CSDN通过智能技术生成

具体要求如下:

(1)应定义学生类Student,成员数据包括学号、姓名和成绩等;

(2)建议用友元函数为学生类重载输入输出流的<<和>>运算符,实现学生信息的整体输入输出功能;例如:

friend istream& operator >> (istream&, Student&);

friend ostream& operator << (ostream&, Student&);

(3) 要求在主函数中,从键盘输入多个学生的信息

(4) 要求将全部学生信息存入文本文件中;

(5) 最后从文件中读出全部学生信息显示到屏幕上,并求平均成绩。

完整代码:

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
class Student
{
    string ID;
    string Name;
    int Score;
    static float sum;
    static int Count;     //static 静态数据成员(不是常数据成员const):如果将一个类的一个数据成员定义成静态的,则该类的所有对象的该成员共用同一存储空间。

//是用来解决对象之间的数据共享问题,一个对象给静态数据成员赋值后,另一个对象可以读取该值。
public:
    Student(string id = "0", string name = "null", int score = 0)
    {
        ID = id;
        Name = name;
        Score = score;
        Count++;
        sum = sum + score;
    }
    static float getsum()
    {
        return sum;
    }
    static float getCount()
    {
        return Count;
    }
    static void print()
    {
        cout << Count << "名学生平均成绩为" << sum / Count << endl;
    }
    friend istream& operator>>(istream& is, Student& s);
    friend ostream& operator<<(ostream& os, Student& s);
};

int  Student::Count = 0;
float Student::sum = 0;

 

//初始化静态数据成员   静态数据成员的初始化与非静态成员的初始化不同,必须在类外进行

//变量名前应加类名限定,指定它的所属类,但不需要加关键字static

istream& operator>>(istream& is, Student& s)
{
    cout << "请依次输入学生的学号,姓名和成绩" << endl;
    is >> s.ID >> s.Name >> s.Score;
    return is;
}
ostream& operator<<(ostream& os, Student& s)
{
    os << s.ID << "\t" << s.Name << "\t" << s.Score << endl;
    return os;
}
int main()
{
    ofstream out("students");   //定义文件输出流对象
    if (!out)
    {
        cout << "错误,未找到文件" << endl;
        return 0;
    }

    int n;
    cout << "请输入要添加的学生人数" << endl;
    cin >> n;

    for (int i = 0;i < n;i++)
    {
        string id, name;
        int score;
        cout << "请依次输入学生的学号,姓名和成绩" << endl;
        cin >> id >> name >> score;

        Student stu(id, name, score);
        out << stu;
    }

    out.close();


    cout << "成绩总分:" << Student::getsum() << endl;
    cout << "总人数:" << Student::getCount() << endl;

    ifstream in("students");  //定义文件输入流对象
    if (!in)
    {
        cout << "错误,未找到文件" << endl;
        return 0;
    }

    string id, name;
    int score;
    for (int k = 0;k < n;k++)
    {
        in >> id >> name >> score;
        cout << id << "\t" << name << "\t" << score << endl;
    }
    Student::print();

    system("pause");
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值