简单二进制文件读写,多文件

/*Demo9.1.cpp*/

 #include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include "UserList.h"
using namespace std; int showMain()
{
system("cls");
cout<<"1.增加"<<endl;
cout<<"2.删除"<<endl;
cout<<"3.修改"<<endl;
cout<<"4.查询"<<endl;
cout<<"0.退出"<<endl;
cout<<"请选择:";
cin.sync();
int c;
cin>>c;
return c;
} void ADD(UserList &L)
{
cout<<"input:"<<endl;
string id,name,password;
cin>>id>>name>>password;
User u(id,name,password);
L.Add(u);
}
void DEL(UserList &L)
{cerr<<"功能未定义"<<endl;Sleep();}
void REV(UserList &L)
{cerr<<"功能未定义"<<endl;Sleep();}
void SEE(UserList &L)
{
cout<<"表:"<<endl;
for(int i=;i<L.getN();i++)
L.display(i);
cout<<endl;
system("pause");
} int main()
{
UserList L;
// User admin("0","admin","admin");
// L.Add(admin);
bool flag=true;
while(flag)
{
switch(showMain())
{
case :flag=false;break;
case :ADD(L);break;
case :DEL(L);break;
case :REV(L);break;
case :SEE(L);break;
default:break;
}
}
Sleep();
return ;
}

Demo9.1.cpp

/*UserList.h*/

 #include <fstream>
#include "User.h"
using namespace std; class UserList
{
protected:
User *List;
int N,nMax;
string FileName;
public:
UserList(/*string Fn=""*/)
{
List=new User[];
N=;
nMax=;
// FileName=Fn;
FileName="D:\\#\\Users.dat";
readFile();
}
//
bool readFile()
{
ifstream fin(FileName.c_str(),ios::binary);
if(!fin)
return false;
fin.seekg(,ios::end);
int FileLen=fin.tellg(),len=sizeof(User);
fin.seekg(,ios::beg);
fin.read((char *)List,(N = FileLen<nMax*len?FileLen/len:nMax)*len);
fin.close();
/*
printf("*%d*",N);
for(int i=0;i<N;i++)
display(i);
cout<<endl;
*/
return true;
}
int Add(User u)
{
if(N<nMax)
{
List[N]=u;
ofstream fout(FileName.c_str(),ios::app|ios::binary);
int len=sizeof(User);
fout.seekp((N)*len);
fout.write((char *)&List[N],len);
fout.close(); N++;
return N-;
}//'else-重分配内存'或'使用vector容器'解决数据溢出
return -;
}
void idFind(string id)
{
}
void nameFind(string name)
{
}
void display(int i)
{cout<<"ID:"<<List[i].id<<endl<<"Name:"<<List[i].name<<endl<<"Password:"<<List[i].password<<endl;}
int getN()
{return N;}
};

UserList.h

/*User.h*/

 #include <iostream>
#include <string>
using namespace std; class User
{
friend class UserList;
protected:
string id;
string name;
string password;
public:
User(string id="",string name="",string password=""):id(id),name(name),password(password)
{}
};

User.h

后序慢慢补充

C++二进制文件读写的更多相关文章

  1. [转载:]Fortran 二进制文件读写

    一些朋友总是咨询关于二进制文件的读写和转化.这里就我自己的理解说一说. 一).一般问题 二进制文件与我们通常使用的文本文件储存方式有根本的不同.这样的不同很难用言语表达,自己亲自看一看,理解起来会容易 ...

  2. JAVA核心技术I---JAVA基础知识(二进制文件读写和zip文件读写)

    一:二进制文件读写 (一)写文件 –先创建文件,写入数据,关闭文件 –FileOutputStream, BufferedOutputStream,DataOutputStream –DataOutp ...

  3. Qt 学习之路 2(36):二进制文件读写

    Qt 学习之路 2(36):二进制文件读写 豆子 2013年1月6日 Qt 学习之路 2 20条评论 在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice ...

  4. Qt 二进制文件读写(使用“魔术数字”)

    今天开始进入 Qt 的另一个部分:文件读写,也就是 IO.文件读写在很多应用程序中都是需要的.Qt 通过 QIODevice 提供了IO的抽象,这种设备(device)具有读写字节块的能力.常用的IO ...

  5. Qt 学习之路:二进制文件读写

    在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice提供了read().readLine()等基本的操作.同时,Qt 还提供了更高一级的操作:用于二进制的 ...

  6. Qt 学习 之 二进制文件读写

    在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用.我们提到,QIODevice提供了read().readLine()等基本的操作.同时,Qt 还提供了更高一级的操作:用于二进制的 ...

  7. 8.7 C++二进制文件读写操作

    参考:http://www.weixueyuan.net/view/6413.html 总结: 二进制文件的读写稍微麻烦一些,对二进制文件的读写同样需要打开文件和关闭文件,打开和关闭方式与文本文件相同 ...

  8. VB二进制文件读写

    数组存取 存数组 Private Sub Command2_Click() Dim fileNumber As Integer Dim S9 As String Dim k As Integer Di ...

  9. C++ 输入输出流 文本文件 二进制文件读写

    文本文件/ASCII文件(能直接显示内容,费存储空间):文件中每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件或称字符文件. 二进制文件(不能显示内容,节 ...

随机推荐

  1. 导入的Android项目出现红色感叹号

    [原因]  项目中存在导入包,在项目导入之后,classpath指向的包路径出现错误,即需要重新Bulidpath [解决方式]  右键项目名称 BuildPath —> Configure B ...

  2. python究竟要不要使用多线程

    在总结concurrent.futures库之前先来弄明白三个问题: (1)python多线程究竟有没有用? (2)python虚拟机机制如何控制代码的执行? (3)python中多进程处理原理是怎么 ...

  3. myeclipse2014中如何安装freeMarker插件(支持ftl语法高亮)

    MyEcplise2014安装Freemarker插件(支持.ftl文件) 1.下载插件:http://sourceforge.net/projects/freemarker-ide/?source= ...

  4. Swap Adjacent Elements

    You have an array a consisting of n integers. Each integer from 1 to n appears exactly once in this ...

  5. 前端HTML5介绍

    1.为什么学习HTML5? 跨平台要求低 硬件要求低 flash之外的选择(尤其手机端) 2什么是HTML5? HTML是用来描述网页的一种语言 HTML指超文本标记语言 HTML不是变成语言,是一种 ...

  6. Java基础--单例类创建和测试

    单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在.单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间:能够避免由于操作多个实例导致 ...

  7. 刷题常用的STL容器总结

    本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: string.vector.map.pair.unordered_map.set.queue.priority_queue.stack,以 ...

  8. mybatis如何防止sql注入(1)

    sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=‘1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...

  9. Python命令模块argparse学习笔记(一)

    首先是关于-h/--help参数的设置 description:位于help信息前,可用于描述helpprog:描述help信息中程序的名称epilog:位于help信息后usage:描述程序的用途a ...

  10. leetcode628

    这道题十分不容易啊,做到半夜. class Solution { public: static int cmp628(int a, int b) { return a > b; } static ...