游戏平台管理系统设计_第1页
游戏平台管理系统设计_第2页
游戏平台管理系统设计_第3页
游戏平台管理系统设计_第4页
游戏平台管理系统设计_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、游戏平台管理系统management system for game platform 游戏平台管理系统1) 项目总体描述游戏平台是支持游戏玩家们共同游戏的娱乐平台,目前最知名的游戏平台是浩方游戏平台。参考浩方游戏平台,我们的系统不仅提供已有的用户登陆游戏功能,用户vip特权功能,积分系统功能等,还支持金币系统,战队系统,游戏点卡系统等,从而丰富了平台面向用户的功能。同时,本系统也支持对于玩家账号,金币,vip,游戏点卡,战队等等的管理功能,我们为平台管理员充分考虑,力求做到界面简洁明了,操作高效快捷,从而提高管理员的工作效率并节省管理员的管理时间。本系统用c#完成系统界面实现,采用sql s

2、erver作为数据库,针对两条主线如下:一,面向游戏玩家1) 拥有平台账号游戏玩家的登录功能。2) 未获得平台账号的玩家可进行注册(即实现数据库的玩家信息添加功能,注意不需要删除功能)。3) 玩家登陆后的个人信息显示(查询)功能。4) 修改密码及个人信息功能。5) 积分系统和战队系统。6) 购买平台金币,并用金币换取vip,游戏点卡。二,面向平台管理员 1) 查询游戏玩家信息。2) 对玩家信息进行删除,封号,解封。(注意不需要添加功能)3) 对玩家数据进行数据库备份,数据库更新,还原功能。4) 对游戏的查询,添加,删除。5) 对战队的管理功能。6) 对vip级别的管理,如添加类别,设置价格等。

3、7) 对游戏点卡的管理,如添加类别,设置价格等。2) 项目需求分析在游戏平台管理系统,当游戏玩家用户使用时,应该有相应账号信息的记录(如最后登录时间)和平台进行游戏的记录;当平台管理员使用时,应该可以对平台用户账号信息,平台各种游戏及平台提供的各种功能进行完善平台,更改属性,进行管理等操作。 1)平台支持各种游戏,每种游戏有一名管理员管理,每名管理员可管理几种游戏,每 种游戏需要玩家消费平台金币兑换游戏时间(即购买点卡,点卡由管理员管理属性)。2)平台由少数管理员管理,大量玩家用户在平台上游戏,玩家vip权限不同,权限不 同(如vip)同样由平台金币兑换,vip属性也由管理员管理)。3)玩家用

4、户可建立自己的战队或加入他人建立的战队,每个玩家用户战队唯一(战队 有管理员管理)。4)平台盈利方式为平台用户购买和消费平台金币,而管理员则可以根据点卡消费记录 和相应的游戏人数来设置游戏热度以及是否继续保留该游戏。设置数据项如下:1用户:2游戏:3vip:4战队:5点卡:界面的设计:会员登录界面的设计: 管理员登录界面的设计:修改个人信息界面:会员操作界面:游戏平台系统的业务流程图:本系统主要为非会员提供注册业务,为会员提供修改个人部分信息、查询信息、购买及游戏的业务、为管理员提供平台信息设置、信息查询更新等业务。下图为本系统的主要业务流程图。游戏平台数据库系统中的数据流图:本系统主要包括会

5、员管理、游戏管理、点卡管理、战队管理、消费管理、vip管理六大管理;会员、管理员两个主体;会员档案、游戏档案、战队档案、点卡档案、消费记录档案及vip档案六个主要的保存数据的档案。下图为他们之间的数据流动方向图。会员登陆状态图:管理员登陆状态图3) 概念结构设计a) 定义数据字典(1) 数据元素数据元素系统名会员管理子系统条目名会员号别名无存储处d1:会员档案数据元素类型类型字符型(8字节)取值范围00000001-99999999含义游戏玩家身份的唯一标识简要说明记录会员自身编号数据元素系统名会员管理子系统条目名会员积分别名无存储处d1:会员档案数据元素类型类型整型(4字节)取值范围大于等于

6、0含义简要说明记录会员游戏积分以计算等级,评价玩家级别数据元素系统名会员管理子系统条目名会员金币别名无存储处d1:会员档案数据元素类型类型整型(4字节)取值范围大于等于0含义记录会员拥有可用于交换其他商品的货币数量简要说明是该游戏平台支持的消费方式数据元素系统名战队管理子系统条目名队长名别名无存储处d2:战队档案数据元素类型类型字符型长度8取值范围00000001-99999999含义与战队成员共同构成战队的主键简要说明记录战队名称数据元素系统名游戏管理子系统条目名游戏编号别名无存储处d3:游戏类档案数据元素类型类型字符型长度4取值范围0000- 9999含义简要说明记录游戏编号(2) 数据存

7、储数据存储系统名会员信息管理子系统条目名会员编号d1存储组织二维表记录数视平台规模,至少上千条,多至百十万数据量gb主键编号会员号记录组成会员号 + vip等级 + 积分 + 金币数 + 以及其它个人信息长度(字节)8 4 4 4简要说明存储平台所有会员积分及相关信息修改记录由系统和用户进行修改编号日期数据存储系统名会员信息管理子系统条目名消费记录主键编号账单编号记录组成账单编号出账/入账金币数长度(字节)152 4简要说明存储会员每笔交易类型及额度修改记录编号日期数据存储系统名战队管理子系统条目名战队编号d2存储组织二维表编号d5记录数约200数据量mb主键编号战队队员号+队长号记录组成战队

8、名 队长名 战队总积分长度(字节)8 8 4简要说明存储战队相关数据修改记录编号日期数据存储系统名游戏管理子系统条目名游戏类编号d3存储组织二维表编号d2记录数10-20主键编号游戏编号记录组成游戏编号 游戏名称 游戏热度 限定人数长度(字节)4 20 4 4简要说明存储游戏方面数据修改记录编号日期数据存储系统名游戏管理子系统条目名游戏记录编号d4存储组织二维表记录数mb主键编号会员号+游戏编号记录组成会员号+游戏编号+是否在线+可用金币数长度(字节)8 4 2 4简要说明存储玩家游戏信息修改记录编号日期数据存储系统名vip管理子系统条目名vip存储组织二维表记录数小于5主键编号vip级别记录

9、组成vip级别 价格 挤房能力长度(字节)4 4 4简要说明存储vip方面数据修改记录编号日期说明: 挤房能力是指当一个游戏房间人数已经满时,若人数未超过房间人数+挤房能力时,则该会员仍能进入相应的游戏,否则无法进入。数据存储系统名点卡管理子系统条目名点卡存储组织二维表记录数小于50主键编号点卡编号记录组成点卡编号 价格 点卡可用时间长度(字节)2 4 4简要说明存储游戏点卡数据修改记录编号日期(3) 数据加工数据加工系统名会员管理子系统条目名会员信息查询输入会员档案(d1) ,会员查询,战队档案d3输出需要查询的会员信息(临时表)(包含所属战队)简要说明对于会员信息的一系列查询修改记录编号日

10、期数据加工系统名会员管理子系统条目名会员操作输入会员档案(d1) + 添加,删除等操作输出更改后的会员档案简要说明管理员对会员数据的操作修改记录编号日adw 期数据加工系统名会员管理子系统条目名会员信息修改输入会员档案(d1)+会员名,会员更新信息输出会员更新信息简要说明根据需求将会员的信息加入会员数据库修改记录编号日期数据加工系统名战队管理子系统条目名战队信息输入战队档案d2,战队查询输出需要查询的战队信息(临时表)简要说明根据需求查询符合某些条件的战队信息修改记录编号日期数据加工系统名战队管理子系统条目名战队操作输入战队档案d2与添加,删除等操作输出更改后的战队档案简要说明根据要求更改战队

11、档案修改记录编号日期数据加工系统名游戏管理子系统条目名游戏输入游戏记录档案d4+增删及修改属性操作输出更改后的游戏档案简要说明根据需求查询符合某些条件的成绩单修改记录编号日期b) 画出e-r图(1) 平台总体e-r图游 戏nn管理游戏类n玩管理管理员vip会员属于管理点卡战队查看m1mnn11管理n1111n11管理拥有n处理n消费记录(2) er图中的实体细化游戏信息实体游戏编号会员编号游戏信息游戏积分是否在线游戏类实体游戏名游戏编号管理员号游戏人数限定游戏热度游戏类最后登录时间玩家积分vip等级性别昵称区域密码会员号会员表性别姓名年龄密码管理员账号管理员管理员实体会员实体等级买点卡折扣价格

12、vip挤房能力vip实体战队名队员号战队积分队长号战队战队实体点卡号点卡游戏点卡实体游戏编号点卡时间点卡价格已销售点卡记录实体售出未使用的点卡截止有效日期点卡密码游戏编号历史消费总金额现有金币数会员号可兑换的金币值消费记录消费记录实体4) 物理结构设计a) 画出数据库总体的物理模型图(略)b) 本系统中所用到表结构,注明主码,外码,索引,约束等管理员表(adiminstor)列名数据类型长度可否为空说明主键外键admnochar5n管理员号主键admnamevarchar20n管理员姓名admpasswvarchar16n管理员密码admsexchar2y管理员性别admageint4y管理员

13、年龄游戏类表(game_category)列名数据类型长度可否为空说明主键外键gnochar4n游戏编号主键gnamechar20n游戏名gadmnochar5n管理员号外键ghotint4y游戏热度gmaxmumint4n游戏人数限定vip表(gamevip)列名数据类型长度可否为空说明主键外键v_levelint4n 等级主键v_priceint4nvipv_discountnumberic3y折扣v_truckabilityint4y挤房能力会员表(gameuser)列名数据类型长度可否为空说明主键外键unochar8n会员账号主键unamevarchar20n昵称upasswvarch

14、ar18n密码usexchar2y性别usvip_levelint4yvip等级外键uterrichar20n区域ulastlogindatetime8n最后登陆时间umarksint4y积分ucoinint4y金币游戏战队表(gameteam)列名数据类型长度可否为空说明主键外键tleaderchar8n队长外键tmemberchar8n成员外键tnamechar20n密码tmarksint4y性别点卡类表(gamecard)列名数据类型长度可否为空说明主键外键cnochar10n点卡号主键gnochar4n游戏编号外键cpriceint4n点卡价格ctimeint4n点卡时间已售出点卡表(

15、cardinfo)列名数据类型长度可否为空说明主键外键cdeadlinedatetime8n点卡时间主键gnochar4n游戏编号外键cpassvarchar20n点卡价格消费记录表(consumeinfo)列名数据类型长度可否为空说明主键外键con_nochar15n交易号主键unochar8n会员号外键con_typechar4n入账还是出账coinsint4n交易金币数con_datedatetime8y交易时间游戏表信息表(gameinfo)列名数据类型长度可否为空说明主键外键gi_unochar8n会员号主键gi_gnochar4n游戏编号主键gi_isonlinechar2n是否在

16、线gi_cardavaibletimeint4n点卡剩余时间5) 数据库部署描述a) 描述数据库创建到sql server中的过程根据以上概念分析和逻辑分析设计,利用sqlquery设计各个实体即二元关系表:1) 依次创建管理员表,游戏类表,vip表,用户表,战队表,游戏信息表,点卡表,售出点卡记录表,消费记录表。建成关系表后, 本系统的引用完整性约束如下图:2) 为上述关系表设置触发器(trigger)i. 删除一个会员时将与该会员所有有关的信息删除:create trigger mytrigger1 on gameuser。ii. 删除一类游戏时将与该游戏所有有关的信息删除:create

17、trigger mytrigger2 on game_category。iii. 删除一管理员时,游戏并不应该删除,所以应将其所管理的游戏移交给默认管理员再删除该管理员:create trigger mytrigger3 on adiminstor。iv. 消费表更新(即插入新的消费记录)处理后,则会员的金币数应当一起改变:create trigger mytrigger5 on consumeinfo。以上完成sql_server的约束类别有:a:对insert和update强制关系b:级联更新相关字段c:级联删除相关纪录3) 为提高效率,创建必要的存储过程i. 购买点卡存储过程: crea

18、te procedure buycard u_no char(8),c_no char(2),c_pass varchar(20);传入参数分别为会员号,点卡类型,以及应用程序随机生成的密码,如果有足够金币则是购买成功,否则失败。ii. vip申请的存储过程:create procedure vip_apply u_no char(8),vlevel int;传入参数分别为会员号,所申请的vip等级,是否成功,同上。iii. 帐户充值存储过程:create proc deposit uno char(8),coin int;传入参数分别为会员号,存储金币数。操作完成后,更新消费记录。iv. 系

19、统更改会员积分:create proc updatemarks uno char(8),mark int;传入参数分别为会员号,新的积分。由系统按照一定的原则计算,更新后,会员所在的战队积分也将被更新。v. 创建会员登陆的存储过程:create proc userlogin uno char(8),pass varchar(18) ;传入参数分别为会员号,会员密码,如果核对后成功则登录,否则提示错误信息。4) 为了安全以及查询效率的要求,创建必要的视图i. 某个游戏及对应的玩家人数,管理员信息视图:create view vi_catotouser(管理员,游戏名,游戏人数);ii. 当前在线

20、会员信息视图: create view vi_onlineuser(会员号, 会员姓名,vip等级,个人积分,可用金币);iii. 用户在该平台的消费金额及相关记录: create view vi_userconsume(会员号,会员姓名,vip等级,个人积分,总金额).b) 为每个表创建足够有目的、价值的测试数据,见附录。6) 自我命题的sql组语句的撰写(1) 查询会员表中有vip身份且处于辽宁网通1的玩家信息:select uno,uname,usvip_level,usex,ulastloginfrom gameuserwhere usvip_level0 and uterri = 辽

21、宁网通;(2) 查询年龄小于25岁大于子14岁的男性管理员姓名declare y int;select y=datename(year,getdate();select * from adiminstor where (y-datename(year,admbirth)between 14 and 25 and admsex = 男; (3) 查询名称之中带有”门“字或带有”星“字的战队信息select tleader,tmember,tname,tmarksfrom gameteamwhere tname like %门% or tname like %星%;(4) 查询视图vi_userc

22、onsume 信息:select * from vi_userconsume;下面是部分结果:(5) 查询视图 vi_onlineuser 信息:select * from vi_onlineuser;下面是部分结果:(6) 查询视图vi_catotouser信息:select * from vi_catotouser;结果:(7) 所在战队的所有成员信息嵌套查询:select distinct(uno),uname,usvip_level,tnamefrom gameuser,gameteamwhere tname in(select tname from gameteam where tm

23、ember=00034566) and (tmember=uno or tleader=uno);结果:(8) 查询当前热度最高的游戏及该游戏所有玩家信息select gname,ghot,uno,uname,umarksfrom gameuser,game_category,gameinfowhere ghot in(select max(ghot)from game_category)and gi_uno=uno and gi_gno=gno;结果:(9) 查询各个vip等级的会员人数:select usvip_level vip等级,count(uno) 人数from gameuserg

24、roup by usvip_level;(10) 查询所有专区对应的人数:select uterri 专区,count(uno) 人数from gameuser group by uterri;结果:(11) 查询专区人数大于10人的专区:select uterri 专区,count(uno) 人数from gameuser group by uterri having count(uno)10结果:(12) 查询与用户“周_勇%”所在专区的所有会员:select * from gameuser where uterri in(select uterri from gameuser where

25、 uname like 周_勇% escape );下为部分结果:(13) 利用视图和会员表查询消费金额大于平均消费金额的会员信息select x.*,y.总金额from gameuser x,vi_userconsume ywhere y.总金额= (select avg(总金额) averagefrom vi_userconsume)and x.uno=y.会员号;下面为部分结果:(14) 查询管理员的最大年龄和最小年龄declare y int;select y=datename(year,getdate();select y-datename(year,max(admbirth) 最小

26、岁数, y-datename(year,min(admbirth) 最大岁数from adiminstor;结果:(15) 利用连接(join)查询玩实况足球和魔兽争霸-冰封王座的游戏玩家。select x.uname, x.gname 游戏, y.gname 游戏from (select uname, gname from gameinfo,gameuser,game_category where gname=实况足球 and uno=gi_uno and gi_gno=gno) xjoin (select uname, gname from gameinfo,gameuser,game_c

27、ategory where gname=魔兽争霸-冰封王座 and uno=gi_uno and gi_gno=gno) y on( y.uname=x.uname );结果:(16) 利用union查询所有的select x.uname,x.游戏名from (select uname, gname 游戏名from gameinfo,gameuser,game_category where uno=gi_uno and gi_gno=gno) x unionselect x.uname,x.游戏名from (select uname, gname 游戏名from gameinfo,gameus

28、er,game_category where uno=gi_uno and gi_gno=gno) x ;下面是部分结果:(17) 删除一些会员,则该会员想关的信息将被删除。delete from gameuser where uname=牛浩; delete from gameuser where uname=敖大庆; (18) 删除一些会员,则该会员想关的信息将被删除。delete from game_category where gname like 魔兽争霸-冰封王座 escape ;(19) 删除一管理员:delete from adiminstor where admno=0000

29、1;delete from adiminstor where admno=00004;更改管理员后:update game_category set gadmno =00007 where gadmno=00004;delete from adiminstor where admno=00004;create table adiminstor(admno char(5),admname varchar(20) not null,admpassw varchar(16) not null,admsex char(2)constraint adc1 check(admsex in (男,女),ad

30、mbirth datetime,constraint adc2 check(admbirth between 1960-1-1 0:0:0 and 1995-1-1 0:0:0),constraint admkey primary key (admno);/*游戏类表*/create table game_category(gno char(4),gname char(20) unique, gadmno char(5)constraint gc1 foreign key (gadmno)references adiminstor(admno) on delete cascade on upd

31、ate cascade,ghot intconstraint gc2 check(ghot between 0 and 10),gmaxmum int not nullconstraint gc3 check(gmaxmum100),constraint gamekey primary key (gno);alter table game_categorydrop constraint gc1;alter table game_categoryadd constraint gc1 foreign key (gadmno)references adiminstor(admno) on delet

32、e cascade on update cascade;create table gamevip(v_level int primary key,constraint gvc1 check(v_level between 0 and 5),v_price int not null,v_discount numeric(3,2),constraint gvc2 check(v_discount between 0 and 1),v_truckability intconstraint gvc3 check(v_truckability between 0 and 50);create table

33、 gameuser(uno char(8),uname varchar(20) not null,upassw varchar(18) not null,usex char(2)constraint guc1 check(usex in (男,女),usvip_level intconstraint guc2 foreign key(usvip_level) references gamevip(v_level),uterri char(20),ulastlogin datetime/*constraint guc4 check(ulastlogin 2005-1-1)*/,umarks in

34、t,ucoin int,constraint guserkey primary key(uno);create table gameteam(tleader char(8),constraint gtc1 foreign key(tleader) references gameuser(uno) on delete cascade,tmember char(8),constraint gtc2 foreign key(tmember) references gameuser(uno),tname char(20),tmarksint,/*建立一个trigger*/constraint gtke

35、y primary key(tleader,tmember);create table gamecard(cno char(2) primary key,gno char(4)constraint gcc1 foreign key(gno) references game_category(gno) on update cascade on delete cascade,cprice int,ctimeint,);create table cardinfo(cdeadline datetime primary key,gno char(4) ,constraint cic1 foreign k

36、ey(gno) references game_category(gno),cpass varchar(20);create table consumeinfo(con_no int primary key,uno char(8)constraint gsc1 foreign key(uno) references gameuser(uno)on update cascade on delete cascade,con_type char(4)constraint gsc2 check(con_type in (入账,消费),/*(in,out)*/coins int,con_date dat

37、etime);create table gameinfo(gi_uno char(8)constraint gic1 foreign key(gi_uno) references gameuser(uno)on update cascade on delete cascade,gi_gno char(4)constraint gic2 foreign key(gi_gno) references game_category(gno)on update cascade on delete cascade,/*gi_lever intconstraint gic3 check(gi_lever b

38、etween 0 and 100),*/gi_isonline char(2),gi_cardavaibletime int,constraint gic4 check(gi_isonline in (是,否),constraint gikey primary key(gi_uno,gi_gno);/*创建视图*/*查看某个游戏对应的人数及管理员*/create view vi_catotouser(管理员,游戏名,游戏人数)as select y.admname ,x.gname ,z.member from game_category x, adiminstor y,(select gi_

39、gno,count(*) member from gameinfo group by gi_gno) zwhere y.admno=x.gadmno and x.gno=z.gi_gno;/*当前在线会员信息视图*/create view vi_onlineuser(会员号, 会员姓名,vip等级,个人积分,可用金币)as selectdistinct(y.gi_uno) ,x.uname,x.usvip_level , x.umarks ,x.ucoin fromgameinfo y,gameuser xwhere y.gi_isonline=是 and x.uno=y.gi_uno;/*用

40、户在该平台的消费金额及相关记录*/create view vi_userconsume(会员号,会员姓名,vip等级,个人积分,总金额)as select x.uno ,x.uname ,x.usvip_level , x.umarks ,z. sumc from gameuser x, (select uno, sum(coins) sumc from consumeinfo group by uno) zwhere x.uno=z.uno;/*创建存储过程*/*购买点卡存储过程*/use gamemanagerif object_id(buycard,p) is not nulldrop

41、proc buycard;go create procedure buycard u_no char(8),c_no char(2),c_pass varchar(20)asdeclare coin int, price int,gameno char(4),discount numeric(3,2);begin select coin=ucoin from gameuser where uno=u_no;select price=cprice, gameno=gno from gamecard where cno=c_no;select discount=v_discount from ga

42、mevip where v_level in (select usvip_level from gameuser where uno=u_no);declare connum int;if(coinprice*discount)begininsert into cardinfo values(getdate(),gameno,c_pass);select connum=max(con_no)+1 from consumeinfo;insert into consumeinfo values(connum,u_no,消费,price*discount,getdate();print 购买点卡成功

43、,您的密码为:;print c_pass;endelsebeginprint 账户余额不足,无法购买点卡,请先充值;endendgoexec buycard 00000001,02,4879375834;/*vip申请的存储过程*/use gamemanagerif object_id(vip_apply,p) is not nulldrop proc vip_apply;go create procedure vip_apply u_no char(8),vlevel intasdeclare coin int, price1 int,price2 int,discount numeric(

44、3,2),connum int;begin select coin=ucoin from gameuser where uno=u_no;select price1=v_price from gamevip where v_level=vlevel;select price2=v_price,discount=v_discount from gamevip where v_level in (select usvip_level from gameuser where uno=u_no);print coin;print (price1-price2)*discount;if(coin(pri

45、ce1-price2)*discount)beginselect connum=max(con_no)+1 from consumeinfo;insert into consumeinfo values(connum,u_no,消费,(price1-price2)*discount,getdate();update gameuser set usvip_level=vlevel where uno=u_no;print 升级vip成功;endelsebeginprint 账户余额不足,无法升级vip,请先充值;endendgo/*帐户充值存储过程*/use gamemanagerif obje

46、ct_id(deposit,p) is not nulldrop proc deposit;go create proc deposit uno char(8),coin intasbegindeclare coins int,connum int;if exists(select * from consumeinfo)beginselect connum=max(con_no)+1 from consumeinfo;insert into consumeinfo values(connum,uno,入账,coin,getdate();endelseinsert into consumeinf

47、o values(100000,uno,入账,coin,getdate();endgo/*系统更改会员积分*/use gamemanagerif object_id(updatemarks,p) is not nulldrop proc updatemarks;go create proc updatemarks uno char(8),mark intasdeclare m int;select m=umarks from gameuser where uno=uno;if(mark!=m) begin update gameuser set umarks=mark where uno=uno;update gameteam set tmarks=tmarks+(mark-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论