高级语言程序设计II
实验报告二
姓名:许恺
学号:2014011329
日期:6月4日
1. 实验目的
学会用文本文件形式读写,通过c++实现。更加深入对c++的了解
2. 设计思路
使用c++的文件读写方式进行读写并进行函数调用,用一个类来描述一个学生的资料,把一个对象看做学生,先输入学生人数,再写入学生信息,写入文件,输出。
3. 代码实现
主函数:
// c++报À¡§告?2.cpp : 定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê
//
#include "stdafx.h"
#include <iostream>
#include <string> //字Á?符¤?串ä?头ª¡¤文?件t
#include "student.h"
#include <fstream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a,n,e,s[N];
char b[30],c,d[1000];
fstream fp1;
fp1.open("D:\\aaa.txt",ios::out);
cout<<"How many student?"<<endl;
cin>>n; //输º?入¨?学¡ì生¦¨²人¨?数ºy
student* stu=new student[n]; //定¡§义°?对?象¨®
for(a=0;a<n;a++) //进?入¨?函¡¥数ºyn次ä?
s[a]=stu[a].input(n);
for(a=0;a<n;a++) //进?入¨?函¡¥数ºyn次ä?
stu[a].write(n,fp1,stu);
fp1.close(); //关?闭À?文?件t
fp1.open("d:\\aaa.txt",ios::in);
for(a=0;a<n;a++) //读¨¢取¨?输º?出?文?件t
//stu[a].output(n,fp1);
{
fp1>>setw(10)>>e;
cout<<setw(10)<<setiosflags(ios::left)<<e; //控?制?输º?出?10个?字Á?符¤?左Á¨®对?齐?
fp1>>setw(20)>>b;
cout<<setw(20)<<setiosflags(ios::left)<<b;
fp1>>setw(5)>>c;
cout<<setw(5)<<setiosflags(ios::left)<<c;
fp1>>setw(s[a]+1)>>d;
cout<<setiosflags(ios::left)<<d<<endl;
}
fp1.close();
delete[] stu;
return 0;
}
.h文件:
#pragma once
#include <string>
const int N=1000;
class student
{
public:
int input(int n); //在¨²公?有®D中D的Ì?输º?入¨?函¡¥数ºy
void write(int n,std::fstream& fp1,student *stu); //写¡ä入¨?文?件t函¡¥数ºy
void output(int n,std::fstream& fp1); //输º?出?到Ì?屏¨¢幕?的Ì?函¡¥数ºy
private: //私?有®D性?质¨º
int num;
char name[20];
char sex;
char address[N];
};
.cpp文件:
#include "StdAfx.h"
#include "student.h"
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>//控?制?输º?出?的Ì?头ª¡¤文?件t
using namespace std;
int student::input(int n) //输º?入¨?函¡¥数ºy
{
int s; //记?录?address长¡è度¨¨
cout<<"num:"<<endl;
cin>>num;
cout<<"name:"<<endl;
cin>>name;
cout<<"sex(f is woman and m is man):"<<endl;
cin>>sex;
cout<<"address:"<<endl;
cin>>address;
s=strlen(address);
return s;
}
void student:: write(int n,std::fstream& fp1,student *stu)
{
fp1<<setw(10)<<setiosflags(ios::left)<<num;
fp1<<setw(20)<<setiosflags(ios::left)<<name;
fp1<<setw(5)<<setiosflags(ios::left)<<sex;
fp1<<setw(strlen(address))<<address<<endl;
}
void student::output(int n,std::fstream& fp1) //放弃了函数读文件的方法
{
/*int a;
char b[30],c,d[1000];
fp1>>setw(10)>>a;
cout<<setw(10)<<setiosflags(ios::left)<<a; //控?制?输º?出?10个?字Á?符¤?左Á¨®对?齐?
fp1>>setw(20)>>b;
cout<<setw(20)<<setiosflags(ios::left)<<b;
fp1>>setw(5)>>c;
cout<<setw(5)<<setiosflags(ios::left)<<c;
fp1>>setw(strlen(address))>>d;
cout<<setiosflags(ios::left)<<d<<endl;*/
}
4. 实验结果及分析
- 这部分要求说明生成的数据量,写文件的记录个数、文件大小,读取文件中一个记录、所有记录的时间等内容,并贴出代码运行的结果图。请测试多种数据量下,你文件读取和写入速度。
例如:本次实验向文件中写入了1000条学生情况的记录,生成的文件大小1.2M,生成数据的时间为1.2s,将文件中所有记录读取出来话费3s;写入10000条记录,生成文件大小12M,生成数据时间为15s,全部读取时间为25s。
- 请分析一下,数据写入和读取量对程序速度的影响,说说为什么?想想是否还能够提高文件的读写速度,如何来改进你的程序?(选做)