//写一个学生信息管理系统,实现增删查改,遍历:学号,姓名,性别,年龄,成绩
//往文件里面写,可以改
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
class studentsystem
{
public:
studentsystem(){}
studentsystem(int number,char name[20],char gender[10],int age,int grade)
{
this->number = number;
strcpy(this->name,name);
strcpy(this->gender,gender);
this->age = age;
this->grade = grade;
}
void menu();
void add();
void find();
void updat();
void delet();
void display();
public:
int number;//学号
char name[20];//姓名
char gender[10];//性别
int age;//年龄
int grade;//成绩
};
void studentsystem::menu()
{
cout<<"***************************************"<<endl;
cout<<"1.增加学生信息 2.查看学生信息"<<endl;
cout<<"3.删除学生信息 4.修改学生信息"<<endl;
cout<<"5.显示学生信息 6.退出学生系统"<<endl;
cout<<"***************************************"<<endl;
}
void studentsystem::add()
{
studentsystem s1;
ofstream fout;
fout.open("binary.dat", ios::binary |ios::app);//二进制写
ofstream fout1;
fout1.open("temp.dat", ios::binary |ios::app);//二进制写
//fout.seekp(0,ios::end);
cout<<fout.tellp()<<endl;
while(1)
{
cout<<"请输入学生姓名:(输入’end‘退出添加学生信息)"<<endl;
cin>>s1.name;
if(strcmp(s1.name, "end") == 0)
{
break;
}
cout<<"请输入学生学号号:";
cin>>s1.number;
// cout<<endl;
cout<<"请输入学生学年龄:";
cin>>s1.age;
//cout<<endl;
cout<<"请输入学生学性别:";
cin>>s1.gender;
//cout<<endl;
cout<<"请输入学生成绩:";
cin>>s1.grade;
//cout<<endl;
// cout<<s1.name<<s1.age<<endl;
fout.write((char*)&s1,sizeof(studentsystem));
}
fout.close();
fout1.close();
}
void studentsystem::find()
{
studentsystem s1;
ifstream fin;
char s[20];
int flag = 0;
//fin.seekg(0,ios::beg);
cout<<"请输入查找学生的姓名:";
cin>>s;
fin.open("binary.dat",ios::in | ios::binary);//二进制读
while(fin.read((char*)&s1,sizeof(studentsystem)))
{
if(strcmp(s1.name,s) == 0)
{
cout<<s1.name<<" "<<s1.number<<" "<<s1.age<<" "<<s1.gender<<" "
<<s1.grade<<endl;
flag = 1;
break;
}
}
if(flag == 0)
{
cout<<"没有找到该学生信息"<<endl;
}
fin.close();
}
void studentsystem::updat()
{
int flag = 0;
char str[20];
fstream fs("binary.dat",ios::in | ios:: out);
fs.seekg(0,ios::end);//将读的光标移动到文件的末尾
int num = fs.tellg() / sizeof(studentsystem);
// cout<<num<<endl;
fs.seekg(0,ios::beg);//读的光标移回开头
int i = 0 ;
studentsystem s;
cout<<"请输入要修改信息的学生姓名:";
cin>>str;
while(i < num)
{
fs.read((char *)&s,sizeof(s));
if(strcmp(s.name,str) == 0)//找到名字
{
cout<<"请输入修改后姓名:";
cin>>s.name;
cout<<"请输入修改后学号:";
cin>>s.number;
// cout<<endl;
cout<<"请输入修改后年龄:";
cin>>s.age;
//cout<<endl;
cout<<"请输入修改后性别:";
cin>>s.gender;
//cout<<endl;
cout<<"请输入修改后成绩:";
cin>>s.grade;
fs.seekp(sizeof(s)*i,ios::beg);
fs.write((char *)&s,sizeof(s));
flag = 1;
break;
}
i++;
}
if(flag == 0)
{
cout<<"没有找到该学生信息"<<endl;
}
fs.close();
}
void studentsystem::display()
{
studentsystem s1;
ifstream fin;
int flag = 0;
//fin.seekg(0,ios::beg);
fin.open("binary.dat",ios::in | ios::binary);//二进制读
while(fin.read((char*)&s1,sizeof(studentsystem)))
{
cout<<s1.name<<" "<<s1.number<<" "<<s1.age<<" "<<s1.gender<<" "
<<s1.grade<<endl;
flag = 1;
}
if(flag == 0)
{
cout<<"无学生信息"<<endl;
}
fin.close();
}
void studentsystem::delet()
{
int flag = 0;
char str[20];
fstream fs("binary.dat",ios::in | ios:: out);
fstream fp("temp.dat",ios::in | ios:: out |ios::trunc);
fs.seekg(0,ios::end);//将读的光标移动到文件的末尾
int num = fs.tellg() / sizeof(studentsystem);
fs.seekg(0,ios::beg);//读的光标移回开头
fp.seekg(0,ios::beg);
int i = 0 ;
studentsystem s1;
cout<<"请输入要删除的学生姓名:";
cin>>str;
//cout<<"num"<<num<<endl;
while(i < num)
{
fs.read((char *)&s1,sizeof(s1));
if(strcmp(s1.name,str) != 0)
{
//cout<<"s1"<<s1.name<<endl;
fp.write((char *)&s1,sizeof(s1));
}
else
{
flag = 1;
}
i++;
// cout<<"i"<<i<<endl;
}
fs.close();
ofstream fout;
fout.open("binary.dat", ios::binary |ios::out);//二进制写
i = 0;
if(flag == 0)
{
cout<<"没有找到该学生信息"<<endl;
}
else
{
//cout<<"L"<<endl;
fp.seekg(0,ios::end);
int num = fp.tellg() / sizeof(s1);
//cout<<num<<endl<<i<<endl;
fp.seekg(0,ios::beg);
if(num == 0)
{
cout<<"无学生信息"<<endl;
}
else
{
while(i < num)
{
fp.read((char *)&s1,sizeof(s1));
// cout<<s1.name;
fout.write((char *)&s1,sizeof(s1));
i++;
//cout<<"6";
}
cout<<"删除成功!"<<endl;
}
}
fout.close();
fp.close();
}
int main()
{
studentsystem s;
int cmd;
while(1)
{
s.menu();
cmd = 0;
cin>>cmd;
switch(cmd)
{
case 1:s.add();
break;
case 2:s.find();
break;
case 3:s.delet();
break;
case 4:s.updat();
break;
case 5:s.display();
break;
case 6:exit(0);
break;
default:
break;
}
}
return 0;
};
C++写一个学生信息管理系统,实现增删查改,遍历:学号,姓名,性别,年龄,成绩,往文件里面写,可以改修改
最新推荐文章于 2024-04-02 12:05:17 发布