当前位置: 首页 > news >正文

vue项目实现会议预约(包含某天的某个时间段和某月的某几天)

一、一天的时间段预约

在这里插入图片描述

会议预约有以下操作:
1.点击预约按钮,弹窗最近一周的预约时间点(半小时一个点),预约时间为5:00到24:00;
2.超过当前时间的时间点不允许再预约,已经预约的时间不允许再预约,预约的时间段内有已经预约的时间点不允许预约;
3.预约时间为时间段,所以最少包含两个时间点,选中两个时间点时,两个时间点被选中,若两个时间点内有其他时间点,其他时间点也要被选中;
4.已经选中的时间点再次点击时,取消选中,

html部分

<el-dialog title="预约"  :visible.sync="isAppoint" width="40%" :before-close="closeAppoint"><el-form label-width="120px" :model="appointForm"><div style="margin:20px;"><div style="display:flex;justify-content:space-between;"><span v-for="(item,index) in week" :key="index" :class="{'top_style':item.is_active==0,'top_active':item.is_active==1}" @click="changWeek(item,index)"><div style="height:25px;line-height:20px;">{{item.month}}-{{item.date}}</div><div style="height:25px;line-height:20px;">{{item.day}}</div></span></div><div style="display:flex;margin:20px 50px;font-size:18px;justify-content:space-between;"><div style="display:flex;"><div style="background-color:#C8C9CC;width:40px;height:20px;margin-right:10px;"></div><div>不可预约</div></div><div style="display:flex;"><div style="background-color:#ffa4a4;width:40px;height:20px;margin-right:10px;"></div><div>已有预约</div></div><div style="display:flex;"><div style="background-color:#3EA7F1;width:40px;height:20px;margin-right:10px;"></div><div>当前预约</div></div></div><div style="margin:20px 50px;height:250px" class="button_wrap"><el-button v-for="(item,index) in timeArr" :key="index" @click="changTime(item,index)" :type="item.status==0?'':item.status==1?'danger':item.status==2?'info':'primary'" :disabled="item.status==1||item.status==2" class="button_style">{{item.time}}</el-button></div></div><el-row :gutter="20"><el-col :span="18"><el-form-item label="备注:"><el-input placeholder="请输入" v-model="remark" clearable></el-input></el-form-item></el-col></el-row></el-form><div slot="footer" class="dialog-footer" ><el-button @click="closeAppoint">取消</el-button><el-button type="primary" @click="saveAppoint" style="margin-left:20px;">确定</el-button></div></el-dialog>

css部分

.top_style,.top_active{border:1px solid #AAA;padding:3px 20px;text-align:center;
}
.top_active{border-color:#02A7F0;color: #02A7F0;
}
.button_style{text-align:center;float:left;width: 80px;
}

js部分

1.点击预约时,记录下会议id及name位置id及name,并把会议id当前时间(0点~24点)传过去,后台需要根据时间返回时间点数组

	//预约addAppoint(val){this.isAppoint=true;this.appointAreaId=val.appointAreaId;this.appointAreaName=val.appointAreaName;this.positionId=val.positionId;this.positionName=val.positionName;this.getAppoint();let formData={appointAreaId:val.appointAreaId,startTime:this.getYMD(new Date())+' '+'00:00:00',endTime:this.getYMD(new Date())+' '+'23:59:59'}this.getAppointed(formData);},//每次打开预约弹窗时,默认选中当天getAppoint(){let arr = []for (let i = 0; i < 7; i++) {arr.push(this.dealTime(i))}arr[0].is_active=1;this.week=arr;this.dateNow=this.week[0].full;},

2.获取时间数组

//获取时间数组getAppointed(formData){appointTime(formData).then(res=>{this.timeArr=res.data.data;if(res.data.code==200){this.timeArr=res.data.data;}})},

时间数组格式为:时间点+状态;未选中状态为0,已经预约过的状态为1,不可预约(过期时间)的状态为2,当前预约(即点击时选中)的状态为3(这个状态为点击时判断,不要接口返回)
在这里插入图片描述
3.处理未来七天的函数

// 处理未来七天的函数dealTime(num){let time = new Date() // 获取当前时间日期let date = new Date(time.setDate(time.getDate() + num)).getDate() //这里先获取日期,在按需求设置日期,最后获取需要的let newDate=(date.toString()).padStart(2,"0");let month = time.getMonth() + 1 // 获取月份let newMonth=(month.toString()).padStart(2,"0");let day = time.getDay() //  获取星期let year=time.getFullYear();let full=year+'-'+month+'-'+date;switch (day) { //  格式化case 0:day = "星期日"breakcase 1:day = "星期一"breakcase 2:day = "星期二"breakcase 3:day = "星期三"breakcase 4:day = "星期四"breakcase 5:day = "星期五"breakcase 6:day = "星期六"break}let obj = {date: newDate,day: day,is_active: 0,month: newMonth,year:year,full:full,}return obj // 返回对象},

4.点击切换星期状态

//点击切换星期状态changWeek(val,index){for(let i=0;i<this.week.length;i++){this.week[i].is_active=0;}//星期切换时,其他星期状态重置为0,即未选中,当前星期状态为1,即选中this.week[index].is_active=1;let formData={appointAreaId:this.appointAreaId,startTime:val.full+' '+'00:00:00',endTime:val.full+' '+'23:59:59'};this.dateNow=val.full;//dateNow为当前选中时的日期(年月日)this.getAppointed(formData)},

5.选中时间点时,判断状态及改变状态

//选中时间点时,判断状态及改变状态
//appointTimeArr 保存点击的按钮的数组,即当前选中数组changTime(val,index){//当前选中数组的长度小于2时,即点击了1次、2if(this.appointTimeArr.length<2){this.timeArr[index].status=3;点击按钮的状态设为3,即当前选中this.appointTimeArr.push(index);//当前选中数组的长度为2,即点击了2if(this.appointTimeArr.length==2){//选中数组的俩个下标一样时,即同一个时间点点击了两次,即取消选中,则把状态都重置为0,并且清空选中数组if(this.appointTimeArr[0]==this.appointTimeArr[1]){this.timeArr[this.appointTimeArr[0]].status=0;this.appointTimeArr=[];}else{//选中数组的两个下下标不一样时,对数组进行排序,顺序排序,如若是[3,2]则改为[2,3],开始时间点和结束时间点this.appointTimeArr=this.appointTimeArr.sort(function(a,b){return a-b});//求出开始时间和结束时间之间选中的时间点个数,let len=this.appointTimeArr[1]-this.appointTimeArr[0];//根据个数,把选中时间段内的时间的状态都改为3,即当前选中for(let i=0;i<len;i++){//将下选中数组内容的下标与时间数组的下标状态进行比对,若是有状态等于1的,即已有预约,则做出提示,并且把开始时间点和结束时间点重置为空,循环终止if(this.timeArr[this.appointTimeArr[0]+i].status==1){this.$message.warning("已预约过的时间不允许预约!")this.timeStart='';this.timeEnd='';break}else{将最终获取到的选中数组下标与时间数组进行比对,获取开始时间点和结束时间点,并且状态改为3,即当前选中this.timeArr[this.appointTimeArr[0]+i].status=3;this.timeStart=this.timeArr[this.appointTimeArr[0]].time;this.timeEnd=this.timeArr[this.appointTimeArr[1]].time;}}}}}else if(this.appointTimeArr.length=3){//当前选中数组的长度等于3时,即点击了3次,则把前两个状态改为0,即未选中,把第三次点击时的状态设为3,即当前选中for(let i=0;i<this.timeArr.length;i++){if(this.timeArr[i].status===3){this.timeArr[i].status=0;}}this.appointTimeArr=[];this.appointTimeArr.push(index);this.timeArr[index].status=3;}},

6.保存

saveAppoint(){//保存时,开始时间点和结束时间点必须存在,即选中数组的长度为2,否则做出提示,并且将选中的下标对赢得时间点状态重置为0,即未选中if(this.timeStart!=''&&this.timeEnd!=''){this.appointForm.appointAreaId=this.appointAreaId;this.appointForm.appointAreaName=this.appointAreaName;this.appointForm.positionId=this.positionId;this.appointForm.positionName=this.positionName;this.appointForm.remark=this.remark;//对开始时间和结束时间进行拼接,即当前选中星期对应的日期+当前选中时间点this.appointForm.startTime=this.dateNow+' '+this.timeStart;this.appointForm.endTime=this.dateNow+' '+this.timeEnd;appoint(this.appointForm).then(res=>{if(res.data.code==200){this.$message.success(res.data.message)this.remark='';this.isAppoint=false;this.isMeeting=falsethis.getList();}else{this.$message.error(res.data.message)}})}else{this.$message.error("请选择预约时间")for(let i=0;i<this.timeArr.length;i++){if(this.timeArr[i].status==2){this.timeArr[i].status=0}}}},

7.弹窗关闭

closeAppoint(){this.isAppoint=false//弹窗关闭时,星期重置,默认选中星期数组的第一个,即当前日期对应的星期;重置备注;重置当前星期对应的时间数组中的状态为3的时间点状态为0,即未未选中for(let i=0;i<this.week.length;i++){this.week[i].is_active=0;}this.week[0].is_active=1;this.remark='';for(let i=0;i<this.timeArr.length;i++){if(this.timeArr[i].status==3){this.timeArr[i].status=0;}}},

二、一月的天数预约(最少一天)

在这里插入图片描述

1.时间数组同样由后端返回,把每月的第一天和最后一天传给后端,后端接口返回日期数组
格式也是time+status,0代表未选中,1代表已有预约,2代表不可预约,3代表当前选中
2.与时间点预约不同的是,天数预约可以选择一个时间点即某个月的某一天,其他的逻辑基本都差不多了,剩下的就是一些代码的不同了
3.天数预约比较有意思的就是会用到日历!没错就是日历,一开始是想着使用一些什么日历插件的,但是考虑到日历插件能满足我目前需求的可能性不大,所以只好想着给他画出来!哈哈,去百度了亿篇博客,然后自己再汇总+修改,so,手绘的日历出来了,切换月份啊,显示数据啊都么得问题的,嘿嘿,针不戳针不戳~
在这里插入图片描述

html

<el-dialog title="预约"  :visible.sync="isAppoint" width="40%" :before-close="closeAppoint"><el-form label-width="120px" :model="appointForm"><div class="calender"><div class="calender_title"><div class="arrow arrow-left" @click="prev()">&lt;</div><div class="data">{{ currentYear }}-{{ currentMonthChinese }}</div><div class="arrow arrow-right" @click="next()">></div></div><div class="calender_content"><div class="row title"><span class="title_span" v-for="item in title" :key="item">{{item}}</span></div><div class="row content"><span style="margin-bottom:5px;width:60px;margin-left:10px;" class="button_no" v-for="(item,index) in prevDays" :key="index+'a'"></span><el-button class="content_button" v-for="(item,index) in timeArr" :key="index" @click="changTime(item,index)" :type="item.status==0?'':item.status==1?'danger':item.status==2?'info':'primary'" :disabled="item.status==1||item.status==2">{{index+1 }}</el-button></div></div></div><div class="button_wrap"><div style="display:flex;"><div style="background-color:#C8C9CC;width:40px;height:20px;margin-right:10px;"></div><div>不可预约</div></div><div style="display:flex;"><div style="background-color:#ffa4a4;width:40px;height:20px;margin-right:10px;"></div><div>已有预约</div></div><div style="display:flex;"><div style="background-color:#3EA7F1;width:40px;height:20px;margin-right:10px;"></div><div>当前预约</div></div></div><el-row style="width:500px;margin:0 auto;"><el-col><el-form-item label="备注:" label-width="60px"><el-input placeholder="请输入" v-model="remark" clearable></el-input></el-form-item></el-col></el-row></el-form><div slot="footer" class="dialog-footer" ><el-button @click="closeAppoint">取消</el-button><el-button type="primary" @click="saveAppoint" style="margin-left:20px;">确定</el-button></div></el-dialog>

js

data(){reurn{appointForm:{},//预约isAppoint:false,//appointAreaId:'',//预约的路演厅idappointAreaName:'',//预约的路演厅nameremark:'',//备注appointTimeArr:[],//预约选中时间数组title: ["日", "一", "二", "三", "四", "五", "六"],timeArr:[],dateNow:'',//预约年月timeStart:'',//预约开始日期timeEnd:'',//预约结束日期currentDay: new Date().getDate(),currentMonth: new Date().getMonth(),currentYear: new Date().getFullYear(),}
}computed: {// 获取中文的月份    显示:8currentMonthChinese() {return new Date(this.currentYear, this.currentMonth).toLocaleString("default",{ month: "short" });},currentDays() {// Date中的月份是从0开始的return new Date(this.currentYear, this.currentMonth + 1, 0).getDate();},prevDays() {// 获取上个月的最后一行的日期let data = new Date(this.currentYear, this.currentMonth, 0).getDate();let num = new Date(this.currentYear, this.currentMonth, 1).getDay();var days = [];while (num > 0) {days.push(data--);num--;}return days.sort();},},methods:{/* 以下日历相关*///日历点击事件changTime(val,index){if(this.appointTimeArr.length<2){this.timeArr[index].status=3;this.appointTimeArr.push(index);if(this.appointTimeArr.length==1){this.timeStart=this.appointTimeArr[0];this.timeEnd=this.appointTimeArr[0];}else if(this.appointTimeArr.length==2){if(this.appointTimeArr[0]==this.appointTimeArr[1]){this.timeArr[this.appointTimeArr[0]].status=0;this.appointTimeArr=[];}else{this.appointTimeArr=this.appointTimeArr.sort(function(a,b){return a-b});let len=this.appointTimeArr[1]-this.appointTimeArr[0];for(let i=0;i<len;i++){if(this.timeArr[this.appointTimeArr[0]+i].status==1){this.$message.warning("已预约过的时间不允许预约!")this.timeStart='';this.timeEnd='';break}else{this.timeArr[this.appointTimeArr[0]+i].status=3;this.timeStart=this.timeArr[this.appointTimeArr[0]].time;this.timeEnd=this.timeArr[this.appointTimeArr[1]].time;}}}}}else if(this.appointTimeArr.length=3){for(let i=0;i<this.timeArr.length;i++){if(this.timeArr[i].status===3){this.timeArr[i].status=0;}}this.appointTimeArr=[];this.appointTimeArr.push(index);this.timeArr[index].status=3;}},//点击左侧箭头prev() {// 点击上个月,若是0月则年份-1// 01  1112if (this.currentMonth == 0) {this.currentYear -= 1;this.currentMonth = 11;} else {this.currentMonth--;}let date=this.currentYear+'-'+(this.currentMonth+1);let formData={appointAreaId:this.appointAreaId,startTime:this.getFirst(date)+' '+"00:00:00",endTime:this.getLast(date)+' '+"23:59:59"}this.dateNow=date;this.getAppointed(formData)},//点击右侧箭头next() {if (this.currentMonth == 11) {this.currentYear++;this.currentMonth = 0;} else {this.currentMonth++;}let date=this.currentYear+'-'+(this.currentMonth+1);let formData={appointAreaId:this.appointAreaId,startTime:this.getFirst(date)+' '+"00:00:00",endTime:this.getLast(date)+' '+"23:59:59"}this.dateNow=date;this.getAppointed(formData)},/* 以上日历相关*/getYM(time){let date = new Date(time)let Str=date.getFullYear() + '-' +(date.getMonth() + 1)return Str},getFirst(time){let date = new Date(time)let Str=date.getFullYear() + '-' +(date.getMonth() + 1) + '-' + date.getDate()return Str},getLast(time){var y = new Date(time).getFullYear(); //获取年份var m = new Date(time).getMonth() + 1; //获取月份var d = new Date(y, m, 0).getDate(); //获取当月最后一日let Str=y + '-' +m + '-' + dreturn Str},//获取时间数组getAppointed(formData){appointTime(formData).then(res=>{this.timeArr=res.data.data;if(res.data.code==200){this.timeArr=res.data.data;}})},//预约addAppoint(val){this.isAppoint=true;this.appointAreaId=val.appointAreaId;this.appointAreaName=val.appointAreaName;this.positionId=val.positionId;this.positionName=val.positionName;let formData={appointAreaId:val.appointAreaId,startTime:this.getFirst(this.getYM(new Date()))+' '+'00:00:00',endTime:this.getLast(this.getYM(new Date()))+' '+'23:59:59'}this.dateNow=this.getYM(new Date());this.getAppointed(formData);},saveAppoint(){if(this.timeStart!=''&&this.timeEnd!=''){this.appointForm.appointAreaId=this.appointAreaId;this.appointForm.appointAreaName=this.appointAreaName;this.appointForm.positionId=this.positionId;this.appointForm.positionName=this.positionName;this.appointForm.remark=this.remark;this.appointForm.startTime=this.timeStart+' '+"00:00:00";this.appointForm.endTime=this.timeEnd+' '+"23:59:59";appoint(this.appointForm).then(res=>{if(res.data.code==200){this.$message.success(res.data.message)this.remark='';this.currentDay=new Date().getDate();this.currentMonth=new Date().getMonth();this.currentYear=new Date().getFullYear();this.isAppoint=false;this.isMeeting=falsethis.getList();}else{this.$message.error(res.data.message)}})}else{this.$message.error("请选择预约时间")for(let i=0;i<this.timeArr.length;i++){if(this.timeArr[i].status==3){this.timeArr[i].status=0}}}},closeAppoint(){this.isAppoint=falsethis.remark='';for(let i=0;i<this.timeArr.length;i++){if(this.timeArr[i].status==3){this.timeArr[i].status=0;}}this.currentDay=new Date().getDate();this.currentMonth=new Date().getMonth();this.currentYear=new Date().getFullYear();},
}

css

.button_wrap{margin: 0 auto;width: 480px;display: flex;font-size: 18px;justify-content: space-between;margin-bottom: 20px;
}
.button_no{display: inline-block;line-height: 1;white-space: nowrap;background: #FFFFFF;color: #606266;-webkit-appearance: none;text-align: center;-webkit-box-sizing: border-box;box-sizing: border-box;outline: none;margin: 0;-webkit-transition: 0.1s;transition: 0.1s;font-weight: 400;padding: 12px 20px;font-size: 14px;border-radius: 4px;
}
.calender {width: 500px;height: 300px;margin: 0 auto;// margin-left:50px;
}
.calender_title {display: flex;width: 100%;height: 40px;line-height: 40px;text-align: center;
}
.arrow {width: 50px;height: 100%;
}
.data {font-size: 20px;
}
.title_span {width: calc(100% / 7);text-align: center;height: 40px;line-height: 40px;
}
.row {width: 100%;display: flex;justify-content: space-between;
}.prevDay {color: #fff;background-color: #eee;
}.content_span {width: calc(100% / 7);height: 30px;line-height: 30px;text-align: center;
}
.content_button{margin-bottom:5px;width:60px;margin-left:10px;
}.calender_content {width: 100%;height: 250px;
}
.content {-webkit-box-pack: start;-ms-flex-pack: start;justify-content: flex-start;-ms-flex-wrap: wrap;flex-wrap: wrap;
}

相关文章:

vue项目实现会议预约(包含某天的某个时间段和某月的某几天)

一、一天的时间段预约 会议预约有以下操作&#xff1a; 1.点击预约按钮&#xff0c;弹窗最近一周的预约时间点&#xff08;半小时一个点&#xff09;&#xff0c;预约时间为5:00到24:00; 2.超过当前时间的时间点不允许再预约&#xff0c;已经预约的时间不允许再预约&#xff0c…...

javacv桌面推送 通过推送和拉取udp组播视频流实现

ffmpeg udp 推流拉流命令单播推流E:/工具/ffmpeg/ffmpeg -f gdigrab -r 23 -i desktop -pkt_size 1316 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f h264 udp://192.168.1.20:5001拉流ffplay -f h264 udp://192.168.1.20:5001 -fflags nobuffer -nofind_strea…...

2022年直播电商成交额,更是达到了24816亿元的成交额

近年来移动网络覆盖率、网速提升&#xff0c;直播行业不在是陌生的行业&#xff0c;直播也诞生了繁多的领域&#xff0c;游戏直播、户外直播等&#xff0c;当然还有今天的主题“直播带货”。直播带货是线上销售模式的一种&#xff0c;由衷是为了更好的把商品展示给用户观看&…...

【学习总结】2023寒假总结

写在前面时光匆匆&#xff0c;白驹过隙&#xff0c;转眼间寒假就过去了&#xff0c;这次寒假可以算的上是最长的一次假期&#xff0c;经历了从疫情到放开&#xff0c;从患病到阳康&#xff0c;在现实与虚幻的世界中玩耍&#xff0c;在痛苦的数据结构中徘徊&#xff0c;在每次早…...

宝塔搭建实战php源码人才求职管理系统后台端thinkphp源码(一)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 在开源社区里看到了这一套系统&#xff0c;骑士人才系统SE版&#xff0c;搭建测试了&#xff0c;感觉很不错。能够帮助一些想做招聘平台的朋友降低开发成本&#xff0c;就是要注意&#xff0c;想商业使用的话&…...

stk 根据六根数文件生成卫星轨迹(一)

先简单介绍下上面的参数。 Propagator预报轨道模型。 TwoBody为二体&#xff08;开普勒运动模型&#xff09;。HPOP为高精度轨道模型。目前只用到这两个。 下图为六根数参数 Orbit Epoch&#xff1a;为根数时间&#xff08;UTC&#xff09; Semimajor Axis&#xff1a;长半…...

深度学习算法面试常问问题(一)

博主秋招遇到的面试问题以及整理其他面经相关问题&#xff0c;无偿分享~ 项目叙述&#xff1a; 算法需求及应用场景算法的调研和初步方案的制定数据的准备&#xff08;包括数据标注和数据增强&#xff09;算法的介绍&#xff08;包括输入和输出&#xff0c;loss、backbone、训…...

Spring 底层原理与解析 - 容器接口

Spring 底层原理与解析 - 容器接口 BeanFactory 能做哪些事 BeanFactory 与 ApplicaiotnContext 到底是谁提前做完了对象的加载 在之前的一篇关于 Spring 的文章Spring IoC 与容器的初始化中提到过&#xff0c;BeanFactory 接口与 ApplicationContext 接口之间的关系 可以看…...

Compose-Navigation简单案例上手

Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转 这是完整的结构&#xff08;忽略掉红线划过的那个包&#xff09; 安装适用于 kotlin 的 navigation 依赖 dependencies {implementation("androidx.navigation:navigati…...

855. 考场就座

题目 考场就座 在考场里&#xff0c;一排有 N 个座位&#xff0c;分别编号为 0, 1, 2, …, N-1 。 当学生进入考场后&#xff0c;他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上。如果有多个这样的座位&#xff0c;他会坐在编号最小的座位上。(另外&#xf…...

k8s之ingress(二)

文章目录k8s之ingress1.1、Kubernetes 暴露服务的方式:1.2 基本概念1.3为什么需要Ingress资源1.4 Ingress的工作原理1.5ingress 暴露服务的方式总结k8s之ingress 1.1、Kubernetes 暴露服务的方式: Kubernetes暴露服务的方式目前只有三种&#xff1a;LoadBlancer Service、Nod…...

linux下监测串口数据

在编写上下位机通信代码时&#xff0c;需要分阶段测试&#xff0c;确保下位机&#xff0c;线路&#xff0c;上位机都&#xff2f;&#xff2b;&#xff0e; 一&#xff0e;检查设备数据传出 &#xff11;&#xff0e;确定下位机的串口参数 如果波特率有问题&#xff0c;可能会…...

【面试之闭包】前端面试那些事(2)三分钟深入理解闭包(附详解实例)

目录1、什么是闭包&#xff0c;什么是作用域1.1 变量作用域1.2 闭包是啥&#xff1f;如何改变变量调用格局1.3 闭包的特性2、怎么用闭包&#xff0c;闭包实例应用2.1 常见闭包实例2.2 闭包异步函数的应用2.3 柯里化的应用3、闭包的优缺点3.1 优点3.2 缺点4、片尾彩蛋【写在前面…...

深入浅出带你学习WebSphere中间件漏洞

前言 上一篇文章给大家介绍了中间件glassfish的一些常见漏洞以及利用方法&#xff0c;今天我给大家带来的是WebSphere中间件的常见漏洞以及这些漏洞的利用方法&#xff0c;下面我们首先介绍一下WebSphere中间件是什么&#xff0c;然后展开来讲关于该中间件的漏洞。 WebSphere…...

如何一眼分辨是C还是C++

C语言的历史C语言是由贝尔实验室的Dennis Ritchie在20世纪70年代初开发的一种通用程序设计语言。在早期的计算机时代&#xff0c;许多计算机使用不同的汇编语言编写程序&#xff0c;这导致了程序的可移植性和代码的可重用性很低。因此&#xff0c;Dennis Ritchie在开发C语言时试…...

CMake系列:正确使用多配置编译系统

目录 常见错误 问题现象 正确做法 if指令应该什么时候使用 活学活用 把IF指令用于多配置编译系统是很多初学者容易犯下的错误。这篇文章启示性的教你如何正确理解、使用CMake的多配置编译系统。 常见错误 以Debug和Release配置有不同的宏定义为例&#xff0c;如下所示&a…...

PCB中的HDI板生产中的变化

关键词&#xff1a;HDI概述 HDI发展演变 HDI生产难点如果把一整个电子产业比作浩瀚的宇宙&#xff0c;那些智能电子设备就像宇宙中闪耀的星光&#xff0c;当你以“上帝”的视角手持放大镜去观察时&#xff0c;这些闪烁的星光点点其实都是一个个由精密的“自然规律”所“设计”好…...

程序分析与神经网络后门

原文来自微信公众号“编程语言Lab”&#xff1a;程序分析与神经网络后门 搜索关注“编程语言Lab”公众号&#xff08;HW-PLLab&#xff09;获取更多技术内容&#xff01; 欢迎加入编程语言社区 SIG-程序分析&#xff0c;了解更多程序分析相关的技术内容。 加入方式&#xff1a;…...

redis主从哨兵模式

一.为什么用redis主从模式 1.数据备份:主从复制实现数据的热备份。 2.故障恢复:当主节点出现问题时,由从节点提供服务,实现快速恢复。 3.负载均衡:读写分离,主节点提供写服务,从节点提供读服务。在写少读多时提高Redis的并发。 二.为什么使用哨兵模式 主要用于主节…...

Spring 系列之 MVC

Spring 系列文章目录 文章目录Spring 系列文章目录前言一、介绍二、项目搭建1.创建空项目2.设置maven和lombok3.创建maven web module4. 配置Tomcat启动运行项目&#xff08;选择local本地&#xff09;5. 导入jar依赖包6.在web.xml中配置DispatcherServlet7. 加入SpringMVC的配…...

电子技术——分立CS和CE放大器的低频响应

电子技术——分立CS和CE放大器的低频响应 我们之前在学习放大器中从来没有关系过信号频率对放大器的影响&#xff0c;也就是说我们默认放大器具有无限的带宽&#xff0c;这当然不符合现实逻辑。为了说明这一点&#xff0c;我们使用下图&#xff1a; 上图描述了MOS或BJT分立电路…...

代码随想录【Day16】| 104. 二叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数

104. 二叉树的最大深度 题目链接 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c…...

状态机图、通信图题

1.下列关于通信图与顺序图中的对象的相同点的叙述.正确的是(D)。A.两种图中都可以表示对象的创建和销毁B.对象在两种图中的位置都没有任何限制C.对象在两种图中的表示方式完全一致D.对象名在两种图中的表示完全一致2.下列关于通信图的说法错误的是(C)。A.通信图是对一次交互过程…...

分布式文件存储Minio学习入门

文章目录一、分布式文件系统应用场景1. Minio介绍Minio优点2. MinIO的基础概念、3. 纠删码ES(Erasure Code)4. 存储形式5. 存储方案二、Docker部署单机Minio三、minio纠删码模式部署四、分布式集群部署分布式存储可靠性常用方法冗余校验分布式Minio优势运行分布式minio使用dock…...

handler解析(4)-Message及Message回收机制

Message中可以携带的信息 Message中可以携带的数据比较丰富&#xff0c;下面对一些常用的数据进行了分析。 /*** 用户定义的消息代码&#xff0c;以便当接受到消息是关于什么的。其中每个Hanler都有自己的命名控件&#xff0c;不用担心会冲突*/ public int what; /*** 如果你…...

Linux使用定时任务监控java进程并拉起

需求描述&#xff1a; 设计一个脚本&#xff0c;通过Linux定时任务&#xff0c;每分钟执行一次&#xff0c;监控jar包进程是否存在&#xff0c;存在则不做动作&#xff0c;不存在则重新拉起jar包程序。 定时任务配置&#xff1a; */1 * * * * bash -x /root/myfile/jars/che…...

Win 10电脑摄像头提示错误代码0xa00f4244怎么办?

如果你的Windows 10电脑无法打开摄像头&#xff0c;提示“我们找不到你的摄像头”的错误消息&#xff0c;错误代码是0xA00F4244&#xff0c;原因可能是杀毒软件阻止了摄像头&#xff0c;或者是摄像头驱动程序有问题。 小编为你整理了摄像头错误代码0xA00F4244的解决方法&#…...

MFC消息机制

1.消息映射消息映射是一个将消息和成员函数相互关联的表。比如&#xff0c;框架窗口接收到一个鼠标左击消息&#xff0c;MFC将搜索该窗口的消息映射&#xff0c;如果存在一个处理WM_LBUTTTONDOWN消息的处理程序&#xff0c;然后就调用OnButtonDown。2.消息映射机制2.1 声明宏 写…...

全国计算机等级考试报名照片要求以及证件照制作教程

马上就全国计算机等级考试就要开始了&#xff0c;相信现在很多同学都在网上进行报名呢&#xff0c;报名的时候肯定需要用到个人证件照片&#xff0c;所以问题来了&#xff0c;我们怎么自己制作证件照片呢&#xff1f;计算机等级考试报名时对证件照都有哪些要求呢&#xff1f;该…...

SQLSERVER 临时表和表变量到底有什么区别?

一&#xff1a;背景 1. 讲故事 今天和大家聊一套面试中经常被问到的高频题&#xff0c;对&#xff0c;就是 临时表 和 表变量 这俩玩意&#xff0c;如果有朋友在面试中回答的不好&#xff0c;可以尝试看下这篇能不能帮你成功迈过。 二&#xff1a;到底有什么区别 1. 前置思…...

网站制作全包价格/seo在线优化平台

学习记录 存储层次结构 高速缓存和主存都是RAM&#xff08;Random-Access Memory&#xff0c;随机访问存储器&#xff09;&#xff0c;它分为静态的&#xff08;SRAM&#xff09;和动态的&#xff08;DRAM&#xff09;&#xff0c;分别对应高速缓存和主存。RAM: 动态RAM DRAM和…...

纯文本网站建设/百度推广客户端下载安装

这一章我们将会重点介绍JavaScript中几个重要的属性&#xff08;this、constructor、prototype&#xff09;&#xff0c; 这些属性对于我们理解如何实现JavaScript中的类和继承起着至关重要的作用。 this this表示当前对象&#xff0c;如果在全局作用范围内使用this&#xff0c…...

网站制作 培训/珠海关键词优化软件

目录 一、FileInputStream 文件输入流 二、FileOutputStream 文件输出流 三、FileReader 字符流 四、FileWriter 字符流 一、FileInputStream 文件输入流 1、单个字节读取文件 public void readFile01(){//文件路径String filePath "d:\\hello.txt";//用于接收…...

北京牛鼻子网站建设公司/百度关键词排名快速排名

之前写了一个小工具软件&#xff0c;叫MakeSQL&#xff0c;可以自动生成的SQL语句&#xff0c;仅适用Oracle数据库。用了一段时间&#xff0c;真的可以提高编程的效率&#xff0c;大大地减少写SQL语句的时间。我还有点不满意&#xff0c;它生成的SQL语句是写在根目录下的txt文件…...

给你一个网站怎么做的/互联网营销培训

Java更新之后&#xff0c;Eclipse运行程序时提示 无法找到Java可执行文件 字符串之间判断用.equals&#xff0c;不能用 1 String a; 2 String b; 3 if(a.equals(b)){...} 字符串a字符串b转载于:https://www.cnblogs.com/unpro-mercy/p/8616893.html...

网页版淘宝登录入口/自动seo网站源码

1、php使用mysql_connect()出错 这个函数自 PHP 5.5.0 起已废弃&#xff0c;也就是说php 7.x的不再支持这个连接数据库函数 应使用 MySQLi 或 PDO_MySQL 扩展来替换&#xff0c;如果还想用此函数&#xff0c;用php5.x版本 2、ajax进入error函数块 ajax进入请求登录的php中 …...