C++实现学生信息管理系统(文件输入输出)

#include
#include
#include
#include
using namespace std;
struct Stu{
	char name[20];
	int num;
	int score;
}stu[100];
int n=0;//存放学生人数

void input();
void display();
void read();
void write();
void sort();
void search();
void insert();
void read_or_clear();
void del();
void menu();
//主函数
int main()
{
	menu();
	return 0;
}
void menu()
{
	read_or_clear();
	while(1){
		cout<<endl;
		cout<<"|---------------学生信息管理系统----------------|"<<endl;
		cout<<"|-------------------1 查询----------------------|"<<endl;
		cout<<"|-------------------2 添加----------------------|"<<endl;
		cout<<"|-------------------3 排序----------------------|"<<endl;
		cout<<"|-------------------4 删除----------------------|"<<endl;
		cout<<"|-------------------5 显示----------------------|"<<endl;
		cout<<"|-------------------6 退出----------------------|"<<endl;
		cout<<"|-----------------------------------------------|"<<endl;
		int number;
		cout<<"输入你的选择:"<<endl;
		cin>>number;
		switch(number){
		case 1:search();break;
		case 2:insert();break;
		case 3:sort();break;
		case 4:del();break;
		case 5:read();break;
		case 6:exit(1);
		default:cout<<"输入选项序号错误!"<<endl;
		}
	}
}


//删除学生信息
void del()
{
	int number;
	bool f=0;
	cout<<"输入你要删除的学生学号:"<<endl;
	cin>>number;
	for(int i=0;i<n;i++){
		if(stu[i].num==number)
		{
			cout<<"找到该学生!进行删除操作..."<<endl;
			for(int j=i;j<n-1;j++)
			{
				stu[j].num=stu[j+1].num;
				stu[j].score=stu[j+1].score;
				strcpy(stu[j].name,stu[j+1].name);
			}
			cout<<"删除成功!"<<endl;
			n--;//学生人数-1
			f=1;
			break;
		}
	}
	if(f)
		write();
	else 
		cout<<"不存在该学生!无法删除!"<<endl;
	
}


//添加学生信息
void insert()
{
	int num,score;
	char name[20];
	cout<<"输入所要添加学生的学号:"<<endl;
	cin>>num;
	bool f=1;
	for(int i=0;i<n;i++)
	{
		if(num==stu[i].num){
			cout<<"无法添加该学生 该学生信息已经存在!"<<endl;
			f=0;
			break;
		}
	}
	if(f){
		cout<<"输入姓名 成绩:"<<endl;
		cin>>name>>score;
		stu[n].num=num;
		stu[n].score=score;
		strcpy(stu[n].name,name);
		cout<<"添加成功"<<endl;
		n++;
		write();//添加后要保存到文件中
	}
	
}
	

		
//清空
void read_or_clear()
{
	cout<<"是否清空文件中的学生信息?(清空/第一次录入信息 需要输入学生信息,保存到文件中  yes--清空 no--不清空 )"<<endl;
	string s;
	cin>>s;
	if(s=="yes")
	{
		n=0;
		input();//清空后调用 输入学生信息函数
		write();//并将信息保存到文件中
		read();
	}
	if(s=="no")
	{
		read();
		cout<<"读取信息完毕!"<<endl;
	}
}

//查询
void search()
{
	cout<<"选择查询方式:0--学号 1--姓名:"<<endl;
	int s;
	cin>>s;
	while(1){
	if(s==0)
	{
		cout<<"输入你要查询的学号:"<<endl;
		int num;
		cin>>num;
		for(int i=0;i<n;i++)
			if(num==stu[i].num)
				cout<<"查询成功!"<<num<<"号学生信息 姓名 成绩:"<<stu[i].name<<" "<<stu[i].score<<endl;
		break;
	}
	else if(s==1)
	{
		cout<<"输入你要查询的学生姓名:"<<endl;
		char name[20];
		cin>>name;
		for(int i=0;i<n;i++)
			if(strcmp(stu[i].name,name)==0)
				cout<<"查询成功!"<<name<<"学生信息 学号 成绩:"<<stu[i].num<<" "<<stu[i].score<<endl;
		break;
	}
	else
	{
		cout<<"输入的选项序号有误,请重新输入:"<<endl;
		cin>>s;
	}
	}
}
	

//排序
bool cmp(Stu a,Stu b)
{
	return a.score<b.score;
}
bool cmp1(Stu a,Stu b) //成绩降序
{
	return a.score>b.score;
}
bool cmp2(Stu a,Stu b)  //姓名排序
{
	if(strcmp(a.name,b.name)<=0)
		return true;
	else
		return false;
}
bool cmp3(Stu a,Stu b)  //学号排序
{
	return a.num<b.num;
}

void sort()
{
	void display();
	cout<<"选择排序方式:0--按照姓名排序 1--按照学号排序 2--按照成绩升序 3--按照成绩降序"<<endl;
	int m;
	cin>>m;
	switch(m){
	case 0: sort(stu,stu+n,cmp2);display();break;
	case 1: sort(stu,stu+n,cmp3);display();break;
	case 2: sort(stu,stu+n,cmp);display();break;
	case 3: sort(stu,stu+n,cmp1);display();break;
	default:cout<<"输入号码选项序号错误!"<<endl;
	}
}


void write()
{
	sort(stu,stu+n,cmp3);//先按照学号排序 再存入
	ofstream outfile("data.dat",ios::binary);
	if(!outfile)
	{
		cerr<<"保存学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"将学生信息读入文件当中....."<<endl;
	for(int i=0;i<n;i++)
	{
		outfile.write((char*)&stu[i],sizeof(Stu));
	}
	outfile.close();
}
void read()
{
	ifstream infile("data.dat",ios::binary);
	if(!infile)
	{
		cerr<<"读取学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"从文件中读取学生信息....."<<endl;
	int j=0;
	while(infile.read((char*)&stu[j],sizeof(Stu)))
	{
		cout<<j+1<<" :num:"<<stu[j].num<<" name:"<<stu[j].name<<" score:"<<stu[j].score<<endl;
		j++;
	}
	n=j; //保存学生人数
	cout<<"学生人数为:"<<n<<endl;
	infile.close();
}
void input()
{
	cout<<"输入学生人数:"<<endl;
	cin>>n;
	cout<<"输入学生信息 学号 姓名 成绩:"<<endl;
	for(int i=0;i<n;i++)
		cin>>stu[i].num>>stu[i].name>>stu[i].score;
	cout<<"完成学生信息的输入!"<<endl;
}
void display()
{
	cout<<"输出学生信息:学号 姓名 成绩"<<endl;
	for(int i=0;i<n;i++)
		cout<<i+1<<" :num:"<<stu[i].num<<" name:"<<stu[i].name<<" score:"<<stu[i].score<<endl;
}

运行结果

显示所有学生信息:
C++实现学生信息管理系统(文件输入输出)_第1张图片
查询 (按照学号查询)
C++实现学生信息管理系统(文件输入输出)_第2张图片
查询(按照姓名查询)
C++实现学生信息管理系统(文件输入输出)_第3张图片
排序 按照成绩降序
C++实现学生信息管理系统(文件输入输出)_第4张图片
排序按照成绩升序
C++实现学生信息管理系统(文件输入输出)_第5张图片
排序 按照姓名字母升序
C++实现学生信息管理系统(文件输入输出)_第6张图片
添加学生信息
C++实现学生信息管理系统(文件输入输出)_第7张图片
删除学生信息
C++实现学生信息管理系统(文件输入输出)_第8张图片
退出
C++实现学生信息管理系统(文件输入输出)_第9张图片

输入一个字符串 将字符串中小写字母存入磁盘 再从磁盘读取字符串

#include
#include
#include
#include
#include
using namespace std;

int main()
{
	ofstream outfile("data.dat", ios::out);
	if (!outfile)
	{
		cerr << "存入磁盘时打开文件错误!" << endl;
		exit(1);
	}
	char a[100];
	cout << "输入一个字符串:" << endl;
	gets_s(a);
	int len = strlen(a);
	for (int i = 0; i < len; i++)
	{
		if (a[i] >= 'a'&&a[i] <= 'z')  //如果是小写字母就存入磁盘
			outfile << a[i];
	}
	outfile.close();
	ifstream infile("data.dat", ios::in);
	if (!infile)
	{
		cerr << "读入时打开文件错误!" << endl;
		exit(1);
	}
	char ch;
	cout << "存入磁盘中的字符串:" << endl;
	while (infile.get(ch)) {
		cout << ch ;
	}
	cout << endl;
	infile.close();
	return 0;
}

在这里插入图片描述
输入数组 排序后存入磁盘再 从磁盘中读取

#include
#include
#include
#include
#include
using namespace std;

int main()
{
	int a[10];
	cout << "输入10个数:" << endl;
	for (int i = 0; i < 10; i++)
		cin >> a[i];
	cout << "排序后存入磁盘 然后从磁盘读取" << endl;
	sort(a, a + 10);
	ofstream outfile("a.txt", ios::out);
	if (!outfile)
	{
		cerr << "存入数据时打开文件错误!" << endl;
		exit(1);
	}
	for (int i = 0; i < 10; i++)
		outfile << a[i] << ' ';
	outfile.close();
	ifstream infile("a.txt", ios::in);
	if (!infile)
	{
		cerr << "读取文件时打开磁盘文件错误!" << endl;
		exit(1);
	}
	int b[100],t, i = 0;
	for (int i = 0; i < 10; i++)
	{
		infile >> t;
		cout << t << ' ';
	}
	infile.close();
	return 0;
}

在这里插入图片描述

你可能感兴趣的:(随便写,c++)