日期-日历-选择器实现(图文并茂)

news2024/11/17 11:48:56

文章目录

日历模板效果图展示

在这里插入图片描述

功能点介绍

   相当于留言谱,用于记录留言的历史纪录功能。主要实现的功能点在于-前端页面日历的动态搭建,哪一年哪一月哪一日对应的历史纪录。进行显示-当点击回忆录时跳转页面或者模态框实现显示。扩展-页面还可以整的更好看些,作为打卡等,本猿能力有限。

完整代码(cv即可)

微信小程序前端-跟vuejs基本没有多大差别-view改成div即可。也就是说都适用。

index.wxml

<view class="calendar">
  <view class="calendarTop">
    <text class="calendarTopL" catchtap="prev">{{'<'}}< /text>
        <text class="calendarTopC">{{nowYear}}{{nowMonthStr}}</text>
        <text class="calendarTopR" catchtap="next">{{'>'}}</text>
  </view>
  <view class="calendarWeek">
    <text class="calendarWeekItem" wx:for="{{weekList}}" wx:key="item">{{item}}</text>
  </view>
  <view class="calendarDate">
    <text class="calendarDateItem {{item.now ? 'dateItemNow' : ''}} {{item.gray ? 'dateItemGray' : ''}}" wx:for="{{month}}" bindtap="memoirbtn" data-time="{{item.timeDate}}" wx:key="index">{{item.text}}
      <text class="memoirNow">{{item.memoir}}</text>
    </text>
  </view>
</view>

index.wxss

.calendar {
  width: 100%;
  border-top: 1rpx solid #00000005;
  background-color: #FFF2C7;
  margin: 0 auto;
}

.calendarTop {
  padding-top: 22rpx;
  display: flex;
  justify-content: center;
  position: relative;
}

.calendarTopL {
  font-size: 32rpx;
  font-weight: 400;
  color: #333333;
  height: 36rpx;
  line-height: 36rpx;
  position: absolute;
  left: 34rpx;
  top: 22rpx;
}

.calendarTopC {
  font-size: 26rpx;
  font-weight: 600;
  color: #333333;
  height: 36rpx;
  line-height: 36rpx;
}

.calendarTopR {
  font-size: 32rpx;
  font-weight: 400;
  color: #333333;
  height: 36rpx;
  line-height: 36rpx;
  position: absolute;
  right: 34rpx;
  top: 22rpx;
}

.calendarWeek {
  display: flex;
  flex-direction: row;
  padding-top: 24rpx;
}

.calendarWeekItem {
  width: 60rpx;
  height: 60rpx;
  font-size: 20rpx;
  font-weight: 400;
  color: #999999;
  line-height: 60rpx;
  text-align: center;
  margin-left: 40rpx;
}

.calendarDate {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}

.calendarDateItem {
  width: 100rpx;
  height: 200rpx;
  font-size: 26rpx;
  font-weight: bold;
  color: #333333;
  line-height: 60rpx;
  text-align: center;
  border: 1rpx solid rgba(0, 0, 0, 0.4);
}

.memoirNow {
  display: flex;
  width: 100%;
  height: 140rpx;
  background: #FCC001;
}

.dateItemNow {
  background: #2E8CFF;
  color: #FFFFFF;
}

.dateItemGray {
  color: #CCCCCC;
}

index.js

Page({
  /**
   * 页面的初始数据
   */
  data: {
    weekList: ['一', '二', '三', '四', '五', '六', '日'], //一周
    month: [
      {
        // text   此值为日期值,类型为number
        // now    此值为今天,在本月的周末为false,其它时候为true,类型为布尔
        // gray   此值为日期置灰,本月中的上月和下月日期以及本月的周末,类型为布尔
      }
    ],//一个月所有数据
    nowYear: 0,//选择的年
    nowMonth: 0,//选择的月
    nowMonthStr: '',//转换格式的月
    today: 0,//今天
    memorandum: [{ "creationTime": "2022-12-12" }, { "creationTime": "2022-12-16" }, { "creationTime": "2022-12-03" }],  //为了演示,此为模拟数据,也可从后端获取数据源
  },
  //回忆录 进行点击查看内容-(作为参考)
  // memoirbtn(e) {
  //   //根据前端传过来的时间,还有用户标识,进行表查询,最终跳转页面-显示到前端页面上内容
  //   var index = e.currentTarget.dataset.time;
  //   console.log("传过来的值是想要的" + index);
  //   if (index != "") {
  //     wx.navigateTo({
  //       url: '/pages/time_record/index?dateTime=' + index,
  //     })
  //   } else {
  //     wx.showToast({
  //       title: '当日未建立任务点',
  //       icon: 'error',
  //       duration: 1500
  //     })
  //   }
  // },
  // 获取当前年月日
  gainDate() {
    let d = Reflect.construct(Date, []);
    this.setData({
      nowYear: d.getFullYear(),
      nowMonth: d.getMonth() + 1,
      today: d.getDate(),
      nowMonthStr: (d.getMonth() + 1).toString().padStart(2, '0')
    })
  },
  // 上个月
  prev() {
    if (this.data.nowMonth > 1) {
      this.setData({
        nowMonth: this.data.nowMonth - 1,
        nowMonthStr: (this.data.nowMonth - 1).toString().padStart(2, '0')
      })
    } else {
      this.setData({
        nowYear: this.data.nowYear - 1,
        nowMonth: 12,
        nowMonthStr: "12"
      })
    };
    this.todayProminent()
    this.dateInit()
  },
  // 下个月
  next() {
    if (this.data.nowMonth < 12) {
      this.setData({
        nowMonth: this.data.nowMonth + 1,
        nowMonthStr: (this.data.nowMonth + 1).toString().padStart(2, '0')
      })
    } else {
      this.setData({
        nowYear: this.data.nowYear + 1,
        nowMonth: 1,
        nowMonthStr: "01"
      })
    }
    this.todayProminent()
    this.dateInit()
  },
  //今天日期凸显
  todayProminent() {
    // 将今天置为0
    this.setData({
      today: 0
    })
    let d = Reflect.construct(Date, []);
    if (d.getFullYear() == this.data.nowYear && d.getMonth() + 1 == this.data.nowMonth) {
      this.setData({
        today: d.getMonth() + 1 > this.data.nowMonth + 1 ? 0 : d.getDate()
      })
    }
  },
  // 日历主体
  dateInit() {
    let now = Reflect.construct(Date, [this.data.nowYear, this.data.nowMonth - 1]); //当前月份的一号
    let startWeekNow = now.getDay(); //当前月份的一号对应的星期
    let end = Reflect.construct(Date, [Reflect.construct(Date, [this.data.nowYear, this.data.nowMonth]) - 10]);// 当前月份的最后一号
    let endWeekNow = end.getDay(); //当前月份的最后一天对应的星期
    let dayNumNow = Reflect.construct(Date, [this.data.nowYear, this.data.nowMonth, 0]).getDate(); //当前月有多少天
    let dayNumPrev = Reflect.construct(Date, [this.data.nowYear - 1 ? this.data.nowYear : this.data.nowYear - 1, this.data.nowMonth - 1 ? this.data.nowMonth - 1 : 12, 0]).getDate(); //上个月有多少天

    let prevMonthShow = []; //上个月日期展示的数据
    let nowMonthShow = []; //本月日期展示的数据
    let nextMonthShow = []; //下个月日期展示的数据
    //进行判断是否有内容  先确认当今是几年几月,然后调用后端方法,查询出全部数据,进行匹配
    console.log("当前年月" + this.data.nowYear + "-" + this.data.nowMonth)
    var memoir = "";
    var timeDate = "";
    var times = "";
    //标记几年几月几日,标记是否有值
    for (let i = 1; i < (startWeekNow ? startWeekNow : 7); i++) {
      if (this.data.nowMonth == 1) {
        timeDate = (this.data.nowYear - 1) + "-" + 12
      } else {
        timeDate = (this.data.nowYear) + "-" + (this.data.nowMonth - 1)
      }
      if ((dayNumPrev - i + 1) < 10) {
        times = "0" + (dayNumPrev - i + 1);
      } else {
        times = dayNumPrev - i + 1
      }
      timeDate = timeDate + "-" + times;
      memoir = this.creationTime(timeDate);
      prevMonthShow.unshift( //头部添加
        {
          text: dayNumPrev - i + 1, //30   29  28
          now: false,
          gray: true,
          timeDate: timeDate,
          memoir: memoir
        }
      )
    };
    for (let i = 1; i <= dayNumNow; i++) {
      if (i < 10) {
        times = "0" + i;
      } else {
        times = i;
      }
      timeDate = this.data.nowYear + "-" + this.data.nowMonth + "-" + times;
      memoir = this.creationTime(timeDate);
      if (this.data.today == i) {
        nowMonthShow.push(
          {
            text: i,
            now: true,
            gray: false,
            timeDate: timeDate,
            memoir: memoir
          }
        )
      } else {
        nowMonthShow.push(
          {
            text: i,
            now: false,
            gray: false,
            timeDate: timeDate,
            memoir: memoir
          }
        )
      }
    };
    for (let i = 1; i <= (endWeekNow ? 7 - endWeekNow : 0); i++) {
      if (this.data.nowMonth == 12) {
        timeDate = (this.data.nowYear + 1) + "-" + "01"
      } else {
        timeDate = (this.data.nowYear) + "-" + (this.data.nowMonth + 1)
      }
      if (i < 10) {
        times = "0" + i;
      } else {
        times = i;
      }
      timeDate = timeDate + "-" + times;
      memoir = this.creationTime(timeDate);
      nextMonthShow.push(
        {
          text: i,
          now: false,
          gray: true,
          timeDate: timeDate,
          memoir: memoir
        }
      )
    };
    this.setData({
      month: [...prevMonthShow, ...nowMonthShow, ...nextMonthShow]
    })

  },
  creationTime(timeDate) {
    var memoir = "";
    let memorandum = this.data.memorandum || [];
    console.log("后端传过来的值为:" + memorandum.length);
    memorandum.forEach(element => {
      //把标准时间转换成自己想要的格式类型
      var dateee = new Date(element.creationTime).toJSON();
      var time1 = new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
      //进行转换-例如2022-12-12 12:12:36 转成 2022-12-12 省略时分秒
      var date2 = /\d{4}-\d{1,2}-\d{1,2}/g.exec(time1)
      if ((new Date(date2).getTime()) == (new Date(timeDate).getTime())) {
        memoir = "回忆录";
      }
    });
    return memoir;
  },
  // duckMemorandum() {  //初始化数据-(作为参考)
  //   var that = this;
  //   wx.request({
  //     url: 'http://localhost:8081/duckMemorandum/list',
  //     method: 'GET',
  //     data: {
  //       userId: 1
  //       //需要传入用户id
  //     },
  //     // 请求成功时的处理
  //     success: function (res) {
  //       // 一般在这一打印下看看是否拿到数据
  //       console.log(res.data)
  //       if (res.data.code = 200) {
  //         that.setData({
  //           memorandum: [...res.data.data]
  //         })

  //       }
  //     },
  //     // 请求失败时的一些处理
  //     fail: function () {
  //       wx.showToast({
  //         icon: "none",
  //         mask: true,
  //         title: "接口调用失败,请稍后再试。",
  //       });
  //     }
  //   })
  // },
  /**
 * 生命周期函数--监听页面加载
 */
  onLoad(options) {
    // this.duckMemorandum();
    this.gainDate();
    this.dateInit()
  },
})

日期时间选择器效果图展示

在这里插入图片描述

1、使用小程序原生的picker

从底部弹起的滚动选择器。

①普通选择器:mode = selector

选择器用mode来区别,默认是普通选择器,e.detail.value拿到的值是选择了项的索引index,再通过array拿到值.在data里面做初始化的时候,将备选项加入array即可.
选择时触发bindPickerChange事件,获取index.
index.wxml

 <picker bindchange="pickChange" value="{{index}}" range="{{array}}">
    <view>
        当前选择的国家:{{array[index]}}
    </view>
  </picker>

index.js

Page({
  data:{
    array:['中国','美国','日本','韩国'],
    index:0
  },
  pickChange:function(e){
    this.setData({
      index:e.detail.value
    });
  }
})

②多列选择器:mode = multiSelector

在这里插入图片描述

index.wxml

<view>
  <view class="section__title">多列选择器</view>
  <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange"
    value="{{multiIndex}}" range="{{newArr}}">
    <view class="picker">
      当前选择: <van-button type="primary">
        {{newArr[0][multiIndex[0]]}}{{newArr[1][multiIndex[1]]}}{{newArr[2][multiIndex[2]]}}</van-button>
    </view>
  </picker>
</view>

index.js

Page({
  /**
   * 页面的初始数据
   */
  data: {
    multiArray: [{
      id: 1,
      label: "河南省",
      children: [{
        id: 2,
        label: "郑州市",
        children: [{
          id: 3,
          label: "中原区",
        },
        {
          id: 4,
          label: "二七区",
        },
        {
          id: 5,
          label: "金水区",
        },
        ],
      },
      {
        id: 7,
        label: "商丘市",
        children: [{
          id: 8,
          label: "民权县",
        },
        {
          id: 9,
          label: "柘城县",
        },
        {
          id: 10,
          label: "宁陵县",
        },
        ],
      },
      ],
    },
    {
      id: 17,
      label: "浙江省",
      children: [{
        id: 18,
        label: "杭州市",
        children: [{
          id: 19,
          label: "西湖区",
        },
        {
          id: 20,
          label: "萧山区",
        },
        ],
      },
      {
        id: 21,
        label: "金华市",
        children: [{
          id: 22,
          label: "金东区",
        },
        {
          id: 23,
          label: "婺城区",
        },
        ],
      },
      ],
    },
    ],
    multiIndex: [0, 0, 0],
    multiIds: [],
    newArr: [],
  },

  bindMultiPickerChange(e) {
    console.log(this.data.multiIds);
  },
  bindMultiPickerColumnChange(e) {
    let data = {
      newArr: this.data.newArr,
      multiIndex: this.data.multiIndex,
      multiIds: this.data.multiIds,
    };
    data.multiIndex[e.detail.column] = e.detail.value;

    let searchColumn = () => {
      let arr1 = [];
      let arr2 = [];
      this.data.multiArray.map((v, vk) => {
        if (data.multiIndex[0] === vk) {
          data.multiIds[0] = {
            ...v,
          };
          v.children.map((c, ck) => {
            arr1.push(c.label);
            if (data.multiIndex[1] === ck) {
              data.multiIds[1] = {
                ...c,
              };
              c.children.map((t, vt) => {
                arr2.push(t.label);
                if (data.multiIndex[2] === vt) {
                  data.multiIds[2] = {
                    ...t,
                  };
                }
              });
            }
          });
        }
      });
      data.newArr[1] = arr1;
      data.newArr[2] = arr2;
    };
    switch (e.detail.column) {
      case 0:
        // 每次切换还原初始值
        data.multiIndex[1] = 0;
        data.multiIndex[2] = 0;
        // 执行函数处理
        searchColumn();
        break;
      case 1:
        data.multiIndex[2] = 0;
        searchColumn();
        break;
    }
    this.setData(data);
  },

  multiArrayshow() {
    let state = {
      arr: [],
      arr1: [],
      arr2: [],
      arr3: [],
      multiIds: []
    }
    this.data.multiArray.map((v, vk) => {
      state.arr1.push(v.label);
      if (this.data.multiIndex[0] === vk) {
        state.multiIds[0] = v;
      }
      if (state.arr2.length <= 0) {
        v.children.map((c, ck) => {
          state.arr2.push(c.label);
          if (this.data.multiIndex[1] === ck) {
            state.multiIds[1] = c;
          }
          if (state.arr3.length <= 0) {
            c.children.map((t, tk) => {
              state.arr3.push(t.label);
              if (this.data.multiIndex[2] === tk) {
                state.multiIds[2] = t;
              }
            });
          }
        });
      }
    });
    state.arr[0] = state.arr1;
    state.arr[1] = state.arr2;
    state.arr[2] = state.arr3;
    this.setData({
      newArr: state.arr,
      multiIds: state.multiIds,
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.multiArrayshow();
  },
});

index.wcss

.section__title{
  display: flex;
  align-content: center;
  justify-content: center;
  font-size: 42rpx;
  font-weight: bold;
}
.picker{
  font-size: 36rpx;
  color: red;
  background: black;
}

③时间选择器:mode = time

mode = time时,是时间选择器.start,end分别是有效时间范围的开始和结束.格式hh:mm
选择时触发bindTimeChange事件,获取time.
在这里插入图片描述

index.wxml

<view class="title_rq">
  <picker mode="time" name="creationTime" value="{{creationTime}}" start="00:00" end="24:60" bindchange="bindDateChange">
    {{creationTime}}
  </picker>
</view>

index.js

Page({

  /**
   * 页面的初始数据
   */
  data: {
    creationTime: "请选择时间" 
  },

  // 点击日期组件确定事件 
  bindDateChange: function (e) {
    this.setData({
      creationTime: e.detail.value
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

})

index.wcss

.title_rq {
  position: absolute;
  top: 12%;
  left: 5%;
  width: 90%;
  height: 70rpx;
  background: #f3e306;
  border: 1rpx solid black;
  font-size: 36rpx;
  color: #3D3D3D;
}

④日期选择器(上面有效果图)

mode = date时,是时间选择器.start,end分别是有效日期范围的开始和结束.格式yyyy-MM-dd
选择时触发bindDateChange事件,获取date
index.wxml

<view class="title_rq">
  <picker mode="date" name="creationTime" value="{{creationTime}}" start="1920-01-01" end="2099-01-01" bindchange="bindDateChange">
    {{creationTime}}
  </picker>
</view>

index.js

Page({

  /**
   * 页面的初始数据
   */
  data: {
    creationTime: "请选择日期" 
  },

  // 点击日期组件确定事件 
  bindDateChange: function (e) {
    this.setData({
      creationTime: e.detail.value
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

})

index.wcss

.title_rq {
  position: absolute;
  top: 12%;
  left: 5%;
  width: 90%;
  height: 70rpx;
  background: #f3e306;
  border: 1rpx solid black;
  font-size: 36rpx;
  color: #3D3D3D;
}

⑤省市区选择器:mode = region

之前单独做过一栏:可供参考:
简易实现
java前后端实现
java-vue前后端实现

2、如何使用原生的picker年月日 时分秒=共同选择

思路:加一起就行了

效果图

在这里插入图片描述

完整代码

index.wxml

<view class="container">
  <view class="tui-picker-name">日期时间选择器(精确到秒)</view>
  <picker mode="multiSelector" value="{{dateTime}}" bindchange="changeDateTime" bindcolumnchange="changeDateTimeColumn" range="{{dateTimeArray}}">
    <view class="tui-picker-detail">
      选择日期时间: {{dateTimeArray[0][dateTime[0]]}}-{{dateTimeArray[1][dateTime[1]]}}-{{dateTimeArray[2][dateTime[2]]}} {{dateTimeArray[3][dateTime[3]]}}:{{dateTimeArray[4][dateTime[4]]}}:{{dateTimeArray[5][dateTime[5]]}}
    </view>
  </picker>
</view>

index.js

var dateTimePicker = require('../../utils/dateTimePicker.js');


Page({
  data: {
    dateTimeArray: null,
    dateTime: null,
    startYear: 2000,
    endYear: 2050
  },
  onLoad(){
    // 获取完整的年月日 时分秒,以及默认显示的数组
    var obj = dateTimePicker.dateTimePicker(this.data.startYear, this.data.endYear);  
    this.setData({
      dateTime: obj.dateTime,
      dateTimeArray: obj.dateTimeArray,
    });
  },


  changeDateTime(e){
    this.setData({ dateTime: e.detail.value });
  },


  changeDateTimeColumn(e){
    var arr = this.data.dateTime, dateArr = this.data.dateTimeArray;


    arr[e.detail.column] = e.detail.value;
    dateArr[2] = dateTimePicker.getMonthDay(dateArr[0][arr[0]], dateArr[1][arr[1]]);


    this.setData({
      dateTimeArray: dateArr,
      dateTime: arr
    });
  },
})

dateTimePicker.js

function withData(param){
  return param < 10 ? '0' + param : '' + param;
}
function getLoopArray(start,end){
  var start = start || 0;
  var end = end || 1;
  var array = [];
  for (var i = start; i <= end; i++) {
    array.push(withData(i));
  }
  return array;
}
function getMonthDay(year,month){
  var flag = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0), array = null;


  switch (month) {
    case '01':
    case '03':
    case '05':
    case '07':
    case '08':
    case '10':
    case '12':
      array = getLoopArray(1, 31)
      break;
    case '04':
    case '06':
    case '09':
    case '11':
      array = getLoopArray(1, 30)
      break;
    case '02':
      array = flag ? getLoopArray(1, 29) : getLoopArray(1, 28)
      break;
    default:
      array = '月份格式不正确,请重新输入!'
  }
  return array;
}
function getNewDateArry(){
  // 当前时间的处理
  var newDate = new Date();
  var year = withData(newDate.getFullYear()),
      mont = withData(newDate.getMonth() + 1),
      date = withData(newDate.getDate()),
      hour = withData(newDate.getHours()),
      minu = withData(newDate.getMinutes()),
      seco = withData(newDate.getSeconds());


  return [year, mont, date, hour, minu, seco];
}
function dateTimePicker(startYear,endYear,date) {
  // 返回默认显示的数组和联动数组的声明
  var dateTime = [], dateTimeArray = [[],[],[],[],[],[]];
  var start = startYear || 1978;
  var end = endYear || 2100;
  // 默认开始显示数据
  var defaultDate = date ? [...date.split(' ')[0].split('-'), ...date.split(' ')[1].split(':')] : getNewDateArry();
  // 处理联动列表数据
  /*年月日 时分秒*/ 
  dateTimeArray[0] = getLoopArray(start,end);
  dateTimeArray[1] = getLoopArray(1, 12);
  dateTimeArray[2] = getMonthDay(defaultDate[0], defaultDate[1]);
  dateTimeArray[3] = getLoopArray(0, 23);
  dateTimeArray[4] = getLoopArray(0, 59);
  dateTimeArray[5] = getLoopArray(0, 59);


  dateTimeArray.forEach((current,index) => {
    dateTime.push(current.indexOf(defaultDate[index]));
  });


  return {
    dateTimeArray: dateTimeArray,
    dateTime: dateTime
  }
}
module.exports = {
  dateTimePicker: dateTimePicker,
  getMonthDay: getMonthDay
}

在这里插入图片描述

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一起Talk Android吧(第四百四十五回:UI控件之TimePicker)

文章目录概念介绍使用方法内容总结各位看官们大家好&#xff0c;上一回中咱们说的例子是"UI控件之DatePicker",这一回中说的例子是"UI控件之TimePicker"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01; 概念介绍 看官们…

字体包体积压缩实践

这篇博客针对axios库的核心代码做一个简要总结 一、关键步骤 1.创建axios对象 axios库导出的对象是一个已经被创建好的axios对象&#xff0c;它本质上是一个方法&#xff0c;可以直接接收一个config配置参数进行请求。在库的入口处&#xff0c;即可看到如下代码&#xff1a;…

非零基础自学Golang 第11章 文件操作 11.1 目录基本操作 11.1.2 创建目录 11.1.3 删除目录

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.1 目录基本操作11.1.2 创建目录11.1.3 删除目录第11章 文件操作 11.1 目录基本操作 11.1.2 创建目录 Go标准库中的os库提供了平台无关性的操作系统功能接口。 创建目录时可以使用os库的如下接口&#xff1…

基于JSP的网络考试系统/在线考试系统的设计与实现

摘 要 网络考试系统是由高校的一个网络考试&#xff0c;按照章程自主开展网络考试系统。网络考试是实施素质教育的重要途径和有效方式&#xff0c;在加强校园文化建设、提高学生综合素质、引导学生适应社会、促进学生成才就业等方面发挥着重要作用&#xff0c;是新形势下有效凝…

[hadoop全分布部署]安装Hadoop、验证Hadoop①

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 个人简介&#xff1a;耐心&#xff0c;自信来源于你强大的思想和知识基础&#xff01;&#xff01; &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;安装Hadoop、验证Hadoop①&#…

【免杀前置课——Windows编程】十九、内存管理—堆,Windows如何管理内存数据?堆内存相关API

内存管理内存管理—堆Windows是如何管理内存数据的?堆内存管理相关API内存管理—堆 每个进程都有自己独立的4G内存空间&#xff0c;高2G操作系统内核使用&#xff0c;低 2G用户使用。 每个进程中我们使用的都是虚拟地址&#xff0c;虚拟机地址到物理地址的转换由操作系统内核…

1. 找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&#xff1a;haystack &qu…

图形学中那些你需要知道的变换概念

前言 在前面的OpenGL ES 教程中&#xff0c;随着教程的进展&#xff0c;我们介绍并使用过很多变换矩阵&#xff0c;但没有系统总结过图形学涉及到的种种变换&#xff0c;因此这篇文章再次回顾“变换”这个主题。 变换 通俗来讲&#xff0c;所谓的变换就像编程中调用一个函数…

非零基础自学Golang 第12章 接口与类型 12.1 接口定义

非零基础自学Golang 文章目录非零基础自学Golang第12章 接口与类型12.1 接口定义12.1.1 接口的定义12.1.2 鸭子类型第12章 接口与类型 在使用接口时&#xff0c;我们经常会遇到这样一个问题&#xff1a;如何判断一个接口的类型&#xff1f;这时&#xff0c;我们就需要学习使用…

Dubbo 4 Dubbo 高级特性 4.1 dubbo-admin 管理平台 4.1.3 dubbo-admin的简单使用

Dubbo 【黑马程序员Dubbo快速入门&#xff0c;Java分布式框架dubbo教程】 4 Dubbo 高级特性 文章目录Dubbo4 Dubbo 高级特性4.1 dubbo-admin 管理平台4.1.3 dubbo-admin的简单使用4.1 dubbo-admin 管理平台 4.1.3 dubbo-admin的简单使用 注意:Dubbo Admin【服务Mock】【服务…

几个字就能生成画作,AIGC的时代即将到来

一、前言 最近AI绘画、聊天、代码生成可以说是刮起了一阵风&#xff0c;席卷了互联网。各大网站都在疯狂刷屏相关的内容&#xff0c;也收到了各界的热烈的关注。无论是AI绘画还是聊天这类的技术都属于同一个领域&#xff1a;人工智能生成内容&#xff08;AIGC&#xff09; 小伙…

SAP UI5 Mock Server 在响应 OData 请求时的单步调试

SAPUI5 中包含的模拟服务器模仿 OData V2 后端调用。 它模拟 OData 提供程序并且完全基于客户端&#xff0c;这意味着不需要与远程主机的网络连接。 它拦截对服务器的 HTTP 调用&#xff0c;并向客户端提供伪造的输出。 所有这些对于数据绑定和 OData 模型的使用都是透明的&…

【Python百日进阶-数据分析】Day131 - plotly柱状图(条形图):go.bar()实例2

文章目录4.2.14 多类别轴型条形图4.2.15 基本水平条形图4.2.16 彩色水平条形图4.2.17 条形图的调色板4.2.18 带直线图的条形图4.3 Dash中的条形图4.2.14 多类别轴型条形图 如果记录道具有x或y阵列&#xff0c;则轴类型将自动推断为多类别。 import plotly.graph_objects as g…

Dubbo 4 Dubbo 高级特性 4.2 Dubbo 常用高级配置 4.2.2 地址缓存 4.2.3 超时

Dubbo 【黑马程序员Dubbo快速入门&#xff0c;Java分布式框架dubbo教程】 4 Dubbo 高级特性 文章目录Dubbo4 Dubbo 高级特性4.2 Dubbo 常用高级配置4.2.2 地址缓存4.2.3 超时4.2 Dubbo 常用高级配置 4.2.2 地址缓存 【一个问题】 如果 注册中心挂了&#xff0c;服务是否可以…

计算机毕业设计ssm+vue基本微信小程序的垃圾分类系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,垃圾分类小程序就是信息时代变革中的产物之一。 任何系统都要遵循系统…

uni-app卖座电影多端开发纪实(四):用户交互

@Tabs切换 + 分页加载 Tabs切换效果图 正在加载效果图 没有更多效果图 @uView组件使用 uView/Tabs的使用 uView/Tabs文档 先搂一眼! uView/loadMore的使用 uView/loadMore文档先搂一眼! @准备工作 电影条目组件封装 components/FilmItem.vue

2022/12/17 mysql 索引基本原理解读

1什么是索引 索引是帮助MySQL 高效获取数据的数据结构&#xff0c;通过使用索引可以在查询的过程中&#xff0c;使用优化隐藏器&#xff0c;提高系统的性能。 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 优势 类似于书籍的目录索引&#xff0c;提高数…

java缓存模块,ehcache/guava cache/自定义spring的CacheManager/自定义缓存

如ehcache,guava cache,redis 也有将ehcache,guava cache分级为单机缓存 将redis分为分布式缓存 ehcache官网:https://www.ehcache.org/ 这里主要说下ehcache和guava cache 单独使用ehcache(当然真正企业开发并不会单独使用ehcache,而是会和Spring或者SpringBoot集成使用) …

什么是建筑中的“光储直柔”

建筑“光储直柔”与零碳电力如影随形&#xff08;2021&#xff09; 《2030 年前碳达峰行动方案》&#xff08;国发〔2021〕23 号&#xff09;中明确提出&#xff1a;提高建筑终端电气化水平&#xff0c;建设集光伏发电、储能、直流配电、柔性用电于一体的“光储直柔”建筑。到 …

广告、推荐模型加速策略整理

当我们尝试那些开箱即用的GPU服务时&#xff0c;很快意识到在经济高效地利用GPU运行推荐模型服务之前需要对其优化。我们首先使用分析工具来分析在模型推理过程中发生了什么&#xff0c;在仔细观察分析结果时&#xff0c;我们注意到时间线上有大量的小CUDA Kernel在执行。 这是…