图书管理系统 图书管理系统数据流图

莫娜号 1

图书管理系统设计

2)对于来说。本系统提供登陆系统模块,对学生老师以及不同登录状态做了不同的处理,使登陆界面更加人性化,也更方便进行管理。

给你个案SearchBook bean例吧

图书管理系统 图书管理系统数据流图图书管理系统 图书管理系统数据流图


图书管理系统 图书管理系统数据流图


图书管理系统 图书管理系统数据流图


图书管理系统 图书管理系统数据流图


");

课题来源

随着经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期.随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高.书籍做为人类的精神食粮,在现代中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择.与此同时,为了管理大量的图书,图书仓库也大量的出现,仓库的管理问题也就提上了日程.随着图书的大量增加,其管理难度也越来越大,如何优化仓库的日常管理也就成为了一个大众化的课题.

在计算机飞速发展的今天,将计算机这一信息处理利器应用于仓库的日常管理已是势必所然,而且这也将为仓库管理带来前所未有的改变,它可以带来意想不到的效益,同时也会为企业的飞速发展提供无限潜力.采用计算机管理信息系统已成为仓库管理科学化和现代化的重要标志,它给企业管理来了明显的经济效益和效益.主要体现在:

极大提高了仓库的工作效率,大大减少了以往入出存流程繁琐,杂乱,周期长的弊端.

基于仓库管理的全面自动化,可以减少入库管理,出库管理及库存管理中的漏洞,可以节约不少管理开支,增加企业收入.

仓库的管理的作自动化和信息的电子化,全面提高了仓库的管理水平.

随着我国改革开放的不断深入,经济飞速的发展,企业要想生存,发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化,信息化则是其中极其重要的部分.为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统已变得十分心要.

入库,库存,出库还是现在企业图书仓库管理的常规基本模式,虽然,最近又出现了很多新的管理模式,如:基于零库存思想的沃尔玛特管理方式,但这些新的思想在大部

分企业的管理中还是难以实现的.所以如何设计好仓库管理系统,尽可能地减少仓库管理的重复性和低效性就成为当前最为重要的问题.图书仓库管理的核心是入库,库存和出库之间的联系,如何处理好三者之间的关系是系统最为关键的部分.另外,员工信息和供应商信息管理也是仓库管理中一个必不可少的部分,它提供着与入库和出库相关的地一些信息,使得整个系统更加完整,更加实用.

通过对仓库管理日常工作的详细调查,搜集了大量的资料,从系统结构的组织,功能的实现,技术的要求以及可行性等多方面进行考虑,认为本课题是一个适应现今图书仓库管理需求的计算机信息管理系统,具有一定的实际开发价值和使用价值.

图书管理系统的目的

清华大学《应用软件平台与核心技术》助教文档 张伟业、魏岚、陈勇、林彩荣

目的是为了实现文档集中存储,分布管理,便于资料的便捷查询和安全控制,提高设备使用效率,减少维护成本。该系统建立了统一的在线实时更新的文挡库,可对多种形式的信息内容进行存贮,从声音、图形、图像等多媒体信息到高度结构化的文档,从e-mail到讨论数据库;提供层次化的文档存储模式,实现对文档的生命管理,{FILE fp,fp2; /定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏/对文档可进行签入/签出检查、版本控制、跨所有管理内容的全文检索、审核、文档描述等。

{printf("n");

为了方面的管理图书,方面的使用户快速得到图书。

图书管理系统的信息查询

public boolean userReturnBook(String logbid) 以一个事务封装读者还书的所有逻辑作,即实现使一笔借录销账的功能,调用enCode bean对中文进行转码

信息查询模块包括如下多个子模块:个人借阅查询、催还书目浏览、图书分布查询和按关键字查询等。在系统主窗口中,选择“信息查询”菜单中的“个人借阅查询”选项,进入printf("n");“个人借阅查询”窗口。

求:用JSP写的图书管理系统的

fclose(fp2);

1 前言 4

booklist

1.1 目的 4

char bookcreat[10];

1.2 范围 4

1.3 有关本系统中的定义 4

2 资料引用 4

3 设计思路 4

user_book表的触发器 5

用户续借图书的存储过程 6

到期催还表的视图 7

3.2 数据链接层设计 8

UserBook Entity Bean设计 9

UserConsumer Entity Bean设计 10

UserLogBook Entity Bean设计 11

3.3 数据逻辑层设计 12

TheBook Session Bean设计 13

TheUser Session Bean设计 14

3.4 网络应用层设计 15

CheckValue bean 16

EnCode bean 16

JDBCBean bean 16

Rank bean 16

SetUp bean 16

SplitPage bean 17

UserLogin bean 17

SearchBook bean 17

SearchDeadline bean 17

ValidateIMG servlet 17

GetDelete servlet servlet 17

GetBookSubmit servlet 18

GetUserSubmit servlet 18

GetRenewBook servlet 18

GetBorrowBook servlet 18

GetReturnBook servlet 18

4 程序架构 18

4.1 程序组织结构 18

4.2 功能权限划分 20

4.3 WEB程序/页面设计 21

4.4 本系统实现的功能 22

5 任务分工 22

1 前言

1.1 目的

本文档详细描述了图书管理系统的设计,主要是为开发人员提供,使其对本项目的构建和维护有深入的了解。

1.2 范围

本文档的描述只针对图书管理系统的1.0版本。

1.3 有关本系统中的定义

以下是本说明书中用到的专门术语的定义和外文首字母组词的原词组:

术语或缩写 定义与描述

booksMar 本系统的名称

Reader 系统权限:普通读者

BookAdmin 系统权限:图书

SuperAdmin 系统权限:超级(系统)

Undergraduate 系统用户角色:本科生

Graduate 系统用户角色:研究生

Teacher 系统用户角色:教师

2 资料引用

清华大学《应用软件平台与核心技术》讲义 顾明

《精通EJB(第二版)》

《J2EE应用与BEA Web Logic 》,刑国庆等译,电子工业出版社 2002.4

《设计模式——可复用面向对象软件的基础》,Erich Gamma等,机械工业出版社

3 设计思路

本系统严格按照4层结构设计,分为数据层(SQL server),数据链接层(entity bean),数据逻辑层(session bean),网络应用层(ja bean, ja servlet, ja serverpage)。

四层之间完全,可以部署在四台上运行,体现了分布式应用的思想。

数据层的功能严格来说是实现基本的数据存储(逻辑处理功能应该全部交给CMP管理),但因为学习原因,在数据库中也用到了一些逻辑处理,如使用了存储过程+系统级临时表处理读者续借图书的功能、使用触发器防止未还书的用户和未归还的图书被注销以及使用视图检测借录实现到期催还功能。

数据链接层实现了和数据库的连接,作用在于屏蔽数据库和平台之间的异,做到底层无关性。本层利用了模糊查找、多表映射、Relationship等技术,通过find,select方法数据的查找功能,抛出聚集对象或远程接口对象给下一层。

数据逻辑层实现了对数据的逻辑处理,例如将远程接口对象转化为值对象、将聚集对象转化为值对象向量、利用日期类完成查找两个特定日期之间的记录等相对复杂的计算。

网络应用层完成页面跳转和页面显示等应用功能,还有一些附加功能如:验证,登录验证,等级控制,代码过滤,分页控制,输入值检测、借书日志打印、系统运行日志记录以及系统设置等。(使用了JDBC实现存储过程和模糊查找图书的功能)

3.1 数据层设计

数据库表

user_consumer 记录了用户的所有信息

user_book 记录了图书的所有信息

user_logBook 记录了用户使用本系统的信息,保留了所有的借录,可作为系统日志和报表资料

user_book表的触发器

用到的触发器之一,作用:如果要注销的图书被外借没有归还,则回滚此删除作。

CREATE TRIGGER bookhelog ON dbo.user_book

AS

declare @bookISBN varchar(50)

select @bookISBN=book_ISBN from deleted

if exists(select from user_logBook where logb_book_ISBN=@bookISBN and

logb_backdate is null)

begin

rollback

return

end

用户续借图书的存储过程

利用存储过程实现用户续借图书的逻辑作,根据用户的当前信息判断其是否有续借的权限,并把处理结果输出到临时表中去。

CREATE PROCEDURE user_renew_book @xxxparm int AS

CREATE TABLE ##temp(statement varchar(50))

DECLARE @username varchar(50)

SET @username=(select logb_cons_username from user_logBook where ID=@xxxparm)

IF @username is null

BEGIN

INSERT INTO ##temp VALUES ('The ID is not EXIST')

RETURN

END

DECLARE @timelimit int

SET @timelimit=(select logb_timelimit from user_logBook where ID=@xxxparm)

DECLARE @renewday int

SET @renewday=(select cons_maxday from user_consumer where cons_username=@username)

DECLARE @maxrenew int

SET @maxrenew=(select cons_maxrenew from user_consumer where cons_username=@username)

IF (@renewday@maxrenew)>=@timelimit

BEGIN

update user_logBook set logb_timelimit=logb_timelimit+@renewday where ID=@xxxparm

--update user_consumer set cons_maxrenews=cons_maxrenews-1 where cons_username=@username

INSERT INTO ##temp VALUES ('renew successful')

RETURN

END

ELSE

BEGIN

INSERT INTO ##temp VALUES ('You are not allowed to renew the book')

RETURN

END

到期催还表的视图

利用DATEDIFF,DATEADD,CAST,GETDATE等函数从借录表中计算出到期的记录,然后根据此记录找出相应的读者信息,在网页上以email形式催还。

CREATE VIEW dbo.deadline

AS

SELECT TOP 100 PERCENT dbo.user_logBook.logb_cons_username,

dbo.user_logBook.logb_outdate, DATEADD([day], dbo.user_logBook.logb_timelimit,

CAST(dbo.user_logBook.logb_outdate AS datetime)) AS deadline_date, GETDATE()

AS now_date, dbo.user_consumer.cons_name, dbo.user_consumer.cons_kind,

dbo.user_consumer.cons_rank, dbo.user_consumer.cons_email,

dbo.user_consumer.cons_maxrenew, dbo.user_consumer.cons_maxbook,

dbo.user_logBook.logb_book_ISBN, dbo.user_book.book_name,

dbo.user_book.book_kind, dbo.user_book.book_storage, dbo.user_book.book_rank,

dbo.user_logBook.logb_timelimit

FROM dbo.user_logBook INNER JOIN

dbo.user_consumer ON

dbo.user_logBook.logb_cons_username = dbo.user_consumer.cons_username INNER

JOIN

dbo.user_book ON

dbo.user_logBook.logb_book_ISBN = dbo.user_book.book_ISBN

WHERE (DATEDIFF([day], DATEADD([day], dbo.user_logBook.logb_timelimit,

CAST(dbo.user_logBook.logb_outdate AS datetime)), GETDATE()) >= 0) AND

ORDER BY dbo.user_logBook.logb_cons_username DESC

3.2 数据链接层设计

entity bean

UserBook Entity Bean设计

userbook remotehome接口

findAllBook 得到所有的图书信息

findByISBN 通过图书的书号得到图书的信息

findSearcher 利用关键字模糊查找图书信息

selectUserByBookISBN

(userbook remote) 利用select方法实现多表相关的查找

findSearcher实现模糊查找的代码:

select object(p) from UserBook as p where p.bookName like concat(concat('%',?1),'%') or p.bookAuthor like ?1 or p.bookKind like ?1 or p.bookPublish like ?1 or p.bookAbstract like ?1 or p.bookISBN like concat(concat('%',?1),'%') or p.bookRemark like ?1

UserConsumer Entity Bean设计

UserConsumer remotehome接口

findAllUser 查找所有的用户信息

findByUsername 通过用户名查找用户信息

findSearcher 利用关键字模糊查找用户信息

selectBookByUsername

(userconsumer remote) 利用select方法实现多表相关的查找

findSearcher实现模糊查找的代码:

select object(p) from UserConsumer as p where p.consUsername like concat(concat('%',?1),'%') or p.consSerial like ?1 or p.consName like concat(concat('%',?1),'%') or p.consRemark like ?1 or p.consEmail like ?1

UserLogBook Entity Bean设计

UserLogBook remotehome接口

findallbybookISBN 查找此书所有的借阅记录

findbybookISBN 查找此书当前的借出记录

findallbyusername 查找此用户所有的借阅记录

findbyusername 查找此用户当前的借出录

findbacklog 得到所有已经归还图书的借录

findoutlog 得到所有尚未归还图书的借录

findbyID 通过记录流水号查找借录

findlogbyday 查找某一日期的借录

(模糊匹配,例如提交“2004-5”可得到最终记录时间——借阅或归还在2004年5月份的所有借录)

findallog 得到所有的借录

FindLogByDay通过模糊匹配得到一组最终记录时间的代码:

select object(p) from UserLogBook as p where ( p.logbBackdate is null and p.logbOutdate like concat(concat('%',?1),'%') ) or ( p.logbBackdate is not null and p.logbBackdate like concat(concat('%',?1),'%') )

3.3 数据逻辑层设计

session bean

TheBook Session Bean设计

TheBook bean

实现图书的增删改查以及模糊搜索、通过书查读者等功能

方法内部实现所有的逻辑处理和转化,返回到远程接口值对象或值对象向量

TheUser Session Bean设计

TheUser bean

实现用户(读者)的增删改查以及模糊搜索、通过读者查书等功能

方法内部实现所有的逻辑处理和转化,返回到远程接口值对象或值对象向量

TheLog Session Bean设计

TheLog bean

主要实现对日志(借录)的各项作,提供多种获得日志的方法(按读者、按图书、按日期、按借还状态等),方法内部实现所有的逻辑处理和转化,返回到远程接口值对象或值对象向量,另外还有如下方法:

方法 功能

public boolean userBorrowBook(String username, String bookISBN) 以一个事务封装读者借书的所有逻辑作,借书成功返回真值,无法借书返回值,调用enCode bean对中文进行转码

public Vector showLogBetweenDays(String dayBegin, String dayEnd) 返回两个日期之间的所有日志,主要利用Calendar类实现

3.4 网络应用层设计

本层本着面向对象思想的封装性、数据模糊性、可重用性等原则设计。

本着系统运行错误在系统中打印(System.out.println)、用户输入和误作错误导向友好的错误处理页并给出友好的提示的错误处理原则。

每次对会话bean的调用写入系统运行日志文件,默认路径是C:booksMarLog.dat。

CheckValue bean

封装多个静态方法。

可以用于检测某表中某个字段是否已经存在某个值(可用于检测重名用户、重号图书)、检测用户名合法性、检测密码合法性、检测年龄合法性、检测电子邮件合法性、检测数字合法性、检测日期合法性等。

EnCode bean

封装编码转码工作:

html显示转码,例如:将<转为<,将>转为&rt;,将数据库中的换行转为html中的换行等等,这样可以屏蔽用户提交文本中的可执行代码。

可重载的中文转码。

密码的加密和解密编码。

JDBCBean bean

封装所有的数据库作。包括一个带结果集返回的SQL执行方法和一个不带结果集返回的SQL执行方法。

Rank bean

封装4种权限(普通读者、用户、图书、系统)的页面访问,相当于页面加锁功能。

SetUp bean

public static String dbS="booksMarDS";//数据库的JNDI名

public static String errorPage="dealError.jsp?theError=";//友好的错误处理页,用get方法传递出错原因

public static String homePage="default.jsp";//默认首页

//权限-------------------------------------------------------------------------

public static String Reader="Reader";//读者

public static String UserAdmin="UserAdmin";//用户

public static String BookAdmin="BookAdmin";//图书

public static String SuperAdmin="SuperAdmin";//系统

//等级-------------------------------------------------------------------------

public static String Undergraduate="Undergraduate";//本科生

public static int UndergraduateRenew=1;//本科生可续借的次数

public static int UndergraduateMaxday=30;//本科生一次可借的天数

public static String Graduate="Graduate";//研究生

public static int GraduateRenew=2;//研究生可续借的次数

public static int GraduateMaxday=45;//研究生一次可借的天数

public static String Teacher="Teacher";//教师

public static int TeacherRenew=3;//教师可续借的次数

public static int TeacherMaxday=60;//教师一次可借的天数

//----------------------------------------------------------------------------

public static int rsPerPage=5;//每页显示记录的数量

public static int minBooks=4;//系统默认的最小借书数

SplitPage bean

将数据记录分页的逻辑实现和页面显示(最简,可在外部由样式表美化)封装在一个bean中,重用时实际只需要传递一个记录集数量的为参数即可,可重用。一般作为session级ja bean在页面中被调用,在会话中保存用户对此页面的访问状态,在会话结束之前始终记忆用户访问此页对应的页码。

UserLogin bean

将用户登录的逻辑实现和页面显示(最简,可在外部由样式表美化)封装在一个bean中,包括对用户各种登录情况的处理,可重用。

利用JDBC实现模糊查找和按指定类别查找图书的功能。

SearchDeadline bean

利用JDBC调用视图实现到期图书的催还功能。

ValidateIMG servlet

动态生成含有随机的,在生成的同时将写入session中,与用户的登录输入比较。可有效的防止机器人登录。

GetDelete servlet servlet

处理图书、用户、日志的注销作,根据返回值进行相应页面的跳转。

GetBookSubmit servlet

处理图书的入库和图书信息的修改,根据返回值进行相应页面的跳转。

GetUserSubmit servlet

处理用户的注册和用户信息的修改,根据返回值进行相应页面的跳转。

GetRenewBook servlet

处理用户续借图书的请求(JDBC调用存储过程实现),从系统临时表中读取状态值,根据状态值进行相应页面的跳转。

GetBorrowBook servlet

处理用户的借书请求,将用户借书限额已满、库存为零等错误导向友好的错误页,如果借书成功则跳转到图书信息页面,并给与相应的提示。

GetReturnBook servlet

处理用户的还书请求,如果还书成功则跳转到用户的借录页面,并给与相应的提示。

4 程序架构

4.1 程序组织结构

说明:图书搜索和用户登录看作系统外部功能,通过JDBC直接调用数据库,其中用户登录模块封装在一个ja bean中,可重用。另外,用户续借图书是通过存储过程实现,从而绕过了使用CMP技术管理事务的实体bean。

本系统其余程序的组织结构严格按照下图实现:

程序组织结构图

4.2 功能权限划分

站点页面地图

权限名称 系统定义字符 权限 可访问页面

普通读者 Reader 查看自己的信息(还书、续借);

修改自己的信息;

查看图书(借书); userModify

userView

图书 BookAdmin 拥有普通读者的权限;

图书的增删改查;

到期催还; userModify

userView

bookAdder

bookModify

deadline

用户 UserAdmin 拥有普通读者的权限;

用户的增删改查; userModify

userView

userRegister

userModify

userList

系统 SuperAdmin 拥有图书和用户的权限;

查看系统日志;

删除系统日志;

系统设置; 包括setupSYS.jsp(系统设置,利用application级ja bean控制整个应用程序)在内的所有页面

4.3 WEB程序/页面设计

利用onfocus=this.select() onmouseover=this.focus()代码使文本框自动吸附获得焦点,方便用户输入。

利用WMODE="transparent"参数使flash的背景透明,更好的融入网页。

在每页中,利用代码:

嵌入上下导航条,使网站导航明确,方便用户浏览。

在网页头部加入代码:

使客户端不缓存网页,保证了客户每次浏览该页都从获得的版本,以求正确显示。

提供智能搜索(获得尽可能多的匹配)和搜索(获得尽可能的匹配)图书,端编程都采用模糊查找的方式。

在客户端用jascript对表单提交进行次验码,通过后提交到端,再进行第二次验码,验码包括:用户名是否重复、年龄是不是合适的数字,两次密码输入的是否一致、电子邮件是否合法、密码是否太短、用户名是否太短、用户名密码是否为空等等。

利用随机生成JPG的方法,防止机器人登录。

在页面中使用session级ja bean实现分页,在会话中保存用户对此页面的访问状态,在会话结束之前始终记忆用户访问此页对应的页码。

在页面中使用application级ja bean实现安全的系统设置,当启动后,即可对系统运行参数进行应用程序级的设置,只要不关闭,此设置始终有效且作用于所有用户,如果设置不慎造成系统错误或想恢复系统默认设置,则只需重新启动即可。

在对会话bean的调用包ejb中,创建系统运行日志,通过包中的writeF类写入web的C:booksMarLog.dat中,可做查询用。

4.4 本系统实现的功能

确定图书的基本信息,有书名、作者、出版日期、当前借阅状态等属性

系统的使用者包括读者、图书、用户、系统四种

读者可以查询图书;图书可以完成图书管理、借阅管理;读者可以完成读者管理的功能;系统可以使用系统的所有功能

图书管理:新书登记,图书查询,图书注销;

借阅管理:借书,还书,查询到期读者

读者管理:增加读者、删除读者、查询读者、读者类别管理(设置研究生,本科生,教师的可借册数,可借天数,可续借次数等)

系统管理:系统使用,包括用户权限管理(增加用户,删除用户,密码修改等),系统借书日志,系统运行日志,系统设置等功能

页面输入有验码,密码存取有加密

图书到期催还

体现分层设计思想,使用MVC架构

实现了多个Beans,Bean之间实现了对应的关系

使用了EJB QL,事务控制等

使用了jsp->sessionBean->entityBean->数据库模式

数据库使用了触发器和存储过程等一些高级技术

求数据库图书管理系统课程设计

TheLog Session Bean设计 15

数据库图书管理系统课程设计:

}fwrite(&book[i],sizeof(struct book),1,fp2);

1、可以参考网上的一些开源项目,根据别人提供的一些思路,进行开发

利用代码关闭客户端的输入法,实现用户名、密码不能出现中文的问题。

2、找身边的学长,学姐,他们开发过类似的系统

3、请教老师同学,让他们给你提供一些思路

4、可以参考类似的系统

c语言 图书管理系统 源代码

fclose(fp);

#include

fclose(fp);

#include

#include

#include

#include

struct book{

char number[100];

char tittle[100];

char writer[100];

char publisher[100];

char date[100];

char pr[100];

char status[100];

char reader[100];

};

void search_book();

void borrow_book();

void return_book();

void add_book();

void delete_book();

void modify_book();

void scan_book();

int main()

{int c1=0,c2,c3;

int l数字图书馆的发展方兴未艾,目前正处于传统图书馆向数字图书馆过渡的阶段,转变过程中需要应用和集成的信息技术,以达到对网络信息资源最有效的利用和共享。传统的系统分析设计的方法难以保证效率和质量,将UML应用于数字图书馆建设,可以加速开发进程, 提高代码质量,支持动态的业务需求,并方便地集成已有的传统图书馆信息资源。这是UML一个有着很好前景的应用方向。,x,z;

while(1)

{("color 2C");

printf("ttt ^^^^^^^^^^^^^^^^^^ n");

printf("ttt| - - -图书管理系统 - - |n");

printf("ttt [1] 用户登录 n");

printf("ttt [2] 登录 n");

printf("ttt^^^^^^^^^^^^^^^^^^ n");

printf("请选择作 :");

scanf("%d",&c1);

("cls");

break;

}if(c1==1)

{while(1){

("color 2C");

printf("ttt ^^^^^^^^^^^^^^^^^^ n");

printf("ttt| - - -图书管理系统 - - |n");

printf("ttt [1] 查询图书 n");

printf("ttt| [2] 借阅图书 |n");

printf("ttt [3] 借图书 n");

printf("ttt [4] 浏览图书信息 n");

printf("ttt| [5] 退图书管理系统 |n");

printf("ttt^^^^^^^^^^^^^^^^^^ n");

printf("请选择作 :");

scanf("%d",&c2);

getchar();

switch(c2)

{case 1:search_book(); break;

case 2:borrow_book(); break;

case 3:return_book(); break;

case 4:scan_book(); break;

case 5:("cls"); return 0;

}}

}if(c1==2)

{while(1){

("color 2C");

printf("ttt ^^^^^^^^^^^^^^^^^^ n");

printf("ttt| - - -图书管理系统 - - |n");

printf("ttt| [1] 添加图书 |n");

printf("ttt [2] 删减图书 n");

printf("ttt| [3] 修改图书信息 |n");

printf("ttt [4] 浏览图书信息 n");

printf("ttt| [5] 退图书管理系统 |n");

printf("ttt^^^^^^^^^^^^^^^^^^ n");

printf("请选择作 :");

scanf("%d",&c3);

getchar();

switch(c3)

{case 1:add_book(); break;

case 2:delete_book(); break;

case 3:modify_book(); break;

case 4:scan_book(); break;

case 5:("cls"); return 0;

}}

}}

/查询图书/

{FILEfp;

struct book n;

struct book nn;

int l,r;

char x,z;

fp=fopen("F:课程设计图书管理系统.txt","rb");

while(1)

{l=0;

("cls");

printf("请输入图书名称:");

scanf("%s",n.tittle);

rewind(fp);

while(1)

{fread(&nn,sizeof(nn),1,fp);

if(feof(fp))

break;

r=strcmp(n.tittle,nn.tittle );

if(r==0)

{l=1;

break;

}}

if(l==0)

{printf("没要查询图书nn ");

{printf("查询图书:");

printf("n");

printf("%s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.pr,nn.status,nn.reader);

printf("nnn");

}printf("否继续查询图书 ? [(y)/否(n)] ? nn");

do

{x=getche();

}while(x!='n'&&x!='y');

if(x=='n')

break;

}fclose(fp);

("cls");

}//添加

void add_book()

{FILE fp;

struct book n;

struct book nn;

char x,z;

int l,r;

fp=fopen("F:课程设计图书管理系统.txt","ab+");

do

{("cls");

do

{l=0;

scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.pr,n.status,n.reader);

("cls");

rewind(fp);

while(!feof(fp))

{fread(&nn,sizeof(nn),1,fp);

r=strcmp(n.tittle,nn.tittle);

if(r==0)

{l=1;

printf(" 该图书已存请输入新图书信息: nn");

break;

}}

}while(l);

fwrite(&n,sizeof(n),1,fp);

printf("否继续输入新图书信息[y/n] nn");

do

{x=getche();

}while(x!='n'&&x!='y');

}while(x=='y');

("cls");

}//删除图书

void delete_book()

{FILE fp,fp1;

char x,z;

struct book n;

struct book nn;

int l,r;

fp=fopen("F:课程设计图书管理系统.txt","ab+");

while(1)

{l=0;

("cls");

printf("请输入需要删除图书名: nn");

rewind(fp);

while(1)

{fread(&nn,sizeof(nn),1,fp);

if(feof(fp))

break;

r=strcmp(n.tittle,nn.tittle);

if(r==0)

{l=1;

break;

}}

if(l==0)

printf("起未找该图书 n");

printf("n");

printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.pr,nn.status,nn.reader);

printf("确认删除图书信息 [(y)/否(n)]nn");

do

{z=getche();

}while(z!='n'&&z!='y');

if(z=='n')

break;

else

{fp1=fopen("F:课程设计图书管理系统new.txt","wb");

rewind(fp);

while(1)

{fread(&nn,sizeof(nn),1,fp);

if(feof(fp))

break;

r=strcmp(n.tittle,nn.tittle);

if(r!=0)

fwrite(&nn,sizeof(nn),1,fp1);

}fclose(fp);

fclose(fp1);

fp=fopen("F:课程设计图书管理系统.txt","wb");

fp1=fopen("F:课程设计图书管理系统new.txt","rb");

while(1)

{fread(&nn,sizeof(nn),1,fp1);

if(feof(fp1))

break;

fwrite(&nn,sizeof(nn),1,fp);

}fclose(fp);

fclose(fp1);

}}

printf("否继续删除图书信息 [(y)/否(n)] n");

do

{x=getche();

}while(x!='n'&&x!='y');

if(x=='n')

break;

}fclose(fp);

("cls");

}//修改图书信息

void modify_book()

{FILE fp;

struct book n;

struct book nn;

int l,r;

char x,z;

fp=fopen("F:课程设计图书管理系统.txt","rb+");

while(1)

{l=0;

("cls");

printf("请输入需要修改图书名: nn");

("cls");

rewind(fp);

while(1)

{fread(&nn,sizeof(nn),1,fp);

if(feof(fp))

break;

r=strcmp(n.tittle,nn.tittle);

if(r==0)

{l=1;

break;

}}

if(l==0)

printf("起未找该图书信息 nn");

printf("n");

printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.pr,nn.status,nn.reader);

printf("请依修改图书信息nnn");

scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.pr,n.status,n.reader);

fseek(fp,sizeof(nn),1);

fwrite(&n,sizeof(nn),1,fp);

}printf("n");

printf(" 否继续修改用户信息[y/n]? nn");

do

{x=getch();

}while(x!='n'&&x!='y');

if(x=='n')

break;

}fclose(fp);

("cls");

}//借书

void borrow_book()

{FILEfp;

struct book n;

struct book nn;

char x,z;

int l,r;

fp=fopen("F:课程设计图书管理系统.txt","rb+");

while(1)

{l=0;

("cls");

printf("请输入需要借阅图书名: n");

rewind(fp);

while(1)

{fread(&nn,sizeof(nn),1,fp);

if(feof(fp))

break;

r=strcmp(n.tittle,nn.tittle);

if(r==0)

{l=1;

break;

}}

if(l==0)

printf("起未找该图书 n");

{ printf("n");

printf("n");

printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.pr,nn.status,nn.reader);

printf("请输入图书信息并修改库状态及借阅者信息");

printf("n");

scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.pr,n.status,n.reader);

fseek(fp,sizeof(nn),1);

fwrite(&n,sizeof(nn),1,fp);

}printf("n");

printf(" 否继续借书 [(y)/否(n)] nn");

do

{x=getch();

}while(x!='n'&&x!='y');

if(x=='n')

break;

}fclose(fp);

("cls");

}//书

void return_book()

{FILEfp;

struct book n;

struct book nn;

char x,z;

int l,r;

fp=fopen("F:课程设计图书管理系统.txt","rb+");

while(1)

{l=0;

("cls");

printf("请输入需要借图书名: n");

rewind(fp);

while(1)

{fread(&nn,sizeof(nn),1,fp);

if(feof(fp))

break;

r=strcmp(n.tittle,nn.tittle);

if(r==0)

{l=1;

break;

}}

if(l==0)

printf("起未找该图书 n");

printf("n");

printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.pr,nn.status,nn.reader);

printf("请输入图书信息并修改库状态 nn");

printf("n");

scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.pr,n.status,n.reader);

fseek(fp,-(int)sizeof(nn),1);

fwrite(&n,sizeof(nn),1,fp);

}printf("n");

printf("否继续书 [(y)/否(n)] n");

do

{x=getche();

}while(x!='n'&&x!='y');

if(x=='n')

break;

}fclose(fp);

("cls");

}//浏览

void scan_book()

{FILEfp;

char x,z;

struct book n;

fp=fopen("F:课程设计图书管理系统.txt","rb");

rewind(fp);

("cls");

while(1)

{fread(&n,sizeof(n),1,fp);

if(feof(fp))

break;

else

{printf("n");

printf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.pr,n.status,n.reader);

}}

printf("主菜单请按车");

do

{x=getche();

}while(x!='r');

if(x=='r')

{fclose(fp);

("cls");

}}

软件工程图书管理系统维护报告怎么写

fclose(fp);

不知道你是不是系统设计大作业啊……找到了一份我以前参考过的文档。希望有点帮助吧。里面系统实现部分没有写,因为每个人用的东西都不一样,你就斟酌一下吧。至于时间表,这个完全看技术水平。毕竟逻辑还是挺简单的。

scanf("%s",&n.tittle);

一、系统

随着计算机技术的飞速发展,利用计算机来获得和处理信息是当今信息管理的一大特点。伴随计算机硬件的快速发展,有关信息管理的软件——数据库系统软件也在迅猛发展着。图书馆是高等院校的重要组成部门,是教师和学生获取知识的重要场所。由于图书馆主要从事大量的图书资料的储存和流通。所以一直以来,计算机在图书馆的图书管理中得到了广泛的应用。本系统即是结合实际情况开发的图书资料管理系统。系统开发的主要任务是针对原来系统的时效性、数据的正确性、作的方便性上的不足,解决图书流通上的问题。实现图书信息管理的系统化,规范化和自动化,以程度提高作人员的办公效率。

二、系统需求分析及总体设计

2.1 系统的功能要求

1、 对信息进行条形码管理。

2、 对成批数据的高效录入, 系统对录入的数据的合法性应做出有效性检查, 能够对数据进行增加、删除、修改等基本作。

3、 实现对数据的动态查询且查询速度快, 并能够将数据以统一形式的报表打印输出。

4、系统应该提供相应的代码维护功能。

5、该系统应具有对数据库中重要数据的备份和恢复的功能。

6、该系统应该采用用户匿名登录的方式, 以保护系统数据库的重要敏感数据。

2.2 系统总体设计

本数据库管理系统主要由图书检索、图书管理、数据维护、图书统计、打印输出、系统维护六大模块组成, 如图1 所示。各模块功能如下:

1、主控模块主控模块的功能是控制各个分支模块,它是实现各模块功能的总控制台

3、图书管理模块是图书作模块,读者是无权进入的。本模块由读者编号和姓名查询、借出图书登记、归还图书登记和续借图书登记子模块构成,在“借出图书登记”中对借出的图书进行登记,图书库中这本书的库存减少,而读者在归还图书的图书库中这本书库存增加。对超过规定日期未归还图书的读者进行计算罚金 。图书管理相当于图书管理人员日常的管理工作,即图书借阅、归还和续借等登记工作。

图1 图书管理系统功能模块图

4、数据维护模块是由图书控制的模块,它由增加、修改和删除读者,增加、修改删除图书,浏览修改读者、浏览修改图书等程序组成。 在软件设计时考虑到读者编号、书名、书号是的,因此,在修改读者或图书中,读者记录或图录一经登记“读者编号”和“姓名”便不能修改,在删除读者或图书时只要读者有借出图书未还或库存图书原有数量与现有库存量不符便不能删除。

5、数据统计模块由读者统计、图书统计、借出图书分类统计、到期未归还图书读者统计几部分组成。

6、打印输出模块由读者信息、打印借出图书、打印到期未归还图书的读者和打印图书卡片组成,本模块由图书控制。

7、系统维护模块由数据备份、数据恢复、密码修改和数据库索引构成,本模块由控制。数据备份主要备份读者库、借出图书库、图书库及索引库,主要防止意外发生,如突然掉电、或硬盘的损坏等。 数据恢复是数据备份的逆作 密码的修改主要考虑到数据的安全,图书可以随时更改密码,不让他人进入图书管理系统 数据索引是在作过程中如果发生数据库与索引库不能同步时,图书只要使用本功能,就可以正常使用 。

8、退出系统退出系统模块由帮助和退出构成。

三、系统设计步骤、方法

开发3.1 数据层设计 5工具

平台:Visual C++ 6.0

语言:兼容C的C++语言

3.1 数据库的设计

3.3 菜单的设计与创建

3.4 主程序的编写

3.5 系统的编译与运行

3.6 系统说明

c语言 数据结构课程设计 图书管理系统

(dbo.user_logBook.logb_backdate IS NULL)

您好}chabook()!

还是你自己编吧!一班人都没有那个心思,你这个代码花的精力太大了,至少要半天才能出来!

非人力所能及!

加油,我相信你自己能写出更完善的代码来的!FOR DELETE

图书管理系统 uml图

}fwrite(&book[i],sizeof(struct book),1,fp2);

【原文出处】现代图书情报技术

void search_book()

【原刊地名】京

【原刊期号】200206

【原刊页号】4~6

【分 类 号】G9

【分 类 名】图书馆学、信息科学、资料工作

【复印期号】200301

【 标 题】基于UML的高校图书馆管理系统

【英文标题】The Application of UML in Digital Library

Jin Yi Yang Zongying

(Institute of Information Science and Technology,Shanghai Jiaotong University, Shanghai 200030,China)

【 作 者】金毅/杨宗英

【作者】金毅,杨宗英,上海交通大学情报科学技术研究所 上海 200030

【内容提要】数字图书馆的研究方兴未艾,目前正处于传统图书馆向数字图书馆过渡的阶段,转变过程中需要应用和集成的信息技术,以达到对网络信息资源最有效的利用和共享。传统的系统分析设计的方法难以保证开发的效率和质量,将UML应用于数字图书馆建设,可以加速开发进程,提高代码质量,支持动态的业务需求,并方便地集成已有的传统图书馆信息资源。这是UML一个有着很好前景的应用方向。

【摘 要 题】实践研究

【英文摘要】The study of digital library is booming. Now traditional library is converting to digital library,this needs the application and integration of the latest rmation technologies for the maximum usage and shareof network rmation resources. Traditional ysis and design mods can't guarantee the efficiencyand quality. Using UML in dloping digital library can quicken the process, improve the code quality, supportthe dynamic needs and easily integrate the traditional resources. This is a hopeful application field for UML.

UML/Digital library

【 正 文】

【分类号】G.76

1 引言

在信息技术迅猛发展及基于Internet网络应用日益普及的今天,传统图书馆正在向自动化、网络化、电子化的数字化方向发展,这是目前网络信息资源开发和研究的热点。数字图书馆的建设涉及到信息资源数字化、多媒体数据库、分布式网络、信息管理系统结构等多方面的问题,需要有效地集成和应用的信息技术。如何在宏观上有效地把握和组织,并运用到数字图书馆的开发建设上,是数字图书馆研究的重点。UML(The Unified Modeling Language,即统一建模语言)是一种编制系统蓝图的标准化语言,可以对复杂的系统建立可视化的系统模型,目前已经被工业标准化组织OMG(Object Mament Group)接受,一经推出便得到许多的计算机厂商如Microsoft、HP、IBM、Oracle等的支持,在上的应用日益广泛。数字图书馆的开发建设是一个复杂的软件工程,需要集成不同的作系统、数据库和应用软件,有众多不同级别的用户、,满足图书馆从书目查询、普通和电子书刊借阅到提供服务、资源共享等各种需求。用传统的系统开发和集成的分析设计方法难以保证效率和质量,UML的特点及数字图书馆的要求,决定UML在数字图书馆中应该有很好的应用前景。

1.1 数字图书馆的基本特征和模式

数字图书馆组织了一系列与平台无关、面向对象、分布式的数字化信息资源并且提供相关的服务,它应该具有以下一些特征〔2〕〔4〕:

(1)数字图书馆拥有海量的数字化资源, 其信息度量单位不再是KB、MB,而是GB、TB甚至PB。数字化的资源又是多种媒体(如文字、图像、音频、视频、虚拟空间等)的,具有多种存储和压缩格式。

(2)数字化资源并不是孤立的,而是相互关联的动态的。 数字图书馆是数字化资源的统一,可以通过一定的相关关系,由特定的协议和存取方法来查找和访问这些数字化资源。

(3)数字图书馆必须为用户提供统一的访问手段, 能够让用户透明方便地获取所需的信息而不必关心这些信息的具置。对数字资源的检索应该是智能化、交互式的,对全文、多媒体信息、多语言信息的检索都可以达到很好的查全率和查准率。

(4)数字图书馆建立在异构平台上,具有分布、 开放的信息结构,高速、可靠的网络环境是其运行的基础。它突破了时间、空间的限制,让用户可以在任何地方、任何时间获取自己所需的信息。在此基础上提供的导航式和个性化的服务,使服务内容更多样、服务模式更广泛,这是对传统图书馆服务功能的突破。

数字图书馆的模式,可以用图1简单说明, 用户通过网络和通信系统,连接到数字图书馆的咨询系统,通过这个统一的访问界面,用户可以透明地获取各种信息资源。

附图

图1 数字图书馆模式

1.2 UML概述及特点

UML是一种编制系统蓝图的标准化语言, 可以对大型复杂的系统的各种成分可视化、说明并构造系统模型,以及建立各种所需的文档。UML通过三类图形建立系统模型:Use Case图、静态结构图(对象类图、对象图、组件图、配置图)和动态行为图(顺序图、协同图、状态图、活动图),这些图可以从不同的抽象角度使系统可视化。UML 具有以下特点〔1〕:

(1)面向对象。UML支持面向对象技术的主要概念,提供了一批基本的模型元素的表示图形和方法,能简洁明了地表达面向对象的各种概念。

(2)可视化,表示能力强。通过UML的模型图能清晰地表示系统的逻辑模型和实现模型,可用于各种复杂系统的建模。

(3)与过程。UML是系统建模语言,与开发过程。

(4)于程序设计语言。用UML建立的软件系统模型可以用Ja、VC++、Smalltalk等任何一种面向对象的程序设计来实现。

(5)易于掌握使用。UML图形结构清晰,建模简洁明了,容易掌握使用。

使用UML进行系统的分析和设计,可以加速开发的进程,提高代码的质量,支持动态的业务需求。UML适用于各种规模的系统开发,能促进软件复用,方便地集成已有的系统并有效处理开发中的各种风险。

2 UML在数字图书馆中的应用

UML是一种建模语言,是系统开发的一个组成部分,本身并没有关于开发过程概念的定义和表示符号。UML的创始者Booch、Jacobson和Rumbaugh在Rational公司的支持下综合了多种系统开发过程的长处,提出新的面向对象的开发过程,称为Rational 统一过程(RationalUnified Process, RUP)。RUP过程的核心工作流包括:业务建模、需求分析、系统分析与设计、实现、测试和系统配置。下面通过UML来分析并构造数字图书馆模型,并结合Rational统一过程加以描述,图形用Rational Rose工具软件绘制。

2.1 数字图书馆的业务建模和需求分析

业务建模和需求分析的目的是对数字图书馆进行评估,采集和分析系统的需求,理解系统要解决的问题,重点是充分考虑系统的实用性。结果可以用一个Use Case模型表达(图2), 模型中的活动者代表外部与系统交互的单元,包括用户、图书馆和外部信息源;UseCase是对系统需求的描述,表达了系统的功能和所提供的服务,包括采购子系统、编目子系统和流通子系统。对于数字图书馆而言,流通子系统还应该考虑到普通书刊流通和电子书刊流通的区别。电子书刊是指内容为数字格式、发行为电子方式、用计算机阅读和存储的电子读物,可以实现普通书刊所没有的全文检索、页面批注、摘要、字体缩放等功能。用户无论何时何地,都可以在线借还,这是数字图书馆服务功能的一个重要组成部分,也是对传统图书馆服务功能的延伸和拓展,其中的关键是流通子系统在实现时必须能对电子书刊的版权、以及可以同时借阅的用户数进行保护和控制。

附图

图2 数字图书馆Use Case模型

图2中模型元素之间的实线表示二者存在关联关系, 带空心箭头的实箭线说明存在泛化关系,这里有两种情况,一种是一般与特殊的关系,如“流通子系统”与“普通书刊流通”、“电子书刊流通”的关系;另一种是使用关联,表示一个模型元素需要使用另一个模型元素,在箭线上标有<<Use>>, 如“流通子系统”需要使用“编目子系统”生成的书目数据,图2是数字图书馆系统层的Use Case模型, 只包含了最基本的Use Case模型,是系统的高层抽象。在开发过程中,随着对系统的认识不断加深,Use Case模型可以从顶向下不断精化,演化出更为详细的Use Case模型。

2.2 数字图书馆系统分析与设计

系统分析与设计是研究欲采用的实现环境和系统结构,结果是产生一个对象模型,即设计模型,设计模型包含了Use Case的实现,可以表现对象是如何相互通信和运作来实现Use Case流的。对于系统的静态结构,可以通过对象类图、对象图、组件图和配置图来描述;对于系统的动态行为,可以通过顺序图、协同图、状态图、活动图描绘。这些图再加上支持说明文档就构成一个完整的设计模型。

(1)静态结构的分析与设计

数字图书馆拥有大量数字化信息资源,这些资源是多种媒体、多种格式的,而且还是相互关联的。其数据量大,信息长度不定,非结构化信息与结构化信息并存。传统的数据库和信息管理系统在数据模型、系统结构、用户接口等方面都难以实现对这些数字化信息资源的管理和作,这就决定了数字图书馆必须采用面向对象的方法来建立数据模型和管理模型,建立面向对象的数据库,实现面向对象的信息管理系统。使用UML 对数字图书馆系统进行基于面向对象的分析和设计,可以从开发的步开始,从系统的底层就把握住数字图书馆信息资源的特征,为下一步的具体实现打好基础。在为数字图书馆系统建立模型时要涉及到处理大量的模型元素,如对象类、接口、组件、、图等,可以将语义上相近的模型元素组织在一起,这就是UML的包, 包从较高的层次来组织管理数字图书馆的系统模型。

在详细设计阶段可以对包图中的所有类、对象从实现角度再进一步进行细化,绘制具体的对象类图、对象图等。图3 是数字图书馆系统的包图,虚箭线说明包之间的依赖关系,如“流通”包依赖于“数据库”包,要使用“数据库”包中的类及数据。带空心箭头的实箭线说明包之间的泛化关系,这里是一般与特殊的关系,如“编目”包与“本馆编目”包、“联合编目”包之间存在泛化关系。

附图

图3 数字图书馆系统包图

(2)动态结构的分析与设计

数字图书馆提供的各种服务都是建立在分布、开放的信息结构之上,依托高速、可靠的网络环境来完成。每项服务都可以看成一个流,由若干相关的对象交互合作来完成。对于这种系统内部的协作关系和过程行为,可以通过绘制顺序图和协同图来帮助观察和理解。

一个对象在其生存期间所经历的状态序列,对于把握对象的行为和状态的迁移变化是非常重要的,可以通过状态图来了解一个对象的历史,引起一个状态向另一个状态转移的,以及由于状态的转移而引发的动作。

此外,描述工作流和并发处理行为还可以用活动图,表达从一个活动到另一个活动的控制流。

顺序图和协同图适合描述多个对象的协同行为,而状态图适合描述一个对象穿越多个Use Case的行为。状态图与活动图的区别是,状态图描述的是对象类响应的外部行为,活动图描述的是响应内部处理的对象类的行为。

附图

图4 数字图书馆电子书刊流通服务顺序图

图4是一个电子书刊流通服务的顺序图例子, 用以说明数字图书馆电子书刊基本流通服务。用户向流通子系统的用户接口登录,经用户合法性验证后,向流通子系统的电子书刊流通模块提交服务请求,电子书刊需要经过版权和复本的验证,以保证电子书刊的每一个复本在同一时间只允许一个用户借阅或阅读。比如购买了一本电子书的五个复本,那么就可以有五个用户同时借阅或阅读这本书,而且必须能够控制用户对电子书刊的任意和打印,以保护电子书刊出版者的合法权益。然后就可以完成电子书刊的借、还、预约、续借等流通服务,退出。

通过顺序图可以清晰地看出用户、流通子系统的用户接口和电子书刊流通模块之间按时间顺序的消息交换,这对于把握系统的控制流、顺序行为和交互行为是非常有益的。建立在分布、网络环境下的数字图书馆其流和控制流是十分复杂的,需要从层顶到底层进行一步步的分解,用多幅能反映动态结构的图来分析与说明。

2.3 数字图书馆的实现、测试和系统配置

经过系统分析与设计后,就可以根据设计模型在具体的环境中实现系统,生成系统的源代码、可执行程序和相应的软件文档,建立一个可执行的for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i)系统。然后需要对系统进行测试和排错,保证系统符合预定的要求,获得一个无错的系统实现。测试的结果将确认所完成的系统可以真正使用。系统配置的任务是在真实的使用运行环境中配置、调试系统、解决系统正式使用前可能存在的任何问题。

3 小结

【参考文献】

〔1〕张龙详.UML与系统分析设计.邮电出版社,2001

〔2〕郑巧英.杨宗英.图书馆自动化新论:信息管理自动化.上海交通大学出版社,1998

〔3〕郑巧英.数字图书馆的一种模式——网络图书馆. 现代图书情报技术,2000,(2)

〔4〕陈英.UML多视点建模机制应用研究.理工大学学报.2001,(2)

〔5〕于升峰.数字图书馆的关键技术研究.情报学报,1999,(12)

最后修改时间:
欧洲血统好玩的手游 欧洲血统的用英语怎么说
上一篇
手游怎么换别人号登陆_手游怎么换别人号
下一篇

相关文章