赞
踩
【免费】基于java记账管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89239533
记账管理系统
摘 要
近年来由于生活节奏的加快,好像每个人都被很多难以启齿的问题困惑,然而关于随意消费是大多数人头疼的问题,没有任何计划和筹备的情况下随意消费,导致现实生活中我们所称为的“月光族”。如果我们定期花一些时间去记录我们生活中那些主要的消费情况,了解自己的收入和支出情况,这样坚持几个月你将会发现一些规律,收入是否稳定,月底的时候是收入少了还是支出多了,投资是否符合预期;这些规律,就是你通过记账了解到的财务状况,财务状况没有单纯的好与坏之分,最理想的情况,当然是无论什么情况都不会入不敷出,但这个情况对于刚毕业的人和工作十年的人情况显然是不同的。
当你逐渐了解自己的财务状况,就可以学着做简单的收支规划。大部分月光族的根源其实是缺乏规划,想买什么的时候就买了。并不是说规划不能随意买东西,规划的价值在于让你使用资金的效率最高。无论你用金钱换取的必需品,满足感或者快乐,都可以通过规划获得比较高的效率。
本记账系统是一个基于国内外电子商务网站的发展现状,采用B2C(Business to Consumers)模式开发的电子商务平台,它的价值所在对于那些随意消费性的人群能起到一个很大的警示作用,而且系统扩张性很强,能根据客户的不同需求进行快速改进。该系统采用B/S三层结构,服务器是Tomcat同时运用JSp技术进行动态页面设计,后台数据库是Oracle。
关键词:记账管理系统;B/S结构;Oracle数据库;JSP;
ABSTRACT
In recent years, with the quickening pace of life, everyone seems to be a lot of difficult questions about casual consumer confusion, however most people headaches, no plans and preparations for the case of random consumption, resulting in the moonlight clan of what we call "real life". If we regularly take some time to record our life in the main consumption situation, understand the income and expenditure of their own, doing a few months you will find some rules, income stability, when the end of the month is less income or spending more, the investment is in line with expectations; these rules, you are through accounting to understand the financial situation, the financial situation is not only the good and bad points, the ideal situation is of course, no matter what the situation will not make ends meet, but this situation for graduate work and ten years of people the situation is obviously different.
When you get to know your financial situation, you can learn to make a simple plan. Most of the root causes of the family is the lack of planning, what to buy when the. Planning is not to say that you can not buy things, the value of planning is to make the most efficient use of funds. Whether you use the money in exchange for necessities, satisfaction or happiness, can be achieved through the planning of high efficiency.
The accounting system is a development based on the domestic and foreign electronic commerce website, using B2C (Business to Consumers) e-commerce platform development model, its value for those casual consumer groups can play a very strong warning function, and system expansion, can be rapidly improved according to the different needs of customers. The system uses B/S three layer structure, the server is Tomcat while using JSp technology for dynamic page design, the background database is Oracle.
Key word:Accounting management system; B/S structure; Oracle database; JSP;
对于一个刚出校门或是刚刚工作不久的我们来说,由于我们刚步入社会,最基本的事情就是首先保证自己生存下来,合理地安排自己的消费情况, 所以,我们平时对自己的消费和收支进行一个账单记录显得尤为关键。账单记录能让我们更清楚的了解我们收支的去向,让我们能更好的把握好身上的每一分钱,然后把钱用到关键的地方,如投资,理财等。从查询课外资料来看,国外有很多账单管理的软件,而且大部分外国人对生活中的记账有着严格的把控。就国内而言,放眼望去,大部分记账软件都是着重于办公财务软件,而对于个人和家庭的小型记账系统还是比较少的,因此需要开发一款这样的系统软件,从而达到引导我们理性消费,合理分配收支。
对于记账而言呢,若我们直接像古人那样用纸和笔记录的话,那样随着我们的记录越来越多,我们的记账薄也随之越来越厚,容易造成遗失,当我们要查找某个我们想要找的记录时,我们会消耗大量的时间,这就非常麻烦。这种记账方式就显得非常冗余、笨重,因此我们需要设计一款功能完善的记账软件,用它来代替传统的手工操作。
记账理财是一个很普遍而且很广泛的概念,从理财的角度来看,个人、公司和政府部门都少不了理财活动。所以本论文介绍的就是一个人记账为主。中国也是个比较重视个人和家庭观念较国家,一个人理财就非常普遍了。
所谓个人理财从概念上讲,就是合理、有效的安排和运用我们自己的资金,让我们的消费到达最大的效应,以到达最大地限度地满足日常生活需要的目的。简单的来说,个人理财就是利用企业理财和金融方法对我们个人经济进行有效的管理和计划,增强自身的经济实力,提高个人经济的抗打击能力,增大个人效应。从另一种角度来讲,个人理财就是利用开源节流的道理,增加收入,节约支出,用合理地办法来达到我们所希望到达的经济目的。这样的目标有很多,小的如增添家电设备,外出旅游,大的有买车、买房,为自己孩子储备教育基金等等。
本论文总共为七章:
本系统主要采用JAVA编程技术和Oracle数据库,在Windows 7操作系统环境下,采用Eclipse开发工具以及Javabeans编写进行设计与开发完成的基于B/S结构的电子商务网站的设计与实现。
MVC 是Modell-View-Controll的英文缩写,它是一种设计典范,把业务逻辑,数据和页面显示抽离出来的方式组织代码。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
视图(View)是直接与用户交互的界面,对于Web应用来说,可以概括为HTML或者其他显示界面如XHTML、JSP、XML和Applet等。一个应用可能有很多不同的视图,涉及到多方面的显示技术,从而对于系统的维护也不单单只是对单方面技术的要求。业务流程事务的处理交予模型(Model)层处理。
模型(Model):就是业务/服务的跳转的处理以及业务规则的设定。业务流程处理对其它层(view层及control层)来说是黑箱操作,业务模型接受对应表单传递来的数据,处理之后吧就把那个结果返回回来。业务模型的设计是MVC里边最为关键的核心。最近比较常用的EJB(Enterprise java bean)模型就是一个非常经典的的应用例子,它通过从应用程序实现技术的角度出发来对软件层次做了进一步的细分,从而充分利用现有的技术资源,但它不能作为应用设计模型的框架标准。在实体对象与数据库的交互中还有一个重要的模型即数据模型。是与数据库进行直接交互的模块。我们可以将这个模块单独列出,与数据库的操作只限制在该模块中进行。
控制(Controller)的功能是接收来自客户端的请求, 将业务处理模型与视图进行相应的匹配,一起完成用户的请求。控制层对数据不做任何的处理。因此,一个模型可能对应有多个视图,一个视图可能也对应多个模型。
MyBatis它是一个代码开放式的框架,它比较好用,而且可以把Java对象持久化于数据库当中,它把很多JDBC的那些复杂性代码抽离出来,然后经过自身内部的封装和改造把原有的代码复杂性简单化了,还提供了一个让人很好使用而且很简单的API借口给我们调用,这样我们就很容易的与数据库方面交互。
MyBatis 是来自于iBATIS的,iBATIS于2002年由ClintonBegin创建。MyBatis3是iBATIS的全新设计的一种,支持注解和Mapper的一种框架。
MyBatis流行的主要原因在于它的简单性和易使用性。在Java应用程序中,数据持久化层涉及到的工作有:将从数据库查询到的数据生成所需要的Java对象;将Java对象中的数据通SQL持久化到数据库中。
MyBatis通过抽象底层的JDBC代码,自动化SQL结果集产生Java对象、Java对象的数据持久化数据库中的过程使得对SQL的使用变得容易。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
Java开始被叫做Oak,开始是用于电器相关方面的一种语言,大部分是来处理电器相关的控制问题。但是那个时候这个只能家电的前景并不是十分的理想,因此Sun就摒弃的原来的那个策划。就当在这个策划快要报废的时机,互联网进步的非常快,发展前景非常的好,Sun公司预计到了它在互联网上的十分巨大的利润,因此很快的改造了Oak,也就是现在的Java语言。
Java服务器页面技术,它不是一种静态的网页,刚好相反,它是动态的。它跟HTML关系非常紧密,相互嵌套,然后用远程服务器里面的JSp引擎来触发和启动,再将生成的整个页面反馈给页面端。
因此Sun公司的JSP就是一种非常优秀的技术,它写起来给人的感觉还是非常好的,有点简单,而且可以适应很多很多的基本平台,可以非常适应于B/S结构的动态网络页面。它由多种元素构成,例如,静态内容(HTML标签)、指令、表达式、小脚本、声明、标准动作、注释等元素构成。
在B/S结构里面,浏览器和服务器端进行交互时,有以下几个过程:
(1)用户在浏览器上输入用户名和密码等信息,然后服务器端接收数据。
(2)浏览器接收用户输入的信息之后,然后把信息传输到服务器上,等待服务端的响应。
(3)服务器接收数据之后,然后进行数据后台处理,最后把处理的结果返回到JSP页面上来。
该系统采用Elicpes作为基本开发工具,后台数据库的实现为Oracle,Web服务器为Tomcat。
该记账管理系统,主要有4个功能模块组成,分别是:用户登录,财务管理,财务统计和系统管理,不同用户登录该系统权限不同,若是普通用户登录,则可以进行一些基本操作,如自身的信息修改,账单查看,账单记录等功能,若是管理员登录,则可以对普通用户和其他管理员进行管理,如基本的删除等功能。这样能更好的管理整个系统,本来各个模块之间错综复杂的关系,一下子让用户看起来更简单化,人性化。
整个系统分为 用户注册,用户登录,财务管理,财务统计,系统管理等功能模块,如3-1图所示。
图3-1 系统结构图
登录之后进入首页,你将看到系统的整体界面和基本功能,在你面前展现出来的是该系统的基本信息,如版本号,版权所有,开发者以及开发者的一些基本信息容内等。
当你登录成功之后,点击用户信息管理,你将看到登录用户的基本信息,如电话,姓名,性别,密码等信息,然后可以直接在上面进行编辑修改自己的信息,修改完成之后,系统将会提示你信息已修改成功,请重新登录的提示,这样以保证用户信息的安全性。
当你登录成功之后,你才有权限看到该用户的财务信息,当你点击财务管理时,将会展现出两栏小菜单,一个财务信息一个财务记录,财务信息将展现该登录用户的所有账单信息,用户可以很清楚地看到自己以往的财务记录;财务记录是一个添加记账的功能,它能简单的记录该登录用户的财务记录,然后入库,将数据持久化到数据库。
财务统计是一个统计功能模块,当用户拥有多条财务记录的时候,他点击财务统计该功能,他将可以清楚的看到月收支统计和年收支统计两个菜单栏。月收支和年收支,显而易见,就是统计该用户财务中每个月所有财务记录的一个统计和每年所有财务记录的一个统计,让用户每个月或者每年对自己财务账单有一个清晰的记录。
该模块普通用户是看不到的,只有管理员登录才能看的到,管理员登陆之后,他将用户对所有用户的基本管理的功能,如删除用户,通过登录名查询用户等功能,当然还可以对用户添加其他操作功能,这个可以作为一个扩展;然后是管理员对管理员进行管理,也可以进行基本的删除、查看、修改的操作。
用户点击退出可以安全退出该系统,退出之后必须重新登陆。
该系统可分为三大模块管理,一个是用户管理,用户分为普通用户和管理员,他们权限不同,所以所拥有的功能和所看到的页面不同;另一个是财务管理,里面包含用户所拥有的财务信息和财务记录等。还有一个就是系统管理,也就是不同用户所用权限不同。具体见下用例图。
用户管理:
系统管理:
图3-2 用户管理用例图
不同的用户他们的登录界面不同,他们所拥有的权限和基本功能也是不一样的,他们的属性也有所区别。
图3-3 财务管理用例图
财务管理是整个系统的核心模块,它的功能如上图描述,可以很好的为用户的财务收支做,有效的记录并且永久的保存到数据库,用户随时可以查看自己的财务记录。
3-4 系统管理用例图
不同的用户他们的权限也就不一样,管理员能让这个系统更完善,它可以更好的管理所有用户的行为和权限。
用户注册,登录功能的用例说明,列出一系列可能出现的错误,导致无法正常完成用户的注册,登录的功能。这些错误是我们事先就已经意料到的可能发生的错误,能在第一时间给以客户回应,使得系统的可操作性更加的真实,可靠,也让用户感觉到系统的人性化。这些也是我们程序员在编写代码时要考虑的基本事项,作为一个好的程序员应该在第一时间想到系统可能出现的情况,把系统错误发生的可能性降到最低。以下是关于用户登入和注册时可能发生的一些异常,如:注册时用户名已经存在,登入时用户名与密码不相匹配,用户不存在等。
表3-1 用户登录用例说明
用例编号 | UC01 | |
用例名称 | 用户管理用例图 | |
用例概述 | 用户注册 | |
主参与者 | 用户 | |
前置条件 | 进入记账管理系统 | |
基本事件流 | 步骤 | 活动 |
A1 | 用户向系统发出注册请求 | |
A2 | 用户注册新用户名并且设置密码,将基本数据保存到数据库 | |
扩展事件流 | 1a | 用户名已经存在数据库中,返回提示信息 |
1b | 用户没有填写必填信息,返回首页 | |
2a | 验证输了用户名密码格式错误,返回提示 | |
基本事件流 | 步骤 | 活动 |
B1 | 用户向系统发出登入请求 | |
B2 | 用户输入用户名,密码;与数据库中的数据进行对比 | |
扩展事件流 | 1a | 用户不存在,返回提示信息 |
1b | 用户没有填写某些必要的信息,返回提示信息 | |
1c | 验证用户名密码在数据库中没有信息,返回提示信息 |
表3-2 财务管理用例说明
用例编号 | UC02 | |
用例名称 | 财务管理用例 | |
用例概述 | 添加财务记录,通过条件查询某个财务记录 | |
主参与者 | 用户 | |
前置条件 | 用户已经登录 | |
基本事件流 | 步骤 | 活动 |
A1 | 用户将财务记录添加到数据库,展示在财务信息处 | |
扩展事件流 | 1a | 可以通过某些条件进行查询财务记录,例如 名称,类型或者是否公费等 |
1b | 可以删除,查看具体财务记录,让用户更清楚的看到那条记录 |
表3-3 系统管理用例说明
用例编号 | UC03 | |
用例名称 | 系统管理用例 | |
用例概述 | 系统管理的相关信息 | |
主参与者 | 管理员 | |
前置条件 | 管理员已经登入了该系统 | |
基本事件流 | 步骤 | 活动 |
A1 | 管理员可对于该系统所有用户进行管理,如删除,查找等操作 | |
A2 | 管理员也可以对该系统的其他管理员进行管理,如删除或者再去添加一个新的管理员 |
本章内容包括系统类分析、核心业务设计、数据库设计三个部分,其中系统类分析需要给出系统类图和类的说明,需要注意在给出类图的时候只需要给出核心业务类,对辅助类如界面类、数据库连接类这种类型的不需要给出,如果所涉及的类(包括类当中的内容)较多时,应首先给出类间关系图(图中的类只有名称没有属性和方法),之后在单个类说明中给出具体类的类图,类图同样需要用WORD进行绘制。
核心业务设计主要描述的是完成某项具体业务时,类之间的消息配合,用时序图进行表述,时序图可以用其他工具绘制,但不能够有其他的颜色出现。
数据库设计主要描述在系统中需要持久化的对象,需要给出ER图,如果系统所涉及的实体(或实体的属性)较多时同样采用分层绘制的方法,顶层图给出实体间关系,下层图针对每一个实体进行具体绘制。
经分析,该系统核心业务类见下图:
图4-1 系统核心类
USER类用于记录系统的用户信息,并完成登陆和注销的操作。
表4-1 USER类功能表
类功能描述 | 处理和用户相关的业务操作 | |||||
所在包名称 | com.graduation.bean.User | |||||
继承对象 | 无 | |||||
实现对象 | ||||||
类属性 | ||||||
保护属性 | 类型 | 名称 | 描述 | 备注 | ||
Public | String | ID | 用户ID | 系统中用户的唯一标示,由系统自动生成 | ||
Public | String | Name | 登录号 | 长度限制20位 | ||
Public | String | Password | 密码 | 长度限制20位 | ||
Public | String | sex | 性别 | 长度限制20位 | ||
Public | String | age | 年龄 | 长度限制20位 | ||
Public | String | tel | 手机号码 | 长度限制200位 | ||
Public | String | rname | 姓名 | 长度限制20位 | ||
Public | Date | adddate | 注册时间 | 长度限制20位 | ||
主要实现方法 | ||||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 | ||
Public | loginUser | string id,string pwd | String" | 登陆系统,用户输入ID和PASSWORD后进行验证,验证通过返回用户名,并登记日志,验证失败返回空串。 | ||
public | logout | string id | Void | 注销系统,注销成功清理用户的相关信息并登记日志。 |
Admin类用于管理员信息记录,并且让管理员进行登录等操作。
表4-2 Admin类功能表
类功能描述 | 处理和管理员相关的业务操作 | |||||
所在包名称 | com.graduaion.bean.Admin | |||||
继承对象 | 无 | |||||
实现对象 | ||||||
类属性 | ||||||
保护属性 | 类型 | 名称 | 描述 | 备注 | ||
Public | String | ID | 用户ID | 系统中用户的唯一标示,由系统自动生成 | ||
Public | String | Name | 登录号 | 长度限制20位 | ||
public | String | Password | 密码 | 长度限制20位 | ||
主要实现方法 | ||||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 | ||
Public | loginUser | string id,string pwd | String | 登陆系统,管理员输入ID和PASSWORD后进行验证,验证通过返回用户名,并登记日志,验证失败返回提示框。 | ||
public | logout | string id | Void | 注销系统,注销成功清理用户的相关信息并登记日志,安全退出。 |
Zhang类用于用户进行账单记录的时候要用的,对账单进行记录,然后导入数据库中。
表4-3 Zhang类功能表
类功能描述 | 处理和用户记账记录相关的业务操作 | |||||
所在包名称 | com.graduaion.bean.Zhang | |||||
继承对象 | 无 | |||||
实现对象 | ||||||
类属性 | ||||||
保护属性 | 类型 | 名称 | 描述 | 备注 | ||
Public | String | ID | 用户ID | 系统中用户的唯一标示,由系统自动生成 | ||
Public | String | Name | 登录号 | 长度限制20位 | ||
public | String | Password | 密码 | 长度限制20位 | ||
Public | String | username | 用户登录名 | 长度限制20位 | ||
Public | String | rname | 用户姓名 | 长度限制20位 | ||
Public | String | type | 类型 | 长度限制50位 | ||
Public | String | kind | 种类 | 长度限制50位 | ||
Public | Date | time | 时间 | |||
Public | Double | count | 金额 | |||
Public | String | yong | 用处 | 长度限制100位 | ||
Public | String | Info | 说明 | 长度限制200位 | ||
主要实现方法 | ||||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 | ||
Public | addZhang | Zhang zhang | void | 用户登陆系统之后,对于今天进行的消费或者其他进行记账,分别输入名称,类型,种类,金额等,然后通过系统进行保存。 | ||
public | findZhangByName | string name | Zhang | 通过输入账单名称,从数据库中查找所需要查看的记账记录。 |
Tong类用于对zhang类进行统计,从而给用户看到某个时间段的总计。
表4-4 Tong类功能表
类功能描述 | 处理和用户记账记录统计相关的业务操作 | |||||
所在包名称 | com.graduaion.bean.Tong | |||||
继承对象 | 无 | |||||
实现对象 | ||||||
类属性 | ||||||
保护属性 | 类型 | 名称 | 描述 | 备注 | ||
Public | String | ID | 用户ID | 系统中用户的唯一标示,由系统自动生成 | ||
Public | String | Name | 登录号 | 长度限制20位 | ||
public | String | Password | 密码 | 长度限制20位 | ||
Public | String | username | 用户登录名 | 长度限制20位 | ||
Public | String | rname | 用户姓名 | 长度限制20位 | ||
Public | String | type | 类型 | 长度限制50位 | ||
Public | String | kind | 种类 | 长度限制50位 | ||
Public | Date | time | 时间 | |||
Public | Double | count | 金额 | |||
Public | String | yong | 用处 | 长度限制100位 | ||
Public | String | Info | 说明 | 长度限制200位 | ||
主要实现方法 | ||||||
保护属性 | 方法名 | 输入参数 | 输出参数 | 方法功能描述 | ||
Public | addZhang | Zhang zhang | void | 用户登陆系统之后,对于今天进行的消费或者其他进行记账,分别输入名称,类型,种类,金额等,然后通过系统进行保存。 | ||
public | findZhangByName | string name | Zhang | 通过输入账单名称,从数据库中查找所需要查看的记账记录。 |
用户通过记录账单,然后添加账单到该系统,在点击财务信息时将可以显示该用户的所有账单记录。
图4-2 财务管理时序图
记录这该用户的年统计和月统计的总体数据,能更直观的展示出用户等收支情况。
图4-3 财务统计时序图
本系统总共有四个实体类,分别是Admin,User,Zhang,Tong。他们分别对应着四张数据库表admin,t_user,zhang,tong表。
1.普通用户E-R图
用户实体图主要包含:用户性别,年龄,姓名,登录名,电话等信息,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。
图4-4 用户E-R图
2.管理员E-R图
管理员实体图主要包含:只有管理员密码和登录名两个字段,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。
图4-5 管理员E-R图
3.账单E-R图
账单实体图主要包含:账单名,类型,种类,金额等属性,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。
图4-6 账单E-R图
4.统计E-R图
统计实体图主要包含:年份,月份,收入,支出等属性,下图展现的很清晰,让人很容易看出其中关系,所以可以很容易设计数据表出来。
图4-7统计E-R图
系统总体总体E-R图:
图4-8系统总体总体E-R图
系统中使用到数据库基本如表4-3-3所示。
表4-5系统数据库表
编号 | 表名 | 描述 |
01 | t_user | 用户表 |
02 | t_admin | 管理员表 |
03 | zhang | 账单表 |
04 | tong | 统计表 |
数据库中的用户表用来存储各类用户的相关数据,每个用户都要在用户表中有相相应的记录。管理员表用来记录管理员各个信息。账单表记录每个用户的账单信息。统计表用于管理账单的统计。
系统用户表用于登录系统使用,用户表的具体字段如表4-3-3-1所示。
表4-6 用户表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
Id | 用户编号 | Int | PK | |
name | 用户名称 | Varchar2(20) | NOT NULL | |
password | 用户密码 | Varchar2(20) | NOT NULL | |
sex | 性别 | Varchar2(20) | ||
age | 年龄 | Varchar2(20) | ||
tel | 电话 | Varchar2(20) | ||
rname | 姓名 | Varchar2(20) | ||
adddate | 注册时间 | Date |
字段用户编号为本表的主键用来标识一个用户,用户帐号和密码是两个非空字段,用户使用用户名和密码作为登录系统的凭证。
系统管理员表用于登录管理员系统使用,用户表的具体字段如表4-3-3-2所示。
表4-7 管理员表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
Id | 用户编号 | Int | PK | |
name | 用户名称 | Varchar2(20) | NOT NULL | |
password | 用户密码 | Varchar2(20) | NOT NULL |
登录用户用于账单记录的表,账单表的具体字段如表4-3-3-3所示。
表4-8 账单表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
Id | 用户编号 | Int | PK | |
name | 账单名称 | Varchar2(20) | NOT NULL | |
username | 用户登录名 | Varchar2(20) | NOT NULL | |
rname | 姓名 | Varchar2(20) | ||
type | 类型 | Varchar2(20) | ||
kind | 种类 | Varchar2(20) | ||
time | 时间 | Varchar2(20) | ||
count | 金额 | double | ||
yong | 用处 | Varchar2(20) | ||
info | 备注 | Varchar2(20) |
登录用户用于统计账单记录的表,统计表的具体字段如表4-3-3-4所示。
表4-9 统计表
字段名 | 字段描述 | 类型/长度 | 约束 | 备注 |
Id | 用户编号 | Int | PK | |
username | 用户登录名 | Varchar2(20) | NOT NULL | |
type | 类型 | Varchar2(20) | ||
kind | 种类 | Varchar2(20) | ||
time | 时间 | Varchar2(20) | ||
year | 金额 | Double | ||
month | 用处 | Varchar2(20) | ||
shou | 收入 | Double | ||
zhi | 支出 | Double |
本章内容重点是阐述所完成项目的关键界面和关键代码,不需要把所完成项目的所有界面和所有代码都在这里体现,尤其是界面设计代码,对关键代码的描述可以采用流程图或代码的形式,在复制代码时应注意英文的格式,此外因为代码的缩进和论文有所不同,应该按论文的格式要求来处理。最后原则上这部分所出现的模块应该和关键业务分析一致。
登录是对用户使用系统功能进行身份验证的过程,登录界面要求简明易懂。每一用户都有自己的单独的账号和密码,用户在系统的每一个操作都有日志进行记载,可以有效保证数据可追溯性,做到责任到人,界面如下图。
图5-1 用户登录
用户通过用户名和密码进行页面登录时,如果用户名或者密码或是验证码为空的时候,前台页面通过调用login JS方法进行判断,并且给出不能为空的提示;当用户填写了正确的用户名和密码、验证码时后台通过调用loginUser()方法通过数据库查询是否有该用户,如果该用户存在,则登录成功,跳转到首页,如果该用户不存或者密码错误、验证码不正确等情况,则产生一个提示框,提示该用户重新输入。
部分代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
String type = req.getParameter("type");
HttpSession session = req.getSession();
try {
if(type.equals("用户")){
if(str.equals(randomCode)){
User user = userService.loginUser(username, password);
session.setAttribute("currentUser", user);
session.setAttribute("currentType", "用户");
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
else{
req.setAttribute("messageInfo", "验证码错误!请重新输入");
req.getRequestDispatcher("login.jsp").forward(req, resp);
} } catch (Exception e) {
req.setAttribute("messageInfo", e.getMessage());
e.printStackTrace();
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
@Override
public User loginUser(String username, String password) throws UserException {
User user2 = userDao.findUserByName(username);
if(user2==null){
throw new UserException("用户名不存在,请重新输入!");
}if(!password.equals(user2.getPassword())){
throw new UserException("登录密码错误,请重新输入!");
}
return user2;
}
图5-2 用户登录
当你还没有注册时是不能登录该系统的,所有当你在登录页面点击注册时系统将跳转到注册页面。
图5-3 用户注册
新用户通过注册功能在前台页面填写基本信息,然后在前台Jsp页面中接入,然后后台通过req.getParameter方法分别得到前台所传过来的数据,再通过业务逻辑Service层中的addUesr()方法进行接收该对象user,最后Dao层把数据导入到数据库中保存。
部分代码如下:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("user.name");
String password = req.getParameter("user.pass");
String rname = req.getParameter("user.rname");
String sex = req.getParameter("user.sex");
String age = req.getParameter("user.age");
String tel = req.getParameter("user.tel");
user = new User(name,sex,age,password,tel,rname,new Date());
HttpSession session = req.getSession();
session.setAttribute("user", user);
try{
userService.registerUser(user);
req.getRequestDispatcher("zhuceSuccess.jsp").forward(req, resp);
}
@Override
public void registerUser(User user) throws UserException {
User user2 = userDao.findUserByName(user.getName());
if(user2!=null){
throw new UserException("用户已存在,请重新输入!");
}else{
userDao.saveUser(user);
}
}
图5-2 用户注册
用户登录成功之后,将进入该系统首页面,在这里可以看到系统的基本信息,如下图所示;
图5-3 首页图
当用户登录进入系统的时候,要想修改密码的基本信息可以点击用户信息修改这栏,那样可以修改用户自己的信息,如下图所示:
图5-4 用户修改
用户进行信息修改之后,新数据通过前台Jsp页面传到后台,业务逻辑Service层调用editUser()方法把数据传到Dao层,然后数据持久化。
部分代码如下:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String str = req.getParameter("user.id");
long id = Long.parseLong(str);
String name = req.getParameter("user.name");
String password = req.getParameter("user.pass");
String rname = req.getParameter("user.rname");
String sex = req.getParameter("user.sex");
String age = req.getParameter("user.age");
String tel = req.getParameter("user.tel");
HttpSession session = req.getSession();
user = new User(id,name,sex,age,password,tel,rname,new Date());
try{
userService.editUser(user);
resp.sendRedirect("editUserSuccess.jsp");
}
@Override
public void editUser(User user) {
userDao.updateUser(user);
}
图5-5 用户修改流程图
该系统的核心内容就是财务这一块,用户可以点击财务记录,然后进行生活或者工作中的一些基本账单记录,如下图所示:
图5-6 用户注册
前台接收用户传过来的数据,然后传到后台用servlet接收,在调用业务逻辑Service层addZhang方法进行数据接入,最后通过Dao层进行数据持久化。
部分代码如下:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String name = req.getParameter("zhang.name");
String type = req.getParameter("zhang.type");
String kind = req.getParameter("zhang.kind");
String date = req.getParameter("zhang.date");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date time = simpleDateFormat.parse(date);
String string = req.getParameter("zhang.count");
double count =Double.parseDouble(string);
String yong = req.getParameter("zhang.yong");
String info = req.getParameter("zhang.info");
HttpSession session = req.getSession();
User user = (User) session.getAttribute("currentUser");
String rname = user.getRname();
String username = user.getName();
Zhang zhang = new Zhang(name,username,rname,type,kind,time,count,yong,info);
zhangService.addZhang(zhang);
List<Zhang> list = zhangService.findZhangByUserName(username);
System.out.println(list);
req.getSession().setAttribute("zhang_list", list);
resp.sendRedirect("zhang/zhang_list.jsp");
@Override
public void addZhang(Zhang zhang) throws ZhangException {
try{
zhangdao.addZhang(zhang);
}catch(Exception e){
throw new ZhangException("添加失败,请重新添加");
}
}
图5-7 用户财务记录流程图
用户财务信息是该用户的一些财务记录信息,它能很清楚的展现出该用户所有账单记录,而且还能通过某些条件查询各种记录。如下图所示:
图5-8 用户财务记录信息
该功能的实现是先从数据库账单表中拿到该用户的所有账单记录,然后通过后台把数据传到前台Jsp页面进行渲染之后,呈现给用户查看。
部分代码如下:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
User user = (User) session.getAttribute("currentUser");
String name = user.getName();
List<Zhang> list = zhangservice.findZhangByUserName(name);
session.setAttribute("zhang_list", list);
resp.sendRedirect("zhang/zhang_list.jsp");
}
@Override
public List<Zhang> findZhangByUserName(String username) {
return zhangdao.findZhangByUsername(username);
}
图5-9 用户财务记录流程图
用户记录的每笔账单存入数据库之后,每个月都可以做个汇总,也就是月收入和月支出的一个总结,这样能让用户对自己的收支心里有个底。如下图所示:
图5-10 用户财务月统计图
这个功能我借用了一个插件FusionCharts,它是一个强大的展现图案的一个插件,能把一些数据更直观的通过图形展现出来,然而我只需要通过后台把它所需要的数据传入到他的模型之中。
部分代码如下:
<script type="text/javascript">
var myChart = new FusionCharts("<%=path%>/FusionCharts/Charts/Pie3D.swf", "myChartId",
"600", "400");
var strXML = "<chart caption='收入一览'>${data}</chart>";
myChart.setDataXML(strXML);
myChart.render("chartdiv1");
$(document).ready(function(){
var $messageInfo = $("#messageInfo").val();
if($messageInfo != null && $messageInfo != ""){
$.messager.show({
title:'提示',
msg:$messageInfo,
timeout:2000,
showType:'slide'
});
$("#messageInfo").val("");
}
});
</script>
Tong tong1 = tongService.findTongByMonth(month,username);
if(tong1==null){
Tong tong = new Tong(username,"入账","公费",new Date(),year,month,num1,num2);
tongService.saveTong(tong);
String info="<set name='出账' value='"+tong.getZhi()+"' /><set name='入账' value='"+tong.getShou()+"' />";
req.setAttribute("data", info);
req.getRequestDispatcher("zhang/zhang_ylist.jsp").forward(req, resp);
}else{
long id =tong1.getId();
Tong tong = new Tong(id,username,"入账","公费",new Date(),year,month,num1,num2);
tongService.updateTong(tong);
String info="<set name='出账' value='"+tong.getZhi()+"' /><set name='入账' value='"+tong.getShou()+"' />";
req.setAttribute("data", info);
req.getRequestDispatcher("zhang/zhang_ylist.jsp").forward(req, resp);
图5-11 用户财务记录流程图
当用户点击年收支的时候,页面将展现出该用户所选的年度的年收入和年支出的详细情况,如下图所示:
图5-12 用户年收支
通过插件FusionCharts把需要的数据从后台传入到前台脚本中,然后渲染到页面上。
部分代码如下:
<script type="text/javascript">
var myChart = new FusionCharts("<%=path%>/FusionCharts/Charts/MSColumn3D.swf",
"MSColumn3D", "600", "400");
var chartXMLData = "<chart caption=\"年收支情况\" XAxisName=\"\" palette=\"2\" animation=\"1\" formatNumberScale=\"0\" numberPrefix=\"\" showValues=\"0\" numDivLines=\"4\" legendPosition=\"BOTTOM\">${data}\"<styles><definition><style type=\"font\" name=\"CaptionFont\" color=\"666666\" size=\"15\" /><style type=\"font\" name=\"SubCaptionFont\" bold=\"0\" /></definition><application><apply toObject=\"caption\" styles=\"CaptionFont\" /><apply toObject=\"SubCaption\" styles=\"SubCaptionFont\" /></application></styles></chart>";
myChart.setDataXML(chartXMLData);
myChart.render("chartdiv1");
$(document).ready(function() {
var $messageInfo = $("#messageInfo").val();
if ($messageInfo != null && $messageInfo != "") {
$.messager.show( {
title : '提示',
msg : $messageInfo,
timeout : 2000,
showType : 'slide'
});
$("#messageInfo").val("");
}
});
</script>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Tong> li = new ArrayList<Tong>();
User user = (User) req.getSession().getAttribute("currentUser");
List<Tong> list = tongService.findTong(user.getName());
String year = req.getParameter("qyear");
if(list!=null&&list.size()>0){
String category="";
String setchu="";
String setru="";
for(Tong t:list){
String year1 = t.getYear();
if(year1.equals(year)){
category=category+"<category label='"+t.getMonth()+"月' />";
setchu=setchu+"<set value='"+t.getZhi()+"' />";
setru=setru+"<set value='"+t.getShou()+"' />";
}
}
String xmls= "<categories>"+category+"</categories>"
+ "<dataset seriesName='出账'>"+setchu+"</dataset>"
+ "<dataset seriesName='入账'>"+setru+"</dataset>";
req.setAttribute("data", xmls);
req.getRequestDispatcher("zhang/zhang_nlist.jsp").forward(req, resp);
}
else{
req.setAttribute("messageInfo", year+"年没有数据!");
req.setAttribute("data", "");
req.getRequestDispatcher("zhang/zhang_nlist.jsp").forward(req, resp);
}
}
图5-13用户年统计流程图
登录的管理员能管理其他管理员的信息,如删除、查看、修改等基本功能。如下图所示:
登录的管理员能管理其他用户的信息,如删除、查看等基本功能。如下图所示:
图5-15 用户信息管理
管理员通过后台管理该系统的各个用户,可以对用户进行删除,
它是通过用户的一个主键id删除该用户的,由于id唯一性,所以它是不可重复的。
部分代码如下:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String str = req.getParameter("id");
long id = Long.parseLong(str);
User user = userService.findUserById(id);
userService.deleteUser(id);
String username = user.getName();
zhangService.deleteZhangByUsername(username);
List<User> list = userService.findAllUser();
req.getSession().setAttribute("user_list", list);
resp.sendRedirect("user/user_list.jsp");
}
@Override
public void deleteUser(long id) {
userDao.delUser(id);
}
图5-16系统管理流程图
本章重点说明测试目标和测试计划,对测试目标给出测试用例,并分析测试结果是否达到系统预期,如未达到提出改进的措施。测试目标根据测试范围的不同有整体目标和分项目标,整体目标主要是测试系统是否达到预期的功能以及相关的性能指标,如吞吐率等等,分项目标则针对于具体模块,指标包括功能是否实现,边界条件是否实现等等,测试用例应根据测试目标来进行设计,原则上关键业务模块必须包含。
测试方案是测试阶段的关键技术问题。为了提高测试效率降低测试成本。
主要测试的是用户的各种操作是否能够正常的进行,让我们找出系统的不足之处,以尽快的改进这些不足,让系统变得更加的完善
表6-1用户登录
功能测试 | ||||||
概述 | ||||||
测试编号 | GN001 | |||||
功能描述 | 用户登录 | |||||
功能URL | ||||||
用例目的 | 测试用户是否能登录成功 | |||||
前提条件 | ||||||
测试操作 | ||||||
编号 | 输入/动作 | 期望的输出响应 | 实际情况 | 是否正确 | 错误编号 | |
1 | 输入不存在的用户名,不填写密码 | 系统提示密码不能为空 | 系统提示密码不能为空 | 正确 | ||
2 | 输入正确的用户名输入错误的密码 | 系统提示密码错误 | 系统提示密码错误 | 正确 | ||
3 | 输入错误的用户名输入正确的密码 | 系统提示用户名不存在 | 系统提示登录名或密码错误 | 正确 | ||
4 | 不填写用户名及密码 | 系统提示用户名或密码错误 | 系统提示用户名或密码错误 | 正确 |
表6-2账单统计
功能测试 | ||||||
概述 | ||||||
测试编号 | GN001 | |||||
功能描述 | 账单统计 | |||||
功能URL | ||||||
用例目的 | 测试账单统计是否存在 | |||||
前提条件 | 进入用户登录界面 | |||||
测试操作 | ||||||
编号 | 输入/动作 | 期望的输出响应 | 实际情况 | 是否正确 | 错误编号 | |
1 | 输入查询月份 | 展示具体数据 | 展示具体数据 | 正确 | ||
2 | 输入不存在的月份 | 系统提示密码错误 | 系统提示该月份没有数据 | 正确 | ||
3 | 输入查询年份 | 展示具体数据 | 展示具体数据 | 正确 | ||
4 | 输入不存在的年份 | 系统提示密码错误 | 系统提示该年份没有数据 | 正确 |
该系统经多次测试,能在Windows7\WindowsXP\2000 server等操作系统,调试环境上正常运行。数据调用正常,基本上实现了预期的功能,目前试运行良好。
结果分析:虽然系统基本正常,但由于一些自身技术和硬件设备环境所限,该系统仍存在一些不足之处,有待进一步改进和完善,具体说来有:
① 未能进行连网测试。
② 未能实现对数据的自动生成图表进行分析的功能。
③ 程序中错误处理和输入控制不够全面,可能导致输入无效引发错误,也可能使得页面出现乱码等现象。
在经过四个多月的努力,在谭娟导师指导下,我对基于WEB的电子商务系统的系统设计与开发有了相对深刻具体的认识,同时也有了一定的对于开发的实际运用经验,然后本系统运用了当前比较成熟的web开发框架设计和基于B/S结构实现了一个比较实用的诸如用户登入,注册,实现账单统计等功能系统的设计与开发。本系统作为一个电子商务网站系统的子功能,具有相当的实用性。
在本次毕业设计中,不仅在理论上和实践中有所认识,而且在专业水平和实践能力上有了巨大的提高。也让我有了开发项目的经验,当毕业设计结束的时候我收获的不但是关于学习软件系统的设计与开发,也让我学习到一些其他方面的东西,当你有目标的时候你得先思考,然后仔细考虑猜想各个细节因素,或许或遇到技术困难,如果这算是阻止我们的高墙,那么教师和同学一定是你翻越高墙的梯子,因为有了你们才让我成功的翻过了一面面的高墙,最终走出了新世界,走出了自己内心的那座高墙。
虽然这个系统一定会有许多许多不尽如人意的地方,但在我会以此为基点积累一点又一点的知识和解决问题的方法经验。让以后的作品一个比一个更好希望以后的工作中能一步步完善和超越现在的自己,最后再次感谢帮助我完成这个系统的热心人们,是因为你们才让我的毕业设计成功完成,让我从中得到了意想不到的收获!
[1] 陈广宇.管理信息系统[M].北京:清华大学出版社,2010:95-100
[2] 张墨华,张永强.Java程序设计[M].北京:清华大学出版社, 2010:123-124
[3] 张 阳.基于ASP.NET的酒店管理系统的设计与实现[D].吉林:吉林大学,2014:233-2
[4]孙卫琴,李洪成.《Tomcat 与 JSP Web 开发技术详解》.电子工业出版社,2003年6月:1~205.
[5]计磊,李里,周伟.J2EE整合应用案例[M].北京:人民邮电出版社,2007.
[6]王珊,陈红.数据库系统原理教程[M].北京:清华大学出版社,2004-6.
[7]武延军,黄飞跃.精通JSP编程技术[J] .北京:人民邮电出版.
[8]王琳.Java多线程机制及其应用[J]. 武汉理工大学学报(信息与管理工程).
[9] 柳永坡,刘雪梅,赵长海.JSP应用开发技术[M].北京:人民邮电出版, 2005.
[10]贺松平.基于MVC模式的B/S架构的研究及应用[D].武汉:华中科技大学.
[11]张海藩.软件工程导论.北京:清华大学出版社.2008,02.
[12]田淑梅.软件工程——理论与实践 清华大学出版社.
[13]耿祥义.《Java2实用教程(第三版)》.清华大学出版社,2006(8).
[14]王永红.使用JavaScript增强网页的功能[J] .安徽建筑,2001,(2):27-34.
[15] 舒红平.Web 数据库编程-Java[M].西安电子科技大学出版社,2005:97-143.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。