房屋水电费记账本:内置的数组数据击按钮不能删除,页面手动添加的可以删除

news2024/11/24 11:02:16

 

<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>房租水电费记录</title>
		<script type="text/javascript">
			document.addEventListener('plusready', function() {
				//console.log("所有plus api都应该在此事件发生后调用,否则会出现plus is undefined。")
			});
		</script>
		<style>
			* {
				margin: 0;
				padding: 0;
				box-sizing: border-box;
			}

			body {
				background-color: #0a1f19;
				color: #ffffff;
				text-shadow: 1px 1px 1px #000000;
				text-align: center;
			}

			/* 凹背景样式 */
			.total-cost b,
			.common-span {
				color: #ffff00;
				position: relative;
				border-radius: 3px;
				font-size: 30px;
				padding: 0 5px;
				font-weight: bold;
				box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.589), inset 2px 2px 3px rgba(0, 0, 0, 0.6);
			}

			.total-cost b::before,
			.common-span::before {
				content: "";
				background: linear-gradient(white, transparent 3%) 50% 50%/97% 97%,
					linear-gradient(rgba(255, 255, 255, 0.5), transparent 50%, transparent 80%, rgba(255, 255, 255, 0.5)) 50% 50%/97% 97%;
				width: 100%;
				height: 100%;
				position: absolute;
				top: 0;
				left: 0;
				border-radius: 5px;
				transform: scale(0.9);
			}

			.common-h2 {
				background-color: #28a7462e;
				border-radius: 0 0 2px 2px;
			}

			/* 日期行 */
			.table-body {
				display: flex;
				flex-direction: column-reverse;
				border: 2px solid #ffc;
				border-radius: 3px;
			}

			.date-month {
				box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0 1px 2px black,
					inset 0 2px 2px -2px white, inset 0 0 2px 9px #47434c,
					inset 0 0 2px 10px #ff0000;
				display: flex;
				flex-direction: column-reverse;
				padding: 10px;
				margin: 3px;
				border-radius: 3px;
					border: 2px solid #ffaa7f;
			}

			.details,
			.rent-row {
				width: 100%;
				display: flex;
				justify-content: space-around;
				background-color: #28a745;
				border-radius: 5px 5px 0 0;
				border: 5px solid #333333;
			}

			.date-column {
				display: flex;
				justify-content: space-around;
				align-items: center;
				/* margin-top: 12px; */
				width: 100%;
				margin: 0 auto;
				background-color: #144756;
			}

			/*日期标题 */
			.date {
				transform: translate(-12%, -236%) scale(0.8);
			}

			.year {
				position: relative;
				top: 35px;
				left: 6px;
				padding: 15px 16px 25px 12px;
				border-radius: 10px 10px 0 0;
				color: rgb(234, 255, 0);
				background-color: #ff0000;
			}

			.recordCheckbox {
				position: relative;
				transform: translate(90%, 230%) scale(2);
				z-index: 999999;
			}

			h1 {
				position: absolute;
				border: 5px solid #333;
				width: 135px;
				line-height: 115px;
				font-size: 60px;
				letter-spacing: -3px;
				-webkit-text-fill-color: transparent;
				border-radius: 20px 10px 10px 10px;
				box-shadow: inset 4px 4px 4px rgba(255, 255, 255, 0.6), inset -4px -4px 5px rgba(0, 0, 0, 0.6);
			}

			.month1 {
				clip-path: polygon(0% 0%, 100% 0%, 100% 50%, 0% 50%);
				text-shadow: 1px 1px 1px #d1ec04;
				-webkit-text-stroke: #fffbfb 1px;
			}

			.month2 {
				clip-path: polygon(0% 50%, 100% 50%, 100% 100%, 0% 100%);
				transform: translateY(1px);
				z-index: 20;
				text-shadow: 1px 1px 1px #ff0303;
				-webkit-text-stroke: #ffffff 1px;
			}

			/*日期标题 结束*/
			/* 水表 */
			.water-meter {
				width: 90px;
				height: 90px;
				margin: 0 10px;
				border-radius: 75px;
				background: #e0f7fa;
				border: 5px solid #0288d1;
				position: relative;
				box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
			}

			.water-meter h2 {
				background: linear-gradient(to top, #0091ea, #00bcd4);
				border-radius: 0 0 75px 75px;
			}

			/* 水表 结束*/
			/* 电表 */
			.electric-meter {
				border: 5px solid #333;
				border-radius: 10px;
				background: #fff;
				box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
			}

			.electric-meter h2 {
				background-color: #28a745;
				border-radius: 0 0 2px 2px;
			}

			/* 电表结束 */
			.water-meter p {
				animation: backgroundChange2 10s infinite;
				margin: 4px;
				font-size: 25px;
				font-weight: bold;
				padding: 0 7px 3px 5px;
			}

			.electric-meter p {
				animation: backgroundChange 10s infinite;
				margin: 4px;
				font-size: 25px;
				font-weight: bold;
				padding: 0 7px 3px 5px;
			}

			@keyframes backgroundChange2 {

				0%,
				10%,
				20%,
				30%,
				40%,
				50%,
				60%,
				70%,
				80%,
				90%,
				100% {
					box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0 1px 2px black,
						inset 0 2px 2px -2px white, inset 0 0 2px 7px #47434c,
						inset 0 0 2px 22px #ff0000;
					color: #cfd601;
					border-radius: 33px 33px 0 0;
				}

				5%,
				15%,
				25%,
				35%,
				45%,
				55%,
				65%,
				75%,
				85%,
				95% {
					box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0 1px 2px black,
						inset 0 2px 2px -2px white, inset 0 0 2px 7px #47434c,
						inset 0 0 2px 22px #f6ff00;
					color: #ffffff;
					border-radius: 30px 30px 0 0;
				}
			}

			@keyframes backgroundChange {

				0%,
				10%,
				20%,
				30%,
				40%,
				50%,
				60%,
				70%,
				80%,
				90%,
				100% {
					box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0 1px 2px black,
						inset 0 2px 2px -2px white, inset 0 0 2px 7px #47434c,
						inset 0 0 2px 22px #ff0000;
					color: #cfd601;
					border-radius: 2px;
				}

				5%,
				15%,
				25%,
				35%,
				45%,
				55%,
				65%,
				75%,
				85%,
				95% {
					box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0 1px 2px black,
						inset 0 2px 2px -2px white, inset 0 0 2px 7px #47434c,
						inset 0 0 2px 22px #f6ff00;
					color: #ffffff;
					border-radius: 3px;
				}
			}

			summary {
				color: #f6ff00;
			}

			summary::marker {
				color: red;
				/* 设置箭头颜色为红色 */
			}

			.details table {
				width: 100%;
				text-align: center;
			}

			.details td {
				border: 2px solid #000000;
				background-color: #144756;
			}

			/* 房租 */
			/* 总金额 */
			.rent,
			.total-amount {
				background: #0288d1;
				margin: 10px 0;
				padding: 0 5px;
				box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.589), inset 2px 2px 3px rgba(0, 0, 0, 0.6);
			}

			.total-amount {
				background: #f30000;
			}

			.total-cost {
				background-color: #248aa6;
			}

			/* 删除按钮样式 */
			#deleteButton {
				background-color: red;
				/* 背景颜色 */
				color: white;
				/* 字体颜色 */
				border: none;
				/* 无边框 */
				padding: 0px 5px;
				/* 内边距 */
				border-radius: 2px;
				/* 圆角 */
				cursor: pointer;
				/* 鼠标指针样式 */
				font-size: 16px;
				/* 字体大小 */
				margin-left: 10px;
				/* 左侧外边距 */
			}

			#deleteButton:hover {
				background-color: darkred;
				/* 悬停时的背景颜色 */
			}

			/* 添加按钮样式 */
			#addButton {
				background-color: green;
				/* 背景颜色 */
				color: white;
				/* 字体颜色 */
				border: none;
				/* 无边框 */
				padding: 0px 5px;
				/* 内边距 */
				border-radius: 2px;
				/* 圆角 */
				cursor: pointer;
				/* 鼠标指针样式 */
				font-size: 16px;
				/* 字体大小 */
			}

			#addButton:hover {
				background-color: darkgreen;
				/* 悬停时的背景颜色 */
			}

			.input-length {
				/* 最小宽度 */
				min-width: 30px;
			}
		</style>
	</head>
	<body>
		<h2>房租水电费记账本<button id="deleteButton">选中月上的框删除</button></h2>
		<div class="header">
			<div id="dataTable" class="table">
				<div class="input-section">
					<label> <input type="month" id="dateInput"></label>
					<label> <input type="text" id="rentInput" class="input-length" oninput="adjustWidth(this)"
							placeholder="房租"></label>
					<label><input type="text" id="waterInput" class="input-length" oninput="adjustWidth(this)"
							placeholder="水表"></label>
					<label><input type="text" id="electricInput" class="input-length" oninput="adjustWidth(this)"
							placeholder="电表"></label>
					<label> <input type="text" id="noteInput" class="input-length" oninput="adjustWidth(this)"
							placeholder="备注"></label>
					<button id="addButton" style="cursor: pointer;">添加</button>
				</div>
				<div class="table-body"> </div>
				<div class="table-footer">
					<div class="footer-cell" colspan="2">到底了,没有更多了!</div>
				</div>
			</div>
	</body>
	<script>
		let rentRecords = initRentRecords(); // 只初始化一次
		let totalWaterUsage = 0; // 总用水量
		let totalElectricityUsage = 0; // 总用电量
		function initRentRecords() {
			const storedRecords = localStorage.getItem('房租记录');
			return storedRecords ? JSON.parse(storedRecords) : [
				// 默认数据
				{
					"日期": "2024年7月25日",
					"房租": 1000,
					"水表": 66,
					"电表": 2316,
					"备注": "房租500元,押金100元",
					"禁止删除": true
				},
				{
					"日期": "2024年8月25日",
					"房租": 1500,
					"水表": 68,
					"电表": 2537,
					"备注": "3个月房租,8月25日-11月25日",
					"禁止删除": true
				},
				{
					"日期": "2024年9月25日",
					"房租": 0,
					"水表": 71,
					"电表": 2600,
					"备注": "9月30日抄表数",
					"禁止删除": true
				},
			];
		}
		// 计算函数
		function calcCosts(curr, prev) {
			const waterUsage = prev ? curr.水表 - prev.水表 : 0;
			const electricityUsage = prev ? curr.电表 - prev.电表 : 0;
			const waterFee = waterUsage > 0 ? waterUsage * 5 : 0; // 水费计算
			const electricityFee = electricityUsage > 0 ? electricityUsage * 1 : 0; // 电费计算
			const total = curr.房租 + waterFee + electricityFee; // 本月总金额计算
			// 更新总用水量和总用电量
			totalWaterUsage += waterUsage;
			totalElectricityUsage += electricityUsage;
			return {
				waterUsage,
				electricityUsage,
				waterFee,
				electricityFee,
				total,
				totalWaterUsage, // 返回总用水量
				totalElectricityUsage, // 返回总用电量
				waterUsageCalc: `${curr.水表} - ${prev ? prev.水表 : curr.水表} = ${waterUsage} (吨)`,
				electricityUsageCalc: `${curr.电表} - ${prev ? prev.电表 : curr.电表} = ${electricityUsage} (度)`,
				waterFeeCalc: `${waterUsage} * 5 = ${waterFee}(元)`,
				electricityFeeCalc: `${electricityUsage} * 1 = ${electricityFee}(元)`,
				totalCalc: `${curr.房租} + ${waterFee} + ${electricityFee} = ${total}(元)`,
			};
		}
		// 渲染数据函数
		function renderData() {
			let totalRent = 0,
				totalWaterFee = 0,
				totalElectricityFee = 0;
			const contentArea = document.getElementById('dataTable').querySelector('.table-body');
			let content = ''; // 用于存储所有内容
			rentRecords.forEach((record, index) => {
				totalRent += record.房租;
				const prevRecord = index > 0 ? rentRecords[index - 1] : null;
				const {
					waterUsage,
					electricityUsage,
					waterFee,
					electricityFee,
					total,
					waterUsageCalc,
					electricityUsageCalc,
					waterFeeCalc,
					electricityFeeCalc,
					totalCalc
				} = calcCosts(record, prevRecord);
				totalWaterFee += waterFee;
				totalElectricityFee += electricityFee;
				const month = String(parseInt(record.日期.substring(5, 7), 10)).padStart(2, '0');
				// 拼接每一项数据到 content,添加复选框
				content += `
            <div class="date-month">
                <div class="rent-row">
                    <div >房租:
                    <b class="rent">${record.房租}元</b></div>
                    <div >本月已缴总金额:
                    <b class="total-amount">${total}元</b></div>
                </div>
                <div class="date-column">
                    <div class="date">
                        <div class="year-month">
                            <sub class="year">${record.日期.substring(0, 5)}</sub>  
                            <input type="checkbox" class="recordCheckbox" data-index="${index}" />
                            <h1 class="month1">${month}月</h1>
                        </div>
                        <h1 class="month2">${month}月</h1>
                    </div>
                    <div class="water-meter">
                        <p>${record.水表}</p>
                        <h2>水表</h2>
                    </div>
                    <div class="electric-meter">
                        <p>${record.电表}</p>
                        <h2>电表</h2>
                    </div>
                </div>
                <details class="details">
                    <summary>
                        查看详细信息
                    </summary>
                    <div>
                    <p><span>首月押金500元</span><span>房租500元/月</span></p>
                       <p><span>水:5元/吨</span><span>电:1元/度</span></p> 
             </div>
             <table class="details-table">
                 <tr >
                <td>
                    <div class="rent common-div-left">
                        <p>500元/月</p>
                        <span class="common-span">${record.房租}元</span>
                        <h2 class="common-h2">房租</h2>
                    </div>
                </td>
                <td>
                    <div class="total-amount common-div-right">
                        <p>${totalCalc}</p>
                        <b class="common-span">${total}元</b>
                        <h2 class="common-h2">应缴金额</h2>
                    </div>
                </td>
            </tr>
                    <tr class="usage-row">
                <td>
                    <div class="common-div-left">
                        <h2 class="common-h2">用水量</h2>
                        <p>水${waterUsageCalc}</p>
                        <span class="common-span">${waterUsage}吨</span>
                    </div>
                </td>
                <td>
                    <div class="common-div-right">
                        <h2 class="common-h2">用电量</h2>
                        <p>电${electricityUsageCalc}</p>
                        <span class="common-span">${electricityUsage}度</span>
                    </div>
                </td>
            </tr>
            <tr class="fees-row">
                <td>
                    <div class="common-div-left">
                        <h2 class="common-h2">水费</h2>
                        <p>${waterFeeCalc}</p>
                        <span class="common-span">${waterFee}元</span>
                    </div>
                </td>
                <td>
                    <div class="common-div-right">
                        <h2 class="common-h2">电费</h2>
                        <p>${electricityFeeCalc}</p>
                        <span class="common-span">${electricityFee}元</span>
                    </div>
                </td>
            </tr>
            </tr>
            <tr class="remarks-row">
                <td colspan="2">
                    <div><b>备注:</b><span>${record.备注}</span> </div>
                </td>
            </tr>
                  </table>
                    <div class="total-cost">
                     <h3>${rentRecords[0].日期.substring(0, 5)}${rentRecords[0].日期.substring(5, 7)}到${record.日期.substring(0, 5)}${record.日期.substring(5, 7)}
                        </br>总缴费用<b>${totalRent + totalWaterFee + totalElectricityFee}元</b></h3>
                       <sub>总房租 <b>${totalRent}元</b> </sub>   <sub>总水电费 <b>${totalWaterFee + totalElectricityFee}元</b> </sub>
                       </br>
                       <sub>总用水量 <b>${totalWaterUsage}吨</b> </sub>
                       <sub>总水费 <b>${totalWaterFee}元</b> </sub>
                       </br>
                       <sub>总用电量 <b>${totalElectricityUsage}度</b> </sub>
                       <sub>总电费 <b>${totalElectricityFee}元</b> </sub>
                       </div>
                </details>
            </div>
            `;
			});
			// 设置整个内容区域
			contentArea.innerHTML = content;
			// 最后添加脚注
			const footerArea = document.querySelector('.table-footer');
			footerArea.innerHTML = `<div class="footer-cell" colspan="2">到底了,没有更多了!</div>`;
		}

		function updateLocalStorage() {
			// 仅在添加或更新时调用此函数
			localStorage.setItem('房租记录', JSON.stringify(rentRecords));
		}
		// 添加新记录的功能
		document.getElementById('addButton').addEventListener('click', function() {
			const dateInput = document.getElementById('dateInput').value;
			const rentInput = parseFloat(document.getElementById('rentInput').value) || 0;
			const waterInput = parseFloat(document.getElementById('waterInput').value) || 0;
			const electricInput = parseFloat(document.getElementById('electricInput').value) || 0;
			const noteInput = document.getElementById('noteInput').value;
			// 检查日期是否有效
			if (!dateInput) {
				alert("请填写有效的日期。");
				return;
			}
			// 创建新记录对象
			const newRecord = {
				"日期": new Date(dateInput).toLocaleDateString('zh-CN', {
					year: 'numeric',
					month: 'numeric',
					day: 'numeric'
				}),
				"房租": rentInput,
				"水表": waterInput,
				"电表": electricInput,
				"备注": noteInput,
				"禁止删除": false // 新增加的记录默认为可以删除
			};
			// 将新记录添加到数组
			rentRecords.push(newRecord);
			// 更新 localStorage
			updateLocalStorage();
			// 清空输入框
			document.getElementById('dateInput').value = '';
			document.getElementById('rentInput').value = '';
			document.getElementById('waterInput').value = '';
			document.getElementById('electricInput').value = '';
			document.getElementById('noteInput').value = '';
			// 渲染数据
			renderData();
		});
		// 更新 localStorage 的函数
		function updateLocalStorage() {
			// 仅在添加或更新时调用此函数
			localStorage.setItem('房租记录', JSON.stringify(rentRecords));
		}
		// 创建新记录对象
		const newRecord = {
			"日期": new Date(dateInput).toLocaleDateString('zh-CN', {
				year: 'numeric',
				month: 'numeric',
				day: 'numeric'
			}),
			"房租": rentInput,
			"水表": waterInput,
			"电表": electricInput,
			"备注": noteInput,
			"禁止删除": false // 新增加的记录默认为可以删除
		};
		// 添加删除功能
		document.getElementById('deleteButton').addEventListener('click', function() {
			const checkedBoxes = document.querySelectorAll('.recordCheckbox:checked');
			if (checkedBoxes.length === 0) {
				alert('请至少选择一个记录来删除。');
				return;
			}
			const confirmDelete = confirm('您确定要删除选中的记录吗?');
			if (!confirmDelete) {
				return; // 用户选择了取消,不执行删除
			}
			checkedBoxes.forEach(checkbox => {
				const index = parseInt(checkbox.dataset.index, 10);
				const record = rentRecords[index];
				// 只删除不带有 '禁止删除': true 的记录
				if (!record.禁止删除) {
					rentRecords.splice(index, 1); // 从数组中删除记录
				} else {
					alert(`本地记录 '${record.日期}' 不允许删除。`); // 提示用户该记录不可删除
				}
			});
			// 更新 localStorage 和重新渲染数据
			updateLocalStorage();
			renderData();
		});
		/* 调整所有输入框宽度*/
		function adjustAllInputWidths() {
			document.querySelectorAll('.input-length').forEach(adjustWidth); // 遍历所有类名为 'input-length' 的输入框
		}

		function adjustWidth(input) {
			const span = document.createElement('span');
			span.style.visibility = 'hidden';
			span.style.whiteSpace = 'pre';
			span.style.font = getComputedStyle(input).font;
			span.style.padding = getComputedStyle(input).padding; // 添加 padding
			span.style.border = getComputedStyle(input).border; // 添加 border
			span.style.boxSizing = 'content-box'; // 确保不计算 border 和 padding
			span.innerText = input.value || '0';
			document.body.appendChild(span);
			input.style.width = `${span.offsetWidth}px`;
			document.body.removeChild(span);
		}
		// 页面加载完成后执行
		window.onload = () => {
			renderData(); // 渲染数据
			adjustAllInputWidths(); // 然后调整输入框宽度
		};
		/* 调整所有输入框宽度 结束*/
	</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6 个 Java 工具,轻松分析定位 JVM 问题

使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具&#xff0c;帮助查看 JVM 的一些信息。比如&#xff0c;在机器上运行 ls 命令&#xff0c;可以看到 JDK 8 提供了非常多的工具或程序&#xff1a; 接下来介绍些常用的监控工具。也可以先通过下面这张图…

buuctf[安洵杯 2019]easy misc1

解压的一个文件夹和图片一个&#xff0c;zip压缩包有密码 FLAG IN ((√2524921X8552)15-1794)NNULLULL, ((√2524921X8552)15-1794)7 我用passware kit 2022 所以试试7数字NNULLULL,掩码&#xff08;mask&#xff09;攻击试试 mask &#xff1a;?d?d?d?d?d?d?dNNULLU…

基于SSM的Java在线音乐平台

文未可获取一份本项目的java源码和数据库参考。 Java在线音乐平台是基于Java Web&#xff0c;依据Java语言功能性强大和简单易用的两大特点&#xff0c;实现的一个网上音乐平台。该平台包含了前台功能&#xff08;用户层面&#xff09;以及后台管理系统&#xff08;管理员层面&…

报刊订阅系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;报刊类型管理&#xff0c;报刊信息管理&#xff0c;报刊订阅管理&#xff0c;订阅发送管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;报刊信息&a…

vector 的使用(上)

1.概念 vector本质是顺序表。它像数组一样&#xff0c;用一块连续的空间对数据进行管理&#xff0c;但又区别于数组&#xff0c;它的空间是根据数据进行动态增容的&#xff0c;并封装了一系列成员变量对数据进行监控&#xff0c;封装成员函数对数据进行操作。 2.区别 vector…

Excel数据分析!开启数据洞察之门

Excel数据分析&#xff01;开启数据洞察之门 前言Excel数据分析 前言 Excel&#xff0c;这款我们都耳熟能详的办公软件&#xff0c;在数据分析的舞台上&#xff0c;扮演着至关重要的角色。它不仅仅是一个简单的电子表格工具&#xff0c;更是我们开启数据洞察之门的一把钥匙。 …

深度学习的应用综述

文章目录 引言深度学习的基本概念深度学习的主要应用领域计算机视觉自然语言处理语音识别强化学习医疗保健金融分析 深度学习应用案例公式1.损失函数(Loss Function) 结论 引言 深度学习是机器学习的一个子领域&#xff0c;通过模拟人脑的神经元结构来处理复杂的数据。近年来&…

又放大招!2024 OpenAI 开发者日总结:实时 API、提示词缓存、模型蒸馏与视觉微调等多项技术革新

在全球开发者翘首以盼中&#xff0c;OpenAI 于 2024 年 10 月 1 日在旧金山举办了年度开发者日活动。与往年不同&#xff0c;今年的活动并未发布全新的模型&#xff0c;取而代之的是多项面向开发者的 API 能力提升和工具更新。本文将深入剖析 OpenAI 在开发者日中亮相的几项重要…

中伟视界:精准计数,智能预警,矿山罐笼管理迈入AI时代

矿山罐笼乘员超限检测AI算法工作原理&#xff0c;有哪些参数需要考虑的&#xff1f;及其应用效果如何&#xff1f; 矿山罐笼乘员超限检测AI算法工作过程是设置罐笼一次乘坐人数&#xff0c;系统设置检测框&#xff0c;系统计数从一端进入后从另一端出去的人数&#xff0c;累积人…

五子棋双人对战项目(6)——对战模块(解读代码)

目录 一、约定前后端交互接口的参数 1、房间准备就绪 &#xff08;1&#xff09;配置 websocket 连接路径 &#xff08;2&#xff09;构造 游戏就绪 的 响应对象 2、“落子” 的请求和响应 &#xff08;1&#xff09;“落子” 请求对象 &#xff08;2&#xff09;“落子…

如何使用ssm实现基于java的实验室设备管理系统

TOC ssm768基于java的实验室设备管理系统jsp 绪论 1.1研究背景与意义 1.1.1研究背景 近年来&#xff0c;第三产业发展非常迅速&#xff0c;诸如计算机服务、旅游、娱乐、体育等服务行业&#xff0c;对整个社会的经济建设起到了极大地促进作用&#xff0c;这一点是毋庸置疑…

SpringBoot与舞蹈艺术:古典舞在线交流平台开发记

第二章 相关技术介绍 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

【基础算法总结】链表篇

目录 一&#xff0c; 链表常用技巧和操作总结二&#xff0c;算法原理和代码实现2.两数相加24.两两交换链表中的节点143.重排链表23.合并k个升序链表25.k个一组翻转链表 三&#xff0c;算法总结 一&#xff0c; 链表常用技巧和操作总结 有关链表的算法题也是一类常见并且经典的题…

案例-猜数字游戏

文章目录 效果展示初始画面演示视频 代码区 效果展示 初始画面 演示视频 猜数字游戏 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

【题解】【动态规划,最长上升子序列LIS】—— [CSP-J 2022] 上升点列

【题解】【动态规划&#xff0c;最长上升子序列LIS】—— [CSP-J 2022] 上升点列 [CSP-J 2022] 上升点列题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2 提示 1.题意解析2.AC代码 [CSP-J 2022] 上升点列 通往洛谷的传送门 题目描述 在一个二维平面内&am…

GAMES101(19节,相机)

相机 synthesis合成成像&#xff1a;比如光栅化&#xff0c;光线追踪&#xff0c;相机是capture捕捉成像&#xff0c; 但是在合成渲染时&#xff0c;有时也会模拟捕捉成像方式&#xff08;包括一些技术 动态模糊 / 景深等&#xff09;&#xff0c;这时会有涉及很多专有名词&a…

确保接口安全:六大方案有效解决幂等性问题

文章目录 六大方案解决接口幂等问题什么是接口幂等&#xff1f;天然幂等不做幂等会怎么样&#xff1f; 解决方案1&#xff09;insert前先select2&#xff09;使用唯一索引3&#xff09;去重表加悲观锁4&#xff09;加乐观锁之版本号机制5&#xff09;使用 Redisson 分布式锁6&a…

银河麒麟系统内存清理

银河麒麟系统内存清理 1、操作步骤2、注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 当银河麒麟系统运行较长时间&#xff0c;内存中的缓存可能会积累过多&#xff0c;影响系统性能。此时&#xff0c;你可以通过简单的命令来清理这…

问:LINUXWINDOWS线程CPU时间如何排序?

Linux 在Linux上&#xff0c;你可以使用ps命令结合sort命令来查看和排序进程或线程的CPU使用时间。 查看进程的CPU使用时间并按时间排序 使用ps命令的-o选项可以自定义输出格式&#xff0c;-e选项表示显示所有进程&#xff0c;--sort选项用于排序。 ps -e -o pid,tid,comm,…

排序大全(干货)

目录 1. 插入排序步骤&#xff1a; 2.选择排序思路&#xff1a;每次从待排序列中选出一个最小值&#xff0c;然后放在序列的起始位置&#xff0c;直到全部待排数据排完即可。实际上&#xff0c;我们可以一趟选出两个值&#xff0c;一个最大值一个最小值&#xff0c;然后将其放…