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

📄 prog10.cpp

📁 C++语言程序设计题典
💻 CPP
字号:
#include <fstream.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
class Stud
{
	char tag;
	int no;
	char name[10];
	int score;
public:
	void getdata()
	{
		tag='#';
		cout << "(学号 姓名 成绩):";
		cin >> no >> name >> score;
	}
	char gettag() { return tag; }
	int getno() { return no; }
	void disp()
	{
		if (tag=='#')
		   cout << setw(6) << no << setw(10) 
		     << name << setw(6) << score << endl;
	}
};
void func1()
{
	ofstream output("stud.dat",ios::out|ios::app);
	Stud s;
	int n;
	cout << "输入数据" << endl;
	cout << "  学生人数:";
	cin >> n;
	for (int i=0;i<n;i++)
	{
		cout << "  第" << i+1 << "个学生";
		s.getdata();
		output.write((char *)&s,sizeof(s));
	};
	output.close();
}
void func2()
{
	fstream output("stud.dat",ios::in|ios::out);
	Stud s;
	int i=0,n;
	cout << "  输入删除学号:";
	cin >> n;
	while (!output.eof())
	{
		output.seekp(sizeof(Stud)*i);
		output.read((char *)&s,sizeof(Stud));
        if (s.gettag()=='#' && s.getno()==n)
		{
			output.seekp(sizeof(Stud)*i);
		    output.put('*');
		}
		i++;
	}
	output.close();
}
void func3()
{
	ifstream input("stud.dat",ios::in);
	Stud s;
	cout << "输出数据" << endl;
	cout << "    学号   姓名    成绩" << endl;
    input.read((char *)&s,sizeof(s));
	while (input)
	{
 	    s.disp();
		input.read((char *)&s,sizeof(s));
	};
	input.close();
}
void func4()
{
	fstream output("stud.dat",ios::in);
	fstream temp("temp",ios::out|ios::trunc);
	Stud s;
	while (!output.eof()) //将stud.dat未加"*"号的记录复制到temp.dat
	{
		output.read((char *)&s,sizeof(Stud));
        if (s.gettag()=='#')
			temp.write((char *)&s,sizeof(Stud));
	}
	output.close();
	temp.close();
	fstream output1("stud.dat",ios::out|ios::trunc);
                           //将temp.dat的记录复制到stud.dat
	fstream temp1("temp",ios::in);
	while (!temp1.eof())
	{
		temp1.read((char *)&s,sizeof(Stud));
		output1.write((char *)&s,sizeof(Stud));
	}
	output1.close();
	temp1.close();
	cout << "  物理删除完毕" << endl;
}
void main()
{
	int sel;
	do
	{
		cout << "选择(1:添加 2:逻辑删除 3:输出 4:物理删除 其他退出):";
	    cin >> sel;
		switch(sel)
		{
		case 1:func1();break;
		case 2:func2();break;
		case 3:func3();break;
		case 4:func4();break;
		}
	} while (sel>=1 && sel<=4);
}

⌨️ 快捷键说明

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