定义一个学生类,包含学生的学号、姓名和成绩的基本信息,将学生信息写入二进制文件student.dat中,实现对学生信息的显示、查询和删除等基本功能。
我写完之后查询和删除的功能,都有问题
下面是代码
1. 这是Sdudent.h
#ifndef STUDENT_H
#define STUDENT_H
#include
#include
using namespace std;
class Student
{
friend ostream& operator<<(ostream &output,Student &stu);
public:
Student(string xs_ID,string x_name,int x_grade);
string gets_ID();
string getname();
int getgrade();
// void show();
private:
string s_ID;
string name;
int grade;
};
#endif STUDENT_H
2.这是Sdudent.cpp
#include"Student.h"
Student::Student(string xs_ID,string x_name,int x_grade)
{
s_ID=xs_ID;
name=x_name;
grade=x_grade;
}
string Student::gets_ID()
{
return s_ID;
}
string Student::getname()
{
return name;
}
int Student::getgrade()
{
return grade;
}
ostream& operator<<(ostream &output,Student &stu)
{
output<<"学号:"<
return output;
}
3.这是主函数,我命名为SMS.cpp
#include
#include
#include
#include"Student.h"
int main()
{
int i;
//写入
Student st[2]={Student("1605112","Alan ",88),Student("1605113","Spurs",76)};
fstream outf("Students.dat",ios::out|ios::binary|ios::trunc);
if(!outf)
{
cerr<<"Students.dat open error!"<<endl;
abort();
}
for(i=0;i<2;i++)
{
outf.write((char *)&st[i],sizeof(st[i]));
}
outf.close();
//读入并显示
fstream inf("Students.dat",ios::in|ios::binary|ios::trunc);
for(i=0;i<2;i++)
{
inf.read((char*)&st[i],sizeof(Student));
cout<<st[i];
}
inf.close();
//显示
// inf.open("Students.dat",ios::in|ios::binary|ios::trunc);
// for(i=0;i<2;i++)
// {
// cout<<st[i];
// }
// inf.close();
//查询
inf.open("Students.dat",ios::in|ios::binary|ios::trunc);
cout<<"输入要查找学生序列号:";
int k;
cin>>k;
int p=(k-1)*sizeof(Student);
inf.seekg(p);
inf.read((char*)&st[i],sizeof(Student));
cout<<st[i];
inf.close();
//删除
cout<<"输入要删除学生序号:";
int n;
cin>>n;
inf.open("Students.dat",ios::in|ios::binary);
for(i=0;i<2;i++)
{
if(i!=n-1)
outf.write((char*) &st[i],sizeof(st[i]));
}
outf.close();
inf.open("Students.dat",ios::in|ios::binary);
for(i=0;i<1;i++)
{
inf.read((char*)&st[i],sizeof(Student));
cout<<st[i];
}
inf.close();
return 0;
}