大一下暑期计划 + 2023字节青训营预告直播

目录

🌼前言

🌹后端学习方法

🌳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 declared
		void 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/36224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Windows 10中创建引导到UEFI固件设置的快捷方式

大多数计算机都有一个特定的键,当计算机启动时按下该键,用户可以访问UEFI(固件)设置。然而,我们经常在错过给定的时间段时按键太晚,因为笔记本电脑默认情况下只需等待几秒钟就可以启动到 Windows。 另一个引导到 UEFI 设置的选项是重新启动到高级启动选项,然后从那里开…

在linux中安装HAProxy

使用xfrp将压缩包上传到linux的opt目录下 1.解压HAProxy安装包 tar -zxvf haproxy-1.8.12.tar.gz 2. 查看点钱的内核及版本: uname -r 3. 根据内核版本选择编译参数 cd haproxy-1.8.12 cat README 4. 编译安装HAProxy make TARGETlinux2628 ARCHx86_64 PREFIX/usr/local…

Stable Diffusion - 超分辨率插件 StableSR v2 (768x768) 配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131582734 论文&#xff1a;Exploiting Diffusion Prior for Real-World Image Super-Resolution StableSR 算法提出了一种新颖的方法&#xff0…

5、加载3dtileset模型并定位到模型

这一节使用CCesium加载3dtiles模型&#xff0c;3dtiles模型使用ceisum官网示例中的模型&#xff0c;加载3dtiles功能目前只能添加没有压缩的模型&#xff0c;draco或其他解压缩功能没有写。 1、在上一个例子的基础上&#xff0c;将鼠标事件改成右键的鼠标事件Cesium::ScreenSp…

【Web3】认识Web3

Web3是一种用于描述下一代互联网的概念 它指在构建一个去中心化 用户控制和加密安全的网络环境。 Web3的目标是将权利和数据掌握回归到用户手中 通过采用分布式技术和加密货币的支持 实现更加开放 公开和透明的互联网 Web的主要特点 去中化&#xff1a;Web3的核销理念是去中心…

【MySQL数据库】MMM高可用架构

目录 一 、MMM简介1.1MMM&#xff08;Master-Master replication manager for MvSQL&#xff0c;MySQL主主复制管理器&#xff09;1.2关于 MMM 高可用架构的说明如下 二、搭建mysql MMM架构2.1实验环境2.2搭建多主多从2.3安装配置 MySQL-MMM 一 、MMM简介 1.1MMM&#xff08;M…

安装Node.js和创建Vue-cli工程

NodeJs中文网&#xff1a;下载 | Node.js (nodejs.org) 注意事项&#xff1a; 最好下载Node16版本&#xff0c;除非你后续使用的Vue-cli版本比较高&#xff0c;像我使用的Vue-cli3和4.1.1版本去创建工程&#xff0c;然后run运行会报错Error: error:0308010C:digital envelope …

CClink IE转Modbus TCP网关连接三菱FX5U PLC

远创智控YC-CCLKIE-TCP 是自主研发的一款 CCLINK IE FIELD BASIC 从站功能的通讯网关。该产品主要功能是将各种 MODBUS-TCP 设备接入到 CCLINK IE FIELD BASIC 网络中。 远创智控YC-CCLKIE-TCP网关连接到 CCLINK IE FIELD BASIC 总线中做为从站使用&#xff0c;连接到 MODBUS-T…

uni-app 从零开始第二章:hello world

一、新建项目 选择 默认模板&#xff0c;填写项目名&#xff0c;然后点击创建&#xff0c;我这里选择的是 vue3&#xff0c;大家自行选择&#xff0c;默认是2 二、 运行项目到各个平台 注意&#xff0c;这里需要提前开启 微信开发者工具的端口 同样的&#xff0c;需要将mumu模…

将迷你世界的蓝图导出成表格

将迷你世界的蓝图导出成表格 使用方法为编译此代码&#xff0c;然后将游戏存档的vbp文件拖入编译出的exe上即可导出csv文件 #include<iostream> #include<Windows.h> #include<direct.h> #include<io.h> using namespace std; #define N_L 4 //这个改…

【大数据技术】hive 窗口函数sum range between的详细介绍

【大数据技术】hive 窗口函数sum range between的详细介绍 数据准备 建表 create table range_test( name string, month int , sales int ) row format delimited fields terminated by "," ;插入数据 load data local inpath "/home/xx/test/1.t…

CentOS环境下的Nginx安装

Nginx 安装 下载 nginx 下载地址&#xff1a;http://nginx.org/en/download.html 将下载好的压缩包拷贝到根目录下 通过xshell如果出现 bash: rz: 未找到命令 &#xff0c;需要先运行下面的命令 yum -y install lrzsz安装 解压到当前目录 tar -zxvf nginx-1.22.1.tar.gz安…

qt对话框

完善文本编辑器 #include "second.h" #include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second) {ui->setupUi(this);this->setWindowTitle("聊天室界面");//设置标题this->setWindowIcon(QIcon(&…

SpringBoot 如何使用 @ControllerAdvice 注解进行全局异常处理

在 Spring Boot 应用中&#xff0c;异常处理是非常重要的一部分&#xff0c;它可以帮助我们捕获并处理应用程序中出现的异常情况&#xff0c;提高应用程序的健壮性和可靠性。在 Spring Boot 中&#xff0c;我们可以使用 ControllerAdvice 注解来实现全局异常处理。本文将介绍 C…

Java链式编程与Builder(建造者)设计模式

一、链式编程 1.1.释义 链式编程&#xff0c;也叫级联式编程&#xff0c;调用对象的函数时返回一个this对象指向对象本身&#xff0c;达到链式效果&#xff0c;可以级联调用。 1.2.特点 可以通过一个方法调用多个方法&#xff0c;将多个方法调用链接起来&#xff0c;形成一…

若隐若现的芯片

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>若隐若现的芯片</title><script src"https://unpkg.co/gsap3/dist/gsap.min.js">…

Selenium基础 — Selenium自动化测试框架介绍

1、什么是selenium Selenium是一个用于Web应用程序测试的工具。只要在测试用例中把预期的用户行为与结果都描述出来&#xff0c;我们就得到了一个可以自动化运行的功能测试套件。Selenium测试套件直接运行在浏览器中&#xff0c;就像真正的用户在操作浏览器一样。Selenium也是…

我的创作纪念日兼GPT模型简单介绍

目录 一、引言 二、收获与开端 2.1 问题&#xff1a;在创作的过程中都有哪些收获&#xff1f; 2.2 模型开端 三、日常与深入 3.1 问题&#xff1a;当前创作和你的学习是什么样的关系&#xff1f; 3.2 模型深入介绍 3.2.1 无监督预训练 3.2.2 有监督下游任务精调 四、…

多元回归预测 | Matlab灰狼算法(GWO)优化极限梯度提升树XGBoost回归预测,GWO-XGBoost回归预测模型,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab灰狼算法(GWO)优化极限梯度提升树XGBoost回归预测,GWO-XGBoost回归预测模型,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源…

2023MWC精彩回顾 | 未来数字世界中的社交,游戏与娱乐

6月28日至6月30日&#xff0c;由GSMA主办的2023 MWC 上海世界移动通信大会&#xff08;简称“MWC 上海”&#xff09;启幕。「Paraverse平行云」参与组织并主持了本次大会中【未来数字世界中的社交&#xff0c;游戏与娱乐】的主题会议。 「Paraverse平行云」携手上海交通大学、…