news 2026/4/23 14:23:27

【20天学C++】Day 20: 综合项目与进阶

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【20天学C++】Day 20: 综合项目与进阶

【20天学C++】Day 20: 综合项目与进阶

📅 学习时间:5-6小时
🎯 学习目标:综合运用所学知识,了解进阶方向
💡 难度:★★★★☆


1. 综合项目:简易学生管理系统

1.1 项目结构

StudentManager/ Student.h // 学生类 StudentManager.h // 管理器类 StudentManager.cpp // 管理器实现 main.cpp // 主程序 students.txt // 数据文件

1.2 Student.h

#ifndefSTUDENT_H#defineSTUDENT_H#include<string>#include<iostream>classStudent{private:intid;std::string name;intage;doublescore;public:Student():id(0),name(""),age(0),score(0){}Student(intid,conststd::string&name,intage,doublescore):id(id),name(name),age(age),score(score){}// GettersintgetId()const{returnid;}std::stringgetName()const{returnname;}intgetAge()const{returnage;}doublegetScore()const{returnscore;}// SettersvoidsetId(intid){this->id=id;}voidsetName(conststd::string&name){this->name=name;}voidsetAge(intage){this->age=age;}voidsetScore(doublescore){this->score=score;}// 显示信息voiddisplay()const{std::cout<<"学号: "<<id<<", 姓名: "<<name<<", 年龄: "<<age<<", 成绩: "<<score<<std::endl;}// 序列化friendstd::ostream&operator<<(std::ostream&os,constStudent&s){os<<s.id<<" "<<s.name<<" "<<s.age<<" "<<s.score;returnos;}friendstd::istream&operator>>(std::istream&is,Student&s){is>>s.id>>s.name>>s.age>>s.score;returnis;}};#endif

1.3 StudentManager.h

#ifndefSTUDENT_MANAGER_H#defineSTUDENT_MANAGER_H#include"Student.h"#include<vector>#include<memory>#include<optional>#include<fstream>#include<algorithm>classStudentManager{private:std::vector<std::unique_ptr<Student>>students;std::string filename;public:explicitStudentManager(conststd::string&file="students.txt");~StudentManager();// 添加学生voidaddStudent(intid,conststd::string&name,intage,doublescore);// 删除学生boolremoveStudent(intid);// 查找学生std::optional<Student*>findById(intid);std::vector<Student*>findByName(conststd::string&name);// 修改学生boolupdateStudent(intid,conststd::string&name,intage,doublescore);// 显示所有voiddisplayAll()const;// 排序voidsortByScore(boolascending=false);voidsortByName();// 统计doublegetAverageScore()const;Student*getTopStudent()const;intgetCount()const;// 文件操作voidsaveToFile();voidloadFromFile();};#endif

1.4 StudentManager.cpp

#include"StudentManager.h"#include<iostream>StudentManager::StudentManager(conststd::string&file):filename(file){loadFromFile();}StudentManager::~StudentManager(){saveToFile();}voidStudentManager::addStudent(intid,conststd::string&name,intage,doublescore){// 检查ID是否重复if(findById(id).has_value()){std::cout<<"学号已存在!"<<std::endl;return;}students.push_back(std::make_unique<Student>(id,name,age,score));std::cout<<"添加成功!"<<std::endl;}boolStudentManager::removeStudent(intid){autoit=std::remove_if(students.begin(),students.end(),[id](constauto&s){returns->getId()==id;});if(it!=students.end()){students.erase(it,students.end());std::cout<<"删除成功!"<<std::endl;returntrue;}std::cout<<"未找到该学生!"<<std::endl;returnfalse;}std::optional<Student*>StudentManager::findById(intid){for(auto&s:students){if(s->getId()==id){returns.get();}}returnstd::nullopt;}std::vector<Student*>StudentManager::findByName(conststd::string&name){std::vector<Student*>result;for(auto&s:students){if(s->getName().find(name)!=std::string::npos){result.push_back(s.get());}}returnresult;}boolStudentManager::updateStudent(intid,conststd::string&name,intage,doublescore){autostudent=findById(id);if(student.has_value()){(*student)->setName(name);(*student)->setAge(age);(*student)->setScore(score);std::cout<<"修改成功!"<<std::endl;returntrue;}std::cout<<"未找到该学生!"<<std::endl;returnfalse;}voidStudentManager::displayAll()const{if(students.empty()){std::cout<<"暂无学生信息"<<std::endl;return;}std::cout<<"\n========== 学生列表 =========="<<std::endl;for(constauto&s:students){s->display();}std::cout<<"==============================\n"<<std::endl;}voidStudentManager::sortByScore(boolascending){std::sort(students.begin(),students.end(),[ascending](constauto&a,constauto&b){returnascending?a->getScore()<b->getScore():a->getScore()>b->getScore();});}voidStudentManager::sortByName(){std::sort(students.begin(),students.end(),[](constauto&a,constauto&b){returna->getName()<b->getName();});}doubleStudentManager::getAverageScore()const{if(students.empty())return0;doublesum=0;for(constauto&s:students){sum+=s->getScore();}returnsum/students.size();}Student*StudentManager::getTopStudent()const{if(students.empty())returnnullptr;autoit=std::max_element(students.begin(),students.end(),[](constauto&a,constauto&b){returna->getScore()<b->getScore();});returnit->get();}intStudentManager::getCount()const{returnstudents.size();}voidStudentManager::saveToFile(){std::ofstreamfile(filename);if(!file){std::cerr<<"无法保存文件!"<<std::endl;return;}for(constauto&s:students){file<<*s<<"\n";}}voidStudentManager::loadFromFile(){std::ifstreamfile(filename);if(!file)return;Student s;while(file>>s){students.push_back(std::make_unique<Student>(s));}}

1.5 main.cpp

#include"StudentManager.h"#include<iostream>#include<limits>usingnamespacestd;voidshowMenu(){cout<<"\n======= 学生管理系统 ======="<<endl;cout<<"1. 添加学生"<<endl;cout<<"2. 删除学生"<<endl;cout<<"3. 查找学生"<<endl;cout<<"4. 修改学生"<<endl;cout<<"5. 显示所有"<<endl;cout<<"6. 按成绩排序"<<endl;cout<<"7. 统计信息"<<endl;cout<<"0. 退出系统"<<endl;cout<<"============================"<<endl;cout<<"请选择: ";}voidclearInput(){cin.clear();cin.ignore(numeric_limits<streamsize>::max(),'\n');}intmain(){StudentManager manager;intchoice;while(true){showMenu();cin>>choice;if(cin.fail()){clearInput();cout<<"无效输入!"<<endl;continue;}switch(choice){case1:{intid,age;string name;doublescore;cout<<"输入学号: ";cin>>id;cout<<"输入姓名: ";cin>>name;cout<<"输入年龄: ";cin>>age;cout<<"输入成绩: ";cin>>score;manager.addStudent(id,name,age,score);break;}case2:{intid;cout<<"输入要删除的学号: ";cin>>id;manager.removeStudent(id);break;}case3:{intid;cout<<"输入要查找的学号: ";cin>>id;autostudent=manager.findById(id);if(student.has_value()){(*student)->display();}else{cout<<"未找到!"<<endl;}break;}case4:{intid,age;string name;doublescore;cout<<"输入学号: ";cin>>id;cout<<"输入新姓名: ";cin>>name;cout<<"输入新年龄: ";cin>>age;cout<<"输入新成绩: ";cin>>score;manager.updateStudent(id,name,age,score);break;}case5:manager.displayAll();break;case6:manager.sortByScore();manager.displayAll();break;case7:cout<<"学生总数: "<<manager.getCount()<<endl;cout<<"平均分: "<<manager.getAverageScore()<<endl;if(autotop=manager.getTopStudent()){cout<<"最高分: ";top->display();}break;case0:cout<<"再见!"<<endl;return0;default:cout<<"无效选择!"<<endl;}}return0;}

2. 知识点回顾

本项目综合运用了:

[基础语法] - 类与对象 - 封装(private/public) - 构造函数与析构函数 [面向对象] - 运算符重载(<<, >>) - 成员函数 [现代C++] - 智能指针(unique_ptr) - 范围for循环 - Lambda表达式 - auto类型推导 - std::optional [STL] - vector容器 - algorithm算法(sort, remove_if, max_element) [文件操作] - fstream读写文件

3. 进阶学习方向

3.1 深入学习方向

1. 设计模式 - 单例、工厂、观察者、策略等 - 推荐书籍:《Head First设计模式》 2. 模板元编程 - SFINAE, 类型萃取 - 编译期计算 3. 性能优化 - 内存布局 - 缓存友好 - 无锁编程 4. 系统编程 - 网络编程(socket, asio) - 系统调用

3.2 实战项目建议

1. 初级项目 - 简易计算器 - 通讯录管理 - 文件管理器 2. 中级项目 - 简易数据库 - HTTP服务器 - 聊天程序 3. 高级项目 - 游戏引擎组件 - 编译器/解释器 - 高性能网络框架

3.3 推荐资源

书籍: - 《C++ Primer》- 入门经典 - 《Effective C++》- 进阶必读 - 《深度探索C++对象模型》- 底层原理 - 《C++并发编程实战》- 多线程 在线资源: - cppreference.com - 标准库参考 - learncpp.com - 教程 - godbolt.org - 编译器探索

4. 20天学习总结

Week 1: 基础入门 Day 1-3: 环境、语法、函数 Week 2: 面向对象 Day 4-8: 类、构造函数、运算符重载 Week 3: 继承与多态 Day 9-11: 继承、虚函数、模板 Week 4: STL与现代C++ Day 12-14: 容器、算法、迭代器 Day 15-16: 异常、智能指针 Day 17-19: C++11/14/17、多线程 Week 5: 实战 Day 20: 综合项目

5. 下一步行动

1. 复习20天的内容,确保理解 2. 完成每天的练习题 3. 动手实现综合项目 4. 选择一个感兴趣的方向深入 5. 持续练习,多写代码!

🎉 恭喜你完成20天C++学习!

编程是一项需要不断练习的技能。学完这20天只是开始,真正的成长来自于持续的实践和项目经验。

祝你在C++的道路上越走越远!


全系列完结🎊

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 8:21:44

SCI论文怎么降AI率?2026年英文论文降AI工具推荐

SCI论文怎么降AI率&#xff1f;2026年英文论文降AI工具推荐 SCI投稿越来越严了&#xff0c;很多期刊开始要求AIGC检测报告。 用GPT或DeepSeek写的英文论文&#xff0c;Turnitin AI检测一查&#xff0c;AI率80%。 如果你也面临这个问题&#xff0c;这篇文章告诉你怎么解决。 …

作者头像 李华
网站建设 2026/4/23 8:22:22

知网AIGC检测3.0升级后怎么降AI?2026年实测攻略来了

知网AIGC检测3.0升级后怎么降AI&#xff1f;2026年实测攻略来了 2025年12月28日&#xff0c;知网上线了AIGC检测3.0版本。 很多同学的论文&#xff0c;在升级前能过&#xff0c;升级后AI率暴涨20-30个百分点。 我帮几个学弟学妹改论文&#xff0c;发现以前管用的方法&#x…

作者头像 李华
网站建设 2026/4/22 15:25:33

MySQL 事务:原理、操作与隔离级别深度解析

MySQL 事务&#xff1a;原理、操作与隔离级别深度解析1. 事务概述2. 事务的提交与回滚操作3. 事务的隔离级别4. 事务隔离级别的配置与验证1. 事务概述 事务是处理复杂数据操作的核心机制&#xff0c;尤其适用于操作量大、逻辑关联性强的场景。例如在企业级人员管理系统中&…

作者头像 李华
网站建设 2026/4/23 8:22:54

微软新出的AI Agents课程太顶了,通宵刷完!

最近又帮大家挖到了微软推出的一门Al Agents课程&#xff0c;完全free面向对AI感兴趣的同学&#xff0c;帮助学习者从0开始构建和理解AI Agents&#xff0c;以快速掌握AI代理的核心技能&#xff0c;了解如何将这些技术应用于实际场景。&#x1f33f;课程内容&#xff1a;一共包…

作者头像 李华
网站建设 2026/4/23 9:52:58

C语言数据存储:整型与浮点型内存解析

C语言数据存储&#xff1a;整型与浮点型内存解析&#xff08;2026 视角&#xff0c;图文并茂版&#xff09; C语言中&#xff0c;整型和浮点型在内存中的存储方式完全不同&#xff0c;这也是导致很多初学者在调试、位运算、类型转换时踩坑的核心原因。 下面从内存布局、字节序…

作者头像 李华