收藏 分销(赏)

基于MVC的校园图书管理系统设计与开发—系统管理与图书借还管理模块—大学学位论文范文模板参考.docx

上传人:可**** 文档编号:842669 上传时间:2024-03-28 格式:DOCX 页数:24 大小:843.23KB
下载 相关 举报
基于MVC的校园图书管理系统设计与开发—系统管理与图书借还管理模块—大学学位论文范文模板参考.docx_第1页
第1页 / 共24页
基于MVC的校园图书管理系统设计与开发—系统管理与图书借还管理模块—大学学位论文范文模板参考.docx_第2页
第2页 / 共24页
基于MVC的校园图书管理系统设计与开发—系统管理与图书借还管理模块—大学学位论文范文模板参考.docx_第3页
第3页 / 共24页
基于MVC的校园图书管理系统设计与开发—系统管理与图书借还管理模块—大学学位论文范文模板参考.docx_第4页
第4页 / 共24页
基于MVC的校园图书管理系统设计与开发—系统管理与图书借还管理模块—大学学位论文范文模板参考.docx_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、毕业设计(论文)中文摘要题目:基于MVC的校园图书管理系统设计与开发系统管理与图书借还管理模块摘要:21世纪,计算机行业在科学技术不断进步的带动下飞速发展,计算机信息管理系统的开发应用大大提高了我们的工作效率。该图书管理系统是根据对计算机与软件学院的实际需求进行调查研究,开发的一个信息管理系统。本系统中包含6个功能模块:系统设置,读者管理,图书管理,图书借还,系统查询和更改口令。我主要负责系统查询和图书借还模块。图书查询可根据图书的条形码、书名、作者、出版社等不同信息进行查询。借阅查询子模块可对图书当前状态和读者当前的借阅情况进行查询。图书借还功能模块实现系统的图书借阅和归还功能。本系统使用J

2、SP技术,MVC设计模式,采用了开源框架Struts,它采用了当今软件设计的最新技术,具有开发效率高、设计灵活、生成的软件界面友好美观等特点。本系统后端的数据库是Microsoft SQL Server,通过JDBC驱动和数据库进行无缝连接,该数据库具有较高的完整性,一致性和安全性。关键词:Jsp Structs SQL Server 图书借还毕业设计(论文)外文摘要Title: MVC based on the campus library management system design and developmentSystem management and books borrowin

3、g management moduleAbstract:The 21st century, the computer industry advances in science and technology driven by the rapid development of computer information management system development and application of greatly improved our work efficiency.The library management system is based on the Computer

4、and Software to investigate the actual needs of the research, development of an information management system. The system includes six modules: system settings, the reader management, library management, library circulation, the system queries and change the password. I am responsible for the system

5、 check and book circulation module. Books can check the bar code, title, author, publisher and other various information queries. Query sub-module can borrow books and readers in the current state of the current loan situation queries. Book by function modules also borrow books and return the system

6、 functions.The system uses JSP technology, MVC design pattern, using the open source framework Struts, it uses the latest technology of todays software design, with the development of high efficiency, design flexibility, user-friendly software is generated so beautiful. The system back-end database

7、is Microsoft SQL Server, JDBC drivers and databases through the seamless connection, the database has high integrity, consistency and safety.Keywords: JSP Struts SQL Server books borrowing目 录1 绪论11.1 毕业设计主要任务11.2 目前图书馆系统出现的问题11.3 课题意义22 图书借阅管理需求分析22.1 可行性分析22.2 图书管理系统需求概述32.3 图书管理系统需求模型43 总体设计63.1 系

8、统总体结构设计63.2 系统数据库设计94 系统实现114.1 WEB服务器和数据库114.2 查询功能模块的实现144.3 图书借还功能模块的实现175 软件测试195.1 软件测试的方法与步骤195.2 测试用例设计及测试结果分析205.3 评价22结论23参考文献25附录251 绪论1.1 毕业设计主要任务1. 实现图书馆对所藏图书的按类别、书名等多方面的查询,最大的方便读者和图书馆工作人员对所需图书的查询;2. 建立图书馆外借读者数据库,方便工作人员对读者进行有效管理;3. 建立图书馆工作人员数据库,限定每个工作人员对软件操作的权限,最大限度的保护数据库;4. 实现图书馆对新书入库,旧

9、书注销的简单处理,并且建立书籍档案,方便进货;5. 实现图书馆对借书还书的比较周全的操作,方便读者借还书的处理。1.2 目前图书馆系统出现的问题1) 检索速度慢、效率低因为图书馆的藏书种类多、数量多,将藏书准确地分门别类,快速检索,手工进行非常困难往往是终于查到了此书的信息,馆中没有此书或已被别人借走。图书馆的规模越大,这个问题越突出。2) 借书、还书工作量大借书、还书频率越大,说明图书馆的作用越大,然而随之而来的大量的借书、还书登记、实存图书的更新以及借出图书超期、遗失等的处理,其工作量之大,往往是人工操作所难以胜任的。而且经常会出现这样那样的差错。3) 图书统计工作难、藏书更新不能及时完成

10、。图书馆的图书应根据科学技术的发展和情报所工作的需要及时添加和更新,然而由于藏书数量及图书种类越来越多,加上自然损耗,人为破坏,使图书的统计工作难以及时完成,藏书的更新也就很难有针对性地进行,藏书的知识结构得不到良好地控制。我们学院近几年的发展速度很快,图书馆的规模和藏书数量也不断的扩大,为了解决海量图书的管理问题,改变传统的管理方式也是迫在眉睫了。1.3 课题意义随着计算机的广泛应用,其逐步成为现代化的标志。图书馆或者一些企业内部,甚至是书店,在正常运行过程中总是面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息、还书信息。因此需要对读者资源、书籍资源、借书信息、还书信息进行管理,及

11、时了解各个环节中信息的变更,要对因此而产生的单据进行及时的处理,为了提高图书馆或者企业内部对图书存销的自动化的管理,能够更快速的满足读者的要求,提高各种工作的效率,现对其设计相应的系统,以达到上述的目的。图书管理系统的主要功能是实现图书馆图书借阅和归还的管理的自动化。围绕这一主要功能,本系统涉及到以下核心功能:借阅管理,归还管理。除了这些核心功能外,还包括一些基本和辅助功能,它们是:用户管理、图书馆参数管理、图书管理、系统查询。2 图书借阅管理需求分析2.1 可行性分析2.1.1 技术可行性2.1.2 经济可行性2.2 图书管理系统需求概述2.2.1 系统目标2.2.2 用户类和用户特性图书借

12、阅管理系统是一个基于B/S模式的对图书馆进行高效率管理的应用系统, 它的用户主要是读者和图书管理员,员工通过该系统进行图书查询进而对自己需要的图书进行借阅及自己的借阅情况进行查询,图书管理员则通过本系统实现对图书及读者的高效管理,除此之外,还需要一个系统管理员对不同的用户进行权限的设置等操作。三类用户的具体描述如表2.1所示:表2.1 用户具体描述用户类描述读者读者是该系统的重要的使用角色,他们通过该系统查询自己需要的图书信息,并像图书管理员提出借阅图书的申请进而借阅自己所需的图书,还可以通过对自己借阅情况进行查询。图书管理员图书管理员是该系统的另一个重要使用者,图书管理员通过该系统进行图书的

13、增加,修改,删除,分类管理等操作,实现对读者借阅归还续接图书的方便操作,实现对系统中图书,读者,读者借阅情况的查询,信息更改维护等操作,管理读者类型,对不同类型读者可借阅的图书数量进行设置等图书馆的基本操作。系统管理员系统管理员主要是图书管理系统中用户的管理,实现用户添加修改删除以及用户权限设置等操作,实现对图书馆基本信息的修改维护等操作,还包括对图书馆书架的设置操作,以及校外读者办证所需费用、证件有效期等参数的设置。2.3 图书管理系统需求模型2.3.1 系统管理员功能描述图书借阅管理系统的主要任务是实现读者迅速检索查询,方便借阅归还图书,图书管理员高效的完成系统的各项基本操作,系统管理员是

14、管理用户设置权限等操作,从图2-1可以看出图书借阅管理系统中,图书借还和查询部分要完成以下功能:1. 借还管理: 借阅管理:读者根据自己的证件编号进行图书借阅,可通过图书编号、书名等数据进行图书查询,然后进行图书借阅。 归还管理:读者根据自己的证件编号进行图书归还,在输入自己的证件号后系统会自动查询出该用户所借的图书,只要点相应的图示对应的归还就可以实现图书归还了。 续借管理:该功能是对已借阅的图书进行继续借阅,省去了中间的归还再借的过程。系统根据读者的证件编号查询出读者已经借阅的图书,读者只需要在相应的图书后面点选续借就可以实现图书的续借,图书归还期限便会增加相应的期限。2. 系统查询 借阅

15、排行榜:用户登入后,系统会根据最近图书馆图书借阅次数进行查询排序,给用户借阅做一个参考。 图书查询:用户可根据图书编号、作者、译者、出版社等字段查询图书信息。 借阅到期提醒:读者可以根据自己的证件编号进行借阅查询,然后系统会根据图书可借阅时间进行判断,显示出图书归还时间。图2-1系统用例图2.3.2 系统数据流图数据流程图是描述系统数据流程的工具,它将数据独立抽象出来,通过图形方式描述信息的来龙去脉和实际流程。本系统的顶层数据流图如图2-2所示:图2-2 图书馆管理系统顶层图3 总体设计3.1 系统总体结构设计该系统在Windows 7环境下,主要采用JSP开发工具,SQL Server数据库

16、来设计。3.1.1 图书管理系统总体结构图绘制系统结构图的过程,实际上就是对系统功能模块进行分解设计的过程,即合理地将数据流程图转变为所需要的系统结构图。系统结构图将会使读者和用户能直观的了解系统的结构模式,理解系统的各个功能的结构,能很好地方便用户使用和理解整个系统。本系统的结构图如图3-1所示:图3-1 系统总体结构图根据需求分析的结果,按照“低耦合、高内聚”的原则,根据分工,我负责开发的部分划分为以下主要功能模块:图书借还功能模块;系统查询功能模块。3.1.2 图书借还模块功能该功能模块主要实现对读者借阅、续借、归还图书的操作,其中子模块各自的描述如表3.1、3.2、3.3所示:表3.1

17、 图书借阅描述系统模块图书借阅管理功能描述对读者借阅图书进行基本操作和信息管理访问的数据库表图书信息表: db_bookinfo读者信息表:db_reader读者类型信息表:db_readertype进行的操作对读者借阅图书进行管理产生的结果 读者借阅成功,系统对借阅信息进行记录结果存储位置或输出 结果存储在图书借阅表(db_borrow)中,结果在图书借阅查询页面输出表3.2 图书续借描述系统模块图书续借管理功能描述对读者借阅图书进行提续接操作访问的数据库表图书借阅表: db_borrow进行的操作对借阅的图书进行续接产生的结果 读者归还日期延后一个月结果存储位置或输出 结果存储在图书借阅表

18、(db_borrow)中表3.3 图书归还描述系统模块图书归还管理功能描述对读者归还图书进行基本操作和信息管理访问的数据库表图书借阅信息表: db_borrow读者类型信息表:db_readertype进行的操作对读者借阅图书进行管理产生的结果 读者借阅成功,系统对借阅信息进行记录结果存储位置或输出 结果存储在图书归还表(db_giveback)中3.1.3 系统查询模块功能该模块包括对图书馆藏书进行查询,对读者借阅情况进行查询,以及对借阅到期和超期的读者进行提醒的信息,其中三个子模块的各自描述如表3.4、3.5、3.6所示:表3.4 图书查询描述系统模块图书查询功能描述系统用户对馆藏图书信息

19、进行查询操作访问的数据库表图书信息表: db_book进行的操作用户通过图书的编号,作者,出版社等信息对图书进行相关查询产生的结果读者查询到相应的图书或系统提醒查询的图书不存在结果存储位置或输出结果在图书查询页面输出表3.5 图书借阅查询描述系统模块图书查询功能描述系统用户对读者借阅图书信息进行查询操作访问的数据库表图书借阅表: db_borrow进行的操作用户通过图书的编号,读者编号等信息对某个读者或某本图书的借阅情况进行相关查询产生的结果查询到相应的读者或图书得借阅情况结果存储位置或输出结果在图书查询页面输出表3.6 图书借阅到期提醒描述系统模块图书借阅到期提醒管理功能描述对读者借阅的到期

20、图书进行提醒访问的数据库表图书借阅表: db_borrow图书归还表:db_giveback读者信息表:db_reader读者类型信息表:db_readertype进行的操作对借阅到期和超期的读者进行提醒产生的结果向借阅到期和借阅超期的读者发送邮件等提醒信息结果存储位置或输出结果存储在图书借阅到期提醒表3.2 系统数据库设计3.2.1 数据库设计概述整个系统所包括的信息有图书信息、读者信息、图书借阅信息、图书归还信息、系统用户信息、读者类型信息。可将这些信息抽象为下列系统所需要的数据项和数据结构:1) 图书信息(编号,图书名称,图书类型,作者,译者,价格,出版社,页码,入库时间,所在书架)2)

21、 图书类型(编号,名称,可借阅天数)3) 读者信息(编号,姓名,性别,条形码,读者类型,登记时间,出生日期,有效证件,证件号码,电话,邮箱)4) 读者类型(名称,可借阅图书本数)5) 图书借阅信息(图书编号,读者ID,借出时间,应还时间,是否归还,操作员)6) 图书归还信息(图书编号,读者ID,归还时间,操作员)7) 用户(编号,用户名称,密码)8) 图书馆信息(编号,名称,馆长,电话,地址,邮箱,创建日期,简介)图书馆参数信息(编号,办证费用,有效期限)注:带下划线表示主键在这里使用E-R图描述了图书借阅管理系统的数据模型。图3-2图书借阅管理系统E-R图描述了该系统所涉及到的实体以及他们之

22、间的关系。具体结构如下图所示:图3-2 系统E-R图3.2.2 图书借阅信息表结构设计表3.7的设计是用于对读者借阅图书进行管理,表中图书ID属性是对借阅图书的唯一性识别标识,读者ID号记录借阅的相应读者,借出时间记录了相应的归还时间,以及归还时是否超时,操作员是对借阅进行操作的人员的记录方便日后的查询,是否归还标识可查询当前读书是否被归还,表的具体结构设计如下:表 3.7 图书借阅信息表 db_borrow字段名称数据类型字段长度是否为空说明ID int10NoKeyreaderIDvarchar10No 读者编号bookIDint10No 图书编号borrowTimedateNo 借出时间

23、backTimedateNo 应归还时间operatorvarchar30No 操作员ifbacktinyint1No 是否归还3.2.3 图书归还信息表结构设计与图书借阅信息表形成对照的是图书归还信息表3.8,该表的设计除了像上表一样把借阅的图书与相应的借阅者进行对应的联系以外还记录了读者应归还图书的时间,以此判断读者的借阅是否超时,表的具体结构设计如下:表3.8 图书归还信息表db_giveback字段名称数据类型字段长度是否为空说明ID int10NoKeyreaderIDvarchar11No 读者编号bookIDint11No 图书编号backTimedateNo 归还时间opera

24、torvarchar30No 操作员4 系统实现 WEB服务器和数据库开发系统用的系统工具如表4.1所示:表4.1 系统开发平台和工具全面的数据库平台数据库连接时采用连接池技术链接SQL Server,具体代码实现如下: public class ConnDB public Connection conn = null; public Statement stmt = null; public ResultSet rs = null; private static String propFileName = /com/connDB.properties;/指定资源文件保存的位置 private

25、 static Properties prop = new Properties(); private static String dbClassName =com.microsoft.sqlserver.jdbc.SQLServerDriver; private static String dbUrl = jdbc:sqlserver:/127.0.0.1:1433;DataBaseName=library; public ConnDB() try InputStream in=getClass().getResourceAsStream(propFileName); prop.load(i

26、n);/通过输入流对象加载Properties文件 dbClassName = prop.getProperty(DB_CLASS_NAME);/获取数据库驱动 dbUrl = prop.getProperty(DB_URL, jdbc:sqlserver:/127.0.0.1:1433;DataBaseName=library); catch (Exception e) e.printStackTrace();/输出异常信息 public static Connection getConnection() Connection conn = null; try Class.forName(d

27、bClassName).newInstance(); conn = DriverManager.getConnection(dbUrl,sa,sa); catch (Exception ee) ee.printStackTrace(); if (conn = null) System.err.println( 警告: DbConnectionManager.getConnection() 获得数据库链接失败.rnrn链接类型: + dbClassName + rn链接位置: + dbUrl); return conn; 4.1 查询功能模块的实现查询功能模块包括图书查询,读者借阅查询和借阅到期

28、提醒三个子功能模块。1) 图书查询可根据图书的条形码,书名,作者,出版社等不同信息进行查询,其操作界面如图4-1所示:图4-1 图书查询操作界面 实现该功能中根据读者不同需求的按条件查询实现语句如下:public Collection query(String strif)BookForm bookForm=null;Collection bookColl=new ArrayList();String sql=;if(strif!=all & strif!=null & strif!=) sql=select * from (select b.*,c.name as bookcaseName,

29、p.pubname as publishing,t.typename from db_bookinfo b left join db_bookcase c on b.bookcase=c.id join db_publishing p on b.ISBN=p.ISBN join db_booktype t on b.typeid=t.id where b.del=0) as book where book.+strif+;else sql=select b.*,c.name as bookcaseName,p.pubname as publishing,t.typename from db_b

30、ookinfo b left join db_bookcase c on b.bookcase=c.id join db_publishing p on b.ISBN=p.ISBN join db_booktype t on b.typeid=t.id where b.del=0;System.out.println(图书查询时的SQL:+sql);ResultSet rs=conn.executeQuery(sql);try while (rs.next() bookForm=new BookForm(); bookForm.setBarcode(rs.getString(1); bookF

31、orm.setBookName(rs.getString(2); bookForm.setTypeId(rs.getInt(3); bookForm.setAuthor(rs.getString(4); bookForm.setTranslator(rs.getString(5); bookForm.setIsbn(rs.getString(6); bookForm.setPrice(Float.valueOf(rs.getString(7); /此处必须进行类型转换 bookForm.setPage(rs.getInt(8); bookForm.setBookcaseid(rs.getInt

32、(9); bookForm.setInTime(rs.getString(10); bookForm.setOperator(rs.getString(11); bookForm.setDel(rs.getInt(12); bookForm.setId(Integer.valueOf(rs.getString(13); bookForm.setBookcaseName(rs.getString(14); bookForm.setPublishing(rs.getString(15); bookForm.setTypeName(rs.getString(16); bookColl.add(boo

33、kForm); catch (SQLException ex) ex.printStackTrace();conn.close();return bookColl;2) 借阅查询子模块是对图书当前状态和读者当前的借阅情况进行查询,具有此权限的用户登录并进入该操作界面后选中相应的查询条件,并输入相应的查询信息,系统即可在页面显示被查询的图书的状态,或相应读者的当前借阅情况,此外,还可以输入相应时间段内的所有借阅清单,或选择某个读者查询他在某个时间段内的借阅情况,查询某个时间段内的此子功能操作界面如图4-2。图4-2 借阅查询操作界面系统中同时选中日期和限制条件进行查询时,程序是在条件查询的基础上

34、选中符合时间条件限制的内容,其实现代码为:if (flag.length = 2) if (request.getParameter(f) != null) str = request.getParameter(f) + like % + request.getParameter(key) + %; System.out.println(日期和条件); String sdate = request.getParameter(sdate); String edate = request.getParameter(edate); String str1 = null; if (sdate != n

35、ull & edate != null) str1 = borrowTime between + sdate + and + edate + ; str = str + and borr. + str1; System.out.println(条件和日期: + str); 3) 借阅到期提醒子模块是将系统当前时间与应归还的时间进行比较,如果系统当前时间以超过图书应归还时间,相应的读者借阅信息便会被显示在借阅到期提醒界面,其界面如图4-3。图4-3 借阅到期提醒4.2 图书借还功能模块的实现该功能模块可分为图书借阅,图书归还,图书续借三个子模块。1) 图书借阅。该子模块实现系统的借阅功能,读者向

36、图书管理员提供自己的编号会显示出读者当前的借阅情况,再提供要借阅的图书标号,图书管理员将信息记录在系统中,借阅成功,其操作界面如图4-4。图4-4 图书借阅操作界面如果在借阅时所要借阅的图书不存在或者读者借阅已达借阅图书的上线,则读者不能接续借阅图书,系统将给出相应提示,此功能的实现代码为:private ActionForward bookborrow(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) /查询读者信息 /此处一定不能使用该语句进行转

37、换 readerForm.setBarcode(request.getParameter(barcode); ReaderForm reader = (ReaderForm) readerDAO.queryM(readerForm); request.setAttribute(readerinfo, reader); /查询读者的借阅信息request.setAttribute(borrowinfo,borrowDAO.borrowinfo(request.getParameter(barcode); /完成借阅 String f = request.getParameter(f); Stri

38、ng key = request.getParameter(inputkey); if (key != null & !key.equals() String operator = request.getParameter(operator); BookForm bookForm=bookDAO.queryB(f, key); if (bookForm!=null) int ret = borrowDAO.insertBorrow(reader, bookDAO.queryB(f, key), operator); if (ret = 1) request.setAttribute(bar,

39、request.getParameter(barcode); return mapping.findForward(bookborrowok); else request.setAttribute(error, 添加借阅信息失败!); return mapping.findForward(error); else request.setAttribute(error, 没有该图书!); return mapping.findForward(error); return mapping.findForward(bookborrow);2) 该子模块实现系统的图书归还功能,读者向图书管理员提供自己

40、的编号会显示出读者当前的借阅情况,再提供要归还的图书标号,图书管理员将信息记录在系统中,归还成功,其操作界面如图4-5。图4-5 图书归还操作界面5 软件测试 5.1 软件测试的方法与步骤该系统在本地服务器上进行运行和调试,鉴于对系统的内部结构和处理算法的完全了解以及对系统功能的全面掌握,对系统进行白盒测试和黑盒测试。在开发软件系统的过程中,需要面对错综复杂的问题,因此,在软件生存周期的每个阶段都不可避免地会产生错误。测试目的在于:发现错误而调试一个程序的过程,测试主要发现其中尚未发现的错误。本系统的测试阶段信息流程如图5-1所示。图5-1 测试阶段信息流程图为了设计出有效地测试方案按照下面准

41、则进行测试:所有测试都应追溯到用户需求;在完成了需求模型就要着手制定测试计划,在编码之前对所有测试工作进行计划和设计;从小规模开始逐步进行大规模测试,通常先重点测试单个程序模块再转向集成的模块;精心设计测试方案,尽可能充分覆盖程序逻辑使之达到要求的可靠性。按照软件工程的观点,软件测试(主要是指多模块程序的测试)共包括4个层次。1) 单元测试。单元测试的用例从单元详细设计中导出。在单元测试中可以采用功能性测试和结构性测试两种。2) 集成测试和确认测试。这一阶段的任务,是通过了单元测试的模块逐步组装起来,通过测试与纠错,最终得到一个满足需求的目标软件。3) 验证测试。在这个测试步骤中所发现的往往是

42、需求规格说明的错误。一般来说,系统测试是功能性测试,不是结构性测试。在整个测试中,采用了白盒测试和黑盒测试相结合的方法。5.2 测试用例设计及测试结果分析5.2.1 模块测试1) 图书借还模块测试表5.1 图书借还模块用例测试用例测试数据预期结果UC1:输入正确的读者条形码读者条形码:123456系统查出用户借阅信息UC2:输入空用户名用户名:查出空白信息UC3:输入不存在的读者条形码读者条形码:123查出空白信息当用户输入正确的读者条形码,系统会查出这个用户的相关信息,提示页面如图5-2所示:图5-2 输入正确读者条形码显示的信息2) 系统查询模块测试当用户在系统查询中输入不存在的条形码信息系统在数据库中查询不到相应的图书信息,就会提示出如图5-3的画面:图5-3 输入不存在的图书条形码提示页面5.2.2 集成测试把经过单元测试的模块放在一起形成一个子系统并对它进行测试用于检验模块相互间的协调和通信,这

展开阅读全文
相似文档
猜你喜欢
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

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

关于我们     诚招英才     服务填表     联系我们

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

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号  |  icp.png浙ICP备2021020529号-1 浙B2-2024(办理中)  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服