亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java在線辦公系統開發入門教程

標簽:
Java
概述

本文介绍了Java在线办公系统开发的相关内容,包括系统的基本功能模块和开发环境的搭建。详细讲解了Java在开发中的优势,并提供了用户管理、文件管理、日程安排等功能模块的设计示例。整个文章围绕java在线办公系统开发进行了全面的阐述。

Java在线办公系统简介

在线办公系统是一种通过网络技术实现办公流程自动化、信息共享的系统。它支持各种办公功能,如用户管理、文件管理、日程安排等,旨在提高工作效率和协同工作能力。

在线办公系统概念

在线办公系统是指通过网络技术,实现远程办公、信息共享、协同工作的系统。它通常包括以下几个方面:

  1. 用户管理:包括用户注册、登录、权限管理等功能。
  2. 文件管理:支持文件上传、下载、共享等功能。
  3. 日程安排:支持个人和团队的日程管理、提醒功能。
  4. 通知和消息:用户之间的信息传递和通知。
  5. 任务管理:分配和跟踪任务进度。

Java在在线办公系统开发中的优势

Java是一种广泛使用的编程语言,适合开发大规模、复杂的企业级应用。在开发在线办公系统时,Java具有以下优势:

  1. 跨平台性:Java的“一次编写,到处运行”特性使得开发的应用可以在多种操作系统上运行。
  2. 强大的生态系统:Java拥有丰富的库和框架,如Spring、Hibernate、MyBatis等,可以提高开发效率。
  3. 安全性:Java提供了安全性和稳定性较高的运行环境。
  4. 成熟的支持:Java有庞大的开发者社区和丰富的资源支持。

在实际开发中,这些优势可以通过具体的框架和工具来体现。例如,使用Spring框架可以简化业务逻辑的实现,提高代码可维护性;Hibernate或MyBatis可以简化数据库操作,提升开发效率。

开发环境搭建

开发环境的搭建是开发Java在线办公系统的基础。以下是搭建开发环境的详细步骤:

安装JDK

JDK(Java Development Kit)是Java开发工具包,包含了Java运行所需的环境及开发工具。以下是安装JDK的步骤:

  1. 下载JDK:访问Oracle官方网站或OpenJDK官方网站下载JDK安装包。
  2. 安装JDK:按照安装向导完成安装,通常选择默认安装路径。
  3. 配置环境变量
    • 设置JAVA_HOME环境变量指向JDK的安装路径。
    • 添加%JAVA_HOME%\binPath环境变量中。

配置环境变量的示例代码如下:

# 设置JAVA_HOME
set JAVA_HOME=C:\Program Files\Java\jdk-11.0.1
# 添加到Path
set PATH=%JAVA_HOME%\bin;%PATH%

安装IDE(如IntelliJ IDEA或Eclipse)

IDE(Integrated Development Environment)是开发Java应用的重要工具。以下是安装IDE的步骤:

  1. 下载并安装IntelliJ IDEA或Eclipse

    • 访问官方网站下载对应版本的安装包。
    • 按照安装向导完成安装。
  2. 配置IDE
    • 在IntelliJ IDEA中,创建一个新的Java项目,并设置项目名和源代码目录。
    • 在Eclipse中,选择File -> New -> Java Project,设置项目名和源代码目录。

示例代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

配置数据库(如MySQL)

数据库是存储和管理数据的重要工具。以下是配置MySQL数据库的步骤:

  1. 安装MySQL

    • 访问MySQL官方网站下载MySQL安装包。
    • 按照安装向导完成安装。
  2. 配置MySQL

    • 启动MySQL服务。
    • 登录MySQL并创建数据库。
      .
    • 创建数据库的示例代码如下:
      CREATE DATABASE myoffice;
      USE myoffice;
  3. 连接MySQL和Java项目

    • 在IDE中配置数据库连接。
    • 使用JDBC(Java Database Connectivity)连接到MySQL。
    • 示例代码如下:

      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.SQLException;
      
      public class DatabaseConnection {
       public static void main(String[] args) {
           String url = "jdbc:mysql://localhost:3306/myoffice";
           String user = "root";
           String password = "password";
      
           try {
               Connection conn = DriverManager.getConnection(url, user, password);
               System.out.println("Connected to database!");
               conn.close();
           } catch (SQLException e) {
               System.out.println("Connection failed!");
               e.printStackTrace();
           }
       }
      }
基本功能模块设计

在线办公系统的基本功能模块包括用户管理模块、文件管理模块和日程安排模块。以下是每个模块的详细设计:

用户管理模块

用户管理模块负责管理用户的注册、登录、权限管理等功能。

功能设计

  1. 用户注册:用户可以通过注册表单提交基本信息。
  2. 用户登录:用户通过登录表单提交用户名和密码。
  3. 权限管理:管理员可以管理用户的权限,如添加、删除、修改权限。

示例代码

用户注册表单的HTML代码示例:

<form action="register" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username">
    <br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password">
    <br>
    <input type="submit" value="注册">
</form>

用户注册处理的Java代码示例:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserRegistrationServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 将用户信息存储到数据库
        // 示例代码:
        // User user = new User(username, password);
        // userService.register(user);

        // 跳转到登录页面
        response.sendRedirect("login.jsp");
    }
}

用户登录表单的HTML代码示例:

<form action="login" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username">
    <br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password">
    <br>
    <input type="submit" value="登录">
</form>

用户登录处理的Java代码示例:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserLoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 验证用户信息
        // 示例代码:
        // User user = userService.findUser(username, password);
        // if (user != null) {
        //     request.getSession().setAttribute("user", user);
        //     response.sendRedirect("dashboard.jsp");
        // } else {
        //     response.sendRedirect("login.jsp?error=true");
        // }
    }
}

权限管理示例代码:

public class PermissionManagementServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String permission = request.getParameter("permission");

        // 更新用户的权限
        // 示例代码:
        // userService.updatePermission(username, permission);
    }
}

文件管理模块

文件管理模块负责文件的上传、下载和共享。

功能设计

  1. 文件上传:用户可以上传文件到服务器。
  2. 文件下载:用户可以从服务器下载文件。
  3. 文件共享:用户可以将文件共享给其他用户。

示例代码

文件上传的HTML代码示例:

<form action="upload" method="post" enctype="multipart/form-data">
    <label for="file">文件:</label>
    <input type="file" id="file" name="file">
    <br>
    <input type="submit" value="上传">
</form>

文件上传处理的Java代码示例:

import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;

@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Part part = request.getPart("file");
        String fileName = getFilename(part.getSubmittedFileName());
        part.write(fileName);

        // 跳转到文件列表页面
        response.sendRedirect("fileList.jsp");
    }

    private String getFilename(String filename) {
        String result = "";
        if (filename != null && !filename.isEmpty()) {
            result = new File(filename).getName();
        }
        return result;
    }
}

文件下载的HTML代码示例:

<a href="download?filename=example.pdf">下载example.pdf</a>

文件下载处理的Java代码示例:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileDownloadServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String filename = request.getParameter("filename");
        File file = new File(filename);

        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");

        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] buffer = new byte[fileInputStream.available()];
        fileInputStream.readFully(buffer);
        fileInputStream.close();

        response.getOutputStream().write(buffer);
        response.getOutputStream().flush();
        response.getOutputStream().close();
    }
}

文件共享的HTML代码示例:

<a href="share?filename=example.pdf&user=alice">共享example.pdf给alice</a>

文件共享处理的Java代码示例:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FileShareServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String filename = request.getParameter("filename");
        String user = request.getParameter("user");

        // 共享文件给用户user
        // 示例代码:
        // userService.shareFile(user, filename);
    }
}

日程安排模块

日程安排模块负责个人和团队的日程管理、提醒功能。

功能设计

  1. 日程添加:用户可以添加新的日程。
  2. 日程查看:用户可以查看当前和未来的日程。
  3. 提醒功能:系统会在日程开始前发送提醒通知。

示例代码

日程添加的HTML代码示例:

<form action="addSchedule" method="post">
    <label for="title">日程标题:</label>
    <input type="text" id="title" name="title">
    <br>
    <label for="date">日期:</label>
    <input type="date" id="date" name="date">
    <br>
    <label for="time">时间:</label>
    <input type="time" id="time" name="time">
    <br>
    <input type="submit" value="添加">
</form>

日程添加处理的Java代码示例:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ScheduleServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String title = request.getParameter("title");
        String date = request.getParameter("date");
        String time = request.getParameter("time");

        // 将日程信息存储到数据库
        // 示例代码:
        // Schedule schedule = new Schedule(title, date, time);
        // scheduleService.add(schedule);

        // 跳转到日程列表页面
        response.sendRedirect("scheduleList.jsp");
    }
}

日程查看的HTML代码示例:

<table>
    <tr>
        <th>标题</th>
        <th>日期</th>
        <th>时间</th>
    </tr>
    <tr>
        <td>会议1</td>
        <td>2023-10-01</td>
        <td>10:00</td>
    </tr>
    <tr>
        <td>会议2</td>
        <td>2023-10-02</td>
        <td>11:00</td>
    </tr>
    <!-- 更多日程列表 -->
</table>

日程查看处理的Java代码示例:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ScheduleListViewServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 查询日程列表
        // 示例代码:
        // List<Schedule> schedules = scheduleService.findAll();
        // request.setAttribute("schedules", schedules);
        // request.getRequestDispatcher("scheduleList.jsp").forward(request, response);
    }
}

提醒功能的Java代码示例:

import java.util.Timer;
import java.util.TimerTask;

public class ScheduleReminderServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 检查所有日程并发送提醒
        // 示例代码:
        // Timer timer = new Timer();
        // timer.schedule(new TimerTask() {
        //     @Override
        //     public void run() {
        //         List<Schedule> schedules = scheduleService.findUpcomingSchedules();
        //         for (Schedule schedule : schedules) {
        //             // 发送提醒
        //         }
        //     }
        // }, new Date(), 1000 * 60 * 60 * 24); // 每天检查一次
    }
}
Java核心技术和框架学习

开发在线办公系统需要掌握Java的核心技术和框架。以下是需要学习的技术和框架:

Servlet和JSP基础

Servlet和JSP是Java Web开发的基石。Servlet是Java编写的服务器端小程序,用于处理HTTP请求。JSP(JavaServer Pages)是基于Servlet的,用于编写动态网页。

Servlet示例代码

创建一个简单的Servlet来响应HTTP请求:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorldServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.getWriter().println("<h1>Hello, World!</h1>");
    }
}

JSP基础示例代码

一个简单的JSP页面示例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello JSP</title>
</head>
<body>
    <h1>Hello, JSP!</h1>
</body>
</html>

Spring框架基础

Spring是一个开源的Java平台,提供了一套全面的框架来构建企业级应用。Spring的核心模块有IoC(控制反转)、AOP(面向切面编程)等。

Spring IoC示例代码

使用Spring IoC容器管理Bean:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringExample {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        MessageService messageService = (MessageService) context.getBean("messageService");
        String message = messageService.getMessage();
        System.out.println(message);
    }
}

Spring AOP示例代码

使用Spring AOP进行日志记录:

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example.service.*.*(..))")
    public void logMethodCall() {
        System.out.println("Method called");
    }
}

Hibernate或MyBatis数据持久化技术

Hibernate和MyBatis是Java应用中常用的ORM(对象关系映射)框架,用于实现对象和数据库之间的映射。

Hibernate示例代码

使用Hibernate保存和查询对象:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateExample {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        User user = new User("John Doe", "[email protected]");
        session.save(user);

        session.getTransaction().commit();
        session.close();
    }
}

MyBatis示例代码

使用MyBatis保存和查询对象:

import org.apache.ibatis.session.SqlSession;

public class MyBatisExample {
    public static void main(String[] args) {
        SqlSession session = MyBatisUtil.getSqlSession();

        User user = new User();
        user.setName("Jane Doe");
        user.setEmail("[email protected]");

        session.insert("insertUser", user);

        session.commit();
        session.close();
    }
}
实战案例:开发简易在线办公系统

开发一个简易的在线办公系统可以帮助理解实际的开发过程。以下是一个简单的在线办公系统开发流程:

需求分析

在线办公系统需要以下几个功能:

  1. 用户注册和登录。
  2. 文件上传和下载。
  3. 日程添加和查看。

功能模块实现

根据需求分析,实现各个功能模块。

用户注册和登录

实现用户注册和登录的功能:

<!-- 注册表单 -->
<form action="register" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username">
    <br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password">
    <br>
    <input type="submit" value="注册">
</form>

<!-- 登录表单 -->
<form action="login" method="post">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username">
    <br>
    <label for="password">密码:</label>
    <input type="password" id="password" name="password">
    <br>
    <input type="submit" value="登录">
</form>
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 将用户信息存储到数据库
        // 示例代码:
        // User user = new User(username, password);
        // userService.register(user);

        // 跳转到登录页面
        response.sendRedirect("login.jsp");
    }
}

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 验证用户信息
        // 示例代码:
        // User user = userService.findUser(username, password);
        // if (user != null) {
        //     request.getSession().setAttribute("user", user);
        //     response.sendRedirect("dashboard.jsp");
        // } else {
        //     response.sendRedirect("login.jsp?error=true");
        // }
    }
}

文件上传和下载

实现文件上传和下载的功能:

<!-- 文件上传表单 -->
<form action="upload" method="post" enctype="multipart/form-data">
    <label for="file">文件:</label>
    <input type="file" id="file" name="file">
    <br>
    <input type="submit" value="上传">
</form>

<!-- 文件下载链接 -->
<a href="download?filename=example.pdf">下载example.pdf</a>
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@MultipartConfig
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Part part = request.getPart("file");
        String fileName = getFilename(part.getSubmittedFileName());
        part.write(fileName);

        // 跳转到文件列表页面
        response.sendRedirect("fileList.jsp");
    }

    private String getFilename(String filename) {
        String result = "";
        if (filename != null && !filename.isEmpty()) {
            result = new File(filename).getName();
        }
        return result;
    }
}

public class FileDownloadServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String filename = request.getParameter("filename");
        File file = new File(filename);

        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");

        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] buffer = new byte[fileInputStream.available()];
        fileInputStream.readFully(buffer);
        fileInputStream.close();

        response.getOutputStream().write(buffer);
        response.getOutputStream().flush();
        response.getOutputStream().close();
    }
}

日程添加和查看

实现日程添加和查看的功能:

<!-- 日程添加表单 -->
<form action="addSchedule" method="post">
    <label for="title">日程标题:</label>
    <input type="text" id="title" name="title">
    <br>
    <label for="date">日期:</label>
    <input type="date" id="date" name="date">
    <br>
    <label for="time">时间:</label>
    <input type="time" id="time" name="time">
    <br>
    <input type="submit" value="添加">
</form>

<!-- 日程列表 -->
<table>
    <tr>
        <th>标题</th>
        <th>日期</th>
        <th>时间</th>
    </tr>
    <tr>
        <td>会议1</td>
        <td>2023-10-01</td>
        <td>10:00</td>
    </tr>
    <tr>
        <td>会议2</td>
        <td>2023-10-02</td>
        <td>11:00</td>
    </tr>
    <!-- 更多日程列表 -->
</table>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ScheduleServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String title = request.getParameter("title");
        String date = request.getParameter("date");
        String time = request.getParameter("time");

        // 将日程信息存储到数据库
        // 示例代码:
        // Schedule schedule = new Schedule(title, date, time);
        // scheduleService.add(schedule);

        // 跳转到日程列表页面
        response.sendRedirect("scheduleList.jsp");
    }
}

public class ScheduleListViewServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 查询日程列表
        // 示例代码:
        // List<Schedule> schedules = scheduleService.findAll();
        // request.setAttribute("schedules", schedules);
        // request.getRequestDispatcher("scheduleList.jsp").forward(request, response);
    }
}

测试与调试

进行功能测试和调试是确保系统稳定运行的重要步骤。可以通过模拟用户操作来测试各个功能模块。

  1. 单元测试:使用JUnit等工具编写单元测试,验证每个模块的功能。
  2. 集成测试:将各个模块集成起来,进行端到端的测试。

示例代码:

import org.junit.Test;
import static org.junit.Assert.*;

public class UserRegistrationTest {
    @Test
    public void testUserRegistration() {
        User user = new User("testuser", "testpassword");
        UserService userService = new UserService();
        userService.register(user);
        User registeredUser = userService.findUser("testuser");
        assertNotNull(registeredUser);
    }
}

集成测试

import org.junit.Test;
import static org.junit.Assert.*;

public class IntegrationTest {
    @Test
    public void testUserLogin() {
        UserService userService = new UserService();
        User user = new User("testuser", "testpassword");
        userService.register(user);

        User loginUser = userService.findUser("testuser", "testpassword");
        assertNotNull(loginUser);
    }
}
系统部署与维护

完成开发后,需要将系统部署到生产环境,并进行维护和更新。

部署到服务器

将开发好的Java应用部署到服务器上。通常使用Tomcat或Jetty等应用服务器。

  1. 打包应用:使用IDE或命令行工具将Java项目打包成WAR或JAR文件。
  2. 上传到服务器:使用FTP或SCP等工具将打包好的文件上传到服务器。
  3. 配置服务器:将WAR或JAR文件部署到应用服务器中。

示例代码:

# 打包WAR文件
mvn package

# 一个示例命令行,上传WAR文件到Tomcat服务器
scp target/myoffice.war user@server:/opt/tomcat/webapps/

系统维护和更新

系统上线后,需要定期进行维护和更新,以确保系统的稳定性和安全性。

  1. 监控系统状态:使用监控工具(如Zabbix、Prometheus)监控服务器的运行状态。
  2. 日志管理:定期检查和分析日志文件,发现并解决问题。
  3. 代码更新:根据需求更新代码,并重新部署到服务器。

示例代码:

# 更新代码
git pull

# 代码打包并部署到服务器
mvn clean package
scp target/myoffice.war user@server:/opt/tomcat/webapps/

常见问题解决

开发和维护过程中,可能会遇到各种问题,以下是一些常见的问题及解决方案。

  1. 内存溢出:增加JVM的内存限制。
  2. 数据库连接问题:检查数据库配置和连接池设置。
  3. 安全性问题:加强权限管理和数据加密。

示例代码:

# 增加JVM内存限制
java -Xms256m -Xmx512m -jar myoffice.war

通过以上步骤,你可以开发一个简易的在线办公系统,并将其成功部署到生产环境。希望这个教程能够帮助你理解Java在线办公系统的开发过程。如果需要更多详细的资料,可以参考官方文档或访问慕课网等在线学习资源。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消