实验八 输入输出流(二)

内容2:文本文件的读、写
(1) 新建一个工程demo2,设计一个类Student,其成员变量包括学号(no)、姓名(name)、性别(sex)、专业(major)、联系方式(phone)和地址(addr)。
(2) 为类Student定义成员函数writeTo,实现从给定文本文件中读取学生数据,接口如下:
void writeTo (char filename[ ]);
(3) 为类Student定义成员函数readFrom,实现将学生数据保存到给定文本文件,接口如下:
void readFrom (char filename[ ]);
(4) 主函数的流程为:
a) 定义Student类型的对象stu1和stu2;
b) 输入学生数据,赋值给stu1;
c) 调用writeTo 方法,按照文本格式将stu1的数据保存到stu.txt文件;
d) 调用readFrom 方法,从stu.txt文件中读取学生数据装载到stu2中;
e) 输出stu2的数据。
(5) 程序运行结果如下
内容3:二进制文件的读、写
将实验2中的“文本文件”改为“二进制文件”,其余不变。
此时,程序运行完后,stu.txt文件的内容如下图所示。
示;程序运行完后,stu.txt文件的内容如下右图所示。
附代码
!!!编译环境 DevC++ 5.11 TDM-GCC 4.9.2 64-Bit Release
头文件 iquery.h

#ifndef  _IQUERY_H
#define _IQUERY_H 1
using namespace std;
        #define MAXN 20
	class Student{
		public:
			void input();
			friend ostream &operator<<(ostream &,Student &);//重载流运算符<<  
            friend istream &operator>>(istream &,Student &);//重载流运算符>>
			void writeTo ();//实现从给定文本文件中读取学生数据
			void readFrom ();//将学生数据保存到给定文本文件
		private:
			string num;
			string name;
			string sex;
			string phone;
			string major;
			string addr;
	};
#endif

头文件实现文件 iquery,cpp

#include 
#include "string"
#include "iquery.h"
#include "iomanip"
#include "cmath"
#include "fstream" 
using namespace std; 
void Student::input(){
	cout<<"请输入学生姓名:"<>this->name;
	cout<<"请输入学生性别:"<>this->sex;
	cout<<"请输入学生学号:"<>this->num;
	cout<<"请输入学生专业:"<>this->major;
	cout<<"请输入学生联系方式:"<>this->phone; 
	cout<<"请输入学生住址:"<>this->addr;
	
}
ostream& operator<<(ostream &os,Student &stu){  
    os<<"学生信息如下:"<>(istream &is,Student &stu){  
    cout<<"请输入学生姓名:"<>stu.name;
	cout<<"请输入学生性别:"<>stu.sex;
	cout<<"请输入学生学号:"<>stu.num;
	cout<<"请输入学生专业:"<>stu.major;
	cout<<"请输入学生联系方式:"<>stu.phone; 
	cout<<"请输入学生住址:"<>stu.addr;  
    return is;  
} 

void Student::writeTo (char filename[]){//将学生数据保存到给定文本文件
	ofstream outfile;
	
	outfile.open(filename);
	if (!outfile.is_open())
	clog<<"error in open student.txt in outfile";
	else{
		
		outfile<name<<" "<num<<" "<sex<<" "<phone<<" "<major<<" "<addr;
		outfile.close();
	} 
} 

void Student::readFrom (char filename[]){//实现从给定文本文件中读取学生数据
	ifstream infile;
	infile.open(filename);
	if (!infile.is_open())
	clog<<"error in open student.txt in infile";
	else{
		infile>>this->name;infile.ignore();
		infile>>this->num;infile.ignore();
		infile>>this->sex;infile.ignore();
		infile>>this->phone;infile.ignore();
		infile>>this->major;infile.ignore();
		infile>>this->addr;infile.ignore();
	} 
} 

源码 main.cpp

#include 
#include "string"
#include "iquery.h"
#include "iomanip"
#include "cmath"
#include "fstream" 
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	Student stu1,stu2;
	char filename[MAXN] ;
	cin>>stu1;
	cout<<"请输入定向输出文件地址"<>filename;

	stu1.writeTo(filename);
    stu2.readFrom(filename);
	cout<

二进制输出不再赘述
注:
已经出现过的error:
存在的问题:
可行性优化:
欢迎访问陈风的个人博客

你可能感兴趣的:(coding,life)