文件读写(类对象数组写入文件):简单的学生成绩管理系统(6.17分析)

最近老师布置了一个作业,大概是这样的:将一个学生成绩管理写入文件,并进行写读修改操作。

涉及到的问题有这么几个:

成绩管理的类:

1.创建对象数组,管理多个学生,学生的个数由用户定义,即随机的

解决:可以有一个函数来管理,询问用户,动态创建对象数组

(问题:(1)学生类中有个排名,因为学生的个数是未知的,如果用简单选择法来进行排序就不能实现,暂时定义有限个对象数组;

(2)还有就是排序的操作肯定是在用户输完信息之后进行的,这就需要一个排序函数修改rank(私有数据成员,写入成员函数进行访问void getrank(){return rank;}),修改后的数据要保存,作用域不止在排序函数里,我不确定他是否修改了类里的rank,待测试)

2.细节问题:

细节一:字符型数据处理

#include<cstring>
****
char name[20];
****
Student(char*pname="sun")
{strcpy(name,pname);}
char*name;
****
Student(char*pname)
{name=new char[strlen(pname)+1];
strcpy(name,pname);//不限制长度
}

细节二:输出格式控制设置一次,只作用于输出的第一个数据,例如

#include<iomanip>;
*******
cout.setf(ios::left);
cout.width(10);
cout<<"name"<<"number"<<"math":

得到的结果是这样的

name    numbermath

在这想要控制格式输出还是手动添加‘\t’(“\t”),或者每个数据前面都设置一次格式控制

文件的读写操作

1.因为是随机处理,所以选择二进制数据打开方式,写二进制文本

读和写都很方便:

#include<iostream>
#include<fstream>
****
Student s1;
fstream f;
f.open("file",ios::out|ios::in|ios::binary);
f.write((char*)&s1,sizeof(s1));//(char*)强制转换
f.read((char*)&s1,sizeof(s1));

突然发现一个很大的问题就是二进制文件查看很麻烦,用记事本打开就是乱码,可是如果写入文本文件的话,他没有一次写入一行,而且浏览时是顺序浏览,没有随机性,这就很麻烦,所以决定放弃用二进制文件的方式,改用文本文件。

猜你喜欢

转载自blog.csdn.net/weixin_41499217/article/details/80716521