C++实践参考——用二进制文件处理学生成绩

【项目-用二进制文件处理学生成绩】
(1)定义学生类,其中包含学号、姓名、C++课、高数和英语成绩及总分数据成员,成员函数根据需要确定。
(2)读入学生的成绩,并求出总分,用对象数组进行存储。ASCII文件score.dat中保存的是100名学生的学号、姓名和C++课、高数和英语成绩。
(3)将所有数据保存到一个二进制文件binary_score.dat中,最后通过键盘输入你的信息,并写入到文件中(咱不谦虚,三科全100分,期末求好运)。
(4)为验证输出文件正确,再将binary_score.dat中的记录逐一读出到学生对象中并输出查看。
(5)用BinaryViewer命令查看二进制文件文件
文件下载

[参考解答]

#include <fstream>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;

//(一)定义学生类
class Student
{
public:
    Student(){};
    Student(int n, string nam, double c, double m, double e):num(n),name(nam),cpp(c),math(m),english(e){total=c+m+e;}
    void set_value(int n,string nam, double c, double m, double e);
    string get_name(){return name;}
    double get_cpp(){return cpp;}
    double get_math(){return math;}
    double get_english(){return english;}
    double get_total(){return total;}
    void set_cpp(double c){cpp=c;}
    void set_math(double m){math=m;}
    void set_english(double e){english=e;}
    void set_total(double t){total=t;}
    friend  ostream& operator<<(ostream&, Student&);
private:
    int num;
    string name;
    double cpp;
    double math;
    double english;
    double total;
};

void Student::set_value(int n,string nam, double c, double m, double e)
{
    num=n;
    name=nam;
    cpp=c;
    math=m;
    english=e;
    total=c+m+e;
}

ostream& operator<<(ostream& out, Student& s)
{
    out<<s.num<<" "<<s.name<<" "<<s.cpp<<" "<<s.math<<" "<<s.english<<" "<<s.total<<endl;
    return out;
}

int main( )
{
    Student stud[100]; //stud[100]为保存数据的对象数组
    int i,n;
    string sname;
    double scpp, smath, senglish;

    //(二)读入学生的成绩,并求出总分,用对象数组进行存储。
    ifstream infile("score.dat",ios::in);  //以输入的方式打开文件,ASCII文件
    if(!infile)       //测试是否成功打开
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    for(i=0;i<100;i++)
    {
        infile>>n>>sname>>scpp>>smath>>senglish;
        stud[i].set_value(n,sname, scpp, smath, senglish);
    }
    infile.close();

    //(三)将所有数据保存到一个二进制文件binary_score.dat中
    ofstream outfile("binary_score.dat",ios::out|ios::binary);
    if(!outfile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    for(i=0;i<100;i++)
    {
        outfile.write((char*)&stud[i], sizeof(stud[i]));
    }
    //(三)最后在文件中写入你自己的各科成绩
    cout<<"输入你自己的信息:";
    cin>>n>>sname>>scpp>>smath>>senglish;
    Student me(n,sname, scpp, smath, senglish);
    outfile.write((char*)&me, sizeof(me));
    outfile.close();

    //(四)为验证输出文件正确,再将binary_score.dat中的记录逐一读出到学生对象中并输出查看。
    Student s;
    ifstream infile2("binary_score.dat",ios::in|ios::binary);
    if(!infile2)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    while(true)
    {
        infile2.read((char*)&s, sizeof(s));
        if(infile2.eof()) break;
        cout<<s;
    }
    infile2.close();
    return 0;
}

<本文完>

时间: 2024-08-02 05:49:35

C++实践参考——用二进制文件处理学生成绩的相关文章

C++第16周(春)项目1 - 用二进制文件处理学生成绩

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1 - 用二进制文件处理学生成绩] ASCII文件score.dat(请到http://pan.baidu.com/s/1qW59HTi下载)中保存的是100名学生的学号.姓名和C++课.高数和英语成绩.(1)定义学生类,其中包含学号.姓名.C++课.高数和英语成绩及总分数据成员,成员函数根据需要确定.(2)读入学生的成绩,并求出总分,用

《C语言及程序设计》实践参考——学生成绩统计

返回:贺老师课程教学链接 [项目1-学生成绩统计] 每位同学的信息学号.姓名.C.高数.英语成绩.定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[13]).姓名(name).三门课的成绩(grade).总分(score).均分(average)). (1)从键盘上输入N名学生的信息(N定义为常变量): (2)求出每名同学的总分和均分,并存储在结构体数组中(可以读入过程中"顺便"计算): (3)输出每位同学的信息学号.姓名.总分和均分. 请参考下面的代码,将需要的

《C语言及程序设计》实践参考——学生人数没个准

返回:贺老师课程教学链接 [项目1-学生人数没个准]输入学生成绩,输出高于平均成绩的学生序号和成绩.其中学生人数不定,可能10个,可能1000.在录入成绩之前,学生人数由键盘输入.由于要先求出平均成绩,然后才能确定输出哪些学生的信息,所以需要一个数组先将学生信息保存下来.考虑学生人数不定,用动态数组是个更适合的方案下面的程序结构供参考: #include<stdio.h> #include_________ //m?????.h int main() { int number; //学生人数

2014秋C++第17周 项目6参考 学生成绩统计

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目6-学生成绩统计]每位同学的信息学号.姓名.C++.高数.英语成绩.定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[13]).姓名(name).三门课的成绩(grade).总分(score).均分(average)).(1)从键盘上输入N名学生的信息(N定义为常

《C语言及程序设计》实践参考——成绩处理

返回:贺老师课程教学链接   项目要求 [项目2- 成绩处理]在数组score中将要存储某小组C程序设计的成绩,请完成下面的处理:(1)输入小组人数及成绩,要保证成绩在0-100之间:(2)输出该小组的最高成绩.最低成绩.平均成绩:(3)输出考得最高成绩和最低成绩的同学的人数:(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩).(5)(选做)求出所有同学成绩的标准偏差,标准偏差公式为,其中为样本(即某同学成绩),为均值(前面已经求出),N为样本数目:提示1:可以采

C语言OJ项目参考(2969)学生成绩的处理

2969:学生成绩的处理 Description 编写一个函数void calcscore(int n),在函数中输入n个人的成绩,计算最高分,最低分,总分和平均分,要求在主函数中调用函数calcscore计算各种成绩,并在主函数中输出各种计算结果.(使用全局变量在函数之间传递多个数据) #include <stdio.h> double HighScore; /*全局变量,最高分*/ double LowScore; /*全局变量,最低分*/ double SumScore; /*全局变量,

C++第17周项目1 - 二进制学生成绩文件

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565,本周题目链接:http://blog.csdn.net/sxhelijian/article/details/9125337 [项目1]学生成绩处理:保存为二进制文件ASCII文件score.dat中保存的是100名学生的学号.姓名和C++课.高数和英语成绩.(1)定义学生类,其中包含学号.姓名.C++课.高数和英语成绩及总分数据成员,成员函数根据需要确定.(2)读入学生

用ET表格打造更直观的学生成绩分析之相关函数

前些天在论坛发了一帖:<用ET表格打造更直观的学生成绩分析>(以下简称为<成绩分析>),http://bbs.wps.cn/thread-21963426-1-1.html.很多坛友对文中所涉及的函数非常感兴趣.今天再发一帖对相关的函数作些解释以作前文的补充. 前文中所涉及的函数主要有这么几个:SUMIF.COUNTIF.SUMPRODUCT.VLOOKUP.这几个函数在成绩分析统计中经常用得到,对于教师来说可谓是有用之极.我们且一一道来. 一.SUMIF函数 SUMIF函数的作用

怎么用Excel完美处理学生成绩

大多数学校在期末考试后,教师都要对学生进行综合评定,其中一项就是成绩评定.那么如何通过对学生成绩的处理结果来反映学生情况呢?笔者在实践中摸索了一套方法,现介绍给大家. 可以处理学生成绩的软件很多,这里主要介绍大家常用的Excel的应用.我们选某班的10名学生为例,对其成绩进行汇总.排序.统计各分数段人数,绘制成绩分布曲线.根据要求设计表格并录入成绩,经处理后所得的结果见图1. 图1 计算学生各科总分 首先计算第一名学生的各科成绩总分,然后通过复制函数得到其他学生各科总分. 1.计算第一名学生的总