我寫了一個工作正常的代碼。我只想要額外的眼睛來突出每一件應該/可以改進的東西。我必須創建一個student.dat文件,然後寫入由用戶給出的數據(每個學生的姓名,年齡,gpa),然後關閉它,然後重新打開以供閱讀,從而顯示學生的gpa。學生是一個Class對象。我只想檢查OOP的概念(至少在那個問題上)。我正在使用Dev-C++。代碼如下:C++中的類和文件操作
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include <iomanip>
#define W setw
using namespace std;
class Student
{
private:
char name[40];
int age;
double GPA;
public:
Student(){};
void read();
void show(char* ,int ,double);
int writefile(ofstream &OS);
double getgpa(double*, int);
void readfile();
};
void Student::read(void)
{
int nbrSt=0;
cout<<"Please enter the information of the student: "<<endl;
cout<<"'y' to Continue, Ctrl+Z to exit! "<<endl;
cout<<"Name, Age and GPA:\n";
ofstream OS("student.dat", ios::out);
while (cin>>name>>age>>GPA)
{
//writing in the file
writefile(OS);
nbrSt++; //increment the number of students
cout<<"Name, Age and GPA:\n";
}
OS.close();
}
int Student::writefile(ofstream & OS)
{
OS<<'\n'<<W(10)<<name<<W(6)<<age<<W(10)<<GPA;
return 0;
}
void Student::show(char* Name, int Age, double gpa)
{
cout<<'\n'<<W(10)<<Name<<W(6)<<Age<<W(8)<<gpa<<endl;
}
double Student::getgpa(double* allGPA, int nbrgpa)
{
double sum=0;
int i =0;
for (i=0;i<nbrgpa; i++)
sum+=allGPA[i];
if(nbrgpa>0)
return sum/nbrgpa;
}
void Student::readfile()
{
char Name[30];
int Age;
double aveGPA, gpa;
int nbrgpa=0;
double allGPA[50];
int i=0;
ifstream IS("Student.dat", ios::in);
cout<<"reading from Binary file"<<endl;
if (IS.is_open())
while(IS>>Name>>Age>>gpa)
{
nbrgpa++;
show(Name, Age, gpa);
allGPA[i]=gpa;
i++;
}
IS.close();
aveGPA=getgpa(allGPA, nbrgpa);
cout<<"Average GPA of students: "<<aveGPA<<endl;
}
int main(void)
{
Student S;
S.read();
S.readfile();
return 0;
}
http://codereview.stackexchange.com/ – 2013-04-26 10:53:03
適當縮進它會是一個很大的改進。使用可讀的名稱而不是例如如果你希望其他人(或者幾天後你自己)閱讀它,'W'和'nbrgpa'也可能是一個好主意。 – 2013-04-26 10:56:03
您更多地使用'Student'作爲命名空間而不是對象。所以:你的代碼中只有一點「OOP」的暗示。 – molbdnilo 2013-04-26 11:20:26