📄 file_nok.cpp
字号:
//file_nok.cpp
#include <fstream.h>
#include <iomanip.h> //setw()
#include <conio.h> //getch()
#include <stdio.h> //rename()
#include <limits.h> //INT_MIN
char menu();
void add_data();
void update_data();
void display();
void delete_data();
fstream file;
void main()
{ char ch;
int delete_key=0;
file.open("numbers.dat",ios::in|ios::out|ios::binary);
do
{
ch = menu();
switch (ch)
{ case '1':add_data(); //添加
break;
case '2':update_data(); //更新
break;
case '3':display(); //查询
break;
case '4':delete_data(); //删除
delete_key=1;
break;
}
} while (ch!='0');
if (delete_key==1)
{ int data;
ofstream outfile("tem.dat",ios::app|ios::binary);
file.seekg(0); //文件头
file.read((char*)&data,sizeof(int));
while (file)
{ if (data!=INT_MIN) //正常数据需保存
outfile.write((char*)&data,sizeof(int));
file.read((char*)&data,sizeof(int));
}
file.close(); //关闭文件R_stru.dat
outfile.close(); //关闭文件tem.dat
remove("numbers.dat"); //删除文件
rename("tem.dat","numbers.dat"); //更改文件名
}
cout << "\n按任意键结束.";
getch();
}//main
//get_data
void get_data(int *a)
{
cout << "输入任意数="; cin >> *a;
}//get_data()
//add_data
void add_data()
{ char ch;
int data;
do
{ get_data(&data);
file.seekg(0,ios::end);
file.write((char*)&data,sizeof(int));
cout << "再输入吗?(Y/N)"; cin >> ch;
} while (ch=='y' || ch=='Y');
}//add_data()
//show_data
void show_data(int a)
{ if (a==INT_MIN)
cout << "本数据已注明删除.\n";
cout << a << endl;
}//show_data()
//update_data
void update_data()
{ int n,position;
char ch;
int data;
do
{ cout << "要更新第几个数据:"; cin >> n;
position = (n-1) * sizeof(int);
file.seekg(position);
file.read((char*)&data,sizeof(int)); //读取
show_data(data); //显示数据
get_data(&data); //修改数据
file.seekg(position);
file.write((char*)&data,sizeof(int)); //写入更新
cout << "再更新吗?(Y/N)"; cin >> ch;
} while (ch=='y' || ch=='Y');
}//update_data()
//menu()
char menu()
{ char ch;
cout << "\n0. End.";
cout << "\n1.添加.";
cout << "\n2.更新.";
cout << "\n3.查询.";
cout << "\n4.删除.\n";
cout << "\n 选项:"; cin >> ch;
return ch;
}//menu()
//display()
void display()
{ char ch;
int filesize,n,position;
int data;
file.seekg(0,ios::end); //文件尾
filesize = file.tellg()/sizeof(int);
cout << "文件有 " << filesize <<" 个\n";
do
{
cout << "要查询第几个数据:"; cin >> n;
position = (n-1) * sizeof(int);
file.seekg(position);
file.read((char*)&data,sizeof(int));
show_data(data);
cout << "要再查询吗?(Y/N)"; cin >> ch;
} while (ch=='Y' || ch=='y');
}//display()
//delete_data
void delete_data()
{ int n,position;
char ch;
int data;
do
{ cout << "要删除第几个数据:"; cin >> n;
position = (n-1) * sizeof(int);
file.seekg(position);
file.read((char*)&data,sizeof(int)); //读取
cout << data << endl; //显示数据
data = INT_MIN;
file.seekg(position);
file.write((char*)&data,sizeof(int)); //写入数据
cout << "再删除吗?(Y/N)"; cin >> ch;
} while (ch=='y' || ch=='Y');
}//delete_data()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -