⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maininsert.cpp

📁 该程序实现了用文件记录变长字节流
💻 CPP
字号:
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<string.h>
#include"mainfile.h"
void Insert(char *p1,char *p2,element &a)
{ fstream f1(p1,ios::in|ios::out|ios::binary);
if(!f1)
{cerr<<"have exit error!"<<endl;
exit(1);
}
fstream f2(p2,ios::in|ios::out|ios::binary);
if(!f2)
{cerr<<"have exit error!"<<endl;
exit(1);
}
int lenth;
team temp;
indexnode tt;
f2.seekg(0,ios::end);
int tee=f2.tellg()/b3;
f2.seekg(0,ios::beg);
indexnode *A=new indexnode[tee];
f2.read((char *)A,b3*tee);
int te1=a.key/10;
int k,locat;
char *S=new char[40];
int lenth1;
element new1;
for(k=0;k<tee;k++)
if(A[k].value==te1&&A[k].deletetag==0) break;
if(k==tee)
{cout<<"请输入"<<a.key<<" "<<a.name<<"的备注或其他消息:"<<endl;
cin>>S;
lenth1=strlen(S);
if(lenth1>20)
{for(int j=0;j<20;j++) a.rest[j]=S[j];
for(int t=0;t<lenth1;t++) new1.rest[t]=S[20+t];
new1.key=a.key;
new1.next=-1;
new1.deletetag=0;
strcpy(new1.name,a.name);
	temp.data[0]=a;
	temp.data[0].next=19;
	temp.data[19]=new1;}
for(int i=1;i<19;i++)
{temp.data[i].key=0;
strcpy(temp.data[i].name,"nulltag");
temp.data[i].deletetag=0;
temp.data[i].next=-1;}
if(lenth1<=20)
{temp.data[0]=a;
temp.data[0].next=-1;
strcpy(temp.data[0].rest,S);
}
f1.seekg(0,ios::end);
f1.write((char *)&temp,b2);
lenth=f1.tellg()/b2;
tt.value=te1;
tt.num=lenth-1;
tt.deletetag=0;
f2.seekg(0,ios::end);
f2.write((char *)&tt,b3);
}
else
{locat=A[k].num;
f1.seekg(locat*b2,ios::beg);
f1.read((char *)&temp,b2);
int ti=0;
for(;ti<15;ti++)
if(temp.data[ti].key==0||temp.data[ti].deletetag==1||temp.data[ti].key==a.key) break;
if(temp.data[ti].key==a.key) cout<<"已经存在该元素,插入不成功!"<<endl;
else
{cout<<"请输入"<<a.key<<" "<<a.name<<"的备注或其他消息:"<<endl;
cin>>S;
lenth1=strlen(S);
if(lenth1>20)
{for(int j1=0;j1<20;j1++) a.rest[j1]=S[j1];
for(int t1=0;t1<lenth1;t1++) new1.rest[t1]=S[20+t1];
new1.key=a.key;
new1.next=-1;
new1.deletetag=0;
strcpy(new1.name,a.name);
for(int c1=10;c1<20;c1++)
if(temp.data[c1].key==0||temp.data[c1].deletetag==1) break;
temp.data[c1]=new1;
a.next=c1;
}
else strcpy(a.rest,S);
temp.data[ti]=a;
f1.seekg(locat*b2,ios::beg);
f1.write((char *)&temp,b2);
}}
f1.close();
f2.close();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -