一、项目前言
本篇整合前面全部 C++ 知识点:变量、分支、循环、数组、函数、结构体、vector、map、文件读写、异常捕获、面向对象封装,实现完整可运行控制台管理工具,包含增删改查、文件持久化、数据校验功能。
项目功能清单
添加学生信息(姓名、年龄、分数)
根据姓名查询学生成绩
修改已有学生分数
删除指定学生记录
展示全部学生列表
数据保存到本地 student.txt,程序重启自动加载
分数异常校验、运行异常捕获容错
二、完整可运行源码
cpp
运行
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <fstream>
#include <exception>
using namespace std;
// 学生结构体
struct Student
{
string name;
int age;
double score;
};
// 全局容器存储学生数据
vector<Student> stuList;
// 函数声明
void showMenu();
void addStudent();
void queryByName();
void modifyScore();
void delStudent();
void showAll();
void saveToFile();
void loadFromFile();
int main()
{
// 程序启动加载本地文件数据
loadFromFile();
int op;
while(true)
{
showMenu();
cin >> op;
try
{
switch(op)
{
case 1: addStudent(); break;
case 2: queryByName(); break;
case 3: modifyScore(); break;
case 4: delStudent(); break;
case 5: showAll(); break;
case 0:
saveToFile();
cout << "数据已保存,程序退出" << endl;
return 0;
default:
cout << "输入功能序号无效,请重新选择" << endl;
}
}
catch(const exception &e)
{
cout << "操作异常:" << e.what() << endl;
}
}
return 0;
}
// 打印功能菜单
void showMenu()
{
cout << "\n===== 学生成绩管理系统 =====" << endl;
cout << "1. 添加学生信息\n2. 姓名查询分数\n3. 修改学生分数\n4. 删除学生\n5. 展示全部学生\n0. 保存并退出" << endl;
cout << "请输入操作序号:";
}
// 添加学生
void addStudent()
{
Student s;
cout << "输入姓名:";
cin >> s.name;
cout << "输入年龄:";
cin >> s.age;
cout << "输入分数:";
cin >> s.score;
// 数据校验
if(s.age <= 0 || s.age > 100)
throw runtime_error("年龄范围非法");
if(s.score < 0 || s.score > 100)
throw runtime_error("分数必须0~100");
stuList.push_back(s);
cout << "学生添加成功" << endl;
}
// 根据姓名查询
void queryByName()
{
string name;
cout << "输入查询姓名:";
cin >> name;
bool find = false;
for(auto &stu : stuList)
{
if(stu.name == name)
{
cout << "姓名:" << stu.name << " 年龄:" << stu.age << " 分数:" << stu.score << endl;
find = true;
break;
}
}
if(!find)
cout << "未找到该学生" << endl;
}
// 修改分数
void modifyScore()
{
string name;
double newSc;
cout << "输入要修改的学生姓名:";
cin >> name;
cout << "输入新分数:";
cin >> newSc;
if(newSc <0 || newSc >100)
throw runtime_error("新分数超出合法区间");
bool find = false;
for(auto &stu : stuList)
{
if(stu.name == name)
{
stu.score = newSc;
cout << "分数修改完成" << endl;
find = true;
break;
}
}
if(!find)
cout << "目标学生不存在" << endl;
}
// 删除学生
void delStudent()
{
string name;
cout << "输入待删除学生姓名:";
cin >> name;
for(auto it = stuList.begin(); it != stuList.end(); )
{
if(it->name == name)
{
stuList.erase(it);
cout << "删除成功" << endl;
return;
}
else
it++;
}
cout << "无匹配学生,删除失败" << endl;
}
// 展示全部学生
void showAll()
{
if(stuList.empty())
{
cout << "暂无学生数据" << endl;
return;
}
cout << "\n===== 全部学生列表 =====" << endl;
for(auto &s : stuList)
{
cout << "姓名:" << s.name << " 年龄:" << s.age << " 分数:" << s.score << endl;
}
}
// 保存数据到txt
void saveToFile()
{
ofstream out("student.txt");
if(!out.is_open())
throw runtime_error("文件打开失败,无法保存");
for(auto &s : stuList)
{
out << s.name << " " << s.age << " " << s.score << endl;
}
out.close();
}
// 程序启动加载文件数据
void loadFromFile()
{
ifstream in("student.txt");
if(!in.is_open())
return; // 文件不存在直接跳过加载
Student s;
while(in >> s.name >> s.age >> s.score)
{
stuList.push_back(s);
}
in.close();
}
三、项目知识点覆盖清单
基础语法:分支 switch、while 循环、函数封装、参数传递
复合数据:struct 结构体、vector 动态容器存储多条数据
文件操作:ofstream/ifstream 持久化读写 txt
异常机制:try-catch 捕获非法年龄、分数、文件错误
STL 遍历:迭代器、范围 for 循环
数据校验:业务逻辑合法性拦截
四、运行使用流程
编译运行程序,自动读取 student.txt 历史数据
输入数字选择对应功能,完成增删改查
输入 0 退出,自动把全部数据写入本地文件永久保存
五、扩展优化方向(可自行拓展)
增加 map 做姓名索引,优化查询速度
新增按分数排序、统计平均分功能
增加密码登录校验模块
支持批量导入导出数据
六、系列完结说明
本篇是 C++ 零基础入门全套终篇,完整覆盖 C++ 基础语法、面向对象、标准 STL、文件 IO、异常处理,学完可独立编写控制台工具类程序。