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 ...
随机推荐
- [PE结构分析] 6.IMAGE_SECTION_HEADER
IMAGE_SECTION_HEADER 的源代码如下: typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAM ...
- 划分树---Feed the dogs
POJ 2761 Description Wind loves pretty dogs very much, and she has n pet dogs. So Jiajia has to fee ...
- [moka同学笔记]yii2.0 advanced高级版 安装配置 与 rbac (Ⅰ)
1.下载地址:http://www.yiichina.com/download,下载 Yii2 的高级应用程序模板 2.配置与安装 在服务器www目录下yii2test [下载下来更改advance ...
- C语言范例学习03-中
栈和队列 这两者都是重要的数据结构,都是线性结构.它们在日后的软件开发中有着重大作用.后面会有实例讲解. 两者区别和联系,其实总结起来就一句.栈,后进先出:队列,先进先出. 可以将栈与队列的存储空间比 ...
- 利用php实现:当获取的网址不是特定网址时候跳转到指定地址
这个问题是在百度知道看到的问答,我不懂做,特定去百度了下.然后结合别人获取域名和跳转的知识,综合做了这个功能,以下是实现代码: <?php //获取当前的域名: echo "获取到的域 ...
- [小北De编程手记] : Selenium For C# 教程目录
写<Selnium For C#>系列文章的初衷是因为有很多朋友问我应该从哪里开始学习自动化测试,于是就为大家写下了这个系列的文章,希望对你有些帮助吧.而我想表达的是Selenium(同时 ...
- mysql innodb表 utf8 gbk占用空间相同,毁三观
昨天因为发生字符集转换相关错误,今天想验证下utf8和gbk中英文下各自空间的差距.这一测试,绝对毁三观,无论中文还是中文+英文,gbk和utf8占用的实际物理大小完全相同,根本不是理论上所述的“UT ...
- c#多线程生产者消费者(手稿)
屋舍简陋,隔壁的娃娃哭了一晚,心中无恶意纯中性的想,有病就赶紧带孩子去看医生吧,能哭这么久估计孩子真的不舒服.
- has_many :through VS has_and_belongs_to_many
user role has_and_belongs_to_many role.destroy: 关联表user_roles先删除记录,再role删除. has_many :through user. ...
- 打造高仿QQ的友盟反馈界面(MVP模式)
什么是MVP呢,简单来说就是将view层和逻辑完全独立出来,让逻辑和显示完全独立.本例中就是采用了这种模式,让activity作为view层,activity中涉及了适配器,所以这里尝试让适配器作为P ...