register.html

  1 <!DOCTYPE html>2 <html lang="en">3     <head>4         <meta charset="utf-8">5         <title>注册</title>6         <link rel="stylesheet" type="text/css" href="css/common.css">7         <link rel="stylesheet" href="css/register.css">8         <!--导入jquery-->9         <script src="js/jquery-3.3.1.js"></script>10         <script>11             /*12                 表单校验:13                     1.用户名:单词字符,长度8到20位14                     2.密码:单词字符,长度8到20位15                     3.email:邮件格式16                     4.姓名:非空17                     5.手机号:手机号格式18                     6.出生日期:非空19                     7.验证码:非空20              */21 22             function checkUsername() {23                 //1.获取用户名值24                 var username = $("#username").val();25                 //2.定义正则26                 var reg_username = /^\w{8,20}$/;27                 //3.判断,给出提示信息28                 var flag = reg_username.test(username);29                 if(flag){30                     //用户名合法  -->  加一个绿色边框31                     // $("#username").css("border",""); //或者清空边框样式恢复原样也行32                     $("#username").css("border","1px solid green");33                 }else{34                     //用户名非法  -->  加一个红色边框35                     $("#username").css("border","1px solid red");36                 }37                 return flag;38             }39 40             function checkPassword() {41                 //1.获取值42                 var password = $("#password").val();43                 //2.定义正则44                 var reg_password = /^\w{8,20}$/;45                 //3.判断,给出提示信息46                 var flag = reg_password.test(password);47                 if(flag){48                     //合法  -->  加一个绿色边框49                     $("#password").css("border","1px solid green");50                 }else{51                     //非法  -->  加一个红色边框52                     $("#password").css("border","1px solid red");53                 }54                 return flag;55             }56 57             //tips:选中代码区域 快捷键ctrl+r 输入需要被替换的词和替换词 进行局部代码替换58             function checkEmail() {59                 //1.获取值60                 var email = $("#email").val();61                 //2.定义正则62                 var reg_email = /^\w+@\w+\.\w+$/;63                 //3.判断,给出提示信息64                 var flag = reg_email.test(email);65                 if(flag){66                     //合法  -->  加一个绿色边框67                     $("#email").css("border","1px solid green");68                 }else{69                     //非法  -->  加一个红色边框70                     $("#email").css("border","1px solid red");71                 }72                 return flag;73             }74 75             function checkName() {76                 //1.获取值77                 var name = $("#name").val();78                 //2.判断是否为空79                 var flag = false;80                 if (name!=null && name!=""){81                     flag = true;82                 }83                 //3.给出提示信息84                 if(flag){85                     $("#name").css("border","1px solid green");86                 }else{87                     $("#name").css("border","1px solid red");88                 }89                 return flag;90             }91 92             function checkTelephone() {93                 //1.获取值94                 var telephone = $("#telephone").val();95                 //2.定义正则96                 var reg_telephone = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;97                 //3.判断,给出提示信息98                 var flag = reg_telephone.test(telephone);99                 if(flag){
100                     //合法  -->  加一个绿色边框
101                     $("#telephone").css("border","1px solid green");
102                 }else{
103                     //非法  -->  加一个红色边框
104                     $("#telephone").css("border","1px solid red");
105                 }
106                 return flag;
107             }
108
109             function checkBirthday() {
110                 //1.获取值
111                 var birthday = $("#birthday").val();
112                 //2.判断是否为空
113                 var flag = false;
114                 if (birthday!=null && birthday!=""){
115                     flag = true;
116                 }
117                 //3.给出提示信息
118                 if(flag){
119                     $("#birthday").css("border","1px solid green");
120                 }else{
121                     $("#birthday").css("border","1px solid red");
122                 }
123                 return flag;
124             }
125
126             function checkCode() {
127                 //1.获取值
128                 var code = $("#check").val();
129                 //2.判断是否为空
130                 var flag = false;
131                 if (code!=null && code!=""){
132                     flag = true;
133                 }
134                 //3.给出提示信息
135                 if(flag){
136                     $("#check").css("border","1px solid green");
137                 }else{
138                     $("#check").css("border","1px solid red");
139                 }
140                 return flag;
141             }
142
143             $(function () {
144                 //1、当表单提交时,调用所用校验方法
145                 $("#registerForm").submit(function () {
146                     /*//如果这个匿名函数没有返回值或者返回true,则表单提交;如果返回flase,则不提交
147                     return checkUsername() && checkPassword() && checkEmail() && checkName() && checkCode() && checkBirthday() && checkTelephone();*/
148
149                     /*在此使用异步提交表单是为了获取服务器响应的数据。
150                     因为我们前台使用的是html作为视图层,不能够直接从servlet相关的域对象获取值,
151                     只能通过ajax获取响应数据*/
152                     //1.发送数据到服务器
153                     if(checkUsername() && checkPassword() && checkEmail() && checkName() && checkCode() && checkBirthday() && checkTelephone()){
154                         //校验通过,发送ajax请求,提交表单的数据
155                         $.post(
156                                 "registUserServlet",
157                                 $(this).serialize(),  //用户填写的数据;.serialize()序列化表单内容为字符串,如username=zhangsan&password=123
158                                 function (data) {
159                                     //处理服务器响应的数据data:一个ResultInfo对象
160                                     if(data.flag){
161                                         //注册成功,跳转成功页面
162                                         location.href="register_ok.html";
163                                     }else{
164                                         //注册失败,给errorMsg-div添加提示信息
165                                         $("#errorMsg").html(data.errorMsg);
166                                     }
167                                 },
168                                 "json"
169                         );
170                     }
171                     //2.验证失败,不让页面跳转
172                     return false;
173                 });
174
175                 //2、当某个组件失去焦点时,调用对应的校验方法
176                 $("#username").blur(checkUsername);
177                 $("#password").blur(checkPassword);
178                 $("#email").blur(checkEmail);
179                 $("#name").blur(checkName);
180                 $("#check").blur(checkCode);
181                 $("#birthday").blur(checkBirthday);
182                 $("#telephone").blur(checkTelephone);
183             });
184         </script>
185     </head>
186     <body>
187         <!--引入头部-->
188         <div id="header"></div>
189
190         <!-- 主体 -->
191         <div class="rg_layout">
192             <div class="rg_form clearfix">
193                 <div class="rg_form_left">
194                     <p>新用户注册</p>
195                     <p>USER REGISTER</p>
196                 </div>
197                 <div class="rg_form_center">
198                     <div id="errorMsg" style="color: red;text-align: center"></div>
199                     <!--注册表单-->
200                     <form id="registerForm" action="user" method="get">
201                         <!--提交处理请求的标识符-->
202                         <input type="hidden" name="action" value="register">
203                         <table style="margin-top: 25px;">
204                             <tr>
205                                 <td class="td_left">
206                                     <label for="username">用户名</label>
207                                 </td>
208                                 <td class="td_right">
209                                     <input type="text" id="username" name="username" placeholder="请输入账号">
210                                 </td>
211                             </tr>
212                             <tr>
213                                 <td class="td_left">
214                                     <label for="password">密码</label>
215                                 </td>
216                                 <td class="td_right">
217                                     <input type="text" id="password" name="password" placeholder="请输入密码">
218                                 </td>
219                             </tr>
220                             <tr>
221                                 <td class="td_left">
222                                     <label for="email">Email</label>
223                                 </td>
224                                 <td class="td_right">
225                                     <input type="text" id="email" name="email" placeholder="请输入Email">
226                                 </td>
227                             </tr>
228                             <tr>
229                                 <td class="td_left">
230                                     <label for="name">姓名</label>
231                                 </td>
232                                 <td class="td_right">
233                                     <input type="text" id="name" name="name" placeholder="请输入真实姓名">
234                                 </td>
235                             </tr>
236                             <tr>
237                                 <td class="td_left">
238                                     <label for="telephone">手机号</label>
239                                 </td>
240                                 <td class="td_right">
241                                     <input type="text" id="telephone" name="telephone" placeholder="请输入您的手机号">
242                                 </td>
243                             </tr>
244                             <tr>
245                                 <td class="td_left">
246                                     <label for="sex">性别</label>
247                                 </td>
248                                 <td class="td_right gender">
249                                     <input type="radio" id="sex" name="sex" value="男" checked> 男
250                                     <input type="radio" name="sex" value="女"> 女
251                                 </td>
252                             </tr>
253                             <tr>
254                                 <td class="td_left">
255                                     <label for="birthday">出生日期</label>
256                                 </td>
257                                 <td class="td_right">
258                                     <input type="date" id="birthday" name="birthday" placeholder="年/月/日">
259                                 </td>
260                             </tr>
261                             <tr>
262                                 <td class="td_left">
263                                     <label for="check">验证码</label>
264                                 </td>
265                                 <td class="td_right check">
266                                     <input type="text" id="check" name="check" class="check">
267                                     <img src="checkCodeServlet" height="32px" alt="" onclick="changeCheckCode(this)">
268                                     <script type="text/javascript">
269                                         //图片点击事件
270                                         function changeCheckCode(img) {
271                                             img.src="checkCodeServlet?"+new Date().getTime();
272                                         }
273                                     </script>
274                                 </td>
275                             </tr>
276                             <tr>
277                                 <td class="td_left">
278                                 </td>
279                                 <td class="td_right check">
280                                     <input type="submit" class="submit" value="注册">
281                                     <span id="msg" style="color: red;"></span>
282                                 </td>
283                             </tr>
284                         </table>
285                     </form>
286                 </div>
287                 <div class="rg_form_right">
288                     <p>
289                         已有账号?
290                         <a href="login.html">立即登录</a>
291                     </p>
292                 </div>
293             </div>
294         </div>
295
296         <!--引入尾部-->
297         <div id="footer"></div>
298
299         <!--导入布局js,共享header和footer-->
300         <script type="text/javascript" src="js/include.js"></script>
301     </body>
302 </html>

View Code

register_ok.html

 1 <!DOCTYPE html>2 <html lang="en">3     <head>4         <meta charset="utf-8">5         <title>注册</title>6         <link rel="stylesheet" type="text/css" href="css/common.css">7         <link rel="stylesheet" href="css/register.css">8         <!--导入jquery-->9         <script src="js/jquery-3.3.1.js"></script>
10     </head>
11     <body>
12     <!--引入头部-->
13     <div id="header"></div>
14         <!-- 头部 end -->
15         <div style="text-align:center;red:yellow;font-weight:bold;height:150px;padding-top:100px;font-size:30px;">
16             <h4>恭喜,注册成功!请登录您的注册邮箱进行激活您的账号,激活后才能登录。</h4>
17         </div>
18         <!--引入尾部-->
19         <div id="footer"></div>
20     <!--导入布局js,共享header和footer-->
21     <script type="text/javascript" src="js/include.js"></script>
22     </body>
23 </html>

View Code

RegistUserServlet
 1 package cn.haifei.travel.web.servlet;2 3 import cn.haifei.travel.domain.ResultInfo;4 import cn.haifei.travel.domain.User;5 import cn.haifei.travel.service.UserService;6 import cn.haifei.travel.service.impl.UserServiceImpl;7 import com.fasterxml.jackson.databind.ObjectMapper;8 import org.apache.commons.beanutils.BeanUtils;9
10 import javax.servlet.ServletException;
11 import javax.servlet.annotation.WebServlet;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15 import javax.servlet.http.HttpSession;
16 import java.io.IOException;
17 import java.lang.reflect.InvocationTargetException;
18 import java.util.Map;
19
20 @WebServlet("/registUserServlet")
21 public class RegistUserServlet extends HttpServlet {
22     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23
24         //验证校验码
25         String checkcode_userinput = request.getParameter("check"); //用户提交的验证码
26         HttpSession session = request.getSession();
27         String checkcode_server = (String)session.getAttribute("CHECKCODE_SERVER");//服务器产生的验证码
28         session.removeAttribute("CHECKCODE_SERVER"); //保证后台产生得验证码一次性使用
29         if (checkcode_server==null || !checkcode_server.equalsIgnoreCase(checkcode_userinput)){
30             //用户输入验证码错误
31             ResultInfo info = new ResultInfo();
32             info.setFlag(false);
33             info.setErrorMsg("验证码错误!");
34             ObjectMapper mapper = new ObjectMapper();
35             String json = mapper.writeValueAsString(info);
36             response.setContentType("application/json;charset=utf-8");
37             //因为json结果是字符串,所以此处用字节流或者字符流都行
38             //response.getOutputStream().write(json.getBytes()); //字节流
39             response.getWriter().write(json); //字符流
40             return;
41         }//用户输入验证码正确执行以下
42
43
44         //1 获取数据
45         Map<String, String[]> map = request.getParameterMap();
46
47         //2 封装对象
48         User user = new User();
49         try {
50             BeanUtils.populate(user, map);
51         } catch (IllegalAccessException e) {
52             e.printStackTrace();
53         } catch (InvocationTargetException e) {
54             e.printStackTrace();
55         }
56
57         //3 调用service完成注册
58         UserService service = new UserServiceImpl();
59         boolean flag = service.regist(user);
60
61         //4 响应结果
62         ResultInfo info = new ResultInfo();
63         if (flag){
64             //注册成功
65             info.setFlag(true);
66         }else {
67             //注册失败
68             info.setFlag(false);
69             info.setErrorMsg("注册失败!");
70         }
71
72         //5 将对象info序列化为json
73         ObjectMapper mapper = new ObjectMapper(); //利用jackson
74         String json = mapper.writeValueAsString(info);
75
76         //6 将json结果写回到客户端
77         response.setContentType("application/json;charset=utf-8");
78         response.getWriter().write(json);
79     }
80
81     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
82         this.doPost(request, response);
83     }
84 }

View Code

ResultInfo
 1 package cn.haifei.travel.domain;2 3 import java.io.Serializable;4 5 /**6  * 用于封装后端返回前端数据对象7  */8 public class ResultInfo implements Serializable {9     private boolean flag;//后端返回结果正常为true,发生异常返回false
10     private Object data;//后端返回结果数据对象
11     private String errorMsg;//发生异常的错误消息
12
13     //无参构造方法
14     public ResultInfo() {
15     }
16     public ResultInfo(boolean flag) {
17         this.flag = flag;
18     }
19     /**
20      * 有参构造方法
21      * @param flag
22      * @param errorMsg
23      */
24     public ResultInfo(boolean flag, String errorMsg) {
25         this.flag = flag;
26         this.errorMsg = errorMsg;
27     }
28     /**
29      * 有参构造方法
30      * @param flag
31      * @param data
32      * @param errorMsg
33      */
34     public ResultInfo(boolean flag, Object data, String errorMsg) {
35         this.flag = flag;
36         this.data = data;
37         this.errorMsg = errorMsg;
38     }
39
40     public boolean isFlag() {
41         return flag;
42     }
43
44     public void setFlag(boolean flag) {
45         this.flag = flag;
46     }
47
48     public Object getData() {
49         return data;
50     }
51
52     public void setData(Object data) {
53         this.data = data;
54     }
55
56     public String getErrorMsg() {
57         return errorMsg;
58     }
59
60     public void setErrorMsg(String errorMsg) {
61         this.errorMsg = errorMsg;
62     }
63 }

View Code

CheckCodeServlet
 1 package cn.haifei.travel.web.servlet;2 3 import javax.imageio.ImageIO;4 import javax.servlet.ServletException;5 import javax.servlet.annotation.WebServlet;6 import javax.servlet.http.HttpServlet;7 import javax.servlet.http.HttpServletRequest;8 import javax.servlet.http.HttpServletResponse;9 import java.awt.*;
10 import java.awt.image.BufferedImage;
11 import java.io.IOException;
12 import java.util.Random;
13
14 /**
15  * 验证码
16  */
17 @WebServlet("/checkCodeServlet")
18 public class CheckCodeServlet extends HttpServlet {
19     public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
20
21         //服务器通知浏览器不要缓存
22         response.setHeader("pragma","no-cache");
23         response.setHeader("cache-control","no-cache");
24         response.setHeader("expires","0");
25
26         //在内存中创建一个长80,宽30的图片,默认黑色背景
27         //参数一:长
28         //参数二:宽
29         //参数三:颜色
30         int width = 80;
31         int height = 30;
32         BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
33
34         //获取画笔
35         Graphics g = image.getGraphics();
36         //设置画笔颜色为灰色
37         g.setColor(Color.GRAY);
38         //填充图片
39         g.fillRect(0,0, width,height);
40
41         //产生4个随机验证码,12Ey
42         String checkCode = getCheckCode();
43         //将验证码放入HttpSession中
44         request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);
45
46         //设置画笔颜色为黄色
47         g.setColor(Color.YELLOW);
48         //设置字体的小大
49         g.setFont(new Font("黑体",Font.BOLD,24));
50         //向图片上写入验证码
51         g.drawString(checkCode,15,25);
52
53         //将内存中的图片输出到浏览器
54         //参数一:图片对象
55         //参数二:图片的格式,如PNG,JPG,GIF
56         //参数三:图片输出到哪里去
57         ImageIO.write(image,"PNG",response.getOutputStream());
58     }
59     /**
60      * 产生4位随机字符串
61      */
62     private String getCheckCode() {
63         String base = "0123456789ABCDEFGabcdefg";
64         int size = base.length();
65         Random r = new Random();
66         StringBuffer sb = new StringBuffer();
67         for(int i=1;i<=4;i++){
68             //产生0到size-1的随机值
69             int index = r.nextInt(size);
70             //在base字符串中获取下标为index的字符
71             char c = base.charAt(index);
72             //将c放入到StringBuffer中去
73             sb.append(c);
74         }
75         return sb.toString();
76     }
77     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
78         this.doGet(request,response);
79     }
80 }

View Code

UserService
 1     /**2      * 注册用户3      * @param user4      * @return5      */6     boolean regist(User user);7 8     /**9      * 邮箱链接-激活用户账号
10      * @param code
11      * @return
12      */
13     boolean active(String code);

View Code

UserServiceImpl
 1  @Override2     public boolean regist(User user) {3         //根据用户名查询用户对象,防止重复用户名4         User user1 = userDao.findByUsername(user.getUsername());5         if (user1 != null){6             System.out.println("用户名已存在,注册失败");7             return false;8         }9
10         //设置激活码,唯一字符串
11         user.setCode(UuidUtil.getUuid());
12         //设置邮件链接激活状态
13         user.setStatus("N");
14         //保存用户信息
15         userDao.save(user);
16         //发送激活邮件链接
17         String content="<a href='http://localhost/travel/activeUserServlet?code=" + user.getCode() + "'>点击激活【黑马旅游网】</a>";
18         MailUtils.sendMail(user.getEmail(),content,"激活邮件");
19         return true;
20     }
21
22     @Override
23     public boolean active(String code) {
24         //1 根据激活码查询用户对象
25         User user = userDao.findByCode(code);
26         if (user != null){
27             //2 调用dao的修改激活状态方法
28             userDao.updateStatus(user);
29             return true;
30         }else {
31             return false;
32         }
33     }

View Code

UserDao
 1 /**2      * 根据用户名查询用户信息3      * @param username4      * @return5      */6     public User findByUsername(String username);7 8     /**9      * 添加用户
10      * @param user
11      * @return
12      */
13     public int save(User user);
14
15     /**
16      * 根据激活码查询用户信息
17      * @param code
18      * @return
19      */
20     User findByCode(String code);
21
22     /**
23      * 更新用户账号的激活状态
24      * @param user
25      */
26     void updateStatus(User user);

View Code

UserDaoImpl
 1 @Override2     public User findByUsername(String username) {3         User user = null;4         try {5             String sql = "select * from tab_user where username = ?";6             user = template.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), username);7         } catch (Exception e) {8 //            e.printStackTrace();9         }
10         return user;
11     }
12
13     @Override
14     public int save(User user) {
15         String sql = "insert into tab_user(username,password,name,birthday,sex,telephone,email,status,code) values(?,?,?,?,?,?,?,?,?)";
16         int count = template.update(
17                 sql,
18                 user.getUsername(),
19                 user.getPassword(),
20                 user.getName(),
21                 user.getBirthday(),
22                 user.getSex(),
23                 user.getTelephone(),
24                 user.getEmail(),
25                 user.getStatus(),
26                 user.getCode()
27         );
28         return count;
29     }
30
31     @Override
32     public User findByCode(String code) {
33         User user = null;
34         try {
35             String sql = "select * from tab_user where code = ?";
36             user = template.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), code);
37         } catch (DataAccessException e) {
38 //            e.printStackTrace();
39         }
40         return user;
41     }
42
43     @Override
44     public void updateStatus(User user) {
45         String sql = "update tab_user set status = 'Y' where uid = ?";
46         /*int count = */template.update(sql, user.getUid());
47     }

View Code

JavaWeb25.3【综合案例:注册功能(含邮箱激活账号)】相关推荐

  1. 综合案例-注册页面(HTML)

    综合案例-注册页面(HTML) <!DOCTYPE html> <html lang="en"><head><meta charset=& ...

  2. Java注册登录及邮箱发送账号激活(主要技术栈SpringBoot,MyBatis)

    文章目录 前言 学习之前需要掌握的知识 项目环境搭建 数据库的搭建 前端页面的搭建 后端代码 格式 pojo mapper Controller service 最后 前言 项目流程图如下: 这里我们 ...

  3. java注册用户代码_java用户管理注册功能 含前后台代码

    本文实例为大家分享了java用户注册功能,供大家参考,具体内容如下 主页面: 浏览器显示: 代码实现: 用户信息管理 用户注册: 姓名: 密码: 查看所有用户 注册功能: 浏览器显示: 1)注册成功: ...

  4. 邮箱激活功能,前台用户注册后需要登录邮箱激活账号才能够登录的,请简述激活过程,重点是安全性

    在提交了注册信息后,同时在数据库中写入激活码,同时程序把激活码(链接)发送到注册者的信箱里,注册者点击激活链接后,程序会和数据库里的数据进行对比,对比通过即完成激活.           每次有新用户 ...

  5. django注册发送邮箱激活账号

    在用django开发项目时,会用到注册账号发送邮箱来激活账号或接收手机验证码. 本篇博客写发送邮箱验证码,后续写发送手机验证码. 首先可以配置邮箱的一些必须的参数等 如,张三来注册 x 网站,邮箱是z ...

  6. asp.net mvc 注册中的邮箱激活功能实现(二)

    邮件发送功能封装 /// <summary>         /// 发送注册邮件         /// </summary>         /// <param n ...

  7. 综合案例注册(register)

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  8. Django 慕课前后端实战 -- xadmin后台管理系统、登录模块、注册模块、邮箱激活链接、找回密码

    注意:win下面 pip install 安装python module失败后,可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/网站才在相应的module, ...

  9. idea实现注册登录时使用QQ邮箱激活功能

    首先建立数据库,我的数据库为: CREATE TABLE user (uid varchar(11) primary key , -- 账号type int default 1, -- 类型, 1注册 ...

最新文章

  1. qstring 属于元数据类型吗_数据仓库的“元数据管理”
  2. 机器学习之SVM原理与案例
  3. 做ppt用的小插图_如何用PPT做随机抽奖?
  4. 你有什么相见恨晚的知识想推荐给年轻人?
  5. java 日期随机数_Java 生成指定时间范围的随机时间、随机中文姓名、随机字符姓名、随机数...
  6. 爆款预定!雷军再曝小米12 Pro:首发自研芯片澎湃P1
  7. Matplotlib作业一
  8. 【解决方法】jdb2/sdb1-8 io使用过高
  9. 如何在 HTML5 页面中嵌入音频?如何在 HTML5 页面中嵌入视频?
  10. 华为路由器a1怎么设置虚拟服务器,华为路由器a1 lite该怎么设置? | 192.168.1.1登陆页面...
  11. 如何使用github上传代码
  12. python做事务所审计收费标准_会计师事务所审计收费标准?2019审计报告收费标准...
  13. 网站建设需要怎么做?个人网站建设教程
  14. 软件项目管理_作业1
  15. 磁盘在计算机没显示win10,win10机械硬盘检测不到怎么解决?
  16. 解决“错误0x80071ac3”文件无法写入移动硬盘
  17. 富芮坤蓝牙FR801xH开发环境搭建
  18. Windows explorer.exe是啥?
  19. 学术论文中通讯作者与第一作者有什么区别?
  20. ios 模拟器中应用程序的存储路径

热门文章

  1. div中的img标签多余空白bug解决方案
  2. 2022年国内私网IP地址
  3. 计算机视觉图像算法工程师应该了解哪些知识
  4. 红外成像单筒望远镜TFN TD7产品 型号评测
  5. memset 和 bzero的效率测试。
  6. Go设置一个工作区打开多个项目
  7. Java微服务面试题整理
  8. RestTemplateConfig
  9. IDEA打包时clean报错Failed to delete
  10. checking whether we are cross compiling... configure: error: in `/tmp/pip-build-rktAki/pycrypto解决方法