📄 file_ok.cpp
字号:
//file_ok.cpp
#include <fstream.h>
#include <iomanip.h> //setw()
#include <conio.h> //getch()
#include <stdio.h> //rename()
struct rec
{ short status; //0:normal , 1:deleted
char seat[3];
char name[11];
short score[3]; //语英数
int total;
};
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("R_stru.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)
{ rec student;
ofstream outfile("tem.dat",ios::app|ios::binary);
file.seekg(0); //文件头
file.read((char*)&student,sizeof(rec));
while (file)
{ if (student.status==0) //正常数据需保存
outfile.write((char*)&student,sizeof(rec));
file.read((char*)&student,sizeof(rec));
}
file.close(); //关闭文件R_stru.dat
outfile.close(); //关闭文件tem.dat
remove("R_stru.dat"); //删除文件
rename("tem.dat","R_stru.dat"); //更改文件名
}
cout << "\n按任意键结束.";
getch();
}//main
//get_data
void get_data(rec *a)
{ a->status = 0; //normal data
cout << "seat="; cin >> a->seat;
cout << "name="; cin >> a->name;
cout << "语,英,数="; cin >> a->score[0] >> a->score[1] >> a->score[2];
a->total = a->score[0]+a->score[1]+a->score[2];
}//get_data()
//add_data
void add_data()
{ char ch;
rec student;
do
{ get_data(&student);
file.seekg(0,ios::end);
file.write((char*)&student,sizeof(rec));
cout << "再输入吗?(Y/N)"; cin >> ch;
} while (ch=='y' || ch=='Y');
}//add_data()
//show_data
void show_data(rec a)
{ if (a.status!=0)
cout << "本数据已注明删除.\n";
cout << setw(4) << a.seat
<< setw(12)<< a.name
<< setw(4) << a.score[0]
<< setw(4) << a.score[1]
<< setw(4) << a.score[2]
<< setw(5) << a.total << endl;
}//show_data()
//update_data
void update_data()
{ int n,position;
char ch;
rec student;
do
{ cout << "要更新第几个数据:"; cin >> n;
position = (n-1) * sizeof(rec);
file.seekg(position);
file.read((char*)&student,sizeof(rec)); //读取
show_data(student); //显示数据
get_data(&student); //修改数据
file.seekg(position);
file.write((char*)&student,sizeof(rec)); //写入更新
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;
rec student;
file.seekg(0,ios::end); //文件尾
filesize = file.tellg()/sizeof(rec);
cout << "文件有 " << filesize <<" 个\n";
do
{
cout << "要查询第几个数据:"; cin >> n;
position = (n-1) * sizeof(rec);
file.seekg(position);
file.read((char*)&student,sizeof(rec));
show_data(student);
cout << "要再查询吗?(Y/N)"; cin >> ch;
} while (ch=='Y' || ch=='y');
}//display()
//delete_data
void delete_data()
{ int n,position;
char ch;
rec student;
do
{ cout << "要删除第几个数据:"; cin >> n;
position = (n-1) * sizeof(rec);
file.seekg(position);
file.read((char*)&student,sizeof(rec)); //读取
show_data(student); //显示数据
student.status=1; //设为删除
file.seekg(position);
file.write((char*)&student,sizeof(rec)); //写入更新
cout << "再删除吗?(Y/N)"; cin >> ch;
} while (ch=='y' || ch=='Y');
}//delete_data()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -