资源描述
JavaEE课程设计个人财务系统
20
2020年4月19日
文档仅供参考
软 件 学 院
课程设计报告书
课程名称 JavaEE 课程设计
设计题目 个人财务系统
专业班级 软件工程
学 号
姓 名
指导教师
年 12 月
目录
1 设计时间 3
2 设计目的 3
3设计任务 3
4 设计内容 3
4.1 设计题目 3
4.1.1系统功能要求 3
4.1.2 数据库存储要求 3
4.2 Jsp 页面设计 3
4.2.1登录界面 3
4.2.2登录成功界面 4
4.2.3查询结果界面 6
4.2.4计算结果界面 7
4.3Java方法设计 7
4.3.1Servlet类 7
4.3.2Dao类 12
4.3.3domain类 17
4.3.4数据库连接类 19
5 总结与展望 20
参考文献 21
成绩评定 21
1 设计时间
12月12日——12月16日
2 设计目的
JavaEE课程设计是对所学JavaEE与中间件课程的小结,是提高学生对所学知识综合应用能力的一种方式,是集中实践性环节之一。要求同学们对课程中所学习到的知识综合运用,开发有一定规模的Java Web程序。
3设计任务
设计个人帐务管理系统,要求用户以合法的身份登录后能够对系统进行操作,用户能够查看,添加,删除和计算某段时间内帐务的收入和支出信息等。帐务信息包括收入和支出两种,还有日期和备注。
4 设计内容
4.1 设计题目
个人财务管理系统
4.1.1系统功能要求
用只有拥有合法身份才能登录系统,用以合法身份登录后能够产看帐务信息、添加帐务信息、删除帐务信息、分别统计某个时间段内的收入和支出总额。
4.1.2 数据库存储要求
收入支出数额,日期和备注
4.2 Jsp 页面设计
4.2.1登录界面
图—1(登录界面)
代码如下:
<form action="servlet/LoginServlet" method="post">
<center>欢迎登陆个人财务统计系统!</center>
<center> 用户名称:<input type="text" name="username" value=""><br></center>
<center>用户密码:<input type="text" name="password" value=""><br></center>
<center><input type="submit" name="subimt" value="登录">
<input type="reset" name="reset" value="重置">
</center>
</form>
4.2.2登录成功界面
图—2(登录成功查询界面)
代码如下:
<%
String username=(String)session.getAttribute("name");
if(username!=null){%>
<center>欢迎登录:<%=username %></center>
<%} %>
<form action="servlet/AccountController?arg=2" method="post">
增加帐目明细请输入:
<center>
收入数额:<input type="text" name="incomemoney"value=""><br>
支出数额:<input type="text" name="costmoney"value=""><br>
附加备注:<input type="text" name="record"value=""><br>
输入日期:<input type="text" name="time"value=""><br>
<input type="submit" name="submit1" value="保存"> <br><br>
</center>
</form>
<form action="servlet/AccountController?arg=1" method="post">
查询帐目明细请点击:
<center><input type="submit" name="submit2" value="查询"></center><br>
</form>
删除帐目信息请如下:
<form action="servlet/AccountController?arg=3" method="post">
请输入要 删除帐目的日期:<center> <input type="text" name="time"> </center>
<center> <input type="submit" name="submit3" value="删除"></center>
</form>
<form action="servlet/AccountController?arg=4" method="post">
<center> 起始Id号:<input type="text" name="id1"value=""><br></center>
<center> 终止Id号:<input type="text" name="id2"value=""><br></center>
<center> <input type="submit"name="submit4"value="计算"> </center>
</form>
4.2.3查询结果界面
图—3(查询结果界面)
代码如下:
<center>您的帐务明细如下:</center><br>
<table border=1>
<tr>
<td>帐目序号</td>
<td>收入数额</td>
<td>支持数额</td>
<td>附加备注</td>
<td>记录日期</td>
</tr>
<%
List list=(List)request.getAttribute("accounts");
MyAccount account=new MyAccount();
for(int i=0;i<list.size();i++)
{
account=(MyAccount)list.get(i);
%>
<tr>
<td><%=account.getId() %></td>
<td><%=account.getIncomemoney() %></td>
<td><%=account.getCostmoney() %></td>
<td><%=account.getRecord() %></td>
<td><%=account.getTime() %></td>
</tr>
<%} %>
</table>
4.2.4计算结果界面
代码如下:
<%
List list=(List)request.getAttribute("result");
for(int i=0;i<list.size();i++)
{
%>
<%=list.get(i)%>
<%} %>
4.3Java方法设计
4.3.1Servlet类
控制增删改操作的servlet类代码设计如下:
package com.controller;
import com.dao.*;
import com.domain.MyAccount;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AccountController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int arg=Integer.parseInt(request.getParameter("arg"));
switch(arg) //根据每个form传递的不同的arg的值调用不同的方法
{
case 1:this.findAllAccount(request,response);
break;
case 2:this.saveAllAccount(request,response);
break;
case 3:this.deleteSomeAccount(request,response);
break;
case 4:this.caculateAccount(request,response);
break;
}
}
protected void caculateAccount(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException ////计算帐目
{
int a=0;
int b=0;
a=Integer.parseInt(request.getParameter("id"));
b=Integer.parseInt(request.getParameter("id"));
AccountDao accountDao=new AccountDao();
List list2=accountDao.caculateAccount(a,b);
request.setAttribute("result",list2);
RequestDispatcher rdt1=request.getRequestDispatcher("/Result1.jsp");
rdt1.forward(request, response);
}
public void findAllAccount(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{ ///查询帐目
AccountDao accountDao=new AccountDao();
List list=accountDao.findAllAccount();
request.setAttribute("accounts", list);
RequestDispatcher rdt=request.getRequestDispatcher("/Result.jsp");
rdt.forward(request, response);
}
public void saveAllAccount(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{ //添加帐目
request.setCharacterEncoding("gbk");
double incomemoney=0.0;
double costmoney=0.0;
incomemoney=Double.parseDouble(request.getParameter("incomemoney"));
costmoney=Double.parseDouble(request.getParameter("costmoney"));
String record=(String)request.getParameter("record");
String time=(String)request.getParameter("time");
MyAccount myAccount=new MyAccount();
myAccount.setIncomemoney(incomemoney);
myAccount.setCostmoney(costmoney);
myAccount.setRecord(record);
myAccount.setTime(time);
AccountDao accountDao=new AccountDao();
try
{
accountDao.saveAllAccount(myAccount);
}
catch(Exception e)
{
e.printStackTrace();
}
this.findAllAccount(request,response);
}
public void deleteSomeAccount(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ //删除帐目
request.setCharacterEncoding("gbk");
String time=request.getParameter("time");
MyAccount myAccount=new MyAccount();
myAccount.setTime(time);
AccountDao accountDao=new AccountDao();
try
{
accountDao.deleteSomeAccount(myAccount);
}
catch(Exception e)
{
e.printStackTrace();
}
this.findAllAccount(request, response);
}
}
密码验证的Servlet类的代码如下:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import sunyang.domain.User;
import sunyang.service.UserService;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req,resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String username=req.getParameter("username");
String password=req.getParameter("password");
User user=new User();
user.setUsername(username);
user.setPassword(password);
HttpSession session=req.getSession();
String forward="";
if(UserService.CheckLogin(user))
{
forward="/Search.jsp";
session.setAttribute("name", username);
}
else
{
forward="/error.jsp";
}
RequestDispatcher rd=req.getRequestDispatcher(forward);
rd.forward(req,resp);
}
}
4.3.2Dao类
密码验证的Dao类代码设计如下:
package sunyang.service;
import sunyang.domain.User;
public class UserService {
public static boolean CheckLogin(User user)
{
if(user.getUsername().equals("lb")&&user.getPassword().equals("123"))
{
return true;
}
return false;
}
}
帐务添加查询计算的Dao类代码设计如下:
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.domain.MyAccount;
import com.util.DBCon;
public class AccountDao {
private Connection conn;
public List findAllAccount()
{ //查询所有帐务信息
conn=DBCon.getConnection();
String listSQL="select * from myaccount";
List list=new ArrayList();
try
{
PreparedStatement psmt=conn.prepareStatement(listSQL);
ResultSet rs=psmt.executeQuery();
while(rs.next())
{
MyAccount account=new MyAccount();
account.setId(rs.getInt(1));
account.setIncomemoney(rs.getDouble(2));
account.setCostmoney(rs.getDouble(3));
account.setRecord(rs.getString(4));
account.setTime(rs.getString(5));
list.add(account);
}
mit();
return list;
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
if(conn!=null)
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
}
return list;
}
public boolean saveAllAccount(MyAccount account)throws Exception
{ //添加帐务信息
conn=DBCon.getConnection();
String listSQL="insert into myaccount values(?,?,?,?)";
PreparedStatement psmt=conn.prepareStatement(listSQL);
try
{
psmt.setDouble(1, account.getIncomemoney());
psmt.setDouble(2, account.getCostmoney());
psmt.setString(3, account.getRecord());
psmt.setString(4, account.getTime());
psmt.executeUpdate();
mit();
return true;
}
catch(SQLException e)
{
conn.rollback();
e.printStackTrace();
}
return false;
}
public boolean deleteSomeAccount(MyAccount account)throws Exception
{
conn=DBCon.getConnection(); //删除帐目
String listSQL="delete from myaccount where time=? ";
PreparedStatement psmt=conn.prepareStatement(listSQL);
try
{
psmt.setString(1, account.getTime());
psmt.executeUpdate();
mit();
return true;
}
catch(SQLException e)
{
conn.rollback();
e.printStackTrace();
}
return false;
}
public List caculateAccount(int x,int y)
{
conn=DBCon.getConnection(); //计算帐目的和
double incometotal=0.0;
double costtotal=0.0;
int i=0;
List list2=new ArrayList();
try
{
MyAccount account=new MyAccount();
for( i=x;i<=y;i++)
{
String listSQL1="selct incomemoney from myaccount where id=i";
PreparedStatement psmt1=conn.prepareStatement(listSQL1);
ResultSet rs1=psmt1.executeQuery();
psmt1.execute();
incometotal=incometotal+rs1.getDouble(2);
String listSQL2="select costmoney from myaccount where id=i";
PreparedStatement psmt2=conn.prepareStatement(listSQL2);
ResultSet rs2=psmt2.executeQuery();
psmt2.execute();
costtotal=costtotal+rs2.getDouble(3);
}
mit();
account.setIncomemoney(incometotal);
account.setCostmoney(costtotal);
list2.add(account);
return list2;
}
catch(SQLException e)
{
e.printStackTrace();
}
return list2;
}
}
4.3.3domain类
密码验证代买设计如下:
package sunyang.domain;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
帐务信息代码设计如下:
package com.domain;
public class MyAccount {
private Integer id;
private Double incomemoney;
private Double costmoney;
private String record;
private String time;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Double getIncomemoney() {
return incomemoney;
}
public void setIncomemoney(Double incomemoney) {
this.incomemoney = incomemoney;
}
public Double getCostmoney() {
return costmoney;
}
public void setCostmoney(Double costmoney) {
this.costmoney = costmoney;
}
public String getRecord() {
return record;
}
public void setRecord(String record) {
this.record = record;
}
}
4.3.4数据库连接类
数据库连接代码如下:
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBCon {
public static Connection getConnection()
{
String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=myaccountbase";
String user="sa";
String psw="sa";
Connection conn=null;
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
try
{
conn=DriverManager.getConnection(url, user, psw);
conn.setAutoCommit(false);
return conn;
}
catch(SQLException e)
{
e.printStackTrace();
}
return null;
}
}
5 总结与展望
经过本次课程设计自己JavaWeb编程加深了理解,对MVC模型的工作原理和工作过程有了更深刻的理解,对struts2模型及其工作过程也有了比从前更深的认识,对于如何配置web.xml和struts.xml文件也加深了记忆,Filterdispatcher
展开阅读全文