java毕业设计——基于JSP+sqlserver的邮件系统设计与实现(毕业论文+程序源码)——邮件系统

基于JSP+sqlserver的邮件系统设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于JSP+sqlserver的邮件系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

1、项目简介

  1. 随着网络的逐渐普及,Email在人们生活中应用日益广范,除了专业的邮件服务系统之外,一般大型网站与单位都提供了email服务。因此,本次设计是通过对SMTP、pop3协议的熟悉和理解、以及对JSP编程和网页设计技能的掌握,开发出一个简单的B/S结构下的邮件服务系统。能完成邮件的发送、接收、以及附件处理功能等。主要运用的软件有Eclipse, SQL Server,在JAVA环境下,利用JSP编程来实现邮件系统的各种功能。该系统主要支持用户的身份验证,用户只有通过正确注册后才能进入该系统。在系统中可以查看自己的邮件也可以发送邮件到任意的邮箱,发邮件的时候可以进行附件的发送。通过本次课题的学习和研究掌握了基本的web编程技能,更实践了自我的动手能力。同时认识到在信息化高速发展的今天,高效、快速、方便的邮件收发系统将得到越来越多的人关注和使用,它将给人们带来更方便快捷的生活。


2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:9970个字27页
包含内容:全套源码+配整论文
开题报告、论文答辩、课题报告等ppt模板推荐下载方式:
在这里插入图片描述


3、关键词

B/S;邮件系统;SMTP;POP3;JSP

4、毕设简介

提示:以下为毕业论文的简略介绍,项目完整源码及完整毕业论文下载地址见文末。

1 引言
1.1 课题背景
随着网络的逐渐普及现在的人们对于电子邮件已经不再陌生了,自从电子邮件进入人们的生活以来,人们对传统的信件已经不再依赖,它的可靠、快速、方便、灵活、廉价、内容丰富等特点都在使我们更加喜欢和接受它。近年来,电子邮件飞速发展,可以看到在比较专业、服务比较全面周到的网站基本上都有免费电子邮件服务。他们大部分都是通过各种软件进行开发的。而在当今很流行的Java技术中就包含有JavaMail API,它提供了大量的类和接口来与网络邮件传输。关于Jsp,最近两年,Jsp技术发展十分迅速,它的兴起让IT人员耳目一新,实现了长期以来的梦想。它的出现无疑是当今计算机技术通向计算时代的一个非常重要的里程碑。因此,本次毕业设计就是利用Java技术来实现简单的邮件发送和接收的功能。

1.2 课题研究意义
对于用户来说一款简单,方便,快捷的邮件收发系统将会在很大程度上为用户提供满意的服务,制作一款能满足用户需求的邮件收发系统是每一个设计者所追求的目标。因此希望通过本次设计完成一个简单的邮件收发系统,实现邮件的接收与发送,并能完成附件的传输,同时能实现邮件用户登录管理及邮件删除等功能。从课题研究中更深入的了解邮件收发系统的设计原理,发现设计过程中的不足和知识的欠缺,为今后做出更好的设计打下一个坚实的基础。

2 相关技术和开发平台
2.1 开发环境的选择
整个系统开发完全采用Browser/Server模式,开发平台为Java平台,以Tomcat为JSP引擎和Web服务器,后台数据库使用SQL Server 。
在开发模式上选择Browser/Server模式,是因为B/S模式有以下优点:
1.开发成本及维护成本降低。由于B/S架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。
2.良好的安全性能,防火墙技术可以保证后台数据库的安全性。所有客户端请求都是通过DBMS来访问数据库,从而大大减少了数据直接暴露的风险。因此系统的架构就采用了B/S设计模式。

2.2 JSP技术

  1. JSP简介
    JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准, 在传统的网页HTML文件(.htm,.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。
    省略

  2. SQL简介
    在本次毕业设计中,应用到了数据库,在毕业设计中采用的是SQL数据库系统,所以在这个地方有必要对其进行简单的介绍。
    SQL是一种数据库所用的标准语言,全名为Structured Query Language。Microsoft SQL Server是基于SQL的客户/服务器数据库。它是一个高性能、多用户的关系型数据库,具有高容量的事务处理及决策支持功能,使用户能够用它建立大范围的分布式系统。
    省略

2.3 系统所需协议介绍
SMTP(简单邮件传输协议)负责邮件的发送和传输,使用TCP25端口,首先用户写好邮件之后发送给SMTP服务器,SMTP将邮件转换为ASCII码并添加报头,发送出去,邮件在INTERNET中路由交换到达目的地的邮件服务器,对方的SMTP将邮件的ASCII码解码。

SMTP协议是随着Internet的发展逐渐规范化和进一步完善的。SMTP协议最早在RFC821中被定义,它提供了Internet上两个节点之间传送信息的一种方式。SMTP协议非常的简单和直观,在RFC821中,SMTP由一些通过ASCII码表示的命令字组成,通过这些命令字,两个节点之间(客户机和服务器)可以建立SMTP连接,并进行信息传递。

POP 协议(电子邮局协议)是一种允许用户从邮件服务器收发邮件的协议。它有两种版本,即POP2和POP3,都具有简单的电子邮件存储转发功能。POP2与POP3本质上类似,都属于离线式工作协议,但是由于使用了不同的协议端口,两者并不兼容。与 SMTP协议相结合,POP3是目前最常用的电子邮件服务协议。

POP3除了支持离线工作方式外,还支持在线工作方式。在离线工作方式下,用户收发邮件时,首先通过POP3客户程序登录到支持POP3协议的邮件服务器,然后发送邮件及附件;接着,邮件服务器将为该用户收存的邮件传送给POP3客户程序,并将这些邮件从服务器上删除;最后,邮件服务器将用户提交的发送邮件,转发到运行SMTP协议的计算机中,通过它实现邮件的最终发送。在为用户从邮件服务器收取邮件时,POP3是以该用户当前存储在服务器上全部邮件为对象进行操作的,并一次性将它们下载到用户端计算机中。一旦客户的邮件下载完毕,邮件服务器对这些邮件的暂存托管即告完成。使用POP3,用户不能对他们贮存在邮件服务器上的邮件进行部分传输。离线工作方式适合那些从固定计算机上收发邮件的用户使用。

当使用POP3在线工作方式收发邮件时,用户在所用的计算机与邮件服务器保持连接的状态下读取邮件。用户的邮件保留在邮件服务器上。

2.4 系统所需配置简介

  1. Tomcat
    Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。
    省略

  2. Eclipse和MyEclipse
    相比于大量的JAVA开发工具,不可否认Borland的JBuider和Eclipse是最可靠也是最普遍的。相比于JBuider,Eclipse小巧,速度上更是大大超越了JBuider,所以这次设计用的是Eclipse。
    Eclipse是一个开放源代码的、与NetBeans、Sun ONE Studio和Borland JBuider类似的一种基于Java的整合型可扩展开发平台,也是目前最著名的开源项目之一,就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。其未来的目标不仅仅是成为专门开发Java程序的IDE环境,根据Eclipse的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。
    省略

3 系统需求分析与总体设计
3.1 系统设计目的
本次毕业设计所要完成的,是一个tomcat服务器下的邮件收发平台,该平台功能类似于OUTLOOK,但是由于时间的关系,只是实现了OUTLOOK的部分功能,但是该平台是基于WEB的一个B/S应用程序,它不用安装传统的C/S程序,只是需要在任意的客户端上访问该服务器就可以实现邮件收发功能。
3.2 系统功能需求分析
由于该WEB平台是通过SMTP协议来进行发送邮件,POP3协议来接收邮件,所以该平台只是相当于一个代理邮件系统。该平台应该实现用户的登录验证,只有拥有对该邮箱有合法权限的用户才能进行登录,可以有多个用户同时对该邮箱(所代理的邮箱)进行控制。而在发邮件系统中,需要用户输入要送发邮件的对方邮箱名称,可以进行本地计算机资源传输,也就是添加附件的功能。在收邮件系统中,邮箱将自动将所有邮件包括其基本信息显示在收件箱中,并且将带附件的邮件的附件自动保存在本地计算机特定路径下。
3.3 系统总体构架
系统总体模块框架如下图所示,用户在不同的模块通过相关操作完成对邮件的接收和发送并实现对邮件的管理。系统总体结构分为四个模块,关于每个模块的具体功能和实现将在后面进行介绍。

在这里插入图片描述

图1 设计系统结构图
3.4 系统功能模块简介
1.登录模块
要求用户输入正确的用户名,密码。如果输入信息合法则登录成功进入邮件发送模块。如果输入信息某一项错误,则显示该用户名不存在,登录失败。
在这里插入图片描述

图2 登录流程图
2.邮件发送模块
用户发送邮件,需要输入收件人邮箱地址,邮件标题,正文。如果需要添加附件则点击“浏览”进行添加。
如果输入的收件人邮箱地址错误或文本框至少有一项为空,则邮件发送失败,反之邮件发送成功,转到邮件发送成功界面。
在这里插入图片描述

图3 发送邮件流程图

  1. 邮件接收模块
    通过邮件发送界面点击超连接进入邮件接收界面,系统将所有接收的邮件信息显示出来,包括发件人、主题、发送时间、邮件大小等。如果是带有附件的邮件,附件则自动保存到本地计算机特定路径下。
  2. 邮件管理模块
    在收邮件箱内点击你要读取的邮件即可进入该邮件了解其中的具体内容,进入某一封具体信件后将可以完整的看到该信件的具体内容,同样可以点击页面上的超连接进行回复或继续查看其他信件。

3.5 数据库设计
本系统的数据库只涉及到了用户登录信息一张表格,主要用来检查用户是否有权限登录该邮箱。

表1 用户信息表
在这里插入图片描述

4 系统详细设计及实现
4.1 系统流程说明
该系统首先需要用户填写合法的登录信息,系统对信息进行验证。验证失败则返回登录页面并显示相应错误信息,验证成功则进入收件箱列表。然后用户可以根据自己的需要可以选择读取具体某一封信件也可以进入发件箱来发送邮件。下面用一张流程图来进行形象的说明。

在这里插入图片描述

图4 系统流程图

4.2 用户管理模块
该部分数据库方面只是涉及到一张Userinfo表,有3个字段,分别是标识列(主键):ID (int(4));用户名:username(varchar(50));密码:pass(varchar(50));用户邮箱:sever(varchar(50))。当用户进入登录页面后,要求输入用户名和密码,而且用户名不能为空,如果为空validator验证框架将会判断,而且阻止表单提交。
表单提交后在配置文件Struts-config.xml中找到相应的Action,再通过该配置的name属性找到相应的ActionForm,对它进行表单值的填充,然后进入真正的控制器处理程序LoginAction的execute方法,在该方法中将用户名,密码作为参数传入读取数据库的数据处理层中,由JTDS建立驱动,连接,构建SQL语句,用预编译对象执行SQL语句,再用它的SET方法传送参数,由于是一个查询语句有返回值,用ResultSet对象接收,进行读取,如果存在,也就是说存在用户名和密码都和用户输入信息相同,而且在同一行,则返回一个Boolean TRUE,否则没找到就返回一个FALSE。如果返回的值为false,则返回一个mapping对象,该对象在配置文件中找到相应的跳转路径(该处理返回一个错误页面)。如果返回true,那么程序继续运行,因为程序的设计要求是验证成功后进入的是读取全部邮件的一个列表,所以在下面的程序中要对邮件进行读取,并返回所有的信息。如果返回true后,进入真正的邮件接收处理程序,在得到所有邮件的信息后把它们用ArrayList集合进行保存,并通过request请求将结果集返回。

在这里插入图片描述

图5 用户登录框
当用户登录信息为空时所显示的页面如图6所示。

在这里插入图片描述

图6 非法用户登录页面
当用户登录名不存在时所显示的页面如图7所示。

在这里插入图片描述

图7 用户名不存在时显示的页面
主要代码:
html:form action=“/login.do” method=“post”>
该代码是在Login.jsp中实现由用户提交表单后提交到的控制器位置。提交方法为post.

<action name="login" path="/login" scope="session" 
  type="com.action.LoginAction" input="/Login.jsp">
  <forward name="recev" path="/reseviAll.jsp"></forward>
  <forward name="return" path="/Login.jsp"></forward>
  </action>

而在Struts框架中的关键是对核心配置文件Struts-Config.xml的配置, 该配置决定了整个应用程序的程序控制。该代码是在对Login.jsp提交上来的Action和ActionForm的查找做部署。名字为"login",提交路径为path=“/login”,生存周期为会话,该控制器的物理路径为type=“com.action.LoginAction”,<forward 标签为当控制器处理完后返回一个Actionorward的对象,该对象将在该标签内对应,查找到对应的name属性后,根据path跳转到对应的jsp.该action的name属性将找对应的ActionForm进行相应的表单填充。actionForm的配置代码如下

<form-bean name="login" type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="name" type="java.lang.String"></form-property>
        <form-property name="pass" type="java.lang.String"></form-property>
            <form-property name="server" type="java.lang.String"></form-property>
  </form-bean>

该ActionForm是一个动态的ActionForm,该类继承于
org.apache.struts.validator.DynaValidatorForm,在<form-property标签里面指定他的属性和类型。
在对表单的非空验证的时候用了Validator验证框架,该框架的配置文件如下:

 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF alidator-rules.xml,
                                                  /WEB-INF alidation.xml"/>
      </plug-in>
对应的配置文件的实现如下代码:
<form name="login">
  <field property="name" depends="required">
  <arg0 key="name"/>
  </field>
   <field property="pass" depends="required">
  <arg0 key="pass"/>
  </field>
</form>
</formset>

上面的代码是对表单的非空验证,是对应的要验证的表单名字,中property为指定要验证的表单控件名字,depends为验证方法,该方法在Validator验证框架中已经定义。可以查阅alidator-rules.xml配置文件。
为要输出信息的差数,该差数可以在资源文件中定义。

4.3 邮件发送模块
登录成功后点击超链接进入发邮件箱,在这里用户可以输入相应的信息,可超链接到发件箱,输入内容表单提交,进入控制器SendM,在execute方法里调用邮件发送核心代码(SendText.java),在该方法中利用SMTP发送邮件的代码,发送邮件主要需要4个主要的对象,Session对象,建立连接;Prop是Properties的对象,Properties是java.util包下的类,是一个集合类,封装SMTP协议的类;MimeMessage类,通过该对象来实现网络数据的传输,将发件人添加到列表中;sendmail为从表单中提交来的路径的字符串形式。通过他将正文和附件内容分开封装进行传输;附件以DataSource类型保存。发送邮件,从MimeMessage对象中获得发送人的地址列表,发送成功后进入secces界面。

在这里插入图片描述

图8 邮件发送页面

主要代码:

public class sendText
{	public void send(String a,String b,String c,String e){
	String path =e;
	String sendmail=c ;
	String tilte = a;
	String content = b;
		try
	{Properties prop = new Properties();
		prop.put("mail.smtp.host", "smtp.163.com");
		设置smtp主机
		prop.put("mail.smtp.auth", "true");
        使用smtp身份验证
				 Session session = Session.getDefaultInstance(prop,
	                new Authenticator() {
	                    protected  javax.mail.PasswordAuthentication getPasswordAuthentication() {
	                        return new javax.mail.PasswordAuthentication("wen870105",
	                                "wenshengyong");
	                    }
	                });
		 session.setDebug(true);
	 MimeMessage mess = new MimeMessage(session);
				mess.addRecipient(Message.RecipientType.TO, new InternetAddress(
				sendmail));
		InternetAddress from = new InternetAddress("wen870105@163.com");// 发件人
		mess.setFrom(from);
		mess.setSubject(tilte);
		 mess.setSentDate(new Date());
		 定义一个Multipart对象用来装整个邮件的正文部分
		Multipart multipart = new MimeMultipart();
		 定义一个MimeBodyPart对象,用来装邮件的文本内容然后加入Multipart对象中
		MimeBodyPart messageBodyPart = new MimeBodyPart();
		messageBodyPart.setText(content);
		multipart.addBodyPart(messageBodyPart);// 装载正文
		 定义一个MimeBodyPart对象,用来装邮件的附件内容然后加入Multipart对象中
		MimeBodyPart fileBodyPart = new MimeBodyPart();
		DataSource source = new FileDataSource(path);
		fileBodyPart.setDataHandler(new DataHandler(source));
		fileBodyPart.setFileName(source.getName());
		multipart.addBodyPart(fileBodyPart); 装载附件
		mess.setContent(multipart) 装载入Message中
		mess.saveChanges(); 保存
		Transport tra = session.getTransport("smtp"); 建立发送的对象
		tra.connect("smtp.163.com", "wen870105", "wenshengyong"); 连接方法1
		tra.sendMessage(mess, mess.getAllRecipients());
		// tra.send(mess);//该方法发送不用建立连接
		tra.close();}
	catch (MessagingException ex)
	{ex.printStackTrace();}}}
下面的代码为整个应用程序的Struts-config.xml的配置。
<form-beans>
  <form-bean name="login" type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="name" type="java.lang.String"></form-property>
        <form-property name="pass" type="java.lang.String"></form-property>
         <form-property name="server" type="java.lang.String"></form-property>
 </form-bean>
   <form-beanname="Re" type="org.apache.struts.action.DynaActionForm">
  <form-property name="p" type="java.lang.String"></form-property>
  </form-bean>
  <!-- 填充发邮件的-->
  <form-bean name="Send" type="org.apache.struts.action.DynaActionForm">
  <form-property name="shou" type="java.lang.String"></form-property>
 <form-property name="zhuti" type="java.lang.String"></form-property>
 <form-property name="fujian" type="java.lang.String"></form-property>
 <form-property name="neirong" type="java.lang.String"></form-property>
 </form-bean>
   </form-beans>
   <global-exceptions />
  <global-forwards />
   <action-mappings>
  <action name="login" path="/login" scope="session" 
 type="com.action.LoginAction" input="/Login.jsp">
 <forward name="recev" path="/reseviAll.jsp"></forward>
  <forward name="return" path="/Login.jsp"></forward>
 </action>
  <!-- 发邮件的控制器-->
 <action path="/Send" name="Send" type="com.action.SendM" 
 scope="request">
 <forward name="sucess" path="/SendSucess.jsp"></forward>
  </action>
       <action path="/ROne" name="Re" type="com.action.ReseviOne"
  scope="request">
  <forward name="R" path="/ReseviOne.jsp"></forward>
  </action>
  </action-mappings>
        <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
  <!-- 验证框架的配置-->
 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
         <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,
        /WEB-INF/validation.xml"/>
     </plug-in>
</struts-config> 

4.4 邮件接收模块
点击超链接后进入ResiveM中,同样在该控制器中调用接收邮件的核心代码(Mail.java).在该方法中首先由自己的代理邮箱用户名,密码和POP3协议建立连接,以只读方式打开并将信息保存在Message数组中循环得到各部分想得到的值,在得到的值中由于存在字符编码等问题,所以封装了一个类MailFetcher.java 用来得到各部分信息,并且进行处理。各部分在代码中都做了注解,通过调用方法可以得到,然后用Hash Table进行间值对的封装,再存放在回话中。由于要传到JSP中读取,通过会话可以实现,也可以通过request的getAttrntrt方法。
关键难点是在对有附件的处理的时候,要先通过判断,要判断内容为什么类型,然后把内容进行解析,String的为正文,那么要传回来进行保存,在JSP中显示。如果为附件,则通过IO的形式在本地计算机上保存。
邮件接收界面如图9所示。
在这里插入图片描述

图9 接收邮件界面
主要代码:
下面是在控制器中对邮件的读取的方法的调用
省略

5 测试及问题分析
5.1 用户登录模块测试
对该模块的测试主要是测试用户的登录情况,对各种异常信息进行测试。
用户登录模块测试如表2所示。
表2 用户登录模块测试数据列表
在这里插入图片描述

5.2 发邮件模块测试
对该模块的测试主要是测试用户在发送邮件时可能出现的各种输入错误进行验证,测试邮件的发送成功情况。
发邮件模块测试结果如表3所示。
表3 发件模块测试数据列表
在这里插入图片描述

5.3 测试结果分析
通过对系统的测试,发现了部分问题,对不足之处进行了修改,在系统中为了增加实用性,对系统中对代理服务器进行了默认设置,虽然功能受到了限制,但是保证了安全性,要实现多人的代理,可以从数据库中读取,而不是用户自己输入。通过测试证明系统功能基本能按照预期要求得到实现。

结 论
至此,经过不懈努力,邮件发送系统的预期效果基本达到,能正常的发送和接收邮件,同时完成了对附件的处理,实现了用户的登录,加强了系统的安全性。
在本次的毕业设计中,让本人学到很多知识,软件应用方面学习了服务器Tomcat,对以前有所接触的DreamWeaver也有了进一步的认识,对其的掌握也更熟练。在网络通信方面,深刻的认识了SMTP,pop3协议,也对JAVA,JAVA WEB有了一定的认识。
邮件收发系统基本上是按照软件工程的生命周期学方法来实现的。因此,实际开发过程中都是一步一步的按照软件周期学方法实现,也就是从需求分析,然后是总体设计,详细设计,编码,测试。因为是第一次做这样的系统设计,所以此次开发过程就是不断的学习的过程。在实际的开发过程中,得到老师和同学们的大力帮助。经过对这个系统的开发,让本人更深刻的认识了软件工程学中的一些方法和思想,同时也对数据库的了解有了提高。通过自己实际动手做东西,提高了自己实际动手能力,学到了很多书本上学不到的知识。这一切都将对以后的学习和工作带来积极的影响,可以说是收获不小。
参考文献
[1] 方睿,刁仁宏,吴四九.网络数据库原理及应用[M].成都:四川大学出版社,2006。
[2] 冯燕奎,赵德奎.JSP实用案例教程[M].北京:清华大学出版社,2005。
[3] 黄晓东.JAVA课程设计案例精编[M].北京:中国水利水电出版社,2004。
[4] Bruce Eckel[美].JAVA编程思想[M].北京:机械工业出版社,2005。
[5] W.Richard Stevens[美].TCP/IP详解,卷1:协议[M].北京:机械工业出版社,2000。
[6] Steve, McConnell[美].代码大全[M].北京,电子工业出版社,2003。
[7] 张海藩.软件工程导论[M].北京:清华大学出版社,2003。
致 谢
省略


5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号毕业设计全套资源(点击下载)
本项目源码基于JSP+sqlserver的邮件系统设计与实现(源码+文档)_jsp_BS架构_邮件系统.zip
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业设计方案专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值