#include <fstream>
#include<iostream>
#include <iomanip>
using namespace std;
struct Student // 学生结构
{
int Birth; // 学号
char name[16]; // 姓名
float score1;
float score2;
float score3; // 成绩
};
int main(void) // 主函数main()
{
cout.setf(std::ios::left);
Student stud[4] = { {2009101, "李靖", 98,89,56}, {2009102, "刘敏", 100,23,25},{2009103, "王强", 99,56,89} ,{2009104,"小明",97, 78, 84} }; // 定义数组
fstream iofile("stud.dat", ios::out | ios::binary);// 定义文件对象,这样如果文件不存储将建立一个空文件
if (!iofile) // 打开文件失败
{
cout << "打开文件失败!" << endl;
exit(1); // 退出程序
}
for (int i = 0; i < 3; i++)
iofile.write((char*)&stud[i], sizeof(stud));// 写数据到文件中
iofile.seekp(0 * sizeof(Student), ios::beg); // 定位于第1个学生数据的起始位置
for (int i = 0; i < 3; i++)
{
cout << stud[i].Birth << " " << stud[i].name << " " << stud[i].score1 << " " << stud[i].score2 << " " << stud[i].score3
<< endl; // 显示学生信息
}
cout << endl;
stud[1].score2 = 100; //修改第二个学生的分数
stud[1].score3 = 100;
iofile.seekp(1 * sizeof(stud[0]), ios::beg);
iofile.write((char*)&stud[1], sizeof(stud[1]));
iofile.seekg(0, ios::beg);
for (int i = 0; i < 4; i++)
{
iofile.read((char*)&stud[i], sizeof(stud[i])); //读出四位学生的数据
cout << stud[i].Birth << " " << stud[i].name << " " << stud[i].score1 << " " << stud[i].score2 << " " << stud[i].score3 << endl;
}
cout << endl;
for (int i = 0; i < 1; i++)
{
iofile.read((char*)&stud[i], sizeof(stud[i]));
iofile.seekp(0 * sizeof(stud[i]), ios::beg);
cout<< stud[i].Birth << " " << stud[i].name << " " << stud[i].score1 << " " << stud[i].score2 << " " << stud[i].score3 << endl;
}
for (int i = 2; i < 4; i++)
{
iofile.read((char*)&stud[i], sizeof(stud[i]));
iofile.seekp(0 * sizeof(stud[i]), ios::beg);
cout << stud[i].Birth << " " << stud[i].name << " " << stud[i].score1 << " " << stud[i].score2 << " " << stud[i].score3 << endl;
}
double a = (stud[0].score1 + stud[0].score2 + stud[0].score3) / 3;
double b = (stud[2].score1 + stud[2].score2 + stud[2].score3) / 3;
double c = (stud[3].score1 + stud[3].score2 + stud[3].score3) / 3;
cout << setiosflags(ios::fixed)
<< setprecision(1) << a << endl;
cout << setiosflags(ios::fixed)
<< setprecision(1) << b << endl;
cout << setiosflags(ios::fixed)
<< setprecision(1) << c << endl;
iofile.close(); // 关闭文件
return 0;
}
Student information is stored and read
Guess you like
Origin blog.csdn.net/shnagmiao/article/details/104428033
Ranking