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

农经权利用mdb与dbf生成公示表

1、软件用到数据

access数据库需要能打开编辑,且确保安装了AccessDatabaseEngine。安装软件可以看文章:【ArcGIS技巧】都数据入库了你的Access(mdb)还没安装好吗?

软件要运行,需要的两个数据(最好是通过质检的数据):数据1为mdb权属数据,用到的表格为CBF_JTCY、CBDKXX;数据2为地块的矢量文件的dbf。

至于为什么用到承包方家庭成员表、承包方地块信息表、地块.dbf,公式表的字段都是来源于这些基础表格数据。

2、软件逻辑与代码

软件研发逻辑分两部分:1、界面逻辑;2、执行提取逻辑。

界面实现:用QT5将主界面窗口绘制好,包含4个按钮、3个输入框。

main.py代码如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'publictable.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.import sys,os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog,QMessageBox
from ScPublic import Scpublicclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(468, 180)self.pushButton = QtWidgets.QPushButton(Form)self.pushButton.setGeometry(QtCore.QRect(10, 10, 81, 31))self.pushButton.setObjectName("pushButton")self.lineEdit = QtWidgets.QLineEdit(Form)self.lineEdit.setGeometry(QtCore.QRect(100, 10, 361, 31))self.lineEdit.setObjectName("lineEdit")self.pushButton_2 = QtWidgets.QPushButton(Form)self.pushButton_2.setGeometry(QtCore.QRect(10, 50, 81, 31))self.pushButton_2.setObjectName("pushButton_2")self.lineEdit_2 = QtWidgets.QLineEdit(Form)self.lineEdit_2.setGeometry(QtCore.QRect(100, 50, 361, 31))self.lineEdit_2.setObjectName("lineEdit_2")self.pushButton_3 = QtWidgets.QPushButton(Form)self.pushButton_3.setGeometry(QtCore.QRect(10, 90, 81, 31))self.pushButton_3.setObjectName("pushButton_3")self.lineEdit_3 = QtWidgets.QLineEdit(Form)self.lineEdit_3.setGeometry(QtCore.QRect(100, 90, 361, 31))self.lineEdit_3.setObjectName("lineEdit_3")self.pushButton_4 = QtWidgets.QPushButton(Form)self.pushButton_4.setGeometry(QtCore.QRect(370, 140, 91, 31))self.pushButton_4.setObjectName("pushButton_4")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "生成公示表"))self.pushButton.setText(_translate("Form", "打开MDB路径"))self.pushButton_2.setText(_translate("Form", "打开DBF路径"))self.pushButton_3.setText(_translate("Form", "存储表格路径"))self.pushButton_4.setText(_translate("Form", "生成公示表"))class PublicTable(QtWidgets.QWidget):def __init__(self):super().__init__()self.ui = Ui_Form()self.ui.setupUi(self)# 连接按钮点击信号self.ui.pushButton.clicked.connect(self.open_source_mdb)self.ui.pushButton_2.clicked.connect(self.open_source_dbf)self.ui.pushButton_3.clicked.connect(self.save_target_excel)# 绑定开始按钮事件self.ui.pushButton_4.clicked.connect(self.start_public)def open_source_mdb(self):"""打开源mdb文件"""file_path, _ = QFileDialog.getOpenFileName(self,"选择源数据库文件","","Access数据库文件 (*.mdb);;所有文件 (*)")if file_path:self.ui.lineEdit.setText(file_path)def open_source_dbf(self):"""打开源mdb文件"""file_path, _ = QFileDialog.getOpenFileName(self,"选择源地块数据","","DBF文件 (*.dbf);;所有文件 (*)")if file_path:self.ui.lineEdit_2.setText(file_path)def save_target_excel(self):"""保存目标mdb文件"""file_path, selected_filter= QFileDialog.getSaveFileName(self,"保存目标表文件","","Excel工作簿 (*.xlsx);;Excel97-2003工作簿 (*.xls);;所有文件 (*)",options=QFileDialog.Options())if file_path:# 根据选择的过滤器确定扩展名if selected_filter == "Excel97-2003工作簿 (*.xls)":ext = ".xls"elif selected_filter == "Excel工作簿 (*.xlsx)":ext = ".xlsx"else:ext = None  # 所有文件或其他情况不处理扩展名if ext:# 分割文件名和原扩展名base_name, old_ext = os.path.splitext(file_path)# 替换为新的扩展名file_path = base_name + extself.ui.lineEdit_3.setText(file_path)def validate_inputs(self):"""校验三个输入框的非空性"""inputs = [(self.ui.lineEdit, "源数据库路径"),(self.ui.lineEdit_2, "源地块数据路径"),(self.ui.lineEdit_3, "存储表")]for line_edit, field_name in inputs:text = line_edit.text().strip()  # 去除首尾空格if not text:self.highlight_empty_field(line_edit)QMessageBox.warning(self, "输入错误",f"{field_name}不能为空!")return Falsereturn Truedef highlight_empty_field(self, widget):"""高亮空输入框"""widget.setStyleSheet("background-color: #FFE4E1;")QtCore.QTimer.singleShot(1000, lambda: widget.setStyleSheet(""))def start_public(self):"""开始提取的主逻辑"""if not self.validate_inputs():return# 获取有效参数source_mdb = self.ui.lineEdit.text().strip()source_dbf = self.ui.lineEdit_2.text().strip()save_excel = self.ui.lineEdit_3.text().strip()try:sc = Scpublic(source_mdb, source_dbf, save_excel)sc.scpublicexcel()# TODO 添加实际的数据库操作代码QMessageBox.information(self, "完成", "表格生成成功!")except Exception as e:QMessageBox.critical(self, "错误", f"生成失败:{str(e)}")
if __name__ == "__main__":app = QtWidgets.QApplication(sys.argv)converter =PublicTable()converter.show()sys.exit(app.exec_())

生成公示表步骤很多,主要原因是地块数目与家庭成员数目不一致。1、根据源数据形成字段列表,2、将具体的列表字段扩充数据。ScPublic.py具体代码如下。

dict_gxdm={'01': '本人', '02': '户主', '10': '配偶', '11': '夫', '12': '妻', '20': '子', '21': '独生子', '22': '长子', '23': '次子', '24': '三子', '25': '四子', '26': '五子', '27': '养子或继子', '28': '女婿', '29': '其他儿子', '30': '女', '31': '独生女', '32': '长女', '33': '二女', '34': '三女', '35': '四女', '36': '五女', '37': '养女', '38': '儿媳', '39': '其他女儿', '40': '孙子、孙女或外孙子、外孙女', '41': '孙子', '42': '孙女', '43': '外孙子', '44': '外孙女', '45': '孙媳妇或外孙媳妇', '46': '孙女婿或外孙女婿', '47': '曾孙子或曾外孙子', '48': '曾孙女或曾外孙女', '49': '其他孙子或外孙子', '50': '父母', '51': '父亲', '52': '母亲', '53': '公公', '54': '婆婆', '55': '岳父', '56': '岳母', '57': '养母或继父', '58': '继父或养母', '59': '其他父母关系', '60': '祖母或外祖母', '61': '祖父', '62': '祖母', '63': '外祖父', '64': '外祖母', '65': '配偶的祖父母或外祖父母', '66': '曾祖父', '67': '曾祖母', '68': '配偶的曾祖父母', '69': '其他祖父母或外祖父母关系', '70': '兄弟姐妹', '71': '兄', '72': '嫂', '73': '弟', '74': '弟媳', '75': '姐姐', '76': '姐夫', '77': '妹妹', '78': '妹夫', '79': '其他兄弟姐妹', '80': '其他', '81': '伯父', '82': '伯母', '83': '叔父', '84': '婶母', '85': '舅父', '86': '舅母', '87': '姨父', '88': '姨母', '89': '姑父', '90': '姑母', '91': '堂兄弟、堂姐妹', '92': '表兄妹、表姐妹', '93': '侄子', '94': '侄女', '95': '外甥', '96': '外甥女', '97': '其他亲属', '99': '非亲属'}
dict_xb={'1':'男','2':'女'}
dict_dklb={'10':'承包地块','21':'自留地','22':'机动地','23':'开荒地','99':'其他集体土地'}
dict_qdfs={'100':'承包','110':'家庭承包','120':'其他方式承包','121':'招标','122':'拍卖','123':'公开协商','129':'其他方式','200':'转让','300':'互换','900':'其他方式'}
dict_tdyt={'1':'种植业','2':'林业','3':'畜牧业','4':'渔业','5':'非农业用途'}
dict_sfjbnt={'1':'是','2':'否'}
import pyodbc
import pandas as pd
from dbfread import DBFclass Scpublic:def __init__(self,source_mdb,source_dbf,save_excel):self.source_mdb=source_mdbself.source_dbf=source_dbfself.save_excel=save_exceldef scpublicexcel(self):# 读取MDB中CBF_JTCY、CBDKXX两张表conn_str = (r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+self.source_mdb+r";")conn = pyodbc.connect(conn_str)df2 = pd.read_sql("SELECT * FROM CBDKXX", conn)  # 读取表CBDKXX(表2)sortd_df2 = df2.sort_values(by='CBFBM')  # 对表格以CBFBM进行升序排列t2_qdfs = sortd_df2['CBJYQQDFS'].values.tolist()  # 取得承包方式t2_htmj = sortd_df2['HTMJM'].values.tolist()  # 确权(合同)面积亩t2_dkbm = sortd_df2['DKBM'].values.tolist()  # 地块编码t2_cbfbm = sortd_df2['CBFBM'].values.tolist()  # 承包方编码# 建立DKBM与CBFBM映射表dict_dkbmtocbfbm = dict(zip(t2_dkbm, t2_cbfbm))# 建立DKBM与HTMJM映射表dict_dkbmtohtmj = dict(zip(t2_dkbm, t2_htmj))# 建立DKBM与CBJYQQDFS映射表dict_dkbmtoqdfs = dict(zip(t2_dkbm, t2_qdfs))# 集体地需要增加一个CBFBMlast_cbfbm = str(int(t2_cbfbm[-1]) + 1)df1 = pd.read_sql("SELECT * FROM CBF_JTCY", conn)  # 先读取表CBF_JTCY(表1)newrow = {'CBFBM': last_cbfbm, 'CYXM': 'XXX', 'CYXB': '1', 'CYZJLX': '1', 'CYZJHM': 'XXXXXXXXXXXXXXXXXX','YHZGX': '02', 'CYBZ': '', 'SFGYR': '1', 'CYBZSM': ''}df1.loc[len(df1)] = newrowsortd_df1 = df1.sort_values(by=['CBFBM', 'YHZGX'], ascending=True)  # 对表格以CBFBM进行升序排列t1_cbfbm = sortd_df1['CBFBM'].values.tolist()  # 承包方编码t1_name = sortd_df1['CYXM'].values.tolist()  # 成员姓名t1_xb = sortd_df1['CYXB'].values.tolist()  # 成员性别t1_yhzgx = sortd_df1['YHZGX'].values.tolist()  # 与户主关系t1_zjh = sortd_df1['CYZJHM'].values.tolist()  # 身份证号码conn.close()# 读取DBF中DK.dbf一张表table = DBF(self.source_dbf, encoding='utf-8')table_list = [record for record in table]df3 = pd.DataFrame(table_list)  # 读取表DK(表3)# 先给DataFrame添加一列CBFBMdkbm_fz = df3['DKBM'].values.tolist()  # 辅助的地块编码scmjm_fz = df3['SCMJM'].values.tolist()  # 辅助的实测面积for i in range(len(dkbm_fz)):try:dict_dkbmtocbfbm[dkbm_fz[i]]except:dict_dkbmtocbfbm[dkbm_fz[i]] = last_cbfbmdict_dkbmtohtmj[dkbm_fz[i]] = scmjm_fz[i]dict_dkbmtoqdfs[dkbm_fz[i]] = '100'add_cbfbm = list(dict_dkbmtocbfbm[i] for i in dkbm_fz)  # 增加的承包方编码列表df3.insert(len(df3.columns), 'CBFBM', add_cbfbm)  # 在末尾添加上一列sortd_df3 = df3.sort_values(by=['CBFBM', 'DKBM'], ascending=True)  # 对表格以DKBM进行升序排列t3_dkmc = sortd_df3['DKMC'].values.tolist()  # 地块名称t3_dkbm = sortd_df3['DKBM'].values.tolist()  # 地块编码t3_dkdz = sortd_df3['DKDZ'].values.tolist()  # 东至t3_dkxz = sortd_df3['DKXZ'].values.tolist()  # 西至t3_dknz = sortd_df3['DKNZ'].values.tolist()  # 南至t3_dkbz = sortd_df3['DKBZ'].values.tolist()  # 北至t3_dklb = sortd_df3['DKLB'].values.tolist()  # 地块类别t3_tdyt = sortd_df3['TDYT'].values.tolist()  # 土地用途t3_tdlylx = sortd_df3['TDLYLX'].values.tolist()  # 地类t3_sfjbnt = sortd_df3['SFJBNT'].values.tolist()  # 是否基本农田t3_scmjm = sortd_df3['SCMJM'].values.tolist()  # 实测面积t3_cbfbm = sortd_df3['CBFBM'].values.tolist()  # 承包方编码# 先统计出每个承包方编码有多少个地块、多少个家庭成员num_dk = {}num_jtcy = {}cbfbm_list = list(set(t1_cbfbm))# 升序排列cbfbm_list.sort()# 让每个承包方编码对应一个户主dict_cbfbmtocbfxm = {}for i in range(len(t1_yhzgx)):if t1_yhzgx[i] == '02':dict_cbfbmtocbfxm[t1_cbfbm[i]] = t1_name[i]# 每个承包方编码需要的行数,bianma_row = {}for i in range(len(cbfbm_list)):k1 = t1_cbfbm.count(cbfbm_list[i])  # 家庭成员数k2 = t3_cbfbm.count(cbfbm_list[i])  # 地块数num_dk[cbfbm_list[i]] = k2  # 地块数字典num_jtcy[cbfbm_list[i]] = k1  # 家庭成员书字典if k1 > k2:bianma_row[cbfbm_list[i]] = k1else:bianma_row[cbfbm_list[i]] = k2# 扩充表1中字段的列表t1_cbfbm_kc = []t1_name_kc = []t1_xb_kc = []t1_yhzgx_kc = []t1_zjh_kc = []t1_num = []for i in range(len(t1_cbfbm) - 1):m1 = t1_cbfbm[i]m2 = t1_cbfbm[i + 1]t1_cbfbm_kc.append(m1)t1_name_kc.append(t1_name[i])t1_xb_kc.append(dict_xb[t1_xb[i]])t1_yhzgx_kc.append(dict_gxdm[t1_yhzgx[i]])t1_zjh_kc.append(t1_zjh[i])t1_num.append(num_jtcy[m1])if m1 != m2:  # 判断在哪里添加数据if num_dk[m1] > num_jtcy[m1]:  # 地块数比家庭成员多时n = num_dk[m1] - num_jtcy[m1]  # 多出的列表元素t1_cbfbm_kc = t1_cbfbm_kc + n * [m1]t1_name_kc = t1_name_kc + n * ['']t1_xb_kc = t1_xb_kc + n * ['']t1_yhzgx_kc = t1_yhzgx_kc + n * ['']t1_zjh_kc = t1_zjh_kc + n * ['']t1_num = t1_num + n * [num_jtcy[m1]]t1_cbfbm_kc.append(t1_cbfbm[-1])t1_name_kc.append(t1_name[-1])t1_xb_kc.append(dict_xb[t1_xb[-1]])t1_yhzgx_kc.append(dict_gxdm[t1_yhzgx[-1]])t1_zjh_kc.append(t1_zjh[-1])t1_num.append(num_jtcy[t1_cbfbm[-1]])# 最后一个承包方也做下判断zh_dk1 = num_dk[t1_cbfbm[-1]]zh_jtcy1 = num_jtcy[t1_cbfbm[-1]]if zh_dk1 > zh_jtcy1:n = zh_dk1 - zh_jtcy1t1_cbfbm_kc = t1_cbfbm_kc + n * [t1_cbfbm[-1]]t1_name_kc = t1_name_kc + n * ['']t1_xb_kc = t1_xb_kc + n * ['']t1_yhzgx_kc = t1_yhzgx_kc + n * ['']t1_zjh_kc = t1_zjh_kc + n * ['']t1_num = t1_num + n * [num_jtcy[t1_cbfbm[-1]]]# 扩充下表3中字段数目t3_dkmc_kc = []t3_dkbm_kc = []t3_dkdz_kc = []t3_dkxz_kc = []t3_dknz_kc = []t3_dkbz_kc = []t3_dklb_kc = []t3_tdyt_kc = []t3_tdlylx_kc = []t3_sfjbnt_kc = []t3_scmjm_kc = []# t3_htmjzj_kc=[]# t3_scmjzj_kc=[]t3_qdfs_kc = []t3_htmjm_kc = []t3_cbfbm_kc = []for i in range(len(t3_cbfbm) - 1):m1 = t3_cbfbm[i]m2 = t3_cbfbm[i + 1]t3_dkmc_kc.append(t3_dkmc[i])t3_dkbm_kc.append(t3_dkbm[i])t3_dkdz_kc.append(t3_dkdz[i])t3_dkxz_kc.append(t3_dkxz[i])t3_dknz_kc.append(t3_dknz[i])t3_dkbz_kc.append(t3_dkbz[i])t3_dklb_kc.append(dict_dklb[t3_dklb[i]])t3_tdyt_kc.append(dict_tdyt[t3_tdyt[i]])t3_tdlylx_kc.append(t3_tdlylx[i])t3_sfjbnt_kc.append(dict_sfjbnt[t3_sfjbnt[i]])t3_scmjm_kc.append(t3_scmjm[i])t3_qdfs_kc.append(dict_qdfs[dict_dkbmtoqdfs[t3_dkbm[i]]])t3_htmjm_kc.append(dict_dkbmtohtmj[t3_dkbm[i]])t3_cbfbm_kc.append(m1)if m1 != m2:  # 判断在哪里添加数据if num_dk[m1] < num_jtcy[m1]:  # 地块数比家庭成员多时n = num_jtcy[m1] - num_dk[m1]  # 多出的列表元素t3_dkmc_kc = t3_dkmc_kc + n * ['']t3_dkbm_kc = t3_dkbm_kc + n * ['']t3_dkdz_kc = t3_dkdz_kc + n * ['']t3_dkxz_kc = t3_dkxz_kc + n * ['']t3_dknz_kc = t3_dknz_kc + n * ['']t3_dkbz_kc = t3_dkbz_kc + n * ['']t3_dklb_kc = t3_dklb_kc + n * ['']t3_tdyt_kc = t3_tdyt_kc + n * ['']t3_tdlylx_kc = t3_tdlylx_kc + n * ['']t3_sfjbnt_kc = t3_sfjbnt_kc + n * ['']t3_scmjm_kc = t3_scmjm_kc + n * [0]t3_qdfs_kc = t3_qdfs_kc + n * ['']t3_htmjm_kc = t3_htmjm_kc + n * [0]t3_cbfbm_kc = t3_cbfbm_kc + n * [m1]t3_dkmc_kc.append(t3_dkmc[-1])t3_dkbm_kc.append(t3_dkbm[-1])t3_dkdz_kc.append(t3_dkdz[-1])t3_dkxz_kc.append(t3_dkxz[-1])t3_dknz_kc.append(t3_dknz[-1])t3_dkbz_kc.append(t3_dkbz[-1])t3_dklb_kc.append(dict_dklb[t3_dklb[-1]])t3_tdyt_kc.append(dict_tdyt[t3_tdyt[-1]])t3_tdlylx_kc.append(t3_tdlylx[-1])t3_sfjbnt_kc.append(dict_sfjbnt[t3_sfjbnt[-1]])t3_scmjm_kc.append(t3_scmjm[-1])t3_qdfs_kc.append(dict_qdfs[dict_dkbmtoqdfs[t3_dkbm[-1]]])t3_htmjm_kc.append(dict_dkbmtohtmj[t3_dkbm[-1]])t3_cbfbm_kc.append(t3_cbfbm[-1])if num_dk[t3_cbfbm[-1]] < num_jtcy[t3_cbfbm[-1]]:  # 家庭成员比地块数多时n = num_jtcy[t3_cbfbm[-1]] - num_dk[t3_cbfbm[-1]]  # 多出的列表元素t3_dkmc_kc = t3_dkmc_kc + n * ['']t3_dkbm_kc = t3_dkbm_kc + n * ['']t3_dkdz_kc = t3_dkdz_kc + n * ['']t3_dkxz_kc = t3_dkxz_kc + n * ['']t3_dknz_kc = t3_dknz_kc + n * ['']t3_dkbz_kc = t3_dkbz_kc + n * ['']t3_dklb_kc = t3_dklb_kc + n * ['']t3_tdyt_kc = t3_tdyt_kc + n * ['']t3_tdlylx_kc = t3_tdlylx_kc + n * ['']t3_sfjbnt_kc = t3_sfjbnt_kc + n * ['']t3_scmjm_kc = t3_scmjm_kc + n * [0]t3_qdfs_kc = t3_qdfs_kc + n * ['']t3_htmjm_kc = t3_htmjm_kc + n * [0]t3_cbfbm_kc = t3_cbfbm_kc + n * [t3_cbfbm[-1]]# 地块的合同面积与实测面积求和qh = ['编码', '面积1', '面积2']qh_list = []for i in range(len(t3_cbfbm_kc)):qh_list.append([t3_cbfbm_kc[i], t3_htmjm_kc[i], t3_scmjm_kc[i]])qhdf = pd.DataFrame(qh_list, columns=qh)mj1 = qhdf.groupby('编码')['面积1'].sum()mj2 = qhdf.groupby('编码')['面积2'].sum()mm1 = mj1.values.tolist()mm2 = mj2.values.tolist()mj1_dict = {}mj2_dict = {}for i in range(len(cbfbm_list)):mj1_dict[cbfbm_list[i]] = mm1[i]mj2_dict[cbfbm_list[i]] = mm2[i]tiltle_table = ['xh', 'xmslm', 'zs', 'xm', 'xb', 'yhzgx', 'sfzh', 'zhtmj', 'zscmj', 'dkmc', 'dkbm', 'dz', 'nz','xz', 'bz', 'dklb', 'cbfs', 'tdyt', 'dl', 'sfjbnt', 'htmj', 'scmj', 'gsbz', 'hzqz']name_list = []for i in range(0, len(t1_cbfbm_kc)):zs = str(num_jtcy[t1_cbfbm_kc[i]]) + '人'xmslm = dict_cbfbmtocbfxm[t1_cbfbm_kc[i]] + str(t1_cbfbm_kc[i])[-6:]zhtmj = '合计:' + str(num_dk[t1_cbfbm_kc[i]]) + '块' + str(round(mj1_dict[t1_cbfbm_kc[i]], 2)) + '亩'zscmj = '合计:' + str(num_dk[t1_cbfbm_kc[i]]) + '块' + str(round(mj2_dict[t1_cbfbm_kc[i]], 2)) + '亩'if t3_htmjm_kc[i] == 0:htmj_t = ''scmj_t = ''else:htmj_t = t3_htmjm_kc[i]scmj_t = t3_scmjm_kc[i]name_list.append([int(t1_cbfbm_kc[i][-6:]), xmslm, zs, t1_name_kc[i], t1_xb_kc[i], t1_yhzgx_kc[i], str(t1_zjh_kc[i]),zhtmj, zscmj, t3_dkmc_kc[i],str(t3_dkbm_kc[i]), t3_dkdz_kc[i], t3_dknz_kc[i], t3_dkxz_kc[i], t3_dkbz_kc[i],t3_dklb_kc[i], t3_qdfs_kc[i], t3_tdyt_kc[i], t3_tdlylx_kc[i], t3_sfjbnt_kc[i], htmj_t, scmj_t, '', ''])df = pd.DataFrame(name_list, columns=tiltle_table)df.to_excel(self.save_excel, index=False)

3、软件测试与分享

下载打开软件,确保你有软件运行环境(AccessDatabaseEngine安装了)。

选择源mdb(一般以村为单位)、地块.dbf,保存成xxx村公示表。完成后出现“表格生成成功”,生成了一个村的公示表。

http://www.xdnf.cn/news/2270.html

相关文章:

  • 上位机知识篇---寻址方式
  • 通过gap看margin和padding在布局中的应用
  • 摩尔投票法详细介绍
  • void指针为何能幻化有数据类型?
  • Linux下的I/O复用技术之epoll
  • Linux:进程间通信->命名管道
  • 【WSL】wsl2出现Exec format error的解决办法
  • 矫平机终极指南:特殊材料处理、工艺链协同与全球供应链管理
  • Java 线程的六种状态与完整生命周期详解
  • YOLOv8改进新路径:Damo-YOLO与Dyhead融合的创新检测策略
  • C语言学习之调试
  • 小白自学python第三天
  • 当高级辅助驾驶遇上“安全驾校”:NVIDIA如何用技术给无人驾驶赋能?
  • Python类和对象四(十三)
  • 2025雅思口语工具Top10:AI软件真实测评
  • 在springboot项目中,如何进行excel表格的导入导出功能?
  • JavaScript基础-算数运算符
  • (四) 实战Trae 编译调试C++项目(以minidocx为例)
  • Winform(2.多线程)
  • C19-while循环及for循环等价引入
  • CANFD技术在实时运动控制系统中的应用:协议解析、性能测试与未来发展趋势
  • (23)VTK C++开发示例 --- 读取所有的PolyData类型示例
  • 网络管理知识点
  • Java----内部类 以及 调用关系
  • Pygame终极项目:从零开发一个完整2D游戏
  • C++之map
  • ngrok 内网穿透技术系统性文档
  • 初始网络流(最小割)
  • 【C语言练习】005. 编写表达式并确定其值
  • leetcode刷题日记——环形链表