基于 asp.net家庭财务管理系统设计与实现
博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
1 引言
1.1 项目背景
随着计算机技术的飞速发展,计算机在日常管理中应用迅速得到了普及,利用计算机进行家庭日常财务收支的管理无疑是一条行之有效且高效的办法。本系统结合当前实际的家庭收支分配状况,经过实际的需求分析,采用功能强大的Microsoft Visual Studio 2005(Asp.net,c#)作为开发工具而开发出来的网络版家庭财务管理系统。
整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成的家庭收支分类,收入支出记帐,借入借出资金,明细统计等分析过程,经过实际使用证明,本文所设计的家庭财务管理系统可以满足家庭,个人从事财务管理方面的需要。
1.2 研究意义
收支管理是一个家庭、单位和个人日常生活不可缺少一部分,也是财务管理的重要组成部分。它的内容对于财务管理者来说都至关重要,所以家庭财务管理系统应该能够为用户提供完整,正确和灵活的理财信息和快捷的分析手段。但一直以来人们使用传统人工的方式文件、纸张记帐管理模式,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 所以利用计算机实现财务信息的管理的自动化将势在必行。
随着计算机技术的飞速发展,计算机以及计算机控制的自动处理技术已融入人类社会的各个领域并发挥着越来越重要的作用。对于当今的科学信息是一次重大的飞越,为人们的生活、工作、学习带来潜移默化的影响。今天我们使用计算机对家庭财务信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高家庭财务管理的效率。面对目前的实际状况,迫切需要开发一个新系统来适应这一些工作。
1.3 本文所做的工作
家庭财务管理系统是基于B/S体系结构的网络应用系统,其中牵涉到网站设计、网络数据库的连接和基于WEB应用程序开发等相关技术。
为了开发该家庭财务管理系统,并且使系统能够真正达到“适用、好用”的标准,本人认真学习了ASP.NET程序设计(基于C#语言)、数据库搭建、软件工程等诸多相关教程以及构建网站所需技术的理论知识。对于以下网页制作工具:Dreamweaver、 Flash、 SwishMX以及图像处理工具Photoshop做了深入的学习,基本掌握其使用方法与技巧,为网上书店系统的站点设计做好技术的支持。熟练掌握SQL Server中数据库的建立、管理与维护;利用ASP.NET(Active Server Pages)技术访问后台数据库;借助IIS(Internet Information Server)在网上进行信息发布以及对系统性能进行优化等相关技术。
2 系统解决方案
2.1 相关技术
2.1.1 Visual Studio 2005平台和C#语言介绍
Visual Studio 2005是一个功能强大、高效并且可扩展的编程环境。有许多激动人心的新功能,它提供统一的集成开发环境,支持在同样的开发环境里用Visual Basic、Visual C++、Visual C#、Visual J#和其他数十种编程语言,可以编写、调试和部署各种应用程序。它充分展现了应用程序的开发潜能、并提供了生成应用程序的所需要的工具和技术。这些应用程序给当今的企业、机构提供了强大的支持,为开发下一代以XML Web服务为中心的应用程序而设计,并推动下一代基于XML Web服务软件的发展,是有始以来功能最强大、最受欢迎的软件开发工具。
C#(发音为“C Sharp”)是一门简单、现代、优雅、面向对象、类型安全、平台独立的一门新型组件编程语言。它虽然是一种新语言,但却很难在这种语言中找到新的概念,其语法风格不仅源自C/C++家族,而且融合了Visual Basic的高效和C/C++强大,因此是微软为奠定其下一互联网霸主地位而打造的Microsoft.NET平台的主流语言。依本人看来,优点不外乎以下两方面:
其一,对于花费很多时间学会C、C++语言的程序员来说,可以不必丢弃以前的知识,就可以使用这种新的语言开发程序,尽管C#中有一些新概念、新技术和新函数,但一般而言它的语言及其语法是跟C、C++类似的,而且对于用C++编写好的代码也可被重用,主要原因是C#具有调用已有代码和系统库中的库函数的机制;
其二,组件编程已经成为当今世界软件业面向下一代程序开发的一致选择,是90年代面向对象编程的深度发展。C#生逢其时,占尽天时地利,“第一等的面向组件编程的支持”也决不是简单说说那么轻松。实际上,组件特性已经深深植入C#语言的各个层面,可为是C#锐利(Sharp)之处。
2.1.2 ASP.NET简介
ASP.NET是Microsoft.net的一部分,作为战略产品,不仅仅是 Active Server Page (ASP) 的下一个版本,它还提供了一个统一的 Web 开发模型,其中包括开发人员生成企业级 Web 应用程序所需的各种服务。ASP.NET 的语法在很大程度上与 ASP 兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。可以通过在现有 ASP 应用程序中逐渐添加 ASP.NET 功能,随时增强 ASP 应用程序的功能。
ASP.NET 可以用已编译的基于 .NET环境的可以用任何与 .NET 兼容的语言(包括 Visual Basic .NET、C# 和 JScript .NET.)创作应用程序。另外,任何 ASP.NET 应用程序都可以使用整个 .NET Framework,开发人员可以方便地获得这些技术,其中包括托管的公共语言运行库环境、类型安全、继承等等。
ASP.NET 可以无缝地与 WYSIWYG HTML 编辑器和其他编程工具(包括 Microsoft Visual Studio .NET)一起工作。这不仅使得 Web 开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到 Web 页的 GUI 和完全集成的调试支持。
因此,对于程序员来说,可以更方便地开发Web应用程序,这些是跟微软为ASP. NET设计的以下策略分不开的:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等。
2.1.3 SQL Server 2005简介
SQL Server 2005 是Microsoft 公司2005年推出的SQL Server 数据库管理系统,它是一个杰出的数据库平台,可用于大型联机事务处理、数据仓库以及电子商务等。 其特点有如下几点:
1.真正的客户机/服务器体系结构。
2.图形化用户界面。
3.丰富的编程接口工具。
4.SQL Server与Windows NT完全集成。
5.具有很好的伸缩性。
6.对Web技术的支持。
7.SQL Server提供数据仓库功能。
2.1.4 ADO.NET简介
ADO.NET是由.NET framework为与数据库中的数据进行交互而提供的一组对象类的名称。我们知道,面向对象编程的有关主要优点是可以把各种复杂的功能封装在一个自包含的单元中,接着要处理的就是—个定义好的接口中,它由一些方法和属性组成。
在ADO.NET中,我们将处理断开连接的数据集,在网站的访问者请求数据时,首先建立连接,传送数据,之后关闭连接;接着,访问者就可以修改数据,但这些修改不会在数据源中立即更新(如果需要对访问者所做的修改更新到数据库,必须重新打开连接)。这种断开连接进行访问数据库的最大优点是效率高、可伸缩性好。在以往的数据库访问中必须为用户一直保持连接,直到该用户的会话结束为止,而Web中可能同时处理上千个并行用户,可想而知,如果为每个用户同时保持连接在需要的系统资源是非常昂贵的。因此,使用断开式连接数据可以提高应用程序的执行效率,并能处理更多的工作负载(即它们的伸缩性更好)。
2.2 体系结构
2.2.1 B/S系统介绍
B/S(browser/server,简称B/S)模式,即浏览器/服务器模式,它是基于Intranet 的需求而出现并发展的。
2.2.2 Browser/Server模型工作步骤
B/S模型的工作步骤一般包括以下七步:
1.用户打开浏览器。
2.输入或自动启动主页的URL (Uniform Resource Locator),浏览器生成一个HTTP请求并把它发给指定的Internet服务器。
3.服务器发回主页的HTML (Hypertext Markup Language)页面。浏览器将其显示在屏幕上。
4.用户在主页面上进行操作(如:点击、键入等)。
5.浏览器生成相应的HTTP要求,发送给相应的服务器。
6.服务器收到请求后,查看本站点是否拥有这个文档。如果有,就将它放入响应信息中返回给浏览器。
7.浏览器收到响应,查看头文件的格式,判断能否直接显示。否则,调用对应的帮助应用程序或外挂程序处理显示。
2.3 技术开发方案
我们根据应用系统的有关规范标准和具体业务需求,结合软件开发技术发展状况,选择了以下相应系统软件或工具软件,以确定科学、合理的开发方案。具体如下表所述:
类别 | 软件名称 | 软件用途 |
数据库 | SQL Server 2005 | 后台数据库 |
Web服务 | IIS | 后台服务器 |
开发工具 | Visual Studio 2005 | 后台编码,页面设计 |
2.4 系统技术平台
硬件:
WEB服务器1台、客户机若干台、网卡、集线器等。
软件:
WEB服务器为Windows2000及以上版本,安装有IIS。
客户机安装Internet Explorer或Netscape Communicator。
相关软件,如:IE、SQL Server 2005、VS2005等等。
3 系统设计说明
3.1. 系统主要功能模块图
家庭财务管理系统由用户管理、基础数据管理、收支管理、存储管理、借还款管理、财务分析组成,如下图所示。
家庭财务管理系统功能模块结构图
3.2系统各功能模块分析
用户管理模块:创建系统用户,修改删除用户的基本信息。
收支管理模块:添加、修改、删除和查询用户的收入支出信息。
存储管理模块:添加、修改、删除和查询用户的银行储蓄信息。
借还款管理模块:添加、修改、删除和查询用户的借款和还款信息。
基本数据管理模块:添加、修改、删除和查询用户的收入项目和支出项目的信息。
注:财务分析模块包含在以上的模块中。
4数据库设计
该系统采用SQL Server2005作为后台数据库进行存储所有与系统相关的数据。根据系统功能需要主要包括以下数据表:用户信息表(family)、收入信息表(ininfo)、支出信息表(outinfo)、收入项目表 (initem)、支出项目表(outitem)、活期存储信息表(liveaccount)、定期存储信息表(fixaccount)、借入表(borrow)和借出表(lend)。
4.1 数据模型
数据模型是对现实世界数据的抽象表示,其主要目的是规划具体事务处理使用到的数据,建立相应的数据库,保持与应用程序开发之间的简洁性,有利于数据库的规范化、性能优化以及数据的简洁性。
4.1.1 E_R模型
ER模型是数据进行第一层抽象的表示方法。它的主要成分包括:实体、联系和属性。使用这三种成分,我们可以建立许多数据库应用系统的E_R模型。
家庭财务管理系统的E-R图如下图所示
4.2 数据表设计
Family表(用户信息表)
列名 | 数据类型 | 长度 | 说明 |
name | Varchar | 10 | 姓名 |
uname | Varchar | 15 | 用户名(主键) |
pwd | Varchar | 20 | 密码 |
role | Varchar | 8 | 角色 |
Birthday | Smalldatetime | 4 | 生日 |
inInfo表(收入表)
列名 | 数据类型 | 长度 | 说明 |
inInfoID | Varchar | 4 | 收入编号(主键) |
Indate | Smalldatetime | 4 | 入库时间 |
inType | Varchar | 10 | 资金方式 |
Inmoney | Int | 4 | 数额 |
inItem | Varchar | 10 | 收入项目(外键) |
Infrom | Varchar | 10 | 资金来源 |
role | Varchar | 8 | 角色或称呼(外键) |
Others | Varchar | 30 | 备注 |
inItem表(收入项目表)
列名 | 数据类型 | 长度 | 说明 |
inID | Varchar | 4 | 收入项目编号(主键) |
inItem | Varchar | 10 | 收入项目名称 |
outInfo表(支出表)
列名 | 数据类型 | 长度 | 说明 |
outInfoID | Varchar | 4 | 支出编号(主键) |
outdate | Smalldatetime | 4 | 支出时间 |
outType | Varchar | 10 | 资金方式 |
outmoney | Int | 4 | 数额 |
outItem | Varchar | 10 | 支出项目(外键) |
outTo | Varchar | 10 | 支出去路 |
role | Varchar | 8 | 角色或称呼(外键) |
Others | Varchar | 30 | 备注 |
outItem表(支出项目表)
列名 | 数据类型 | 长度 | 说明 |
outID | Varchar | 4 | 支出项目编号(主键) |
outItem | Varchar | 10 | 支出项目名称 |
liveAccount表(活期存储表)
列名 | 数据类型 | 长度 | 说明 |
liveID | Varchar | 20 | 活期银行帐号(主键) |
Livename | Varchar | 20 | 活期银行名称 |
Liveaddress | Varchar | 30 | 活期银行地址 |
liveDate | Smalldatetime | 4 | 存储时间 |
Livemoney | Int | 4 | 存储金额 |
role | Varchar | 8 | 角色或称呼(外键) |
State | bit | 5 | 存储状态 |
fixAccount表(定期存储表)
列名 | 数据类型 | 长度 | 说明 |
fixID | Varchar | 20 | 定期银行帐号(主键) |
fixname | Varchar | 20 | 定期银行名称 |
fixaddress | Varchar | 30 | 定期银行地址 |
fixDate | Smalldatetime | 4 | 存储时间 |
fixmoney | Int | 4 | 存储金额 |
Year | float | 4 | 存储年限 |
Lilv | Float | 4 | 利率 |
role | Varchar | 8 | 角色或称呼(外键) |
State | bit | 5 | 存储状态 |
borrow表(借入表)------家庭成员内的借款
列名 | 数据类型 | 长度 | 说明 |
borrowID | Varchar | 4 | 借入编号(主键) |
Fromname | varchar | 10 | 借入人名称 |
role | Varchar | 8 | 角色或称呼 |
borrowDate | Smalldatetime | 4 | 借款日期 |
borrowmoney | Int | 4 | 借款数额 |
borrowreason | varchar | 30 | 借款原因 |
State | bit | 5 | 借款状态 |
Others | varchar | 30 | 备注 |
Lend表(借出表)------家庭成员借给外人
列名 | 数据类型 | 长度 | 说明 |
lendID | Varchar | 4 | 借出编号(主键) |
toname | varchar | 10 | 借款人名称 |
role | Varchar | 8 | 角色或称呼(外键) |
lendDate | Smalldatetime | 4 | 借款日期 |
lendmoney | Int | 4 | 借款数额 |
lendreason | varchar | 30 | 借款原因 |
State | bit | 5 | 借款状态 |
Others | varchar | 30 | 备注 |
5.数据库连接设计
5.1.实现与数据库连接及操作的方法
(1)建立一个数据库连接类(clsDB.cs),主要代码如下:
public class clsDB
{
public SqlConnection connection;
public clsDB()
{
connection = new SqlConnection(connectionstring());
connection.Open();
}
public string connectionstring()//获取连接字符串
{
return System.Configuration.ConfigurationManager.AppSettings["connectionstring"];
}
public SqlDataReader GetResultASDataReader(string strsql)//返回datareader
{
SqlCommand cmd = new SqlCommand(strsql, connection);
if (connection.State == ConnectionState.Closed)
connection.Open();
return cmd.ExecuteReader();
}
public string ExecuteNoReturn(string strsql, string strtip)
{
string strreturn;
SqlCommand mycommand = new SqlCommand(strsql, connection);
try
{
if (connection.State == ConnectionState.Closed)
connection.Open();
mycommand.ExecuteNonQuery();
strreturn = strtip + "成功";
}
catch
{
strreturn = strtip + "失败";
}
mycommand.Dispose();
connection.Close();
return strreturn;
}
public void killme()
{
connection.Dispose();
}
public DataTable readtable(string strsql)//返回一个数据表
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(connectionstring());
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(strsql, conn);
adapter.Fill(dt);
conn.Close();
return dt;
}
public void caozuo(string strsql)//基本的操作
{
SqlConnection con = new SqlConnection(connectionstring());
SqlCommand cmd = new SqlCommand(strsql,con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
此种方法的好处是建立一个数据库连接类,每当需要连接数据库时调用(clsDB.cs)即可,方便、快捷。
(2)在Web配置文件中(Web.config)自定义一个连接字符串,该字符串作为常量被使用,主要代码如下:
<appSettings>
<add key="connectionstring" value="Data Source=.;Initial Catalog=familywealth;Integrated Security=True"/>
</appSettings>每当需要连接字符串时,从文件Web.config中读取连接字符串。主要代码如下:
public string connectionstring()
{
return System.Configuration.ConfigurationManager.AppSettings["connectionstring"];
}
使用时需要调用域名空间using System.Configuration ;
5.2用户管理模块设计
5.2.1新用户注册模块的实现
主要实现代码如下:
protected void createuser_Click1(object sender, EventArgs e)
{
try
{
if ((pwd1box.Text == pwd2box.Text )&&( uidbox.Text != "" )&&( rolebox.Text != ""))
{
try
{
clsDB db = new clsDB();
SqlConnection conn = new SqlConnection(db.connectionstring());
conn.Open();
string insertuser = "insert into family values('" + unamebox.Text.Trim() + "','" + uidbox.Text.Trim() + "','" + pwd1box.Text.Trim() + "','" + rolebox.Text.Trim() + "','" + birthbox.Text.Trim() + "')";
SqlCommand cmd = new SqlCommand(insertuser, conn);
cmd.ExecuteNonQuery();
Response.Write("<script language=javascript>alert('创建成功!!');location='edituser.aspx'</script>");
conn.Close();
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
}
}
else
{
Response.Write("<script language=javascript>alert('密码输入不一致或用户名称呼不能为空!')</script>");
}
}
catch(Exception ex)
{
Response.Write(ex.Message.ToString());
}
finally
{
unamebox.Text = "";
uidbox.Text = "";
rolebox.Text = "";
birthbox.Text = "";
}
}
5.2.2用户登陆模块的实现
用户登陆的实现并用Session["user"]记录用户的用户名,它贯穿于应用程序的整个生命周期,以此来区分权限。主要实现代码如下:
public partial class logon : System.Web.UI.Page
{
//用户身份验证
public void OnAuthenticate(object sender,AuthenticateEventArgs e)
{
bool Authenticated = false;
Authenticated = SiteSpecificAuthenticationMethod(Login1.UserName, Login1.Password);
e.Authenticated = Authenticated;
}
//在数据库中检验
private bool SiteSpecificAuthenticationMethod(string UserName,string Password)
{
string strUserName, strPWD;//用户名,密码
strUserName = Login1.UserName;
strPWD = Login1.Password;
string strsql;
SqlDataReader myreader;
strsql = "select uname,pwd from family where uname='" + strUserName + "'";
clsDB dbo = new clsDB();
myreader = dbo.GetResultASDataReader(strsql);
if (myreader.Read())
{
//存在用户
string strUserPwd = myreader["pwd"].ToString();
if (strPWD == strUserPwd)
{//密码正确
Session["user"] = Login1.UserName.ToString().Trim();//记录用户的用户名
Response.Redirect("Default.aspx");
myreader.Close();
myreader.Dispose();
dbo.killme();
return true;
}
else
{
Login1.FailureText = "密码错误!!!";
myreader.Close();
myreader.Dispose();
dbo.killme();
return false;
}
}
else
{
//用户不存在
Login1.FailureText = "用户不存在";
myreader.Close();
myreader.Dispose();
dbo.killme();
return false;
}
}
5.2.3搜索模块的实现
string sqlstr="select * from ininfo where role='"+rolebox.SelectedItem.Value.ToString()+"'";
cha(sqlstr);
public void cha(string sqlstr)
{
clsDB db = new clsDB();
SqlConnection con = new SqlConnection(db.connectionstring());
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sqlstr, con);
DataSet myset = new DataSet();
adapter.Fill(myset);
if (myset.Tables[0].Rows.Count > 0)
{
GridView1.DataSource = new DataView(myset.Tables[0]);
GridView1.DataBind();
con.Close();
}
else
{
Response.Write("<script language=javascript>alert('没有该人员录入的信息!')</script>");
}
}
5.2.4 Gridview数据处理的实现
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)//删除数据
{
clsDB db = new clsDB();
string deletestr = "delete from ininfo where ininfoid='" + GridView1.DataKeys[e.RowIndex].Value .ToString () + "'";
db.caozuo(deletestr);
GridView1.EditIndex = -1;
string selectstr = "select * from ininfo order by ininfoid";
cha(selectstr);
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)//换页
{
GridView1.PageIndex = e.NewPageIndex;
string selectstr = "select * from ininfo order by ininfoid";
cha(selectstr);
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)//第一次载入该页
{
this.bind();
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{//绑定数据行
if (e.Row.RowType == DataControlRowType.DataRow)
{
((LinkButton)(e.Row.Cells[10].Controls[0])).Attributes.Add("onclick", "return confirm('确定删除吗?')");
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#22dd22';this.Style.color='buttontext';this.Style.cursor='default';");
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='';this.style.color='';");
}
}
protected void bind()//修改数据与数据的绑定
{
string id = Request.QueryString["borrowid"].ToString();//数据传递
string str = "select * from borrow where borrowid='" + id + "'";
SqlDataReader myreader = db.GetResultASDataReader(str);
if (myreader.Read())
{
idbox.Text = myreader["borrowid"].ToString();
fromnamebox.Text = myreader["fromname"].ToString();
rolebox.Text = myreader["role"].ToString();
datebox.Text = myreader["borrowdate"].ToString();
jinebox.Text = myreader["borrowmoney"].ToString();
reasonbox.Text = myreader["borrowreason"].ToString();
statesbox.Text = myreader["states"].ToString();
othersbox.Text = myreader["others"].ToString();
}
myreader.Close();
}
protected void alter_Click(object sender, EventArgs e)//修改数据
{
try
{
string id =Request.QueryString["borrowid"].ToString();
if (statesbox.Checked)
{
statesbox.Text = "true";
}
else
{
statesbox.Text = "false";
}
string updatestr = "update borrow set fromname='" + fromnamebox.Text.Trim() + "',role='" + rolebox.SelectedValue.ToString().Trim() + "',borrowdate='" + datebox.Text.Trim() + "',borrowmoney='" + jinebox.Text.Trim() + "',borrowreason='" + reasonbox.Text.Trim() + "',states='" + statesbox.Text.Trim() + "',others='" + othersbox.Text.Trim() + "'where borrowid='"+id+"' ";
db.caozuo(updatestr);
Response.Write("<script language=javascript>alert('信息修改成功!');location='borrow.aspx'</script>");
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
}
}
6 测试运行情况
6.1 测试运行情况
任一系统的正确运行都是建立在多次测试基础上的,只有经过多次测试才可以发现系统存在的不足或逻辑错误。本文的家庭财务管理系统在不断的调试过程中也或多或少地遇到一些问题,但最终基本一一解决,主要归纳为以下2点:
1、实时性问题,由于本系统是B/S模式的,所以系统的响应速度是很重要的,当有大量的用户同时访问时,这样系统的响应速度必然下降。本系统在设计阶段就考虑了这方面的问题,其中最主要的解决方法就是尽量减少客户端和服务器间的通信,把一些能在客户端完成的验证都放在客户端验证,尽可能多的使用本地的脚本语言,这样客户端和服务器端的通信量就会大大减少,服务器的响应效率会提高很多。在本系统中开始时把一些验证信息放在了服务器端,这样每点一个按钮就向服务器发出一次请求,从而使服务器响应速度很慢,后来把一些控件的验证都放在了客户端,这样就减少了客户端和服务器端的通信,服务器的响应速度大大提高。
2、系统的安全性问题,后台管理界面不能让一些不具有管理员身份的人登陆,在本系统中应用了Session机制来验证用户,只有登陆了系统才能对系统后台进行操作,没有登陆的用户是不能够登陆后台管理界面的。即使用户输入后台管理的网址,系统会自动跳转到提示为登陆错误的页面,且要求用户登陆。同样,即使是合法的用户登录,他也不可以进入到管理员的操作的界面,因为管理员或客户合法登录后,他们被赋予不同的Session标记,这样系统的安全性相对大大提高。在开发即将完成的时候还没有实现这个功能,后发现直接输入管理界面的链接地址就能登陆后台,最终在系统中的后台每个界面都应用了Session机制后,才解决了这个问题。
6.2 程序有待改进方面
虽然,经过1个星期的不断努力,基本搭建起一个功能较完备、符合实际运用情况的家庭财务管理系统,但是也存在着有待完善或改进的方面,主要包括:
1、在得到查询的结果,没能实现将其导入到Excel表中,没有提供打印功能。
2、没有涉及运用到数据挖掘算法为用户提供个性化推荐服务,以提高系统的服务质量;
以上都是本系统以后将要着重改进的地方。
结 论
本人从构想到功能需求分析以及数据库设计和编程实现,创建了一个家庭财务管理系统。该系统已经完成了所有的功能模块,并且经过测试,系统的正确性与健壮性都得到了巩固与增强。只要有服务器资源,本系统可以立即投入使用。
该家庭财务管理系统出于安全考虑,必须要求用户进行身份验证,方可进行数据的修改,相应的系统中提供了用户注册和登录页面,普通用户只有浏览数据的权限。
当然本系统还有很多不足之处,由于时间关系,本人对很多实际中会出现的问题还没有加以充分考虑,对整个系统的模型也做了很大的简化,还有网络安全方面的技术也没有涉及很多。
参考文献
[1]张微,刘任凭.Dream weaver 8完美网页设计[M],中国青年电子出版社,2006-7:392-396;
[2]陈伟,SQL Server 2005数据库应用与开发教程,清华大学出版社,2007-9:978-7-302-16021-2;
[3]孙家广,软件工程,高等教育出版社,2005-7:978-7-04-016308-7;
[4]网络资源。
致谢
在这为期一周的数据库课程设计中,我得到了许多人的帮助。首先我要感谢我的指导老师张巍老师在课程设计上给予我的指导、提供给我的支持和帮助,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计的难题。同时也感谢学院为我提供良好的做课程设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。
免费下载地址:https://download.csdn.net/download/qq_41221322/89548227
其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者
原文地址:https://blog.csdn.net/qq_41221322/article/details/140484297
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!