Student information is stored and read

#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;
}
Published 17 original articles · won praise 9 · views 192

Guess you like

Origin blog.csdn.net/shnagmiao/article/details/104428033