java GUI,贷款服务器
本习题来自《java语言程序设计--进阶篇》第30章,网络编程的习题。
题目描述:为一个客户端编写一个服务器。客户端向服务器发送贷款信息(年利率、贷款年限和贷款总额)。服务器计算月偿还额和总偿还额,并把它们发回给客户端。将客户端程序命名为:Exercise30_1Client,将服务器程序命名为Exercise30_1Server。
package exercise.chapter30; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; /* * 贷款客户端 * 日期:2015.5.17 */ public class Exercise30_1Client extends JFrame { private JPanel center = new JPanel(); private JPanel south = new JPanel(); private JTextArea jta = new JTextArea(8, 10); private JButton jbt = new JButton("Submit"); //创建标签和文本域 private JLabel jlb1 = new JLabel("税率"); private JTextField rate = new JTextField(); private JLabel jlb2 = new JLabel("贷款年数"); private JTextField year = new JTextField(); private JLabel jlb3 = new JLabel("贷款总数"); private JTextField amount = new JTextField(); public Exercise30_1Client() { //设计GUI布局 center.setLayout(new GridLayout(3, 2)); south.setLayout(new BorderLayout()); center.add(jlb1); center.add(rate); center.add(jlb2); center.add(year); center.add(jlb3); center.add(amount); jta.setEditable(false); jta.setFont(new Font("", Font.BOLD, 15)); south.add(new JScrollPane(jta), BorderLayout.CENTER); south.add(jbt, BorderLayout.EAST); this.setLayout(new BorderLayout()); this.add(center, BorderLayout.CENTER); this.add(south, BorderLayout.SOUTH); this.setTitle("Exercise30_1Client"); this.setSize(400, 300); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设计socket try { Socket socket = new Socket("localhost", 8000); jbt.addActionListener(new MyActionListener(socket)); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new Exercise30_1Client(); } private class MyActionListener implements ActionListener { Socket socket = null; public MyActionListener(Socket socket) { this.socket = socket; } @Override public void actionPerformed(ActionEvent arg0) { try { DataOutputStream output = new DataOutputStream(socket.getOutputStream()); DataInputStream input = new DataInputStream(socket.getInputStream()); double rateStr = Double.parseDouble(rate.getText().trim()); double yearStr = Double.parseDouble(year.getText().trim()); double amountStr = Double.parseDouble(amount.getText().trim()); String message = rateStr + "@" + yearStr + "@" + amountStr; output.write(message.getBytes()); output.flush(); byte[] buf = new byte[1024]; int len = 0; //文本域清零 rate.setText(""); year.setText(""); amount.setText(""); double amount = input.readDouble(); //向jta中追加数据 jta.append("税率: " + rateStr + ", 贷款年数:" + yearStr + ", 贷款总额: " + amountStr + " ,偿还总额:" + amount); } catch (IOException e) { e.printStackTrace(); } } } }
import javax.swing.*; import java.awt.*; import java.io.*; import java.net.*; import java.util.*; /* *功能:贷款服务器 *日期:2015.5.17 */ public class Exercise30_1Server extends JFrame { private JTextArea jta = new JTextArea(); public Exercise30_1Server() { this.setTitle("Exercise30_1Server"); this.setSize(400, 300); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jta.setFont(new Font("Font.ITALIC",Font.PLAIN, 15)); jta.setEditable(false); this.setLayout(new BorderLayout()); this.add(new JScrollPane(jta), BorderLayout.CENTER); jta.append("Server started at " + new Date() + '\n'); try { ServerSocket ss = new ServerSocket(8000); Socket socket = ss.accept(); //获取InetAddress类 InetAddress inetAddress = socket.getInetAddress(); jta.append("Client's hostname is: " + inetAddress.getHostName()); jta.append("\n"); jta.append("Client's ip is: " + inetAddress.getHostAddress()); jta.append("\n"); DataInputStream input = new DataInputStream(socket.getInputStream()); DataOutputStream output = new DataOutputStream(socket.getOutputStream()); byte[] buf = new byte[1024]; int len = 0; while((len = input.read(buf)) != -1) { double amount = getAmount(new String(buf, 0, len)); output.writeDouble(amount); jta.append(new String(buf, 0, len)); jta.append("\n"); } } catch (IOException e) { e.printStackTrace(); } } private static double getAmount(String str) { String[] str1 = str.split("@"); double rate = Double.parseDouble(str1[0]); double years = Double.parseDouble(str1[1]); double amount = Double.parseDouble(str1[2]); return rate * years * amount + amount; } public static void main(String[] args) { JFrame frame = new Exercise30_1Server(); } }
java GUI,贷款服务器的更多相关文章
- Java 之 web服务器—Tomcat
一.服务器 1.服务器 服务器:安装了服务器软件的计算机 2.服务器软件 服务器软件:接收用户的请求,处理请求,做出响应 3.Web 服务器软件 web 服务器软件:接收用户的请求,处理请求,做出响应 ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- JAVA GUI
JAVA GUI中的事件处理: 委托事件模型:事件源对象和监听器对象具有绑定关系 一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型 设置容器的布局管 ...
- Java获取Web服务器文件
Java获取Web服务器文件 如果获取的是服务器上某个目录下的有关文件,就相对比较容易,可以设定死绝对目录,但是如果不能设定死绝对目录,也不确定web服务器的安装目录,可以考虑如下两种方式: 方法一: ...
- paip.java gui swt/jface 最佳实践
paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...
- 一个java页游服务器框架
一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...
- 写在学习Java GUI之前
Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...
- Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解
Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...
- JAVA编写WEB服务器
一.超文本传输协议 1.1 HTTP请求 1.2 HTTP应答 二.Socket类 三.ServerSocket类 四.Web服务器实例 4.1 HttpServer类 4.2 Requ ...
随机推荐
- 技巧题---Single boy
Description Today is Christmas day. There are n single boys standing in a line. They are numbered fo ...
- [PHP] java读取PHP接口数据
和安卓是一个道理,读取json数据 PHP文件: <?php class Test{ //日志路径 const LOG_PATH="E:\phpServer\Apache\logs\\ ...
- Python: Convert rst to html
pip install sphinx rst2html.py in_file.rst out_file.html
- 「C语言」Windows+EclipseCDT下的C语言开发环境准备
之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...
- 为什么不推崇复杂的ORM
上一篇文章写完,回复的人很多,有的说的很中肯,有的貌似只是看到文章的标题就进来写评论的!还有人问为什么我要屏蔽掉[反对]按钮,因为谁写文章都是为了分享,都在说出自己的心得体会.不过由于大家遇到的项目, ...
- 关于setInterval和setTImeout中的this指向问题
前些天在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,如下例: var num = 0; function ...
- jquery 监控文本框键盘事件(回车事件),附常用keycode值。
$(function(){ $(".search").keydown(function(event) { ) { //执行操作 } }) ); 完整的 key press 过程分为 ...
- JS数组的forEach方法(兼容所有浏览器)
//->自己在内置类的原型上扩展一个myForEach来处理forEach不兼容的问题//callBack:回调函数,遍历数组中的一项,就要执行一次callBack//context:改变cal ...
- ASP.NET获取请求的url信息汇总
ASP.NET获取请求的url信息汇总 最近做项目需要处理一个用代码获取当前网站的域名或ip信息的问题,于是尝试了ASP.NET中各种获取url信息的方法,在此总结一下: 在Global.asax文件 ...
- 限制UITextField输入内容的长度
一.前言 今天做手机号输入限制长度,例如我的textfield只能输入11位,如果再多输入的话就不再textfield中显示,只显示11位的手机号. 如果用ReactiveCocoa的话,这个很好解决 ...