binary文件形式并使用随机读写处理方式对自定义CStudent类的对象数据进行存储与读写处理
需求分析:
学生的信息输出到屏幕上。要求成员函数完成以下功能:
(1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。
(2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。
(3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4) 计算某编号学生的总成绩与平均成绩。
(5) 列出所有总成绩超过270分的男同学的有关信息。
8.2程序执行的结果:
8.3概要设计
本程设计思路: 设计数据结构student,将学生信息保存到该数据结构中,注意二进制文件的读写是以字节为单位的所以要将student的指针转化位char*来输入到文件中
程序流程图(如左图):
8.3 详细设计与编码:
见上传程序。
8.4调试分析:
本题要注意的地方是对文件指针的操作,对给定的编号要能将文件指针移动到相应的位置上。
8.5 用户使用说明:
用户输入保存的文件路径后就可以录入学生的信息,然后指定学生编号读取相应学生的信息。
8.6设计心得:
本题加强了我对二进制文件操作的理解。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct student
{
unsigned int ID;
char name[10];
char sex;
unsigned int age;
unsigned int mathScore;
unsigned int computerScore;
unsigned int englishScore;
};
ostream& operator <<(ostream& out,student& stu)
{
out<<stu.ID<<std::endl;
out<<stu.name<<std::endl;
out<<stu.age<<std::endl;
out<<stu.sex<<std::endl;
out<<stu.mathScore<<std::endl;
out<<stu.computerScore<<std::endl;
out<<stu.englishScore<<std::endl;
return out;
};
void main()
{
char quite;
static int num=0;
char filename[20];
cin>>filename;
FILE* file=fopen(filename,"wb");
if(!file)
std::cout<<"error"<<std::endl;
cin>>quite;
std::cout<<"输入任意字符开始('Q'键退出)"<<std::endl;
while(quite!='Q')
{
student stu;
memset(&stu,0,sizeof(stu));
std::cin>>stu.ID;
std::cin>>stu.name;
std::cin>>stu.age;
std::cin>>stu.sex;
std::cin>>stu.mathScore;
std::cin>>stu.computerScore;
std::cin>>stu.englishScore;
std::cout<<"你输入的数据如下:"<<std::endl;
std::cout<<stu;
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com }
fclose(file);
std::cout<<"共输入"<<num<<"个数据,请择读第几个?"<<std::endl;
int index=0;
std::cin>>index;
file=fopen(filename,"rb");
student test;
memset(&test,0,sizeof(test));
fseek(file,(index-1)*sizeof(test),SEEK_SET);
if(!fread((char*)&test,sizeof(test),1,file))
std::cout<<"error"<<std::endl;
std::cout<<test;1812