第14周-專案1-用二進位制檔案處理學生成績

kewlgrl發表於2015-06-15
問題及程式碼:

/*   
*Copyright (c)2015,煙臺大學計算機與控制工程學院   
*All rights reserved.   
*檔名稱:File.cpp   
*作    者:單昕昕   
*完成日期:2015年6月15日   
*版 本 號:v1.0   
*問題描述:
(1)定義學生類,其中包含學號、姓名、C++課、高數和英語成績及總分資料成員,成員函式根據需要確定。 
(2)讀入學生的成績,並求出總分,用物件陣列進行儲存。ASCII檔案score.dat中儲存的是100名學生的學號、姓名和C++課、高數和英語成績。 
(3)將所有資料儲存到一個二進位制檔案binary_score.dat中,最後通過鍵盤輸入你的資訊,並寫入到檔案中(我們不謙虛,三科全100分,期末求好運)。 
(4)為驗證輸出檔案正確,再將binary_score.dat中的記錄逐一讀出到學生物件中並輸出檢視。 
(5)用BinaryViewer命令檢視二進位制檔案檔案 
*程式輸入:個人資訊。
*程式輸出:所有人的資訊。
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>//為了使用exit()
#include <fstream>
using namespace std;
//定義學生類
class Student
{
public:
    //宣告必要的成員函式
    Student() {};
    friend istream& operator>>(istream &input, Student &s);
    friend ostream& operator<<(ostream &output, Student &s);
private:
    string name;
    long no;  //學號
    double cpp;
    double math;
    double english;
    double total;
};

istream& operator>>(istream &input,Student &s)
{
    input>>s.name>>s.cpp>>s.math>>s.english;
    s.total=s.cpp+s.math+s.english;
    return input;
}

ostream &operator<<(ostream &output,Student &s)
{
    output<<s.name<<'\t'<<s.cpp<<'\t'<<s.math<<'\t'<<s.english<<'\t'<<s.total;
    return output;
}

int main( )
{
    Student stud[101],t; //stud[101]為儲存資料的物件陣列,多出來的1是用來儲存我自己的成績的
    string sname;
    int i;
    //從檔案score.dat中讀入資料,儲存到物件陣列中
    ifstream infile("score.dat",ios::in);
    if(!infile)
    {
        cout<<"Can’t open the file."<<endl;
        abort();
    }
    ofstream outfile("binary_score.dat",ios::binary);
    if(!outfile)
    {
        cout<<"Can’t open the file."<<endl;
        abort();
    }
    cout<<"請輸入你的資訊:"<<endl;
    cin>>stud[100];
    for(i=0; i<101; ++i)
        outfile.write((char*)&stud[i],sizeof(stud[i]));
    infile.close();
    outfile.close();
    cout<<"The datas have been writen to file. "<<endl;
    return 0;
}


執行結果:



二進位制檔案閱讀器。。




知識點總結:

用二進位制檔案處理學生成績。

學習心得:

(⊙o⊙)…這個這個。。用閱讀器也看不懂阿!!

怎!麼!破!

相關文章