收藏 分销(赏)

基于BS模式的工资管理系统.doc

上传人:快乐****生活 文档编号:1859837 上传时间:2024-05-10 格式:DOC 页数:25 大小:92.04KB 下载积分:10 金币
下载 相关 举报
基于BS模式的工资管理系统.doc_第1页
第1页 / 共25页
基于BS模式的工资管理系统.doc_第2页
第2页 / 共25页


点击查看更多>>
资源描述
郑州华信学院 课程设计说明书 题目: 网络工资管理系统设计与实现 姓    名:     贾慧萍        院 (系):    信息工程系     专业班级: 10计算机科学与技术    学  号:   1001110156     指导教师:        杨杨       成 绩:              时间: 2013  年 9 月 03 日至   2013 年 10 月 24 日 郑州华信学院 课程设计任务书 题目 基于B/S模式的工资管理系统设计与实现            专业、班级 10计算机科学与技术 学号1001110156 姓名 贾慧萍 主要内容:  首先,开发一个采用B/S结构的企业网络工资管理系统,使用ASP。NET 技术和 SQL server2000 数据库实现的三层结构 Web 应用程序,通过 ADO.NET 访问数据库结合网络编程开发动态网页。 本系统是适合于各企事业单位使用的通用工资管理软件,系统开发目的主要是针对工资管理系统落后、数据环境混乱等问题提出可行的解决方案.给工资管理系统带来先进的管理理念、完善的工资管理制度,从而提高管理水平、节约资源、提高办事效率。 基本要求:   要求系统界面友好,操作简单方便,任意设定工资项目,任意定义工资计算公式,任意定义输出表格等功能健全。 主要参考资料: [1] 赵强. J2EE应用开发[M]。 电子工业出版社,2006 [2] 明日科技。 JSP开发技术大全[M].人民邮电出版社,2007 [3] Bert Bates. Head First Servlets & JSP(影印版)[M] 南 京:东南大学出版社 2002。8     [4] oracle 数据库进阶. 林树泽 李渊编。 清华大学出版社,2011.3 完 成  期  限:  09月03日—10月24日  指导教师签名:           课程负责人签名:                                 2013年09月12日 目 录 1。总体设计 3 1。1 企业网建设规划ﻩ3 1.2 工资管理系统任务概述ﻩ3 1.3 工资管理系统功能需求ﻩ4 1。4 工资管理系统可行性分析ﻩ5 1。5 工资管理系统开发环境 6 2。结构化系统设计 6 2.1 系统功能模块设计ﻩ6 2。2 数据库设计ﻩ7 2.3 界面设计ﻩ8 3.软件的测试ﻩ24 3.1 测试原则ﻩ24 3。2 测试方法ﻩ24 3。3 测试环境 24 3。4 测试内容ﻩ24 总  结ﻩ28 4.1 系统可改进的地方ﻩ28 4.2 发展前景ﻩ28 总  结 1.总体设计 1.1 企业网建设规划 (1)概述 企业网分内部和外部两部分。 外部的页面是展示给所有人员浏览的页面,在外部主要对企业的宣传。在产品展示的页面提供顾客注册的功能,进行网上订购的功能.只有注册的顾客用户才能进行网上订购。内部的页面只有企业内部人员才能浏览,而且必须登录才能进入,没有注册的功能,只有在人事部门进行添加的用户才能进入。(2)组织结构,见图1。1(a)职务为总经理,副总经理;最高级别机构有主管、财务主管、开发部主管、人事部主管、市场部主管;部门设部门经理,普通职员。(3)总体设计,见图1.1(b) 1.2 工资管理系统任务概述 项目名称:基于B/S模式的工资管理系统 开发意图:使员工工资管理更加科学、规范;使员工工资查询更加方便、快捷;发挥网络在工资管理与查询中的作用,实现工资管理与查询的网络化应用目标:通过本系统,能帮助财务人员利用计算机,快速方便的对员工工资进行管理、输入、输出、查找等所需操作,使大量的员工工资能够集中方便的进行管理.员工则能够利用自己的用户名和密码通过本登陆,方便快捷的查询到自己工资信息。 1。3 工资管理系统功能需求 (1)登录内部办公系统的所有用户都可以查询自己的详细工资情况,提供按月查询,按年查询,按特定时间查询三种方式。 (2)企业的财务人员可以进行工资的添加,删除,修改,查询,浏览的操作,在查询中提供按月查询,按年查询,按特定查询,按部门查询,按员工编号查询四种方式. (3)企业的财务人员可对工资信息进行添加,删除,修改,浏览的操作. (4)工资的修改时应在备注后写清楚修改时间以及原因等相关信息。 北京毕博 财务部 开发部 总办 财务科 人力资源部 市场部 硬件开发部 软件开发部 人力资源科 采购部 销售部 图1。1(a) 企业网 外部信息展示 内部办公管理 首页 企业介绍 成功案例 产品展示与网上订购 系统管理 新闻管理 人事管理 财务管理 营销管理 内部交流系统 邮件管理 供应商供应管理 顾客订购管理 新闻动态 人员信息管理 部门信息管理 机构信息管理 图1.1(b) 1.4 工资管理系统可行性分析 (1)技术可行性 ASP.NET的推出也有一定的时间了,它将来的网络编程做好了准备,我在毕业设计中用到的相关技术,也是比较成熟的,只是鉴于对网络编程和。net的熟悉程度,可能在功能的实现上还存在一定的缺陷。基于对指定的系统要实现的功能的要求的考虑,结合对现有技术的掌握程度,鉴于软硬件的资源问题,对于系统的要求和性能,是可以实现的.参与源代码开发的成员必须掌握。NET技术,具有基于SQL2000网络数据库编程经验,对信息管理系统有比较深入的认识,能够很快的进行系统分析并开发实现. (2)经济可行性 本系统基于ASP。NET构架,运用SQL2000网络数据库,成本不高。开发周期不会太长,维护费用也不多。 (3)运行可行性目前许多公司的工资管理系统都不太先进,基于网页的查询系统不完善.由于系统的要求是基于用户操作的基本要求实现的,对各个子系统的划分是符合管理人员的要求的,又本系统是按照三层结构和B/S的思想而开发的,对于系统的升级还是方便易行的,所以本套查询系统可以马上解决这些问题。 按上述三方面进行可行性分析、研究后,笔者认为此项目是可行的. 1。5 工资管理系统开发环境 (1)硬件条件:CPU:P4 2.0 内存:512 DDR 硬盘:80G.服务器一台为数据库服务器和Web服务器;客户端计算机若干;网络通讯设备,主要包括网卡、MODEM 等。 (2)系统平台:采用Browser/Server体系结构,服务器端采用Microsoft Windows XP Professional SP2作为网络操作系统,Web服务器软件采用IIS5.0(Internet Information Server)。客户端软件,包括单机操作系统和浏览器软件,分别选用Windows 98以上版本和Internet Explorer 5。0 以上版本,数据库系统采用Microsoft SQL Server 2000有利于使用操作. (3)开发工具:基于Web的系统开发工具应使开发者使用各种各样的技术来创建动态的Web应用程序,并且应是一个可视化的工具。我们采用了Visual Studio.NET进行开发,它是用来快速创建数据驱动Web应用程序的基于团队的开发环境,支持ASP.NET,以ADO.NET连接数据库,编程语言为C#。 2.结构化系统设计 2。1 系统功能模块设计 (1)主登陆界面模块:该模块提供管理系统的主界面,是主系统的唯一入口和出口,该界面提供用户登陆并选择并调用各子模块 (2)工资管理系统:用户选择该模块后将进入工资管理系统. (3)员工界面:员工进入该模块进行选择查询操作。 (4)工资管理人员界面:工资管理人员进入操作界面。 (5)工资浏览界面:管理人员浏览所有员工工资. (6)工资添加界面:管理人员添加员工工资信息。 (7)工资删除界面:管理人员删除员工工资信息. (8)工资查询界面:在此模块中,管理人员有五种查询方式,员工有3种查询方式。 (9)工资修改界面:管理人员修改员工工资信息。 主登陆界面 工资管理系统 员工 工资管理员 工资查询 工资浏览 工资添加 工资删除 工资查询 工资修改 图2。1 2。2 数据库设计               表2.2  工资表     图2。2(a)              图2。2(b) 员工登陆后可以根据年份,月份来查询自己的工资详细信息。管理人员登陆后可以根据员工的编号,部门,年份,月份来查询所需要的信息。 2。3 界面设计  (1)工资添加界面 图2.3.1(a) 当管理人员登陆的时候,点击工资记录添加,就会出现添加记录界面,2.3.1(b)。   图2。3。1(b) 当信息添加成功以后,得到一个提示成功界面,如图2。3。1(c)。        图2。3.1(c) 若输入工资编号不唯一,则会提示输入错误,返回重新输入,如图2.3。1(d)      图2。3.1(d) 当非管理人员登陆的时候,则会提示无法进入,如图2.3.1(e)     图2.3。1(e) 在添加的界面使用了TextBox和Button控件,添加代码如下: private void add_button_Click(object sender, System.EventArgs e) {  dbComm=new SqlCommand(strSQL,sqlConnection1); if(Page.IsValid){ StringstrSQL="INSERT INTOSalary  (SalaryID,UserID,Dept,Year,Month,Bouns,BasicWage,AllWage,Remark) VALUES(@SalaryID,@UserID,@Dept,@Year,@Month,@Bouns,@BasicWage,@AllWage,@Remark)” ; SqlCommand dbComm=new SqlCommand(strSQL,sqlConnection1); dbComm.Parameters。Add(”@SalaryID",SqlDbType.Int,4);  dbComm。Parameters。Add("@UserID”,SqlDbType.VarChar ,50); dbComm。Parameters。Add("@Dept”,SqlDbType.VarChar,300);  dbComm。Parameters。Add(”@Year”,SqlDbType.Char,16); dbComm。Parameters。Add("@Month",SqlDbType.Char,16); dbComm。Parameters。Add("@Bouns”,SqlDbType。VarChar,50); dbComm。Parameters.Add("@BasicWage”,SqlDbType。VarChar,50); dbComm。Parameters。Add(”@AllWage”,SqlDbType。VarChar,50); dbComm.Parameters.Add("@Remark",SqlDbType。VarChar,300); dbComm.Parameters["@SalaryID”]。Value=TextBox1。Text; dbComm.Parameters[”@UserID"]。Value=TextBox2.Text; dbComm。Parameters["@Dept"]。Value=TextBox3.Text; dbComm.Parameters["@Year"]。Value=TextBox4.Text; dbComm。Parameters[”@Month”]。Value=TextBox5.Text; dbComm.Parameters[”@Bouns”]。Value=TextBox6.Text; dbComm.Parameters["@BasicWage”].Value=TextBox7.Text; dbComm。Parameters["@AllWage"].Value=TextBox8.Text; dbComm.Parameters["@Remark"].Value=TextBox9.Text; int iID=0; try{ sqlConnection1。Open();  iID=Convert。ToInt32(dbComm。ExecuteScalar());  }   catch(Exception ex){ Response.Write(”此工资编号已经存在,请<a href=’wageAdd.aspx'>重新输 入</a〉<br〉或者等待3秒后自动返回添加员工信息页面〈meta http—equiv ='refresh' content='3;url=wageAdd.aspx'〉〈br>") ; Response。End (); }  finally { if(sqlConnection1。State==ConnectionState。Open) sqlConnection1。Close();  } Response。Redirect (”Success。aspx”); Response.End ();  }  } 权限代码如下: Privilege= dr[”Privilege"]。ToString(); i=Convert.ToInt32(Privilege); switch(i) { case 11: case 13: break; default:  this。Response。Write("〈script〉window。alert('你没有权限进入该页面!'); window。location.href=’.。/in_index。aspx';</script〉”); break; } (2)工资查询界面:进入查询界面以后,分为普通员工进入和工资管理人员进入,程序会根据登录用户的权限来判断该用户可以进入的界面。所有人都可以进入员工界面来查询自己的工资信息,工资管理人员可以进入管理界面来查询所需要的信息。如图2。3。2(a).         图2。3.2(a) 员工查询界面如图2.3。2(b)                  图2.3.2(b) 该界面实现代码: private void Button1_Click(object sender, System.EventArgs e) { Year = TextBox1.Text ; sqlDataAdapter1.SelectCommand。CommandText = ”select * from Salary where [Year] =” + Year + "and [UserID] =" + i;  try { sqlDataAdapter1.Fill(dataSet1); DataGrid1.DataBind(); } catch { } finally { }  } private void Button2_Click(object sender, System.EventArgs e) { Month = TextBox2。Text ; sqlDataAdapter1。SelectCommand.CommandText = ”select * from Salary where [Month] =” + Month + ”and [UserID] =” + i; try {  sqlDataAdapter1。Fill(dataSet1); DataGrid1.DataBind(); } catch { } finally {  } } private void Button3_Click(object sender, System.EventArgs e){ Year = TextBox3.Text; Month =TextBox4.Text; sqlDataAdapter1.SelectCommand。CommandText = "select * from Salary where [Year] = " + Year + "and [Month] =" + Month + "and [UserID] =” + i; try {  sqlDataAdapter1。Fill(dataSet1); DataGrid1.DataBind(); } catch { } finally {  } } 工资管理人员查询界面,如图2。3.2(c)             图2.3。2(c) 该界面实现代码如下: private void Button1_Click(object sender, System.EventArgs e) {    Year = TextBox1.Text ; sqlDataAdapter1.SelectCommand.CommandText = ”select *from Salary where [Year] =” + Year; try { sqlDataAdapter1.Fill(dsSalary1); DataGrid1.DataBind(); } catch {      }  finally {  }  } private void Button2_Click(object sender, System.EventArgs e) { Month = TextBox2.Text ;   sqlDataAdapter1。SelectCommand.CommandText = ”select * from Salary where [Month] =” + Month; try {  sqlDataAdapter1。Fill(dsSalary1);  DataGrid1。DataBind(); } catch {  }  finally { }  }  private void Button3_Click(object sender, System.EventArgs e) { Year = TextBox3。Text; Month =TextBox4.Text;  sqlDataAdapter1。SelectCommand。CommandText = ”select * from Salary where [Year] = ” + Year + "and [Month] =” + Month; try { sqlDataAdapter1.Fill(dsSalary1);  DataGrid1。DataBind(); } catch {    } finally {      }    } private void Button4_Click(object sender, System。EventArgs e) {   UserID = TextBox5。Text;   sqlDataAdapter1。SelectCommand。CommandText = ”select * from Salary where UserID = ” + UserID; try { sqlDataAdapter1。Fill(dsSalary1); DataGrid1.DataBind(); } catch {  } finally {  } } private void Button5_Click(object sender, System.EventArgs e) {   Dept = TextBox6.Text;   sqlDataAdapter1。SelectCommand.CommandText = "select* from Salary where Dept = ’” + Dept + ”'";  sqlDataAdapter1.Fill(dsSalary1); DataGrid1.DataBind(); } Private void DataGrid1_PageIndexChanged(object source, System。Web.UI.WebControls.DataGridPageChangedEventArgs e) { DataGrid1.CurrentPageIndex = e。NewPageIndex; DataGrid1.DataBind(); } (3)工资修改界面:只有工资管理人员才能进入该界面,该界面如图2。3.3(a).                图2.3.3(a) 浏览该页面,找到需要修改的,点击修改,出现下面的界面,如图2。3。3(b),图2。3。3(c):             图2.3。3(b)               图2.3.3(c) 该界面实现代码如下: private void DataGrid1_EditCommand(object source, System。Web.UI。WebControls。DataGridCommandEventArgs e) { DataGrid1.EditItemIndex = e。Item。ItemIndex;  DataGrid1。DataBind();  }  private void DataGrid1_PageIndexChanged(object source, System。Web.UI。WebControls。DataGridPageChangedEventArgs e) { DataGrid1.CurrentPageIndex = e.NewPageIndex; DataGrid1.DataBind(); } private void add_button_Click(object sender, System.EventArgs e) { string k; k =Request。QueryString["id"]; SqlConnection MyConn = new SqlConnection("Server=127.0.0.1; uid=sa;pwd=; database = whtzkj”); string strupdate="update [Salary] set UserID=" + TextBox2。Text   +",Dept= ” + ”’” + TextBox3.Text + "’” + ”,[Year]=" + ”'" + TextBox4.Text + "’" + ”,[Month]=" + "’” + TextBox5.Text + "’” +”,Bouns=" + ”'" + TextBox6.Text + ”’" +”,BasicWage=” + ”'" +TextBox7。Text + "’" +”,AllWage=” + ”'” + TextBox8.Text + "'” + ”,Remark=" + ”'" + TextBox9.Text + "'" + ” where SalaryID= " + k; SqlCommand strcmd = new SqlCommand(strupdate,MyConn); strcmd。Connection.Open(); strcmd.ExecuteNonQuery();  strcmd。Connection。Close();  Response.Write("〈script〉alert(’修改成功!’); window.location.href=’wageModify.aspx’;</script〉”); }  (4)工资浏览页面:非工资管理人员是不能进入工资浏览界面的,管理人员进去浏览界面后,会看到公司所 有员工的工资信息。如图5.3.4(a)。              图5。3.4(a) 浏览界面的实现代码如下: private void Page_Load(object sender, System.EventArgs e)  { // 在此处放置用户代码以初始化页面 int i; string Privilege=""; SqlConnection objConnection;  StringstrConnection="Server=127.0.0。1;uid=sa;pwd=;database=whtzkj;" objConnection=new SqlConnection(strConnection); string strName = ”select * from [Privilege]";  SqlCommandMyCmd=newSqlCommand(strName,objConnection); SqlDataReader dr ; objConnection.Open(); dr = MyCmd.ExecuteReader();  if(dr.Read())  Privilege= dr["Privilege"]。ToString();  i=Convert。ToInt32(Privilege); switch(i) {  case 11: case 13: break; default: this。Response.Write("<script>window.alert(’你没有权限进入该页面!’); window。location。href=’.。/in_index。aspx';</script〉");  break; }  if(this.IsPostBack) { dsSalary1 = (dsSalary) Session[”DsSalary”]; } else {  this.sqlDataAdapter1.Fill(this。dsSalary1);   Session[”DsSalary"] = dsSalary1;  this。DataGrid1。DataBind(); } }  private void DataGrid1_PageIndexChanged(object source, System.Web。UI.WebControls.DataGridPageChangedEventArgs e) { DataGrid1.CurrentPageIndex = e。NewPageIndex; DataGrid1.DataBind();   } (5)工资删除界面:当管理人员进入工资删除界面,找到需要删除的信息,点击删除,其界面如图2。3。5(a)、图2.3.5(b):                图 2.3。5(a)                   图 2.3。5(b) 该界面实现代码如下: private void DataGrid1_PageIndexChanged(object source, System.Web。UI。WebControls。DataGridPageChangedEventArgs e) { DataGrid1。CurrentPageIndex = e。NewPageIndex; DataGrid1。DataBind(); } private void DataGrid1_DeleteCommand(object source, System。Web。UI.WebControls。DataGridCommandEventArgs e) { string strDel = "delete from [Salary] where SalaryID = @SalaryID"; SqlConnectionMyConn=newSqlConnection("server=127.0.0。1;uid= sa;pwd=;database=whtzkj”); SqlCommand MyCmd = new SqlCommand(strDel,MyConn); MyCmd.Parameters.Add(newSqlParameter("@SalaryID",SqlDbType.Int,4,"SalaryID”)); MyCmd.Parameters["@SalaryID”].Value = e。Item。Cells[0]。Text; MyConn。Open(); MyCmd.ExecuteNonQuery(); Response。Redirect(this。Page。Request.RawUrl); MyConn。Close(); DataGrid1。DataBind(); } 3.软件的测试 3。1 测试原则 (1)程序设计者不应测试自己设计的程序。 (2)在设计测试用例时,不仅要有确定的输入数据,而且要有确定的预期输出结果。 (3)测试用例不仅要有合理的输入数据,还要有不合理的输入数据. (4)除了检查程序是否做完了他应该做的事,还要检查它是否做了不应做的事。 (5)程序中存在错误的概率与在该段程序中已发现的错误数成比例。 3.2 测试方法 本系统采用黑盒测试方法,着眼于程序的外部特征,而不考虑程序的内部结构,主要看程序的功能是否完成。 3。3 测试环境 局域网机器若干台(均配有 Internet Explore5.0),服务器一台(配有 IIS 6.0,VS。Net 2003,Office XP)。 3.4 测试内容 以工资管理者身份进入,可以添加,删除,浏览,修改,查询。以普通员工身份进入,只能查询自己的工资信 息,若不是工资管理者想进行添加,删除,浏览,修改和查询其他人的工资信息,会提示无权访问。如图 6。4(a).             图 6.4(a) 在添加工资信息的时候,工资编号要唯一且不能为空。若为空则会提示必填。如图 6。4(b)。       图 6.4(b)           图 6.4(c) 当添加成功以后会提示添加信息成功。如图 6。4(d)               图6。4(d) 在查询的时候,若查询的信息不存在,会出现一个异常处理,只出现标题不出现内容。如图 6.4(e)。                   图 6。4(e) 在修改信息的时候,工资编号是不能够修改的,只能修改其他工资信息。如图 6。4(f)。     图 6.4(f) 修改完毕后点确定则会提示修改成功。如图 6.4(g).              图 6.4(g) 测试结果显示程序能够完成所需要的基本功能,该系统能够满足一般需求。 总  结 4.1 系统可改进的地方 虽然该工资系统已经完成了一些基本功能,但是还 是有一些可以改进的地方。 (1)在查询的时候可以限定用户查询条件。例如,不让用户输入年份和月,而是给出下拉表,让用户自由选择。 (2)在查询页面可以提供打印功能。当用户查询完自己所需要的信息后可以将这些信息打印出来,对查询表格字体、排版等方面可以做规范化的调整,增加“起始时 间”“终止时间”等格式,使打印出的格式清晰美观 (3)增加统计功能.该功能可以统计部门平均收入,一段时间的收入,并将结果跟往年的比较,让员工对自己的工资信息更加清楚,让管理人员对每个员工的工作情 况更加了解。 (4)增加用户定制信息,将员工关心的资料定期发送至其邮箱或手机。 4。2 发展前景 新的管理思想和新技术的发展,信息技术的不断革新,对管理软件的发展起到了决定性的促进作用。在网络高速发展的今天,越来越多的企业、个人认识到网络的便利,信息反馈的方便与快捷.电子商务的炒作热潮虽然已经褪去,但电子商务开始"着陆"了,会有越来越多的企业和个人投入到电子商务这一新的商务活动之中,对电子商务网站的需求肯定是有增无减,真正的电子商务应用时代到来了,无论是使用者,还是开发者都从电子商务热中得到了启迪:市场竞争的日益加剧,WTO 的日渐临近,企业的生存和发展每天都在接受新的挑战,要想应付竞争,就要扩大规模,要扩大规模,就要提高管理。因此,作为电子商务发展基石的供应链管理已得到中大型企业的密切关注并被提到应用日程。由于现在企业的分支机构众多,而且很多分支机构的地域范围很广,传统的办公模式已经不能很好的适应市场发展的要求,同时人员的流动性也比较大,不能在传统的办公模式下对每一个员工都要求在传统的办公环境下进行办公,急需一种新型的办公模式的出现,以解决地域范围的限制,利用互联网技术,实现网上办公,就能很好解决企业分支机构之间的相互协作办公的要求,同时可以更好的实现信息共享.新一轮的 MIS 升级热就要来到,管理软件革新的年代就要来到。普及式、局域网式的软件即将成为历史,而真正管理型、互联网型的软件将成为应用软件的主流,即哪个开发商能诠释一种新概念下的管理软件,其产品才易于被客户所接受,才具有超强的生命力。 21 课程设计成绩评定表 评定项目 内       容 满分 评分 总分 学习态度 学习认真,态度端正,遵守纪律。 10 设计情况 认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。 40 说明书质量 设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。 40 回答问题情况 回答问题准确,基本概念清楚,有理有据,有一定深度. 10 总成绩 采用五级分制:优、良、中、及格、不及格 指导教师评语: 签名:                           年 月   日
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服