void change() {
int item, math, english, physics;//选择修改项,修改年龄
student stu;
int flag;
char str[20];//暂时存修改内容
cout << "请输入要查询的学生的学号" << endl;
cin >> str;
fstream file("student.txt", ios::binary | ios::in);//打开文件存取学生对象的文件
while (!file.eof())
{
file.read((char*)&stu, sizeof(student));//读取文件
if (strcmp(stu.number, str) == 0)//如果存在学生信息输出
{
flag = 1;
cout << "学生学号 学生姓名 数学成绩 英语成绩 物理成绩" << endl;
cout << stu.number << "\t " << stu.name << " \t" << stu.math << "\t" << stu.english << "\t" << stu.physics << " \t" << endl;
break;
}
}
if (flag != 1)//如果不存在则提示无该学生
cout << "该学生不存在" << endl;
file.close();
cout << "------------------\n";
cout << "1.修改姓名\n";
cout << "2.修改数学成绩\n";
cout << "3.修改英语成绩\n";
cout << "4.修改物理成绩\n";
cout << "5.退出本菜单\n";
cout << "------------------\n";
while (1)
{
cout << "请选择子菜单编号:";
int item;
cin >> item;
switch (item)
{
case 1:
cout<<"请输入新的姓名:\n";
cin >> str;
strcpy(stu.name, str); break;//为学生姓名赋新值
case 2:
cout<<"请输入新的数学成绩:\n";
cin >> math;
stu.math = math; break;//为学生数学成绩赋新值
case 3:
cout<<"请输入新的英语成绩:\n";
cin >> english;
stu.english = english; break;//为学生英语成绩赋新值
case 4:
cout<<"请输入新的物理成绩:\n";
cin >> physics;
stu.physics = physics; break;
case 5: {
fstream file("student.txt", ios::out | ios::binary | ios::app);
cout << "修改成功" << endl;
file.write((char*)&stu, sizeof(student));//把新的学生信息写入文件
file.close();
return;
}
default:cout<<"请在1-5之间选择\n";
}
}
}
代码中
file.read((char*)&stu, sizeof(student));
file.write((char*)&stu, sizeof(student));
读取方法和写入是错误的
参考
https://ask.csdn.net/questions/1090116
的回答