代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
二进制文件的读、写、增、删
作者:
/ 发布于
2011/1/12
/
631
此题对我们这些c++初学者还是有点难度的,也不能说是难度,只是里面的变量容易混淆,变量的起始不好确定,所以就搞的晕头转向的.
建议在VC++上运行
#include <fstream> #include <iostream> using namespace std; struct student { int num; char name[20]; float score; }; int main() { int i,j,m=0,n,t=0; void iofile(char*filename,student*stud,int m,int n); void outfile(char*filename,int m,student*stud); void outfile(char*filename,int n); void insert(student*stud1,student*stud2,int m,int n); void dele(student*stud1,student*stud2,int m,int n); student*stud1; student*stud2; student*stud3; cout<<"输入总记录数"<<endl; cin>>n; stud1=new student[n]; cout<<"请依次输入各条记录"<<endl; for(j=0;j<n;j++) cin>>stud1[j].num>>stud1[j].name>>stud1[j].score; cout<<"读取文件"<<endl; iofile("D:\\f1.txt",stud1,m,n); cout<<endl;</div> <div>while(i!=0) { cout<<"您想做什么?请选择序号"<<endl<<endl; cout<<"1.显示记录"<<endl; cout<<"2.修改元素"<<endl; cout<<"3.插入元素"<<endl; cout<<"4.删除元素"<<endl<<endl; cin>>i;</div> <div> if(i==1) { cout<<"请输入要显示的记录的位置"<<endl; cin>>m; cout<<"此记录为:"<<endl; outfile("D:\\f1.txt",m,stud1); } if(i==2) { cout<<"请输入要修改元素的位置"<<endl; char t[20]; int c; cin>>m; c=m-1; cout<<"请输入要修改的信息,依次为序号,姓名,分数"<<endl; cin>>stud1[c].num; cin>>t; strcpy(stud1[c].name,t); cin>>stud1[c].score; iofile("D:\\f1.txt",stud1,c,n); } if(i==3) { cout<<"请输入要插入元素的位置(后)"<<endl; cin>>m; n++; stud2=new student[n]; if(t==0) {insert(stud1,stud2,m-1,n);t=3;} if(t==4) {insert(stud3,stud2,m-1,n);t=3;} iofile("D:\\f1.txt",stud2,m,n);</div> <div> } if(i==4) { cout<<"请输入要删除元素位置"<<endl; cin>>m; stud3=new student[n-1]; if(t==0) { dele(stud1,stud3,m-1,n);t=4;} if(t==3) {dele(stud2,stud3,m-1,n);t=4;} iofile("D:\\f1.txt",stud3,m-1,n-1); n--; } cout<<endl; cout<<"任务完成"<<endl<<endl; cout<<"您还想干什么?结束请输入0"<<endl; } return 0; } void iofile(char*filename,student*stud,int m,int n) { fstream iofile(filename,ios::in|ios::out|ios::binary); if(!iofile) { cerr<<"open error"<<endl; abort(); } <div>for(int i=m;i<n;i++) { iofile.seekp(i*sizeof(stud[0]),ios::beg); iofile.write((char*)&stud[i],sizeof(stud[i])); } iofile.seekg(0,ios::beg); cout<<"更新后的文件为"<<endl; for(i=0;i<n;i++) { iofile.read((char*)&stud[i],sizeof(stud[i])); cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl; } iofile.seekg(0,ios::beg); iofile.close(); } <div>void outfile(char*filename,int m,student*stud) { fstream infile(filename,ios::in|ios::binary); if(!infile) { cerr<<"open error"<<endl; abort(); } infile.seekp((m-1)*sizeof(stud[0]),ios::beg); infile.read((char*)&stud[m-1],sizeof(stud[m-1])); cout<<stud[m-1].num<<" "<<stud[m-1].name<<" "<<stud[m-1].score<<endl; infile.close(); } <div>void insert(student*stud1,student*stud2,int m,int n) { cout<<"请输入插入元素的信息"<<endl; int t=m+1; for(int i=n-1;i>t;i--) { stud2[i].num=stud1[i-1].num; strcpy(stud2[i].name,stud1[i-1].name); stud2[i].score=stud1[i-1].score; } cin>>stud2[t].num>>stud2[t].name>>stud2[t].score; for(i=0;i<t;i++) { stud2[i].num=stud1[i].num; strcpy(stud2[i].name,stud1[i].name); stud2[i].score=stud1[i].score; } <div>} void dele(student*stud1,student*stud3,int m,int n) { int t=m+1; for(int i=0;i<m;i++) { stud3[i].num=stud1[i].num; strcpy(stud3[i].name,stud1[i].name); stud3[i].score=stud1[i].score; } for(i=m;i<n-1;i++) { stud3[i].num=stud1[i+1].num; strcpy(stud3[i].name,stud1[i+1].name); stud3[i].score=stud1[i+1].score; } <div>} <div></div> <div> </div> <div></div>
试试其它关键字
二进制
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3