精华内容
下载资源
问答
  • [新版文件]2020年华为员工标准岗位工资明细及分析
    万次阅读
    2020-12-22 10:56:39

    华为员工标准岗位工资明细及分析

    华为员工对应的标准岗位工资

    13-C

    5500

    B

    6500

    A

    7500

    14-C

    7500

    B

    9000

    A

    10500

    15-C

    10500

    B

    12500

    A

    14500

    16-C

    14500

    B

    17000

    A

    19500

    17-C

    19500

    B

    22500

    A

    25500

    18-C

    25500

    B

    29000

    A

    更多相关内容
  • 企业一线员工工作压力源结构分析,谭舒婷,牛莉霞,为了解企业一线员工群工作压力源状况和表现,探索具有企业一线员工特色的工作压力源结构,在文献翻阅的基础上,结合压力源访谈和
  • 员工年度薪酬收入结构分析报告.doc
  • 人事档案员工信息台账及人员结构分析表Excel(设置提醒).xlsx
  • 企业知识型员工心理契约结构分析.docx
  • 员工年度薪酬收入结构分析报告.zip
  • 员工年薪酬收入结构分析报告文书.doc
  • 员工年度薪酬收入结构分析实施报告.doc
  • 员工结构合理化分析.doc
  • EXCEL常用模板-人事模板-档案类-人事档案员工信息台账及人员结构分析
  • 单位员工通讯录管理系统线性表的应用 .3 1.1 需求分析和算法设计. . 3 1.2 调试分析和测试结果. . 4 2.停车场管理栈和队列的应用 6 2.1 需求分析和算法设计 7 2.2 调试分析和测试结果 8 3.哈夫曼编码/译码系统树应用...
  • 员工福利系列模板-海尔公司扁平化组织结构进程分析.doc
  • 为有效降低煤矿事故发生率,开发安全高效的煤矿员工安全行为路径分析模型...结果表明,多因素斜交结构模型与实际数据适配,煤矿员工安全行为受作业环境和个人因素影响,改善员工作业环境是提升员工安全行为水平的可行路径。
  • 管理人员年龄结构…………………………………………………………………………………5 管理人员工龄结构…………………………………………………………………………………6 管理人员学历结构………………………………...
  • 提出了民营物流 企业员工培训的四个差异化特征,基于上述的差异化特征,提出了民营物流企业员工结构培训新模式。该模式包括 培训需求分析结构化、培训内容体系结构化、培训运作体系结构化、培训评估体系结构化等四大...
  • 更具体地说,本文试图衡量可持续管理,探矿者的战略和反应堆是否以及如何影响组织和可持续绩效,最终影响构成分析样本的市政当局员工的积极性。 用于测量所考虑变量之间的联系的方法由结构方程模型表示,该结构方程...
  • 通过对知识型员工敬业度结构及影响因素的分析,提出了员工特征、组织特征、工作特征、员工—组织/工作匹配程度的四维度结构,并以模糊层次分析法为基础构建知识型员工敬业度评价指标体系。研究结果表明,企业可以从薪酬...
  • 笔者结合南京梅山冶金发展有限公司员工宿舍楼的工程实例,经过现场建筑结构检查,材料取样,数据测量,使用PKPM有限元软件对砖混结构宿舍楼进行承载力、整体抗震性能、安全裕度分析,根据结果做出准确可靠性评级。
  • 数据结构课程设计 课 程 设 计 报 告 课程名称 数据结构 课题名称 员工管理系统 专 业 计算机科学与技术 班 级 1120542 学 号 19 姓 名 杨天骄 指导教师 周晓青 2013年 06 4713 目录 TOC \o "1-3" \h \z \u 目录 2 1...
  • 数据说明: 数据为一家互联网高科技HighTech公司内部2017年11月共30天的多种...员工通过自己主机或跳板机的应用程序,登录服务器或数据库时生成的日志。例如使用SSH、SCP命令、XSHELL程序或者SFTP传输文件都会产...

    数据说明:

    数据为一家互联网高科技HighTech公司内部2017年11月共30天的多种监控数据,包括登录日志、页访问日志、邮件日志、打卡日志和TCP流量日志。数据以csv格式按天分类给出,总共120MB(未压缩之前)。各类型日志详细说明如下:

    登录日志:

    员工通过自己主机或跳板机的应用程序,登录服务器或数据库时生成的日志。例如使用SSH、SCP命令、XSHELL程序或者SFTP传输文件都会产生远程登录日志;客户端应用程序访问数据库时,会产生数据库登录日志。

    在这里插入图片描述

    网页访问日志:

    该日志记录了公司内部所有员工的网页访问记录。time是该条记录生成时间,sip是客户端IP,sport是客户端端口,dip是服务器IP,dport是服务器端口,host是服务器域名。如果通过IP地址直接访问网站,不需要DNS服务器解析,则HTTP报头的host字段为空字符串。

    在这里插入图片描述

    TCPLOG日志:

    记录公司内部网络活动产生的TCP连接。stime、dtime分别是连接建立和断开时间。proto是IP包头中的协议字段值。sip、dip分别是连接发起者和接受者的IP地址,sport、dport是与之对应的源与目的端口。整个连接过程中,sip向dip发送的总字节数为uplink_length,downlink_length与之相反。员工的登录行为、网页访问行行为、邮件发送或者接收行为等都会产生一条或者多条TCPLOG日志。
    在这里插入图片描述

    邮件日志:

    邮件日志记录了经过公司邮件服务器的收发邮件信息。time是邮件的发送时间/接收时间,proto是邮件使用的应用协议。sip、dip分别是连接发起者和接受者的IP地址,sport、dport是与之对应的源与目的端口。from、to分别是邮件的发送者和接收者。邮件内容属于隐私,只提供邮件主题subject。

    在这里插入图片描述

    打卡日志:

    记录了公司每个员工每天上下班时间,一行记录中checkin和checkout都为0,表示没来上班。那就是说,没有来公司打卡的员工,也会生成一行考勤记录。另外,如果公司员工当天没来公司上班,次日该员工会收到旷工提醒邮件。在这里插入图片描述

    1:分析公司内部员工所属部门及各部门的人员组织结构,列出公司员工的组织结构图。

    1.1 公司最高领导的确定

    根据11月邮件日志收发记录绘制有向图,如图1.1所示。我们重点关注度大节点,发现1067和kaoqin与其他3个重要节点区域都有联系,且1067往来邮件主题为:介绍、合作、工作汇报、公司发展规划和年度计划等,故推断该节点为公司的最高领导。Kaoqin为发送特定通知的服务器,不属于员工。

    图1.1 邮件日志往来关系图

    1.2 员工组织结构的确定

    在这里插入图片描述

    图1.2 公司内部员工关系图

    图1.2所示为删除无关节点后得到的公司内部员工关系图。从图中可以看出,以1007、1059、1068为中心的节点组成的拓扑结构相似且层级关系都为三级,1013和1041及其相连节点的拓扑结构相似,层级关系为二级。分析节点邮件主题得知,以1007、1059、1068为中心的节点属于研发部门,1013、1041及其相连节点分别属于人事部门和财务部门。节点邮件主题如图1.3所示。

    在这里插入图片描述

    图1.3 重要节点邮件主题云

    根据以上分析,人事部门主管为1013,财务部门主管为1041,这两个部门主管直接领导下属员工,研发部门的组织结构分为三级,部门主管分别为1007、1059、1068,1007部门的二级主管为1087、1092、1115、1125、1172、1192、1199、1224和1281;1059部门二级主管为1057、1058、1079、1080、1376、1096、1101、1119、1143、1155、1211、1228和1487;1068部门二级主管为1060、1098、1100、1154、1191、1207和1209。

    综上所述,得到图1.4的员工组织结构,其中员工总数为299人。
    在这里插入图片描述

    1.4 公司员工组织结构图

    2:分析该公司员工的日常工作行为,按部门总结并展示员工的正常工作模式。

    2.1 IP地址对应关系

    将邮件日志中的from和sip字段的公司邮箱和源IP进行匹配,得出了员工和服务器与源IP的对应关系如图2.1所示:

    (1)员工id与源IP一一对应,且IP地址前三段固定为10.64.105或10.64.106。

    (2)服务器与源IP的对应关系为一对一和多对一,例如work的IP为10.116.216.71,kaoqin、notice等IP地址为10.1.4.17。

    在这里插入图片描述

    2.1 IP地址对应关系图

    2.2 访问内网行为

    在这里插入图片描述

    图2.2 各部门访问内网情况图

    图2.2为三个部门对内部网站的访问情况。其中,财务和人事部门只访问OA.hightech.com和email.hightech.com;研发部门对包含OA、email在内的所有内部网站都有访问记录。

    2.3 打卡记录

    在这里插入图片描述

    图2.3 各部门打卡热力图

    图2.1所示的打卡热力图是以时间为单位对各个部门30天的打卡记录进行统计的结果。从图中可以看出,财务部门上班打卡时间集中在7:00~8:00,下班打卡时间主要集中在17:00~19:00;人事部门、研发1068和研发1007部门上班打卡时间集中在8:00~9:00,下班打卡时间集中在18:00~20:00;研发1059部门上班打卡时间集中在9:00~10:00,下班打卡时间主要集中在19:00~21:00。

    2.4 午休时间推测

    在这里插入图片描述

    图2.4 11月网站访问量图

    为了分析公司员工的午休情况,我们从网站访问量和时间出发,将一天时间以30min为间隔划分为各个时段,并统计了30天中各个时段的网站访问量,如图2.4所示。12:30~13:00时段网站访问量显著减少,13:30~14:00时段为网站访问量的局部最低点,14:00之后访问量开始增加。因此推测公司的午休时间为12:30~14:00。

    2.5 考勤制度

    在这里插入图片描述

    图2.5 各部门迟到早退时间点推测图

    通过邮件日志中的考勤信息结合员工打卡信息绘制图2.5,红色圆点表示该月迟到最早时间点,蓝色圆点为早退最晚时间点,绿色圆点为离迟到早退时间点最近的正常上下班打卡时间点。绿色与红色圆点之间的时段中,可以找到一点最有可能的迟到临界时间点,蓝色与绿色圆点之间时段也可以找到一点最有可能的早退临界时间点。

    因此可以推测出,财务部门规定8:00之后打卡为迟到,17:00之前打卡为早退;人事部门规定9:00之后为迟到,18:00之前为早退;研发部门中,1007部门9:00之后打卡为迟到,18:00之前为早退,1059部门10:00之后打卡为迟到,19:00之前为早退,1068部门在这30天中无早退记录,只能推断该部门9:00之后打卡为迟到。

    2.6 加班情况

    进一步分析打卡日志,我们统计了11月每天各部门打卡人数,如图2.6。可见该月周一至周五各部门均为全勤,4个周末的打卡的人数较少,其中财务部门在19日、25日和26日出勤率如图2.6右侧所示,该部门这三日打卡人数比重与周一至周五接近,猜测财务部要进行月末结算,有加班情况。其他部门正常工作周期为周一到周五。

    在这里插入图片描述

    2.6 公司每日打卡情况组合图

    3:找出至少5个异常事件,并分析这些事件之间可能存在的关联,总结认为有价值的威胁情报,并简要说明你是如何利用可视分析方法找到这些威胁情报的。

    3.1 警告邮件异常

    在这里插入图片描述

    图3.1 邮件往来与邮件主题关系图

    通过数据清洗筛选邮件日志的subject,我们认为服务器发送的警告类主题邮件,如“EmergencyDataBaseFatalError!”、“安全邮件崩溃”、“互联网资产监控报警”、和“重要提醒”这4种都为值得关注的subject。接收这些主题的员工可能存在异常。

    因此,根据异常主题匹配得到图3.1的员工id,分别为1184、1164、1455、1098、1207、1487等。

    3.2 辞职异常

    我们猜测在公司新产品临近发布的这段时间里,有辞职意向的员工可能会存在威胁。

    通过筛选邮件日志主题,发现id为1487、1281和1376的员工发送过主题为“【辞职信】”的邮件,如图3.2所示。

    在这里插入图片描述

    图3.2 辞职异常员工图

    3.3 无打卡有“Tcp/Login”日志记录异常

    在这里插入图片描述

    图3.3 公司未全勤日打卡人数与有“Tcp/Login”日志的员工个数统计图

    根据打卡日志、登录日志和TCPLOG日志,我们猜测,如果出现有员工无打卡记录但是登录日志和TCPLOG日志有记录的这种情况,可能是一种异常事件。

    由问题二得知该月周一到周五都为全勤,因此通过广度优先搜索算法统计了周末打卡的人数和有“Tcp/Login”日志记录的人数,得到图3.2。可以看出,这8天中均有“Tcp/Login”日志有记录但未打卡的情况。筛选这8天的打卡日志、登录日志和TCPLOG日志,找出了9个有这类异常的员工,如图3.3所示,异常员工id分别为1494、1147、1328、1334、1211、1284、1283、1376和1487。

    在这里插入图片描述

    图3.4 有“Tcp/Login”日志未打卡员工展示

    3.4 登录日志错误异常

    在登录日志中,如果登录服务器或数据库失败,会在state字段显示error,推测30天中登录失败次数多的人可能存在异常。

    将源IP与员工id对应,发现登录操作中只包含研发部员工。统计了研发部门各员工使用7中不同协议登录失败的总次数,如图3.4所示。其中,7种协议累计登录失败次数和使用ssh失败次数top3的员工id为1211、1228和1080。

    在这里插入图片描述

    图3.5 11月研发部门登录操作失败统计图

    3.5 登录日志源IP与user不匹配异常

    在这里插入图片描述

    图3.6 异常登录他人账号人员关系图

    如果登录日志中出现源IP与登录用户id不对应的情况,即源IP对应的员工id与登录日志user中的id不同,且多次连续登录结果都显示为失败,则怀疑可能有人使用他人用户名并尝试破译密码来登录服务器或数据库。

    由问题二中得知了IP的对应关系,因此,我们使用Python中的字符串匹配算法对源IP和员工id进行了匹配,发现有上述异常情况,如图3.6所示。其中,id为1487的员工多次使用1080、1211和1228的用户id尝试登录服务器A,并在一段时间内连续登录失败,该员工在11月6日最后一次使用1228的id的登录状态为成功。11月24日,1487再次使用1228的id成功登录了服务器B。在同一时间,出现了服务器B使用1228的id成功访问服务器A的情况,推测服务器B到A的访问记录也为1487的操作。

    根据上述5个异常事件,得到图3.7各异常员工关系图。

    在这里插入图片描述

    图3.7 各异常与员工对应关系图

    总结异常事件之间关系如下:

    (1)异常1涉及的员工共有26人,其中只有1184和1363为人事部门员工,其他都为研发部门,异常3中提到的员工全部为研发部门。研发部门与财务和人事部门相比,更有可能得到新产品研发相关的重要数据,因此安全威胁存在于研发部门的可能性也就更大。

    (2)1284在异常1和3中都有记录,异常2中发送辞职申请的1376和1487又出现在异常3中,且1487在异常1、2、3、5中都出现过。因此,在异常中出现频率越高的人,越有可能存在安全威胁。

    (3)在异常5中1487登录服务器使用的用户名1080、1211、1228,与异常4中登录失败次数top3的员工id完全吻合,这三个员工出现多次登录错误的情况,极有可能是1487在尝试破译他们的服务器登录密码造成的。因此,1487是所有异常员工中安全威胁最大的人。

    展开全文
  • 员工隐性知识转移的网络结构和影响因素研究,邓婉君,单伟,运用社会网络分析研究了技术应用部门中员工隐性知识转移的网络结构,及知识转移中的员工地位,进而重点探讨了员工层面的因素对知
  • 基于知识员工激励和生产率理论分析,以...通过横截面数据调查,采用结构方程模型(SEM)的分析方法,对假设和理论模型进行验证和修正.揭示企业重组后知识员工的激励要素及其生产率之间的量化关系,为管理实践提供指导.
  • MySQL介绍,SQL入门及表结构分析

    千次阅读 2021-01-01 09:33:48
    MySQL是什么: 先简单解释一下数据库是什么,数据库就是数据的仓库,也是一种文件系统,需要使用SQL语句来进行访问。 MySql则是关系型数据库(库中的数据存在实体与实体的...MySQL结构图: 用文字描述:一个数据库的

    数据库分类:

    关系型数据库(SQL):通过表与表之间,行与列之间的关系去存储数据。如MySQL、Oracle(两者本质都是DBMS,数据库管理系统)

    非关系型数据库(No SQL意为Not only SQL):通过对象自身属性去存储。如Redis。

    MySQL是什么:

    先简单解释一下数据库是什么,数据库就是数据的仓库,也是一种文件系统,需要使用SQL来进行操作。

    MySQL则是关系型数据库管理系统(库中的数据存在实体与实体的关系)。

    常见的关系型数据库(Java开发中,MySQL和Oracle最为常见):

    Oracle:大型的数据库,收费的。
    MySQL:小型的数据库,免费开源的。被Oracle收购了(6.x版本后开始收费)。
    SQLServer:微软的数据库。
    DB2:IBM公司产品,大型的数据库,收费的。

    数据库的三级模式和二级映像:

    三级模式对应数据库的三层:外部层,概念层,内部层。每层各对应一个模式,分别是外模式,概念模式,内模式。

    三级模式是数据的三个抽象级别,每个级别关心的重点不同。

    外模式面向用户,展示数据(如视图,可以向不同的人展示不同的数据);

    概念模式面向设计人员,描述数据,如表的字段设置,类似于一个表的列标题;

    内模式面向数据库本身,存储数据。

    二级映像是一种规则,规定了三个模式的联系和转换。

    外模式/概念模式映像,保证数据逻辑独立性,概念模式变了,修改外模式/概念模式映像即可,不会影响应用程序。

    概念模式/内模式映像,保证数据物理独立性,内模式变了,修改概念模式/内模式映像就好,概念模式、应用程序不受影响。

    MySQL结构图:

    在这里插入图片描述
    用文字描述:一个数据库管理系统(如MySQL)中包含多个数据库,一个数据库中有多张表,一个表中包含多个字段(字段和JavaBean的属性对应),表中存放多行数据,一行数据和一个JavaBean实体对象对应。

    操作MySQL相关基本命令:

    mysql install(安装服务)
    mysqld --initialize(初始化操作,生成data目录)
    net start mysql(启动服务)
    mysql -u root -p(登录)
    show databases;(查看所有数据库)
    use 数据库名称;(切换数据库)
    show create database 数据库名称;(查询数据库的创建信息)
    select database(); (查询当前正在使用的数据库 )
    drop database 数据库名称;(删除数据库)
    alter database 数据库名称 character set ‘gbk’ collate ‘校对规则’;(修改数据库)
    show tables(查看该库所有数据表)
    show create table 表名称;(查询表的创建信息)
    desc 表名(查看表结构)

    MySQL常用数据类型:

    字符串型:varchar(长度可变0-65535)、char(长度不可变0-255,剩余字符用空格补齐)、tinytext、text

    数值型:tinyint(1字节) 、smallint(2字节)、mediumint(3字节)、int(4字节)、bigint(8字节)、float(4字节)、double(8字节)

    日期型:date(包含年月日)、time(包含时分秒)、datetime(包含年月日时分秒,插入数据时如果为空,字段值则为空)、timestamp(时间戳,插入数据时如果为空,获取当前系统日期到1970.1.1的毫秒数,存入字段值)
    注意:空字符串不是null。

    InnoDB和MyISAM引擎的区别:

    InnoDBMyISAM
    事务支持支持不支持
    外键约束支持不支持
    全文索引不支持支持
    支持行锁和表锁只支持表锁
    表空间大小较大,约为MyISAM两倍较小
    物理文件.frm文件、.idb文件.frm文件、.myd文件、.myi文件
    delete后自增重启后,自增量从1开始(存在内存中)重启后,从上个自增量开始(存在文件中)

    总的来说:InnoDB支持事务,安全性高,多表多用户操作;MyISAM节约空间,速度较快,但不支持事务。

    SQL概述及分类:

    SQL(Structured Query Language)意为结构化查询语言,是非过程性的语言(一条语句,就对应一个返回结果),用于操作数据库的通用语言。

    DDL(Data Definition Language)数据定义语言:creat(创建)、alter(修改)、drop(删除),用于数据库、表、视图、索引上。

    DML(Data Manipulation Language)数据操作语言:insert(插入)、update(修改)、delete(删除),用于增,删,改表内数据

    DQL(Data QueryLanguage)数据查询语言:select(查询),用于查询表内数据。

    DCL(Data Control Language)数据控制语言:crant、revoke,主要应用在数据访问权的控制。(用的相当少了)

    SQL基本语法:

    有关数据库的创建、修改、删除:

    创建:create database 数据库名称;
    修改:alter database 数据库名称;
    删除:drop databse [if exitsts] 数据库名称;(防止数据库不存在,进行删除而报错添加:if exitsts)
    

    有关表的创建、修改、删除:

    1、表名称后跟的括号,要以分号结束。
    2、字段要以逗号结束,最后一个字段不能加逗号。
    3、约束、注释可以不写。
    4、类型如果为字符数据,必须指定长度。
    5、primary key(字段名):设置主键

    创建:
    create table [if not exists]表名称(
    		`字段名1` 类型(长度) [约束] [注释],
    		`字段名2` 类型(长度) [约束] [注释],
    		`字段名3` 类型(长度) [约束] [注释]
    )engine=InnoDB default charset=utf8;
     
    修改:
    alter table 表名 rename 新表名称;(修改表的名称)
    alter table 表名 add 新列名称 类型(长度) 约束;(添加列)
    alter table 表名 drop 列名称;(删除列)
    alter table 表名 modify 列名称 类型(长度) 约束;(修改列的类型或约束,不能修改名称)
    alter table 表名 change 旧名称 新列名 类型(长度) 约束;(修改列的名称,不能修改类型和约束)
    
    
    删除
    drop table[if exitsts] 表名称; (防止表不存在,进行删除而报错添加:if exitsts)
    

    有关数据的插入、修改、删除和查询(重点):

    插入:
    insert into 表名称 values(值1,值2,值3);(为所有字段插入值)
    insert into 表名称 (字段1,字段2) values(值1, 值2);(为指定字段插入对应值)
    
    修改:
    update 表名称 set 字段1=值1,字段2=值2,... where 条件;(修改条件为...的指定字段,没有where条件则修改字段全部数据)
    
    删除:
    delete from 表名称 where 条件;(删除指定条件的数据,没有where则删除表中所有数据)
    truncate 表名称;(也可以删除全部数据,但方式是先把表删除,然后创建一种表结构相同的空表,不支持事务操作)
    
    查询(重点):
    select * from 表名称;(最基本select语句,查询所有列全部数据)
    
    select 字段1,字段2 from 表名称;(查询指定字段的数据)
    
    select distinct 字段 from 表名称;(查询并去重指定字段数据,必须加字段,用*表示不起作用)
    
    select * from 表名称 where 条件;
    
    其中条件可以是运算符:>  <  =  !=  >=  <=
    可以是in、not in(数值1,数值2,数值3):表示匹配其中的具体值,可嵌套子查询语句使用。
    可以是like '表达式'、not like '表达式':进行模糊匹配,'张_'表示开头是张,且必须两个字;'张%'表示开头是张,不限字数;'%张%'表示只要有张即可。
    可以是 is null:判断个字段是否为空
    可以是 is not null:判断个字段是否不为空
    可以再结合and or not进行编写where语句,如:
    select * from student where age >= 16 and age < 19;
    
    select * from 表名称 order by 列名 升序asc/降序desc;(对查询的结果进行排序,默认为升序,总是放在select语句最后)
    
    select * from 表名称 limit 起始下标[(n-1)*pageSize],页面大小(pageSize);(n:当前页数,分页查询)
    注意:总页数=数据总数/页面大小
    
    select count(字段) from 表名称;(聚集函数-计数)
    select sum(字段) from 表名称;(聚集函数-求和)
    select max(字段) from 表名称;(聚集函数-求最大值)
    select min(字段) from 表名称;(聚集函数-求最小值)
    
    一些字符串操作的函数:
    concat(A,B):连接字符串A和B
    substring(A,1,3):截取A字符串中的第1位到第3位字符串
    
    一些日期操作的函数:
    year(date):获得指定日期的年份
    month(date):获得指定日期的月份
    
    
    select 字段, 聚集函数 from 表名称 group by 字段 having 过滤条件;(根据字段进行分组,分组一般和聚集函数一起使用,求每组某个字段的总和,having和where均可实现过滤,但在having可以使用聚集函数,where不能使用聚集函数,也不能作用在group后)
    
    例子(为了好理解,在各个字段后加上别名):
    select product 商品名, sum(price) 价格总和 from orders where price > 800 GROUP BY product having 价格总和 > 200 ORDER BY 价格总和 desc;
    
    这句SQL的含义:从orders表中,查询商品名和价格总和(聚集函数sum计算出来的),且prive必须大于800,按商品名分组后,过滤出价格总价大于200的数据,并按价格总和降序排序
    
    
    

    select语句顺序:

    select…distinct… from… join… where… group by… having… order by… limit
    去重>连接>筛选>分组>过滤>排序>分页
    在这里插入图片描述

    count(字段)、count(*)、count(1)的区别:

    执行效果上,count(1)和count(*)相同。
    但count(1)忽略所有列,用1代表代码行,在统计结果时,不会忽略列值为NULL。
    而count(*)包括所有列,相当于行数,在统计结果时,不会忽略列值为NULL。
    count(字段)只包括列名那一列,在统计结果时,会忽略列值为NULL的计数不统计
    执行效率上,count(主键)效率最高;若不选主键,count(1)比count(字段)效率高;若表中只有一个字段,count(*)效率最高。

    事务管理:

    事务管理原则:ACID原则。
    原子性A(Atomicity):事务内操作不可分离,要么都成功,要么都失败。

    一致性C(Consistency):事务前后数据要保持一致,不可冲突。

    隔离性I(Isolation):多个用户并发访问数据库时,数据库为每一用户开启事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

    持久性D(Durability):事务一旦提交便不可逆,被持久到数据库中。(服务器发生宕机断电,如果已经提交,不会回滚)

    事务的隔离性会产生一些问题,为了解决这些问题,有了事务的隔离性。

    脏读:一个事务读取并操作了另一事务未提交的数据。(两事务操作同一数据,一事务还未提交,另一事务操作了未提交数据)
    不可重复读(不一定是错误):在一个事务内,多次读取同一行数据结果不同。(查询时,有人修改了数据)
    虚读(幻读):一个事务内读取到了别的事务新增的数据,导致前后读取数量不一致。(查询时,有人新增了数据)

    mysql常规操作事务语句如下:
    在这里插入图片描述

    数据库表结构设计三种方式:

    一对一表结构
    在这里插入图片描述

    一对多表结构

    值得注意的是,一对多和多对一结构是相对的,一对多重点在对多,多对一重点在对一

    在这里插入图片描述
    多对多表结构
    在这里插入图片描述

    创建单表时的约束:

    primary key(声明字段为主键,唯一、非空、被引用)
    auto_increment(声明字段自增长)
    unique (声明字段唯一)
    not null(声明字段不为空)

    创建一对多表结构时,多表的约束:

    多表约束其实就是外键约束,为了数据完整性而存在。

    上面所说的部门表和员工表,在一对多表结构中,如果不加外键,我们可以删除两个部门的数据,此时部门数据已经不存在了,但是员工表中还是存在部门的外键,显然这是不合理的。

    即便这样,也不建议直接在数据库层面直接使用外键,应放到业务层面处理。

    creat table order(
    	oid int primary key auto_increment,
    	oname varchar(50),
    	oprice doubble,
    	uid int,
    	primary key(id)  建议这样设置主键,方便查看
    	foreign key order(uid) references user(uid)         这行表示声明uid为外键并执行user用户主键	
    );
    

    笛卡尔积

    当联合查询两张表时,两张表有关联,并通过外键关联,会出现笛卡尔积,如下:
    在这里插入图片描述

    我们理想的情况,应该是查出6条数据才对,但却查出了24条(相当于两张表相乘了),想要解决笛卡尔积,可以采用联表查询

    联表查询

    1、分析查询的数据分别来自哪些表字段

    2、确定联查方式(内连接查询、左连接查询、右连接查询)

    3、找出交叉点,判断条件(表中共有字段)

    普通内连接(参照上图两表):
    select * from dept inner(可省略) join emp on dept.did = emp.dno;
    
    隐式内连接:
    select * from dept d,emp e where d.did = e.dno;
    
    左外连接:
    select * from dept left join emp on dept.did = emp.dno;
    
    右外连接:
    select * from dept right join emp on dept.did = emp.dno;
    
    注意:哪个表先写在from后,默认先展示哪个表的字段。join关键词左边的是左表,右边的是右表
    对于普通内连接:join可以和where连用,也可以和on连用
    对于隐式内连接:join只能和where连用
    对于左,右连接:join只能和on连用
    
    上面四种连接,在没有多余数据的情况下(都有对应的主外键关联),查询出的是数据完全相同。
    
    当存在多余数据时:
    内连接默认不查询,只查询出有两表中有关联的数据;
    左连接先把左表所有的数据全部都查询出来,再把两个表中有关联的数据查询出,再将无关联的查询出来;
    右连接先把右表所有的数据全部都查询出来,再把两个表中有关联的数据查询出,再将无关联的查询出来;
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    子查询

    在增删改查语句中,其筛选条件是另一条select语句,就是子查询,子查询最常用于select语句的where子句中。(可嵌套)

    在这里用具体问题去演示子查询,参考三张表:
    在这里插入图片描述
    观察三张表数据,试着去解决这样一个问题:查询科目高等数学-1的同学信息(学号,姓名,分数)

    我们先用上面的联表查询做一下,SQL如下:
    select s.student_no,s.student_name,r.result from `student` s 
    join `result` r  连接成绩表,用于查询分数
    on s.student_no = r.student_no   到这里可以查出所有同学的信息
    join `subject` sub
    on r.subject_no = sub.subject_no  连接科目表,用于科目筛选
    where sub.subject_name = '高等数学-1';   然后筛选科目为高等数学-1的同学
    
    然后再用子查询做一个对比,SQL如下:
    select s.student_no,s.student_name,r.result from `student` s 
    join `result` r  
    on s.student_no = r.student_no  到此处和上面一样,都要先查询成绩
    where r.subject_no = (select subject_no from `subject` where subject_name = '高等数学-1')  子查询语句代替联表查询
    
    一般情况下,连接查询的逻辑比子查询要简单,很容易理解,但要进行连表;
    而使用子查询可以减少不必要的连接查询,效率高,理解较难(所需要的条件在其他表,但该条件数据不需要展示,该情况可考虑子查询语句)
    
    注意:子查询由里及外。
    
    展开全文
  • 总体设计主要包括系统功能设计、系统总体结构设计、系统数据结构设计和系统安全设计等;详细设计主要包括系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对系统进行功能测试,并对测试结果...
  • 浙江工商大学计算机与信息工程学院 数据结构实验大作业报告 专 业 电 子 商 务 班 级 商 务1202 学 号 1212200206 姓 名 陈志伟 指导教师 韩建伟 2013 年 5 月 一问题分析 职工管理系统是一个工作单位不可缺少的管理...
  • 企业的安全价值观与员工的组织承诺密切相关,为有效改善企业安全生产水平,将企业安全价值观与员工组织承诺进行维度划分,通过理论分析构建各维度间关系的概念模型,并运用问卷调查以及结构方程模型方法进行实证分析。...
  • 数据结构实训——员工管理系统

    千次阅读 多人点赞 2019-01-11 19:40:00
    2 问题分析和任务定义 要求: 每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。 (1) 排序:按不同关键字,对所有员工的信息进行排序。(这里仅按照工号排序) (2) 查询:按特定...

    1 课题描述

    每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。

    2 问题分析和任务定义

    要求:

    每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。

    1) 排序:按不同关键字,对所有员工的信息进行排序。这里仅按照工号排序

    2) 查询:按特定条件工号、姓名查找员工。

    3) 更新:按编号对某个员工的某项信息进行修改。

    4) 插入:加入新员工的信息。

    5) 删除:按编号删除已离职的员工的信息。

    3 逻辑设计

     

    1)数据类型:

    对员工的信息进行分析,因为要可以根据工号进行排序,因而将工号设置为整数型,而姓名、性别、出生年月、学历、职务、电话、住址这些内容设置为字符串类型。并且还要设置一个整数型遍历num来存储此时含有的记录数。

    struct staff

    {

        int id;///编号

        char name[20];///姓名

        char sex[20];///性别

        char age[20];///出生年月

        char clas[20];///学历

        char duty[20];///职务

        char tel[20];///电话

        char addr[20];///住址

    } s[1000];

    int num;

     

     2)抽象数据类型:

    ADT Staff {

    数据对象DD是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键字。

    数据关系R:数据元素同属一个集合。

    staffinput()

    操作结果:输入员工信息

    staffdisplay()

    操作结果:浏览员工记录

    staffsearch()

    操作结果:查找员工记录

     staffdel()

    操作结果:删除员工记录函数

    staffadd()

    操作结果:添加员工记录

    staffchange()

    操作结果:修改员工记录

    staffsort()

    操作结果:对员工排序

    }ADT Staff

    3)模块功能:

    功能上主要有录入记录,查找记录,增加记录,删除记录,更改记录,对记录排序,显示所有记录这七大模块。其中查找记录和删除记录这一模块既可以根据工号查找,也可以根据姓名查找,灵活方便。而更改记录这一模块则能够修改该员工记录的所有信息。同时对记录排序这一模块需要使用排序算法来实现。

     

     

    4 详细设计

     

    员工信息结构体:

    struct staff

    {

        int id;///编号

        char name[20];///姓名

        char sex[20];///性别

        char age[20];///出生年月

        char clas[20];///学历

        char duty[20];///职务

        char tel[20];///电话

        char addr[20];///住址

    } s[1000];

    int num;

     

    <1>输入员工信息函数:void staffinput()

    输入多组员工记录,包括工号、姓名、性别、出生年月、学历、职务、电话、住址。

    <2>浏览员工记录函数:void staffdisplay()

    打印所有员工的记录,工号、姓名、性别、出生年月、学历、职务、电话、住址

    <3>查找员工函数:void staffsearch()

    既可以按照员工的工号也可以按照员工的姓名来查找,然后打印该员工信息。

    <4>删除员工记录函数:void staffdel()

    既可以按照员工的工号也可以按照员工的姓名来删除该员工记录。删除该条记录后num-1,同时要将该记录后面的记录向前挪一位。

    <5>添加员工记录函数:void staffadd()

    插入一条新员工的记录,这条记录会添加在顺序表的表尾,同时num+1

    <6>修改员工记录函数:void staffchange()

    先按照员工的姓名或者工号查找到该员工的记录,然后可以对该员工的所有信息都能够修改。

    <7>对员工排序函数:void staffsort()

    使用快速排序,对员工的编号进行排序。

     

    5 程序编码

     

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    struct staff
    {
        int id;///编号
        char name[20];///姓名
        char sex[20];///性别
        char age[20];///出生年月
        char clas[20];///学历
        char duty[20];///职务
        char tel[20];///电话
        char addr[20];///住址
    } s[1000];
    int num;
    void staffinput()///输入员工信息
    {
        int i,n;
        printf("请输入需要创建信息的职工人数n:\n");
        scanf("%d",&n);
        num=n;
        for(i=0; i<n; i++)
        {
            printf("请输入员工编号: ");
            scanf("%d",&s[i].id);
            printf("请输入姓名:  ");
            scanf(" %s",s[i].name);
            printf("请输入性别:  ");
            scanf(" %s",&s[i].sex);
            printf("请输入出生年月:  ");
            scanf(" %s",&s[i].age);
            printf("请输入学历:  ");
            scanf(" %s",&s[i].clas);
            printf("请输入职务:  ");
            scanf(" %s",&s[i].duty);
            printf("请输入电话:  ");
            scanf(" %s",&s[i].tel);
            printf("请输入住址:  ");
            scanf(" %s",s[i].addr);
            printf("\n");
        }
        printf("创建完毕!\n");
    }
    
    void staffdisplay()///展示员工信息
    {
        int i;
        printf("\n员工编号\t姓名\t性别\t出生年月\t学历\t职务\t电话\t住址\n");
        for(i=0; i<num; i++)
        {
            printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].clas,s[i].duty,s[i].tel,s[i].addr);
        }
        return ;
    }
    void s_change(int n)///更改员工信息
    {
        int a,b;
        int id;///编号
        char name[20];///姓名
        char sex[20];///性别
        char age[20];///出生年月
        char clas[20];///学历
        char duty[20];///职务
        char tel[20];///电话
        char addr[20];///住址
        printf("确实需要修改此人的信息按1,否则按0\n");
        scanf("%d",&a);
        if(a==1)
        {
            while(1)
            {
                printf("\n需要进行修改的选项\n 1.员工编号 2.姓名 3.性别 4.出生年月 5.学历 6.职务 7.电话 8.住址\n");
                printf("请输入你想修改的那一项序号:\n");
                scanf("%d",&b);
                if(b>8||b<1)
                {
                    printf("\n选择错误,请重新选择!\n");
                    getchar();
                    continue;
                }
                else
                {
                    switch(b)
                    {
                    case 1:
                        printf("员工编号更改为:");
                        scanf("%d",&id);
                        s[n].id=id;
                        break;
                    case 2:
                        printf("姓名改为: ");
                        scanf(" %s",name);
                        strcpy(s[n].name,name);
                        break;
                    case 3:
                       printf("性别改为: ");
                        scanf(" %s",&sex);
                        strcpy(s[n].sex,sex);
                        break;
                    case 4:
                        printf("出生年月改为: ");
                        scanf("%s",&age);
                        strcpy(s[n].age,age);
                        break;
                    case 5:
                        printf("学历改为: ");
                        scanf("%s",&clas);
                        strcpy(s[n].clas,clas);
                        break;
                    case 6:
                        printf("职务改为: ");
                        scanf("%s",&duty);
                        strcpy(s[n].duty,duty);
                        break;
                    case 7:
                        printf("电话改为: ");
                        scanf("%s",&tel);
                       strcpy(s[n].tel,tel);
                        break;
                    case 8:
                        printf("住址改为: ");
                        scanf("%s",addr);
                        strcpy(s[n].addr,addr);
                        break;
                    }
                    break;
                }
            }
        }
    }
    int my_cmp(staff a, staff b)
    {
        return a.id<b.id;
    }
    void staffsort()///按照编号给员工排序
    {
        printf("这里按照员工编号排序:\n");
        sort(s,s+num,my_cmp);
        printf("按照员工编号排序之后的记录:\n");
        staffdisplay();
    }
    void staffchange()
    {
        int a,b,c,i,j;
        char x[20];
        printf("1.按照姓名查找需要修改员工的信息\n");
        printf("2.按照工号查找需要修改员工的信息\n");
        scanf("%d",&a);
        if(a==1)
        {
            getchar();
            printf("请输入要修改信息的员工姓名\n");
            scanf("%s",&x);
            for(i=0; i<num; i++)
            {
                if(strcmp(s[i].name,x)==0)
                {
                    printf("找到此人,原始记录为:\n");
                    printf("\n员工编号\t姓名\t性别\t出生年月\t学历\t职务\t电话\t住址\n");
                    printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].clas,s[i].duty,s[i].tel,s[i].addr);
                    s_change(i);
                    break;
                }
            }
            if(i>=num)
            {
                printf("查无此人!!!\n");
            }
        }
        if(a==2)
        {
            printf("请输入要修改信息的员工工号\n");
            scanf("%d",&c);
            for(i=0; i<num; i++)
            {
                if(s[i].id==c)
                {
                    printf("找到此人,原始记录为:\n");
                    printf("\n员工编号\t姓名\t性别\t出生年月\t学历\t职务\t电话\t住址\n");
                    printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].clas,s[i].duty,s[i].tel,s[i].addr);
                    s_change(i);
     break;
                }
            }
            if(i>=num)
            {
                printf("查无此人!!!\n");
            }
        }
    }
    void staffsearch()
    {
        int a,b,c;
        int i,j;
        char x[20];
        printf("1.按照姓名查找员工信息\n");
        printf("2.按照工号查找员工信息\n");
        scanf("%d",&a);
        if(a==1)
        {
            getchar();
            printf("请输入要查找员工的姓名\n");
            scanf("%s",&x);
            for(i=0; i<num; i++)
            {
                if(strcmp(s[i].name,x)==0)
                {
                    printf("找到此人,原始记录为:\n");
                    printf("\n员工编号\t姓名\t性别\t出生年月\t学历\t职务\t电话\t住址\n");
                    printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].clas,s[i].duty,s[i].tel,s[i].addr);
                   break;
                }
            }
            if(i>=num)
            {
                printf("查无此人!!!\n");
            }
        }
        if(a==2)
        {
            printf("请输入要查找员工的工号\n");
            scanf("%d",&c);
            for(i=0; i<num; i++)
            {
                if(s[i].id==c)
                {
                    printf("找到此人,原始记录为:\n");
                    printf("\n员工编号\t姓名\t性别\t出生年月\t学历\t职务\t电话\t住址\n");
                    printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].clas,s[i].duty,s[i].tel,s[i].addr);
                break;
                }
            }
            if(i>=num)
            {
                printf("查无此人!!!\n");
            }
        }
    }
    void staffadd()
    {
        printf("请输入要插入的新员工的信息:\n");
        int i;
        i=num;
        num++;
        printf("请输入员工编号: ");
        scanf("%d",&s[i].id);
        printf("请输入姓名:  ");
        scanf(" %s",s[i].name);
        printf("请输入性别:  ");
        scanf(" %s",&s[i].sex);
        printf("请输入出生年月:  ");
        scanf(" %s",&s[i].age);
        printf("请输入学历:  ");
        scanf(" %s",&s[i].clas);
        printf("请输入职务:  ");
        scanf(" %s",&s[i].duty);
        printf("请输入电话:  ");
        scanf(" %s",&s[i].tel);
        printf("请输入住址:  ");
        scanf(" %s",s[i].addr);
        printf("\n");
    
    }
    void staffdel()///删除员工记录
    {
        int a,b,c;
        int i,j;
        char x[20];
        printf("1.按照姓名删除员工信息\n");
        printf("2.按照工号删除员工信息\n");
        scanf("%d",&a);
        if(a==1)
        {
            getchar();
            printf("请输入要删除员工的姓名\n");
            scanf("%s",&x);
            for(i=0; i<num; i++)
            {
                if(strcmp(s[i].name,x)==0)
                {
                    printf("找到此人,原始记录为:\n");
                    printf("\n员工编号\t姓名\t性别\t出生年月\t学历\t职务\t电话\t住址\n");
                    printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].clas,s[i].duty,s[i].tel,s[i].addr);
                    printf("继续删除请按1,不再删除请按0\n");
                    scanf("%d",&b);
                    if(b==1)
                    {
                        for(j=i; j<num-1; j++)///后面的内容移动到前面
                        {
                            s[j].id=s[j+1].id;
                            strcpy(s[j].name,s[j+1].name);
                            strcpy(s[j].sex,s[j+1].sex);
                            strcpy(s[j].age,s[j+1].age);
                            strcpy(s[j].clas,s[j+1].clas);
                            strcpy(s[j].duty,s[j+1].duty);
                            strcpy(s[j].tel,s[j+1].tel);
                            strcpy(s[j].addr,s[j+1].addr);
                        }
                        num--;
                    }
                    break;
                }
            }
            if(i>=num)
            {
                printf("查无此人!!!\n");
            }
        }
        if(a==2)
        {
            printf("请输入要删除员工的工号\n");
            scanf("%d",&c);
            for(i=0; i<num; i++)
            {
                if(s[i].id==c)
                {
                    printf("找到此人,原始记录为:\n");
                    printf("\n员工编号\t姓名\t性别\t出生年月\t学历\t职务\t电话\t住址\n");
                    printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",s[i].id,s[i].name,s[i].sex,s[i].age,s[i].clas,s[i].duty,s[i].tel,s[i].addr);
                    printf("继续删除请按1,不再删除请按0\n");
                    scanf("%d",&b);
                    if(b==1)
                    {
    
                        for(j=i; j<num-1; j++)
                        {
                            s[j].id=s[j+1].id;
                            strcpy(s[j].name,s[j+1].name);
                            strcpy(s[j].sex,s[j+1].sex);
                            strcpy(s[j].age,s[j+1].age);
                            strcpy(s[j].clas,s[j+1].clas);
                            strcpy(s[j].duty,s[j+1].duty);
                            strcpy(s[j].tel,s[j+1].tel);
                            strcpy(s[j].addr,s[j+1].addr);
                        }
                        num--;
                    }
                    break;
                }
            }
            if(i>=num)
            {
                printf("查无此人!!!\n");
            }
        }
    }
    void load()
    {
        printf("\n\n");
        printf("        ******************欢迎进入职工信息管理系统****************\n");
        printf("           1.录入职工信息");
        printf("           2.浏览职工信息\n");
        printf("           3.查询职工信息");
        printf("           4.删除职工信息\n");
        printf("           5.添加职工信息");
        printf("           6.修改职工信息\n");
        printf("           7.排序职工信息\n");
        printf("           8.退出\n");
        printf("        ********************谢谢使用******************\n");
        printf("\n");
        return ;
    }
    int main()
    {
    
        int n;
        int flag=1;
        char a;
        num=0;
        while(1)
        {
            load();/*调用菜单函数*/
            printf("请选择你需要操作的步骤(1--8):\n");
            scanf("%d",&n);
            if(n>=1&&n<=8)
            {
                flag=0;
                switch(n)
                {
                case 1:
                    printf("               *****输入职工信息*****\n");
                    printf("\n");
                    staffinput();
                    break;
                case 2:
                    printf("              *****浏览职工信息*****\n");
                    printf("\n");
                    staffdisplay();
                    break;
                case 3:
                    printf("              *****按职工号或姓名查询职工信息*****\n");
                    printf("\n");
                    staffsearch();
                    break;
                case 4:
                    printf("              *****删除职工信息*****\n");
                    printf("\n");
                    staffdel();
                    break;
                case 5:
                    printf("              *****添加职工信息*****\n");
                    printf("\n");
                    staffadd();
                    break;
                case 6:
                    printf("               *****修改职工信息*****\n");
                    printf("\n");
                    staffchange();
                    break;
                case 7:
                    printf("               *****对职工信息排序*****\n");
                    printf("\n");
                    staffsort();
                    break;
                default :
                    return 0;
                }
            }
            else
            {
                printf("您输入有误,请重新选择!\n");
                getchar();
                continue;
            }
        }
        return 0;
    }

     

     

     

    6 程序调试与测试

     

    1)菜单目录:

     

     

    2)输入员工信息:

     

    3)显示全部员工信息:

     

    4)查询员工信息:

    按姓名和工号查找

     

     

    5)删除员工信息:

    删除后的所有数据:

     

    6)修改员工信息:

    修改后的记录:

    7)员工信息排序:

    按照员工的编号排序:

     

    7 结果分析

    这里只有员工编号为整数型,其他的都是字符串类型,因而错误类型的输入会造成乱码和死循环的产生。该程序主要是基于结构体数组来实现排序和输出的,因而属于顺序表,遍历输出的时间复杂度是O(n),空间复杂度也是O(n)。同时在这里删除某一员工的记录后,需要将其后面的所有记录都要向前移动一位,会花费一些时间;而插入一条记录只需要早顺序表之后添加即可。排序所使用的快速排序时间复杂度是O(nlogn)~O(n^2),空间复杂度是O(logn)~O(n)

     

    8 总结

    该程序能够完成员工信息的查询、更新、插入、删除、排序等功能。基本达到了题目要求的目标了。但仍然存在着一些问题,比如在实现排序功能的时候,该程序仅仅实现了按照员工编号排序的功能,这也与程序的要求有关。比如如果按照职务排序,计算机并不能去识别到底哪一个职务大,更何况不同的公司有不同的情况,这只能在编写程序的时候按照该公司的职务安排提前规定各个职务的优先级,学历也是如此。该程序在任务要求中并没有规定这些,就导致了漏洞很大。同时该程序使用的是顺序表类型的存储结构,虽然实现了随机存取,但在删除记录信息的过程中需要挪动被删记录之后的所有记录,耗时间。编写该程序并不是很难,但从这次程序中,我学到了以后工作时需要多与客户和产品经理交流沟通,明确客户的需求,减少程序中的漏洞,从实际出发,编写合适有效的程序。

    转载于:https://www.cnblogs.com/wkfvawl/p/10256914.html

    展开全文
  • 在 IT公司,有许多员工架构可用。一些IT公司或特定部门或特定级别遵循主要的程序员结构,其中有一个“start”组织围绕一个“chief”职位,指定给最了解系统要求的工程师。 首席程序员架构 然而,有些人遵循民主...
  • 该研究分析了 chittoor 区公共和私营部门选定银行员工的工作表现和职业压力。 是对银行业从业人员干部与文职干部的比较研究。 通过多阶段抽样技术,本研究考虑了包括官员和文职干部在内的306名员工样本。 主要数据...
  • 员工管理数据库设计

    万次阅读 多人点赞 2019-07-06 20:56:52
    一、课题背景和目的 员工管理数据库系统,有助于为对员工数量增多,信息量增大,以及员工部门分配,工资发放等问题实现现代、化网络化管理,...二、数据库的需求分析 通过设计数据库实现对企业员工的基本信息、职...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,617
精华内容 36,246
关键字:

员工结构分析

友情链接: WebChat.rar