java毕业论文范文5篇[页3]写作指导

本文围绕Java编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对计算器程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。

java语言,是目前比较流行的编程语言。经过10多年的发展,java已经渗透到全球每个角落。在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。Java语言最令人瞩目的特点是具有跨平台性,使其不受平台不同的影响,并得到了广泛的应用。

设计内容:设计GUI界面的计算器。用户可以通过鼠标依次输入参加计算的数值,进行加、减、乘、除等混合运算。

设计要求:

1.系统界面的上面是数字输入对话框,用来显示所输入的数字和运行的结果。

2.系统界面下面的左侧是记忆+-*/。

3.系统界面下面的中部是数字输入按钮,用来输入数字。

4.系统界面下面的右侧是运算符号按钮,用来实现具体的运算。

关键字:java面向对象计算器网络编程

第一章概述

1.1设计目的

计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的功能。本论文采用java编程语言实现计算器功能。该计算器大大的降低了数字计算的难度并且提高了计算的准确度和精确度。使用简单,适合广大工作人员和中小学生使用。

1.2计算器系统概述

标准计算器的界面采用“图形界面程序设计(GUI)”。GUI为用户和应用程序之间的交互提供了直观、方便的交流方式。用户使用鼠标、键盘操作图形界面上的按钮、菜单等元素湘计算机系统发送命令,系统运行的结果以图形的方式显示给用户。

编写java计算器主要使用了Swing组件和AWT布局类。Swing组件主要包括按钮、标签、文本输入类、等组件,AWT主要运用了其中的布局管理器。

1.2.1Swing组件

Swing组件的按钮用JButton类表示,计算器的界面主要由JButton按钮组成,以响应用户的操作;

Swing中的标签用JLabel类表示,标签上可以显示图标和文本;

Swing的文本输入类包括文本框JTextField、文本区JTextArea和密码框JPasswordField。

本计算器中仅仅使用了文本框JTextField,用于文本数字的显示。

1.2.2AWT组件

布局管理器管理组件如何放置在容器中,AWT中最常用的四种布局类:FlowLayout、BorderLayout、GridLayout、CardLayout。本项目主要采用了GridLayout布局。

1.3功能模块设计

★标准计算器。

以下是标准计算器的各项功能:

(1)加法:

两个及两个以上数据进行加法操作,可以为小数形式。

(2)减法:

两个及两个以上数据进行减法操作,可以为负数形式。

(3)乘法:

两个及两个以上数据进行乘法操作。

(4)除法:

两个及两个以上数据进行除法操作。

(5)开平方:

对任意数开平方,可以为小数(不能为负数)。

(6)求倒数:

对任意数求倒数,0除外。

(7)求百分数:

对任意一个数进行百分号操作。

1.4系统功能图。

标准计算器

求倒数

开平方

求百分号

加法

减法

乘法

除法

图1.1计算器系统功能图

第二章项目设计说明

2.1标准计算器设计界面

图2.1计算器设计界面

2.2标准计算器设计主要代码

标准计算器主要由一个菜单栏、一个文本框、27个按钮组成。

2.2.1整体框架代码

JFramef=newJFrame("标准计算器");

f.setLocation(400,300);

ContainercontentPane=f.getContentPane;

2.2.2菜单栏代码

图2.2菜单栏

JMenuBarmBar=newJMenuBar;

mBar.setOpaque(true);

mEdit=newJMenu("编辑(E)");

mEdit.setMnemonic(KeyEvent.VK_E);

mCopy=newJMenuItem("复制(C)");

mEdit.add(mCopy);

mPaste=newJMenuItem("粘贴(P)");

mEdit.add(mPaste);

mView=newJMenu("查看(V)");

mView.setMnemonic(KeyEvent.VK_V);

mView.add(newJMenuItem("标准型"));

mView.add(newJMenuItem("科学型"));

mView.addSeparator;

mView.add(newJMenuItem("查看分组"));

mHelp=newJMenu("帮助(H)");

mHelp.setMnemonic(KeyEvent.VK_H);

mHelp.add(newJMenuItem("帮助主题"));

mHelp.addSeparator;

mHelp.add(newJMenuItem("关于计算器"));

mBar.add(mEdit);

mBar.add(mView);

mBar.add(mHelp);

f.setJMenuBar(mBar);

contentPane.setLayout(newBorderLayout);

2.2.3文本框代码

图2.3文本框

JPanelpTop=newJPanel;

tResult=newJTextField("0.",26);

tResult.setHorizontalAlignment(JTextField.RIGHT);

tResult.setEditable(false);

pTop.add(tResult);

contentPane.add(pTop,BorderLayout.NORTH);

2.2.4计算器各功能键代码

图2.4各功能键图

bOther=newJButton("MC");

bOther.addActionListener(this);

bOther.setForeground(Color.red);//字体颜色

bOther.setMargin(newInsets(3,2,3,2));//按钮边框和标签之间的空白

pLeft.add(bOther);

bOther=newJButton("MR");

bOther.setForeground(Color.red);

bOther.setMargin(newInsets(3,2,3,2));

bOther=newJButton("MS");

bOther=newJButton("M+");

pBottom.add(pLeft,BorderLayout.WEST);

JPanelpRight=newJPanel;

pRight.setLayout(newBorderLayout);

JPanelpUp=newJPanel;

pUp.setLayout(newGridLayout(1,3,3,0));

bOther=newJButton("BackSpace");

bOther.setMargin(newInsets(3,0,3,5));

pUp.add(bOther);

bOther=newJButton("CE");

bOther=newJButton("C");

2.2.5数字键及运算符号代码

图2.5数字键图

JPanelpDown=newJPanel;

pDown.setLayout(newGridLayout(4,5,3,2));

bNumber=newJButton("7");

bNumber.setForeground(Color.blue);

bNumber.addActionListener(this);

bNumber.setMargin(newInsets(3,3,3,3));

pDown.add(bNumber);

(注:其他数字键、运算符号键与“7”定义相同。)

第三章程序运行效果

3.1加法运算

本计算器可以实现多个运算数相加,例如:1+2+3+4

计算结果为10,所有数据均为double类型。

3.2减法运算

本计算器可以实现多个运算数相减(正负数),例如:6-5-3-1

计算结果为-3,数据类型为double类型。

3.3乘法运算

本计算器可以实现多个运算数相乘,例如2*3*4*5

运算结果为120,数据类型为double类型。

3.4除法运算

本计算器可以实现多个运算数相除(除数不为0)例如:15/3/5/2

运算结果为0.5,数据类型为double类型

当除数为0时,计算器自动报错,例如:15/0

3.5开方运算

当被开方数为非负数时,计算器自动开方,例如:25开方

运算结果为5.

3.6求倒数运算

当按下求倒数键时,计算器自动为运算数求其倒数。例如:5的倒数

运算结果为0.2.

第四章项目重难点分析

4.1重难点分析

Java计算器中整体框架的建立,按钮的设置,整体布局在操作过程中都是很顺畅的。计算器的关键步骤也是重点是实现计算器的计算方法。

实现两个数的加减乘除等运算是比较简单的,但是一个计算器需要做到的是实现多个运算数的运算。此时就用到了我在项目一开始定义的两个数据

每执行一次运算操作就把运算结果赋值给操作数1“op1”,并判断下一步操作是“=”或者“其他运算符”,决定下一步计算器的操作。

4.2程序中存在的问题

(1)菜单栏中虽然设置了编辑、查看、帮助等选项,但是项目中并没有实际的功能。

(2)程序中设置了内存的有关操作但是并没有达到其预期的功能。

(3)百分号的实际功能并没有实现。

(4)当被开方数是负数时,计算器并不能给出错误提示。

[参考文献]

《Java编程实用技术与案例》译作者:杨绍方

《软件工程Java语言实现SoftwareEngineeringwithJava》StephenR.Schach译者:袁兆山等

程序员天堂(英文网站大量的程序,库,包)

一、引言

二、课题内容

三、系统程序要求

1、设计一个职工信息管理系统

2、要求包括职工信息包括职工号、姓名、性别、年龄、学历、工资、

3、本系统功能描述:

职工信息录入功能(职工信息用文本保存);

职工信息浏览功能;

查询功能(至少一种查询方式):

按工资查询,按学历查询

4、职工信息删除、修改功能(这两个功能任选)。

四、程序设计思想

该课题要求是输入职工信息,对职工信息进行一系列的处理。既要输入工号又要能查找到与之对应的职工,还要对实现建立,显示,查找,删除,信息的保存。

因为考虑到信息管理信息的实用性,我额外添加了一个“读文件”功能,使利用voidread方法来实现的。这个“读文件模块"!是我用来扩充信息管理系统功能的!可以使系统在用户不用输入信息就能读取先前已存在的职工信息文件。

根据课题要求,我是这样设计的:首先对要实现的功能类型分为三大类——Public类、方法类、信息类;然后细分为六个方法——voidcaidan、voidcreat、voidoutput、voidsearch、voiddelete、voidread。这些类和方法构成了能够实现不同功能的模块,很好地体现了面向对象的Java语言的编程模块块的思想。

五、程序源代码及其解析

packagestaff;//包

importjava.io.*;

publicclassStaffInfomation{

publicstaticvoidmain(finalStringargs)throwsIOException

//throwsIOException用来抛出io的错误,文件读写错误,主要涉及到java的安全机制

{

staffInfostaffOne=newstaffInfo[100];//定义100个类数组

for(intj=0;j<100;j++)staffOne[j]=newstaffInfo;

//建立这100个类的对象

finalwaysstaffTwo=newways;//建立这个方法类的对象

staffTwo.caidan(staffOne);

staffTwo.creat(staffOne);

staffTwo.output(staffOne);

staffTwo.search(staffOne);

staffTwo.delete(staffOne);

//以上几个方法分别对应着:caidan菜单选择、增加(建立)职工信息、输出(预览)、查询、删除这些功能,以数组类为参数

}

classstaffInfo

//职工信息类换句话说就相当与c语言里面的结构体,存放职工的信息

publicStringname;

publicStringnum;

publicStringsex;

publicStringage;

publicStringrecord;

publicStringposition;

publicStringwanges;

publicStringtel;

publicStringaddr;

classways//方法类,主要实现职工信息的建立,显示,查找,删除,信息的保存与读取;这个类是整个程序的操作类。

publicStringrecordkey;

publicinti=0;//i用来存放职工的人数

publicStringfilename="Infomation.txt";

BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));

//此处是JAVA语言中输入数据的基本格式,功能有如C中的scanf函数

voidcaidan(staffInfostaffOne)throwsIOException

finalBufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));

//参看书34页,产生Buf对象;buf是BufferedReader类的变量,此处将读入字符串至buf

intchoice;

do{

System.out.println("☆★☆★☆★☆★电子信息系40706班★贺雪设计★☆★☆★☆\n\n");

System.out.println("┏━━━━━━━━━━━━━━━━━━┓");

System.out.println("┃★职工管理系统主菜单界面★┃");

System.out.println("┣━━━━━━━━━━━━━━━━━━┫");

System.out.println("┃★①.输入职工信息★┃");

System.out.println("┃★②.预览职工信息★┃");

System.out.println("┃★③.查找职工信息★┃");

System.out.println("┃★④.删除职工信息★┃");

System.out.println("┃★⑤.安全退出系统★┃");

System.out.println("┃★⑥.读取数据★┃");

System.out.println("┗━━━━━━━━━━━━━━━━━━┛");

System.out.print("请输入您的选择(0--6):");

choice=Integer.parseInt(buf.readLine);

switch(choice)

case1:creat(staffOne);break;

case2:output(staffOne);break;

case3:search(staffOne);break;

case4:delete(staffOne);break;

case5:save(staffOne);break;

case6:read(staffOne);break;

}while(choice!=0);

voidcreat(staffInfostaffOne)throwsIOException

//这个方法是实现“增加(建立)职工信息”;是建立信息模块

System.out.print("\n请输入职工信息(以0结束)\n");

System.out.print("姓名:\n\n");

staffOne[i].name=buf.readLine;

while(staffOne[i].name.compareTo("0")!=0)

//用数组staffOne[i]来暂存职工的序号,并用compareTo方法确定判定是否应该写入新信息

System.out.print("工号:\n\n");

staffOne[i].num=buf.readLine;

System.out.print("性别:\n\n");

staffOne[i].sex=buf.readLine;

System.out.print("年龄:\n\n");

staffOne[i].age=buf.readLine;

System.out.print("学历:\n\n");

staffOne[i].record=buf.readLine;

System.out.print("职位:\n\n");

staffOne[i].position=buf.readLine;

System.out.print("工资:\n\n");

staffOne[i].wanges=buf.readLine;

staffOne[i].tel=buf.readLine;

System.out.print("住址:\n\n");

staffOne[i].addr=buf.readLine;

i++;

System.out.println("请输入下一个职工信息:\n\n");

voidoutput(staffInfostaffOne)throwsIOException

//这里是实现“输出(预览)职工信息”output的模块

System.out.println("--------------------------------------");

System.out.println("*员工信息表*);

System.out.println("------------------------------------");

System.out.println("---------------------------------");

if(i!=0)

for(intj=0;j

System.out.print(staffOne[j].name+""+staffOne[j].num+""+staffOne[j].sex+"");

System.out.print(staffOne[j].age+""+staffOne[j].record+""+staffOne[j].position+"");

System.out.print(staffOne[j].wanges+""+staffOne[j].tel+""+staffOne[j].addr+"\n");

System.out.println("------------------------------");

elseSystem.out.println("没有员工信息!");

voidsearch(staffInfostaffOne)throwsIOException

//这里是实现职工信息的查询功能的模块

System.out.println("\n请输入您要查找的职工学历:");

recordkey=buf.readLine;

booleanflg=true;

System.out.println("-----------------------------------");

System.out.println("---------------------------------------");

if(recordkey.equals(staffOne[j].record))

//equals是字符串比较函数相等返回true

flg=false;

if(flg)

System.out.println("对不起,查无此人!");

voiddelete(staffInfostaffOne)throwsIOException

System.out.println("\n请输入您要删除的职工姓名:");

//System.out.println("staffOne[j].name="+staffOne[j].name);

//System.out.println("recordkey="+recordkey);

//System.out.println("recordkey.equals(staffOne[j].name)="+recordkey.equals(staffOne[j].name));

if(recordkey.equals(staffOne[j].name))

for(intk=j;k<=i-1;k++)

//利用顺序表的删除算法,删除值之后,再把后面的值往前移位,从而实现删除

staffOne[k].name=staffOne[k+1].name;

staffOne[k].num=staffOne[k+1].num;

staffOne[k].sex=staffOne[k+1].sex;

staffOne[k].age=staffOne[k+1].age;

staffOne[k].record=staffOne[k+1].record;

staffOne[k].position=staffOne[k+1].position;

staffOne[k].wanges=staffOne[k+1].wanges;

staffOne[k].tel=staffOne[k+1].tel;

staffOne[k].addr=staffOne[k+1].addr;

i--;//职工人数要减一

System.out.println("对不起,查无此人!。");

elseSystem.out.println("已经删除!。");

voidsave(staffInfostaffOne)throwsIOException

//数据的保存模块,把输入的职工信息保存到相应的文件里。

intk;

finalFileWriterfw=newFileWriter(filename);

//调用构造函数FileWriter创建FileWriter类的对象。

//文件的读取(书216页13-2-2)

fw.write(i+"\n");//把职工的人数保存到文件中以便下次读取是使用

for(k=0;k

fw.write(staffOne[k].name+"\n");

fw.write(staffOne[k].num+"\n");

fw.write(staffOne[k].sex+"\n");

fw.write(staffOne[k].age+"\n");

fw.write(staffOne[k].record+"\n");

fw.write(staffOne[k].position+"\n");

fw.write(staffOne[k].wanges+"\n");

fw.write(staffOne[k].tel+"\n");

fw.write(staffOne[k].addr+"\n");

fw.close;

System.out.println("\n系统已经安全退出!感谢您的使用!");

System.exit(0);

voidread(staffInfostaffOne)throwsIOException

//这是程序的“读文件模块"!是我自己添加进去扩充系统功能的!可以使系统不用输入信息就能读取先前已存在的职工信息文件。

finalFileReaderfr=newFileReader(filename);

finalBufferedReaderbfr=newBufferedReader(fr);

//关于文件的读取不会的看看书216页13-2-2

if((recordkey=bfr.readLine)!=null)

i=Integer.parseInt(recordkey);

staffOne[j].name=bfr.readLine;这是程序的“读文件模块",

是我自己添加进去扩充系统功

staffOne[j].num=bfr.readLine;能的!可以使系统不用输入信息

就能读取先前已存在的职工信息

staffOne[j].sex=bfr.readLine;文件,从中读取数据。利用了书

staffOne[j].age=bfr.readLine;

staffOne[j].record=bfr.readLine;

staffOne[j].position=bfr.readLine;

staffOne[j].wanges=bfr.readLine;

staffOne[j].tel=bfr.readLine;

staffOne[j].addr=bfr.readLine;

fr.close;

System.out.println("\n数据已经成功读取!");

我自己感觉此次课程设计做得挺成功的,通过这一次,我学到了不少实际编程的知识。

在这次设计开始的第一天开始,我就开始着手修改一个用“职工信息管理系统”的JAVA程序。这一过程太不顺利,调试的时候都没有成功。后来我请教一个学长,在他的指导下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行成功了。

参考资料

1、《程序天下》

2、洪维恩、何嘉《java2面向对象程序设计》

3、Java天下-java、jsp编程论坛[黑咖啡屋]

4、黄旭等《java课程设计指导》

5、C编程设计(第三版)谭浩强(著)

寻人启事是发布寻人启事寻人,是失踪者及其亲友间相互寻找的一种基本手段,以各种形式的寻人启事对失踪者展开寻找,如:各地粘贴寻人启事宣传单、报纸寻人,广播电台寻人、电视台寻人、以及寻人启事网络寻人找人,都是大部分失踪者及家属...

辞职信,也叫辞职书或辞呈,是辞职者向工作单位辞去职务时写的书信。辞职信是辞职者在辞去职务时的一个必要程序。辞职申请通常由标题、称谓、正文、结语、署名与日期五部分构成。下面是公司员工辞职申请范文,欢迎参阅。...

贸易公司的主要就是商品的买与卖,贸易公司最重要的是信息和业务渠道,要有货源和销售目标,并产生一定的利润。下面是外贸公司介绍范文,欢迎参阅。...

市人民政府关于在铁路压煤改线站建立交桥的函[]委员会:铁路压煤改线工业站,位于我市县镇。由于该站的建设,原有的站西侧的平交道口按设计要求将要封闭。这样就阻断了沟通南北三乡一镇的交通要道,给乡镇企业和商品经济的发展造成了困难。...

公司全体员工:为了加强全体员工的团队意识、增强交流、促进理解,提高全体员工的凝聚力,同时也为了舒缓员工的脑力,体力、精神压力,丰富节假日的生活,经公司领导研究决定进行一次全体员工外出旅游活动。...

THE END
1.中国科技论文在线检查完您的请求后,将很快会重定向至您所需的内容。 请等待最多5秒钟。 防护由Paper-GoEdge提供 您的IP:112.85.66.168已被记录 Request ID:172540091525911000002http://www.paper.edu.cn/scholar/showpdf/NUD2UNxINTT0YxeQh
2.完美版java毕业设计论文(51页)完美版java毕业设计论文.pdf,摘要 随着家长对孩子教育的重视程度越来越高,家教也越来越受家长的青睐,因为它可 以有针对性地单独授课,能显著提高学生学习的效果。同时互联网的兴起,对教育的形 式也产生了重大影响,为此基于 B/S 的家教平台应运而生。 论文基于 B/S 架构https://max.book118.com/html/2020/1127/5030344234003032.shtm
3.六月雪计算机毕业设计定制/Java项目源码下载网站毕设网 - 专注于计算机专业毕业设计成品,源码下载,提供大学生学习的平台,站内包含:论文下载,代做, 定制,辅导python,java,springboot,微信小程序,指导,选题,答辩,开题报告,http://www.bysj211.cn/
4.Java毕业设计源码分享网最新基于Java web(jsp+servlet+mysql)实现图书商城管理系统源码_C50435 最新基于SSM的大学生资助管理系统源码【java毕业设计】_C50456 最新基于SSM+MYSQL实现紧急救护智能服务系统源码_C50457 最新基于Springboot+mysql实现微信小程序在线点餐系统源码+论文_C50458 ...http://www.cnitstudy.cn/
1.java课程设计毕业论文9篇(全文)java课程设计毕业论文 第1篇 许多计算机专业的同学每学期都要做个毕业设计,下面是小编整理的java课程设计毕业论文,希望对你有所帮助! 在浏览器中输入图片网址,里面有很多的Java项目,有SSH的,还有适合初学java的新手教程 也有安卓的教程和一些案例,也有Html5的教程 下载方法: 找到要下载的项目,点击图片中红线标出的区...https://www.99xueshu.com/w/filec6hwpe5o.html
2.JAVA毕业设计论文题目大全"这篇文档提供了一系列JAVA毕业设计论文题目,包括JAVA类和JSP类的论文题目,涵盖了各种实际应用系统的设计与实现,如学籍管理、远程通信、游戏开发、网络协议分析、办公自动化、电子商务、教务管理等多个领域。" 在JAVA毕业设计论文中,你可以选择以下主题进行研究: 1. 学籍管理系统:设计一个基于JAVA的学籍管理系统,实现...https://wenku.csdn.net/doc/3ysrigo3z3
3.最新java毕业设计论文参考文献在学习和工作的日常里,大家最不陌生的就是论文了吧,论文是讨论某种问题或研究某种问题的文章。还是对论文一筹莫展吗?下面是小编收集整理的最新java毕业设计论文参考文献,仅供参考,大家一起来看看吧。 最新java毕业设计论文参考文献1 [1]王颖.云计算编程模型中Java应用研究[J].福建质量管理,2016,03:186. ...https://www.yjbys.com/biyelunwen/cankaowenxian/730944.html
4.计算机论文题目基于java的毕业设计题目基于java的毕业设计题目1-10题 1、基于Java的人力资源简历管理系统设计 2、基于Java多线程技术的项目进度并行仿真研究 3、基于JAVA平台的计算思维能力培养的重要性 4、基于Java的档案管理云平台关键技术分析 5、基于Java嵌入式设备的节能控制器设计 6、基于Java网络编程中组播技术的应用研究 ...https://www.jianshu.com/p/cc4e54274fa7
5.(java毕业设计源码)基于ssm毕业设计(论文)管理系统[java毕业设计项目源码,java毕设下载]毕业设计(论文)管理系统是基于java编程语言,mysql数据库,ssm框架搭建的BS架构系统,本系统分为学生和教师两个角色,其中学生查看通知公告,登录,登录后学生主页面,选择课题,选择课题后状态为等待老师去人状态,填写开题报告,提交中期检查,提交免答辩申请,上传论文等功能;教师角色登录,教...http://bisheyun.com/product/94
6.java程序设计摘要java语言程序设计论文香奈儿的技术博客毕业设计(论文)题目:基于Java的飞机大战游戏的设计与实现毕业设计(论文)要求及原始数据(资料):1.综述基于Java的飞机大战游戏的现状;2.深入了解Java的设计与实现的相关技术;3.熟练掌握Java开发工具的应用分析,训练编写游戏程序的能力;4.设计并实现游戏中针对某一场景的研发;5.深入分析游戏设计中的关键技术与Java编写语...https://blog.51cto.com/u_12228/9494913
7.软件开发的毕业论文(精选8篇)篇2:软件开发的毕业论文 毕业实习报告 系别: 年级班级: 学号: 姓名: 指导教师: 实习类型: 实习单位: 实习时段: 集中实习 关于在XX公司从事 软件开发的实习报告 一、实习目的进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习SQL的基础知识及正确的运用方法,和有用的相关技术,提高...https://www.360wenmi.com/f/filem2h07yu4.html
8.计算机毕业设计报告(精选11篇)随着社会不断地进步,报告与我们的生活紧密相连,要注意报告在写作时具有一定的格式。我敢肯定,大部分人都对写报告很是头疼的,以下是小编为大家整理的计算机毕业设计报告(精选11篇),希望对大家有所帮助。 计算机毕业设计报告 1 论文正文: 一、选题的依据、意义和理论或实际应用价值 ...https://www.unjs.com/fanwenku/68300.html