关于C++文件操作,该怎么处理

关于C++文件操作
我要操作一个文件,比如“myGrade.txt”,但是每次读取之后都是乱码。不知道为啥,哪个大牛能不能给我看下。代码在下面:
class myGrade
{
private:
char subject[12];
int grade;
char rank;
int index;
public:
  myGrade(){
}
  myGrade(int x,char a[12],int b,char c)

  index = x;
subject[12] = a[12];
grade = b;
rank = c;
}
void setGrade()
{  
cout<<"输入该成绩的编号"<<endl;
cin>>index;
cout<<"请输入科目"<<endl;
cin>>subject;
cout<<"请输入成绩"<<endl;
cin>>grade;
  cout<<"请输入等级"<<endl;
cin>>rank;
}
int getIndex()
{
return index;
}
char *getSubject()
{
return subject;
}
int getGrade()
{
return grade;
}
char getRank()
{
return rank;
}
void display()
{
cout<<getIndex()<<" "<<getSubject()<<" "<<getGrade()<<" "<<getRank()<<endl;
}
void display(ostream &out);

};
ostream& operator<<(ostream &out,myGrade &mg);
void myGrade::display(ostream &out)
{
out<<index<<" "<<subject<<" "<<grade<<" "<<rank<<endl;
}
ostream& operator<<(ostream &out,myGrade &mg)
{
mg.display(out);
out<<endl;
return out;
}

class Person
{
private:
vector<myGrade> mg;
public:
  Person(){

}
void getAllGrade(){
ifstream fin("myGrade.txt",ios::in);
int a = 1;
if(!fin){
cout<<"the file can't open"<<endl;
}
char str[30];
fin.seekg(ios::beg);
while(fin.getline(str,30,'\n'))
{
char g[12];
int x;
char b;
fin>>g>>x>>b;
myGrade mygrade(a,g,x,b);
mg.push_back(mygrade);
  a++;
}
fin.close();

}
void addMyGrade()
{
ofstream writein("myGrade.txt",ios::out|ios::app);
cout<<"当前最后一个成绩的编号为"<<mg.size()<<endl<<"请先输入"<<(mg.size()+1)<<endl;
myGrade my;
my.setGrade();
writein<<my;
mg.push_back(my);
writein.close();
cout<<"添加成功"<<endl;
}
void display()
{
for(vector<myGrade>::iterator it = mg.begin();it !=mg.end();it++)
(*it).display();

}
};
void genjukemuchakanchengju(){
}
void chengju()
{
int sel;
Person a;
a.getAllGrade();
do{
cout<<"请选择: 1.录入成绩 2.查看所有成绩 3.根据科目查看成绩 4.退到主界面 其他退出 "<<endl;
cin>>sel;
switch(sel)
{
   
case 1:a.addMyGrade();break;
case 2:a.display();break;
  case 3:genjukemuchakanchengju();break;
}
}while(sel==1||sel==2||sel==3);
}



------解决方案--------------------
http://download.csdn.net/detail/mougaidong/3701724
------解决方案--------------------
那么长``是不是编码问题?如果是编码问题把char替换成TCHAR试试