目录
🌼前言
🌹后端学习方法
🌳1,层次
🌳2,体系
🌳3,算法和数据结构
🌳4,总结
🌹前端学习方法
🌳基础
🌹求职中如何弥补学历差距?
🌹项目经历怎么准备?
🎂简历如何写?
🎂0基础可以跟项目吗
🎂主修Java或者C++能不能参加青训营?
🍍大一下暑期计划
🚆C++学习路线
🌼前言
主要总结下短短1个小时直播中接受到的知识,由于不允许录播和转载,所以我会凭记忆同时借助Google,百度,掘金,CSDN,GPT4.0等工具,进行完善和解析
借助的工具如下👇
水平有限,权当大一下暑假开始前的路线修正和知识拓展
首先,是第六届青训营报名的网址前后端免费学 | 第六届字节跳动青训营报名啦 - 掘金 (juejin.cn)
其次,里面分前端和后端方向,都会有完整的路线和录播直播视频
前端就是html, css, js三大板块...
后端就是Go语言加上....
首先说下,最近一年,我的主要精力肯定都是给C++,408,数据库,竞赛和项目(面试考察内容)(408包括 数据结构与算法,计网,计组,操作系统)
为什么还参加和C++没什么关系的后端训练营呢(后端学Go嘛),因为里面讲的大多数东西,其实换一门语言,不管是Java,C++还是Rust等等,都是换汤不换药的,一样能实现,意思是,技能都是通用的,后端,从服务端出发,就是应用层,框架层,存储层等等,无非是语法和性能的“细微”差异
所以我参加第六届青训营的目的,还是借这个平台,完善一下做项目的通用知识,还有拓展知识面的目的,当然,如果时间充足,或者自己足够自律上进,也是可以挤出时间另外学Go的,甚至说,你最后不一定要用Go来实现这个组队项目(一般3~4人最好),你甚至可以用C++来实现,但是Go肯定比C++简单一些。。
下面,我会根据直播中字节在职前辈,资深HR们的真知灼见,加上自己的适当扩展,来解答一些疑惑,为今后学习和发展指明一点方向
🌹后端学习方法
🌳1,层次
从后端出发,比如服务端,分为几个层次
1,应用层,用自己的代码去开发和实现的一些逻辑
2,框架层,比如Java对应Spring
3,存储层,比如Mysql,Redis
4,操作系统层,比如Linux
5,硬件层
当我们在做应用层(上层)开发时,项目跑通后,我们需要考虑它在框架层是怎么运行的,在存储层(比如Mysql)以什么样的方式进行的(比如,数据在Mysql里以什么样的逻辑模型存储的)(比如B+树这样的模型,它的数据结构是怎样的)
(再深入一点,比如B+树在硬盘是怎么存储的)
👆当你了解完上面等等这些细节,再做索引优化就会如鱼得水,而不是不停地百度谷歌博客去查(搞清楚这些后,所有场景也就有了解决方案)
🌳2,体系
成体系的学习是怎样的呢,先说个反例,不建议一遇到个不会的就上百度,折腾个半小时一小时,是解决了,但这不是成体系的学习方法
那么什么是成体系的学习方法呢?
比如先看书。拿Mysql举例的话,比如遇到一个场景,然后到百度搜索了下,知道了怎么建索引,直接解决了当前问题(但是你并不了解它为什么要这么建,它下面的物理模型和逻辑模型是怎样的)
那么怎么办呢,此时你应该找一本还不错的书, 成体系地看一下
看完后,再去结合博客上,别人遇到的case,去印证别人是如何解决特定场景下的特定问题的
同时,这个解决方案对应着书上说的物理模型,逻辑模型或者各种策略,是如何应用的
通过先看书,再看技术博客去印证书上内容,结合实际开发遇到的问题场景的方法,你的知识体系就比较完善了
🌳3,算法和数据结构
算法和数据结构
首先,它贯穿应用层,框架层,存储层,操作系统以及硬件层
其次,它是大公司面试的必考项目(意思是,你现在就可以刷题啦~
我的打算是
1,利用2023/6月~9月大一下暑假,先自学完《算法训练营入门篇》这本570页的书,同时学完Acw蓝桥杯辅导课40小时的视频
完成上面2项后,意味着至少多刷了200道左右,类似洛谷普及- ~ 普及 ~ 普及+,这三个难度的题目,省选-里面应该不涉及,毕竟都是算法入门题目
(当然,时间充裕,可以把洛谷官方题单也给刷了,其中NOI-紫题或者省选-蓝题,可以不考虑,费时间太多,你现在需要的是全面系统的打基础外加刷题,蓝题紫题的难度,笔试一般页不会出那么难)
2,第二步,就是大二上,下两学期 + 大二寒暑假3个月,力扣刷掉hot100和剑指offer
能完成上面1,和2,也就意味着你无惧中小厂的算法笔试了,甚至能和面试官有来有回,谈笑风生
3,做了这么多算法,不得打点比赛,ACM我不打,有自知之明,一是没时间,本来就0基础,又比较愚钝,所以就打打CA蓝桥杯,天梯赛,PAT
4,总结:上面3步做的七七八八的话,就算既定目标没有完全实现,也能应付大多数中小厂的笔试了,大厂不好说,因为即使你笔试表现优异,全AC而且提出了优化的思路,也可能因为你的学历,项目的不足,被PASS掉
🌳4,总结
当你彻底搞懂一个东西后,需要总结,以便于日后的复盘
这时,写博客就派上用场了,可以记录在typora等软件上,也可以写在CSDN,掘金,博客园等平台上,还可以上传到自己的Github,英语好的还能与StackOverflow的大佬交流下
以上四步,层次 -> 体系 -> 算法和数据结构 ->总结,是比较完整的后端学习方法,剩下的,就是做好自己的本职了,都0基础了,每天专心学上五六小时是基本的
🌹前端学习方法
🌳基础
重点是三个基础语言的深入掌握,html, css, js,它们是一切前端项目的基石
围绕这三个语言,衍生出很多前端的工具,比如Vue,React....
有些人刚学了点语言,就想着直接冲Vue,这是不可取的,前期就应该扎扎实实学好基础,深入理解,html, css, js分别是用来做什么的,有哪些最佳实现,或者性能上如何优化,怎样更好地去维护.....
而且不论前端后端,初期肯定是枯燥,理论的,没法一下子做出一些东西,需要投入大量时间和精力去度过最开始的艰难。
补充
每个程序员,都要会调试,你要知道每一行代码执行完后会有什么结果,有助于你去理解程序
当然,会用Google以及梯子也是必备的
拿后端举例,本次青训营,会从语言开始(基础中的基础),结合数据结构,数据库,操作系统的一些知识(基础),最后讲讲HTTP等,最终实现一个项目
最后说一下,不论前端还是后端,技术深度比广度重要的多,一定要及早确定自己感兴趣的方向,建立核心竞争力(拿前端举例,你去实现PC端项目或者小程序的思路,包括技术栈都是完全不同的,放到求职也是一样,如果职位不匹配,就算能力强也是没法胜任的)
🌹求职中如何弥补学历差距?
要解答这个问题,我们首先要对症下药
首先,我们需要知道自己面试的公司,是哪类公司,即当下面试的两种大形势
第一类,面试时更注重你会不会使用某种框架(比如,你面试Java相关岗位,面试官稳了你很多关于Spring框架的问题,深入点的话,比如JVM)
第二类公司,面试时更看重你的基本功,上来就考察你算法和数据结构的功底,让你做一些笔试题目等等
两方面都是需要准备的,所以,面试心仪公司时,要及时复盘总结,根据面试公司的特点对症下药
🌹项目经历怎么准备?
先谈谈本次(2023暑期)青训营的大项目(8月底项目验收),参加青训营做项目的这个经历,可以锻炼你团队协作和沟通表达的能力,同时,给简历增添了一个比较优秀的项目
这里要更正一个误区,很多大一大二0基础的同学,可能想着抱大腿,这是不可取的。
因为最后面试时,肯定是看你在这个项目中负责那一块,用到了什么技术,怎么优化的,以及相关比较深入一点的细节问题,如果只想着抱大腿,面试时一问就露馅也是不行的
那么为什么不让自己成为大腿呢?自己加把劲,多花时间,戒掉不切实际的小说,游戏和短视频,每年多学1000个小时,最后自己成为大腿不香吗
🎂简历如何写?
这里也包括前端需要学什么,方法是,到各大公司的招聘官网去看,比如字节,京东,阿里,腾讯等等,根据里面的实习生 / 应届生 / 社招,以及研发(包括前端,后端,算法,大数据,安全,测试,运维...),运营,产品,销售等各大方向,然后针对性的查看招聘要求,给自己后续的学习定好方向
看多了招聘要求,你就知道自己简历需要写什么,自己需要学什么才能胜任这个岗位呢?
以下👇是各大公司招聘官网的链接,需要自取
百度 / 字节 / 京东 / 小米 / 华为 / 拼多多 / 网易 / 美团 / 快手 / 新浪 / 知乎 / 陌陌 / 爱奇艺 / 虎牙 / Bli / 滴滴 / 苏宁 / 巨人网络 / 迅雷 / 房天下 / IBM / 中兴
还有之前广泛参考BOSS直聘,实习僧等APP的一些总结👇
(2条消息) 50家公司Java,C++招聘要求_千帐灯无此声的博客-CSDN博客
结合今晚直播资深HR和字节在职员工的分析,以后面试招聘中,更有优势的往往是“一专多能”的人,而不是面面俱到又都只知皮毛的人。
拿前端举例,你vue学的很好,其他的html,css等只是会用,但是没有花费大量时间去精通,那么你面试包括今后2~5年的工作中,就比那些什么都只会一点的人强。
别人会的东西比你全面,但是没有一个是深入挖掘学习过的,你在DEBUG时比他们更快,这就是优势
🎂0基础可以跟项目吗
首先需要明确的是,可以跟,只要你在暑假或者别的什么时间,用心去学,就算慢一点,总好过你学完所有东西后(408,数据库,一门语言,框架....)再开始接触第一个项目,效率极其低下不说,还不容易建立自信心
要知道,初学者,如果不看教程,单凭自己,一开始是很难自创一个可以跑通的项目的,里面有很多你不懂的前置知识,一些库的使用等等,这时你需要去模仿B站,Github,博客里的,附带说明手册,编码风格良好,好评如潮的项目。
从模仿开始,到自己修改,最后甚至在类似需求下,自己完整搞定一个项目,然后慢慢多尝试点别的有新意,有实际意义的项目,自信心积累起来了,也为后续阅读更深入得书籍打下了基础
由于我打算花一年时间专心学C++,以下是关于C++学习的一些博客
1,小白 C++ 入门并发疯学习路线(书单) - 掘金 (juejin.cn)
2,(2条消息) C++从入门到进阶的系列书籍推荐_c++书籍推荐_dvlinker的博客-CSDN博客
3,(2条消息) C/C++学习路线总结与分享_dvlinker的博客-CSDN博客
4,C++学习路线 (github.com)
5,没人带怎么办,零基础C++入门自学指引 - 知乎 (zhihu.com)
更推荐一专多能,以下是做一个大的项目涉及到的工具和流程👇作为参考
完成一个项目为什么需要这么多技术点,项目是怎么一步步变复杂的,练手项目和真实项目区别为什么这么大_哔哩哔哩_bilibili
🎂主修Java或者C++能不能参加青训营?
后端举例,因为用的是Go,很多人会犹疑不定,怕浪费时间在Go上,而影响了C++或Java的学习。
首先,这个没必要担忧,因为参加青训营,大多数人想的肯定是,通过这次为期2个月的活动,最终与小组一起,完成一个项目,通过自己负责那部分的编写,锻炼的自己编码的能力,也巩固了刚学的技术和语法,并且增强了未来求职的自信心,同时丰富了简历。
说到这,其实你可以花一点时间学习下Go的语法,因为做项目除了Go外,其他大多数都是通用知识或者说技能,举例就是,这个项目中涉及到的HTTP的知识,你在下一个项目还是能用到,所以时间不会白花
做一个稍微大点的项目,本身就很锻炼人,总比你写那些不到1000行的旅馆住宿系统,计算器或者飞机大战复杂一些
从很长一段工作时间出发,你用什么语言实现一个功能,不是关键点,而且当你熟悉甚至精通一门语言,转其他语言也能很快上手。
而且,就课程本身来说,除了一开始花了一点时间学习Go的语法外,后面更多是深入一些的中间件的知识,就像一些微服务的知识,或者数据库的知识。
所以说,就应用层的开发来说,语言是什么并不重要。
拿直播中资深HR的经历来说,他的上一份工作是Java,但是面试字节时,面试官并没有考Go,更多问的是数据库,操作系统,数据结构....
所以平时学习中,我们更应关注基础能力,至于语言,只要会用,能用好(比如你学C++,遇到一个项目,各种各样的实现中,哪一种效率最高?)
再说说,有同学担心自己只学过C / C++,参加Go的课程担心跟不上或者浪费时间,其实这点很好,因为很多底层实现都是通过C / C++的,比如Mysql是通过C++实现的,Linux是通过C实现的
参加这个活动,更多是编程思维的养成和基础知识的积累(这在做项目上是通用的)
补充
许多软件和系统的基础架构都是使用C++开发的,比如:
操作系统,Web浏览器,游戏引擎,数据库管理系统,媒体播放器...
这些系统和软件的基础架构可能还包含其他语言的组件和模块,但在底层核心层面,C++通常被用来进行高性能的计算和资源管理
🍍大一下暑期计划
2023/7月 ~ 2023年9月(2个月时间)
1,C++
暑期通过
黑马C++,314个视频(2023/6/21截止,已经跟到第156个)+ B站2~3个小项目(飞机大战,俄罗斯方块,计算器)+ 《Essential C++》
后续学习
有了一点基础后,你需要成体系地去学习进阶的书以及Github开源项目了....具体参考链接
2,Mysql
暑期通过
黑马Mysql的30小时视频 + 《Mysql必知必会》,这是暑期入门部分,
后续借助
Mysql实战45讲(丁奇)+ 《MySQL技术内幕:InnoDB存储引擎》 + 牛客数据库1000题
作为进阶的学习,完成上述5个部分内容,面试考到数据库也就成竹在胸了
3,算法和数据结构
暑期通过
570页的《算法训练营入门篇》 + Acw蓝桥杯辅导课40小时视频来完善知识体系
这2部分完成,会多积累200道提高-,加上2023/6/21之前的100道普及-,也就达到了300题的量,300题拿个蓝桥杯CA省二不过分吧.....如果能在此基础上,再把洛谷官方题单省选-以下的题刷了,也就是蓝题之前,省一不过分把......
后续刷题
完成上面书籍,视频和刷题后,你的基础算法已经足以应付部分中小厂的笔试了,但是还不够,你是想
(1)蓝桥杯CA国三,(2)天梯赛个人国三,(3)PAT甲级60分,(4)面试笔试
这就需要你在pintia上,按着甲级满分或者乙级满分大佬的攻略,完整刷一次需要的部分,
比如15~25分刷上100题先,以应对将来的天梯赛和PAT
再说笔试部分,力扣的hot100 +《剑指offer》不得拿下.....道阻且长...道阻且长....
4,Linux
.....
5,计网
......
当前进度,期末最后半个月,只能抽一半时间学习,剩下一半时间被期末试绑架了...
优先级是:
《算法训练营》 > C++黑马 > Mysql黑马
至于《Essential C++》1~2周就能过一遍代码和书
至于《Mysql必知必会》也是1~2周每天2小时的事
至于Acw蓝桥杯40小时,这个排在优先级最后,一个是确实花时间,一个视频2小时附带2~3题;一个是大二后续可以慢慢刷,非朝夕能完成的
放个彩蛋
大一下C++期末大作业应该能用到,C++旅馆住宿管理系统,彩色欢迎界面和文字,当然,很多功能不全,而且很多BUG,上个月用GPT结合网上一些博客做出来的,就花了2小时,后面懒得费时间就没改BUG和增加功能模块了,700行代码有需要自取👇
//账号为2022
//密码为123
#include<iostream>
#include<cstdlib>
#include<windows.h> //DOS命令, 用函数修改字体颜色
#include<cstring>
using namespace std;
int i=0;
//定义结构体,包含房间号,类型,价格,状态
struct Room {int number;int rad;int price;int state;
};
//定义类Customer, 包含姓名,身份证,房间号,预付费用,天数和退房费用
class Customer {public:Customer(); //构造函数void set_name(char *n) { //设置姓名strcpy(name,n);}void set_ID(char *p) { //设置身份证号strcpy(ID,p);}void set_room_number(int n) { //设置所订房间号room_number=n;}void set_day(int d) { //设置入住天数day=d;}void set_prepaid(int p) { //预付费用prepaid=p;}char *get_name() { //获取姓名return name;}char *get_ID() { //身份证return ID;}int get_room_number() { //房间号return room_number;}int get_day() {//天数return day;}int get_prepaid() { //预付费用return prepaid;}virtual ~Customer();private:char name[10],ID[19]; //姓名和身份证int room_number; //房间int prepaid; //预付int change;int day;
};
//顾客构造函数, 用于输入用户信息
Customer::Customer() {//构造函数cout<<"请输入姓名"<<endl;cin>>name;cout<<"请输入身份证"<<endl;cin>>ID;prepaid=day=0;
}
//顾客析构函数,输出退房成功信息
Customer::~Customer() {//析构函数cout<<"您退房成功!"<<endl;
}
//全局变量room, customer,存储房间和顾客信息
Room room[141];
Customer *customer[141];
//定义类function
class function
{public:void initial_room(); //初始化房间void welcome(); //欢迎界面void menu(); //菜单void book_room(); //预定房间void go_in(); //入住void go_out(); //退房void inquire(); //查询void out(); //无操作
};//登陆
void function::welcome() {system("color E4");char name[4],pass[7];cout<<"请输入用户名: "<<endl;cin>>name;cout<<"请输入密码: "<<endl;cin>>pass;while((strcmp(name,"2022")!=0)||(strcmp(pass,"123")!=0)) {system("cls");cout<<"用户名或密码输入有误, 请重新输入!"<<endl<<endl<<endl;cout<<"请输入用户名:"<<endl;cin>>name;cout<<"请输入密码:"<<endl;cin>>pass;}cout<<endl;cout<<" ╮(╯▽╰)╭"<<endl<<endl;cout<<" ╮(╯▽╰)╭"<<endl<<endl;cout<<" <(@Д=)/~"<<endl;cout<<endl;cout<<" ----------------------------"<<endl;cout<<" *** 欢迎使用旅馆住宿管理系统 ***"<<endl;cout<<" ----------------------------"<<endl<<endl<<endl<<endl;cout<<" ^-^ ^-^"<<endl;cout<<" / \\ _ / \\"<<endl;cout<<" |_ _☉ ☉_ _|"<<endl;cout<<endl<<endl<<endl;cout<<" o(^ε^)o"<<endl;system("pause");system("cls");
}
void function::menu() {system("cls");function n;char x;cout<<"\t\t\t\t\t请按数字键并回车: "<<endl;cout<<" \t\t\t\t *** 1.预定 *** 2.入住 ***"<<endl;cout<<" \t\t\t\t *** 3.退房 *** 4.查询 ***"<<endl;cout<<" \t\t\t\t *** 5.退出 *** \t"<<endl;cin>>x;switch(x) {case '1':n.book_room();system("pause");system("cls");break;case '2':n.go_in();system("pause");system("cls");break;case '3':n.go_out();system("pause");system("cls");break;case '4':n.inquire();system("pause");system("cls");break;case '5':n.out();break;default:cout<<"输入有误,请重新输入"<<endl;cin>>x;}
}
//订房
void function::book_room() {customer[i]=new Customer;int room_kind,day;cout<<"请您选择预定房间类型:\n";cout<<"1.单间/250元\n\n2.电脑单间/270元\n\n3.双人房/300元\n\n4.电竞双人房/400元\n\n5.豪华单间/330元\n\n6.豪华双人房/450元\n\n7.总统套房/20,000元\n"<<endl;cin>>room_kind;cout<<"请输入预定天数"<<endl;cin>>day;customer[i]->set_day(day);switch(room_kind) {int n;case 1:cout<<"住房费用总共为: "<<day * 250<<"元"<<endl;for(n=0; n<20; n++) { //从第一个级别的房间中查找一个空闲的房间if(room[n].state==0) { //state=0表示该住房没有被预定的cout<<"预定成功 房间号码为: "<<room[n].number<<endl;room[n].state=1;customer[i]->set_room_number(room[n].number);break;}}break;case 2:cout<<"住房费用总共为: "<<day * 270<<" 元"<<endl;for(n=20; n<40; n++) {if(room[n].state==0) {cout<<"预定成功 房间号码为: "<<room[n].number<<endl;room[n].state=1;customer[i]->set_room_number(room[n].number);break;}}break;case 3: {cout<<"住房费用总共为: "<<day*300<<" 元"<<endl;for(n=40; n<60; n++) {if(room[n].state==0) {cout<<"预订成功 房间号码为: "<<room[n].number<<endl;room[n].state=1;customer[i]->set_room_number(room[n].number);break;}}break;}case 4: {cout<<"住房费用总共为: "<<day*400<<" 元"<<endl;for(n=60; n<80; n++) {if(room[n].state==0) {cout<<"预订成功 房间号码为: "<<room[n].number<<endl;room[n].state=1;customer[i]->set_room_number(room[n].number);break;}}break;}case 5: {cout<<"住房费用总共为: "<<day*330<<" 元"<<endl;for(n=80; n<100; n++) {if(room[n].state==0) {cout<<"预订成功 房间号码为: "<<room[n].number<<endl;room[n].state=1;customer[i]->set_room_number(room[n].number);break;}}break;}case 6: {cout<<"住房费用总共为: "<<day*450<<" 元"<<endl;for(n=100; n<120; n++) {if(room[n].state==0) {cout<<"预订成功 房间号码为: "<<room[n].number<<endl;room[n].state=1;customer[i]->set_room_number(room[n].number);break;}}break;}case 7: {cout<<"住房费用总共为: "<<day*20000<<" 元"<<endl;for(n=120; n<140; n++) {if(room[n].state==0) {cout<<"预订成功 房间号码为: "<<room[n].number<<endl;room[n].state=1;customer[i]->set_room_number(room[n].number);break;}}break;}default:cout<<"选择有误"<<endl;break;}i++; //住房的顾客数加1
}
//入住
void function::go_in() {char name1[10],id1[19];int q,prepaid;cout<<"该顾客是否已订房 (1. 已订 2. 没订) "<<endl;cin>>q;if(q==1) {cout<<"请输入顾客的姓名:"<<endl;cin>>name1;cout<<"请输入顾客的身份证号码:"<<endl;cin>>id1;void color(int code); //声明函数, 否则报错color() was not declaredvoid SetPos(int x,int y);SetPos(13, 15);color(1212);//更改字体颜色,下同cout<<endl<<endl<<endl<<endl<<endl<<"这里有个功能不是很完善,如果顾客输入错误的姓名或者身份证号码,会死机"<<endl<<endl<<endl;//i:顾客人数for(int j=0; j<=i; j++) {if((strcmp(customer[j]->get_name(),name1)==0)&&(strcmp(customer[j]->get_ID(),id1)==0)) {int num=customer[j]->get_room_number();color(9);cout<<"**顾客** "<<name1<<"** 入住 房间号码为: **"<<num<<"**"<<endl<<endl;switch(num/100) {case 6:prepaid=customer[j]->get_day()*100;customer[j]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;room[num%100-1].state=2; //修改房间状态为入住状态break;case 7:prepaid=customer[j]->get_day()*200;customer[j]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;room[19+num%100].state=2;break;case 8:prepaid=customer[j]->get_day()*300;customer[j]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;room[39+num%100].state=2;break;}break;}}} else {customer[i]=new Customer;int roomkind;int day;cout<<"请输入要预定的房间:"<<endl;cout<<"1.单间/250元\n\n2.电脑单间/270元\n\n3.双人房/300元\n\n4.电竞双人房/400元\n\n5.豪华单间/330元\n\n6.豪华双人房/450元\n\n7.总统套房/20,000元\n"<<endl;cin>>roomkind;cout<<"请输入住宿天数:"<<endl;cin>>day;customer[i]->set_day(day);switch(roomkind) {int n;case 1:prepaid=day*250;customer[i]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;for(n=0; n<20; n++) {if(room[n].state==0) {cout<<"入住房间号码为: "<<room[n].number<<endl;room[n].state=2;customer[i]->set_room_number(room[n].number);break;}}break;case 2:prepaid=day*270;customer[i]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;for(n=20; n<40; n++) {if(room[n].state==0) {cout<<"入住房间号为: "<<room[n].number<<endl;room[n].state=2;customer[i]->set_room_number(room[n].number);break;}}break;case 3:prepaid=day*330;customer[i]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;for(n=40; n<60; n++) {if(room[n].state==0) {cout<<"入住房间号为: "<<room[n].number<<endl;room[n].state=2;customer[i]->set_room_number(room[n].number);break;}}break;case 4:prepaid=day*400;customer[i]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;for(n=60; n<80; n++) {if(room[n].state==0) {cout<<"入住房间号码为: "<<room[n].number<<endl;room[n].state=2;customer[i]->set_room_number(room[n].number);break;}}break;case 5:prepaid=day*330;customer[i]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;for(n=80; n<100; n++) {if(room[n].state==0) {cout<<"入住房间号码为: "<<room[n].number<<endl;room[n].state=2;customer[i]->set_room_number(room[n].number);break;}}break;case 6:prepaid=day*450;customer[i]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;for(n=100; n<120; n++) {if(room[n].state==0) {cout<<"入住房间号码为: "<<room[n].number<<endl;room[n].state=2;customer[i]->set_room_number(room[n].number);break;}}break;case 7:prepaid=day*20000;customer[i]->set_prepaid(prepaid);cout<<"请收费用 "<<prepaid<<"元"<<endl;for(n=120; n<140; n++) {if(room[n].state==0) {cout<<"入住房间号码为: "<<room[n].number<<endl;room[n].state=2;customer[i]->set_room_number(room[n].number);break;}}break;}i++;}
}
//退房
void function::go_out() {char name2[10],id2[19]; //定义姓名和身份证号码数组int room_number; //房间号int day;//实际住房天数cout<<"请输入要退房的顾客姓名和身份证号码:"<<endl;cin>>name2; //输入姓名cin>>id2; //输入身份证号码cout<<"请输入该顾客实际所住天数:"<<endl;int day2;cin>>day2; //输入实际住房天数int j;for(j=0; j<i; j++) { //遍历记录顾客信息的数组if((strcmp(customer[j]->get_name(),name2)==0)&&(strcmp(customer[j]->get_ID(),id2)==0)) {room_number=customer[j]->get_room_number(); //获取房间号int w;w=room_number/100; //获取房间类型int day1;day1=customer[j]->get_day(); //获取预定住房时间day=day1-day2;switch(w) {case 1:cout<<"顾客的房间号是"<<room_number<<" :为单人间,每天250元"<<endl;cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"元, 实际消费 "<<day2*250<<"元"<<endl;cout<<endl;if(day>0)cout<<"请退给该顾客 "<<day*250<<" 元"<<endl;if(day<0)cout<<"请补收该顾客住房费 "<<-day*250<<" 元"<<endl;break;case 2:cout<<"顾客的房间号是"<<room_number<<" :为双人间,每天270元"<<endl;cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"元, 实际消费 "<<day2*270<<"元"<<endl;cout<<endl;if(day>0)cout<<"请退给该顾客 "<<day*270<<" 元"<<endl;if(day<0)cout<<"请补收该顾客住房费 "<<-day*270<<" 元"<<endl;break;case 3:cout<<"顾客的房间号是"<<room_number<<" :为标准间,每天330元"<<endl;cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"元, 实际消费 "<<day2*330<<"元"<<endl;cout<<endl;if(day>0)cout<<"请退给该顾客 "<<day*330<<" 元"<<endl;if(day<0)cout<<"请补收该顾客住房费 "<<-day*330<<" 元"<<endl;break;case 4:cout<<"顾客的房间号是"<<room_number<<" :为单人间,每天400元"<<endl;cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"元, 实际消费 "<<day2*400<<"元"<<endl;cout<<endl;if(day>0)cout<<"请退给该顾客 "<<day*400<<" 元"<<endl;if(day<0)cout<<"请补收该顾客住房费 "<<-day*400<<" 元"<<endl;break;case 5:cout<<"顾客的房间号是"<<room_number<<" :为双人间,每天330元"<<endl;cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"元, 实际消费 "<<day2*330<<"元"<<endl;cout<<endl;if(day>0)cout<<"请退给该顾客 "<<day*330<<" 元"<<endl;if(day<0)cout<<"请补收该顾客住房费 "<<-day*330<<" 元"<<endl;break;case 6:cout<<"顾客的房间号是"<<room_number<<" :为标准间,每天450元"<<endl;cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"元, 实际消费 "<<day2*450<<"元"<<endl;cout<<endl;if(day>0)cout<<"请退给该顾客 "<<day*450<<" 元"<<endl;if(day<0)cout<<"请补收该顾客住房费 "<<-day*450<<" 元"<<endl;break;case 7:cout<<"顾客的房间号是"<<room_number<<" :为标准间,每天2000元"<<endl;cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"元, 实际消费 "<<day2*2000<<"元"<<endl;cout<<endl;if(day>0)cout<<"请退给该顾客 "<<day*2000<<" 元"<<endl;if(day<0)cout<<"请补收该顾客住房费 "<<-day*2000<<" 元"<<endl;break;}cout<<endl;cout<<"确认退房,请按1: "<<endl;char v;cin>>v;if(v=='1') {for(int k=0; k<140; k++) {if(room[k].number==customer[j]->get_room_number())room[k].state=0;}i--;for(; j<i; j++) {customer[j]=customer[j+1];}delete customer[i];cout<<"欢迎下次一起睡觉!"<<endl;}}else{cout<<"无此顾客信息"<<endl;break;}}
}
//查询
void function::inquire() {char option;cout<<"1.房间信息查询, 2.顾客信息查询: "<<endl;cin>>option; //输入选项if(option=='1') { //查询房间信息int j;int k=0;cout<<endl;cout<<"空房间:"<<endl; //输出空房间信息for(j=0; j<140; j++) {if(room[j].state==0) { //未预定if(k%10==0) cout<<endl;//一行十个,方便查看cout<<room[j].number<<'\t'; //输出房间号k++;}}cout<<endl;cout<<endl;k=0;cout<<"已预订房间:"<<endl;for(j=0; j<140; j++) {if(room[j].state==1) { //已预定if(k%10==0) cout<<endl;cout<<room[j].number<<'\t';k++;}}k=0;cout<<endl;cout<<endl;cout<<"已入住房间:"<<endl;for(j=0; j<140; j++) {if(room[j].state==2) { //已入住if(k%10==0) cout<<endl;cout<<room[j].number<<'\t';k++;}}cout<<endl;cout<<endl;} else if(option=='2') {cout<<"1.按姓名查询, 2.按身份证查询: "<<endl;char option;cin>>option; //输入选项if(option=='1') {char name3[10];cout<<"请输入顾客的姓名: ";cin>>name3;for(int j=0; j<=i; j++) {if(strcmp(customer[j]->get_name(),name3)==0) { //找到顾客信息cout<<name3<<"的信息如下:"<<endl;cout<<"\t"<<"房间号: "<<customer[j]->get_room_number()<<endl;cout<<"\t"<<"预付费用: "<<customer[j]->get_prepaid()<<endl;break;}else //未找到该顾客{cout<<"无此顾客信息"<<endl;break;}}}if(option=='2') { //按身份证查询char id3[10];cout<<"请输入顾客的身份证号码: "<<endl;cin>>id3;for(int j=0; j<=i; j++) {if(strcmp(customer[j]->get_ID(),id3)==0) {cout<<customer[j]->get_name()<<"的房间信息:"<<endl;cout<<"\t"<<"房间号: "<<customer[j]->get_room_number()<<endl;cout<<"\t"<<"预付房费: "<<customer[j]->get_prepaid()<<endl;break;}else{cout<<"无此顾客信息"<<endl;break;}}}}
}
//初始化
void function::initial_room() {int j;int k=101;for(j=0; j<20; j++) {room[j].number=k++;room[j].rad=1;room[j].price=250;room[j].state=0; //前20个房间设置为101~120}k=201;for(j=20; j<40; j++) {room[j].number=k++;room[j].rad=2;room[j].price=270;room[j].state=0;}k=301;for(j=40; j<60; j++) {room[j].number=k++;room[j].rad=3;room[j].price=330;room[j].state=0;}k=401;for(j=60; j<80; j++) {room[j].number=k++;room[j].rad=4;room[j].price=400;room[j].state=0; //前20个房间设置为101~120}k=501;for(j=80; j<100; j++) {room[j].number=k++;room[j].rad=5;room[j].price=330;room[j].state=0;}k=601;for(j=100; j<120; j++) {room[j].number=k++;room[j].rad=6;room[j].price=450;room[j].state=0;}k=701;for(j=120; j<140; j++) {room[j].number=k++;room[j].rad=7;room[j].price=20000;room[j].state=0;}
}
//不操作的话,就返回
void function::out()
{return;
}int color(int c)//颜色函数,更改字体颜色
{//根据传入的参数c设置字体颜色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);return 0;
}void SetPos(int x,int y)//定位函数,定位在终端中的位置
{COORD pos={x,y};HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);//获取句柄SetConsoleCursorPosition(hout,pos);
}void welcome()//欢迎界面
{SetPos(22,9);//定位,下同color(3);//更改字体颜色,下同printf("风里雨里, 麻绳等你");SetPos(35,12);color(4);printf("入住一晚只要250¥");SetPos(32,14);color(7);printf("命重要, 先睡觉吧");SetPos(58,18);color(10);printf("杂牌1号宿舍管理系统\n");SetPos(55,8);color(9);printf("求求你别卷了(T_T)");SetPos(55,25);system("pause");//DOS命令,按任意键继续
}int main() {welcome();system("cls");char choice='1';function m;m.initial_room(); //初始化60个房间m.welcome();//验证while(choice=='1') {m.menu();//功能cout<<endl;cout<<"1. 继续操作 2. 退出系统 "<<endl;cin>>choice;cout<<endl;}
}
🚆C++学习路线
(文章中间有这部分内容,为了方便检索,复制到最后)
由于我打算花一年时间专心学C++,以下是关于C++学习的一些博客
1,小白 C++ 入门并发疯学习路线(书单) - 掘金 (juejin.cn)
2,(2条消息) C++从入门到进阶的系列书籍推荐_c++书籍推荐_dvlinker的博客-CSDN博客
3,(2条消息) C/C++学习路线总结与分享_dvlinker的博客-CSDN博客
4,C++学习路线 (github.com)
5,没人带怎么办,零基础C++入门自学指引 - 知乎 (zhihu.com)
更推荐一专多能,以下是做一个大的项目涉及到的工具和流程👇作为参考
完成一个项目为什么需要这么多技术点,项目是怎么一步步变复杂的,练手项目和真实项目区别为什么这么大_哔哩哔哩_bilibili