基于 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

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

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

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

相关文章

Linux 下 ElasticSearch 集群部署

目录 1. ElasticSearch下载 2. 环境准备 3. ElasticSearch部署 3.1 修改系统配置 3.2 开放端口 3.3 安装 ElasticSearch 4. 验证 本文将以三台服务器为例&#xff0c;介绍在 linux 系统下ElasticSearch的部署方式。 1. ElasticSearch下载 下载地址&#xff1a;Past Rel…

vue3+ts+vite项目中使用vite-plugin-pwa搭建 PWA 项目

参考官方github地址&#xff1a; https://github.com/vite-pwa/vite-plugin-pwa 官方文档地址&#xff1a; https://vite-pwa-org.netlify.app/guide MDN地址&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps 前提概要 最近项目更新需求中&am…

【C++】类和对象·this指针

C中的类与C语言中的结构体有很多的相似的地方&#xff0c;可以说本质上除了结构体只能定义成员变量&#xff0c;以及结构体默认的访问控制权限是public之外与class没啥区别。但是结构体变量每次调用函数的时候需要指针&#xff0c;而类中的成员函数明明被保存在公共代码段&…

30秒学会UML-功能类图

目录 1、类图本体 三部分 修饰符 2、类与类直接关系 泛化关系 实现关系 简单关联关系 依赖关系 组合关系 聚合关系 1、类图本体 三部分 第一层&#xff1a;类名第二层&#xff1a;成员变量&#xff08;类的属性&#xff09;第三层&#xff1a;函数方法&#xff08;类…

水利行业的智慧革命:深度剖析智慧水利解决方案,看其如何以科技力量提升水资源管理效率,保障水生态安全

目录 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心要素 1. 感知层&#xff1a;全面监测&#xff0c;精准感知 2. 网络层&#xff1a;互联互通&#xff0c;信息共享 3. 平台层&#xff1a;数据分析&#xff0c;智能决策 4. 应用层&#xff1a;精准施策&#xff0…

【线程系列之五】线程池介绍C语言

一、基本概念 1.1 概念 线程池&#xff08;Thread Pool&#xff09;是一种基于池化技术管理线程的机制&#xff0c;旨在减少线程创建和销毁的开销&#xff0c;提高系统资源的利用率&#xff0c;以及更好地控制系统中同时运行的线程数量。线程池通过预先创建一定数量的线程&am…

3 C 语言运算符深度解析:从基础到实战

目录 1 运算符分类 2 算术运算符与算术表达式 2.1 算术运算符的用法 2.2 左操作数和右操作数 3 关系运算符与关系表达式 3.1 关系运算符的用法 3.2 常量左置防错 3.3 三数相等判断误区 4 逻辑运算符与逻辑表达式 4.1 逻辑运算符的用法 4.2 闰年的判断 4.3 短路运算…

golang单元测试性能测试常见用法

关于go test的一些说明 golang安装后可以使用go test工具进行单元测试 代码片段对比的性能测试,使用起来还是比较方便,下面是一些应用场景 平时自己想做一些简单函数的单元测试&#xff0c;不用每次都新建一个main.go 然后go run main.go相对某个功能做下性能测试 看下cpu/内存…

k8s集群 安装配置 Prometheus+grafana+alertmanager

k8s集群 安装配置 Prometheusgrafanaalertmanager k8s环境如下&#xff1a;机器规划&#xff1a; node-exporter组件安装和配置安装node-exporter通过node-exporter采集数据显示192.168.40.180主机cpu的使用情况显示192.168.40.180主机负载使用情况 Prometheus server安装和配置…

自动驾驶AVM环视算法–全景和标定全功能算法实现和exe测试demo

参考&#xff1a;全景和标定全功能算法实现和exe测试demo-金书世界 1、测试环境 opencv310vs2022 2、使用的编程语言 c和c 3、测试的demo的获取 更新&#xff1a;测试的exe程序&#xff0c;无需解压码就可以体验算法测试效果 百度网盘&#xff1a; 链接&#xff1a;http…

代理IP服务中的代理池大小有何影响?

在当今数字化时代&#xff0c;网络爬虫已经成为获取各类信息必不可少的工具。在大规模数据抓取中&#xff0c;使用单一 IP 地址或同一 IP 代理往往会面临抓取可靠性降低、地理位置受限、请求次数受限等一系列问题。为了克服这些问题&#xff0c;构建代理池成为一种有效的解决方…

基于若依的ruoyi-nbcio流程管理系统修正自定义业务表单的回写bug

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)

1、下载webrtc-streamer&#xff0c;下载的最新window版本 Releases mpromonet/webrtc-streamer GitHub 2、解压下载包 3、webrtc-streamer.exe启动服务 &#xff08;注意&#xff1a;这里可以通过当前文件夹下用cmd命令webrtc-streamer.exe -o这样占用cpu会很少&#xff0c…

idea Apipost 插件导出接口文档字段类型全部是string

idea版本&#xff1a;2023.2.1 Apipost-Helper-2.0插件版本&#xff1a; 联系官方客服后&#xff0c;更换插件版本&#xff0c;问题解决。更换后的插件版本为&#xff1a; 插件链接放在文章首部了&#xff0c;可直接下载&#xff0c;使用idea直接安装这个zip包&#xff0c;无需…

深度学习pytorch学到哪种程度就算入门了?

在开始前分享一些pytorch的资料需要的同学评论888即可拿走 是我根据网友给的问题精心整理的PyTorch这个框架&#xff0c;可以读一些入门书。 PyTorch本身是一个极其庞大的框架&#xff0c;里面有数据读取、高性能计算、自动微分、模型导出、分布式训练等等。 我觉得能用这个框…

ELK日志管理与应用

目录 一.ELK收集nginx日志 二.收集tomcat日志 三.Filebeat 一.ELK收集nginx日志 1.搭建好ELKlogstashkibana架构 2.关闭防火墙和selinux systemctl stop firewalld setenforce 0 3.安装nginx [rootlocalhost ~]# yum install epel-release.noarch -y [rootlocalhost …

使用Django框架实现音频上传功能

数据库设计&#xff08;models.py&#xff09; class Music(models.Model):""" 音乐 """name models.CharField(verbose_name"音乐名字", max_length32)singer models.CharField(verbose_name"歌手", max_length32)# 本质…

Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBase 正在 章节内容 上节我们完成了&#xff1a; HBase的由…

Apache Paimon 在蚂蚁的应用

摘要 &#xff1a;本文整理自 Apache Paimon Committer 闵文俊老师在5月16日 Streaming Lakehouse Meetup Online 上的分享。内容主要分为以下四个部分&#xff1a; 什么是 Paimon蚂蚁 Paimon 应用场景蚂蚁 Paimon 功能改进未来规划 一、什么是 Paimon 1. 实时更新 Paimon 是…

Hadoop3:HDFS存储优化之小文件归档

一、情景说明 我们知道&#xff0c;NameNode存储一个文件元数据&#xff0c;默认是150byte大小的内存空间。 那么&#xff0c;如果出现很多的小文件&#xff0c;就会导致NameNode的内存占用。 但注意&#xff0c;存储小文件所需要的磁盘容量和数据块的大小无关。 例如&#x…