c++ 基于文件的增删改查
来源:互联网 发布:中国对外援助数据 编辑:程序博客网 时间:2024/05/16 12:00
wuzhixiang
#include <iostream>#include <fstream>#include <sstream>#include <string>#include <iomanip>#include <windows.h>#define WIDTH 20#define space setw(WIDTH)#define NEWLINE "\r\n"using namespace std;void write(const char *filename){ ofstream out; out.open(filename,ios::app); if(!out.is_open()) { cout<<"open error"<<endl; return ; } else { int id,age; string name; cout<<"请输入id、姓名、年龄:"<<endl; cin>>id>>name>>age; out.fill(' '); out.setf(ios::left); out<<space<<id<<space<<name<<space<<age<<NEWLINE; out.close(); cout<<"添加成功!!"<<endl; }}void read(const char *filename){ ifstream in; in.open(filename,ios::in); if(!in.is_open()) { cout<<"file open error"<<endl; return ; } else { stringstream ss; char line[100]; cout.setf(ios::left); cout.fill(' '); cout<<space<<"id"<<space<<"name"<<space<<"age"<<endl; while(in.peek()!=EOF) { in.getline(line,100); ss<<line; int id,age; string name; ss>>id>>name>>age; cout<<space<<id<<space<<name<<space<<age<<endl; ss.str(""); ss.clear(); } in.close(); }}void del(const char *filename){ int id; cout<<"请输入您要删除学生的编号"<<endl; cin>>id; ifstream in; in.open(filename,ios::in); if(!in.is_open()) { cout<<"file open error"<<endl; return ; } else { string temp; stringstream ss; int curId;; while(in.peek()!=EOF) { string line; getline(in,line); ss<<line; ss>>curId; if(curId!=id) { temp += line + NEWLINE; } ss.str(""); ss.clear(); } in.close(); ofstream out; out.open("G:\\students.txt",ios::out); if(!out.is_open()) { cout<<"file open error"<<endl; return ; } else { out<<temp; out.close(); cout<<"删除成功!!"<<endl; } }}int search_pos(const char *filename,int id){ ifstream in; in.open(filename,ios::in|ios::binary); if(!in.is_open()) { cout<<"file open error"<<endl; return -1; } else { stringstream ss; while(in.peek()!=EOF) { int start = in.tellg(); string line; getline(in,line); ss<<line; int curID; ss>>curID; if(curID == id) { in.close(); return start; } ss.str(""); } cout<<"对不起您查找的同学信息不存在!"<<endl; in.close(); } return -1;}void search(const char *filename){ cout<<"请输入您要查找的学生id:"<<endl; int id; cin>>id; int pos = search_pos(filename,id); string line; fstream in; in.open(filename,ios::in|ios::binary); in.seekg(pos,ios::beg); getline(in,line); cout.setf(ios::left); cout<<space<<"id"<<space<<"name"<<space<<"age"<<endl; cout<<line<<endl;}void edit(const char *filename){ int id,age; string name; cout<<"请输入您要修改的学生id"<<endl; cin>>id; cout<<"请输入该学生新的姓名、年龄"<<endl; cin>>name>>age; stringstream infoTemp; infoTemp.fill(' '); infoTemp.setf(ios::left); infoTemp<<space<<id<<space<<name<<space<<age; string newInfo; getline(infoTemp,newInfo); fstream file; file.open(filename,ios::in|ios::out|ios::binary); if(!file.is_open()) { cout<<"file open error"<<endl; return ; } else { int pos = search_pos(filename,id); file.seekg(pos,ios::beg); file<<newInfo; cout<<"修改后信息为:"<<endl; cout<<newInfo<<endl; file.close(); }}int main(){ const char *filename = "G:\\students.txt"; while(true) { cout<<"--------------------------"<<endl; cout<<"0、查看全部信息"<<endl; cout<<"1、新增学生信息"<<endl; cout<<"2、删除学生信息"<<endl; cout<<"3、修改学生信息"<<endl; cout<<"4、查找学生信息"<<endl; int cmd; cin>>cmd; system("cls"); switch(cmd) { case 0:read(filename);break; case 1:write(filename);break; case 2:del(filename);break; case 3:edit(filename);break; case 4:search(filename);break; } } return 0;}
阅读全文
0 0
- c++ 基于文件的增删改查
- c(API) 对文件内容的增删查改
- 基于mybatis的增删改查
- Hibernate的增删改查(基于getCurrentSession)
- 基于easyui框架的增删改查
- Mybatis-基于注解的增删改查
- 基于JDBC的增删改查
- 基于Mybatis的增删改查
- 基于jdbc 通用的增删改查
- c#xml的增删改查
- C#,sql数据库的增删改查
- C链表的增删查改
- 【C++】单链表的增删查改实现
- XML文件的增删改查12.1
- 文件和文件夹的增删改查
- plist 文件的增删改查 例子
- iOS plist文件的增删查改
- plist文件的增删改查
- maven项目自动生成代码(mybatis-generator 代码自动生成)
- 垃圾收集器(摘抄的深入理解JAVA虚拟机)
- 条件概率与组合
- 借助webuploader插件完成ajax异步上传图片(多张以及单张)
- 【腾讯TMQ】有众测、不忐忑 ——记TBS内核测试优化之路
- c++ 基于文件的增删改查
- 使用Caffe批量提取特征
- 常用的机器学习&数据挖掘知识(点)
- 文章标题
- Hive metastore三种配置方式
- MYSQL获取自增ID的方法
- tensorflow问题
- 聊聊并发(一)深入分析Volatile的实现原理
- 顺序存储结构的基本操作实现(以类的方式实现)----插入、删除、查询