• 学号20192314 实验四 《数据结构与面向对象程序设计》实验报告


    (一)Java Socket编程

    1.学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程

    2.结对编程。结对伙伴A编写客户端SocketClient.java,结对伙伴B编写服务器端。

    3.截图加学号水印上传蓝墨云,代码push到码云,并撰写实验报告。

    1.代码如下:

       //import java.io.*;
         import java.net.ServerSocket;
         import java.net.Socket;
    
         public class server {
             public static void main(String[] args) throws IOException {
                 //1.建立一个服务器Socket(ServerSocket)绑定指定端口
                 ServerSocket serverSocket=new ServerSocket(8809);
                 //2.使用accept()方法阻止等待监听,获得新连接
                 Socket socket=serverSocket.accept();
                 //3.获得输入流
                 InputStream inputStream=socket.getInputStream();
                 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
                 //获得输出流
                 OutputStream outputStream=socket.getOutputStream();
                 PrintWriter printWriter=new PrintWriter(outputStream);
                 //4.读取用户输入信息
                 String info=null;
                 System.out.println("服务器已经建立......");
                 while(!((info = bufferedReader.readLine()) ==null)){
                      System.out.println("我是服务器,用户信息为:" + info);
                    }
                 //给客户一个响应
                 String reply="welcome";
                 printWriter.write(reply);
                 printWriter.flush();
                 //5.关闭资源
                 printWriter.close();
                 outputStream.close();
                 bufferedReader.close();
                 inputStream.close();
                 socket.close();
                 serverSocket.close();
            }
         }
    

    2.结对伙伴:20192302,20192304

    3.运行截图

    (二)Java和密码学

    参考 http://www.cnblogs.com/rocedu/p/6683948.html

    以结对的方式完成Java密码学相关内容的学习(帖子中所有代码和相关知识点需要学习)。提交学习成果码云链接和代表性成果截图,要有学号水印。

    1.结对伙伴:20192302,20192304

    2.运行截图







    (三)编写有理数/复数计算器

    结对编程,结对伙伴A编写有理数计算器。结对伙伴B编写复数计算器。截图加水印上传蓝墨云,代码push码云。

    1.有理数计算器代码

    子类

    //import java.util.Scanner;
      public class Rational
      {
           public static void  Intager() {
               Scanner sc = new Scanner(System.in);
               float a;
               float b;
               float c;
               System.out.println("Please input a:");
               a = sc.nextFloat();
               System.out.println("Please input b:");
               b = sc.nextFloat();
               while (b == 0) {
                    System.out.println("Please retry!");
                    b = sc.nextFloat();
                }
               System.out.println("Please choose your algorithm:(+ — * / %)");
               String op = sc.next();
               switch (op) {
               case "+":
                     System.out.println(a + "+" + b + "=" + (a + b));
                     break;
               case "-":
                     System.out.println(a + "-" + b + "=" + (a - b));
                     break;
               case "*":
                     System.out.println(a + "*" + b + "=" + (a * b));
                     break;
               case "/":
                     System.out.println(a + "/" + b + "=" + (a / b));
                     break;
               case "%":
                     System.out.println(a + "%" + b + "=" + (a - (int) (a / b) * b));
                     break;
               default:
                     System.out.println("Error in Identification"
                           + " Character.");
               }
          }
     }
    

    父类

        //import java.util.Scanner;
          public class RationalDad {
              public static void main(String[] args) {
                  Scanner sc = new Scanner(System.in);
                  int n = 0;
                  int m;
                  int x = 1;
                  float c;
                  while (x == 1) {
                     Rational.Intager();
                   }
    
                 System.out.println("Do it again?(yes is 1,no is 2)");
                 n = sc.nextInt();
                 if (n == 1)
                     x = 1;
                 if (n == 2)
                     x = 0;
              }
         }
    

    2.运行截图


    (四)远程有理数计算器

    结对编程,结对伙伴A编程实现客户端,结果伙伴B实现服务器端。

    客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴B(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端A,A收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。

    1.结对伙伴20192302,20192304,我是客户端

    2.运行截图

    (五)远程复数计算器

    结对编程,结对伙伴B编程实现客户端,结果伙伴A实现服务器端。

    客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴A(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端B,B收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。
    注意实验四(4)和实验四(5),一个人不能仅实现客户端,必须实现一个客户端和服务器,否则两个实验均不得分!!!!

    1.我是服务器端,代码:

    计算器

    //import java.io.*;
      import java.lang.Float;
      import java.util.*;
      import java.lang.*;
      import java.math.*;
      import java.sql.*;
      import java.text.*;
      import java.awt.*;
      import javax.swing.*;
      public class jisuan {
          public static String jieguo(String str)
             {
                  int a=str.length();//a是字符串的长度。
                  int b=str.lastIndexOf("(");//b是(最后一次出现。
                  String fushu1=str.substring(1,b-3);//substring不包括尾部。
                  String fushu2=str.substring(b+1,a-2);
                  char A=str.charAt(b-1);//复数运算符                     //   c
                  int c=fushu1.indexOf("+");//c是复数1的加号的位置。     //...  +  ...   i
                  String real1=fushu1.substring(0,c-1);               //0 c-1  c+1 b-5  b-4
                  String ima1=fushu1.substring(c+1,b-5);
                  int d=fushu2.indexOf("+");                          // . . . . .  +  . . . .  i
                  String real2=fushu2.substring(0,d-1);               //0       d-1 d d+1  a-b-4   a-3-b
                  String ima2=fushu2.substring(d+1,a-b-4);
                  float r1= Float.parseFloat(real1);
                  float r2=Float.parseFloat(real2);
                  float i1=Float.parseFloat(ima1);
                  float i2=Float.parseFloat(ima2);
                  float r=0;
                  float i=0;
                  if(A=='+')
                     {
                        r=r1+r2;
                        i=i1+i2;
                     }
                  else if (A=='-')
                     {
                        r=r1-r2;
                        i=i1-i2;
                     }
                  else if(A=='*')
                     {
                        r=r1*r2-i1*i2;
                        i=r1*i2+r2*i1;
                     }
                  else if (A=='/')
                     {
                        r=(r1*r2+i1*i2)/(r2*r2+i2*i2);
                        i=(i1*r2-i2*r1)/(r2*r2+i2*i2);
                     }
                  String R=r+"+"+i+"i"+"";
                  return R;
                  }
           }
    

    连接端

        //import java.io.*;
          import java.net.ServerSocket;
          import java.net.Socket;
          import javax.script.ScriptEngine;
          import javax.script.ScriptException;
    
          public class yuanchengfushu {
          public static void main(String[] args) throws IOException, ScriptException {
              //1.建立一个服务器Socket(ServerSocket)绑定指定端口
               ServerSocket serverSocket=new ServerSocket(8800);
              //2.使用accept()方法阻止等待监听,获得新连接
               Socket socket=serverSocket.accept();
              //3.获得输入流
               InputStream inputStream=socket.getInputStream();
               BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
              //获得输出流
               OutputStream outputStream=socket.getOutputStream();
               PrintWriter printWriter=new PrintWriter(outputStream);
              //4.读取用户输入信息
               String info=null;
               System.out.println("服务器已经建立......");
               info = bufferedReader.readLine();
               System.out.println("我是服务器,用户信息为:" + info);
               String reply="";
               jisuan s=new jisuan();
               reply=s.jieguo(info);
               printWriter.write(reply);
               printWriter.flush();
    
    
               //5.关闭资源
               printWriter.close();
               outputStream.close();
               bufferedReader.close();
               inputStream.close();
               socket.close();
               serverSocket.close();
         }
     }
    

    2.运行截图

    实验心得体会

    -实验的完成借助了很多资料的查询和同学学长的帮助,自身能力还有待提高
    -进行远程传输时,应在程序增加适当的提示语言,以此定位程序运行的进度,便于在出现问题时进行查找
    -实现远程计算器时,输入的应为字符串形式,然后将数字提取出来,放入计算器中进行运算

  • 相关阅读:
    reduce()、filter()、map()、some()、every()、...展开属性
    react的this.setState详细介绍
    HDU
    The 2015 ACM-ICPC Asia Beijing Regional Contest
    Ubuntu 14.04 安装 WPScan
    蓝桥杯-历届试题-公式求值
    Ubuntu下快速搭建ACdream Online Judge v1.5.3
    Codeforces Round #290 (Div. 2)
    SOJ
    SOJ
  • 原文地址:https://www.cnblogs.com/yukunyang/p/13905999.html
Copyright © 2020-2023  润新知