Java终极大作业报告
- 格式:doc
- 大小:1.48 MB
- 文档页数:55
java期末作业总结在这个Java课程的期末作业中,我经历了许多的挑战和成长。
这次作业包含了许多知识点,涉及到了面向对象编程、异常处理、文件读写等多个方面。
通过这次作业,我不仅巩固了之前学到的知识,还学到了很多新的知识点。
在这次作业中,我主要做了一个电影票售卖系统。
这个系统的主要功能包括了购票、退票、电影信息展示等。
在实现这个系统的过程中,我采用了面向对象的思想,将系统中的各个功能模块抽象为一个个类,然后通过类之间的交互来完成各种操作。
这样的设计使得代码结构清晰,易于维护和扩展。
在这次作业中,我最大的收获就是对异常处理的理解和运用。
在实现购票和退票的功能时,需要处理一些异常情况,比如座位已被占用、余票不足等。
为了应对这些异常情况,我利用Java提供的异常机制,编写了相应的异常类,并在相关的方法中进行了异常抛出和捕获处理。
这样可以使得程序在遇到异常时能够进行相应的处理,保证了程序的稳定性。
除了异常处理,我还学到了很多关于文件读写的知识。
在系统中,需要将电影信息和售票记录保存在文件中,并在需要时进行读取。
为了实现这个功能,我学习了Java中的文件操作API,并编写了相应的文件读写方法。
通过这次实践,我不仅掌握了文件读写的基本操作,还学会了如何将文件读取的数据转换为程序中的对象,并进行相应的处理。
在整个实现的过程中,我也遇到了许多的困难和问题。
比如,在实现购票功能时,我遇到了如何判断座位是否已被占用的问题。
为了解决这个问题,我经过一番思考,最终决定将座位信息保存在一个二维数组中,然后通过坐标来判断座位是否被占用。
这种解决方式既简单又高效,使得程序能够正确地处理座位冲突。
在完成这次作业的过程中,我也发现了自己的不足之处。
比如,在设计系统架构和类之间的关系时,我有时候容易陷入纠结,难以做出决策。
这使得我在一些设计上花费了较多的时间,导致了进度的延迟。
为了解决这个问题,我意识到需要多加练习,不断学习和实践。
班级:数学与应用数学01班姓名:姚其禹学号:41008040110学生管理系统用java语言设计一个基于GUI界面的单机版学生管理系统,实现学生基本信息的录入,查询,修改,删除,同时可以对学生所在学院,专业,班级信息进行添加,查询,修改,删除。
本系统是通过java+Mysql实现的。
●设计内容:用java语言设计一个基于GUI界面的单机版学生管理系统,实现学生基本信息的录入,查询,修改,删除,同时可以对学生所在学院,专业,班级信息进行添加,查询,修改,删除。
●设计要求:1.界面要求:必须先要有一个登录用的用户信息表,包含“用户名和密码”两项信息。
2.功能要求:系统里必须包括学生信息录入、修改、删除、查询等功能,还有学院信息录入、修改、删除、查询,专业信息录入,修改、删除、查询,班级信息录入、修改、删除、查询。
输入时学院代码用下拉框选择,必须是学院信息表里存在的学院名称,保存到数据库中时存学院的代码。
输入专业代码和学院代码用下拉框选择,必须是专业信息和学院信息表里存在的专业名称和学院名称,保存到数据库中时分别存专业和学院的代码。
输入班级、专业和学院用下拉框选择,必须是班级专业信息和学院信息表里存在的专业名称和学院名称,保存到数据库中时分别存班级、专业和学院代码。
●设计目标:使用JDBC驱动程序将前台浏览器与后台数据库(本系统用的是Mysql)结合位为一体。
利用Mysql语句接口来调用数据库,以存取或更新数据库中的数据,实现学生信息录入、修改、删除、查询,还有学院信息录入、修改、删除、查询,专业信息录入,修改、删除、查询,班级信息录入、修改、删除、查询功能。
类,类的方法及类的作用表类的名称类的方法类的作用LoginFrame.java public LoginFrame() 创建一个登入界面,用public void acitonperformed() 户需输入正确的用户名和密码public static void main() Frm_Main.javapublic Frm_Main()创建学生信息表,可以注册,查询,删除,修改学生的信息 public void conDB()public void acitonperformed() public static void main() FacultyFrame.javapublic FacultyFrame ()创建学生学院信息表,可以添加,查询,删除,修改学院信息 public void conDB()public void acitonperformed() SpecialtyFrame.jav apublic SpecialtyFrame ()创建学生专业信息表,可以添加,查询,删除,修改学院信息 public void conDB()public void acitonperformed() ClassFrame.java public ClassFrame()创建学生班级信息表,可以添加,查询,删除,修改班级信息public void conDB()public void acitonperformed() jtree.javapublic void valueChanged() 对该系统的相关说明jtree()数据库设计 1. 创建登入表: CREATE TABLE `admin` (`username` varchar(20) NOT NULL,`pwd` varchar(20) CHARACTER SET latin1 DEFAULT NULL, PRIMARY KEY (`username`) )表2-2 Admin 表2. 创建学生信息表:CREATE TABLE `student` ( `xueid` char(20) NOT NULL,`name` char(20) DEFAULT NULL,`sex` char(4) DEFAULT NULL,`nation` char(4) DEFAULT NULL,`ID` char(2) DEFAULT NULL,`C_ID` char(8) DEFAULT NULL,`S_ID` char(10) DEFAULT NULL,`age` char(8) DEFAULT NULL,`mail` char(20) DEFAULT NULL,`telp` char(11) DEFAULT NULL,PRIMARY KEY (`xueid`))student表3.创建学院信息表CREATE TABLE `faculty` (`ID` char(2) NOT NULL,`NAME` char(30) DEFAULT NULL,PRIMARY KEY (`ID`)表2-4 faculty表4.创建专业信息表CREATE TABLE `specialty` (`S_ID` char(10) NOT NULL,`S_NAME` char(30) DEFAULT NULL,`ID` char(2) DEFAULT NULL,PRIMARY KEY (`S_ID`))specialty表5.创建班级信息表CREATE TABLE `grade` (`C_ID` char(8) NOT NULL,`C_NAME` char(30) DEFAULT NULL, `C_DATE` char(10) DEFAULT NULL, `S_ID` char(10) DEFAULT NULL, `ID` char(2) DEFAULT NULL,PRIMARY KEY (`C_ID`))grade表6.数据库中各表之间的关系各表之间关系图源代码分析1.系统主要的类:登入窗口的类:public class LoginFrame extends JFrame主类:public class Frm_Main implements ActionListener班级信息类:public class ClassFrame implements ActionListener学员信息类:public class FacultyFrame implements ActionListener帮助文档类:public class jtree implements TreeSelectionListener专业信息类:public class SpecialtyFrame implements ActionListener2. 主要方法分析:设置文本框的位置和文本框的大小:S_NAMEL.setLocation(20,110);S_NAMEL.setSize(150,20);c.add(S_NAMEL);S_NAMET.setLocation(90,110);S_NAMET.setSize(200,20);c.add(S_NAMET);处理异常类及方法try{Class.forName("com.mysql.jdbc.Driver");conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=r oot&password=111111");Statement stmt = (Statement)conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CON CUR_UPDATABLE);ResultSet rss1 = null;String sql="select * from faculty ";rs = stmt.executeQuery(sql);while (rs.next()){f.addItem(rs.getString("NAME"));}rs.close();}catch(ClassNotFoundException e){System.err.println(e);}catch(SQLException e){System.err.println(e);}处理监听事件的方法:public void actionPerformed(ActionEvent e)主函数的运行:public static void main(String[] args)连接数据库相关语句:Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(URL, user, pswd);stmt = conn.createStatement();组件的声明:public JMenuBar menuBar;public JMenu mainMenu1;public JMenu mainMenu2;public JMenu mainMenu3;public JFrame frame;public Container c;public JMenuBar menuBar;JButton toolBarButton[] = new JButton[8];public JToolBar toolBar;Object ID=new String();String S_ID = new String();String S_NAME = new String();Connection con;ResultSet rs;Statement st;public JLabel S_IDL = new JLabel("专业代码:");public JLabel IDL = new JLabel("学院名称:");public JLabel S_NAMEL = new JLabel("专业名称:");public JTextField S_IDT = new JTextField();private JComboBox f = new JComboBox();public JTextField S_NAMET = new JTextField();该程序是一个图形界面的学生信息管理系统,使用人员能快捷简单地进行操作。
华北科技学院计算机系课程综合作业实验报告课程名称JAVA程序设计实验学期2010 至2011 学年第 1 学期学生所在系部计算机年级08级专业班级信管B082学生姓名学号************ 任课教师实验成绩计算机系制《JAVA程序设计》课程综合作业实验报告学生的学号,可以更新这条记录中的数据;“查询记录”,输入要查询学生学号可以查询这个学生的所有信息;选择分数信息中的“各科最高低分”菜单,可以查询所有学科中的最高分和最低分;“总分平均分”显示所有学生的总分和平均分。
3.主要代码本程序使用Java中基于SWING的图形设计,用到java中的java.awt.*内的包,控件的布局用到java.swing.border.*包,事件处理用到java.awt.event.*,连接数据库用到java.sql 登录界面主要代图1public class denglu{public static void main(String args[]){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundException e){ //11System.out.println(""+e);}new WindowBox("登录窗口"); //调用方法}}class WindowBox extends JDialog implements ActionListener{//声明Box baseBox,boxV1,boxV2,boxV3;JButton button1,button2;}}}如果出现用户名密码错误则会出现提示信息对话框图2通过调用Datawin类中的内容可以进入到主界面声明菜单中的显示、添加、删除、修改、查询、最高低分以及总分平均分菜单项和类,能过给菜单添加事件监听事件图3public void actionPerformed(ActionEvent e){if(e.getSource()==itemshow)show.setVisible(true);else if(e.getSource()==itemadd)add.setVisible(true);else if(e.getSource()==itemupdata)updata.setVisible(true);a[k][0]=rs.getString(1);a[k][1]=rs.getString(2);a[k][2]=rs.getString(3);a[k][3]=rs.getString(4);a[k][4]=rs.getString(5);a[k][5]=rs.getString(6);k++;}con.close();}catch(SQLException ee){System.out.println(ee);} //处理异常table=new JTable(a,name);getContentPane().removeAll(); //采用BorderLayout布局add(showRecord,BorderLayout.NORTH);add(new JScrollPane(table),BorderLayout.CENTER);validate();}图4构造增加类,声明组件,定义一个表名Object name[]={"学号","姓名","年龄","性别","系别","班级"};和定义一个表单Object a[][]=new Object[1][6];然后给按钮组件增加以下监听事件,通过对表单中输入数据进而增加到数据库中public void actionPerformed(ActionEvent e)//处理事件图5图6构造删除类,声明组件,在文本框中输入信息,进而可以删除数据库中相应的记录给文本框和按钮增加以下事件public void actionPerformed(ActionEvent e){if(e.getSource()==inputNumber){try{num=inputNumber.getText().trim();con=DriverManager.getConnection("jdbc:odbc:hello","","");sql=con.createStatement();rs=sql.executeQuery("SELECT * FROM 学生信息 WHERExueid='"+num+"'");boolean boo=rs.next();if(boo==false){JOptionPane.showMessageDialog(this,"学号不存在",table.repaint();//重打印表con.close();}catch(SQLException ee){JOptionPane.showMessageDialog(this,"更新失败"+ee,"失败",JOptionPane.ERROR_MESSAGE);}}//if图7构造查询方法查询这个窗体整体彩盒式布局,首先声明类和方法设计窗体的外观,给相应的组件添加事件利用SQL语句查询数据库中的信息 rs=sql.executeQuery("SELECT * FROM 学生信息WHERE xueid='"+num+"'");如果输入学号数据库中不存在提示信息“学号不存在”,否则利用table.repaint();方法将数据库中的信息输入到窗体中的table中public void actionPerformed(ActionEvent e)//处理事件{try//连接数据原 hello{num=inputNumber.getText().trim();con=DriverManager.getConnection("jdbc:odbc:hello","","");图8构造最高最低分类首先定义两个静态变量m,n;将数据库中的信息利用查询的方法显示在数字 int b[][]中,con=DriverManager.getConnection("jdbc:odbc:hello","","");sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//只读形式rs=sql.executeQuery("SELECT * FROM 分数信息");st();利用如下方法求得语文成绩的最高分和最低分for(k=0;k<lastNumber;k++){if(m<b[k][0]){m=b[k][0];}if(n>b[k][0]){n=b[k][0];}}a[0][1]=m;a[1][1]=n;同理可以求得其它几科成绩的最高分和最低分然后,将object a[][]中的信息显示有窗体中图9构造总分平均分方法首先将数据库中的信息显示在利用SQL查询方法显示有两个数据中object a[][]和int b[][]中利用如下方法将求得总分和平均分try{con=DriverManager.getConnection("jdbc:odbc:hello","",""); sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);rs=sql.executeQuery("SELECT * FROM 分数信息");st();int lastNumber=rs.getRow();b=new int[lastNumber][4];a=new Object[lastNumber][8];int k=0;rs.beforeFirst();while(rs.next()){a[k][0]=rs.getString(1);a[k][1]=rs.getString(2);a[k][2]=rs.getByte(3);b[k][0]=rs.getByte(3);a[k][3]=rs.getByte(4);b[k][1]=rs.getByte(4);a[k][4]=rs.getByte(5);b[k][2]=rs.getByte(5);a[k][5]=rs.getByte(6);b[k][3]=rs.getByte(6);a[k][6]=b[k][0]+b[k][1]+b[k][2]+b[k][3];a[k][7]=(b[k][0]+b[k][1]+b[k][2]+b[k][3])/4;k++;}con.close();}catch(SQLException ee){System.out.println(ee);}图10四、实验结果及分析程序运行中的报告分析1、在登陆时如果输入不正确的用户和密码会提示用户名或密码错误,因为通过getText()方法无法获得正确的字符串从而提示错误2、在进行数据库相应操作时,如果无法正确连接数据库则会提示不存在所需的数据资源,可能原因是没有正确连接到数据源,即可能数据源名称不正确,或者在数据库中不存在相应的表,或者可能SQL语法错误在进行相应的查询的删除操作时,如果不存在输入的学号会提示用户,“学号学号不存在”,因为不在数据库不无法在相应的字段下找到相匹配的字符串。
Java程序设计大作业报告1. 引言本报告是关于Java程序设计大作业的报告,旨在总结和描述本次大作业的设计和实现过程。
本次大作业的主题是设计一个学生成绩管理系统。
2. 需求分析在开始设计和实现学生成绩管理系统之前,首先需要明确系统的需求。
本次大作业的学生成绩管理系统需要包含以下功能: - 学生信息管理:包括学生的基本信息和成绩信息。
- 成绩录入和查询:教师能够录入学生的成绩,并能够查询和修改学生的成绩信息。
- 成绩统计和分析:系统能够对学生的成绩进行统计和分析,例如计算平均分、最高分、最低分等。
3. 系统设计根据需求分析的结果,我们可以开始进行系统设计。
以下是学生成绩管理系统的设计步骤:3.1 类设计首先,我们需要定义学生类(Student)和成绩类(Grade)来管理学生和成绩信息。
学生类包含学生的基本信息,如学号、姓名、性别等,成绩类包含学生的各科成绩信息。
此外,我们还需要设计一个教师类(Teacher),用于录入和查询学生的成绩信息。
3.2 数据结构设计在设计学生成绩管理系统时,我们需要选择适合的数据结构来存储和管理学生和成绩信息。
例如,可以使用数组、链表或哈希表等数据结构来存储学生和成绩信息,根据具体需求进行选择。
3.3 用户界面设计学生成绩管理系统需要有一个用户友好的界面,方便教师进行操作。
可以使用图形界面(GUI)或命令行界面(CLI)来实现用户界面。
4. 系统实现在完成系统设计后,我们可以开始实现学生成绩管理系统。
4.1 学生类实现首先,我们需要实现学生类。
学生类应该包含学生的基本信息和成绩信息的操作方法,例如获取学生的基本信息、添加和修改成绩等。
4.2 成绩类实现接下来,我们需要实现成绩类。
成绩类应该包含学生的各科成绩信息,并提供计算平均分、最高分、最低分等操作方法。
4.3 教师类实现然后,我们需要实现教师类。
教师类应该包含录入和查询学生成绩的操作方法,例如录入学生成绩、查询学生成绩等。
java实训报告总结与心得(优秀5篇) java实训报告总结与心得篇1短短的一个月很快就过去了,在这短短的一个月里,我学到了很多,了解了很多。
在这一个月里我学到了有关JAVA等方面的知识,了解了关于软件开发的流程。
了解了自己的不足,知道了自己努力的方向。
回顾这次的实训,这次或许是最后的实训机会。
我是一名大二的学生,明年或许就要出去实习了,所以我很珍惜这次的实训机会,因为它能够让我了解自己的不足以及以后自己努力的方向,同时也能让我了解软件开发的流程,增加一点软件开发经验和社会经验。
让我在以后的实习中会更好的融入到其中,增加自己的就业机会,因为纵观现在的就业形势很不让人乐观,由于之前的经济危机,就业机会越来越少,就业也越来越难,这就给了我们很大的压力,所以要是没有真本事,就业岗位就无从谈起,因此,在以后的学习中,我会更加好好努力。
通过这次的实训,我学到了很多:首先,对JAVA识比以前有了更深的了解。
在这之前由于种.种原因我JAVA 学的很不好,编程我几乎写不出来。
但经过这次的实训,我对JAVA的理解,虽然还有很多都不懂,但我会在今后的实训和学习中加以学习了解,力求弄懂,增强自己对JAVA的理解。
其次,在这次的实训中我的动手操作能力有了一点的提高,刚开始的时候JDK的配置,数据库的安装都出现了一定的问题,JAVA 可实话开发工具的不熟悉,所以开始的时候进程很慢,时间都用在了JDK的配置,数据库的安装以及熟悉JAVA可视化开发工具上,但付出有了回报,成功的配置了JDK,安装了数据库,熟悉了JAVA可视化开发工具,总的说来,自己还是有一定的收获的。
因为自己的动手操纵能力得到了提高。
最后是团队协作。
在整个项目完成过程中团队协作有着不可替代的作用。
从在刚拿到项目时对项目的分析到最后的项目完结的都有一定的体现。
刚拿到项目时,我们团队进行了分析,并分配了各自的任务。
当我们其中一人遇到问题的时候,我们其他人都会去帮忙,效率提升了很多。
Java语言程序设计展示报告学院专业组长信息组员信息1组员信息2组员信息3指导教师日期年月日目录第一章选题概述 (1)第二章完成情况 (2)第三章成果展示 (3)一、登陆注册界面展示 (3)1、效果截图 (3)2、核心代码 (4)二、客户端界面展示 (5)1、效果截图 (8)2、核心代码 (8)三、服务端界面展示 (4)1、效果截图 (3)2、核心代码 (3)四、数据库直连和文件线程 (10)第四章总结与感受 (12)第一章选题概述在一学期的Java课程学习之后,我们对Java语言有了一定的认识与了解。
在此基础上我们选择了题目一作为本组的目标,题目的相关要求如下(初期拟完成目标):设计编程实现桌面文档共享与管理系统(100%)实现以下功能--1.能够实现文件的下载与上传(客户端与服务器端)2.能够通过安全认证与别人分享文档3.能形成“圈子”,对朋友或这陌生人设置不同的安全级别4.能够共享桌面与聊天5.必须用数据库存储信息6.必须用extends 和implements 关键字7.必须用this关键字8.必须用图形用户界面9.界面设计与功能不限,充分发挥题目一比较有挑战性,题目中的要求几乎涉及到了我们学过的所有知识,除此之外还需要我们课外学习一些课堂额外的知识,比如数据库的创建于连接。
由组长XXX1负责整合所学内容与指挥,组员查阅资料并编写程序,再和组长讨论并完成各自的模块设计。
我们设计了如下的流程图:图1-1 流程图第二章完成情况经过将近一个月左右的编程设计,我们实现的桌面文档共享与管理系统(90%)实现了以下功能--1.能够实现文件的上传(客户端与服务器端)2.能够通过安全认证与别人分享文档3.能形成“圈子”,对朋友或这陌生人设置不同的安全级别4.能够聊天并截取屏幕信息5.采用了数据库存储信息6.采用了extends 和implements 关键字7.采用了this关键字8.采用了图形用户界面程序的编程设计图2-1 类成果展示图其中jp.java功能为截图;khd.java功能为建立客户端;sc.java 功能为文件上传线程;zc.java功能为实现用户登录;Main功能为总体调用;fwq.java功能为建立服务端;User.java功能为实现与数据库的连接(直连)。
大学生java实训总结报告6篇篇1一、实训背景与目标本次Java实训旨在通过实践操作,加深大学生对Java编程语言的理解与掌握,提高实际项目开发能力。
在为期一个月的实训期间,我们小组围绕Java SE基础、Java Web开发、数据库操作等内容进行了系统学习和实践。
通过本次实训,我们期望达到以下目标:1. 深入理解Java核心技术与编程思想。
2. 掌握Java Web开发的基本流程和关键技术。
3. 学会使用至少一种数据库进行Java程序与数据库的交互。
4. 具备一定的项目开发和团队协作能力。
二、实训内容与过程1. Java SE基础实训在实训初期,我们重点复习和巩固了Java SE基础知识,包括数据类型、运算符、流程控制、面向对象编程等。
通过编写简单的控制台程序,我们实践了异常处理、集合类、泛型以及多线程编程。
2. Java Web开发实训随后,我们转向Java Web开发的学习。
通过学习和实践,掌握了基于Servlet和JSP的Web开发技术。
同时,学习了HTML、CSS和JavaScript等前端技术,并练习了前后端数据的交互。
此外,还了解了MVC设计模式在Web开发中的应用。
3. 数据库操作实训在数据库操作方面,我们主要学习了SQL语言以及JDBC操作数据库的技术。
通过实践操作,我们能够在Java程序中实现数据的增删改查,并学会了使用ORM框架进行对象与数据库表的映射。
4. 项目开发实践在实训的最后阶段,我们以小组形式进行了一个小型项目——在线图书管理系统。
通过项目的开发,我们综合运用了前面学到的知识,包括Web开发技术、数据库操作等。
在项目开发过程中,我们学会了如何分工合作,如何进行有效的项目管理。
三、实训收获与体会1. 提升了编程能力。
通过实训,我们对Java编程语言有了更深入的了解,编程能力得到了显著提高。
2. 增强了项目开发经验。
项目开发的实践让我们体验到了软件开发的流程,学会了如何在项目中运用所学知识。
课程:Java程序设计与应用开发题目:登录系统与钟表实现班级:XXXXXXXXXX学号:XXXXXXXX姓名:XXXX日期:XXXXX一、大作业目的用面向对象语言JA V A完成登录系统和钟表的分析、设计和实施。
通过课程设计掌握面向对象编程技术、GUI编程、常用类库的使用和应用系统的开发过程。
二、大作业题目描述和要求1.题目设计简单的登录系统和钟表界面,掌握Java编程中的多媒体应用。
2.要求(1)登录系统是java编程中比较基础的,设计一个登录对话框,通过输入正确的用户名和密码来进入系统,系统是一个带有菜单栏的记事本程序,通过点击菜单栏上的按钮来实现相应的功能。
(2) 通过设计一个钟表程序进一步掌握java在多媒体方面的应用。
3. 开发环境Eclipce + JDK1.4.2三、系统分析1.对于登录系统,首先应该对登录界面进行设计,该对话框中包括两个标签,一个文本输入框,一个密码输入框和两个按钮,这些GUI组件被添加到一个使用了网络袋布局的面板panel中,面板panel又被添加到Text_Login的内容窗格。
设计该系统的初步思路就是首先需要定义图像生成器的界面窗口,其次就是往每个按钮上添加触发事件监听器(如ActionListener、MouseListener、MouseMotionListener),然而在实际操作的过程中,新的问题不断出现,不过最后依依解决了。
对于记事本程序中的菜单栏的实现,菜单也是一种常用的GUI组件,菜单是一种层次结构,最顶层是菜单栏,在菜单栏中可以添加若干个菜单,每个菜单又可以添加若刚菜单选项,子菜单。
当单击一个菜单选项时,会生成一个动作事件,为菜单选项添加事件侦听器就可以侦听起动作事件。
2.对于Java的多媒体应用之钟表实现,程序在窗口上显示一个表盘,时刻度和分刻度为3D样式的,分别为黑灰色和灰色时针分针秒针随着时间在走动,间隔1s。
时针和分针的样式设计为略显锥形,秒针为简单的直线形。
Java语言程序设计展示报告学院专业组长信息组员信息1组员信息2组员信息3指导教师日期年月日目录第一章选题概述 (1)第二章完成情况 (2)第三章成果展示 (3)一、登陆注册界面展示 (3)1、效果截图 (3)2、核心代码 (4)二、客户端界面展示 (5)1、效果截图 (8)2、核心代码 (8)三、服务端界面展示 (4)1、效果截图 (3)2、核心代码 (3)四、数据库直连和文件线程 (10)第四章总结与感受 (12)第一章选题概述在一学期的Java课程学习之后,我们对Java语言有了一定的认识与了解。
在此基础上我们选择了题目一作为本组的目标,题目的相关要求如下(初期拟完成目标):设计编程实现桌面文档共享与管理系统(100%)实现以下功能--1.能够实现文件的下载与上传(客户端与服务器端)2.能够通过安全认证与别人分享文档3.能形成“圈子”,对朋友或这陌生人设置不同的安全级别4.能够共享桌面与聊天5.必须用数据库存储信息6.必须用extends 和 implements 关键字7.必须用this关键字8.必须用图形用户界面9.界面设计与功能不限,充分发挥题目一比较有挑战性,题目中的要求几乎涉及到了我们学过的所有知识,除此之外还需要我们课外学习一些课堂额外的知识,比如数据库的创建于连接。
由组长XXX1负责整合所学容与指挥,组员查阅资料并编写程序,再和组长讨论并完成各自的模块设计。
我们设计了如下的流程图:图1-1 流程图第二章完成情况经过将近一个月左右的编程设计,我们实现的桌面文档共享与管理系统(90%)实现了以下功能--1.能够实现文件的上传(客户端与服务器端)2.能够通过安全认证与别人分享文档3.能形成“圈子”,对朋友或这陌生人设置不同的安全级别4.能够聊天并截取屏幕信息5.采用了数据库存储信息6.采用了extends 和 implements 关键字7.采用了this关键字8.采用了图形用户界面程序的编程设计图2-1 类成果展示图其中jp.java功能为截图;khd.java功能为建立客户端;sc.java功能为文件上传线程;zc.java功能为实现用户登录;Main功能为总体调用;fwq.java功能为建立服务端;User.java 功能为实现与数据库的连接(直连)。
第三章成果展示一、登录注册界面展示1.效果截图经过我们的编程设计,实现了用户的登录,其运行效果如图3-1所示、登陆成功效果如图3-2示、登陆未成功效果如图3-3示。
注册效果如图3-4所示,注册后数据库数据改变效果如图3-5示图3-1 登陆界面运行成功效果图图3-2 登陆成功效果图图3-3 登陆未成功效果图图3-4 注册界面效果图2.核心代码相关核心代码及其详细注解如下:package ceshi;import java.awt.*;import java.awt.event.*;import java.io.PrintWriter;import javax.swing.*;public class zc extends JFrame{User login_user=new User();JTextField j1=new JTextField();//用户名的文本框JPasswordField jpw=new JPasswordField();//密码的文本框 JButton jb1=new JButton("登录");JButton jb2=new JButton("注册");private Container a = getContentPane();public zc(){setLayout(null);setVisible(true);setBounds(600,320,400,160);setTitle("登录窗口");setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//控制窗口关闭//添加登录和注册的按钮jb1.setBounds(270,10,60,30);j1.setBounds(100,15,100,20);jpw.setBounds(100,60,100,20);a.add(j1);a.add(jpw);jb1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String name1=j1.getText();String password1=new String(jpw.getPassword());String password2=login_user.getPWD(name1);String security1=login_user.getSCT(name1);if(password2.trim().equals(password1.trim())){if(security1.trim().equals("管理员")){//System.out.println("3" +login_user.getPWD(name1));setVisible(false);JOptionPane.showMessageDialog(null, "恭喜您登陆成功!", "消息", RMATION_MESSAGE);new fwq();}else{setVisible(false);JOptionPane.showMessageDialog(null, "恭喜您登陆成功!", "消息", RMATION_MESSAGE);new khd();}}else{JOptionPane.showMessageDialog(null, "对不起您的用户名或密码错误!", "错误",JOptionPane.ERROR_MESSAGE);}}});jb2.setBounds(270,55,60,30);a.add(jb1);a.add(jb2);jb2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Register c=new Register();}});//添加用户名和密码的标签JLabel jl1=new JLabel("用户名");jl1.setBounds(40,10,60,30);JLabel jl2=new JLabel("密码");jl2.setBounds(40,55,60,30);a.add(jl1);a.add(jl2);}public static void main(String argsp[]){ new zc();}}class Register extends JFrame{User Login_user = new User();JTextField jt1=new JTextField();JTextField jt2=new JTextField();JTextField jt3=new JTextField();JTextField jt4=new JTextField();JTextField jt5=new JTextField();JButton jb1=new JButton("注册");JButton jb2=new JButton("退出");JLabel jl1=new JLabel("用户名");JLabel jl2=new JLabel("密码");JLabel jl3=new JLabel("重新输入密码");JLabel jl4=new JLabel("邮箱");JLabel jl5=new JLabel("身份");JPanel jp=new JPanel();private Container a = getContentPane();public Register(){setLayout(null);setVisible(true);setTitle("注册");setBounds(750,320,300,250);jb1.setBounds(10,150,60,30);jb2.setBounds(140,150,60,30);jl1.setBounds(10,10,100,30);jl2.setBounds(10,35,100,30);jl3.setBounds(10,60,100,30);jl4.setBounds(10,85,100,30);jl5.setBounds(10,110,100,30);jt1.setBounds(120,15,130,20);jt2.setBounds(120,40,130,20);jt3.setBounds(120,65,130,20);jt4.setBounds(120,90,130,20);jt5.setBounds(120,115,130,20);a.add(jb1);a.add(jb2);a.add(jl1);a.add(jl2);a.add(jl3);a.add(jl4);a.add(jl5);a.add(jt1);a.add(jt2);a.add(jt3);a.add(jt4);a.add(jt5);jb1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String name1=jt1.getText();String password1=new String(jt2.getText());String rpassword1=new String(jt3.getText());String gender1=new String(jt4.getText());String security1=new String(jt5.getText());if (Login_user.jiancha(name1)==1){JOptionPane.showMessageDialog(null, "对不起您的用户名已被注册!", "错误",JOptionPane.ERROR_MESSAGE);return;}else if(name1.length()>10){JOptionPane.showMessageDialog(null,"用户名不能大于10位");return;}else if(password1.length()<6){JOptionPane.showMessageDialog(null,"密码不能小于6位");return;}else if (password1.equals(name1)){JOptionPane.showMessageDialog(null,"密码不能与用户名一致");return;}else if (!password1.equals(rpassword1)){JOptionPane.showMessageDialog(null,"两次输入的密码不一样 ");return;}Login_user.insert(name1,password1,rpassword1,gender1,security1);JOptionPane.showMessageDialog(null, "注册成功!");setVisible(false);}});jb2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){setVisible(false);}});}}二、客户端界面展示1.效果截图经过我们的编程设计,实现了客户端的相关操作,其运行效果如图3-6所示,能够实现连接服务端、断开,选择文件并上传文件、发送、截屏等操作图3-6 客户端界面图2.核心代码核心代码如下:package ceshi;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.TitledBorder; import ceshi.wjsc;import java.awt.*;import java.awt.event.*;import java.io.*;import .Socket;import java.util.HashMap;import java.util.Map;import java.util.StringTokenizer;public class khd extends JFrame{User Login_user=new User();JButton jb1=new JButton("发送");JButton jb2=new JButton("文件");JButton jb3=new JButton("连接");JButton jb4=new JButton("断开");static JButton jb5=new JButton("上传");JButton jb6=new JButton("截屏");static JTextArea jt1=new JTextArea(1,1);JTextArea jt2=new JTextArea(1,1);JTextField jt3=new JTextField("127.0.0.1");JTextField jt4=new JTextField("6999");JTextField jt5=new JTextField("d");JTextField jt6=new JTextField();JTextField jt7=new JTextField();JLabel jl1=new JLabel("聊天窗口");JLabel jl2=new JLabel("写消息");JLabel jl3=new JLabel("服务器IP");JLabel jl4=new JLabel("端口");JLabel jl5=new JLabel("昵称");JFileChooser j1 = new JFileChooser();static File fileFlag = new File("");static File file;private Socket socket;private Socket socket2;private PrintWriter writer;private BufferedReader reader;private MessageThread messageThread;// 负责接收消息的线程private Map<String, User> onLineUsers = new HashMap<String, User>();// 所有在线用户private boolean isConnected = false;private Container a = getContentPane();public khd(){setLayout(null);setVisible(true);setTitle("聊天室");setBounds(600,150,460,600);jl1.setBounds(10,50,100,20);JScrollPane js1 = new JScrollPane(jt1);jt1.setEditable(false);js1.setBounds(10,80,420,280);a.add(js1);a.add(jl1);jl2.setBounds(10,420,100,20);JScrollPane js2 = new JScrollPane(jt2);js2.setBounds(10,440,420, 80);a.add(jl2);jb1.setBounds(250,370,60,30); a.add(jb1);jb3.setBounds(310,370,60,30); a.add(jb3);jb4.setBounds(370,370,60,30); a.add(jb4);jb5.setBounds(190,370,60,30); a.add(jb5);jb6.setBounds(10,370,60,30); a.add(jb6);jb2.setBounds(70,370,60,30); a.add(jb2);jt6.setBounds(130,370,60,30); a.add(jt6);jt3.setBounds(60,10,100,20); a.add(jt3);jl3.setBounds(10,10,100,20); a.add(jl3);jt4.setBounds(200,10,100, 20);a.add(jt4);jl4.setBounds(168,10, 100, 20);a.add(jl4);jt5.setBounds(330,10,100, 20);jl5.setBounds(300,10, 100, 20);a.add(jl5);//按钮控制jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {send();}});jb2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int n = j1.showOpenDialog(null);String filename = j1.getSelectedFile().toString();if (n == JFileChooser.APPROVE_OPTION) {jt6.setText(filename);fileFlag = new File(filename);file = j1.getSelectedFile();System.out.println(""+file);}}});jb3.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {int port;if (isConnected) {JOptionPane.showMessageDialog(null, "已处于连接上状态,不要重复连接!","错误", JOptionPane.ERROR_MESSAGE);return;}try {try {port = Integer.parseInt(jt4.getText().trim()); } catch (NumberFormatException e2) {throw new Exception("端口号不符合要求!端口为整数!");}String hostIp = jt3.getText().trim();String name = jt5.getText().trim();if (name.equals("") || hostIp.equals("")) {throw new Exception("、服务器IP不能为空!"); }boolean flag = connectServer(port, hostIp, name); if (flag == false) {throw new Exception("与服务器连接失败!");}setTitle(name);JOptionPane.showMessageDialog(null, "成功连接!"); } catch (Exception exc) {JOptionPane.showMessageDialog(null,exc.getMessage(),"错误", JOptionPane.ERROR_MESSAGE);}}});jb4.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (!isConnected) {JOptionPane.showMessageDialog(null, "已处于断开状态,不要重复断开!","错误", JOptionPane.ERROR_MESSAGE);return;}try {boolean flag = closeConnection();// 断开连接if (flag == false) {throw new Exception("断开连接发生异常!");}JOptionPane.showMessageDialog(null, "成功断开!"); } catch (Exception exc) {JOptionPane.showMessageDialog(null,exc.getMessage(),"错误", JOptionPane.ERROR_MESSAGE);}}});jb6.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {new jp();RectD rd = new RectD();GraphicsDevice gd =GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();gd.setFullScreenWindow(rd);}});}public synchronized boolean closeConnection() {try {sendMessage("CLOSE");// 发送断开连接命令给服务器 messageThread.stop();// 停止接受消息线程// 释放资源if (reader != null) {reader.close();}if (writer != null) {writer.close();}if (socket != null) {socket.close();}isConnected = false;return true;} catch (IOException e1) {e1.printStackTrace();isConnected = true;return false;}}public void sendMessage(String message) {writer.println(message);writer.flush();}public void send() {if (!isConnected) {JOptionPane.showMessageDialog(null, "还没有连接服务器,无法发送消息!", "错误",JOptionPane.ERROR_MESSAGE);return;}String message = jt2.getText().trim();if (message == null || message.equals("")) {JOptionPane.showMessageDialog(null, "消息不能为空!", "错误",JOptionPane.ERROR_MESSAGE);return;}sendMessage(getTitle() + "" + "ALL" + "" + message);jt2.setText(null);}public static void main(String args[]){new khd();}class MessageThread extends Thread {private BufferedReader reader;private JTextArea textArea;// 接收消息线程的构造方法public MessageThread(BufferedReader reader, JTextArea textArea) {this.reader = reader;this.textArea = textArea;}// 被动的关闭连接public synchronized void closeCon() throws Exception { // 清空用户列表// listModel.removeAllElements();// 被动的关闭连接释放资源if (reader != null) {reader.close();}if (writer != null) {writer.close();}if (socket != null) {socket.close();}isConnected = false;// 修改状态为断开}public void run() {String message = "";while (true) {try {message = reader.readLine();StringTokenizer stringTokenizer = new StringTokenizer(message, "/");String command = stringTokenizer.nextToken();// 命令if (command.equals("CLOSE"))// 服务器已关闭命令{textArea.append("服务器已关闭!\n");closeCon();// 被动的关闭连接return;// 结束线程} else if (command.equals("ADD")) {// 有用户上线更新在线列表String username = "";String userIp = "";if ((username =stringTokenizer.nextToken()) != null&& (userIp =stringTokenizer.nextToken()) != null) {User user = new User(username, userIp);onLineUsers.put(username, user);//listModel.addElement(username);}} else if (command.equals("DELETE")) {// 有用户下线更新在线列表String username =stringTokenizer.nextToken();User user = (User)onLineUsers.get(username);onLineUsers.remove(user);} else if (command.equals("USERLIST")) {// 加载在线用户列表int size = Integer.parseInt(stringTokenizer.nextToken());String username = null;String userIp = null;for (int i = 0; i < size; i++) {username =stringTokenizer.nextToken();userIp = stringTokenizer.nextToken();User user = new User(username, userIp);onLineUsers.put(username, user);//listModel.addElement(username);}} else if (command.equals("MAX")) {// 人数已达上限textArea.append(stringTokenizer.nextToken()+ stringTokenizer.nextToken() + "\n");closeCon();// 被动的关闭连接JOptionPane.showMessageDialog(null, "服务器缓冲区已满!", "错误",JOptionPane.ERROR_MESSAGE);return;// 结束线程} else {// 普通消息textArea.append(message + "\n");}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}}}public boolean connectServer(int port, String hostIp, String name){// 连接服务器try {socket = new Socket(hostIp, port);// 根据端口号和服务器ip建立连接socket2=new Socket(hostIp,port);writer = new PrintWriter(socket.getOutputStream());reader = new BufferedReader(newInputStreamReader(socket.getInputStream()));// 发送客户端用户基本信息(用户名和ip地址)sendMessage(name + "" +socket.getLocalAddress().toString());// 开启接收消息的线程messageThread = new MessageThread(reader, jt1);messageThread.start();new wjsc(socket2).start();//new Input(socket2).start();isConnected = true;// 已经连接上了return true;} catch (Exception e) {jt1.append("与端口号为:" + port + " IP地址为:" + hostIp+ " 的服务器连接失败!" + "\n");isConnected = false;// 未连接上return false;}}}三、服务端界面展示1.效果截图经过我们的编程设计,实现了服务端的相关操作,其运行效果如图3-5所示,能够实现通过自己的IP地址创造一个服务端。