#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Date
{
public:
void SetDate()
{
cout << "请输入年份:";
cin >> year;
cout << "请输入月份:";
cin >> month;
cout << "请输入日期:";
cin >> day;
}
int GetYear() { return year; }
int GetMonth() { return month; }
int GetDay() { return day; }
private:
int year;
int month;
int day;
};
class Student
{
public:
void InputStudent(Date &birthday)
{
ofstream outfile("student.txt", ios::app);
cout << "请输入学号:";
cin >> num;
cout << "请输入姓名:";
cin >> name;
birthday.SetDate();
cout << "请输入性别:";
cin >> gender;
cout << "请输入三门课成绩:";
cin >> score1 >> score2 >> score3;
double average = (score1 + score2 + score3) / 3.0;
int max_score = max({score1, score2, score3});
int min_score = min({score1, score2, score3});
outfile << num << " " << name << " " << birthday.GetYear() << " " << birthday.GetMonth() << " " << birthday.GetDay()
<< " " << gender << " " << score1 << " " << score2 << " " << score3 << " " << average << " " << max_score << " " << min_score << endl;
cout << "学生信息录入成功!" << endl;
outfile.close();
}
void DisplayAllStudents()
{
ifstream infile("student.txt");
string line;
while (getline(infile, line))
{
cout << line << endl;
}
infile.close();
}
void FindStudentByNum(int findnum)
{
ifstream infile("student.txt");
int num;
string line;
bool found = false;
while (infile >> num)
{
if (num == findnum)
{
getline(infile, line);
cout << num << " " << line << endl;
found = true;
break;
}
getline(infile, line);
}
infile.close();
if (!found)
{
cout << "未找到学号为 " << findnum << " 的学生" << endl;
}
}
void AlterDateByNum(int findnum)
{
// 实现修改日期的方法
// 省略具体实现代码
fstream file("student.txt");
ofstream temp("temp.txt");
int num;
string name, gender, line;
int year, month, day, score1, score2, score3;
double average;
bool found = false;
while (file >> num >> name >> year >> month >> day >> gender >> score1 >> score2 >> score3 >> average)
{
if (num == findnum)
{
Date newDate;
newDate.SetDate();
temp << num << " " << name << " " << newDate.GetYear() << " " << newDate.GetMonth() << " " << newDate.GetDay()
<< " " << gender << " " << score1 << " " << score2 << " " << score3 << " " << average << endl;
found = true;
cout << "已成功修改学号为 " << num << " 的学生的出生日期!" << endl;
}
else
{
temp << num << " " << name << " " << year << " " << month << " " << day << " " << gender << " "
<< score1 << " " << score2 << " " << score3 << " " << average << endl;
}
}
file.close();
temp.close();
remove("student.txt");
rename("temp.txt", "student.txt");
if (!found)
{
cout << "未找到学号为 " << findnum << " 的学生" << endl;
}
}
void AlterScoreByNum(int findnum)
{
// 实现修改成绩的方法
// 省略具体实现代码
fstream file("student.txt");
ofstream temp("temp.txt");
int num;
string name, gender, line;
int year, month, day, score1, score2, score3;
double average;
bool found = false;
while (file >> num >> name >> year >> month >> day >> gender >> score1 >> score2 >> score3 >> average)
{
if (num == findnum)
{
int newScore1, newScore2, newScore3;
cout << "请输入新的三门课成绩: ";
cin >> newScore1 >> newScore2 >> newScore3;
double newAverage = (newScore1 + newScore2 + newScore3) / 3.0;
int newMax = max({newScore1, newScore2, newScore3});
int newMin = min({newScore1, newScore2, newScore3});
temp << num << " " << name << " " << year << " " << month << " " << day << " " << gender << " "
<< newScore1 << " " << newScore2 << " " << newScore3 << " " << newAverage << " " << newMax << " " << newMin << endl;
found = true;
cout << "已成功修改学号为 " << num << " 的学生成绩!" << endl;
}
else
{
temp << num << " " << name << " " << year << " " << month << " " << day << " " << gender << " "
<< score1 << " " << score2 << " " << score3 << " " << average << endl;
}
}
file.close();
temp.close();
remove("student.txt");
rename("temp.txt", "student.txt");
if (!found)
{
cout << "未找到学号为 " << findnum << " 的学生" << endl;
}
}
private:
int num;
string name;
string gender;
int score1, score2, score3;
};
int main()
{
Student stu;
Date birthday;
int findnum;
int choice;
while (true)
{
cout << "***欢迎进入学生管理系统***" << endl;
cout << "1. 录入学生信息" << endl;
cout << "2. 浏览全部学生记录" << endl;
cout << "3. 按学号查找学生记录" << endl;
cout << "4. 按学号修改出生日期" << endl;
cout << "5. 按学号修改学生成绩" << endl;
cout << "6. 退出系统" << endl;
cout << "请选择功能:";
cin >> choice;
switch (choice)
{
case 1:
stu.InputStudent(birthday);
break;
case 2:
stu.DisplayAllStudents();
break;
case 3:
cout << "请输入要查找的学生学号:";
cin >> findnum;
stu.FindStudentByNum(findnum);
break;
case 4:
cout << "请输入要修改日期的学生学号:";
cin >> findnum;
stu.AlterDateByNum(findnum);
break;
case 5:
cout << "请输入要修改成绩的学生学号:";
cin >> findnum;
stu.AlterScoreByNum(findnum);
break;
case 6:
cout << "感谢使用,再见!" << endl;
return 0;
default:
cout << "无效的选项,请重新选择。" << endl;
break;
}
}
return 0;
}
在里面添加一个功能按学号删除学生记录另外使这个代码更加简洁