基于 asp.net家庭财务管理系统设计与实现

news2024/9/22 19:34:55

博主介绍:专注于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

其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者
 

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

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

相关文章

破解反爬虫策略 /_guard/auto.js(二)实战

这次我们用上篇文章讲到的方法来真正破解一下反爬虫策略&#xff0c;这两个案例是两个不同的网站&#xff0c;一个用的是 /_guard/auto.js&#xff0c;另一个用的是/_guard/delay_jump.js。经过解析发现这两个网站用的反爬虫策略基本是一模一样&#xff0c;只不过在js混淆和生成…

k8s核心操作_存储抽象_K8S中使用Secret功能来存储密码_使用免密拉取镜像_k8s核心实战总结---分布式云原生部署架构搭建033

注意在看的时候一定要把 dxxxx中的xxxx换成--o----c----k----e----r 然后我们再来看一个k8s中的secret的功能,这个功能 用来存储密码的,configMap是用来存配置的 比如我们有个pod,他的镜像,如果是需要密码的,那么 我们现在是从公共仓库拉取的,如果我们从私有仓库拉取,有密码…

搜维尔科技:【研究】触觉技术将在5年内以8种方式改变人们的世界

触觉技术在过去几年中发展迅猛&#xff0c;大大提高了反馈的精确度和真实度。其应用产生了真正的影响&#xff0c;数百家公司和企业都集成了触觉技术来增强培训和研究模拟。 虽然触觉技术主要用于 B2B 层面&#xff0c;但触觉技术可能会彻底改变我们的生活&#xff0c;尤其是通…

《梦醒蝶飞:释放Excel函数与公式的力量》12.4 DMAX函数

第12章&#xff1a;数据库函数 第四节 12.4 DMAX函数 12.4.1 简介 DMAX函数是Excel中的一个数据库函数&#xff0c;用于返回数据库或数据表中特定条件下某字段的最大值。DMAX函数在处理大规模数据、数据筛选和分析时非常有用。 12.4.2 语法 DMAX(database, field, criteri…

Keka for Mac v1.4.3 中文下载 解压/压缩工具

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件2、文件访问权限修改3、访达扩展 安装完成&#xff01;&#xff…

安全防御:智能选路

目录 一、智能选路 1.1 就近选路 1.2 策略路由 1.3 虚拟系统---VRF 二、全局选路策略 1&#xff0c;基于链路带宽进行负载分担 2&#xff0c;基于链路质量进行负载分担 3&#xff0c;基于链路权重的负载分担 4&#xff0c;根据链路优先级的主备备份 DNS透明代理 一、…

【MySQL篇】Percona XtraBackup工具备份指南:常用备份命令详解与实践(第二篇,总共五篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

关于深拷贝浅拷贝的相关问题

深拷贝和浅拷贝区别了解吗&#xff1f;什么是引用拷贝&#xff1f;写一下实现深拷贝或者浅拷贝的具体代码 深拷贝和浅拷贝的区别 深拷贝和浅拷贝是两种复制对象的方法&#xff0c;区别在于是否复制了对象内部的数据。 浅拷贝只复制了对象的第一层属性&#xff0c;深拷贝可以对…

【Linux】线程——生产者消费者模型、基于阻塞队列的生产消费者模型、基于环形队列的生产消费者模型、POSIX信号量的概念和使用

文章目录 Linux线程6. 生产消费者模型6.1 基于阻塞队列的生产消费者模型6.1.1 阻塞队列模型实现 6.2 基于环形队列的生产消费者模型6.2.1 POSIX信号量的概念6.2.2 POSIX信号量的使用6.2.3 环形队列模型实现 Linux线程 6. 生产消费者模型 生产消费者模型的概念 生产者消费者模…

1-2、truffle与webjs亲密接触(truffle智能合约项目实战)

1-2、truffle与webjs亲密接触&#xff08;truffle智能合约项目实战&#xff09; 5&#xff0c;web3调用智能合约6&#xff0c;Ganache 5&#xff0c;web3调用智能合约 在前面已经完成简单的合约编写 使用web3调用此函数 Web端的代码使用web3进行智能合约的访问 首先在cmd以…

Burp安全扫描Web应用

一、浏览器设置代理 如下图所示&#xff0c;点击火狐浏览器的“扩展和主题”&#xff0c;搜索“代理”。 如下图所示&#xff0c;选择搜索到的第一个代理&#xff08;选择任何一个都可以&#xff09;。 如上图所示&#xff0c;第一个点击后&#xff0c;进入如下页面&#xff0…

ubuntu22.04 配置grpc(优化官方教程)

优化了官方教程&#xff0c;2024.7.17顺利打通。 一&#xff1a;添加环境变量 打开root文件夹下的 .bashrc 文件 编辑文件&#xff1a;滚动到文件的底部&#xff0c;然后添加以下行&#xff1a; export MY_INSTALL_DIR$HOME/.local mkdir -p "$MY_INSTALL_DIR" exp…

web安全之跨站脚本攻击xss

定义: 后果 比如黑客可以通过恶意代码,拿到用户的cookie就可以去登陆了 分类 存储型 攻击者把恶意脚本存储在目标网站的数据库中(没有过滤直接保存)&#xff0c;当用户访问这个页面时&#xff0c;恶意脚本会从数据库中被读取并在用户浏览器中执行。比如在那些允许用户评论的…

BiLSTM 实现股票多变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

首个WebAgent在线评测框架和流程数据管理平台来了,GPT-4、Qwen登顶闭源和开源榜首!

在当今科技迅速发展的时代&#xff0c;大型语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;正以前所未有的速度改变着我们与数字世界的互动方式。基于LLM的智能代理&#xff08;LLM Agent&#xff09;&#xff0c;从简单的信息搜索到复杂的网页操作&…

C1W4.Assignment.Naive Machine Translation and LSH

理论课&#xff1a;C1W4.Machine Translation and Document Search 文章目录 1. The word embeddings data for English and French words1.1The dataThe subset of dataLoad two dictionaries 1.2 Generate embedding and transform matricesExercise 1: Translating English…

防溺水预警系统引领水域安全新篇章

一、系统概述 随着人们对水域活动的需求增加&#xff0c;溺水事故频发&#xff0c;给人们的生命安全带来了严重威胁。然而&#xff0c;如今&#xff0c;一项创新科技正在以强大的功能和无限的潜力引领着水域安全的新篇章。智能防溺水预警系统&#xff0c;作为一种集成了智能感知…

CentOS 7 安装MySQL 5.7.30

CentOS 7 安装MySQL卸载&#xff08;离线安装&#xff09; 安装配置MySQL之前先查询是否存在&#xff0c;如存在先卸载再安装 rpm -qa|grep -i mysql rpm -qa|grep -i mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64如下命令找到直接 rm -rf 删除&#xff08;删除…

定制开发AI智能名片商城微信小程序在私域流量池构建中的应用与策略

摘要 在数字经济蓬勃发展的今天&#xff0c;私域流量已成为企业竞争的新战场。定制开发AI智能名片商城微信小程序&#xff0c;作为私域流量池构建的创新工具&#xff0c;正以其独特的优势助力企业实现用户资源的深度挖掘与高效转化。本文深入探讨了定制开发AI智能名片商城微信…

修改了mybatis的xml中的sql不重启服务器如何动态加载更新

目录 一、背景 二、注意 三、代码 四、使用示例 五、其他参考博客 一、背景 开发一个报表功能&#xff0c;好几百行sql&#xff0c;每次修改完想自测下都要重启服务器&#xff0c;启动一次服务器就要3分钟&#xff0c;重启10次就要半小时&#xff0c;耗不起时间呀。于是在…