12.27

发布时间 2023-12-27 23:31:40作者: 布吉岛???

软件构造实验作业

实验名称:

班级:2105-1    学号20214145    姓名粘艺凡       

 

实验一:百度机器翻译SDK实验

一、实验要求

百度机器翻译SDK实验(2023.11.29日完成) 

参考资料:https://ai.baidu.com/ai-doc/index/MT

    https://cloud.baidu.com/doc/MT/index.html

https://console.bce.baidu.com/tools/?_=1669807341890#/api?product=AI&project=%E6%9C%BA%E5%99%A8%E7%BF%BB%E8%AF%91&parent=%E9%89%B4%E6%9D%83%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6&api=oauth%2F2.0%2Ftoken&method=post

  实验效果样例图:

    

 

二、实验步骤

 

任务一:下载配置百度图像增强与特效的Java相关库及环境(占10%)。

领取免费资源

下载配置百度图像增强与特效的Java相关库及环境(占10%)。

 

创建应用

 

查看示例代码

 

然后带入相应的包

 

 

任务二:了解百度翻译相关功能并进行总结,包括文本翻译-通用版和文本翻译-词典版(占20%)

文本翻译通用版:

文本翻译是百度翻译依托领先的自然语言处理技术推出的在线文本翻译服务,可支持中、英、日、韩等多种语言互译,多种语种自动检测。支持200+语种互译,传入待翻译内容,并指定源语言(支持语种自动检测)和目标语言,即可获得翻译结果,并支持术语干预

文本翻译词典版:

在文本翻译-通用版的基础上,提供词典资源和语音合成资源。词典资源 词典分中英词典,由于每个词属性不同,词典结果不一定包含所有部分。 如源语言为中文,词典数据包括:拼音、词性、中文释义、英文释义、近义词等资源。 如源语言为英文,词典数据包括:英文释义、中文释义、音标、核心词汇类别等。

总的来说,文本法医通用版更注重整体文本的翻译,而词典版更专注于单个词汇的详细解释和相关信息。用户选择使用那个版本取决与他们的具体需求,是需要翻译一整段文本还是深入了解特定词汇的含义和用法。

任务三:完成百度翻译相关功能代码并测试调用,要求可以实现中文翻译成英文,英文翻译成中文(占30%)。

翻译的主界面:

 

有翻译内容显示,中英文互译以及要显示的翻译的内容。

首先是英文翻译为中文。

 

代码如下:

package com.example;

 

import com.google.gson.JsonArray;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

import okhttp3.*;

import org.json.JSONException;

import org.json.JSONObject;

 

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

 

public class fanyi extends JFrame {

 

    private static final String API_KEY = "dzjU0EZolFp0hpYlKD8ckSpk";

    private static final String SECRET_KEY = "XbMab4iuLO4dkkKACNDQw5nONYRjTyv4";

 

    private static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();

 

    private JTextArea inputTextArea;

    private JTextArea outputTextArea;

    private JComboBox<String> fromLanguageComboBox;

    private JComboBox<String> toLanguageComboBox;

 

 

    public fanyi() {

        // Set up the main frame

        setTitle("翻译GUI");

        setSize(500, 400);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLocationRelativeTo(null);

 

        // Set up the language options

        String[] languages = {"en", "zh"};

        fromLanguageComboBox = new JComboBox<>(languages);

        toLanguageComboBox = new JComboBox<>(languages);

 

        // Create components

        inputTextArea = new JTextArea(10, 40);

        inputTextArea.setFont(new Font("SimSun", Font.PLAIN, 16)); // Set font size to 16

        outputTextArea = new JTextArea("显示翻译内容");

        outputTextArea.setFont(new Font("SimSun", Font.PLAIN, 16)); // Set font size to 16

        outputTextArea.setForeground(new Color(34, 139, 34)); // Set text color to green

        outputTextArea.setEditable(false);

 

        JButton translateButton = new JButton("开始翻译");

        translateButton.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                translateText();

            }

        });

 

        // Set up the layout

        JPanel mainPanel = new JPanel(new BorderLayout());

        mainPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

 

        JPanel inputPanel = new JPanel(new BorderLayout());

        inputPanel.add(new JLabel("要翻译内容:"), BorderLayout.NORTH);

        inputPanel.add(new JScrollPane(inputTextArea), BorderLayout.CENTER);

 

        JPanel translationOptionsPanel = new JPanel();

        translationOptionsPanel.add(fromLanguageComboBox);

        translationOptionsPanel.add(new JLabel("->"));

        translationOptionsPanel.add(toLanguageComboBox);

 

        JPanel buttonPanel = new JPanel();

        buttonPanel.add(translateButton);

 

        mainPanel.add(inputPanel, BorderLayout.NORTH);

        mainPanel.add(outputTextArea, BorderLayout.CENTER);

        mainPanel.add(translationOptionsPanel, BorderLayout.WEST);

        mainPanel.add(buttonPanel, BorderLayout.SOUTH);

 

        // Add components to the frame

        add(mainPanel);

 

        // Make the frame visible

        setVisible(true);

    }

 

    private void translateText() {

        try {

            String inputText = inputTextArea.getText();

            String accessToken = getAccessToken();

            String translationResult = performTranslation(inputText, accessToken);

            System.out.println(inputText);

            String translatedText = extractTranslation(translationResult);

            outputTextArea.setText(translatedText);

        } catch (IOException e) {

            e.printStackTrace();

            outputTextArea.setText("失败。");

        }

    }

    private String performTranslation(String text, String accessToken) throws IOException {

        String fromLanguage = (String) fromLanguageComboBox.getSelectedItem();

        String toLanguage = (String) toLanguageComboBox.getSelectedItem();

        MediaType mediaType = MediaType.parse("application/json");

        String jsonBody = String.format( "{\"from\":\"%s\",\"to\":\"%s\",\"q\":\"" + text + "\"}", fromLanguage, toLanguage);

        RequestBody body = RequestBody.create(mediaType, jsonBody);

        Request request = new Request.Builder()

                .url("https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=" + accessToken)

                .method("POST", body)

                .addHeader("Content-Type", "application/json")

                .addHeader("Accept", "application/json")

                .build();

        Response response = HTTP_CLIENT.newCall(request).execute();

        return response.body().string();

 

    }

 

    private String extractTranslation(String translationResult) {

        JsonObject json = JsonParser.parseString(translationResult).getAsJsonObject();

        JsonObject resultObject = json.getAsJsonObject("result");

        System.out.println(json);

        JsonArray translations = resultObject.getAsJsonArray("trans_result");

        System.out.println(translations);

        JsonObject translation = translations.get(0).getAsJsonObject();

        if (json.has("error_code")) {

            // 检查是否包含错误码,如果是,处理错误信息

            int errorCode = json.get("error_code").getAsInt();

            String errorMsg = json.get("error_msg").getAsString();

            System.out.println("Translation error: " + errorCode + ", " + errorMsg);

            return "Translation not available";

        }

        if (json.has("trans_result")) {

 

            if (!translations.isJsonNull() && translations.size() > 0) {

 

                if (translation.has("dst")) {

                    return translation.get("dst").getAsString();

                }

            }

        }

        return translation.get("dst").getAsString();

    }

 

 

    private String getAccessToken() throws IOException {

        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");

        RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY

                + "&client_secret=" + SECRET_KEY);

        Request request = new Request.Builder()

                .url("https://aip.baidubce.com/oauth/2.0/token")

                .method("POST", body)

                .addHeader("Content-Type", "application/x-www-form-urlencoded")

                .build();

        Response response = HTTP_CLIENT.newCall(request).execute();

        try {

            return new JSONObject(response.body().string()).getString("access_token");

        } catch (JSONException e) {

            throw new RuntimeException(e);

        }

    }

 

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override

            public void run() {

                new fanyi();

            }

        });

    }

}

 

 

任务完成百度翻译GUI相关功能代码并测试调用,要求可以实现中文翻译成英文,英文翻译成中文(占30%)。

翻译的主界面:

 

有翻译内容显示,中英文互译以及要显示的翻译的内容。

接下来是中文翻译为英文。

 

代码如下:

三、实验总结

本次实验相对来说比较简单,学习了Java的控件的放置,由于学习的时间较短,所以画出来的界面很难看,相信以后多用会得到很大的提高,另外还学习了百度翻译的接口的调用,功能很强大。

 

实验二:百度图像增强与特效SDK实验

一、实验要求

实验效果样例图:

 

  参考资料:https://cloud.baidu.com/product/imageprocess

    https://cloud.baidu.com/doc/IMAGEPROCESS/index.html

 

二、实验步骤

 

任务一:下载配置百度图像增强与特效的Java相关库及环境(占10%)。

首先领取百度图像增强与特效的免费资源

 

然后创建应用列表

 

进行调试

 

通过maven下载依赖项

 

 

任务二:了解百度图像增强与特效相关功能并进行总结(占20%)。

图像增强与特效对质量较低的图片进行去雾、对比度增强、无损放大等多种优化处理,重建高清图像;并提供黑白图像上色、图像风格转换、人像动漫化等多个图像特效API能力,满足网络营销、广告活动等多种业务需求。

百度图像增强与特效包括黑白图像上色、图像风格转换、人像动画、自定义图像风格、图像无损放大、图像去雾、图像对比度增强、图像清晰度增强、图像色彩增强等等。

 

任务三:完成图像增强GUI相关功能代码并测试调用,要求上传自己的模糊照片进行图像增强(占30%)

首先是主界面

 

选择照片

 

 

然后进行图像增强处理

 

 

可以发现清晰度增强。

 

任务四:完成图像特效GUI相关功能代码并测试调用,要求上传自己的照片进行图像特效(占30%)。

主界面和上面的是一样的选择照片

 

 

然后进行人像动漫画处理

 

 

二、实验总结

相较于上次百度翻译实验,这次实验出现了很多的问题,其中有一项就是images的值为空,这个问题困扰了我很长的时间,首先是把照片转换为64位然后在调用接口就是出现错误,然后我重新获取key就解决了这个问题,本次实验还学了如何使用GUI显示图片。

 

 

 

 

实验三:JFinal极速开发框架实验

一、实验要求

根据参考资料,学习JFinal极速开发框架的使用并如下任务:

 参考地址:https://jfinal.com/project/1

    

    参考步骤:

     1、打开JFinal参考地址:https://jfinal.com/project/1,下载JFinal 5.0.0 demo for maven.zip。

     2、学习Maven的使用及JFinal 5.0.0 demo for maven导入方法参考地址:https://jfinal.com/doc/1-1。

     3、运行JFinal:参考JFinal 5.0.0 demo for maven中的“启动说明.txt”。

     4、学习JFinal的基本功能,并完成本次试验任务。

 

 

二、实验步骤

 

任务一:了解Maven及其使用方法,总结其功能作用(占20%)

Maven 是一个用于构建和管理 Java 项目的强大工具。它提供了一种标准的项目结构,定义了项目对象模型(Project Object Model,POM),并自动处理项目构建、依赖管理、文档生成等任务

1. 项目结构和 POM 文件:

Maven 使用标准的项目结构,将源代码、资源文件和其他项目元素组织成统一的目录结构。

项目的元数据和配置信息存储在 pom.xml 文件中,其中包含了项目的依赖、插件、构建阶段等配置。

2. 依赖管理:

Maven 提供了强大的依赖管理机制,能够自动下载、管理和配置项目所需的第三方库和工具。

通过在 pom.xml 中定义依赖,Maven 负责下载这些依赖,并确保它们的版本和传递性依赖得到正确处理。

3. 构建生命周期和插件:

Maven 定义了一组构建生命周期,包括清理、编译、测试、打包、部署等阶段。

插件是用于执行构建任务的工具,Maven 支持各种插件,例如编译插件、测试插件、打包插件等。

4. 自动化构建:

Maven 支持自动化构建,通过命令行或集成到各种集成开发环境(IDE)中,简化了项目的构建过程。

常用命令包括 mvn clean(清理项目)、mvn compile(编译项目)、mvn test(运行测试)等。

5. 多模块项目:

Maven 支持多模块项目,允许将大型项目划分为独立的子模块,每个模块都有自己的 pom.xml 文件。

父项目可以统一管理依赖和插件的版本,子模块则可以继承这些配置。

6. 文档生成:

Maven 可以生成项目的文档,包括 Javadoc 文档和站点文档。

通过插件,Maven 可以生成丰富的项目报告,如代码覆盖率、静态代码分析报告等。

7. 集成 CI/CD:

Maven 可以集成到持续集成(CI)和持续交付(CD)流程中,自动触发构建、测试和部署任务。

8. 插件生态系统:

Maven 拥有庞大的插件生态系统,社区提供了大量的插件,覆盖了各种构建和开发任务。

总的来说,Maven 简化了 Java 项目的构建和管理过程,通过统一的项目结构和 POM 文件,使得项目的配置和依赖管理变得更加容易和一致。它是 Java 生态系统中被广泛使用的构建工具之一

 

任务二:学习JFinal框架,基于Maven建立JFinal工程,并对JFinal框架功能进行总结介绍(占30%)

JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python等动态语言的开发效率。但目前此框架不是主流框架,大部分公司极少使用。JFinal 由Handler、Interceptor、Controller、Render、Plugin 五大部分组成

下载了JFinal 5.0.0 demo for maven并导入到了IDEA建立对应的数据库经过配置可以正常运行,

以下是运行后的正常界面

 

 

Jfinal总结

JFinal是一个轻量级、易用且高性能的Java Web框架,适用于中小型项目的快速开发。它的设计理念是简洁而实用,提供了丰富的功能和灵活的扩展机制。JFinal采用了经典的MVC设计模式,将应用程序划分为模型、视图和控制器三个主要组件,以提高代码的组织性和可维护性。并且JFinal框架的API设计非常简洁,易于学习和使用。是一个轻量级的非常适合学习的框架。

任务三:基于JFinal完成一个简单的学生信息管理系统(要求实现学生信息的增删改查)(占40%)

首先是主界面

点击之后进入学生信息管理界面可以查看学生的基本信息

 

然后增加学生的信息

 

然后可以删除学生的信息

 

修改学生的信息

 

 

二、实验总结

通过本次实验学习使用了JFINAl框架,发现jfinal框架用处很多,很便捷,便于短时间内web的开发,节约了很多的时间。JFinal提供的API使得我们开发更加高效,可以更加灵活的运用它所提供的一些功能模块。我的jfinal业务逻辑认识还有待提升。

 

 

 

 

大作业:

一、实验要求

各位同学可根据自身情况进行选择:

    选项一:根据实验一、二、三完成如下任务:

        任务一:基于Jfinal构建信息管理系统,要求包含用户管理,翻译业务模块管理,图片优化模块管理(占30%)。

        任务二:要求不同用户登录后可进行文字翻译和图片优化业务处理,并且可查看提交业务处理结果,时间,处理列表,图形汇总等(占30%)。

        任务三:要求管理员登录后可查看不同用户的各项业务使用情况(占30%)。

        实验总结:(占10%)

 

    选项二:基于这学期QQ群里发布的各类软件开发设计比赛题目的项目。

        提交的作业要注明题目来源,写清题目要求,附上官网赛题地址。

        可选比赛列表包括:2023石家庄“九天杯”人工智能命题打榜赛、2023年第五届全国高校计算机能力挑战赛、2023-2024年中国计算机应用技术大赛、2023 CCF大数据与计算智能大赛、全国高校计算机能力挑战赛、“软件杯”程序设计大赛、全国计算机设计大赛等。

 

 

 

二、实验步骤

 

任务一:基于Jfinal构建信息管理系统,要求包含用户管理,翻译业务模块管理,图片优化模块管理(占30%)。

首先是主界面登录分为管理员和普通用户

 

普通用户登陆后包含三个模块

翻译模块

 

 

图片处理模块

 

 

历史记录查看

 

管理员模块

学生信息处理

 

删除学生信息

 

添加学生信息

 

 

翻译业务模块

 

图片处理模块

 

历史记录查看模块

 

 

任务二:要求不同用户登录后可进行文字翻译和图片优化业务处理,并且可查看提交业务处理结果,时间,处理列表,图形汇总等(占30%)。首先是主界面登录分为管理员和普通用户

 

普通用户登陆后包含三个模块

翻译模块

 

 

图片处理模块

 

 

历史记录查看

 

管理员模块

学生信息处理

 

删除学生信息

 

添加学生信息

 

 

翻译业务模块

 

图片处理模块

 

历史记录查看模块

 

 

 

 

任务三:要求管理员登录后可查看不同用户的各项业务使用情况(占30%)。

管理员模块

学生信息处理

 

删除学生信息

 

添加学生信息

 

 

翻译业务模块

 

图片处理模块

 

历史记录查看模块

 

 

二、实验总结

相对来说大作业比前几次作业做起来难,花费了很长的时间,最难的地方就是看不懂jfinal后台的运行逻辑,想了很长时间才想通,结合前三个实验,翻译,图片处理,信息管理还算简单,调用百度翻译和图片处理的接口进行,最重要的还是图片格式的处理,在这方面花了很长的时间。