第13周-專案2-用檔案儲存的學生名單
問題及程式碼:
/*
*Copyright (c)2015,煙臺大學計算機與控制工程學院
*All rights reserved.
*檔名稱:File.cpp
*作 者:單昕昕
*完成日期:2015年6月8日
*版 本 號:v1.0
*問題描述:
檔案score.dat中儲存的是若干名學生的姓名和C++課、高數和英語成績。
(1)定義學生類,其中包含姓名、C++課、高數和英語成績及總分資料成員。
(2)用物件陣列進行儲存學生的成績,讀入成績並計算總分;將總分高於平均總分且沒掛科的同學的資訊儲存到檔案pass_score.dat中。
*程式輸入:檔案讀取。
*程式輸出:將總分高於平均總分且沒掛科的同學的資訊儲存到檔案pass_score.dat中。
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>//為了使用exit()
#include <fstream>
using namespace std;
//定義學生類
class Student
{
public:
//宣告必要的成員函式
Student() {};
double get_total();
static int get_stu_num();
static double get_total_sum();
bool pass();
friend istream& operator>>(istream &input, Student &s);
friend ostream& operator<<(ostream &output, Student &s);
private:
string name;
double cpp;
double math;
double english;
double total;
static int stu_num; //學生人數,處理為類的靜態成員合適
static double total_sum; //學生總分和
};
int Student::stu_num=0;
double Student::total_sum=0;
double Student::get_total()
{
return total;
}
int Student::get_stu_num()
{
return stu_num;
}
double Student::get_total_sum()
{
return total_sum;
}
bool Student::pass()
{
return cpp>=60&&math>=60&&english>=60;
}
istream& operator>>(istream &input,Student &s)
{
input>>s.name>>s.cpp>>s.math>>s.english;
s.total=s.cpp+s.math+s.english;
s.stu_num++;
s.total_sum+=s.total;
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[200],t; //stud[200]為儲存資料的物件陣列
string sname;
double total_avg;
int i=0,count=0;
//從檔案score.dat中讀入資料,儲存到物件陣列中
ifstream infile("score.dat",ios::in);
if(!infile)
{
cout<<"Can’t open the file."<<endl;
abort();
}
ofstream outfile("pass_score.dat",ios::out);//定義檔案流物件,開啟磁碟檔案"pass_score.dat"
if(!outfile)
{
cout<<"Can’t open the file."<<endl;
abort();
}
while(!infile.eof())
{
infile>>stud[count];
count++;
}
infile.close();
total_avg=Student::get_total_sum()/Student::get_stu_num();
//總分高於平均總分且沒掛科的同學的資訊儲存到檔案pass_score.dat中
for(i=0; i<count; i++)
{
if(stud[i].get_total()>total_avg&&stud[i].pass())
{
outfile<<stud[i]<<endl;
}
}
outfile.close();
cout<<"The datas have been writen to file. "<<endl;
return 0;
}
執行結果:
用檔案儲存的學生名單。
靜態資料成員。
學習心得:
靜態資料成員。。又。。忘。。了。。
成員函式很碎找不到頭緒,還是參考賀老師的才有思路然後做出來的。。
相關文章
- 第14周-專案2-二進位制檔案瀏覽器瀏覽器
- 檔案儲存
- 簡單檔案的上傳與儲存
- 第14周-閱讀專案2-中文字元以二進位制方式儲存字元
- 塊儲存 檔案儲存 物件儲存物件
- 資料儲存--檔案儲存
- 第2周專案2-長方柱類
- CSV檔案儲存
- 第15周-閱讀專案2-異常處理&&名稱空間
- sublime設定儲存新檔案時的預設檔案型別(字尾名)型別
- 如何用python去儲存檔案字尾名Python
- IPFS的檔案儲存模式模式
- CIFS檔案的儲存————SMB
- FastDFS加Redis實現自定義檔名儲存海量檔案ASTRedis
- 學生檔案
- 第4周專案2-分數類的雛形
- #用openfiledialog檔案和savefileDialog開啟和儲存檔案
- 【C#學習筆記】儲存檔案C#筆記
- 第3周專案4-考了語文數學的學生(多檔案形式組織程式)
- Flutter持久化儲存之檔案儲存Flutter持久化
- Android 檔案儲存Android
- hive檔案儲存格式Hive
- 儲存檔案到本地
- InnoDB儲存引擎檔案儲存引擎
- 06、hdfs檔案儲存
- android: 檔案儲存Android
- 儲存json檔案JSON
- 用 Java 儲存點陣圖檔案 (轉)Java
- 第15周-專案2-有些數的階乘不算了
- Android中的資料儲存之檔案儲存Android
- Flutter學習指南:檔案、儲存和網路Flutter
- 企業檔案安全儲存
- 修改並儲存hosts檔案
- Matlab將.mat檔案儲存為.txt檔案Matlab
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- 第4周專案4-指向學生類的指標指標
- 淺談Android的檔案儲存Android
- 如何將MAC的檔案儲存至NAS網路儲存?Mac