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

📄 file_ok.cpp

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