版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.6项目开发1.功能需求添加学生:添加学生信息,用对话框输入新学生信息;验证学号唯一性和必填字段。编辑学生信息:学号不可修改;可修改姓名、性别。删除学生:删除前确认删除信息,确认框显示学生姓名和学号。刷新数据:能够重新加载数据库数据,数据库采用SQLITE3或MySQL。退出系统:关闭应用程序。2.项目设计1)系统界面设计系统的界面如图6-12至图6-14所示。2)类的设计本系统主要包含2个类。(1)StudentDialog类:继承自QDialog,包含学号输入框、姓名输入框、性别下拉框三个表单组件;提供get_data()方法获取输入数据。(2)StudentManagementSystem类:继承自QMainWindow,包含数据库连接对象和数据库游标。UI组件包含表格、添加按钮、刷新按钮、退出按钮。核心功能方法有数据库初始化、UI初始化、学生数据加载、增删改操作。3)类之间的关系StudentManagementSystem使用StudentDialog进行学生数据的输入和编辑。类之间的关系如图6-15所示。3.项目实现11importsys2importsqlite33fromPyQt5.QtWidgetsimport*4fromPyQt5.QtCoreimportQt5fromPyQt5.QtGuiimportQFont,QIcon67classStudentDialog(QDialog):8"""添加/编辑学生信息的对话框"""9def__init__(self,parent=None,student_id=None,name=None,gender=None):10super().init(parent)11self.setWindowTitle("学生信息"ifstudent_idelse"添加学生")12self.setMinimumWidth(300)13layout=QVBoxLayout()14#14#表单布局15form_layout=QFormLayout()16self.student_id_input=QLineEdit()17self.student_id_input.setPlaceholderText("请输入学号")18ifstudent_id:19self.student_id_input.setText(student_id)20self.student_id_input.setReadOnly(True)#编辑时学号不可修改21form_layout.addRow("学号:",self.student_id_input)22_input=QLineEdit()23_input.setPlaceholderText("请输入姓名")24ifname:25_input.setText(name)26form_layout.addRow("姓名:",_input)2728self.gender_combo=QComboBox()29self.gender_combo.addItems(["男","女"])30ifgender:31index=0ifgender=="男"else132self.gender_combo.setCurrentIndex(index)33form_layout.addRow("性别:",self.gender_combo)34layout.addLayout(form_layout)3536#按钮37button_box=QDialogButtonBox(QDialogButtonBox.Ok\38|QDialogButtonBox.Cancel)39button_box.accepted.connect(self.accept)40button_box.rejected.connect(self.reject)41layout.addWidget(button_box)4243self.setLayout(layout)4445defget_data(self):46"""获取表单数据"""47return{48"student_id":self.student_id_input.text().strip(),49"name":_input.text().strip(),50"gender":self.gender_combo.currentText()51}5253classStudentManagementSystem(QMainWindow):54"""学生管理系统主窗口"""55definit(self):56super().init()57self.setWindowTitle("学生管理系统")5858self.setGeometry(100,100,800,600)5960#初始化数据库61self.init_database()6263#设置UI64self.init_ui()6566#加载学生数据67self.load_students()6869definit_database(self):70"""初始化数据库"""71self.conn=sqlite3.connect('students.db')72self.cursor=self.conn.cursor()73#创建学生表74self.cursor.execute('''75CREATETABLEIFNOTEXISTSstudents(76idINTEGERPRIMARYKEYAUTOINCREMENT,77student_idVARCHAR(20)UNIQUENOTNULL,78nameVARCHAR(50)NOTNULL,79genderVARCHAR(10)NOTNULL82mit()84#添加一些示例数据85self.cursor.execute("SELECTCOUNT(*)FROMstudents")86ifself.cursor.fetchone()[0]==0:87sample_data=[88('20142857','张三','男'),89('20142858','李四','男'),90('20142859','王五','男'),91('20142860','赵六','男'),92('20142861','钱七','男'),93('20142862','孙八','男')94]95self.cursor.executemany(96"INSERTINTOstudents(student_id,name,gender)\97VALUES(?,?,?)",98sample_data99)100mit()102102definit_ui(self):103"""初始化用户界面"""104main_widget=QWidget()105main_layout=QVBoxLayout()107#标题108title_label=QLabel("学生管理系统")109title_label.setFont(QFont("Arial",18,QFont.Bold))110title_label.setAlignment(Qt.AlignCenter)111main_layout.addWidget(title_label)113#操作按钮114button_layout=QHBoxLayout()115self.add_button=QPushButton("添加学生")116self.add_button.setIcon(QIcon.fromTheme("list-add"))117self.add_button.setStyleSheet("background-color:\118#4CAF50;color:white;font-weight:bold;")119self.add_button.clicked.connect(self.add_student)120button_layout.addWidget(self.add_button)122self.refresh_button=QPushButton("刷新")123self.refresh_button.setIcon(QIcon.fromTheme("view-refresh"))124self.refresh_button.setStyleSheet("background-color:#2196F3;\125color:white;font-weight:bold;")126self.refresh_button.clicked.connect(self.load_students)127button_layout.addWidget(self.refresh_button)129self.exit_button=QPushButton("退出系统")130self.exit_button.setIcon(QIcon.fromTheme("application-exit"))131self.exit_button.setStyleSheet("background-color:#f44336;color:white;font-weight:bold;")132self.exit_button.clicked.connect(self.close)133button_layout.addWidget(self.exit_button)135main_layout.addLayout(button_layout)137#学生表格138self.table=QTableWidget()139self.table.setColumnCount(5)140self.table.setHorizontalHeaderLabels(["序号","学号","姓名","性别","操作141self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)142self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)#禁止编辑143self.table.setSelectionBehavior(QAbstractItemView.SelectRows)#选择整行行145main_layout.addWidget(self.table)146main_widget.setLayout(main_layout)147self.setCentralWidget(main_widget)149defload_students(self):150"""从数据库加载学生数据"""151self.cursor.execute("SELECTid,student_id,name,genderFROMstudents")152students=self.cursor.fetchall()153self.table.setRowCount(len(students))154forrow,studentinenumerate(students):155#序号156self.table.setItem(row,0,QTableWidgetItem(str(row+1)))157#学号158self.table.setItem(row,1,QTableWidgetItem(student[1]))159#姓名160self.table.setItem(row,2,QTableWidgetItem(student[2]))161#性别162self.table.setItem(row,3,QTableWidgetItem(student[3]))163#操作按钮164button_widget=QWidget()165button_layout=QHBoxLayout()166button_layout.setContentsMargins(5,2,5,2)168edit_button=QPushButton("编辑")169edit_button.setStyleSheet("background-color:#FFC107;color:black;")170edit_button.setFixedWidth(60)171edit_button.clicked.connect(lambda_,s=student:self.edit_student(s))172delete_button=QPushButton("删除")173delete_button.setStyleSheet("background-color:#F44336;color:white;")174delete_button.setFixedWidth(60)175delete_button.clicked.connect(lambda_,s=student:self.delete_student(s))176button_layout.addWidget(edit_button)177button_layout.addWidget(delete_button)178button_layout.addStretch()180button_widget.setLayout(button_layout)181self.table.setCellWidget(row,4,button_widget)183defadd_student(self):184#略185defedit_student(self,student):186#略187187defdelete_student(self,student):188#略189defcloseEvent(self,event):190"""关闭窗口时关闭数据库连接"""191self.conn.close()192event.accept()4.程序完善(1)参照上述的程序,完善省略部分。(2)本系统使用代码进行界面的设计,用户也可以使用QtDesigner进行界面的设计。(3)本系统使用SQLITE3数据库,用户可以替换成MySQL数据库。1.功能需求1)设备管理模块添加新设备,包括设备名称、类型、位置、安装日期等详细信息。设备类型支持:传感器(sensor)、执行器(actuator)、控制器(controller)。故障(fault)。状态可视化:不同状态使用不同颜色标识(绿色-活跃,红色-故障等)。设备列表查看:以表格形式展示所有设备信息。2)实时监控模块实时数据可视化:多参数实时图表:温度、振动、电流消耗;可视化阈值线:显示警告和危险阈值。设备状态面板:显示设备基本信息:ID、名称、类型、位置。健康状态报告:当前状态、平均温度、未解决告警数。设备健康分析:24小时平均温度计算;设备健康评估和建议。3)告警管理模块告警列表:按时间倒序列出所有未解决告警;显示告警设备ID、时间、严重性和描述。4)系统集成功能数据模拟系统:后台数据生成器模拟设备数据,90%正常数据+10%异常数据模式。实时告警通知:状态栏告警指示灯(红/绿)。数据持久化:SQLAlchemyORM集成;MySQL数据库支持。2.项目设计1)系统界面设计主界面包括工具栏按钮和三个标签页。设备管理的标签页如图6-16所示。告警管理标签页如图6-17所示。实时监控标签页如图6-18所示。2)数据库设计各模块涉及多种数据库设计,设备表详见表6-10,传感器数据详见表6-11,告警信息详见表6-12。列名数据类型字段说明约束/备注idINTEGER唯一标识符nameVARCHAR(100)设备名称非空,唯一标识设备typeVARCHAR(50)设备类型非空,仅限:传感器(sensor)/执行器(actuator)/控制器(controller)locationVARCHAR(100)安装位置非空installation_dateDATETIME安装日期非空statusVARCHAR(20)当前运行状态非空,取值:活跃(active)/(maintenance)/故障(fault)last_maintenanceDATETIME最后维护时间记录最近一次维护时间戳manufacturerVARCHAR(100)制造商设备生产厂商信息modelVARCHAR(50)设备型号具体设备型号标识列名数据类型字段说明约束/备注idINTEGER唯一标识device_idINTEGER关联设备ID外键,关联devices.id,非空timestampTIMESTAMP数据采集时间戳带时区,默认当前时间temperatureNUMERIC(5,2)温度读数(℃)精度:±999.99℃pressureNUMERIC(7,2)压力读数(kPa)精度:±99999.99kPavibrationNUMERIC(6,3)振动幅度(mm)精度:±999.999mmcurrent_consumptionNUMERIC(6,2)电流(A)精度:±9999.99Astatus_codeINTEGER设备状态码自定义设备状态编码列名数据类型字段说明约束/备注idINTEGER告警唯一标识符device_idINTEGER关联设备ID外键,关联devices.id,可为空timestampTIMESTAMP告警触发时间带时区,默认当前时间severityVARCHAR(10)告警严重等级非空,取值:关键(critical)/descriptionVARCHAR(255)告警详情描述非空,说明具体问题resolvedBOOLEAN是否已解决默认false,未解决resolved_timeTIMESTAMP解决时间带时区,记录告警消除时间3)系统模块设计(1)model.py模块的设计。的ORM模型与数据库表建立对象关系映射(ORM),以便在Python中操作数据库。(2)db_operations.py模块设计。该模块是系统的核心类,主要负责数据库操作,包括:数据库建表、添加新设备、记录传感器数据、根据传感器数据生成告警、获取设备健康状态报告、执行设备维护等功能。该类如图6-19所示。(3)main.py模块设计。该模块主要包括以下6个类:RealtimeChart类:用于读取温度、振动、电流数据并以图表的形式显示。init()方法:用于初始化图表,创建三个子图区域;configure_axes()方法:配置图表坐标轴、标题、阈值线和布局;update_data():更新图表数据并重新绘制。如图6-20示。DeviceManagerTab类:用户界面、设备注册、可视化设备状态、数据操作(添加新设备到数据库、刷新设备列表)等。init()方法:初始化设备管理标签页;init_ui()方法:创建用户界面组件;add_device()方法:添加新设备到数据库;clear_form():清空表单内容;refresh_device_list()方法:刷新设备表格数据。如图6-21所示。RealtimeMonitorTab类:用于监控界面显示、设备实时监控(温度、振动、电流)、定时刷新、设备状态管理(活跃,故障,维护)等。load_devices()方法:加载活跃设备列表;device_selected()方法:处理设备选择事件;update_device_status()方法:更新设备状态信息;update_chart_data()方法:刷新实时图表;perform_maintenance()方法:执行设备维护操作。如图6-22所示。AlertManagerTab类:用于告警界面显示、告警实时监控(关键(critical)、高(high)、中(medium)、低(low))、告警详细显示等。refresh_alerts()方法:刷新告警列表;resolve_selected_alert()方法:解决选中的告警;show_alert_details()方法:显示告警详情对话框。如图6-23所示。DataSimulatorThread类:是系统的数据模拟器,主要功能为多个设备生成模拟传感器数据,支持温度、压力、振动、电流消耗等参数;生成状态码标识数据状态。run()方法:主线程逻辑,循环生成数据;stop()方法:停止线程。IndustrialIOTSystem类:是系统的主类,负责协调整个应用程序的运行,主要功能包括:系统初始化(创建数据库管理器、初始化数据库表、添加示例设备、设置UI界面、启动数据模拟器)、加载三个标签页(实时监控、告警管理、设备管理)、显示数据等功能。initialize_devices()方法:初始化设备init_ui()方法:创建用户界面;start_data_simulator()方法:启动数据模拟器;check_critical_alerts()方法:检查关键告警;refresh_all()方法:刷新所有标签页;closeEvent()方法:处理窗口关闭事件。其与其他类的关系如图6-24所示。2.项目实现models.py主要代码:1#创建一个设备类1#创建一个设备类:2fromsqlalchemyimportcreate_engine,Column,Integer,String,Numeric,\3DateTime,Boolean,ForeignKey,CheckConstraint4fromsqlalchemy.ormimportdeclarative_base,relationship,sessionmaker5fromsqlalchemy.sqlimportfunc6fromdatetimeimportdatetime7importpytz89Base=declarative_base()11classDevice(Base):12__tablename__='devices'13id=Column(Integer,primary_key=True)14name=Column(String(100),nullable=False)15type=Column(String(50),nullable=False)16location=Column(String(100),nullable=False)17installation_date=Column(DateTime,nullable=False)18status=Column(String(20),nullable=False)19last_maintenance=Column(DateTime)20manufacturer=Column(String(100))21model=Column(String(50))2223#关系24sensor_data=relationship("SensorData",back_populates="device")25alerts=relationship("Alert",back_populates="device")2627__table_args__=(28CheckConstraint("typeIN('sensor','actuator','controller')",name='device_type_check'),29CheckConstraint("statusIN('active','inactive','maintenance',\30'fault')",name='device_status_check'),31)3233defrepr(self):34returnf"<Device(id={self.id},name={},\35type={self.type},status={self.status})>"3637classSensorData(Base):38#略39classAlert(Base):40#略41db_operations.py模块的主要代码11importlogging2fromsqlalchemyimportcreate_engine,func,or_,text3fromsqlalchemy.ormimportsessionmaker4fromsqlalchemy.sqlimportexpression5fromdatetimeimportdatetime,timedelta,timezone6frommodelsimportDevice,SensorData,Alert,Base7fromsqlalchemyimportdesc8#配置日志9logging.basicConfig(level=logging.INFO)10logger=logging.getLogger("IIoT-System")12#数据库配置-修改为MySQL连接14DB_CONFIG={15'user':'root'16'password':'123456',17'host':'localhost'18'database':'device_db',19'charset':'utf8mb4'#支持中文表名和字段20}2122#创建数据库连接23DATABASE_URI=f"mysql+pymysql://{DB_CONFIG['user']}:\24{DB_CONFIG['password']}@{DB_CONFIG['host']}/{DB_CONFIG['database']}\25?charset={DB_CONFIG['charset']}"2627classDatabaseManager:28def__init__(self,echo=False):29self.engine=create_engine(DATABASE_URI,echo=echo,pool_pre_ping=True)30self.Session=sessionmaker(bind=self.engine)3132defcreate_tables(self):33"""创建数据库表"""34Base.metadata.create_all(self.engine)35("数据库表创建成功")3637defadd_device(self,device_data):38"""添加新设备"""39withself.Session()assession:40device=Device(**device_data)41session.add(device)42mit()43(f"添加设备成功:ID={device.id},Name={}")44returndevice.id454546defrecord_sensor_data(self,device_id,sensor_data):47"""记录传感器数据"""48withself.Session()assession:49#检查设备状态50device=session.query(Device).filter_by(id=device_id).first()51ifnotdeviceordevice.status!='active':52logger.warning(f"设备{device_id}不可用或不存在")53returnFalse5455#创建数据记录56data_record=SensorData(device_id=device_id,**sensor_data)57session.add(data_record)5859#检查是否需要生成告警60self._check_for_alerts(session,device,data_record)6162mit()63logger.debug(f"记录设备{device_id}的传感器数据")64returnTrue6566def_check_for_alerts(self,session,device,data):67"""根据传感器数据生成告警"""68alerts=[]6970#温度告警规则71ifdata.temperatureisnotNone:72ifdata.temperature>85:73alerts.append(Alert(74device_id=device.id,75severity="critical",76description=f"温度过高:{data.temperature}°C(设备:{})"77))78elifdata.temperature>75:79alerts.append(Alert(80device_id=device.id,81severity="high",82description=f"温度偏高:{data.temperature}°C(设备:{})"85#振动告警规则86ifdata.vibrationisnotNone:87ifdata.vibration>5.0:88alerts.append(Alert(8989device_id=device.id,90severity="critical",91description=f"振动异常:{data.vibration}mm/s(设备:{})"92))93elifdata.vibration>3.0:94alerts.append(Alert(95device_id=device.id,96severity="medium",97description=f"振动偏高:{data.vibration}mm/s(设备:{})"98))99100#电流消耗告警101ifdata.current_consumptionisnotNone:102ifdata.current_consumption>30.0:103alerts.append(Alert(104device_id=device.id,105severity="high",106description=f"电流消耗过高:{data.current_consumption}\107A(设备:{})"110#状态码告警111ifdata.status_codeisnotNoneanddata.status_code!=0:112alerts.append(Alert(113device_id=device.id,114severity="medium",115description=f"设备异常状态码:{data.status_code}(设备:{})"118#添加告警119foralertinalerts:120session.add(alert)121logger.warning(f"生成告警:{alert.description}")123defresolve_alert(self,alert_id,resolution_note=""):124"""解决告警"""125withself.Session()assession:126alert=session.query(Alert).filter_by(id=alert_id).first()127ifnotalert:128logger.error(f"告警ID{alert_id}不存在")129returnFalse131alert.resolved=True132alert.resolved_time=datetime.now(timezone.utc)133133mit()134(f"已解决告警:ID={alert_id}")135returnTrue136defget_device_health(self,device_id):137"""获取设备健康状态报告"""138#略139defperform_maintenance(self,device_id,maintenance_notes):140"""执行设备维护"""141#略142defget_critical_alerts(self):143"""获取所有未解决的关键告警"""144#略main.py主要代码1#导入其他支持库2frommatplotlib.figureimportFigure3importnumpyasnp4importrandom5importthreading6#导入之前定义的SQLAlchemy模型和数据库操作7frommodelsimportDevice,SensorData,Alert,Base8fromdb_operationsimportDatabaseManager910classRealtimeChart(FigureCanvas):11"""实时数据图表控件"""13classDeviceManagerTab(QWidget):14def__init__(self,db_manager,parent=None):15super().init(parent)16self.db_manager=db_manager17self.init_ui()19definit_ui(self):20#略绘制界面21defadd_device(self):22"""添加新设备到数据库"""23device_data={24"name":_input.text(),25"type":self.type_combo.currentText(),26"location":self.location_input.text(),27"installation_date":self.install_date_input.dateTime().toPyDateTime(),28"status":self.status_combo.currentText(), 29"manufacturer":self.manufacturer_input.text(),30"30"model":self.model_input.text()31}3233try:34device_id=self.db_manager.add_device(device_data)35QMessageBrmation(self,"成功",f"设备已添加,ID:{device_id}")36self.refresh_device_list()37self.clear_form()38exceptExceptionase:39QMessageBox.critical(self,"错误",f"添加设备失败:{str(e)}")4041defrefresh_device_list(self):42"""刷新设备列表"""43withself.db_manager.Session()assession:44devices=session.query(Device).all()4546self.device_table.setRowCount(len(devices))4748forrow,deviceinenumerate(devices):49self.device_table.setItem(row,0,QTableWidgetItem(str(device.id)))50self.device_table.setItem(row,1,QTableWidgetItem())51self.device_table.setItem(row,2,QTableWidgetItem(device.type))52self.device_table.setItem(row,3,QTableWidgetItem(device.location))53self.device_table.setItem(row,4,\54QTableWidgetItem(device.installation_date.strftime("%Y-%m-%d")))5556status_item=QTableWidgetItem(device.status)57#根据状态设置颜色58ifdevice.status=="active":59status_item.setBackground(QColor(144,238,144))#浅绿60elifdevice.status=="fault":61status_item.setBackground(QColor(255,99,71))#番茄红62elifdevice.status=="maintenance":63status_item.setBackground(QColor(255,215,0))#金色64else:65status_item.setBackground(QColor(211,211,211))#浅灰6667self.device_table.setItem(row,5,status_item)68self.device_table.setItem(row,6,QTableWidgetItem(device.manufactureror""))69self.device_table.setItem(row,7,QTableWidgetItem(device.modelor""))7071classRealtimeMonitorTab(QWidget):72"""实时监控标签页"""73def__init__(self,db_manager,parent=None):7474super().init(parent)75self.db_manager=db_manager76self.current_device_id=None77self.init_ui()7879#定时刷新数据80self.timer=QTimer(self)81self.timer.timeout.connect(self.update_chart_data)82self.timer.start(5000)#每5秒刷新一次84definit_ui(self):85#略86defload_devices(self):87"""加载设备列表"""88self.device_combo.clear()89withself.db_manager.Session()assession:90devices=session.query(Device).filter(Device.status=="active").all()91fordeviceindevices:92self.device_combo.addItem(f"{}({device.id})",device.id)93ifdevices:94self.device_combo.setCurrentIndex(0)9596defdevice_selected(self,index):97"""设备选择改变时触发"""98ifindex>=0:99device_id=self.device_combo.itemData(index)100self.current_device_id=device_id101self.update_device_status()102self.update_chart_data()103self.maintenance_button.setEnabled(True)105defupdate_device_status(self):106"""更新设备状态信息"""107ifnotself.current_device_id:108return110report=self.db_manager.get_device_health(self.current_device_id)111ifnotreport:112return114self.device_id_label.setText(str(report["device_id"]))115self.device_name_label.setText(report["device_name"])116self.device_type_label.setText(report.get("type","N/A"))117self.device_location_label.setText(report.get("location","N/A"))118118self.device_status_label.setText(report["status"].upper())120#设置状态颜色121ifreport["status"]=="active":122self.device_status_label.setStyleSheet("color:green;")123elifreport["status"]=="fault":124self.device_status_label.setStyleSheet("color:red;")125elifreport["status"]=="maintenance":126self.device_status_label.setStyleSheet("color:orange;")127else:128self.device_status_label.setStyleSheet("")130self.last_maintenance_label.setText(report["last_maintenance"])131self.avg_temp_label.setText(f"{report['avg_temperature']or'N/A'}°C")132self.unresolved_alerts_label.setText(str(report["unresolved_alerts"]))133self.recommendation_label.setText(report["recommendation"])135#设置建议颜色136if"需要维护"inreport["recommendation"]:137self.recommendation_label.setStyleSheet("color:red;")138else:139self.recommendation_label.setStyleSheet("color:green;")141classAlertManagerTab(QWidget):142"""告警管理标签页"""143def__init__(self,db_manager,parent=None):144super().init(parent)145self.db_manager=db_manager146self.init_ui()148#定时刷新告警149self.timer=QTimer(self)150self.timer.timeout.connect(self.refresh_alerts)151self.timer.start(3000)#每3秒刷新一次153definit_ui(self):155defrefresh_alerts(self):156"""刷新告警列表"""157withself.db_mana
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国体育行业市场趋势供需分析及投资评估规划分析研究报告
- 人教版五年级英语上册期中试卷(真题)
- 2026中国物流行业现状分析及投资评估规划研究分析报告
- 初一写人作文500字10篇
- 2026马其顿建筑建材-产业市场竞争现状分析及投资方向规划发展前景咨询报告
- 2026欧洲绿色建筑行业发展环境分析市场空间前景行业规划研究评估投资报告
- 2026中国云计算服务行业市场现状分析及投资评估规划研究报告
- 2026葡萄牙葡萄酒产业技术创新与品牌全球化策略分析
- 2026人工智能技术商业化应用现状及未来市场发展潜力评估报告
- 公路养护工复试考核试卷含答案
- 淫羊藿栽培技术
- 飞机隐身涂层课件
- 市政工程质量控制资料用表
- 护理礼仪与人际沟通PPT(高职)全套教学课件
- 压疮分期及护理
- 钢铁有限责任公司大方坯连铸工程初步方案设计
- 秘书实务第四章接待工作
- GB 14101-1993木质防火门通用技术条件
- GA 871-2010防爆罐
- GA 237-2018金属脚镣
- ERR红丝带游戏理财课件
评论
0/150
提交评论