python: excel假期时间提取统计

# encoding: utf-8
# 版权所有 2023 涂聚文有限公司
# 许可信息查看:
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 311
# Datetime  : 2023/9/3 7:04
# User      : geovindu
# Product   : PyCharm
# Project   : LukfookLeaveCalculation
# File      : EmpLoyeeHolidaysGet.py
# explain   : 学习import sys
import os
import Common.Utils
import Model.Holidayclass EmpLoyeeHolidaysGet(object):"""抽取需要的数据"""def getYear(self,strsource):""":param strsource::return:"""refloat = 0if (strsource != None):if ("年" in strsource):refloat=Common.Utils.Utils.getYear(strsource)return refloatdef getMonth(self, strsource):""":param strsource::return:"""refloat = 0if (strsource != None):if ("月" in strsource):refloat = Common.Utils.Utils.getMonth(strsource)return refloatdef getDay(self, strsource):""":param strsource::return:"""refloat = 0if (strsource != None):if ("日" in strsource):refloat = Common.Utils.Utils.getDay(strsource)return refloatdef getHolidays(self,strsource):"""獲得假期限列表:param strsource::return:"""hday=[]if (strsource != None):if("星期" not in strsource):if("nan" not in strsource):spstr = strsource.split(' ')  # 有两个,有换行符,两个假期,一定要这换行符  NaNif (len(spstr) > 1):for i in range(len(spstr)):sk = spstr[i]#print("for sk", sk)hd = Model.Holiday.Holiday()hd=EmpLoyeeHolidaysGet.checkHoliday(self,sk)hday.append(hd)elif (len(spstr) == 1):sk = spstr[0]#print("sk",sk)hd = Model.Holiday.Holiday()hd = EmpLoyeeHolidaysGet.checkHoliday(self,sk)hday.append(hd)else:hday = []else:hday = []return hdaydef checkHoliday(self,strsource):"""检测是什么假期:param strsource::return:"""hd=Model.Holiday.Holiday()#print("chek")if ("例休" in strsource):#print("cehck例休")hd.HolidayId=1hd.HolidayName="例休"hd.WorkTime=Common.Utils.Utils.getRegularHoliday(strsource)if ("特假" in strsource):hd.HolidayId=2hd.HolidayName="特假"hd.workTime=Common.Utils.Utils.getSpecialLeave(strsource)if ("補休" in strsource):hd.HolidayId=3hd.HolidayName="補休"hd.workTime = Common.Utils.Utils.getDeferredHoliday(strsource)if ("加班" in strsource):hd.HolidayId=4hd.HolidayName="加班"hd.workTime = Common.Utils.Utils.getOvertime(strsource)if ("事假" in strsource):hd.HolidayId=5hd.HolidayName="事假"hd.workTime = Common.Utils.Utils.getPersonalLeave(strsource)if ("年假" in strsource):hd.HolidayId = 6hd.HolidayName = "年假"hd.workTime = Common.Utils.Utils.getAnnualLeave(strsource)if ("病假" in strsource):hd.HolidayId = 7hd.HolidayName = "病假"hd.workTime = Common.Utils.Utils.getSickLeave(strsource)if ("育兒假" in strsource):hd.HolidayId = 8hd.HolidayName = "育兒假"hd.workTime = Common.Utils.Utils.getChildcareLeave(strsource)if ("遲到" in strsource):hd.HolidayId = 9hd.HolidayName = "遲到"hd.workTime = Common.Utils.Utils.getLateTime(strsource)return  hddef getEmplee(self,Empleelist,id:int):"""從員工列表中找到對應ID員工的信息:param Empleelist::param id::return:"""ee=[]for em in Empleelist:if(em.EmployeeId==id):ee.append(em.EmployeeNo)ee.append(em.EmployeeDep)ee.append(em.EmployeeName)return eedef getHoliday(self,holidays):"""返回假期:param holidays::return:"""getname=""if(len(holidays)>0):for hd in holidays:if(hd.HolidayId==1):getname=getname+hd.HolidayName+str(hd.WorkTime)+"天 "elif(hd.HolidayId==9):getname = getname + hd.HolidayName + str(hd.WorkTime) + "分钟 "else:getname = getname + hd.HolidayName + str(hd.WorkTime) + "小时 "return getnamedef getHolidayAnnualLeave(self,holidays):"""返回年假数:param holidays::return:"""getsum=0if(len(holidays)>0):for hd in holidays:if(hd.HolidayId==6):getsum=getsum+hd.WorkTime#print("sum:",getsum,hd.HolidayName)return getsumdef getHolidayOvertime(self,holidays):"""返回加班数:param holidays::return:"""getsum=0if(len(holidays)>0):for hd in holidays:if(hd.HolidayId==4):getsum=getsum+hd.WorkTime#print("sum:",getsum,hd.HolidayName)return getsumdef getHolidayDeferred(self,holidays):"""返回補休数:param holidays::return:"""getsum=0if(len(holidays)>0):for hd in holidays:if(hd.HolidayId==3):getsum=getsum+hd.WorkTime#print("sum:",getsum,hd.HolidayName)return getsumdef getEmpleeIdAnnualLeave(self, id:int,listEmp:list):"""年假ID:param self::param listEmp::return:"""annual=0#print(listEmp)for sd in listEmp:#print(sd[0],sd[1])if(sd[0]==id):#print(sd[1])annual=annual+sd[1]return annualdef getEmpleeIdOvertime(self, id:int,listEmp:list):"""加班时间ID:param self::param listEmp::return:"""annual=0#print(listEmp)for sd in listEmp:#print(sd[0],sd[1])if(sd[0]==id):#print(sd[1])annual=annual+sd[1]return annualdef getEmpleeIdeferred(self, id:int,listEmp:list):"""调休时间ID:param self::param listEmp::return:"""annual=0#print(listEmp)for sd in listEmp:#print(sd[0],sd[1])if(sd[0]==id):#print(sd[1])annual=annual+sd[1]return annual
# This is a sample Python script.
# encoding: utf-8
# 版权所有 2023 涂聚文有限公司
# 许可信息查看:
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 311
# Datetime  : 2023/9/2 20:20
# User      : geovindu
# Product   : PyCharm
# Project   : LukfookLeaveCalculation
# File      : main.py
# explain   : 学习
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.import xlrd
import xlwt
import xlwings as xw
import xlsxwriterimport openpyxl as openws
import pandas as pd
import numpy as np
import pandasql
import os
import sys
import Common.Utils
import BLL.EmpLoyeeHolidaysGet
import Model.Employee
import Model.HolidayList
from openpyxl import load_workbookdef print_hi(name):# Use a breakpoint in the code line below to debug your script.print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('PyCharm')unstr=Common.Utils.Utils()strtest="年假2小時 事假0.5小時"  # 换行符#strtest-strtest.replace('_x000D_', ' ', regex=True)#strtest = "NaN"spstr = strtest.split(" ")thbll = BLL.EmpLoyeeHolidaysGet.EmpLoyeeHolidaysGet()tt=thbll.getHolidays(spstr[0])print("tt",tt[0].WorkTime,spstr)dataframe1 = pd.read_excel('2023年7月.xlsx')#print(dataframe1)#for idx, data in dataframe1.iterrows():#print("[{}]: {}".format(idx, data))# 第1列为日期,其他列是员工对应的列的考勤print("*************")print(dataframe1.index)print("*************")print(dataframe1.shape) #行列datarowcol=dataframe1.shapeprint("行:",datarowcol[0],",列:",datarowcol[1])excelRows=datarowcol[0]excelColumns=datarowcol[1]print("*********列标题****")print(dataframe1.columns) #第一行标题   pandas.core.indexes.base.Indextitls=dataframe1.columns.to_list()print(titls)print("标题:",titls[1])year=thbll.getYear(titls[1])print("*************",year)dmps = []# 姓名,工号,序号,部门 0行至3行为员工资料  第一行为标题,不算行的内容 可以切片方式GET数据#序号idlist =[]dataId = dataframe1.loc[0:0]for idx, datadd in dataId.iterrows():print("[{}]: {}".format(idx, datadd))idlist=datadd.to_list()for idd in range(1,len(idlist)):#employvee=Model.Employee.employee()#employvee.EmployeeId=idd#dmps.append(employvee)print(idd)print("*******序号******")#工号nolist=[]dataNo = dataframe1.loc[1:1]for idx, dataoo in dataNo.iterrows():print("[{}]: {}".format(idx, dataoo))nolist=dataoo.to_list()print("*******工号******")#部门deplist=[]dataDep = dataframe1.loc[2:2]for idx, datapp in dataDep.iterrows():print("[{}]: {}".format(idx, datapp))deplist=datapp.to_list()print("*******部门******")#姓名namelist=[]dataName = dataframe1.loc[3:3]for idx, datann in dataName.iterrows():print("[{}]: {}".format(idx, datann))namelist=datann.to_list()print("*******姓名******")for i in range(1,len(namelist)):employvee = Model.Employee.employee()employvee.EmployeeId=idlist[i]employvee.EmployeeNo=nolist[i]employvee.EmployeeName=namelist[i]employvee.EmployeeDep=deplist[i]dmps.append(employvee)for ob in dmps:print(ob.EmployeeId,ob.EmployeeNo,ob.EmployeeName,ob.EmployeeDep)#data1 = dataframe1.loc[0:3]#print(type(data1))#print(data1)#for idx, data in data1.iterrows():#print("[{}]: {}".format(idx, data))#print("*************")AnnualLeave=0Overtime=0DeferredHoliday=0SpecialLeave=0PersonalLeave=0SickLeave=0ChildcareLeave=0LateTime=0RegularHoliday=0# 内容mon=0day=0getdate=[]getHolidays=[]readrows=(excelRows-1)-3  #索此值从零开始,所以总数减一,再减三行统计的data4 = dataframe1.loc[4:readrows]  #第四行开始内空getrow=1emplist=[]for idx, datavalue in data4.iterrows():#strnum=Common.Utils.Utils.getAnnualLeave(data)employs = Model.Employee.employee()print("[{}]: {}".format(idx, datavalue))slist=datavalue.tolist()hbll=BLL.EmpLoyeeHolidaysGet.EmpLoyeeHolidaysGet() #病假4小時_x000D_事假0.5小時 未处理#print(slist) #这是读取第1列的日期数据for i in range(0, 1):strvalue = str(slist[i])print("get value:", strvalue.replace('nan', ''), type(strvalue))mon=hbll.getMonth(strvalue)day=hbll.getDay(strvalue)print("*******时间************",mon,day)getdate.append(str(year)+'-'+str(mon)+'-'+str(day))print(slist)hid=1for i in range(1,len(slist)):getdd = Model.HolidayList.HolidayList()getdd.HolidayDate = str(year) + '-' + str(mon) + '-' + str(day)#strvalue=str(slist[i]).replace(r'\s+|\\n', ' ', regex=True)  _x000D_#isnan=np.isnan(slist[i])#if(isnan):strvalue = str(slist[i]).replace('_x000D_', ' ')  # 规换单元格的换行符,否则处理不了正确数据#strvalue = str(slist[i]).replace('nan', ' ')#print("get value:",strvalue.replace('nan',''),type(strvalue))strnums = hbll.getHolidays(strvalue)  # float strprint("hid:",hid)getdd.HolidayEmpId = hidif(len(strnums)>0):for sn in range(len(strnums)):print("str:",strnums[sn].HolidayId,strnums[sn].HolidayName,strnums[sn].WorkTime)if strnums[sn].HolidayId==6:AnnualLeave=AnnualLeave+strnums[sn].WorkTimeif strnums[sn].HolidayId == 4:Overtime=Overtime+strnums[sn].WorkTimeif strnums[sn].HolidayId == 3:DeferredHoliday = DeferredHoliday + strnums[sn].WorkTimeif strnums[sn].HolidayId == 2:SpecialLeave=SpecialLeave+strnums[sn].WorkTimeif strnums[sn].HolidayId == 5:PersonalLeave=PersonalLeave+strnums[sn].WorkTimeif strnums[sn].HolidayId == 7:SickLeave=SickLeave+strnums[sn].WorkTimeif strnums[sn].HolidayId == 8:ChildcareLeave=ChildcareLeave+strnums[sn].WorkTimeif strnums[sn].HolidayId == 9:LateTime=LateTime+strnums[sn].WorkTimeif strnums[sn].HolidayId == 1:RegularHoliday=RegularHoliday+strnums[sn].WorkTimegetdd.Holdays = strnumselse:print("0")getdd.Holdays =[]hid+=1getHolidays.append((getdd))employs.EmployeeHolidays=getHolidaysemploys.EmployeeActiveDate=getdategetrow+=1# getHolidays.append(strnums)print("类型:", type(datavalue))emplist.append((employs))flist=[]getIdAnnualLeave=[]fdata=('ID','工号','部门','姓名','日期','假期')flist.append(fdata)print("date:",getdate,len(getdate))print(len(getHolidays))#for dddd in emplist:#print(dddd.EmployeeId,len(dddd.EmployeeHolidays))  #emplist[0].EmployeeHolidays:for sd in emplist[0].EmployeeHolidays:fdata=(sd.HolidayEmpId,thbll.getEmplee(dmps,sd.HolidayEmpId)[0],thbll.getEmplee(dmps,sd.HolidayEmpId)[1],thbll.getEmplee(dmps,sd.HolidayEmpId)[2],sd.HolidayDate,thbll.getHoliday(sd.Holdays))flist.append(fdata)#ananuaint=thbll.getEmpleeIdAnnualLeave(sd.HolidayEmpId,emplist[0].EmployeeHolidays)#getIdAnnualLeave.append(ananuaint)print(sd.HolidayEmpId,thbll.getEmplee(dmps,sd.HolidayEmpId)[0],thbll.getEmplee(dmps,sd.HolidayEmpId)[1],thbll.getEmplee(dmps,sd.HolidayEmpId)[2],sd.HolidayDate,thbll.getHoliday(sd.Holdays))print("**************")print(getIdAnnualLeave)print("*************",year,"年",mon,"月","考勤合计*************")#,day,"日"print("年假合计:",AnnualLeave,"小时,加班合计:",Overtime,"小时,补休合计:",DeferredHoliday,"小时,特假合计:",SpecialLeave,"小时")print("事假合计",PersonalLeave,"小时,病假合计:",SickLeave,"小时,迟到合计:",LateTime,"分钟,育儿假合计:",ChildcareLeave,"小时")print("例休:",RegularHoliday,"天")print("*****************************************************************")#年假for sd in emplist[0].EmployeeHolidays:ananuaint=[sd.HolidayEmpId,thbll.getHolidayAnnualLeave(sd.Holdays)]getIdAnnualLeave.append(ananuaint)print(getIdAnnualLeave)dd=thbll.getEmpleeIdAnnualLeave(1,getIdAnnualLeave)print("年假 id=1 sum:",dd)#加班getIDOvertimm=[]for sd in emplist[0].EmployeeHolidays:overtimeint=[sd.HolidayEmpId,thbll.getHolidayOvertime(sd.Holdays)]getIDOvertimm.append(overtimeint)print(getIDOvertimm)dov=thbll.getEmpleeIdOvertime(1,getIDOvertimm)print("加班 id=1 sum:",dov)#补休getIdDeferred=[]for sd in emplist[0].EmployeeHolidays:defint=[sd.HolidayEmpId,thbll.getHolidayDeferred(sd.Holdays)]getIdDeferred.append(defint)print(getIdDeferred)doef=thbll.getEmpleeIdeferred(1,getIdDeferred)print("补休 id=1 sum:",doef)''''''taum= []tva=("名称","合计")taum.append(tva)tva=("年假", str(AnnualLeave) + "小时")taum.append(tva)tva=("加班",str(Overtime)+"小时")taum.append(tva)tva=("补休",str(DeferredHoliday)+"小时")taum.append(tva)tva=("特假",str(SpecialLeave)+"小时")taum.append(tva)tva=("事假",str(PersonalLeave)+"小时")taum.append(tva)tva=("病假",str(SickLeave)+"小时")taum.append(tva)tva=("迟到",str(LateTime)+"分钟")taum.append(tva)tva=("育儿假",str(ChildcareLeave)+"小时")taum.append(tva)tva=("例休",str(RegularHoliday)+"天")taum.append(tva)sheetname1 = str(year) + "年" + str(mon) + "月假期"writer = pd.ExcelWriter(sheetname1+"方案.xlsx")  # 这里是创建了可写入不同sheet的文件text1 = pd.DataFrame(flist,columns=['ID','工号','部门','姓名','日期','假期'])text1.to_excel(writer, sheet_name=sheetname1,header=0, index=False)  # sheet命名为sheetname2=str(year)+"年"+str(mon)+"月合计"text2 = pd.DataFrame(taum) #,columns=['名称','合计']text2.to_excel(writer, sheet_name=sheetname2, header=0, index=False)  # sheet命名为text3=dataframe1;sheetname3=str(year) + "年" + str(mon) + "月明細"text3.to_excel(writer,sheet_name=sheetname3, header=0, index=False)#writer.sheets.update()writer.close()dataframe2 = openws.load_workbook("2023年7月.xlsx")# Define variable to read sheetsheet = dataframe2.activesetrow=datarowcol[0] #总共行setcol=datarowcol[1] #总共列#每个人的合计for idd in range(1, len(idlist)):sheet.cell(row=setrow-1, column=1+idd).value = str(thbll.getEmpleeIdAnnualLeave(idd,getIdAnnualLeave)) + "小时"sheet.cell(row=setrow - 0, column=1+idd).value = str(thbll.getEmpleeIdOvertime(idd,getIDOvertimm))+"小时"sheet.cell(row=setrow +1, column=1+idd).value = str(thbll.getEmpleeIdeferred(idd,getIdDeferred))+"小时"#合部汇总sheet.cell(row=setrow+2, column=1).value = "年假汇总"sheet.cell(row=setrow +3, column=1).value = "加班汇总"sheet.cell(row=setrow +4, column=1).value = "补休汇总"sheet.cell(row=setrow+2, column=2).value = str(AnnualLeave) + "小时"sheet.cell(row=setrow +3, column=2).value = str(Overtime)+"小时"sheet.cell(row=setrow +4, column=2).value = str(DeferredHoliday)+"小时"dataframe2.save(r'demo.xlsx')# Iterate the loop to read the cell values#for row in range(0, dataframe2.max_row):#for col in dataframe2.iter_cols(1, dataframe2.max_column):#print(col[row].value)# a single cell#v1 = xw.range("A1:A7").value#v2 = xw.range("F5").value#print("Result:", v1)# https://www.geeksforgeeks.org/how-to-add-one-row-in-an-existing-pandas-dataframe/ 新添加一行
# See PyCharm help at https://www.jetbrains.com/help/pycharm/

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

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

相关文章

Redis 数据一致性方案的分析与研究

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ 一般的业务场景都是读多写少的,当客户端的请求太多,对数据库的压力越来越大,引入缓存来降低数据库的压力是必然选择,目前业内…

常用数据库的 API - 开篇

API API 这个词在大多数人看来可能和 CNS 差不多,前者天天听说就是用不上,后者天天读就是发不了。 不过,通过今天的一个简短介绍,今后 API 这个东西你就用上了,因为在文章最后我将会展示一个最最基础且高频的 API 使…

【CSS3】

文章目录 1.简介2.边框3.圆角4.背景5.渐变CSS3 径向渐变6.文本效果7.字体8.2D转换9.3D转换10.过渡11.动画12.多列13.用户界面14.按钮 ​ 1.简介 模块 CSS3 被拆分为"模块"。旧规范已拆分成小块,还增加了新的。 一些最重要 CSS3 模块如下: 选…

时序数据库

时序数据库在许多应用领域中得到广泛应用,包括物联网(IoT)监控、应用性能监控(APM)、日志分析、金融数据分析、工业自动化和能源管理等。一些知名的开源和商业时序数据库包括InfluxDB、Prometheus、OpenTSDB、TimescaleDB和Kdb+等。 上图是一个典型的时序数据示意图,由…

慢查询SQL如何优化

一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录,它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…

网络原理(一)网络基础,包括IP ,网络相关的定义

网络基础,包括IP ,网络相关的定义 网络基础冲突域广播域DNSNATNAPT 网络基础 以下图片是书上的网图。 什么是IP地址? IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。P地址是…

PHP自己的框架2.0设置常量并绑定容器(重构篇三)

目录 1、设置常量并绑定容器 2、容器增加设置当前容器的实例和绑定一个类实例当容器 3、将常量绑定到容器中 4、运行效果 1、设置常量并绑定容器 2、容器增加设置当前容器的实例和绑定一个类实例当容器 //设置当前容器的实例public static function setInstance($instance){…

SW的stp文件转成CAD格式文件学习笔记

SW的stp文件转成CAD格式文件 文章目录 SW的stp文件转成CAD格式文件另存为part文件(零件图)另存为CAD文件 另存为part文件(零件图) 如图一个STP文件,右上角标注是什么文件呢 另存为零件图,即另存为part …

Python语言概述

​ 视频版教程 Python3零基础7天入门实战视频教程 Python作为一门非常流行的高级编程语言,自从22年开始,TIOBE编程语言排行榜Python一直排第一。 Python简洁高效,丰富的应用场景,受到广大程序员,科研工作者的喜爱。 …

基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 [Rr,Cc] size(Image1);% 获取 Image1 矩阵的大小(行数和列数) % 创…

哨兵1号(Sentinel-1)SAR卫星介绍

1. 哥白尼计划 说起欧空局的哨兵1号,就不得不先说一下欧空局的“哥白尼计划”。 欧空局的哥白尼计划(Copernicus Programme)是欧空局与欧盟合作的一项极其重要的地球观测计划。该计划旨在提供免费开放的、可持续的地球观测数据&#xff0c…

服务器时间正确,Java程序时区不对问题解决

服务器执行date命令显示时间正确 执行timedatectl status命令结果如下: 看起来是Time zone没有设置好,但是登录另外一台正常的服务器,执行timedatectl status也是一样的 直接写一个简单的Java程序TestTimeZone.java: import ja…

【linux基础(六)】Linux中的开发工具(中)--gcc/g++

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到开通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux中的开发工具 1. 前言2.…

selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?

前言 相信大家在使用selenium做网页自动化时,会遇到如下这样的一个场景: 在你使用get访问某一个网址时,会在页面中弹出如上图所示的弹出框。 首先想到是利用Alert类来处理它。 然而,很不幸,Alert类处理的结果就是没…

LeetCode——动态规划篇(二)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 343. 整数拆分 - 力扣(LeetCode) 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整…

【转存】从 JMM 透析 volatile 与 synchronized 原理

在面试、并发编程、一些开源框架中总是会遇到 volatile 与 synchronized 。synchronized 如何保证并发安全?volatile 语义的内存可见性指的是什么?这其中又跟 JMM 有什么关系,在并发编程中 JMM 的作用是什么,为什么需要 JMM&#…

ArcGIS 10.2安装教程!

软件介绍:ArcGIS是一款专业的电子地图信息编辑和开发软件,提供一种快速并且使用简单的方式浏览地理信息,无论是2D还是3D的信息。软件内置多种编辑工具,可以轻松的完成地图生产全过程,为地图分析和处理提供了新的解决方…

PPT 生成整数序列字典序的r-组合算法

生成整数序列字典序的r-组合算法 一、PPT效果展示二、问题2.1 简述2.2 算法简述2.3 例子 三、PPT实现 一、PPT效果展示 二、问题 2.1 简述 给定一个整数序列 (1,2,3,…n),输出其所有字典序的r-组合,注意事项&#xf…

QT子线程或自定义类操作访问主界面UI控件的几种方法

前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 将ui指针公开后直接访问 (1)例如有个自己定义的类CustomCl…

【Redis】深入探索 Redis 的数据类型 —— 列表 List

文章目录 一、List 类型介绍二、List 类型相关命令2.1 LPUSH 和 RPUSH、LPUSHX 和 RPUSHX2.2 LPOP 和 RPOP、BLPOP 和 BRPOP2.3 LRANGE、LINDEX、LINSERT、LLEN2.4 列表相关命令总结 三、List 类型内部编码3.1 压缩列表(ziplist)3.2 链表(lin…