ASP.NET银行大厅自助信息系统的开发与实现
本毕业设计在基于银行业务大厅现有业务的基础上,针对自助银行的概念和其独有特点,通过.NET+SQL技术,开发一个简单的银行大厅自助信息系统,完成一些自助银行的业务需求如帐户信息查询、帐户挂失、自助交费、留言、新闻查询等功能。
本论文从分析目前电子银行发展现状入手,具体深入地考察了当前自助银行的客户需求,详细说明了系统的结构设计,后台数据库的设计,系统功能设计,最后系统测试的效果,客观对整个系统进行了总结并对其提出修改意见。
关键字:帐户挂失;自助银行;.NET技术;C#语言;SQL SERVER数据库
3.1 功能需求
本论文根据自助银行实际功能和用户的实际需求,在.NET环境下为用户提供必要的功能服务,其系统分为以下三类用户:
(1)管理员用户:这是具有高级权限的一类用户,要求能够发布新闻和管理新闻;能够与用户进行交流,也就是要求能够通过发布留言形式处理用户的问题并且管理留言;要求能及时的处理用户的挂失申请。
(2)帐号用户:浏览自己的帐户信息,实现对帐户密码的管理;能够对自己的帐户活动进行细致的查询;能够实现帐户在紧急情况下的挂失处理;能够提供便捷服务,如简单的交费;要求浏览最近新闻,和发表看法。
(3)一般用户:要求浏览最近新闻,和发表看法。
4.1 系统结构简介
本文论述的银行大厅自助信息管理系统是基于B/S结构的数据库应用系统,具体反映为ASP+SQL技术的一种具体实现,根据B/S结构和用户实际应用特点,实现的功能主要可以在两类不同的机子上完成:Web服务器和自助机客户端。在客户端,主要实现使用用户的浏览功能和提交业务功能。在Web服务器上,主要来实现整个自助银行功能的后台处理及存储功能。后台数据库由一系列的具有相互关联的逻辑关系的表构成。还有一些存储过程和控件,用于实现其他的功能比如自动编号和图表生成。
4.2 具体功能模块划分
根据用户的需求分析和对系统功能的考量,得到如下的系统功能图:

5.1 用户登陆
5.1.1 储户登陆

图5-1 用户登陆页面
系统会自动判断身份证号,帐户号码,密码,验证码是否为空,还会验证身份证号是否符合国家规定的标准格式
//验证码的实现
asp:TextBox ID="txtCode" runat="server" Font-Size="0.8em" Width="74px" MaxLength="4"></asp:TextBox>
<img alt="点击刷新验证码" src="CodeImg.aspx" height="15" width="45" οnclick="this.src='CodeImg.aspx'" /></td>
if (txtCode.Text != Session["VerifyCode"].ToString())
{Response.Write("<script>alert('" + "验证码不正确!" + "');</script>");
return; }
5.1.2 管理员登陆

图5-2 管理员登陆页面
5.2 查询帐户信息
成功登陆系统过后,所要查询的帐户信息就会马上显示出来。存折类型会用红色字体注明,挂失时间和处理时间在帐户正常的时候不会有显示。信息显示采用.NET2005的GridView控件(存折帐户相同):

图5-3 帐户显示效果图
后台动作:
SQLstr = "select account as 帐户,balance as 帐户余额,estate as 帐户状态,firsttime as 挂失时间,secondtime as 处理时间 from account where ucard = '" + Session["logincard"].ToString() + "' and sort = '信用卡'";
//获取数据库连接字符串
strConnection = ConfigurationManager.AppSettings.Get("strConnection");
//建立数据库连接
myConnection = new SqlConnection(strConnection);
myAdapter = new SqlDataAdapter(SQLstr, myConnection);
//定义内存数据库
Dsak = new DataSet();
myAdapter.Fill(Dsak, "ak");
GVmyaccount_k.DataSource = Dsak.Tables["ak"];
GVmyaccount_k.DataBind();
追加显示多个帐户:用户可以通过继续输入帐户号码和密码添加更多的帐户进行查询,系统会自动搜寻数据库中是否存在此帐户。

图5-4 帐户追加功能图
5.3 新闻浏览
用户可以浏览最近发布的几条新闻题目,其中新闻题目过多的时候,系统会分页显示它们。通过点选题目可以在新的页面看到新闻的具体内容。

图5-5 新闻标题显示效果图

图5-6 新闻内容显示效果图
管理员可以对新闻内容添加和删除。

图5-7 新闻删除示意

图5-8 新闻发布示意图
5.4 留言管理
任何权限的用户均可以发布留言,留言必须输入题目。只有管理员才能回复用户的留言,已回复留言的内容系统用黄色注明。

图5-9 处理回复留言

图5-10 回复示意图
5.5 消费日志查询
用户通过设置时间起点和终点查询选择帐户的金额发生记录,可以作为帐户改变的日志记录。

图5-11 帐户消费查询示意图
5.6 自助交费
本系统提供简单代收费管理功能,交费项目由管理员后台添加,用户需要选择需要交费的项目和输入自己的某个帐号和其密码(定期帐号不能进行交费),便可以缴纳不多于自己帐户余额的金额。交费金额精确到小数点后一位。

图5-12 自助交费功能图
SQLstr = "select * from account where account = '" + DDLrepchargeaccount.Text + "'";
//获取数据库连接字符串和建立数据库连接省略……
myAdapter = new SqlDataAdapter(SQLstr, myConnection);
Dsbalance = new DataSet();
myAdapter.Fill(Dsbalance, "balance");
if(Convert.ToInt64(Dsbalance.Tables["balance"].Rows[0]["balance"].ToString())<Convert.ToInt64(TBrepchargemoney.Text))
{
Response.Write("<script language='javascript'>alert('你的帐户 " + DDLrepchargeaccount.Text + " 没有足够的余额来交纳此项费用');</script>");
return;
}
SQLstr = "INSERT INTO note(account,citem,csum) VALUES ('" + DDLrepchargeaccount.Text + "','" + DDLrepchargeitem.Text + "','" + TBrepchargemoney.Text + "')";
myCmd = new SqlCommand(SQLstr, myConnection);
myCmd.Connection.Open();
//异常捕获语句省略……
//扣除消费的金额
Lstr = "update account set balance = '" + Convert.ToString(Convert.ToInt64(Dsbalance.Tables["balance"].Rows[0]["balance"].ToString()) Convert.ToInt64(TBrepchargemoney.Text)) + "' where account = '" + DDLrepchargeaccount.Text + "'";
myCmd = new SqlCommand(SQLstr, myConnection);
myCmd.Connection.Open();
//异常捕获语句省略……
5.7 挂失处理
5.7.1 用户挂失申请和取消挂失申请
帐号挂失功能主要采用用户申请挂失,管理员批准挂失;处理完成后用户申请取消挂失,管理员批准的模式。一般用户申请挂失后24小时之内,银行要对申请作出回应,系统会自动记录申请提交的时间,和处理的时间,方便用户查看。

图5-13 用户挂失申请和取消挂失申请图
//帐户状态改变处理
protected void GridViewreport_SelectedIndexChanged(object sender, EventArgs e)
{
SQLstr = "update account set estate = '挂失处理中',firsttime ='" + DateTime.Now.ToString() + "' where account = '" + GridViewreport.SelectedRow.Cells[1].Text + "'";
myCmd = new SqlCommand(SQLstr, myConnection);
myCmd.Connection.Open();
}
//异常捕获语句省略……
//帐户状态改变处理
protected void GridViewureport_SelectedIndexChanged(object sender, EventArgs e)
{
SQLstr = "update account set estate = '取消挂失中' where account = '" + GridViewureport.SelectedRow.Cells[1].Text.ToString().Trim() + "'";
myCmd = new SqlCommand(SQLstr, myConnection);
myCmd.Connection.Open(); }
//异常捕获语句省略……
5.7.2 管理员处理挂失和处理申请挂失

图5-14 管理员处理挂失和处理申请挂失图
protected void GridViewadmindeluser_SelectedIndexChanged(object sender, EventArgs e)
{
SQLstr = "select * from account where account = '" + GridViewadmindeluser.SelectedRow.Cells[1].Text + "'";
myAdapter = new SqlDataAdapter(SQLstr, myConnection);
Dsuser = new DataSet();
myAdapter.Fill(Dsuser, "account");
}
if (Dsuser.Tables["account"].Rows[0]["estate"].ToString() == "挂失处理中")
{
SQLstr = "update account set estate = '挂失',secondtime ='" + DateTime.Now.ToString() + "' where account = '" + GridViewadmindeluser.SelectedRow.Cells[1].Text + "'";
}
else
{
SQLstr = "update account set estate = '正常',firsttime = null,secondtime = null where account = '" + GridViewadmindeluser.SelectedRow.Cells[1].Text + "'";
}
myCmd = new SqlCommand(SQLstr, myConnection);
myCmd.Connection.Open();

图5-15 用户看到的帐户状态改变图
5.8 密码修改
5.8.1 用户帐户密码修改
系统会要求用户输入原有密码并确认后,便可以将旧有密码替换成新密码,系统会自动判断两次输入的新密码是否一致。

图5-16 用户帐户密码修改图
5.8.2 管理员修改登陆密码

图5-17 管理员修改登陆密码
5.9 帐号锁定
此功能是为了防止恶意猜测帐户密码的行为,当用户输入错误密码,登陆某个帐户不成功达到五次,此帐号便暂时锁定,用户必须申请管理员取消锁定。

图5-18 帐号锁定图
if (Convert.ToInt32(Session["loginoverflow"].ToString()) >= 5)
{
SQLstr = "INSERT INTO loginoverflow(lofucard,lofip) VALUES ('" + TBuname.Text + "','" + Page.Request.UserHostAddress+ "')";
myCmd = new SqlCommand(SQLstr, myConnection);
myCmd.Connection.Open();
try
{
myCmd.ExecuteNonQuery();
myCmd.Connection.Close();
}
catch
{
myCmd.Connection.Close();
return;
}
{
Response.Redirect("~/index.aspx");
Response.Write("<script language='javascript'>alert('登陆失败');</script>");
}
}
try
{
strConnection = ConfigurationManager.AppSettings.Get("strConnection");
//获取数据库连接字符串
//建立数据库连接
myConnection = new SqlConnection(strConnection);
SQLstr = "select lofucard as 锁定帐号,loftime as 锁定时间 from loginoverflow order by id desc";
myAdapter = new SqlDataAdapter(SQLstr, myConnection);
Dslw = new DataSet();
myAdapter.Fill(Dslw, "ip");
GridViewadmindellw.DataSource = Dslw.Tables["ip"];
GridViewadmindellw.DataBind();
}
catch
{ return;}
}
protected void GridViewadmindellw_SelectedIndexChanged(object sender, EventArgs e)
{
//删除黑名单中的记录
SQLstr = "delete loginoverflow where lofucard = '" + GridViewadmindellw.SelectedRow.Cells[1].Text + "' and lofip = '" + GridViewadmindellw.SelectedRow.Cells[2].Text + "'";
myCmd = new SqlCommand(SQLstr, myConnection);
myCmd.Connection.Open();
try
{
myCmd.ExecuteNonQuery();
myCmd.Connection.Close();
}
catch
{
myCmd.Connection.Close();
return;
}
Response.Redirect("~/adminipkill.aspx");
}
相关文章:
ASP.NET银行大厅自助信息系统的开发与实现
摘 要 本毕业设计在基于银行业务大厅现有业务的基础上,针对自助银行的概念和其独有特点,通过.NETSQL技术,开发一个简单的银行大厅自助信息系统,完成一些自助银行的业务需求如帐户信息查询、帐户挂失、自助交费、留言、新闻查询…...
学习Vue3中reactive
学习Vue3中reactive 一、前言1、响应式对象2、对象属性的访问3、嵌套响应式对象4、避免直接修改响应式对象5、ref vs reactive 一、前言 在 Vue 3 中,reactive 是一个用于创建响应式对象的函数。响应式对象是 Vue 3 中数据驱动视图的核心,它们的属性的变…...
【Transformer-BEV编码(10)】CVPR2021 PYVA 第一个明确提到 cross-attention decoder可用于视图转BEV
论文信息 论文名:Projecting Your View Attentively: Monocular Road Scene Layout Estimation via Cross-view Transformation 中文:通过交叉视图变换(crossview transform module)估计单目道路场景布局 数据集:KITT…...
nestJs中跨库查询
app.module.ts中配置 模块的module中 注意实体类在写的时候和数据库中的表名一样 service中使用一下...
Java编程思想
面向对象编程(OOP)-CSDN博客 面向对象(OOP)的主要特点-CSDN博客 接口(Interface)和抽象类(Abstract Class)编程思想-CSDN博客 接口(Interface)和抽象类(Abstract Class)区别-CSDN博客 抽象类(Abstract Class)-CSDN博客 普通类和抽象类-CSDN博客 内部类编程思想-CSDN博客 …...
数组(Java)
数组 数组是相同类型元素的集合。 数组的定义和使用 数组的创建 数组名又叫引用变量,简称引用 下面代码段中new表示创建新的对象 T[ ] 数组名 new T[ N ];//数组名又叫引用变量,简称变量 //T:表示数组中存放元素的类型 //T[]…...
接口自动化测试框架搭建
🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、原理及特点 参数放在XML文件中进行管理用httpClien…...
(四十二)第 6 章 树和二叉树(树的二叉链表(孩子-兄弟)存储)
1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…...
测试萌新Python学习(五)接口自动化测试requests
requests 接口自动化测试requests库基本实现请求-GET基本实现请求-POST基本实现请求-补充 sessionCookie和Session案例params 接口自动化测试 概念程序驱动代替人工驱动去实现接口测试 实现方式 测试工具(jmeter, postman, …)编码工具(python, java, …) 比较 工具 优点:…...
Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树
Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 目录 Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 一、简单介绍 二、监督学习 算法 说明前的 数…...
QT日志类SimpleQtLogger的简单记录
在现代软件开发中,日志记录是必不可少的部分。它不仅帮助开发者在调试和维护软件时了解程序的运行状态,还能提供关键的错误信息。对于使用Qt框架开发应用程序的开发者来说,选择一个合适的日志库至关重要。本文将详细介绍Qt日志库SimpleQtLogg…...
设计模式:观察者模式
观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式通常被用来实现事件处理系统、实时数据更新、…...
ICode国际青少年编程竞赛- Python-5级训练场-带参数函数
ICode国际青少年编程竞赛- Python-5级训练场-带参数函数 1、 def get_item(a):Dev.step(a)Dev.step(-a) get_item(4) Spaceship.step(2) get_item(2) Spaceship.step(3) get_item(5) Spaceship.step(2) get_item(3) Spaceship.step(3) get_item(4)2、 def get_item(a): D…...
运维别卷系列 - 云原生监控平台 之 02.prometheus exporter 实践
文章目录 [toc]exporter 简介常用的 exporternode-exporter 实践创建 svc创建 daemonsetprometheus 配置服务发现 exporter 简介 随着 Prometheus 的流行,很多系统都已经自带了用于 Prometheus 监控的接口,例如 etcd、Kubernetes、CoreDNS 等,…...
OSPF基本配置
1.启动OSPF进程 [rijospf1 router-id 1.1.1.1 --- 手工配置RID [r1-ospf-1) 2,创建区域 [r1-ospf-1]area 0 [r1-ospf-1-area-0.0.0.0) 3,宣告 目的:1,只有被宣告网段中的接口才能被激活。 --- 激活接口 ---- 只有激活的接口才能收发OSPF的…...
HIVE大数据平台SQL优化分享
相信很多小伙伴在面试的时候,必然跳不过去的一个问题就是SQL脚本的优化,这是很多面试官爱问的问题,也是可以证明你实力进阶的一个重要的能力。 下面给大家分享一个重量级的大数据行业sql技能---hive大数据平台SQL优化。 此文章是大数据平台…...
JS算法-十大排序算法(上)
思想小剧场 如果我的相对论被证明是正确的,德国人就会说我是德国人,法国人会说我是一个世界公民;如果我的相对论被否定了,法国佬就会骂我是德国鬼子,而德国人就会把我归为犹太人。—爱因斯坦 以下案例都是升序 const a…...
c++编程(11)——string类的模拟实现
欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 前言string类的模拟实现string的成员对象构造、赋值、析构访问成员对象的接口访问字符串中的元素迭代器对字符序列的插入、删除元素操作mystring类的相关操作 mystring类的所有模拟实现以及测试案例 前言 本…...
Python从0到POC编写--函数
数学函数: 1. len len() 函数返回对象(字符、列表、元组等)长度或项目个数, 例如: str "python" len(str)2. range range() 函数返回的是一个可迭代对象(类型是对象),…...
【教程】Linux/Jetson 安装X11VNC同步屏幕内容
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 目录 背景说明 实际效果 安装步骤 安装 x11vnc 配置 x11vnc 配置 x11vnc 作为系统服务 使用 VNC 客户端连接 背景说明 通常vnc-server是单…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
