国内python职位数据分析_flask+spider

国内python职位数据分析_flask+spider
  1. 开发语言:Python
  2. 框架:flask
  3. Python版本:python3.8
  4. 数据库:mysql 5.7
  5. 数据库工具:Navicat12
  6. 开发软件:PyCharm

系统展示

系统首页

招聘信息页面

管理员登录

管理员功能界面

用户管理

招聘信息管理

看板展示

论坛交流

系统管理

摘要

系统阐述的是使用国内python职位数据分析系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 Flask框架和MySql数据库技术搭建系统的整体架构。利用这些技术结合实际需求开发了具有个人中心、用户管理、招聘信息管理、论坛交流、系统管理等功能的系统,最后对系统进行相应的测试,测试系统有无存在问题以及测试用户权限来优化系统,最后系统达到预期目标。

研究背景

中国在两千年左右就已经对计算机这一块发展到相当的规模了,现在老百姓们越来越离不开计算机网络、互联网所带来的好处了,现如今各种格式的网站系统遍地开花,现在不同于以往的老旧的管理方式了,只有跟上时代的发展才能不会被淘汰掉,所以对于国内python职位数据分析来说也是同样的,将传统的线下管理带到线上,能够大大提升管理效率,好处也有很多,首先整体的美化、提升了在新时代的背景之下新的样貌,更加朝气蓬勃。一个好的系统能够把传统的国内python职位数据分析信息管理方式,带上一全新的方式,效率、可靠、安全稳定集合一身的系统,带来的体验是传统管理方式所没有办法实现的,信息的交流将达到顶峰,用户的沟通将会更加的便捷,有问题实时反馈提交,及时接收重要通知,将国内python职位数据分析管理正规化、合理化、高效化。

关键技术

Python是解释型的脚本语言,在运行过程中,把程序转换为字节码和机器语言,说明性语言的程序在运行之前不必进行编译,而是一个专用的解释器,当被执行时,它都会被翻译,与之对应的还有编译性语言。

同时,这也是一种用于电脑编程的跨平台语言,这是一门将编译、交互和面向对象相结合的脚本语言(script language)。

Flask是一个使用Python编写的轻量级Web应用框架。它被称为一个“微框架”(microframework),因为它只提供Web应用所需的最核心的功能,如路由、会话管理和模板引擎等,而不像一些更全面的框架那样包含数据库层、表单处理等功能。然而,Flask的扩展生态系统非常丰富,开发者可以通过添加扩展来为Flask应用添加这些额外的功能。

Vue是一款流行的开源JavaScript框架,用于构建用户界面和单页面应用程序。Vue的核心库只关注视图层,易于上手并且可以与其他库或现有项目轻松整合。

MYSQL数据库运行速度快,安全性能也很高,而且对使用的平台没有任何的限制,所以被广泛应运到系统的开发中。MySQL是一个开源和多线程的关系管理数据库系统,MySQL是开放源代码的数据库,具有跨平台性。

B/S(浏览器/服务器)结构是目前主流的网络化的结构模式,它能够把系统核心功能集中在服务器上面,可以帮助系统开发人员简化操作,便于维护和使用。

系统分析

对系统的可行性分析以及对所有功能需求进行详细的分析,来查看该系统是否具有开发的可能。

系统设计

功能模块设计和数据库设计这两部分内容都有专门的表格和图片表示。

系统实现

当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。管理员进入主页面,主要功能包括对个人中心、用户管理、招聘信息管理、论坛交流、系统管理等进行操作。

代码实现

# 注册接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/register", methods=['POST']) def pythonka8v0_zhaopinxinxi_register(): if request.method == 'POST': msg = {'code': normal_code, 'message': 'success', 'data': [{}]} req_dict = session.get("req_dict") error = zhaopinxinxi.createbyreq(zhaopinxinxi, zhaopinxinxi, req_dict) if error!=None: msg['code'] = crud_error_code msg['msg'] = "注册用户已存在" return jsonify(msg) # 登录接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/login", methods=['GET','POST']) def pythonka8v0_zhaopinxinxi_login(): if request.method == 'GET' or request.method == 'POST': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") req_model = session.get("req_dict") try: del req_model['role'] except: pass datas = zhaopinxinxi.getbyparams(zhaopinxinxi, zhaopinxinxi, req_model) if not datas: msg['code'] = password_error_code msg['msg']='密码错误或用户不存在' return jsonify(msg) req_dict['id'] = datas[0].get('id') return Auth.authenticate(Auth, zhaopinxinxi, req_dict) # 登出接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/logout", methods=['POST']) def pythonka8v0_zhaopinxinxi_logout(): if request.method == 'POST': msg = { "msg": "退出成功", "code": 0 } req_dict = session.get("req_dict") return jsonify(msg) # 重置密码接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/resetPass", methods=['POST']) def pythonka8v0_zhaopinxinxi_resetpass(): ''' ''' if request.method == 'POST': msg = {"code": normal_code, "msg": "success"} req_dict = session.get("req_dict") if req_dict.get('mima') != None: req_dict['mima'] = '123456' error = zhaopinxinxi.updatebyparams(zhaopinxinxi, zhaopinxinxi, req_dict) if error != None: msg['code'] = crud_error_code msg['msg'] = error else: msg['msg'] = '密码已重置为:123456' return jsonify(msg) # 获取会话信息接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/session", methods=['GET']) def pythonka8v0_zhaopinxinxi_session(): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "data": {}} req_dict={"id":session.get('params').get("id")} msg['data'] = zhaopinxinxi.getbyparams(zhaopinxinxi, zhaopinxinxi, req_dict)[0] return jsonify(msg) # 分类接口(后端) @main_bp.route("/pythonka8v0/zhaopinxinxi/page", methods=['GET']) def pythonka8v0_zhaopinxinxi_page(): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}} req_dict = session.get("req_dict") userinfo = session.get("params") try: __hasMessage__=zhaopinxinxi.__hasMessage__ except: __hasMessage__=None if __hasMessage__ and __hasMessage__!="否": tablename=session.get("tablename") if tablename!="users" and session.get("params")!=None and zhaopinxinxi!='chat': req_dict["userid"]=session.get("params").get("id") tablename=session.get("tablename") if tablename=="users" : try: pass except: pass else: mapping_str_to_object = {} for model in Base_model._decl_class_registry.values(): if hasattr(model, '__tablename__'): mapping_str_to_object[model.__tablename__] = model try: __isAdmin__=mapping_str_to_object[tablename].__isAdmin__ except: __isAdmin__=None if __isAdmin__!="是" and session.get("params")!=None: req_dict["userid"]=session.get("params").get("id") else: try: del req_dict["userid"] except: pass clause_args = [] or_clauses = or_(*clause_args) msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ msg['data']['pageSize'] = zhaopinxinxi.page(zhaopinxinxi, zhaopinxinxi, req_dict, or_clauses) return jsonify(msg) # 排序接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/autoSort", methods=['GET']) def pythonka8v0_zhaopinxinxi_autosort(): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}} req_dict = session.get("req_dict") req_dict['sort']='clicktime' req_dict['order']='desc' try: __browseClick__= zhaopinxinxi.__browseClick__ except: __browseClick__=None if __browseClick__ =='是': req_dict['sort']='clicknum' elif __browseClick__ =='时长': req_dict['sort']='browseduration' else: req_dict['sort']='clicktime' msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ msg['data']['pageSize'] = zhaopinxinxi.page(zhaopinxinxi, zhaopinxinxi, req_dict) return jsonify(msg) # 分页接口(前端) @main_bp.route("/pythonka8v0/zhaopinxinxi/list", methods=['GET']) def pythonka8v0_zhaopinxinxi_list(): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}} req_dict = session.get("req_dict") if req_dict.__contains__('vipread'): del req_dict['vipread'] userinfo = session.get("params") try: __foreEndList__=zhaopinxinxi.__foreEndList__ except: __foreEndList__=None if __foreEndList__ and __foreEndList__!="否": tablename=session.get("tablename") if tablename!="users" and session.get("params")!=None: req_dict['userid']=session.get("params").get("id") try: __foreEndListAuth__=zhaopinxinxi.__foreEndListAuth__ except: __foreEndListAuth__=None if __foreEndListAuth__ and __foreEndListAuth__!="否": tablename=session.get("tablename") if tablename!="users" and session.get("params")!=None: req_dict['userid']=session.get("params").get("id") tablename=session.get("tablename") if tablename=="users" : try: del req_dict["userid"] except: pass else: mapping_str_to_object = {} for model in Base_model._decl_class_registry.values(): if hasattr(model, '__tablename__'): mapping_str_to_object[model.__tablename__] = model try: __isAdmin__=mapping_str_to_object[tablename].__isAdmin__ except: __isAdmin__=None if __isAdmin__!="是" and session.get("params")!=None: req_dict["userid"]=session.get("params").get("id") else: try: del req_dict["userid"] except: pass if 'luntan' in 'zhaopinxinxi': if 'userid' in req_dict.keys(): del req_dict["userid"] msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \ msg['data']['pageSize'] = zhaopinxinxi.page(zhaopinxinxi, zhaopinxinxi, req_dict) return jsonify(msg) # 保存接口(后端) @main_bp.route("/pythonka8v0/zhaopinxinxi/save", methods=['POST']) def pythonka8v0_zhaopinxinxi_save(): ''' ''' if request.method == 'POST': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") for key in req_dict: if req_dict[key] == '': req_dict[key] = None error= zhaopinxinxi.createbyreq(zhaopinxinxi, zhaopinxinxi, req_dict) if error!=None: msg['code'] = crud_error_code msg['msg'] = error return jsonify(msg) # 添加接口(前端) @main_bp.route("/pythonka8v0/zhaopinxinxi/add", methods=['POST']) def pythonka8v0_zhaopinxinxi_add(): ''' ''' if request.method == 'POST': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") try: __foreEndListAuth__=zhaopinxinxi.__foreEndListAuth__ except: __foreEndListAuth__=None if __foreEndListAuth__ and __foreEndListAuth__!="否": tablename=session.get("tablename") if tablename!="users": req_dict['userid']=session.get("params").get("id") error= zhaopinxinxi.createbyreq(zhaopinxinxi, zhaopinxinxi, req_dict) if error!=None: msg['code'] = crud_error_code msg['msg'] = error return jsonify(msg) # 踩、赞接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/thumbsup/<id_>", methods=['GET']) def pythonka8v0_zhaopinxinxi_thumbsup(id_): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") id_=int(id_) type_=int(req_dict.get("type",0)) rets=zhaopinxinxi.getbyid(zhaopinxinxi, zhaopinxinxi,id_) update_dict={ "id":id_, } if type_==1:#赞 update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1 elif type_==2:#踩 update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1 error = zhaopinxinxi.updatebyparams(zhaopinxinxi, zhaopinxinxi, update_dict) if error!=None: msg['code'] = crud_error_code msg['msg'] = error return jsonify(msg) # 获取详情信息(后端) @main_bp.route("/pythonka8v0/zhaopinxinxi/info/<id_>", methods=['GET']) def pythonka8v0_zhaopinxinxi_info(id_): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data": {}} data = zhaopinxinxi.getbyid(zhaopinxinxi, zhaopinxinxi, int(id_)) if len(data)>0: msg['data']=data[0] #浏览点击次数 try: __browseClick__= zhaopinxinxi.__browseClick__ except: __browseClick__=None if __browseClick__ and "clicknum" in zhaopinxinxi.__table__.columns: click_dict={"id":int(id_),"clicknum":str(int(data[0].get("clicknum") or 0)+1)} ret=zhaopinxinxi.updatebyparams(zhaopinxinxi,zhaopinxinxi,click_dict) if ret!=None: msg['code'] = crud_error_code msg['msg'] = ret return jsonify(msg) # 获取详情信息(前端) @main_bp.route("/pythonka8v0/zhaopinxinxi/detail/<id_>", methods=['GET']) def pythonka8v0_zhaopinxinxi_detail(id_): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data": {}} data = zhaopinxinxi.getbyid(zhaopinxinxi, zhaopinxinxi, int(id_)) if len(data)>0: msg['data']=data[0] #浏览点击次数 try: __browseClick__= zhaopinxinxi.__browseClick__ except: __browseClick__=None if __browseClick__ and "clicknum" in zhaopinxinxi.__table__.columns: click_dict={"id":int(id_),"clicknum":str(int(data[0].get("clicknum") or 0)+1)} ret=zhaopinxinxi.updatebyparams(zhaopinxinxi,zhaopinxinxi,click_dict) if ret!=None: msg['code'] = crud_error_code msg['msg'] = ret return jsonify(msg) # 更新接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/update", methods=['POST']) def pythonka8v0_zhaopinxinxi_update(): ''' ''' if request.method == 'POST': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") if req_dict.get("mima") and "mima" not in zhaopinxinxi.__table__.columns : del req_dict["mima"] if req_dict.get("password") and "password" not in zhaopinxinxi.__table__.columns : del req_dict["password"] try: del req_dict["clicknum"] except: pass error = zhaopinxinxi.updatebyparams(zhaopinxinxi, zhaopinxinxi, req_dict) if error!=None: msg['code'] = crud_error_code msg['msg'] = error return jsonify(msg) # 删除接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/delete", methods=['POST']) def pythonka8v0_zhaopinxinxi_delete(): ''' ''' if request.method == 'POST': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") error=zhaopinxinxi.delete( zhaopinxinxi, req_dict ) if error!=None: msg['code'] = crud_error_code msg['msg'] = error return jsonify(msg) # 投票接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/vote/<int:id_>", methods=['POST']) def pythonka8v0_zhaopinxinxi_vote(id_): ''' ''' if request.method == 'POST': msg = {"code": normal_code, "msg": "success"} data= zhaopinxinxi.getbyid(zhaopinxinxi, zhaopinxinxi, int(id_)) for i in data: votenum=i.get('votenum') if votenum!=None: params={"id":int(id_),"votenum":votenum+1} error=zhaopinxinxi.updatebyparams(zhaopinxinxi,zhaopinxinxi,params) if error!=None: msg['code'] = crud_error_code msg['msg'] = error return jsonify(msg) # 分组统计接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/group/<columnName>", methods=['GET']) def pythonka8v0_zhaopinxinxi_group(columnName): ''' 分组统计接口 ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") userinfo = session.get("params") msg['data'] = zhaopinxinxi.groupbycolumnname(zhaopinxinxi,zhaopinxinxi,columnName,req_dict) msg['data'] = msg['data'][:10] return jsonify(msg) # 按值统计接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/value/<xColumnName>/<yColumnName>", methods=['GET']) def pythonka8v0_zhaopinxinxi_value(xColumnName, yColumnName): ''' 按值统计接口, { "code": 0, "data": [ { "total": 10.0, "shangpinleibie": "aa" }, { "total": 20.0, "shangpinleibie": "bb" }, { "total": 15.0, "shangpinleibie": "cc" } ] } ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data": {}} req_dict = session.get("req_dict") userinfo = session.get("params") msg['data'] = zhaopinxinxi.getvaluebyxycolumnname(zhaopinxinxi,zhaopinxinxi,xColumnName,yColumnName,req_dict) msg['data'] = msg['data'][:10] return jsonify(msg) # 按日期统计接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/value/<xColumnName>/<yColumnName>/<timeStatType>", methods=['GET']) def pythonka8v0_zhaopinxinxi_value_riqi(xColumnName, yColumnName, timeStatType): ''' 按日期统计接口 ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data": {}} where = ' where 1 = 1 ' if timeStatType == '日': sql = "SELECT DATE_FORMAT({0}, '%Y-%m-%d') {0}, sum({1}) total FROM zhaopinxinxi {2} GROUP BY DATE_FORMAT({0}, '%Y-%m-%d')".format(xColumnName, yColumnName, where, '%Y-%m-%d') if timeStatType == '月': sql = "SELECT DATE_FORMAT({0}, '%Y-%m') {0}, sum({1}) total FROM zhaopinxinxi {2} GROUP BY DATE_FORMAT({0}, '%Y-%m')".format(xColumnName, yColumnName, where, '%Y-%m') if timeStatType == '年': sql = "SELECT DATE_FORMAT({0}, '%Y') {0}, sum({1}) total FROM zhaopinxinxi {2} GROUP BY DATE_FORMAT({0}, '%Y')".format(xColumnName, yColumnName, where, '%Y') data = db.session.execute(sql) data = data.fetchall() results = [] for i in range(len(data)): result = { xColumnName: decimalEncoder(data[i][0]), 'total': decimalEncoder(data[i][1]) } results.append(result) msg['data'] = results return jsonify(msg) # 推荐算法接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/autoSort2", methods=['GET']) def pythonka8v0_zhaopinxinxi_autoSort2(): if request.method == 'GET': leixing = set() req_dict = session.get("req_dict") userinfo = session.get("params") sql = "select inteltype from storeup where userid = "+userinfo.get("id")+" and tablename = 'zhaopinxinxi' order by addtime desc" try: data = db.session.execute(sql) rows = data.fetchall() for row in rows: for item in row: if item != None: leixing.add(item) except: leixing = set() L = [] sql ="select * from zhaopinxinxi where $intelRecomColumn in ('%s"%("','").join(leixing)+"') union all select * from zhaopinxinxi where $intelRecomColumn not in('%s"%("','").join(leixing)+"')" data = db.session.execute(sql) data_dict = [dict(zip(result.keys(), result)) for result in data.fetchall()] for online_dict in data_dict: for key in online_dict: if 'datetime.datetime' in str(type(online_dict[key])): online_dict[key] = online_dict[key].strftime( "%Y-%m-%d %H:%M:%S") else: pass L.append(online_dict) return jsonify({"code": 0, "msg": '', "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":5,"list": L[0:int(req_dict['limit'])]}}) # 总数量 @main_bp.route("/pythonka8v0/zhaopinxinxi/count", methods=['GET']) def pythonka8v0_zhaopinxinxi_count(): ''' ''' if request.method == 'GET': msg = {"code": normal_code, "msg": "success", "data": 0} req_dict = session.get("req_dict") userinfo = session.get("params") msg['data'] = zhaopinxinxi.count(zhaopinxinxi, zhaopinxinxi, req_dict) return jsonify(msg) # 统计接口 @main_bp.route("/pythonka8v0/zhaopinxinxi/remind/<columnName>/<type>", methods=['GET']) # def pythonka8v0_zhaopinxinxi_remind(columnName,type): ''' ''' if request.method == 'GET': msg = {"code": normal_code, 'count': 0} # 组合查询参数 params = session.get("req_dict") if int(type)==1:#数字 if params.get('remindstart') == None and params.get('remindend') != None: remindstart = 0 remindend = int(params['remindend']) elif params.get('remindstart') != None and params.get('remindend') == None: remindstart = int(params['remindstart']) remindend = 999999 elif params.get('remindstart') == None and params.get('remindend') == None: remindstart = 0 remindend = 999999 elif int(type)==2:#日期 current_time=int(time.time()) if params.get('remindstart') == None and params.get('remindend') != None: starttime=current_time-60*60*24*365*2 params['remindstart'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(starttime)) endtime=current_time+60*60*24*params.get('remindend') params['remindend'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(endtime)) elif params.get('remindstart') != None and params.get('remindend') == None: starttime= current_time - 60 * 60 * 24 * params.get('remindstart') params['remindstart']=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(starttime)) endtime=current_time+60*60*24*365*2 params['remindend'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(endtime)) elif params.get('remindstart') == None and params.get('remindend') == None: starttime = current_time - 60 * 60 * 24 * 365 * 2 params['remindstart'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(starttime)) endtime = current_time + 60 * 60 * 24 * 365 * 2 params['remindend'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(endtime)) data = zhaopinxinxi.getbetweenparams( zhaopinxinxi, zhaopinxinxi, columnName, { "remindStart": remindstart, "remindEnd": remindend } ) msg['count'] = len(data) return jsonify(msg)

系统测试

系统测试(System Testing)是为给客户提供测试产品或服务的质量信息而进行的检查。系统测试还可以提供客观和独立的系统评估,以使运营者能够了解和系统实施所面临的潜在问题。系统测试包括(软件的组件,系统组件)的执行,以评估系统属性。通常这些属性表明被测组件或系统满足系统预期开发需求,在各种预期的时间内,正确响应各种系统输入,同时可以满足分析设计时要求的程度。在预期的环境中运行,并达到用户期望的总体结果。经过一系列严格功能测试,以发现系统功能方面潜在的问题,保证系统的正常运行。

结论

系统的开发使我能够结合我以前的知识集成和改进它们。毕设就是检验我们对所学内容运用程度的时刻,对所学内容运用情况进行巩固与提高。本系统检验了自己的IT知识,同时也检验了自己运用相关知识去解决实际问题,使自己得到了一个锻炼与提升编程技能的机会。在设计上我遇到了很多困难,主要原因是我所拥有的知识不是很扎实,所以只靠几本书里的知识是远远不够的!自己经过实践取得了一些实践经验。知识不在于理解,必须学会运用,并且使之反映到实际生活中去,才是学知识的根本目的。面对困难,我学着怎样去处理,怎样去发现并分析有关的资料。

Read more

常搞混的PLC编程语言ST、STL、SCL到底有啥差别

ST(结构化文本)、SCL(结构化控制语言)、STL(语句表)是工业自动化领域中 PLC(可编程逻辑控制器)常用的编程语言,三者在语法风格、应用场景、执行逻辑上差异显著。以下从定义本质、语法特征、应用场景、核心区别 四个维度详细解析: 一、核心定义与本质 语言全称本质定位所属标准STLStatement List(语句表)汇编级的低级指令语言,基于 PLC 的指令集,逐条执行IEC 61131-3(可选,不同厂商语法差异大)STStructured Text(结构化文本)类 Pascal/C 的高级文本语言,结构化、模块化IEC 61131-3 标准语言SCLStructured Control Language(结构化控制语言)西门子对 ST 的 “定制扩展版”,核心兼容

By Ne0inhk
C++:继承

C++:继承

目录 1 继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承基类成员访问方式的变化 1.3 继承模板 2 基类和派生类间的转换 3 继承中的作用域 3.1 隐藏规则 4 派生类的默认成员函数 4.1 4个常见默认成员函数 4.2 实现一个不能被继承的类 5 继承和友元 6 继承与静态成员 7 多继承及其菱形继承问题 7.1 继承模型 7.2 虚继承 7.4 IO库中的菱形继承

By Ne0inhk
C++学习之旅【C++拓展学习之反向迭代器实现、计算器实现以及逆波兰表达式】

C++学习之旅【C++拓展学习之反向迭代器实现、计算器实现以及逆波兰表达式】

🔥承渊政道:个人主页 ❄️个人专栏: 《C语言基础语法知识》《数据结构与算法》 《C++知识内容》《Linux系统知识》 ✨逆境不吐心中苦,顺境不忘来时路!🎬 博主简介: 引言:前篇文章,小编已经介绍了关于C++Stack和Queue类的相关知识.接下来我将带领大家继续深入学习C++的相关内容!本篇文章着重介绍关于C++拓展学习之反向迭代器实现、计算器实现以及逆波兰表达式,那么这里面到底有哪些知识需要我们去学习的呢?废话不多说,带着这些疑问,下面跟着小编的节奏🎵一起学习吧! 目录 * 1. 反向迭代器思路(源码及框架分析) * 2. 反向迭代器的实现 * 3. 逆波兰表达式介绍(也叫后缀表达式) * 3.1后缀表达式进⾏运算 * 3.2逆波兰表达式求值 * 3.3中缀表达式转后缀表达式(含代码实现) * 4.基本计算器的实现 1. 反向迭代器思路(源码及框架分析) 反向迭代器是一种特殊的迭代器,它的核心作用是:从容器的末尾开始,

By Ne0inhk
校门外的树:区间处理与标记法的C++实践(洛谷P1047)

校门外的树:区间处理与标记法的C++实践(洛谷P1047)

题目思路解析 这道题目要求我们计算在移除多个区间内的树木后,马路上剩余的树木数量。关键在于高效处理可能重叠的多个区间,并准确统计被移除的树木。 核心思考路径 1. 问题建模:将马路抽象为0到l的连续区间 2. 区间处理:标记所有需要移除树木的区间 3. 结果计算:统计未被标记的树木数量 关键考核知识点 1. 数组标记法(⭐⭐⭐⭐⭐) * 布尔数组:用数组元素表示树木存在状态 * 区间标记:将移除区间内的元素设为true * 状态统计:遍历统计未被标记的元素 2. 区间合并处理(⭐⭐⭐) * 重叠区间:处理多个区间可能重叠的情况 * 端点处理:包含区间的两个端点 * 效率优化:避免重复标记已移除的树木 3. 输入输出处理(⭐⭐) * 多组数据输入:正确处理m组区间数据 * 边界值处理:验证u和v的合法性 * 结果输出:按要求格式输出剩余树木数 C++完整实现 解法一:布尔数组标记法 #include <iostream> #include <

By Ne0inhk