软工课设-第13-14周工作内容总结

豆包高效使用手册:5大配置+9项提问技巧实战指南 AI工具不是即开即用的问答机,而是需要系统性配置与精准指令协同的智能协作体。理解其底层运行逻辑——如上下文记忆机制、权限调用规则、OCR识别原理及提示词密度对输出质量的影响——是提升人机协作效率的关键。豆包作为国内主流AI助手,其能力释放高度依赖账号安全设置、界面交互优化、对话历史管理、系统权限控制和上下文记忆策略等基础配置;同时,高质量输出离不开结构化提问、角色设定、格式约束、多轮递进等工程化对话方法。本文聚焦真实场景下的稳定性调优与可复用操作范式,覆盖内容创作、教育辅导、办公提效等高频应用,为职场人、自 阅读详情

一、开发工具及实现方法

选择Myeclipse2017进行开发,配置:jdk1.8、tomcat8.5。
实现方法:前端:html+css+js;后台:java。
基于JavaWeb开发,采用B/S结构。

二、项目进展

2.1前端

1、建立了响应式登录界面,适配chrome浏览器及手机界面。
2、游戏界面适配框架,使系统风格保持一致。

2.2后端

1、连接数据库,实现邮箱注册、找回密码功能,对无效输入进行检错并提示。

2.3游戏内容

1、添加选项:修改游戏规则,每人每轮可以输入两个数字。

2.4后续添加

1、添加管理员用户的用户管理模块
2、实现联机功能
3、实现更多可视化图表

三、前端登录页面

下面展示 登录界面

<!-- 登录 below -->
		<form class="login-form" action="../../Login" method="post">
			<input type="hidden" id="open_id" name="open_id" value="<%=openId%>" />
			<h3 class="form-title">登录</h3>
			<div class="alert alert-danger display-hide">
				<button class="close" data-close="alert"></button>
				<span class="help-block"></span>
				<span>请输入邮箱和密码登陆</span>
			</div>
			
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 用户邮箱:</label>
				<input class="form-control form-control-solid placeholder-no-fix"
					type="text" autocomplete="off" placeholder="请输入邮箱" id="user_id"
					name="user_id" />
			</div>
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 登陆密码:</label>
				<input class="form-control form-control-solid placeholder-no-fix"
					type="password" autocomplete="off" placeholder="请输入密码"
					id="user_password" name="user_password" />
			</div>
			<div class="form-actions">
				<button type="submit" class="btn btn-success uppercase" id="login_btn">登陆</button>
				<label class="rememberme check"> <input type="checkbox"
					id="remember" name="remember" value="1" /> 记住我
				</label> <a href="javascript:;" id="forget-password" class="forget-password">忘记密码?</a>
			</div>
			<div class="login-options">
				<h4 style="color:red;">本系统仅支持Chrome浏览器,请用Chrome浏览器访问平台。</h4>
			</div>
			<div class="create-account-left" style="width:125%;">
				<p>
					<a href="javascript:;" id="register-btn" class="uppercase">注册新账户</a>
				</p>
			</div>
		</form>
		<!-- 登录 above -->

在这里插入图片描述

下面展示 找回密码

<!-- 忘记密码 below -->
		<form class="forget-form">
			<h3>忘记密码?</h3>
			<p>请输入您的邮箱</p>
			<div class="form-group">
				<input class="form-control placeholder-no-fix" type="text"
					autocomplete="off" placeholder="请输入邮箱" id="forget_email"
					name="forget_email" />
			</div>
			<div class="form-group">
				<button type="button" id="forget-verify-btn"
					class="btn btn-success uppercase pull-right">发送验证码</button>
				<br>
				<br> <label class="control-label visible-ie8 visible-ie9">
					验证码 </label> <input class="form-control placeholder-no-fix" type="text"
					placeholder="输入验证码" name="forget-verify" id="forget-verify" />
			</div>
			<span id="forget_code" style="display:none"></span>
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 新密码 </label> <input
					class="form-control placeholder-no-fix" type="password"
					autocomplete="off" id="forget_password" placeholder="新密码"
					name="forget_password" id="forget_password" />
			</div>
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 再次输入新密码
				</label> <input class="form-control placeholder-no-fix" type="password"
					autocomplete="off" placeholder="再次输入新密码" id="forget_password_again"
					name="forget_password_again" />
			</div>
			<div class="form-actions">
				<button type="button" id="back-btn" class="btn btn-default">返回</button>
				<button type="button" id="forget-submit-btn"
					class="btn btn-success uppercase pull-right">提交</button>
			</div>

		</form>
		<!-- 忘记密码 above -->

在这里插入图片描述

下面展示 注册界面

<!-- 注册 below -->
		<form class="register-form" id="register-form">
			<h3>注册</h3>
			<p class="hint">请输入您的账户信息(必填)</p>
			<div class="container" style="font-color:#F00"></div>
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 用户名 </label> <input
					class="form-control placeholder-no-fix" type="text"
					placeholder="用户账号,建议中文、字母、数字及下划线" id="register_user_id"
					name="register_user_id" />
			</div>
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 密码 </label> <input
					class="form-control placeholder-no-fix" type="password"
					autocomplete="off" id="register_password" placeholder="密码"
					name="register_password" id="register_password" />
			</div>
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 再次输入密码
				</label> <input class="form-control placeholder-no-fix" type="password"
					autocomplete="off" placeholder="再次输入密码"
					id="register_password_again" name="register_password_again" />
			</div>
			<div class="form-group">
				<label class="control-label visible-ie8 visible-ie9"> 邮箱 </label> <input
					class="form-control placeholder-no-fix" type="text"
					placeholder="输入邮箱,忘记密码时系统可凭邮箱恢复密码" name="register-email"
					id="register-email" />
			</div>
			<div class="form-group">
				<button type="button" id="register-verify-btn"
					class="btn btn-success uppercase pull-right">发送验证码</button>
				<br>
				<br> <label class="control-label visible-ie8 visible-ie9">
					验证码 </label> <input class="form-control placeholder-no-fix" type="text"
					placeholder="输入验证码" name="register-verify" id="register-verify" />
			</div>
			<span id="verify_code" style="display:none"></span>
			<div class="form-actions">
				<button type="button" id="register-back-btn" class="btn btn-default">返回</button>
				<button type="button" id="register_submit_btn"
					class="btn btn-success uppercase pull-right">提交</button>
			</div>
		</form>
		<!-- 注册 above -->

在这里插入图片描述
下面展示用户登录后主界面
在这里插入图片描述

四、后端代码

下面展示登录相关代码

public class Login  extends HttpServlet{
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("start LoginServlet");
		
		String user_email = req.getParameter("user_id");
		String user_pwd = req.getParameter("user_password");
		System.out.println("user_email="+user_email+",user_pwd="+user_pwd);
		HttpSession hs = req.getSession(true);
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html; charset=utf-8");
		resp.setCharacterEncoding("utf-8");
		
		PrintWriter out = resp.getWriter();
		try{
			Class.forName("com.mysql.jdbc.Driver");
		}catch (ClassNotFoundException clssNotFoundException){
			clssNotFoundException.printStackTrace();
		}
		try{
			String url="jdbc:mysql://localhost:3306/xm19";
			Connection con=DriverManager.getConnection(url,"XM19","123456");
			Statement stmt=con.createStatement();
			System.out.println("数据库连接成功!");
			String sql="select * from users where user_email='"+user_email+"';";
			// 检查邮箱是否被注册过
			System.out.println("构造出来的sql语句是:"+sql);
			ResultSet rs = stmt.executeQuery(sql);
			if(rs.next()){
				sql= "select * from users where user_email='"+user_email+"' and user_pwd='"+user_pwd+"';";
				System.out.println("构造的sql语句是:"+sql);
				rs=stmt.executeQuery(sql);
				if(rs.next()){
					String user_role = rs.getString("user_role");
					String user_margin = rs.getString("user_margin");
					String user_balance = rs.getString("user_margin");
					String user_city = rs.getString("user_city");
					String user_name = rs.getString("user_name");

					hs.setAttribute("user_email", user_email);
					hs.setAttribute("user_name", user_name);
					hs.setAttribute("user_role", user_role);
					hs.setAttribute("user_margin", user_margin);
					hs.setAttribute("user_balance", user_balance);
					hs.setAttribute("user_city", user_city);
					System.out.println("Login.java 里的session="+hs);
					req.getRequestDispatcher("home/main/index.html").forward(req, resp);
				}else{
					out.print("<script>alert(\"密码错误\");window.location=\"home/main/login.jsp\";</script>");
				}
			}else{ 
				out.print("<script>alert(\"邮箱输入错误\");window.location=\"home/main/login.jsp\";</script>");
			}
			stmt.close();
			con.close();
			System.out.println("数据库关闭!");
		}catch (SQLException sqlexception){
			sqlexception.printStackTrace();
		}
	}
}

下面展示注册相关代码


public class RegisterServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("start registerServlet");
		
		String user_name = req.getParameter("register_user_id");
		String user_email = req.getParameter("register_email");
		String user_pwd = req.getParameter("register_password");
		System.out.println("user_name="+user_name+",user_email="+user_email+",user_pwd="+user_pwd);
		String user_role = "normal";
		SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date(System.currentTimeMillis());
		String create_time = formatter.format(date).toString();
		
		String message="注册成功";
		try{
			Class.forName("com.mysql.jdbc.Driver");
		}catch (ClassNotFoundException clssNotFoundException){
			clssNotFoundException.printStackTrace();
		}
		try{
			String url="jdbc:mysql://localhost:3306/xm09";
			Connection con=DriverManager.getConnection(url,"XM09","123456");
			
			String url2 = "jdbc:mysql://localhost:3366/xm09";
			if(con == null){
				con=DriverManager.getConnection(url2, "XM09","123456");
			}
			
			Statement stmt=con.createStatement();
			System.out.println("数据库连接成功!");
			String sql= "select * from users where user_email='"+user_email+"';";
			// 检查邮箱是否被注册过
			System.out.println("构造出来的sql语句是:"+sql);
			ResultSet rs = stmt.executeQuery(sql);
			if(rs.next()){
				message="邮箱已注册,注册失败";
			}else{ 
				sql= "insert into users(user_name,user_email,user_pwd,";
				sql = sql+"user_role,user_balance,user_margin,create_time) values('"+user_name;
				sql = sql+"','"+user_email+"','"+user_pwd+"','" + user_role;
				sql = sql+"',0,0,'"+create_time+"');";
				System.out.println("构造的sql语句是:"+sql);
				stmt.executeUpdate(sql);
			}
			stmt.close();
			con.close();
			System.out.println("数据库关闭!");
		}catch (SQLException sqlexception){
			sqlexception.printStackTrace();
	}
}

下面展示随机验证码代码

public class RandomUtil {
	public static void main(String[] args) {
		// 控制台打印
		System.out.println(RandomUtil.getRandom());
	}
	
	//  生成6位数随机验证码
	public static String getRandom() {
		String[] letters = new String[] {
				"0","1","2","3","4","5","6","7","8","9"};
		String code ="";
		for (int i = 0; i < 6; i++) {
			code = code + letters[(int)Math.floor(Math.random()*letters.length)];
		}
		return code;
	}
}

下面展示邮箱发送代码

public class SendEmailServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
 
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		System.out.println("邮箱发送功能");
		try {
			String email = req.getParameter("email");
			System.out.println("后台收到的email="+email);
			JavaMailUtil.receiveMailAccount = email; // 给用户输入的邮箱发送邮件
			// 1、创建参数配置,用于连接邮箱服务器的参数配置
			Properties props = new Properties();
			// 开启debug调试
			props.setProperty("mail.debug", "true");
			// 发送服务器需要身份验证
			props.setProperty("mail.smtp.auth", "true");
			// 设置右键服务器的主机名
			props.setProperty("mail.host", JavaMailUtil.emailSMTPHost);
			props.setProperty("mail.smtp.port", "465");
			props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
			props.put("mail.smtp.ssl.enable", true);
			props.put("mail.smtp.socketFactory.fallback", "false"); // 只处理SSL的连接,对于非SSL的连接不做处理
			props.put("mail.smtp.socketFactory.port", "465");

			// 发送邮件协议名称
			props.setProperty("mail.transport.protocol", "smtp");
			// 2、根据配置创建会话对象,用于和邮件服务器交互
			Session session = Session.getInstance(props);
			// 设置debug,可以查看详细的发送log
			session.setDebug(true);
			// 3、创建一封邮件
			String code = RandomUtil.getRandom();
			System.out.println("邮箱验证码:" + code);
			String html = htmlText.html(code);
			MimeMessage message = JavaMailUtil.creatMimeMessage(session, JavaMailUtil.emailAccount,
					JavaMailUtil.receiveMailAccount, html);
			// 4、根据session获取邮件传输对象
			Transport transport = session.getTransport();
			// 5、使用邮箱账号和密码连接邮箱服务器emailAccount必须与message中的发件人邮箱一致,否则报错
			transport.connect(JavaMailUtil.emailAccount, JavaMailUtil.emailPassword);
			// 6、发送邮件,发送所有收件人地址
			transport.sendMessage(message, message.getAllRecipients());
			System.out.println("邮件已发送" );
			// 7、关闭连接
			transport.close();
			System.out.println("链接关闭" );
			//  写入session
			HttpSession hs = req.getSession(true);
			hs.setAttribute("code", code);
			
			JSONObject jsonObj=new JSONObject();
			jsonObj.put("code", code);
			jsonObj.put("result_msg","ok");	//如果发生错误就设置成"error"等
			jsonObj.put("result_code",0);	//返回0表示正常,不等于0就表示有错误产生,错误代码
			System.out.println("最后构造得到的json是:"+jsonObj.toString());
			resp.setContentType("text/html; charset=UTF-8");
			try {
				resp.getWriter().print(jsonObj);
				resp.getWriter().flush();
				resp.getWriter().close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (Exception e) {
			e.printStackTrace();
			req.getSession().setAttribute("error", "邮件发送失败");
		}
	}
	```
sharenting风险防控:七道防火墙守护儿童数字足迹 sharenting(晒娃)作为数字时代亲子互动的普遍现象,本质是儿童数字足迹的持续生成过程。其风险并非源于主观恶意,而在于内容发布、平台衍生与生态扩散三层数据逻辑的叠加效应。从技术角度看,原始照片中的EXIF地理信息、AI可复原的模糊人脸、文本隐含的实体关系,共同构成可识别性维度;从法律与伦理视角,它触及儿童数据主权启蒙与家庭数字伦理底线。当前实践已超越‘删不删’的简单选择,转向贯穿内容生产、分发、存档全生命周期的防御体系。本文聚焦可落地的实操路径,涵盖元数据剥离、语义模糊、文本净化、权利声明、家庭契约、 阅读详情

相关推荐

sharenting:被分享的童年如何成为数据产业链的燃料

儿童数字足迹是数字时代最基础、最敏感的原始数据类型之一,其生成原理源于家长代为记录行为与平台自动化采集的双重机制。这类数据具有高维度性(时间、位置、生物特征、行为模式)、强衍生性(可训练AI模型、构建用户画像、驱动精准营销)和技术不可逆性(一旦上传即进入分布式数据网络)。在教育科技、儿童保险、智慧育儿等场景中,它已形成覆盖采集—加工—应用的完整商业闭环,支撑起千亿级市场。而sharenting作为核心入口,正将家庭日常转化为可计算、可交易、可预测的‘成长数据主权’资源。本文聚焦这一现象背后的数据逻辑、法律断

weixin_34315485的博客 416

Asterisk 1.8 sip 协议栈分析(一)

asterisk 1.8 ,chan_sip 更新了许多内容,下面结合asterisk 1.4 asterisk 1.6 分析一下sip协议栈。 此笔记为本人学习记录,有些地方描述其他人可能看不懂,望见谅。 分析路线 sipsock_read->parse_request->find_call->handle_inconming->handle_request_方法名。。。。 协议栈初始化

Commander_Officer的专栏 2271

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图)

本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。

weixin_29200741的博客 467

软件工程概论-用户登录界面

一.需要网站系统开发需要掌握的技术: 首先web开发分前后台,前台又分美工设计和技术实现,后台分业务层和数据库。 以Javascript为主,做系统级Web应用。HTML, css, Javascript是基础,上层以ExtJS框架为主,兼顾JQuery效果和用户体验。 二.源代码 <%@ pa...

diancao4633的博客 573

高分影像批处理第三回——RPC文件与几何校正

前言 前面两章部分完成了图像的基本组织和大气校正,可是对于遥感影像地理相关数据,精确的地理坐标也是非常关键的。L1级数据,可惜,并没有帮我们处理地理坐标系统。无论是打开ENVI还是用gdal工具查看图像元数据,其坐标系统都是错误的或者说是未读入的。因此本章节来解决这个问题。

weixin_43762038的博客 1万+

彻底卸载Ubuntu双系统,并完美回收100G空间给D盘

本文记录了安全卸载Ubuntu双系统并回收磁盘空间的全过程。作者首先通过Windows命令行彻底清除Ubuntu启动项,避免GRUB引导报错;随后在磁盘管理中删除Linux分区,将100G未分配空间合并至相邻的D盘。针对C盘空间不足问题,作者采用Dism++清理系统文件,并将用户文档、聊天记录等迁移至扩容后的D盘。最终实现了引导纯净、空间合理分配的目标,特别强调分区扩展必须遵循"相邻原则",建议通过间接迁移而非直接扩容来优化系统盘空间管理。

2403_85993278的博客 1512

【软工】用户界面设计

思维导图 知识点 一、用户界面应具备的特性 可使用性 灵活性 复杂性和可靠性 和其他软件相融 二、用户界面的操作流程 用户特性分析:详细了解所有用户的技能和经验 用户工作分析:系统内部活动的分解 三、用户模型和观点 理论认知模型:了解人的思维过程 用户知识模型:描述了一定范畴内的知识以及类型之间的联系 用户...

刘亚男 577

BES (恒玄)HFP通话笔记

1.audio_developer 调试:SDK 需要打开某个算法,需要原厂打开对应宏定义编译出新的SDK,只要涉及到lib库里的功能都需要原厂手动修改编译。开发商和原厂FAE做起来都会比较累。如果没有原厂支持根本没法做,很少文档,SDK也很多问题,没法开箱即用如果要支持audio_developer上位机调试,还需改代码,如果对整个原理不清楚就没法做,没文档只能啃代码调试工具设计的也有待加强,串口通讯调试对耳机这类产品非常麻烦,本来板子就不大,还要焊接一堆线,调试还要拖着串口线。

飞天鱼 686

C#网上书店登录界面实现——正则表达式(软工笔记)

C#网上书店登录界面实现——正则表达式一、实现环境二、界面要求三、具体实现1、界面布局2、运行效果3、登录实现代码:4、注册实现代码四、遇到的问题及待解决的问题 一、实现环境 C#、window10、vs2019 数据库SQL Server (SQLEXPRESS) 二、界面要求 1 、连接本地数据库 2 、用户名:用户名可以是数字、下划线(不能开头)、字母、汉字。 3 、密码:密码不能小于8或大于16,密码必须包含数字和字母。 4 、用到的命名空间: using System.Data.SqlClien

QQwli的博客 837

ArcGIS Pro 3.4 二次开发 - 地理数据库

本文介绍了在ArcGIS Pro SDK 3.4和.NET 8环境下,如何操作地理数据库的多种方法。首先,通过路径打开文件地理数据库,并处理可能出现的异常。其次,使用连接属性或sde文件路径打开企业级地理数据库。此外,还展示了如何从项目项、要素图层中获取地理数据库,以及如何执行SQL语句。最后,文章详细说明了如何从地理数据库中获取单个定义或定义列表,包括表定义、要素类定义、关系类定义和要素数据集定义。这些操作均在后台线程中执行,确保应用程序的响应性。

Winemonk 944

【Unity】RPG2D龙城纷争(十九)流程与UI界面(终章)

本章为RPG2D系列的终章,在之前的章节中我们已经完成了游戏的所有基本功能,那么用流程与UI界面将其串联起来才是我们整个游戏原型完善的标志。

神码编程 917

软件测试工程师经典面试题:请你说一说简单用户界面登陆过程都需要做哪些分析

请你说一说简单用户界面登陆过程都需要做哪些分析 一、功能测试 1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。 2.输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。 3.登录成功后能否能否跳转到正确的页面 4.用户名和密码,如果太短或者太长,应该怎么处理 5.用户名和密码,中有特殊字符(比如空格),和其他非英文的情况 6.记住用户名的功能 7.登陆失败后,不能记录密...

mayanni_blogs的博客 834

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 382

个人作业-提问回顾与个人总结

个人作业-提问回顾与个人总结

u011343154的博客 382

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

天天酷科研的博客 243

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

幼儿-知识与能力【2】

1.幼儿教师在语言课上只讲故事、音乐课上只教唱歌、体育课上只做游戏的做法违背了()教育要求。 A.启蒙性 B.发展适宜性 C.活动性 D.综合性 2.语言能力是在()的过程中发展起来的。发展幼儿语言的关键是创设一个能使他们想说、敢说、喜欢说、有机会说并能得到积极应答的环境。 A.一日生活 B.交往 C.活动 D.运用 3.下列不属于幼儿语言教育内容要求的是()。 A.创造一个自由、宽松的语言交往环境 B.帮助幼儿熟悉、听懂并说好方言 C.培养幼儿对生活中常见的简单标记和文字符号的兴趣 D.鼓励幼儿

robin9409的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

剪纸窗花坊基于HarmonyOS ArkTS API 24大量使用 Emoji 图标来增强视觉效果和用户识别效率,在没有图片资源的情况下用 Emoji 替代是一种轻量且高效的方案

在任何应用开发中,数据模型的设计都是最基础也是最重要的环节之一。良好的数据模型能够清晰地表达业务逻辑,减少运行时错误,并为后续的功能扩展提供便利。RecipeInfoStepInfoLearnStat和ColorToken,分别对应菜谱信息、食材信息、烹饪步骤、学习统计和颜色令牌。通过对这款基于 HarmonyOS ArkTS 开发的"美味厨房"菜谱教学应用的全面深度解析,我们可以看到,一个优秀的移动应用不仅需要功能完善,更需要在架构设计、视觉体验和代码质量上达到高度的统一。

qq_17776737的博客 167

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HarmonyOS 6.1 实战:线性进度条实战教程,套餐施工进度百分比展示,动态宽度绑定进度数值,圆角美化样式

HarmonyOS 的应用开发语言是 ArkTS,它是在 TypeScript 基础上扩展而来的。ArkTS 不仅保留了 TypeScript 的静态类型检查能力,还针对 UI 声明式编程场景做了深度优化,使得开发者可以用更少的代码量实现更复杂的界面逻辑。ArkUI 是 HarmonyOS 的 UI 开发框架,其核心理念是"声明式编程"。开发者只需描述界面"看起来是什么样",而不需要手动操作 DOM 或视图树。框架会根据数据状态自动完成界面渲染与更新,这极大地降低了 UI 编程的复杂度。

wen170248的博客 371

幼儿园接送管理系统HarmonyOS ArkTS API 24深度解析,父子组件通信(@Link / @Prop / 回调函数)、@Builder 复用布局、条件渲染弹窗、ForEach 列表渲染

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

2302_79499487的博客 221

关于margin设置值的问题

为了代码书写效率,做一些简化还是值得提倡的. 一个值: margin:10px; 上下左右外边距全为10px; 两个值: margin:10px 20px; 第一个值:设置上下外边距 第二个值:设置左右外边距 三个值: margin:10px 20px 30px; 第一个值:设置上外边距 第二个值:设置左右外边距 第三个值:设置下外边距 四个值: mar...

惊鸿御风的博客 843

百分比参照于谁

margin,padding,left参照于包含块的width height,top参照于包含块的height translate(50%,50%)参照于自身的宽高 background-position百分比参照于(图片区域-图片的位图像素值) ...

qq_40052011的博客 209

点评门店系统

结构化创建 PUT /employee/ { "settings" : { "number_of_shards" : 1, "number_of_replicas" : 1 }, "mappings" : { "properties" : { "name" : { "type" : "text" }, "age" : { "type" : "integer" }

chao4kakaluote的博客 400

深入理解margin属性

百分比margin的计算规则 普通元素的百分比margin都是相对于容器的宽度计算的 <div style="width:600px;height:200px;"> <img src="1.jpg" style="margin:10%"> </div>计算之后水平方向的margin和垂直方向的margin都是60px 绝对定位元素的百分比margin是相对于第一个定位祖先元素(relativ

sjinsa的博客 1937

css中body默认的margin

在一些浏览器中css默认对margin设置为8px,当然也有可能是其他值。这是浏览器的user agent stylesheet自动设置的,因为浏览器的user agent stylesheet优先级很低所以如果对其默认样式有不满意的地方,可以自行设置覆盖该属性。不同浏览器对于相同元素的默认样式并不一致,这也是为什么我们在CSS的最开始要写 * {padding:0;marging:0};eg:这...

FYSGXFZ的博客 1545

Jquery validate 前段校验

详情查看官网:https://jqueryvalidation.org/依赖   : jquery相关代码:js 文件:$("#register-form").validate({ rules:{ username:{ required:true, minlength:4, ...

lihuapiao的专栏 610
上一篇: 软工课设-第11-12周工作内容总结
下一篇: 使用Ajax方式实现用户名的唯一性校验-JAVA
BlueIsWarmest
博客等级 码龄8年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值