简单银行管理系统(C# winform SQL Server)

一、任务描述

1.使用Asp.NET技术,完成银行管理系统
2.开发工具:VS2010
3.数据库:SQL Server 2008
功能模块:登录、开户、存款、取款、转账、挂失等功能
运行界面:

1.登录界面(Login.aspx)

在后台提供筛选,如果是管理员的登录账号与密码就跳入管理员首页,如果是普通用户,就进入普通用户首页。
Login.aspx

2.管理员首页(AdministratorIndex.aspx)

提供用户信息,银行卡信息(选项切换),和新增用户和查看日志的跳转。在用户管理选项里,在用户名下提供修改用户资料功能,在客户卡信息下可以查看该用户拥有的多有卡的信息。在银行卡信息管理选项中,可以查询卡信息,也可以对卡进行冻结,并记录日志。
AdministratorIndex.aspx
AdministratorIndex.aspx

进行查询

3.单个用户信息页面(UserEdit.aspx)

该页面可以对该用户的基本信息进行修改。
UserEdit.aspx

4.客户卡信息(UserCardInfo.aspx)

该界面提供挂失和取消挂失,并记录日志,并且在该页面提供了开户功能(突然觉得这个链接放在银行卡信息管理下或许更合适一些,哈哈)。
UserCardInfo.aspx

5.开户界面(AddCard.aspx)

AddCard.aspx

6.新增用户界面(UserEdit.aspx)

与单个的用户信息界面是同一个界面
UserEdite.aspx

7.查看日志界面(Log.aspx)

由于条数很多,进行了分页,添加了搜索
Log.aspx

8.用户首页(CustomerIndex.aspx)

可以进行存钱,取钱,转账,利用ajax判断金额是否足够以及转账时对方卡号是否存在。


二、任务详细要求

1.登录模块:

输入用户名和密码,进行匹配,匹配成功,根据不同用户类型,跳转到不同界面;普通用户跳转到普通用户的首页、管理员跳转到管理员首页;

2.开户模块(管理员):

用户管理模块
显示用户列表,列表中,通过点击用户名,可以链接到用户信息的编辑页面;提供链接,能够链接查看该用户的所有银行卡信息,并在该用户的银行卡列表页中,提供开户(新增银行卡)、挂失(记录日志)等功能
提供新增用户的功能

3.银行卡列表(管理员):

罗列出所有银行卡信息
包括卡号、用户名、身份证号、开卡日期、是否冻结
并能够使用身份证号、用户名、银行卡号进行检索功能;
提供挂失功能(记录日志);

4.日志列表(管理员)

5.存款模块(普通用户):

登录用户,选择本人的银行卡号(下拉框罗列未挂失账户),输入金额,将钱存入该账户中(仅模拟存款); 并记录日志;

6.取款模块(普通用户):

登录用户,选择本人的某个银行卡号(下拉框罗列未挂失账户),输入取款金额,取款前,使用ajax判断是否账户中有足够的钱;足够,则取款(并记录日志),否则作出相应提示;

7.转账模块(普通用户):

登录用户,选择本人的某个银行卡号(下拉框罗列未挂失账户),输入转账金额和对方帐号,使用ajax判断是否账户中有足够的钱并且对方帐号是否存在并未挂失;满足条件,则可以转账并记录日志,否则作出相应提示;

三、数据库设计

用户表

银行账户表

操作日志表
数据库结构:

用户表设计

银行账户表

日志表

关系图
有些日期是操作的当前日期,可在数据库中直接进行操作:

--为日志的操作日期添加当前日期
ALTER TABLE dbo.LogADD CONSTRAINT DFT_Log_operationdateDEFAULT(CURRENT_TIMESTAMP) FOR operationdate;

四、界面设计与功能实现

页面间联系

站点树状图

文件配置:

<connectionStrings><add name="MainConn" connectionString="server=.;database=bank;user=sa;pwd=0301;Max Pool Size = 512;"providerName="System.Data.SqlClient" /></connectionStrings>

添加引用:


这里引用的是内部的.dll,可以自行下载Maticsoft.DBUtility。此引用主要用于数据库查询。

4.1 登录界面

Login.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title><script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script><script type="text/javascript">//        判断输入是否为空function checkUserInfo() {if ($("#txtUserName").val() == "") {alert("请输入用户名");return false;}if ($("#txtPassword").val() == "") {alert("请输入密码");return false;}}</script><style type="text/css">body{background-color:#646464;}.my_login{width:300px;margin:100px auto;color:White}#buttonLogin{display: inline-block;outline: none;cursor: pointer;text-align: center;text-decoration: none;font: 14px/100% Arial, Helvetica, sans-serif;padding: .5em 2em .5em;text-shadow: 0 1px 1px rgba(0,0,0,.3);-webkit-border-radius: .5em; -moz-border-radius: .5em;border-radius: 0em;-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2);-moz-box-shadow: 0 1px 2px rgba(0,0,0,.2);box-shadow: 0 1px 2px rgba(0,0,0,.2);margin-left:20px;}</style>
</head>
<body><form id="form1" runat="server"><div class="my_login" style="text-align:center;"><h2>银行管理系统</h2><%--登录用户名--%><asp:Label ID="labelUserName" runat="server" Text="用户名:&nbsp;"></asp:Label><asp:TextBox ID="txtUserName" runat="server"></asp:TextBox><br/><br/><%--登录密码--%><asp:Label ID="labelPassword" runat="server" Text="密  码 :&nbsp; "></asp:Label><asp:TextBox ID="txtPassword" runat="server"></asp:TextBox><br/><br/><%--登录按钮--%><asp:Button ID="buttonLogin" runat="server" Text="登录" onclientclick="return checkUserInfo()" onclick="buttonLogin_Click"/></div></form>
</body>
</html>

这里写了一段js,在前端处理是否有为空的输入,如果有为空的输入就不再进入后台进行处理。注意return的使用。

Login.aspx.cs

namespace web
{public partial class Login : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void buttonLogin_Click(object sender, EventArgs e){//编写sql语句,此处的top 1 就是选出查询的第一条记录,此处可避免查出内容相同的两条语句string sql = "SELECT TOP 1 * FROM Users  WHERE username = @username AND password = @password";//设置参数SqlParameter[] pms = { new SqlParameter("@username",SqlDbType.NVarChar,50),new SqlParameter("@password",SqlDbType.NVarChar,30)};//为参数赋值pms[0].Value = txtUserName.Text;pms[1].Value = txtPassword.Text;DataSet ds = DbHelperSQL.Query(sql, pms);        //执行查询,并将数据放置在一个数据集中//判断表中是否存在数据,如果有数据则登录成功,如果没有数据,则登录失败if (ds.Tables[0].Rows.Count > 0){//根据判断选择进入哪个主页,无论进来的管理员或者是普通用户都记录下操作者的ID,方便记录日志if (ds.Tables[0].Rows[0]["usertype"].ToString() == "管理员"){Session["id"] = ds.Tables[0].Rows[0]["id"].ToString();Session["username"] = ds.Tables[0].Rows[0]["username"].ToString();Response.Redirect("AdministratorIndex.aspx");}else{Session["id"] = ds.Tables[0].Rows[0]["id"].ToString();Session["username"] = ds.Tables[0].Rows[0]["username"].ToString();Response.Redirect("CustomerIndex.aspx");}}//验证失败弹出提示框else{Response.Write("<script>alert('用户名或密码错误,请重新登录');</script>");}}}
}

此处在后台查询显示判断是否账户与密码匹配,然后根据输入的账户得到账户类型,跳转到不同用户的主页。

4.2 普通用户的主页

CustomerIndex.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title><script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script><script  language="javascript" type="text/javascript">$(function () {$("#btnDrawMoney").click(function () { //点击事件var money = $("#txtDrawMoney").val();var cnumber = $("#ddlCNumber").find("option:selected").text()$.ajax({url: "DrawMoneyHandler.ashx",type: "POST",data: { money: money, cnumber: cnumber },success: function (data) {if (data != '') {alert(data);location.reload();} else {location.reload();}}});});$("#btnTransMoney").click(function () { //点击转账事件var money = $("#txtTransMoney").val();var otherCard = $("#txtOtherCard").val();var cnumber = $("#ddlCNumber").find("option:selected").text()$.ajax({url: "TransMoneyHandler.ashx",type: "POST",data: { money: money, otherCard: otherCard, cnumber: cnumber },success: function (data) {if (data != '') {alert(data);alert("转账成功");location.reload();} else {location.reload();}}});});});</script><script type="text/javascript">//选项卡js//    选项卡js代码window.onload = function () {$(".draw").css("display", "none"); $(".trans").css("display", "none");}function showSave() {$("#lbSave").css("background-color", "red");$("#lbDraw").css("background-color", "");$("#lbTrans").css("background-color", "");$(".save").css("display", "block");$(".draw").css("display", "none");$(".trans").css("display", "none");}function showDraw() {$("#lbSave").css("background-color", "");$("#lbDraw").css("background-color", "red");$("#lbTrans").css("background-color", "");$(".save").css("display", "none");$(".draw").css("display", "block");$(".trans").css("display", "none");}function showTrans() {$("#lbSave").css("background-color", "");$("#lbDraw").css("background-color", "");$("#lbTrans").css("background-color", "red");$(".save").css("display", "none");$(".draw").css("display", "none");$(".trans").css("display", "block");}</script><style type="text/css">*{margin:5px;}body{background-color:#646464;}.my_login{width:400px;margin:100px auto;color:White}#btnSaveMoney,#btnDrawMoney,#btnTransMoney{display: inline-block;outline: none;cursor: pointer;text-align: center;text-decoration: none;font: 14px/100% Arial, Helvetica, sans-serif;padding: .5em 2em .5em;text-shadow: 0 1px 1px rgba(0,0,0,.3);-webkit-border-radius: .5em; -moz-border-radius: .5em;border-radius: 0em;-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2);-moz-box-shadow: 0 1px 2px rgba(0,0,0,.2);box-shadow: 0 1px 2px rgba(0,0,0,.2);}#lbSave,#lbDraw,#lbTrans{cursor:pointer;padding:5px 5px 5px;}</style>
</head>
<body><form id="form1" runat="server"><div class="my_login"><asp:Label ID="Label1" runat="server" Text="选择自己卡号"></asp:Label><asp:DropDownList ID="ddlCNumber" runat="server"></asp:DropDownList><%--顶部的选项卡指示--%><asp:Label ID="lbSave" runat="server" Text="存钱" onmouseover = "showSave()"></asp:Label><asp:Label ID="lbDraw" runat="server" Text="取钱" onmouseover = "showDraw()"></asp:Label><asp:Label ID="lbTrans" runat="server" Text="转账" onmouseover = "showTrans()"></asp:Label><br/><asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager><asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate><div class="save" style="text-align:center;"><asp:TextBox ID="txtSaveMoney" runat="server"></asp:TextBox><br/><asp:Button ID="btnSaveMoney" runat="server" Text="存钱" onclick="btnSaveMoney_Click" /></div></ContentTemplate></asp:UpdatePanel><asp:UpdatePanel ID="UpdatePanel2" runat="server"><ContentTemplate><div class="draw" style="text-align:center;display:none;"><asp:TextBox ID="txtDrawMoney" runat="server"></asp:TextBox><br/><asp:Button ID="btnDrawMoney" runat="server" Text="取钱" /></div></ContentTemplate></asp:UpdatePanel><asp:UpdatePanel ID="UpdatePanel3" runat="server"><ContentTemplate><div class="trans" style="text-align:center;display:none;"><asp:Label ID="Label2" runat="server" Text="对方账号"></asp:Label><asp:TextBox ID="txtOtherCard" runat="server"></asp:TextBox><br/><asp:Label ID="Label3" runat="server" Text="转入金额"></asp:Label><asp:TextBox ID="txtTransMoney" runat="server"></asp:TextBox><br/><asp:Button ID="btnTransMoney" runat="server" Text="转账" /></div></ContentTemplate></asp:UpdatePanel></div></form>
</body>
</html>

此处在前端首先有一个选项卡,里面用到了updatePanel局部更新功能,然后是通过ajax向后端提供输入数据,并获得返回。
在后台程序绑定下拉:

 private void BindDrop(){int userid = Convert.ToInt32(Session["id"]);//测试用,这样就可以不用从头开始测试if (userid == 0){userid = 2;}string sql = "SELECT cnumber,id FROM BankAccount WHERE islost = 'False' AND userid = @userid";SqlParameter[] pms = { new SqlParameter("@userid",SqlDbType.Int)};pms[0].Value = userid;DataSet ds = DbHelperSQL.Query(sql,pms);ddlCNumber.DataSource = ds;ddlCNumber.DataTextField = "cnumber";ddlCNumber.DataValueField = "id";DataRow drNew = ds.Tables[0].NewRow();//方法,新建一行drNew["id"] = 0;//为新增的一行添加两个属性drNew["cnumber"] = "请选择";ds.Tables[0].Rows.InsertAt(drNew, 0);//将新增的一行添加到ds中ddlCNumber.DataBind();}

在一般程序里面,为了使用session值:

首先

using System.Web.SessionState;

其次

 public class TransMoneyHandler : IHttpHandler, IRequiresSessionState

最后

int ruserid = Convert.ToInt32(context.Session["id"]);
string username = Convert.ToString(context.Session["username"]);

4.3 管理员主页

在添加多个输入框进行查询时,注意sql语句书写方式:

  StringBuilder sbsql = new StringBuilder();sbsql.AppendLine("SELECT B.cnumber,U.username,U.userID,B.opendate,B.islost FROM ");sbsql.AppendLine("Users AS U INNER JOIN BankAccount AS B ON U.id = B.userid");sbsql.AppendLine("WHERE 1=1");if (username != ""){sbsql.AppendLine("AND U.username LIKE @username");}if (userID != ""){sbsql.AppendLine("AND U.userID = @userID");}if (cnumber != ""){sbsql.AppendLine("AND B.cnumber LIKE @cnumber");}SqlParameter[] pms = { new SqlParameter("@username",SqlDbType.NVarChar,50),new SqlParameter("@userID",SqlDbType.NVarChar,30),new SqlParameter("@cnumber",SqlDbType.NVarChar,30)};pms[0].Value = "%" + username + "%";pms[1].Value = userID;pms[2].Value = "%" + cnumber + "%";DataSet ds1 = DbHelperSQL.Query(sbsql.ToString(),pms);

4.4 查看日志界面

在此详细讲下如何进行分页:
首先为gridview更改属性:


添加事件:


在gridview底部添加代码:

<%--添加分页--%><PagerTemplate>当前第:<%--//((GridView)Container.NamingContainer)就是为了得到当前的控件--%><asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label>页/共:<%-- //得到分页页面的总数--%><asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label>页<%--//如果该分页是首分页,那么该连接就不会显示了.同时对应了自带识别的命令参数CommandArgument--%><asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page"Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>首页</asp:LinkButton><asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev"CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上一页</asp:LinkButton><%--//如果该分页是尾页,那么该连接就不会显示了--%><asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page"Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下一页</asp:LinkButton><asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page"Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页</asp:LinkButton>转到第<asp:TextBox ID="txtNewPageIndex" runat="server" Width="20px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>'/>页<%--//这里将CommandArgument即使点击该按钮e.newIndex 值为3--%><asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-2"CommandName="Page" Text="Go"/></PagerTemplate>

后台代码:

 protected void gvLog_PageIndexChanging(object sender, GridViewPageEventArgs e){// 得到该控件GridView theGrid = sender as GridView;int newPageIndex = 0;if (e.NewPageIndex == -3){//点击了Go按钮TextBox txtNewPageIndex = null;//GridView较DataGrid提供了更多的API,获取分页块可以使用BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRowGridViewRow pagerRow = theGrid.BottomPagerRow;if (pagerRow != null){//得到text控件txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox;}if (txtNewPageIndex != null){//得到索引newPageIndex = int.Parse(txtNewPageIndex.Text) - 1;}}else{//点击了其他的按钮newPageIndex = e.NewPageIndex;}//防止新索引溢出newPageIndex = newPageIndex < 0 ? 0 : newPageIndex;newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex;//得到新的值theGrid.PageIndex = newPageIndex;//重新绑定BindData();}

分页参考网址:http://blog.csdn.net/uniqer/article/details/7756385

关于我

  • 一个推崇全栈开发的前端开发人员

  • 微信: itrzzh

  • 公众号:全栈道

  • 个人网站:https://www.iotzzh.com

  • 知识星球:全栈道

  • B站:https://space.bilibili.com/285025688

  • 抖音:全栈道

  • github:https://github.com/iotzzh

  • gitee: https://gitee.com/iotzzh

捐赠鼓励

开源不易,如果《全栈道》对你有些帮助,可以请作者喝杯咖啡,算是对开源做出的一点点鼓励吧!

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

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

相关文章

数据分析-Pandas两种分组箱线图比较

数据分析-Pandas两种分组箱线图比较 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&am…

牛客周赛 Round 36

赛况 C题可惜&#xff0c;比赛时模拟没有想明白&#xff0c;只对了一半&#xff0c;赛后看了大佬们的题解后恍然大悟&#xff0c;而F题是压根没思路&#xff0c;况且F题部分分也比较难拿。 题目列表 A-小红的数位删除 思路 将读入的数字整除10做三次后输出即可 参考代码 #inc…

高效管理百万级数据:MySQL备份与恢复实战指南

简介 在当今数字化时代&#xff0c;数据是企业不可或缺的核心资产之一&#xff0c;而MySQL作为一种流行的关系型数据库管理系统&#xff0c;其百万级数据的高效管理显得尤为重要。本实战指南将深入探讨MySQL备份与恢复的关键策略&#xff0c;为您提供全面而实用的解决方案。通…

streamlit学习-如何修改css样式

streamlit学习-如何修改css样式 效果图代码(srv.py)运行 streamlit默认的样式有时并不符合自己的要求。比如手机上的布局太浪费空间,我们希望一屏能放下所有的元素,本文演示了如何操作 效果图 代码(srv.py) import streamlit as st #1.31.1 import cv2 import numpy as np im…

实验二(二)OSPF路由协议基础实验

1.实验介绍 1.1关于本实验 开放式最短路径优先 OSPF(Open Shortest Path First)是IETF 组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。目前针对 IPv4 协议使用的是 OSPF Version 2(RFC2328);OSPF 作为基于链路状态的协议&#xff0c;OSPF 具有以下优…

OpenFeign的常规使用

架构: 一.新建module 引入依赖: <!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> yml配置; server:port: 80spring:applicati…

计算机网络(五)

网络层 网络层的主要目的是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输。 要实现网络层&#xff0c;主要解决三个问题&#xff1a; ①网络层向运输层提供怎样的服务&#xff1f;&#xff08;“可靠传输“、”不可靠传输“&#xff09; ②网络层寻址 ③路由选择…

2024年k8s最新版本安装教程

k8s安装教程 1 k8s介绍2 环境搭建2.1 主机准备2.2 主机初始化2.2.1 安装wget2.2.2 更换yum源2.2.3 常用软件安装2.2.4 关闭防火墙2.2.5 关闭selinux2.2.6 关闭 swap2.2.7 同步时间2.2.8 修改Linux内核参数2.2.9 配置ipvs功能 2.3 容器安装2.3.1 设置软件yum源2.3.2 安装docker软…

动态规划(蓝桥杯 C++ 题目 代码 注解)

目录 介绍&#xff1a; 题目一&#xff08;数字三角形&#xff09;&#xff1a; 题目二&#xff08;跳跃&#xff09;&#xff1a; 题目三&#xff08;背包问题类型&#xff09;&#xff1a; 题目四&#xff08;蓝肽子序列&#xff09;&#xff1a; 题目五&#xff08;合唱…

学习笔记。。。

1.字符串的拼接 1.sprintf() 往字符串的前面或中间、后面拼接一个字符串。 2.strncpy()用来复制字符串的前n个字符 //dest为目标数组&#xff0c;src为源数组&#xff0c;n为要复制的字符个数 2.char* My_strncpy(char* dest, const char* src, int n) 3.char *strcat(ch…

代码训练LeetCode(7)删除有序数组中的重复项

代码训练(7)LeetCode之删除有序数组中的重复项 Author: Once Day Date: 2024年3月10日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09;力扣…

【病毒查杀】“PE启动盘+360杀毒软件”对硬盘病毒查杀

通过本步骤&#xff0c;用户可使用WinPE版本360系统急救箱软件对主板硬盘进行病毒木马扫描和杀毒操作。 360系统急救箱&#xff0c;这款软件是360官方推出的一款杀毒工具箱&#xff0c;可以帮助用户仅在WinPE环境下就可对硬盘进行病毒木马查杀&#xff0c;可能查杀过后因病毒木…

网络安全: Kali Linux 进行 MSFvenom 程序利用

目录 一、实验 1.环境 2. Kali Linux 进行 MSFvenom 程序利用 3. 创建计划任务自动运行 MSFvenom 程序 二、问题 1.在线加密解密 2.MSF 运行失败 3.MobaXterm 连接Ubuntu 失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本IP备注Kali Linux20…

STM32单片机基本原理与应用(十一)

语音识别实验 此实验采用STM32核心板 LD3320模块&#xff0c;通过初始化LD3320并写入待识别关键词&#xff0c;对麦克风说出相应关键词&#xff0c;实现实训平台上的流水灯相应变化的效果。 LD3320 是一颗基于非特定人语音识别 &#xff08;SI-ASR&#xff1a;Speaker-Indepen…

AI训练数据处理和读取

AI训练数据处理和读取 AI数据处理 AI数据处理概述 AI数据处理是指对原始数据进行一系列的操作&#xff0c;以便机器学习算法能够从中提取有用的信息&#xff0c;进而进行模型的训练、验证和部署。数据处理是机器学习流程中的关键步骤&#xff0c;其质量直接影响到模型的性能…

手把手一起开发SV4E-I3C设备(四)

JEDEC DDR5 SPD Hub Devices例程 所有例程&#xff0c;SV4E-I3C设备连接器件均为SPD5芯片&#xff0c;Reg表示MR寄存器&#xff0c;Mem表示NVM存储器 1、ENEC CCC ENEC 启用事件中断&#xff0c;ENEC CCC 仅在设备置于 I3C 基本模式后才受支持。当 SPD5 注册 ENEC CCC 时&am…

【CSS面试题】高度塌陷问题及解决

什么情况下产生 (when 父盒子没有定义高度&#xff0c;但是子元素有高度&#xff0c;希望用子盒子撑起父盒子的高度&#xff0c;但是子盒子添加了浮动属性之后&#xff0c;父盒子高度为0 <template><div class"father"><div class"son"&…

算法第二十六天-删除有序数组中的重复项Ⅱ

删除有序数组中的重复项 题目要求 解题思路 题目要求中提到原地修改&#xff0c;那么肯定需要一个指针指向当前即将放置元素的位置&#xff0c;需要另外一个指针向后遍历所有元素&#xff0c;所以[双指针]解法呼之欲出。 慢指针slow&#xff1a;指向当前元素放置的位置&…

F - Earn to Advance

解题思路 由于对于一点不知道后面得花费&#xff0c;所以无法决策当前是否要停下赚钱或要停下多久考虑一点&#xff0c;可以由其左上方的所有点到达所以从往前推&#xff0c;得出到的总花费然后考虑从之后不赚钱直接到最终所用次数和剩余钱若存在&#xff0c;在后面点赚钱更优…

Python错题集-8:AttributeError(找不到对应的对象的属性)

1问题描述 AttributeError: AxesSubplot object has no attribute arc 2代码详情 import matplotlib.pyplot as plt# 创建一个新的图形和坐标轴 fig, ax plt.subplots()# 定义弧线的参数 center (0.5, 0.5) # 圆心坐标 (x, y) width 1.0 # 半径 height 0.5 # 半径 ang…