广东seo网站优化公司h5设计平台
2026/2/23 8:02:55 网站建设 项目流程
广东seo网站优化公司,h5设计平台,信誉好的盐城网站建设,营销型网站建设题【20天学C】Day 20: 综合项目与进阶 #x1f4c5; 学习时间#xff1a;5-6小时 #x1f3af; 学习目标#xff1a;综合运用所学知识#xff0c;了解进阶方向 #x1f4a1; 难度#xff1a;★★★★☆ 1. 综合项目#xff1a;简易学生管理系统 1.1 项目结构 StudentMa…【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#includestring#includeiostreamclassStudent{private:intid;std::string name;intage;doublescore;public:Student():id(0),name(),age(0),score(0){}Student(intid,conststd::stringname,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-idid;}voidsetName(conststd::stringname){this-namename;}voidsetAge(intage){this-ageage;}voidsetScore(doublescore){this-scorescore;}// 显示信息voiddisplay()const{std::cout学号: id, 姓名: name, 年龄: age, 成绩: scorestd::endl;}// 序列化friendstd::ostreamoperator(std::ostreamos,constStudents){oss.id s.name s.age s.score;returnos;}friendstd::istreamoperator(std::istreamis,Students){iss.ids.names.ages.score;returnis;}};#endif1.3 StudentManager.h#ifndefSTUDENT_MANAGER_H#defineSTUDENT_MANAGER_H#includeStudent.h#includevector#includememory#includeoptional#includefstream#includealgorithmclassStudentManager{private:std::vectorstd::unique_ptrStudentstudents;std::string filename;public:explicitStudentManager(conststd::stringfilestudents.txt);~StudentManager();// 添加学生voidaddStudent(intid,conststd::stringname,intage,doublescore);// 删除学生boolremoveStudent(intid);// 查找学生std::optionalStudent*findById(intid);std::vectorStudent*findByName(conststd::stringname);// 修改学生boolupdateStudent(intid,conststd::stringname,intage,doublescore);// 显示所有voiddisplayAll()const;// 排序voidsortByScore(boolascendingfalse);voidsortByName();// 统计doublegetAverageScore()const;Student*getTopStudent()const;intgetCount()const;// 文件操作voidsaveToFile();voidloadFromFile();};#endif1.4 StudentManager.cpp#includeStudentManager.h#includeiostreamStudentManager::StudentManager(conststd::stringfile):filename(file){loadFromFile();}StudentManager::~StudentManager(){saveToFile();}voidStudentManager::addStudent(intid,conststd::stringname,intage,doublescore){// 检查ID是否重复if(findById(id).has_value()){std::cout学号已存在std::endl;return;}students.push_back(std::make_uniqueStudent(id,name,age,score));std::cout添加成功std::endl;}boolStudentManager::removeStudent(intid){autoitstd::remove_if(students.begin(),students.end(),[id](constautos){returns-getId()id;});if(it!students.end()){students.erase(it,students.end());std::cout删除成功std::endl;returntrue;}std::cout未找到该学生std::endl;returnfalse;}std::optionalStudent*StudentManager::findById(intid){for(autos:students){if(s-getId()id){returns.get();}}returnstd::nullopt;}std::vectorStudent*StudentManager::findByName(conststd::stringname){std::vectorStudent*result;for(autos:students){if(s-getName().find(name)!std::string::npos){result.push_back(s.get());}}returnresult;}boolStudentManager::updateStudent(intid,conststd::stringname,intage,doublescore){autostudentfindById(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(constautos:students){s-display();}std::cout\nstd::endl;}voidStudentManager::sortByScore(boolascending){std::sort(students.begin(),students.end(),[ascending](constautoa,constautob){returnascending?a-getScore()b-getScore():a-getScore()b-getScore();});}voidStudentManager::sortByName(){std::sort(students.begin(),students.end(),[](constautoa,constautob){returna-getName()b-getName();});}doubleStudentManager::getAverageScore()const{if(students.empty())return0;doublesum0;for(constautos:students){sums-getScore();}returnsum/students.size();}Student*StudentManager::getTopStudent()const{if(students.empty())returnnullptr;autoitstd::max_element(students.begin(),students.end(),[](constautoa,constautob){returna-getScore()b-getScore();});returnit-get();}intStudentManager::getCount()const{returnstudents.size();}voidStudentManager::saveToFile(){std::ofstreamfile(filename);if(!file){std::cerr无法保存文件std::endl;return;}for(constautos:students){file*s\n;}}voidStudentManager::loadFromFile(){std::ifstreamfile(filename);if(!file)return;Student s;while(files){students.push_back(std::make_uniqueStudent(s));}}1.5 main.cpp#includeStudentManager.h#includeiostream#includelimitsusingnamespacestd;voidshowMenu(){cout\n 学生管理系统 endl;cout1. 添加学生endl;cout2. 删除学生endl;cout3. 查找学生endl;cout4. 修改学生endl;cout5. 显示所有endl;cout6. 按成绩排序endl;cout7. 统计信息endl;cout0. 退出系统endl;coutendl;cout请选择: ;}voidclearInput(){cin.clear();cin.ignore(numeric_limitsstreamsize::max(),\n);}intmain(){StudentManager manager;intchoice;while(true){showMenu();cinchoice;if(cin.fail()){clearInput();cout无效输入endl;continue;}switch(choice){case1:{intid,age;string name;doublescore;cout输入学号: ;cinid;cout输入姓名: ;cinname;cout输入年龄: ;cinage;cout输入成绩: ;cinscore;manager.addStudent(id,name,age,score);break;}case2:{intid;cout输入要删除的学号: ;cinid;manager.removeStudent(id);break;}case3:{intid;cout输入要查找的学号: ;cinid;autostudentmanager.findById(id);if(student.has_value()){(*student)-display();}else{cout未找到endl;}break;}case4:{intid,age;string name;doublescore;cout输入学号: ;cinid;cout输入新姓名: ;cinname;cout输入新年龄: ;cinage;cout输入新成绩: ;cinscore;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(autotopmanager.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: C11/14/17、多线程 Week 5: 实战 Day 20: 综合项目5. 下一步行动1. 复习20天的内容确保理解 2. 完成每天的练习题 3. 动手实现综合项目 4. 选择一个感兴趣的方向深入 5. 持续练习多写代码 恭喜你完成20天C学习编程是一项需要不断练习的技能。学完这20天只是开始真正的成长来自于持续的实践和项目经验。祝你在C的道路上越走越远全系列完结

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询