java专业课程设计人事标准管理系统.doc
《java专业课程设计人事标准管理系统.doc》由会员分享,可在线阅读,更多相关《java专业课程设计人事标准管理系统.doc(48页珍藏版)》请在咨信网上搜索。
人事管理系统 一.系统需求分析: 2 (1) 系统功效设计 2 (2) 系统功效结构 2 (3) 数据库设计 2 二. 功效模块开发 3 (1) 查询人员信息界面 3 (2) 添加职员界面 3 (3) 修改职员信息界面 4 (4) 删除职员界面 5 (5) 职员考评界面 5 (6) 职员考评历史统计界面 6 三. 各个类说明 6 四. 程序代码 9 (1) Manager 9 (2) CardEmploy 11 (3) SelEmploy 12 (4) AddEmploy 14 (5) ReviseEmploy 16 i UpdDialog 18 (6) DelEmploy 21 (7) AllEmploy 22 (8) Examine 23 (9) History 27 (10) EmployModel 28 (11) AppraisalModel 30 (12) SqlHelper 33 一.系统需求分析: (1) 系统功效设计 i 职员信息管理:职员信息管理包含对职员基础信息和情况进行查询、添加、删除和修改及部门管理 ii 职员考评管理:包含对职员考评情况进行操作,还能够对历史考评情况进行浏览 (2) 系统功效结构 人事管理系统结构功效结构图所表示: (3) 数据库设计 职员基础表(Employinfo) 名称 字段名称 数据类型 主键 非空 工号 Empno varchar(10) Yes Yes 姓名 Ename varchar(10) No yes 性别 Sex varchar(4) No yes 出生年月 Birthday Datetime No Yes 部门 DeptNo Char(10) No Yes 职务 Ejob Char(20) No Yes 工资 Sal float No Yes 职员考评表(Appraisal) 名称 字段名称 数据类型 主键 非空 工号 Empno varchar(10) yes yes 考评 Consequence varchar(10) no yes 变更日期 RegDate datetime No Yes 考评历史统计(History) 名称 字段名称 数据类型 主键 非空 流水号 JourNo Int Yes yes 工号 Empno varchar(10) no yes 姓名 Ename varchar(10) No Yes 上次考评 OldInfo varchar(10) No Yes 此次考评 NewInfo varchar(10) No Yes 变更日期 RegDate datetime No Yes 二. 功效模块开发 (1) 查询人员信息界面 实例一个SelEmploy类,当点击“查询”时调用EmployModel类queryEmploy方法实现查询 (2) 添加职员界面 实例一个AddEmploy类当点击“添加”时调用EmployModel类updEmploy方法实现添加功效 (3) 修改职员信息界面 实例一个ReviseEmploy类当点击“修改”时,先调用UpdDialo弹跳出一个修改信息对话框,信息修改完成后,调用EmployModel类updEmploy方法实现修改功效 (4) 删除职员界面 实例一个DelEmploy类当点击“删除”时调用EmployModel类updEmploy方法实现删除功效 (5) 职员考评界面 实例一个Examine类当点击“确定”时调用AppraisalModel类updAppraisal方法来完成考评功效 (6) 职员考评历史统计界面 实例一个History类当点击时调用AppraisalModel类updAppraisal方法来完成考评功效 三. 各个类说明 类之间关系图: 1. Manager类 Manager类一个实例,从而生成了人事管理系统界面,用JSplitPane类将整个界面分为左右两个部分。其中左侧实现了人事管理系统功效树,采取JTree类构建,同时实现了TreeSelectionListener接口,定义了该接口所必需实现valueChanged(TreeSelectionEvent e)方法,JSplitPane右边加入卡片布局CardEmploy类。当JTreeTreeSelectionEvent事件发生时,调用CardEmployc.show方法 切换不一样卡片,实现不一样管理界面。 2. CardEmploy类 CardEmploy为卡片布局类面板,关键功效是添加各个界面卡片,当JTreeTreeSelectionEvent事件发生时。切换不一样卡片 3. EmployModel、AppraisalModel类 这两个类继承了AbstractTableModel,关键实现功效是,存放调用sqlhelper 类得到数据。能够经过调用sqlhelper实现 增 删 查 改 功效 4. SqlHelper类 关键就是连接数据库部分基础操作是,方便代码修改,反复使用 5. SelEmploy 这个类继承Panel,为“查询职员”界面。实现了Actionlistener 接口,当ActionEvent 事件发生时,调用EmployModel类queryEmploy方法实现查询 6. AddEmploy、ReviseEmploy、DelEmploy类 这些类继承Pane,分别为“添加职员信息”“修改职员信息”“删除职员信息”界面, 这些类实现了Actionlistener 接口,当ActionEvent 事件发生时,调用EmployModel类updEmploy方法实现添加、查询、删除、功效 7. Examine类 这个类继承Panel,为“考评职员”界面。这个类实现了Actionlistener 接口,当ActionEvent 事件发生时,(1)先经过调用AppraisalModelqueryAppraisal获取上次考评成绩,(2)修改Appraisal表考评成绩(3)再把上次考评成绩跟此次考评成绩加到History表中 8. History 这个类关键是把History表中信息显示到界面上。 四. 程序代码 (1) Manager package com.Manager; import java.awt.*; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.*; import java.awt.event.*; public class Manager extends JFrame implements TreeSelectionListener { JPanel jp; JSplitPane js; JScrollPane jsp; JTree tree; DefaultMutableTreeNode root, t1, t2, t1_1, t1_2, t1_3, t1_4, t1_5, t2_1, t2_2; CardEmploy ae; EmployModel em; public static void main(String[] args) { Manager manager = new Manager(); } public Manager() { // 给树各个结点赋值 root = new DefaultMutableTreeNode("人事管理系统"); t1 = new DefaultMutableTreeNode("基础信息管理"); t1_1 = new DefaultMutableTreeNode("查询职员"); t1_2 = new DefaultMutableTreeNode("添加职员"); t1_3 = new DefaultMutableTreeNode("修改职员信息"); t1_4 = new DefaultMutableTreeNode("删除职员资料"); t1_5 = new DefaultMutableTreeNode("查询全体职员"); t2 = new DefaultMutableTreeNode("人员考评管理"); t2_1 = new DefaultMutableTreeNode("人员考评"); t2_2 = new DefaultMutableTreeNode("考评历史查询"); t1.add(t1_1); t1.add(t1_2); t1.add(t1_3); t1.add(t1_4); t1.add(t1_5); t2.add(t2_1); t2.add(t2_2); root.add(t1); root.add(t2); tree = new JTree(root); // 对树进行监听 tree.addTreeSelectionListener(this); // 实例化CardEmploy面板 并加到jsplitpane边 ae = new CardEmploy(); js = new JSplitPane(); js.setLeftComponent(tree); js.setRightComponent(ae); this.getContentPane().add(js); this.setTitle("人事管理系统"); this.setVisible(true); this.setSize(600, 500); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void valueChanged(TreeSelectionEvent e) { // 获取点击结点名称 DefaultMutableTreeNode dpath = (DefaultMutableTreeNode) tree .getLastSelectedPathComponent(); // 经过点击不一样结点切换不一样界面 if (dpath.equals(t1_1)) { ae.c.show(ae, "1"); } else if (dpath.equals(t1_2)) { ae.c.show(ae, "2"); } else if (dpath.equals(t1_3)) { ae.c.show(ae, "3"); } else if (dpath.equals(t1_4)) { ae.c.show(ae, "4"); } else if (dpath.equals(t1_5)) { ae.c.show(ae, "5"); } else if (dpath.equals(t2_1)) { ae.c.show(ae, "6"); } else if (dpath.equals(t2_2)) { ae.c.show(ae, "7"); } } } (2) CardEmploy /** * 用卡片布局设置各个界面 */ package com.Manager; import javax.swing.*; import java.awt.*; public class CardEmploy extends Panel{ CardLayout c; //查询表 SelEmploy selE; //添加表 AddEmploy addE; //修改职员信息表 ReviseEmploy revE; //删除职员表格 DelEmploy delE; //全部职员信息 AllEmploy allE; //职员考评表 Examine exaE; //历史统计界面 History His; public CardEmploy() { //查询职员表 selE = new SelEmploy(); //添加职员表 addE = new AddEmploy(); //修改职员信息 revE = new ReviseEmploy(); //删除职员表格 delE = new DelEmploy(); //全部职员信息 allE =new AllEmploy(); //职员考评表 exaE = new Examine(); //历史统计界面 His = new History(); JPanel jp = new JPanel(); //定义cardemploy面板 为卡片布局 //把各个面板加入到C卡片布局中 c = new CardLayout(); this.setLayout(c); this.add(selE,"1"); this.add(addE,"2"); this.add(revE,"3"); this.add(delE,"4"); this.add(allE,"5"); this.add(exaE,"6"); this.add(His,"7"); } } (3) SelEmploy /** * SelEmploy 类 设置查询职员界面 */ package com.Manager; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class SelEmploy extends Panel implements ActionListener { EmployModel em; JLabel jl; JTextField jtf; JButton jb; JTable jt; JScrollPane jsp; JPanel jp1; public SelEmploy() { // 北部 jp1 = new JPanel(); jl = new JLabel("输入职员号:"); jtf = new JTextField(20); jb = new JButton("查询"); // 对查询按钮监听 jb.addActionListener(this); jp1.add(jl); jp1.add(jtf); jp1.add(jb); // 中部 em = new EmployModel(); String[] paras = { "1" }; em.queryEmploy("select * from Employinfo where 1 = ?", paras); jt = new JTable(em); jsp = new JScrollPane(jt); this.setLayout(new BorderLayout()); this.add(jp1, BorderLayout.NORTH); this.add(jsp, BorderLayout.CENTER); } public void actionPerformed(ActionEvent e) { if (e.getSource() == jb) { String name = this.jtf.getText().trim(); String sql = "select * from Employinfo where Empno = ?"; String[] paras = { name }; em = new EmployModel(); em.queryEmploy(sql, paras); // 查找成功更新表 jt.setModel(em); } } } (4) AddEmploy package com.Manager; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class AddEmploy extends Panel implements ActionListener { JLabel jl, jl1, jl2, jl3, jl4, jl5, jl6, jl7; JButton jb1, jb2; JTextField jtf1, jtf2, jtf3, jtf4, jtf5, jtf6, jtf7; JPanel jp1, jp2, jp3, jp4; EmployModel em; public AddEmploy() { jl1 = new JLabel("工号:"); jl2 = new JLabel("姓名:"); jl3 = new JLabel("性别:"); jl4 = new JLabel("出生年月:"); jl5 = new JLabel("部门:"); jl6 = new JLabel("职位:"); jl7 = new JLabel("工资:"); jtf1 = new JTextField(20); jtf2 = new JTextField(20); jtf3 = new JTextField(20); jtf4 = new JTextField(20); jtf5 = new JTextField(20); jtf6 = new JTextField(20); jtf7 = new JTextField(20); jb1 = new JButton("添加"); jb2 = new JButton("取消"); // 监听‘添加’ ‘取消’按钮 jb1.addActionListener(this); jb2.addActionListener(this); jp1 = new JPanel(new GridLayout(7, 1)); jp2 = new JPanel(new GridLayout(7, 1)); jp3 = new JPanel(); jp1.add(jl1); jp1.add(jl2); jp1.add(jl3); jp1.add(jl4); jp1.add(jl5); jp1.add(jl6); jp1.add(jl7); jp2.add(jtf1); jp2.add(jtf2); jp2.add(jtf3); jp2.add(jtf4); jp2.add(jtf5); jp2.add(jtf6); jp2.add(jtf7); jp3.add(jb1); jp3.add(jb2); jp4 = new JPanel(new BorderLayout()); jp4.add(jp1, BorderLayout.WEST); jp4.add(jp2, BorderLayout.EAST); jp4.setSize(300, 300); this.setLayout(new FlowLayout()); this.add(jp4); this.add(jp3); } public void actionPerformed(ActionEvent e) { if (e.getSource() == jb1) { // 调用EmployModel 里updEmploy 方法,实现对表格添加 String sql = "insert into Employinfo values(?,?,?,?,?,?,?)"; String[] paras = { jtf1.getText(), jtf2.getText(), jtf3.getText(), jtf4.getText(), jtf5.getText(), jtf6.getText(), jtf7.getText() }; em = new EmployModel(); if (em.updEmploy(sql, paras)) { // 当添加新职员成功时,则弹出”添加成功“对话框 JOptionPane.showMessageDialog(this, "添加成功"); } else if (!em.updEmploy(sql, paras)) { JOptionPane.showMessageDialog(this, "添加失败"); } // 当新职员加入成功后,要把新加入职员工号加到考评表 AppraisalModel temp = new AppraisalModel(); String sql1 = "insert into Appraisal(Empno) values(?)"; String[] paras1 = { jtf1.getText() }; temp.updAppraisal(sql1, paras1); }else if(e.getSource() == jb2){ jtf1.setText(""); jtf2.setText(""); jtf3.setText(""); jtf4.setText(""); jtf5.setText(""); jtf6.setText(""); jtf7.setText(""); } } } (5) ReviseEmploy package com.Manager; /** * 修改职员界面 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ReviseEmploy extends Panel implements ActionListener { JTable jt; JScrollPane jsp; JButton jb1, jb2; JPanel jp1,jp2; EmployModel em; JLabel jl1; public ReviseEmploy() { jl1 = new JLabel("修改职员信息",JLabel.CENTER); jl1.setFont(new Font("宋体", Font.BOLD, 28)); jp2 = new JPanel(); jp2.add(jl1); em = new EmployModel(); String[] paras = { "1" }; em.queryEmploy("select * from Employinfo where 1 = ?", paras); jt = new JTable(em); jsp = new JScrollPane(jt); jb1 = new JButton("修改"); jb2 = new JButton("刷新"); // 对两个按钮进行监听 jb1.addActionListener(this); jb2.addActionListener(this); this.setLayout(new BorderLayout()); jp1 = new JPanel(); jp1.add(jb1); jp1.add(jb2); this.add(jp2,BorderLayout.NORTH); this.add(jsp, BorderLayout.CENTER); this.add(jp1, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e) { if (e.getSource() == jb1) { int rowNum = this.jt.getSelectedRow(); if (rowNum == -1) { JOptionPane.showMessageDialog(this, "请选择一行"); return; } // 弹出修改对话框 new UpdDialog(em, rowNum); } else if (e.getSource() == jb2) { // 刷新修改界面中表格 em = new EmployModel(); String[] paras1 = { "1" }; em.queryEmploy("select * from Employinfo where 1 = ?", paras1); jt.setModel(em); } } } i UpdDialog package com.Manager; /** * 弹出修改界面 */ import javax.swing.*; import java.awt.*; import java.awt.event.*; public class UpdDialog extends JDialog implements ActionListener { JLabel jl1, jl2, jl3, jl4, jl5, jl6, jl7; JButton jb1, jb2; JTextField jtf1, jtf2, jtf3, jtf4, jtf5, jtf6, jtf7; JPanel jp1, jp2, jp3; public UpdDialog(EmployModel em, int rowNums) { jl1 = new JLabel("工号:"); jl2 = new JLabel("姓名:"); jl3 = new JLabel("性别:"); jl4 = new JLabel("出生年月:"); jl5 = new JLabel("部门:"); jl6 = new JLabel("职位:"); jl7 = new JLabel("工资:"); jtf1 = new JTextField(20); jtf2 = new JTextField(30); jtf3 = new JTextField(30); jtf4 = new JTextField(30); jtf5 = new JTextField(30); jtf6 = new JTextField(30); jtf7 = new JTextField(30); // 初始化jtextfield数据 jtf1.setText((String) em.getValueAt(rowNums, 0)); jtf1.setEditable(false); jtf2.setText((String) em.getValueAt(rowNums, 1)); jtf3.setText((String) em.getValueAt(rowNums, 2)); jtf4.setText((String) em.getValueAt(rowNums, 3)); jtf5.setText((String) em.getValueAt(rowNums, 4)); jtf6.setText((String) em.getValueAt(rowNums, 5)); jtf7.setText((String) em.getValueAt(rowNums, 6)); jb1 = new JButton("修改"); jb2 = new JButton("取消"); // 对两个按钮监听 jb1.addActionListener(this); jb2.addActionListener(this); jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); // 设置布局 jp1.setLayout(new GridLayout(7, 1)); jp2.setLayout(new GridLayout(7, 1)); // 添加组件 jp1.add(jl1); jp1.add(jl2); jp1.add(jl3); jp1.add(jl4); jp1.add(jl5); jp1.add(jl6); jp1.add(jl7); jp2.add(jtf1); jp2.add(jtf2); jp2.add(jtf3); jp2.add(jtf4); jp2.add(jtf5); jp2.add(jtf6); jp2.add(jtf7); jp3.add(jb1); jp3.add(jb2); this.add(jp1, BorderLayout.WEST); this.add(jp2, BorderLayout.CENTER); this.add(jp3, BorderLayout.SOUTH); this.setSize(300, 250); this.setVisible(true); this.setLocation(200, 200); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); } }); } public void actionPerformed(ActionEvent e) { if (e.getSource() == jb1) { // 修改职员信息 sql 语句,paras 为待注入值 String sql = "update Employinfo set " + "Ename = ?,Sex = ?,Birthday = ?, DeptNo = ?, Ejob = ? ,Sal=? where Empno = ?"; String[] paras = { jtf2.getText(), jtf3.getText(), jtf4.getText(), jtf5.getText(), jtf6.getText(), jtf7.getText(), jtf1.getText() }; EmployModel temp = new EmployModel(); // 假如修改语句运行成功 则弹出“修改成功”对话框 if (temp.updEmploy(sql, paras)) { JOptionPane.showMessageDialog(this, "修改成功"); } this.dispose(); } else if (e.getSource() == jb2) { // 关闭对话框 this.dispose(); } } } (6) DelEmploy /** * 删除职员 */ package com.Manager; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class DelEmploy extends Panel implements ActionListener { JTable jt; JScrollPane jsp; JButton jb1, jb2; JPanel jp1, jp2; JLabel jl1; EmployModel em; public DelEmploy() { // 北部 jl1 = new JLabel("删除职员", JLabel.CENTER); jl1.setFont(new Font("黑体", Font.BOLD, 30)); jp2 = new JPanel(); jp2.add(jl1); // 中部 em = new EmployModel(); String[] paras = { "1" }; em.queryEmploy("select * from Employinfo where 1 = ?", paras); jt = new JTable(em); jsp = new JScrollPane(jt);- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 专业 课程设计 人事 标准 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文