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

📄 file_nok.cpp

📁 数据结构常用算法合集
💻 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 + -