CS生 2016-12-21 16:44 采纳率: 0%
浏览 1042

写了一个C++关于文件读写的程序,不知道哪里错了,希望各位帮帮忙

定义一个学生类,包含学生的学号、姓名和成绩的基本信息,将学生信息写入二进制文件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;

}

  • 写回答

3条回答 默认 最新

  • threenewbee 2016-12-22 02:55
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services