案例分析:随机访问文件

随机访问文件

任务:写一个通用程序,为任何类型的记录生成随机访问文件。该程序运行后生成了一个包含个人记录的文件,每条记录由5个数据成员(社会安全号码、姓名、所在城市、出生年份以及薪水)组成,该程序还生成了一个存储学生记录的学生文件,学生记录的数据成员与个人纪录相同,另外还增加了学院专业,再次使用了继承。
此案例分析中,通用的随机访问文件程序能够将新记录插入文件,在文件中查找记录,还可以修改记录。文件名由用户提供,如果没有找到该文件,就新建一个;否则,打开文件进行读写。

#pragma once
#ifndef PERSONAL
#define PERSONAL
#include<fstream> //用fstream输入输出类来读写文件
#include<cstring>
using namespace std;
class Personal //个人记录类
{
   
public:
 Personal();
 Personal(char*, char*, char*, int, long);
 void writeToFile(fstream&) const;
 void readFromFile(fstream&);
 void readKey();
 int size() const {
   
  return 9 + nameLen + cityLen + sizeof(year) + sizeof(salary);
 }
 bool operator==(const Personal& pr) const {
    //重载==运算符,用于后面判断两个成员是否为同一人
  return strncmp(pr.SSN, SSN, 9) == 0;       //这里的判断只需判断SSN即可,因为每个人的SSN都是独一无二的
 }
protected:
 const int nameLen, cityLen;
 char SSN[10], *name, *city;
 int year;
 long salary;
 ostream& writeLegibly(ostream&);
 friend ostream& operator<<(ostream& out, Personal& pr) {
   
  return pr.writeLegibly(out);
 }
 istream& readFromComsole(istream&);
 friend istream& operator>>(istream& in, Personal& pr) {
   
  return pr.readFromComsole(in);
 }
};
#endif // !PERSONAL

下面是person类函数的具体实现

#include "Personal.h"
#include<iostream>
Personal::Personal() :nameLen(10), cityLen(10) {
   
 name = new char[nameLen + 1]; //别忘记字符串是以标志位'\0'结束的
 city = new char[cityLen + 1];
}
Personal::Personal(char *ssn, char *n, char *c, int y, long s) : 
 nameLen(10), cityLen(10) {
   
 name = new char[nameLen + 1];
 city = new char[cityLen + 1];
 strcpy(SSN, ssn);
 strcpy(name, n);
 strcpy(city, c);
 year = y;
 salary = s;
}
void Personal::writeToFile
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值