Java课程设计--理财系统

以下报告为本人(闽师18软2班2号)Java课程设计功能详解,如有大面积借鉴或转载,烦请注明来源

视图模块

一、登陆
在这里插入图片描述
主要使用方法:
1、禁用frame装饰
即让Frame窗口失去边框和标题栏的修饰

JFrame f1 = new JFrame("家庭理财系统");
f1.setLayout(null);         //绝对布局
f1.setBounds(300, 200, 800, 600);
f1.setResizable(false);
f1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f1.setUndecorated(true);    //禁用frame装饰
f1.setVisible(true);

注意事项:
a、setUndecorated方法必须在setVisible之前被执行
b、确保Frame窗口是新建且没有做过任何显示,否则将抛出异常
2、设置背景为图片

URL resource = this.getClass().getResource("image/5.jpg");
ImageIcon icon = new ImageIcon(resource);
backgrounnd1.setIcon(icon);
backgrounnd1.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());
f1.getContentPane().add(backgrounnd1);  //f1为上述代码的JFrame
f1.setVisible(true);         //前段代码需放在setVisible方式之前执行

二、主界面
在这里插入图片描述
整个界面的透明实现较为复杂,所以在Java专栏下另开一篇文章,戳这里查看swing界面透明

1、添加数据
主要使用方法,前文有写过的不再赘述,下文同理
1)金额数据限制

private boolean isNum(String str) {     //判断是否为数字
		try {
			double num = Double.valueOf(str);
		} catch (Exception e) {
			return false;
		}
		return true;
}
Double.valueOf(txt1.getText()).intValue() < 0.01  //判断是否大于0.01

2)日期正则

txt3.getText().matches("(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)")

3)二级联动下拉菜单

//下拉菜单1
public static JComboBox iEBox= new JComboBox(new Object[] {"支出","收入"});```
//下拉菜单2
static String[][] type={
		{"餐饮","购物","学习","娱乐","医疗","其他"},
		{"工资","奖金","生意","其他"}};
public static JComboBox typesBox=new JComboBox(type[0]);
//注册监听器
	iEBox.addActionListener(this);
//事件处理实现二级联动
public void 	addBoxEventHandler(){
		iEBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				int index=iEBox.getSelectedIndex();
				typesBox.removeAllItems();
				for (int i = 0; i < type[index].length; i++) {
					typesBox.addItem(type[index][i]);
				}
			}
		});
}

2、修改数据
在这里插入图片描述
具体数据处理与添加数据类似

3、删除数据
直接采用JOptionPane传入待删除行编号
4、财务统计
在这里插入图片描述
在这里插入图片描述
5、修改密码
需输入密码,直接采用JOptionPane完成
6、操作提示
在这里插入图片描述
7、数据格式化
需输入密码,直接采用JOptionPane完成

实体类
从需求分析开始就要设计好数据结构(这点很重要)
IS(接口):财务数据接口
IEStatement:财务数据实体类(继承IS)
Password:密码数据实体类

控制层
财务数据操控部分用到了接口传参,整体比较简单,没啥可讲的,贴一段财务数据操控的代码

public class IEStatementController {

	public void addData(IS ies) {
		new IEStatementModel().addData(ies);
	}

	public void deleteData(int i) {
		new IEStatementModel().deleteData(i);
	}

	public void updateData(IS is) {
		new IEStatementModel().updateData(is);
	}

	public void formatData() {
		new IEStatementModel().formatData();
	}
}

模型
关于数据库存储过程的具体操作会在SQLServer专栏下另开文章

1、ConnectDataBase(接口)
为什么定义接口:定义重复行为规范(如连接数据库进行操作必定要打开资源和关闭资源,但不同数据库具体连接方式不一样,以下以SQLServer为例)

public interface ConnectDataBase {
	String url=null;
	String user=null;
	String password=null;
	
	void openConnection();
	void closeConnection();
}

2、ConnectSQLServer(抽象类)
为什么在抽象类中实现开闭资源方法:减少代码冗余,后续所有关于数据库的操作都必须进行资源开闭
为什么不定义增删改查的抽象方法:传入参数不同

public abstract class ConnectSQLServer implements ConnectDataBase{
	protected Connection conn;
	protected String url="jdbc:sqlserver://localhost:1433;DatabaseName=Financing";
	protected String user="sa";
	protected String password="123";
	public void openConnection() {
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			
			conn=DriverManager.getConnection(url,user,password);
		} catch (ClassNotFoundException e) {
			System.out.println("找不到数据库资源");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("数据库连接错误");
			e.printStackTrace();
		}
	}
	
	public void closeConnection() {
		try {
			conn.close();
		} catch (SQLException e) {
			System.out.println("数据库资源关闭错误");
			e.printStackTrace();
		}
	}
}

3、数据库操作具体实现
实现基本的增删改查和格式化操作,具体不作过多描述,届时可参考SQLServer专栏

自定义异常类
1、先写一个父类,继承Exception或RuntimeException
实现构造方法和getMessage方法

public abstract class BaseException extends Exception{
	 private String message;

	 public BaseException(String msg)
	 {
	     this.message = msg;
	 }
	 public String getMessage() {
	     return message;
	 }
	}

2、自定义异常

public class MoneyFormatException extends BaseException{
	public MoneyFormatException(String msg) {
		super(msg);
	}	
	public static class unNumExecution extends BaseException{//非数字
		public unNumExecution(String msg) {
			super(msg);
		}
		
		public String getMessage(String msg){
			return msg;
		}
	}
	
}

3、具体调用

try {
       if (!isNum(txt1.getText())) {
        	throw new MoneyFormatException.unNumExecution("输入非数字金额,有误!");
       } catch (unNumExecution e1) {
			System.out.println(e1.getMessage());
	} 

整个项目大致就是这样,编程菜鸟,如有不妥,烦请指教

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值