本习题来自《java语言程序设计--进阶篇》第30章,网络编程的习题。

题目描述:为一个客户端编写一个服务器。客户端向服务器发送贷款信息(年利率、贷款年限和贷款总额)。服务器计算月偿还额和总偿还额,并把它们发回给客户端。将客户端程序命名为:Exercise30_1Client,将服务器程序命名为Exercise30_1Server。

  1. package exercise.chapter30;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import java.io.*;
  7. import java.net.*;
  8.  
  9. /*
  10. * 贷款客户端
  11. * 日期:2015.5.17
  12. */
  13.  
  14. public class Exercise30_1Client extends JFrame {
  15. private JPanel center = new JPanel();
  16. private JPanel south = new JPanel();
  17.  
  18. private JTextArea jta = new JTextArea(8, 10);
  19. private JButton jbt = new JButton("Submit");
  20.  
  21. //创建标签和文本域
  22. private JLabel jlb1 = new JLabel("税率");
  23. private JTextField rate = new JTextField();
  24. private JLabel jlb2 = new JLabel("贷款年数");
  25. private JTextField year = new JTextField();
  26. private JLabel jlb3 = new JLabel("贷款总数");
  27. private JTextField amount = new JTextField();
  28.  
  29. public Exercise30_1Client() {
  30. //设计GUI布局
  31. center.setLayout(new GridLayout(3, 2));
  32. south.setLayout(new BorderLayout());
  33.  
  34. center.add(jlb1);
  35. center.add(rate);
  36. center.add(jlb2);
  37. center.add(year);
  38. center.add(jlb3);
  39. center.add(amount);
  40.  
  41. jta.setEditable(false);
  42. jta.setFont(new Font("", Font.BOLD, 15));
  43. south.add(new JScrollPane(jta), BorderLayout.CENTER);
  44. south.add(jbt, BorderLayout.EAST);
  45.  
  46. this.setLayout(new BorderLayout());
  47. this.add(center, BorderLayout.CENTER);
  48. this.add(south, BorderLayout.SOUTH);
  49.  
  50. this.setTitle("Exercise30_1Client");
  51. this.setSize(400, 300);
  52. this.setVisible(true);
  53. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  54.  
  55. //设计socket
  56. try {
  57. Socket socket = new Socket("localhost", 8000);
  58. jbt.addActionListener(new MyActionListener(socket));
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. }
  63.  
  64. public static void main(String[] args) {
  65. new Exercise30_1Client();
  66. }
  67.  
  68. private class MyActionListener implements ActionListener {
  69. Socket socket = null;
  70.  
  71. public MyActionListener(Socket socket) {
  72. this.socket = socket;
  73. }
  74.  
  75. @Override
  76. public void actionPerformed(ActionEvent arg0) {
  77. try {
  78. DataOutputStream output = new DataOutputStream(socket.getOutputStream());
  79. DataInputStream input = new DataInputStream(socket.getInputStream());
  80. double rateStr = Double.parseDouble(rate.getText().trim());
  81. double yearStr = Double.parseDouble(year.getText().trim());
  82. double amountStr = Double.parseDouble(amount.getText().trim());
  83. String message = rateStr + "@" + yearStr + "@" + amountStr;
  84.  
  85. output.write(message.getBytes());
  86. output.flush();
  87.  
  88. byte[] buf = new byte[1024];
  89. int len = 0;
  90.  
  91. //文本域清零
  92. rate.setText("");
  93. year.setText("");
  94. amount.setText("");
  95.  
  96. double amount = input.readDouble();
  97. //向jta中追加数据
  98. jta.append("税率: " + rateStr + ", 贷款年数:" + yearStr + ", 贷款总额: " +
  99. amountStr + " ,偿还总额:" + amount);
  100. } catch (IOException e) {
  101. e.printStackTrace();
  102. }
  103. }
  104. }
  105. }
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.io.*;
  4. import java.net.*;
  5. import java.util.*;
  6. /*
  7. *功能:贷款服务器
  8. *日期:2015.5.17
  9. */
  10.  
  11. public class Exercise30_1Server extends JFrame {
  12. private JTextArea jta = new JTextArea();
  13.  
  14. public Exercise30_1Server() {
  15. this.setTitle("Exercise30_1Server");
  16. this.setSize(400, 300);
  17. this.setResizable(false);
  18. this.setVisible(true);
  19. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  20.  
  21. jta.setFont(new Font("Font.ITALIC",Font.PLAIN, 15));
  22. jta.setEditable(false);
  23. this.setLayout(new BorderLayout());
  24. this.add(new JScrollPane(jta), BorderLayout.CENTER);
  25.  
  26. jta.append("Server started at " + new Date() + '\n');
  27.  
  28. try {
  29. ServerSocket ss = new ServerSocket(8000);
  30. Socket socket = ss.accept();
  31.  
  32. //获取InetAddress类
  33. InetAddress inetAddress = socket.getInetAddress();
  34. jta.append("Client's hostname is: " + inetAddress.getHostName());
  35. jta.append("\n");
  36. jta.append("Client's ip is: " + inetAddress.getHostAddress());
  37. jta.append("\n");
  38.  
  39. DataInputStream input = new DataInputStream(socket.getInputStream());
  40. DataOutputStream output = new DataOutputStream(socket.getOutputStream());
  41. byte[] buf = new byte[1024];
  42. int len = 0;
  43. while((len = input.read(buf)) != -1) {
  44. double amount = getAmount(new String(buf, 0, len));
  45. output.writeDouble(amount);
  46.  
  47. jta.append(new String(buf, 0, len));
  48. jta.append("\n");
  49. }
  50. } catch (IOException e) {
  51. e.printStackTrace();
  52. }
  53. }
  54.  
  55. private static double getAmount(String str) {
  56. String[] str1 = str.split("@");
  57.  
  58. double rate = Double.parseDouble(str1[0]);
  59. double years = Double.parseDouble(str1[1]);
  60. double amount = Double.parseDouble(str1[2]);
  61.  
  62. return rate * years * amount + amount;
  63. }
  64.  
  65. public static void main(String[] args) {
  66. JFrame frame = new Exercise30_1Server();
  67. }
  68. }

java GUI,贷款服务器的更多相关文章

  1. Java 之 web服务器—Tomcat

    一.服务器 1.服务器 服务器:安装了服务器软件的计算机 2.服务器软件 服务器软件:接收用户的请求,处理请求,做出响应 3.Web 服务器软件 web 服务器软件:接收用户的请求,处理请求,做出响应 ...

  2. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  3. JAVA GUI

    JAVA GUI中的事件处理:   委托事件模型:事件源对象和监听器对象具有绑定关系   一个监听器可以绑定多个事件源 一个事件源也可以绑定多个监听器 监听器有各自监听的事件类型   设置容器的布局管 ...

  4. Java获取Web服务器文件

    Java获取Web服务器文件 如果获取的是服务器上某个目录下的有关文件,就相对比较容易,可以设定死绝对目录,但是如果不能设定死绝对目录,也不确定web服务器的安装目录,可以考虑如下两种方式: 方法一: ...

  5. paip.java gui swt/jface 最佳实践

    paip.java gui swt/jface 最佳实践 1. 工具:Eclipse +jigloo4 1 2. 安装插件: 1 1. IMPORT swt lib 2 2. 新建立窗体 2 3. 运 ...

  6. 一个java页游服务器框架

    一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...

  7. 写在学习Java GUI之前

    Java GUI就是用Java语言开发桌面应用,而Java又有三个Java GUI库,分别为AWT,Swing和SWT/JFace. 现在要学的是Swing库. 后记:开发桌面应用,不止一种技术,现在 ...

  8. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

  9. JAVA编写WEB服务器

    一.超文本传输协议  1.1 HTTP请求  1.2 HTTP应答  二.Socket类  三.ServerSocket类  四.Web服务器实例  4.1 HttpServer类  4.2 Requ ...

随机推荐

  1. 后缀数组---New Distinct Substrings

    Description Given a string, we need to find the total number of its distinct substrings. Input T- nu ...

  2. python3学习笔记目录

    目录: Python基础(一),Day1 python基础(二),Day2 python函数和常用模块(一),Day3 python函数和常用模块(二),Day4 python函数和常用模块(三),D ...

  3. docker入门指南(转载)

    原文: http://bg.biedalian.com/2014/11/20/docker-start.html 关于 docker 今天云平台的同事提到, 现在的运维就是恶性循环, 因为大家都在申请 ...

  4. 通过GPS数据反向地理信息编码, 得到当前位置信息

    检查可用性 这属于基础知识, 不赘述, 总的来说,你的设备的支持要打开, 添加CoreLocation的framework, 引用头文件, 添加委托,然后, 好的实践是在使用前编程检查相关可用性: - ...

  5. EntityFramework学习

    本文档主要介绍.NET开发中两项新技术,.NET平台语言中的语言集成查询技术 - LINQ,与ADO.NET中新增的数据访问层设计技术ADO.NET Entity Framework.ADO.NET的 ...

  6. andriod 带看括弧的计算器

    界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...

  7. 【Android开发资料分享】自己整理的Android开发资料,非常全面

    学习Android以来,不知不觉中收集了大量非常优秀的Android开发资料,一直没有系统的整理,最近抽时间把收藏夹中的资料做了一下整理,现在分享给大家,希望能够帮助到需要的人.这份资料我还会不断的更 ...

  8. Python学习二---字符串

    一.字符串 1.1.字符串和转义字符 转义字符需要使用\来表示 1.2.字符串连接 print 字符串1 字符串2,打印出来的字符串直接连接在一起没有空格 print 字符串1,字符串2,打印出来的字 ...

  9. Python学习一入门

    一.打印Hello和多行文本 print 打印 后跟单引号或者双引号 多行:3个单引号或者3个双引号 二.算术运算 2.1.加减乖法 默认1/2=0 如果需要小数运算,则需要一个运算术上加.或者.0 ...

  10. IOS 瀑布流UICollectionView实现

    IOS 瀑布流UICollectionView实现 在实现瀑布流之前先来看看瀑布流的雏形(此方法的雏形 UICollectionView) 对于UICollectionView我们有几点注意事项 它和 ...