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 ...
随机推荐
- ACdream 1214---矩阵连乘
ACdream 1214---矩阵连乘 Problem Description You might have noticed that there is the new fashion among r ...
- [moka同学笔记]Yii2.0 dropDownList的使用(二)
方法一: <?php $psObjs = Poststatus::find()->all(); $allStatus = ArrayHelper::map($psObjs,'id','na ...
- 【Asphyre引擎】关于AsphyreTypes中OverlapRect的改动,都是泪啊!!!
OverlapRect改动:两个参数对调了.想问问LP,这样真的好吗? Sphinx304版本的代码: function OverlapRect(const Rect1, Rect2: TRect): ...
- php学习笔记:自定义函数的调用
PHP内置了超过1000个函数,因此函数使得PHP成为一门非常强大的语言.大多数时候我们使用系统的内置函数就可以满足需求,但是自定义函数通过将一组代码封装起来,使代码进行复用,程序结构与逻辑更加清晰. ...
- java微信开发(wechat4j)——支持微信JS-SDK的jsapi_ticket中控服务器
jsapi_ticket是使用js-sdk必须要的一个凭证,需要配置在js中. jsapi_ticket获取 要获取jsapi_ticket可以使用如下的方法 String jsapi_ticket ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q94-Q96)
Question 94You need to create a custom application that provides users with the ability to create a ...
- 使用tinypng优化Android的资源图片
tinypng 是一个支持压缩png和jpg图片格式的网站,通过其独特的算法(通过一种叫“量化”的技术,把原本png文件的24位真彩色压缩为8位的索引演示,是一 种矢量压缩方法,把颜色值用数值123等 ...
- Android项目结构分析
andriod项目目录结构如下图: 1. src目录 该目录一个普通的保存java源文件的目录,其和普通java工程中的src目录是一样的. 2. gen目录 此目录用于存放所有由ADT插件自动生成的 ...
- Effective Java 阅读笔记——并发
66:同步访问共享的可变数据 synchronized:1互斥,阻止线程看到的对象处于不一致的状态:2保证线程在进入同步区时能看到变量的被各个线程的所有修改 Java中,除了long或者double, ...
- iOS设计模式之备忘录模式
备忘录模式 基本理解 这个模式有三个关键角色:原发器(Originator).备忘录(Memento).看管人(caretaker).三者的基本关系是:原发器创建一个包含其状态的备忘录,并传给看管人. ...