• 20192319 2020-2021-1 《数据结构及面向对象程序设计》实验四报告


    实验四报告

    • 课程:《程序设计与数据结构》
    • 班级: 1923
    • 姓名: 李歆韵
    • 学号:20192319
    • 实验教师:王志强
    • 实验日期:2020年10月26日
    • 必修/选修: 必修

    1.实验内容

    (一)Java Socket编程

    1.学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程
    2.结对编程。结对伙伴A编写客户端SocketClient.java,结对伙伴B编写服务器端。
    3.截图加学号水印上传蓝墨云,代码push到码云,并撰写实验报告。

    (二)Java和密码学

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

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

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

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

    (四)远程有理数计算器

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

    (五)远程复数计算器

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

    2. 实验过程及结果

    2.1 Java Socket编程

     import java.io.*;
     import java.net.ServerSocket;
     import java.net.Socket;
    
     public class Server1923 {
     public static void main(String[] args) throws IOException {
        //1.建立一个服务器Socket(ServerSocket)绑定指定端口
        ServerSocket serverSocket=new ServerSocket(8000);
        //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;
        System.out.println("服务器已经建立......");
        while(!((info = bufferedReader.readLine()) ==null)){
            System.out.println("我是服务器,用户信息为:" + info);
        }
        //5.关闭资源
        printWriter.close();
        outputStream.close();
        bufferedReader.close();
        inputStream.close();
        socket.close();
        serverSocket.close();
     }
    }
    

    2.2 java和密码学







    2.3 编写有理数/复数计算器

    package ComplexNumbers;
    
    public interface Complex {
         public String ComplexAdd();
         public String ComplexSub();
         public String ComplexMulti();
         public String ComplexDiv();
         public String ComplexCompare();
    }
    

    2.4 远程有理数计算器

     package ex4;
    
     public class RationalNumber {
     private int numerator ,denominator;
     public RationalNumber(int num,int den){
        if(den==0)
            den=1;
        else if(den<0){
            den = -1*den;
            num = -1*num;
        }
    
        numerator = num;
        denominator = den;
        reduce();
     }
    
    public int getNumerator() {
        return numerator;
     }
    
    public int getDenominator() {
        return denominator;
    }
    
    public RationalNumber reciprocal (){
        return new RationalNumber (denominator,numerator);
    }
    public RationalNumber add(RationalNumber op2) {
        int commonDenominator = denominator * op2.getDenominator();
        int numerator1 = numerator * op2.getDenominator();
        int numerator2 = op2.getNumerator() * denominator;
        int sum = numerator1 + numerator2;
        return new RationalNumber(sum,commonDenominator);
    }
    public RationalNumber subtract (RationalNumber op2){
        int commonDenominator = denominator * op2.getDenominator();
        int numerator1 = numerator * op2.getDenominator();
        int numerator2 = op2.getNumerator() * denominator;
        int different = numerator1 - numerator2;
        return new RationalNumber(different,commonDenominator);
    
    }
    public RationalNumber multiply(RationalNumber op2) {
        int numer = numerator * op2.getNumerator();
        int denom = denominator * op2.getDenominator();
        return new RationalNumber(numer, denom);
    }
    
    public RationalNumber divide(RationalNumber op2) {
        return multiply(reciprocal());
    }
    public boolean isLike (RationalNumber op2)
    {
        return (numerator == op2.getNumerator()&& denominator == op2.getDenominator());
    }
    public String toString() {
        String result;
        if(numerator==0)
            result ="0";
        else
        if(denominator==1)
            result = numerator+"";
        else
            result = numerator +"/"+denominator;
        return result;
    }
    private void reduce()
    {
        if(numerator !=0)
        {
            int common = gcd(Math.abs(numerator),denominator);
    
            numerator = numerator/common;
            denominator = denominator/common;
    
        }
    
    }
    private int gcd (int num1,int num2)
    {
        while(num1 !=num2)
            if(num1>num2)
                num1 = num1-num2;
            else
                num2 = num2-num1;
        return num1;
        }
    
    
     }
    


    2.5 远程复数计算器


    3.其它

    在进入第四周的学习之后,作业量开始增多,同时也增加了相应的课堂实践项目。让我感受到了Java这门课程需要多加练习。学习的也不再局限于书本上的代码,更多是根据博客的自学项目。但是从一开始只能求助于同学。

    参考资料

  • 相关阅读:
    HTTPS和HTTP的区别
    .NET反射、委托技术与设计模式
    中文化和国际化问题权威解析之三:Java中文问题分析
    Windows下Critical Section、Event、Mutex、Semaphores区别
    使用Forms Authentication 身份验证 之 Basic Knowledge
    介绍几个java虚拟机性能监测工具
    理解Semaphore和Mutex
    中文化和国际化问题权威解析之四:Java中文化和国际化攻略
    中文化和国际化问题权威解析之一:字符编码发展历程
    Happy new year!
  • 原文地址:https://www.cnblogs.com/Tempo-Alex/p/13879664.html
Copyright © 2020-2023  润新知