课程设计报告格式副本.doc_第1页
课程设计报告格式副本.doc_第2页
课程设计报告格式副本.doc_第3页
课程设计报告格式副本.doc_第4页
课程设计报告格式副本.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

重庆科技学院Java平台与应用开发课程设计报告 院(系):_电气与信息工程_ 专业班级: 计科1301 学生姓名: 张永富 学 号: 2013441476 设计地点(单位)_ I301_ _ _ _ 设计题目:_数字魔板游戏程序设计、学籍管理程序设计_ 完成日期: 2015年 07月 10日 指导教师评语: _ _ 成绩(五级记分制):_ _ 指导教师(签字):_ _重庆科技学院课程设计任务书设计题目:数字魔板游戏程序设计 学生姓名 张永富 学号:2013441476课程名称Java平台与应用开发课程设计专业班级计科2013-1,2,3,4地 点计算机基础自主学习中心起止时间2015.6.29-2015.7.10设计内容及要求内容:设计一个GUI界面的数字魔板游戏程序,魔板由44或33个方格组成,其中一个格子是空的,对于44的魔板,其他格子里随机放置15个编号为1-15的方块;对于33的魔板,其他格子里随机放置8个编号为1-8的方块。用鼠标单击任何与空各自相邻的方块可以把该方块移入空格子,通过不断移动方块,可以将方块一行一行按数字顺序依次排列。要求:通过“级别”菜单来选择魔板是由44还是由33个方格组成。记录每次游戏完成所花费的时间,当发现方块一行一行按数字顺序依次排列时,将显示保存成绩对话框,用户可以选择是否将自己所花费的时间作为成绩记录下来,成绩可以保存在文件或数据库中。设计参数界面设计合理,简洁实用。使用进度要求2015.6.29 完成任务的讲解、并接受课程设计任务,选定课程设计的题目2015.6.30 了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法2015.7.1-2015.7.3 程序设计及编码,上机调试2015.7.6 对程序进行调试,设计测试用例进行测试2015.7.7 整理课程设计的过程、并进行总结,完善程序功能2015.7.8 编写课程设计报告初稿2015.7.9 完善课程设计报告、并准备答辨2015.7.10 提交课程设计报告和程序,进行答辨参考资料1叶核亚, Java程序设计实用教程,电子工业出版社,2013.11 2(美)Y. Daniel Liang(著) 李娜(译), Java语言程序设计.基础篇(原书第8版),机械工业出版社,2011.63(美)Y. Daniel Liang(著) 李娜(译), Java语言程序设计.进阶篇(原书第8版),机械工业出版社,2011.6其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任: 指导教师:王双明 游明英 陈承源 王成敏 2015年 6月 20日重庆科技学院课程设计任务书设计题目:学籍管理程序设计学生姓名张永富 学号:2013441476课程名称Java平台与应用开发课程设计专业班级计科2013-1,2,3,4地 点计算机基础自主学习中心起止时间2015.6.29-2015.7.10设计内容及要求内容:设计C/S模式的学籍管理程序,该程序实现以下功能:学生可以查看自己的基本信息,可以修改电话、Email地址、QQ号等信息;管理员可以注册新的学生、修改学生基本信息、查询学生基本信息、删除学生基本信息等。程序数据采用数据库保存。要求:学生基本信息至少包括:学号、姓名、班级、专业、性别、年级、出生日期、电话、Email地址、QQ号、状态(如休学、在读、毕业、退学等)。 保存管理员修改学生基本信息或删除学生基本信息的操作记录(含操作时间)。注册新的学生后,其学号不能被修改。实现查询时,可设计按多种条件进行查询,如可按学号查询、按姓名查询、按专业查询等。录入学生信息时,“专业”应该是从列表框或组合框中选择。设计参数学生至少20个,专业至少3个。进度要求2015.6.29 完成任务的讲解、并接受课程设计任务,选定课程设计的题目2015.6.30 了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法2015.7.1-2015.7.3 程序设计及编码,上机调试2015.7.6 对程序进行调试,设计测试用例进行测试2015.7.7 整理课程设计的过程、并进行总结,完善程序功能2015.7.8 编写课程设计报告初稿2015.7.9 完善课程设计报告、并准备答辨2015.7.10 提交课程设计报告和程序,进行答辨参考资料1叶核亚, Java程序设计实用教程,电子工业出版社,2013.11 2(美)Y. Daniel Liang(著) 李娜(译), Java语言程序设计.基础篇(原书第8版),机械工业出版社,2011.63(美)Y. Daniel Liang(著) 李娜(译), Java语言程序设计.进阶篇(原书第8版),机械工业出版社,2011.6其它说明1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。2.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。系主任: 指导教师:王双明 游明英 陈承源 王成敏 2015年 6月 20日摘要在java语言火热的惊天,我们身边的应用程序也越来越多。能用好java编程语言,写出一个功能完善的应用程序是每个程序员必要的基本功。这本实验中,做了魔板,和学籍管理两个题目。其中用到了java的swing组件。及其组件的属性设置,监听器的注册和编写。数据用了SQL server 2008储存。在魔板中用到了对按钮的操作,通过对按钮的Text属性的改变来达到交换的效果。还用到了系统函数来计时。判断游戏成功后弹出对话框显示和储存玩家信息。游戏等级是通过菜单选择4X4或3X3两种不同的难度。在学籍管理系统中,同样的用到了卡片布局来达到不同功能面板之间的切换。在进入系统之前会有个身份验证,通过不同账号会得到不同的操作面板。最终把数据保存到数据库中。为简化代码,本系统在数据库中编写了触发器来辅助本系统。有些地方在不能判断用户是否输入合法。界面的布局没有主题,但各个组件布局合理,功能完备。关键词:SQL swing 监听器 布局 面板目录摘要3任务书一:数字魔板游戏程序设计51 设计内容和要求51.1 内容51.2 要求52 需求分析62.1 界面需求62.2 逻辑需求62.3 数据库需求63 数据库设计73.1 逻辑结构设计74 主程序设计84.1 主界面设计84.2 游戏面板114.3 游戏结果对话框164.4 数据库连接19任务书二:学籍管理程序设计205 设计内容和要求205.1 内容205.2 要求206 需求分析216.1 界面需求216.2 逻辑需求216.3 数据库需求227 数据库设计237.1 逻辑结构设计237.2 触发器258 主程序设计288.1 登录界面288.2 管理员界面308.3 学生界面338.4 录入面板358.5 查找面板398.6 修改面板448.7 删除面板488.8 数据库连接48总结50结论51参考文献52致谢53任务书一:数字魔板游戏程序设计1 设计内容和要求1.1 内容设计一个GUI界面的数字魔板游戏程序,魔板由44或33个方格组成,其中一个格子是空的,对于44的魔板,其他格子里随机放置15个编号为1-15的方块;对于33的魔板,其他格子里随机放置8个编号为1-8的方块。用鼠标单击任何与空各自相邻的方块可以把该方块移入空格子,通过不断移动方块,可以将方块一行一行按数字顺序依次排列。1.2 要求通过“级别”菜单来选择魔板是由44还是由33个方格组成。记录每次游戏完成所花费的时间,当发现方块一行一行按数字顺序依次排列时,将显示保存成绩对话框,用户可以选择是否将自己所花费的时间作为成绩记录下来,成绩可以保存在文件或数据库中。2 需求分析2.1 界面需求界面中要能选择游戏的难度,选择后开始游戏。当成功完成游戏后弹出结果对话框,结果对话框中显示游戏等级及所用时间,要就玩家输入玩家姓名。然后储存到数据库中对应的游戏记录表中。游戏时能点击非空白方块,使得周围的空白方块与此交换,以此操作达到满足游戏胜利条件。2.2 逻辑需求初始化主界面,添加菜单栏,用卡片布局加载两个等级的游戏面板,用标签挡住。在点击菜单对应选项是,触发事件,设置对应等级游戏面板可见,并开始计时。游戏用对应个数的按钮来实现,当点击时修改对应的Text属性,来达到游戏效果。当游戏完成是,结束计时新建一个结果对话框,把游戏信息写到对话框中。对话框中要求填写玩家信息,点击OK保存到数据库。2.3 数据库需求 建立一个储存游戏结果信息的数据库,数据库中有两个表,分别储存两个等级游戏的记录。其中的信息包括玩家姓名、玩家游戏用时等。3 数据库设计3.1 逻辑结构设计图3.1 魔板游戏数据库物理模型建立两个表,game1存的是3X3等级游戏的游戏记录,game2存的是4X4等级的游戏记录.其对于数据属性为:姓名 varchar(10)、用时 varchar(10) notnull。4 主程序设计4.1 主界面设计图4.1 魔板主界面关键代码:public class Player extends JFrame implements ActionListener private static final long serialVersionUID = 7586443060505861249L;test game1=null; test1 game2=null; JMenuBar bar; JMenu fileMenu; JMenuItem game3x3,game4x4; Container con=null; CardLayout card=null; JLabel label=null; JPanel pCenter; public Player() this.setTitle(魔板); this.setResizable(false); game3x3=new JMenuItem(挑战3x3); game4x4 =new JMenuItem(挑战4x4); bar=new JMenuBar(); fileMenu=new JMenu(菜单选项); fileMenu.add(game3x3); fileMenu.add(game4x4); bar.add(fileMenu); setJMenuBar(bar); label=new JLabel(接受挑战,JLabel.CENTER); label.setFont(new Font(TimesRoman,Font.BOLD,24); label.setForeground(Color.red); game3x3.addActionListener(this); game4x4.addActionListener(this); card=new CardLayout(); con=getContentPane(); pCenter=new JPanel(); pCenter.setLayout(card); game1=new test(); game2=new test1(); pCenter.add(欢迎语界面,label); pCenter.add(game1,game1); pCenter.add(game2,game2); con.add(pCenter,BorderLayout.CENTER); con.validate(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(100,50,420,380); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=game3x3)/游戏开始 pCenter.remove(game1); pCenter.add(game1,game1); this.game1=new test(); card.show(pCenter,game1); else if(e.getSource()=game4x4) /游戏开始 pCenter.remove(game2); pCenter.add(game2,game2); this.game2=new test1(); card.show(pCenter,game2); public static void main(String args) new Player(); 4.2 游戏面板图4.2 魔板游戏3X3难度关键代码:public class test extends JPanel implements ActionListenerprivate static final long serialVersionUID = 1L;Color c1=Color.LIGHT_GRAY;/背景1Color c2=Color.WHITE;/背景2Font f=new Font(Font.MONOSPACED,Font.BOLD,40);/字体long starttime,endtime;int time;String values=1,2,3,4,5,6,7,8;JButton b1=new JButton();JButton b2=new JButton();JButton b3=new JButton();JButton b4=new JButton();JButton b5=new JButton();JButton b6=new JButton();JButton b7=new JButton();JButton b8=new JButton();JButton b9=new JButton();JButton V=b1,b2,b3,b4,b5,b6,b7,b8,b9;public test()Integer k = 1;ArrayList lst=test2.GetNum(9);this.setLayout(new GridLayout(3,3);/网格布局for(int i=0;iV.length;i+)for(int j=0;jVi.length;j+)Integer x=(int) lst.get(k-1);Vij.setText(valuesx-1);Vij.setBackground(c2);Vij.setFont(f);Vij.addActionListener(this);add(Vij);if(Vij.getText()=)Vij.setBackground(c1);k+;this.setSize(500, 515);/设置大小this.setLocation(450,200);/定位this.setVisible(true);starttime=System.currentTimeMillis();public int success()/判断是否成功Integer b=1;for(int i=0;iV.length;i+)for(int j=0;j=0;b-)System.out.println(b);elseif(Vij.getText()=|!Integer.valueOf(Vij.getText().equals(b)return 0;b+;return 1;public void actionPerformed(ActionEvent ev) /游戏动作int a=-1;int b=-1;for(int i=0;iV.length;i+)for(int j=0;j=0&Va-1b.getText()=)Va-1b.setText(Vab.getText();Va-1b.setBackground(c2);Vab.setText();Vab.setBackground(c1);if(a+1)=0&Vab-1.getText()=)Vab-1.setText(Vab.getText();Vab-1.setBackground(c2);Vab.setText();Vab.setBackground(c1);if(b+1)V.length&Vab+1.getText()=)Vab+1.setText(Vab.getText();Vab+1.setBackground(c2);Vab.setBackground(c1);Vab.setText();if(this.success()=1)int a1 = 0,b1 = 0;for(int i=0;iV.length;i+)a1=i;for(int j=0;jVi.length;j+)b1=j;Vij.removeActionListener(this);Va1b1.setText(OK); endtime=System.currentTimeMillis(); time=(int) (endtime-starttime)/1000); System.out.println(endtime); System.out.println(starttime); Gameinfo G=new Gameinfo(); G.time.setText(3x3用时 +time/60+:+time%60); G.setVisible(true);4.3 游戏结果对话框图4.3 魔板游戏完成关键代码:public class Gameinfo extends JDialog implements ActionListener private static final long serialVersionUID = 1329376948651052086L;JTextField 姓名; JButton OK;JLabel time; public Gameinfo() 姓名=new JTextField(10); OK=new JButton(OK); OK.addActionListener(this); time= new JLabel(用时 00:00,JLabel.CENTER); Box box0=Box.createHorizontalBox(); box0.add(time); Box box1=Box.createHorizontalBox(); box1.add(new JLabel(姓名,JLabel.CENTER); box1.add(姓名); Box boxH=Box.createVerticalBox(); boxH.add(box0); boxH.add(box1); boxH.add(Box.createVerticalGlue();/使垂直Box内的组件靠上对齐 JPanel pCenter=new JPanel(); pCenter.add(boxH); pCenter.add(OK); Container con=getContentPane(); con.add(pCenter,BorderLayout.CENTER); con.validate(); setVisible(false); setBounds(150,100,150,150); this.setResizable(false); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) setVisible(false); ); public void actionPerformed(ActionEvent e) if(e.getSource()=OK) String 姓名= this.姓名.getText();String 用时=this.time.getText().substring(7, this.time.getText().length();Data db=new Data();int m=this.time.getText().charAt(0)=3?1:2;String sql=insert into game+m+ values(+姓名+,+用时+);System.out.print(sql);try db.stmt =db.con.createStatement();db.stmt.execute(sql); db.con.close();db.stmt.close();this.dispose(); catch (SQLException e1) e1.printStackTrace(); 4.4 数据库连接图4.4 数据库连接关键代码:public class Data Connection con;String connectionUrl= jdbc:sqlserver:/127.0.0.1;database=game;user=sa;password=123456;Statement stmt;public Data() try /加载数据库驱动 Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); System.out.println(加载数据库驱动成功); catch (ClassNotFoundException e) e.printStackTrace(); try /通过URL连接获取数据库对象 con= DriverManager.getConnection(connectionUrl); System.out.println(获取数据库对象成功); Statement stmt = con.createStatement(); catch (SQLException e) e.printStackTrace(); 任务书二:学籍管理程序设计5 设计内容和要求5.1 内容设计C/S模式的学籍管理程序,该程序实现以下功能:学生可以查看自己的基本信息,可以修改电话、Email地址、QQ号等信息;管理员可以注册新的学生、修改学生基本信息、查询学生基本信息、删除学生基本信息等。程序数据采用数据库保存。5.2 要求学生基本信息至少包括:学号、姓名、班级、专业、性别、年级、出生日期、电话、Email地址、QQ号、状态(如休学、在读、毕业、退学等)。 保存管理员修改学生基本信息或删除学生基本信息的操作记录(含操作时间)。注册新的学生后,其学号不能被修改。实现查询时,可设计按多种条件进行查询,如可按学号查询、按姓名查询、按专业查询等。录入学生信息时,“专业”应该是从列表框或组合框中选择。6 需求分析6.1 界面需求首先要有登录界面,用户输入用户名、密码,验证成功后进入对应界面。学生登录后进入学生主界面,通过菜单的个人信息选项进入个人信息界面。学生在个人信息界面可点击查询个人信息查看自己基本信息。个人信息界面可直接修改学生个人信息,点击提交保存到数据库,但可修改项是固定。当管理员用管理员账号在登陆页面验证通过后,跳转到管理员界面。管理员界面有管理菜单,菜单中有修改、录入、查找、删除等菜单项,通过点击设置对应的面板可见。在录入面板中,有可以录入学生的基本信息的文本行或者下拉框,以及保存按钮。在修改面板中,管理员输入要修改学生的学号就可以查看对应学生的信息。然后可以直接更改,点击保存,保存修改到数据库。在删除面板,管理员通过输入要删除的学生学号即可浏览到这个学生的信息,通过点击删除,删除学生。在查找对话框中,管理员可以通过学号查询、姓名查询、专业查询这几个选项来查找,查找结果显示在文本区域中,方便管理员运用。6.2 逻辑需求在登陆界面上,要通过获取数据库信息和用户输入信息比对,得到角色信息,在由角色判断进入学生界面还是管理员界面。当验证通过是关闭登陆界面,弹出对应角色界面。当管理员进入管理员界面后,对菜单项注册监听器,编写事件使得管理员通过菜单中的对应选项来获得对应操作面板或对话框。在进入管理员界面的是后管理员界面加载菜单,用卡片布局加载相应功能面板,且设置在欢迎标签后面。菜单中的监听事件编写中要设置对应面板显示即可。在录入面板中添加学生对应各个信息文本框或下拉框,添加保存按钮和重置按钮。对保存按钮注册监听器,编写事件得到填写的学生信息打开数据库并保存进去。对重置按钮注册监听器,编写事件,重置学生信息文本行。在删除面板中同样添加学生对应各个信息文本行或者下拉框设置为不可编辑,出来学号文本行,添加确认删除、开始删除按钮和重置按钮。为开始删除按钮注册监听器,编写事件,获取管理员输入的学号,执行数据库查寻语句,找获得的结果给面板中对应文本行货下拉框。为确认删除注册监听器,编写事件,执行数据库删除语句,弹出删除成功的对话框。重置与上相同。修改界面与录入界面大同,但按钮是开始修改、确定修改、重置,和删除大同。在查找界面中添加三个文本行一个文本区域三个对应搜索的按钮,对每个按钮注册监听器,编写事件,当按下对应按钮是,获取对应文本框中的信息,执行数据库查询,返回结果给文本区域。6.3 数据库需求需要建立数据库,其中包括学生信息表、修改删除记录表、角色信息表。其中学生基本信息表用来储存学生的基本信息,比如学号、姓名、专业等。修改删除记录表用于记录对学生信息的修改删除操作。对角色信息表存储的登录账号、密码、角色,用于登录验证。7 数据库设计7.1 逻辑结构设计图7.1学籍管理数据库物理模型建立三个表,student_info存的是学生的基本信息,Record存的是修改删除记录,Login存的是登录信息。其各表的数据属性为:表7.1 Login表属性ID varchar(10) Password varchar(10) R int 表7.2 Record表属性O学号 nchar(10) N学号 nchar(10) O姓名 varchar(10) N姓名 varchar(10) O班级 varchar(10) N班级 varchar(10) O专业 varchar(10) N专业 varchar(10) O性别 varchar(5) N性别 varchar(5) O年级 varchar(10) N年级 varchar(10) O出生日期 varchar(10) N出生日期 varchar(10) O电话 varchar(15) N电话 varchar(15) OEmail地址 varchar(50) NEmaile地址 varchar(50) OQQ号 varchar(15) NQQ号 varchar(15) O状态 varchar(10) N状态 varchar(10) 修改时间 datetime 表7.3 student_info属性学号 char(10) 姓名 varchar(10) 班级 varchar(10) 专业 varchar(10) 性别 varchar(5) 年级 varchar(10) 出生日期 varchar(10) 电话 varchar(15) Email地址 varchar(50) QQ号 varchar(15) 状态 varchar(10) 7.2 触发器create trigger Update_Record /修改记录插入记录表on student_info for update as declare 学号 char(10),姓名 varchar(10),班级 varchar(10),专业 varchar(10),性别 varchar(5),年级 varchar(10),出生日期 varchar(10),电话 varchar(15),Email地址 varchar(50),QQ号 varchar(15),状态 varchar(10)declare 学号 char(10),姓名 varchar(10),班级 varchar(10),专业 varchar(10),性别 varchar(5),年级 varchar(10),出生日期 varchar(10),电话 varchar(15),Email地址 varchar(50),QQ号 varchar(15),状态 varchar(10)beginbeginselect 学号=学号,姓名=姓名,班级=班级,专业=专业,性别=性别,年级=年级,出生日期=出生日期,电话=电话,Email地址=Email地址,QQ号=QQ号,状态=状态 from deletedselect 学号=学号,姓名=姓名,班级=班级,专业=专业,性别=性别,年级=年级,出生日期=出生日期,电话=电话,Email地址=Email地址,QQ号=QQ号,状态=状态 from insertedendinsert into Record values(学号,学号,姓名,姓名,班级,班级,专业,专业,性别,性别,年级,年级,出生日期,出生日期,电话,电话,Email地址,Email地址,QQ号,QQ号,状态,状态,current_timestamp)endgocreate trigger SetLogin /登记录入学生账号到登录表on student_info for insert as declare 学号 char(10)beginbeginselect 学号=学号 from inserdendinsert into Login values(学号,123456,2)endgocreate trigger rSetLogin /删除记录插入记录表on student_info for update as declare 学号 char(10),学号 char(10)beginbeginselect 学号=学号 from deletedselect 学号=学号 from inserdendupdate Login set ID=学号 where Login.ID=学号endgocreate trigger Update_Record2 on student_info for delete as declare 学号 char(10),姓名 varchar(10),班级 varchar(10),专业 varchar(10),性别 varchar(5),年级 varchar(10),出生日期 varchar(10),电话 varchar(15),Email地址 varchar(50),QQ号 varchar(15),状态 varchar(10)declare 学号 char(10),姓名 varchar(10),班级 varchar(10),专业 varchar(10),性别 varchar(5),年级 varchar(10),出生日期 varchar(10),电话 varchar(15),Email地址 varchar(50),QQ号 varchar(15),状态 varchar(10)beginbeginselect 学号=学号,姓名=姓名,班级=班级,专业=专业,性别=性别,年级=年级,出生日期=出生日期,电话=电话,Email地址=Email地址,QQ号=QQ号,状态=状态 from deletedendinsert into Record values(学号,学号,姓名,姓名,班级,班级,专业,专业,性别,性别,年级,年级,出生日期,出生日期,电话,电话,Email地址,Email地址,QQ号,QQ号,状态,状态,current_timestamp)end8 主程序设计8.1 登录界面图8.1 登录界面关键代码:public void actionPerformed(ActionEvent e) if(e.getSource()=jb1)if(jTextField.getText().length()=10)data db=new data();String sql=;String ID = null;String psd=;String p=;try sql=select * from Login where ID =+jTextField.getText(

温馨提示

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

评论

0/150

提交评论