资源描述
合肥学院
计算机科学与技术系
课程设计报告
2012~2013学年第一学期
课程
Java课程设计
课程设计名称
信用卡在线管理系统
专业班级
11计本(4)班
姓名
黄伟
指导教师
张贯虹 胡春玲
2013年1月
一. 需求分析
1、课程设计名称及内容
课程设计名称:信用卡在线管理系统
设计内容:设计一个信用卡管理系统,实现基于网络管理信用卡信息。
2、任务和要求
系统用户分为管理员、注册用户和普通用户。
a) 提供注册功能,系统的访问者可以注册成为注册用户,注册信息包括卡号、密码和其他个人信息。注册用户没有任何操作权限,必须经管理员审批通过后成为普通用户才有权操作。新注册的用户,卡上初始金额为0。
b) 普通用户可以执行现金转入、现金转出、个人信息修改、余额查询和交易记录查询功能。
c) 用户可以录入转入金额和转出金额,当转出金额大于信用卡的余额时,须判断透支金额是否在本卡的信用额度内(信用额度由管理员设定),如果在则允许透支,否则拒绝支出。
d) 当信用卡发生透支后,在20天内不计利息,20天后按每天1%计算利息,当透支金额+透支利息超过本卡的信用额度,则本卡自动转入“黑名单”(利息继续计算),不再允许进行现金转出操作。
e) 普通用户可以随时查看卡内余额。
f) 普通用户可以按时间段查看交易记录,包括转入、转出和透支情况。
g) 管理员可以审核注册用户,设定用户信用额度,批准成为普通用户。
h) 管理员可以查看系统内的黑名单,包括卡号和透支额度。
二. 设计
1.数据库设计思想:
(1)数据库的设计:我们使用的数据库是Microsoft SQL 2005。
创建record和user表:
create database card;
use card;
create table record
(
id int not null primary key ,
fromId varchar(100) not null,
toId varchar(50) not null,
money float not null,
tradetime datetime
);
create table user1
(
id varchar(50) primary key not null,
password varchar(50) not null,
name varchar(100) not null,
type int ,
money float ,
credit float ,
overdraft float ,
blacklist int
);、
交易表
用户表
(2)对数据库的操作
Insert主要时用来对数据库进行插入操作,例如在record表中插入一条记录为,
public boolean insert ( Record record ){
String sql = "insert into record(id,fromId,toId,money,tradetime) values(?,?,?,?,?)";
try {
PreparedStatement pre = conn.prepareStatement(sql);
Calendar calendar=Calendar.getInstance();
calendar.setTime(record.getTradetime());
pre.setInt(1 , record.getId());
pre.setString(2 , record.getFromId());
pre.setString(3 , record.getToId());
pre.setDouble(4 , record.getMoney());
pre.setDate(5 , record.getTradetime());
pre.execute();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
Delete是多数据表中的记录加以删除,例如对user表中的记录删除操作为:
public boolean delete ( User user ){
String sql = "delete from [user] where id=?";
try {
PreparedStatement pre = conn.prepareStatement(sql);
pre.setString(1, user.getId());
pre.execute();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
Update是对数据库中的信息加以修改!
findAll是查找数据库中的所有记录!
findById是通过用户给定的id好来对数据库进行扫描,查找出所有与输入的id相匹配的信息!
同时也可以根据其他的关键字对数据库进行查找查找,例如是否是黑名单,是否已经有透支额了等等,具体的实现见代码!
2.java程序的设计:
主要以下几个包:
--bean
--User表示的是user表中的一条记录
--Record表示的是record表中的一条记录
--ChangePasswordBean是对修改密码时的所有属性的封装
--zhucBean是在新用户注册时的一条记录,主要包括属性id ,password ,name ;以及set和get方法!
--dao
--DBConnection用于连接数据库
--RecordDAO接口是封装对数据表Record的操作
--UserDAO接口是封装对数据表User的操作
--exception
--inputChangePasswordInfoNotRightException是用来显示输入的修改密码的出错的信息!
--InputGetNumNotRightException是用户输入的取款金额不合法异常
--InputSetNumNotRightException是用户输入的存款金额不合法异常
--LoginInfoNotRightException 是用户登陆是的不合法异常
--imp
--RecordDAOImp是对接口RecordDAO中的方法的实现。
--UserDAOImp是对接口UserDAO中方法的实现。
--service
--ChangePasswordService是对修改密码服务中可能出现的不正常信息加以分类并且予以处理。
--GetService是对用户输入的取款信息的不正常信息加以分类并且予以处理。
-- LoginService是对用户在登陆时输入信息的不正常信息加以分类并且予以处理。
-- SetService是对用户输入的存款信息的不正常信息加以分类并且予以处理。
-- view
-- ChangePasswordFrame是修改密码的操作界面。
-- GetFrame是用户进行取款操作的界面。
-- GuanlFram是管理员进行操作的界面。
-- LoginView是登陆主界面。
-- PtFram是普通用户的操作界面。
-- SetFrame是用户进行存款操作的界面。
-- zhucFram是新注册用户进行注册的界面。
a.登陆时主界面设计
public class LoginView extends JFrame implements ActionListener{
private JButton adminLoginButton;
private JButton zhucButton;
private JButton loginButton;
private JTextField idField;
private JPasswordField passwordField;
private JLabel showMessageLabel;
private String title="登陆";
private JPanel panel=null;
//protected ImageIcon icon;
public LoginView(){
//窗口属性设置
this.setBounds(250, 80, 550,600);
//icon=new ImageIcon("img/1.jpg");
panel=new JPanel();
panel.setLayout(null);
panel.setBounds(250, 80, 600,650);
//创建相应的组件
adminLoginButton=new JButton("管理员登陆");
JLabel welcomeLabel=new JLabel("欢迎使用信用卡网上管理模拟系统");
showMessageLabel=new JLabel();
JLabel nameLabel=new JLabel("账号");
JLabel passwordLabel=new JLabel("密码");
idField=new JTextField();
passwordField=new JPasswordField();
zhucButton=new JButton("注册");
loginButton=new JButton("登陆");
// button.setIcon(new ImageIcon(button.getToolkit().getImage("F:\\MyEclipse\\abcdefg\\atm\\icon.png")));
//组件属性设置
adminLoginButton.setBounds(390, 340, 120, 25);
showMessageLabel.setBounds(100, 500, 500, 30);
welcomeLabel.setFont(new Font("隶书",Font.BOLD,30));
welcomeLabel.setBounds(20, 50, 500, 60);
nameLabel.setBounds(170,240,60,30);
passwordLabel.setBounds(170, 290, 60, 30);
idField.setBounds(205, 240, 180, 25);
passwordField.setBounds(205, 290, 180, 25);
zhucButton.setBounds(205, 340,60,25);
loginButton.setBounds(305, 340,60,25);
passwordField.setEchoChar('*');
// 注册监听器
adminLoginButton.addActionListener(this);
zhucButton.addActionListener(this);
loginButton.addActionListener(this);
passwordField.addActionListener(this);
//向面板中添加各个组件
panel.add(adminLoginButton);
panel.add(showMessageLabel);
panel.add(welcomeLabel);
panel.add(nameLabel);
panel.add(passwordLabel);
panel.add(idField);
panel.add(passwordField);
panel.add(zhucButton);
panel.add(loginButton);
this.add(panel);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.setResizable(false);
this.setVisible(true);
}
/*
* 事件处理
*/
public void actionPerformed(ActionEvent e) {
if((JButton)e.getSource()==zhucButton){
new zhucFram("新用户注册界面");
}
else if((JButton)e.getSource()==loginButton){
UserDAOImp userDao=new UserDAOImp();
User user=new User();
LoginService loginService=new LoginService();
user.setId(idField.getText().trim());
user.setPassword(String.valueOf(passwordField.getPassword()));
User user1=userDao.findByIdAndPassword(user);
System.out.println("user="+user.getPassword());
try {
loginService.checkLoginInfo(user1);
//用户登陆成功后得主界面
new PtFram("用户登陆成功后的操作界面",user.getId()).setVisible(true);
this.setVisible(false);
System.out.println("ghghj");
JOptionPane.showMessageDialog(null,"登陆成功!!","",JOptionPane.DEFAULT_OPTION);
} catch (LoginInfoNotRightException e1){
e1.printStackTrace();
System.out.println(e.toString());
showMessageLabel.setText(e.toString());
}
}
else if(e.getSource()==adminLoginButton){
if("admin".equals(idField.getText())&&"admin".equals(String.valueOf(passwordField.getPassword()))){
//管理员注册成功后的主界面
new GuanlFram(" 管理员登陆成功后的操作界面").setVisible(true);
this.setVisible(false);
}
else {
showMessageLabel.setText("账号错或者密码错,请查找后重新登陆!");
idField.setText(null);
passwordField.setText(null);
}
}
}
}
主界面截图:
b.注册新用户界面
public class zhucFram extends JFrame implements ActionListener {
Box basebox,box1,box2;
Button Button1,Button2;
TextField NameTextField =new TextField(12);
TextField idTextField =new TextField(12);
JPasswordField passwordTextField = new JPasswordField(12);
JPasswordField repasswordTextField = new JPasswordField(12);
public zhucFram(String s)
{
super(s);
Button1=new Button("确定");
Button2=new Button("取消");
box1=Box.createVerticalBox();
box1.add(new Label("姓名"));
box1.add(Box.createVerticalStrut(8));
box1.add(new Label("卡号"));
box1.add(Box.createVerticalStrut(8));
box1.add(new Label("请输入密码"));
box1.add(Box.createVerticalStrut(8));
box1.add(new Label("请再输一遍"));
box1.add(Box.createVerticalStrut(8));
box1.add(Button1);
box2=Box.createVerticalBox();
box2.add(NameTextField);
box2.add(Box.createVerticalStrut(8));
box2.add(idTextField);
box2.add(Box.createVerticalStrut(8));
box2.add(passwordTextField);
box2.add(Box.createVerticalStrut(8));
box2.add(repasswordTextField);
box2.add(Box.createVerticalStrut(8));
box2.add(Button2);
basebox=Box.createHorizontalBox();
basebox.add(box1);
basebox.add(Box.createHorizontalStrut(10));
basebox.add(box2);
Button1.addActionListener(this);
Button2.addActionListener(this);
setLayout(new FlowLayout());
add(basebox);
setBounds(240,250,500,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==Button1)
{
String userName = String.valueOf(NameTextField.getText()) ;
String userId = String.valueOf(idTextField.getText()) ;
String userPassword = String.valueOf(passwordTextField.getPassword()) ;
String testPassword = String.valueOf(repasswordTextField.getPassword()) ;
if(userPassword.equals(testPassword)){
try{
User user1=new User();
user1.setId(userId);
user1.setName(userName);
user1.setPassword(userPassword);
UserDAOImp addUser=new UserDAOImp();
boolean success=addUser.insert(user1);
if(success) JOptionPane.showMessageDialog(null,"注册成功,请重新登陆","",JOptionPane.DEFAULT_OPTION);
else{
JOptionPane.showMessageDialog(null,"注册失败!!","",JOptionPane.DEFAULT_OPTION);
}
}
catch(Throwable www){www.printStackTrace();}
}
else{
JOptionPane.showMessageDialog(null,"您输入的密码前后不符,请重新输入","",JOptionPane.DEFAULT_OPTION);
}
}
else{dispose() ;}
}
}
用户注册界面截图:
c.管理员登陆界面
public class GuanlFram extends Frame implements ActionListener{
Button shenhButton=new Button("审核注册用户");
Button chakButton=new Button("查看系统内的黑名单");
Button _return = new Button("返回");
Box baseBox,box1;
public GuanlFram(String s)
{
super(s);
box1=Box.createVerticalBox();
box1.add(Box.createVerticalStrut(10));
box1.add(shenhButton);
box1.add(Box.createVerticalStrut(10));
box1.add(chakButton);
box1.add(Box.createVerticalStrut(10));
box1.add(_return);
baseBox=Box.createHorizontalBox();
baseBox.add(box1);
_return.addActionListener(this);
shenhButton.addActionListener(this);
chakButton.addActionListener(this);
setLayout(new FlowLayout());
add(baseBox);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setBounds(240,250,500,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==shenhButton)
{
//System.out.println("新注册用户的信息");
UserDAOImp userdao=new UserDAOImp();
List list = new UserDAOImp().findByType(0);
final Frame frame=new Frame();
TextArea text=new TextArea(50,50);
frame.setLayout(new FlowLayout());
frame.add(text);
frame.setBounds(240,250,500,300);
// frame.add(_return);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
frame.setVisible(false);
}
});
if(list.size()==0)
text.append("系统现在没有新注册的用户");
else{
for(int i=0;i<list.size();i++){
User user=(User)list.get(i);
text.append("卡号:"+user.getId());
text.append("\n密码:"+user.getPassword());
text.append("\n姓名:"+user.getName());
text.append("\n余额"+user.getMoney());
text.append("\n信用额度"+user.getCredit());
text.append("\n透支金额"+user.getOverdraft());
text.append("\n******************************");
text.append("\n此时系统已经将新注册用户提升为普通用户了!");
user.setType(1);
text.append("\n******************************");
text.append("\n系统已经将新注册用户的信用额度设置为1000元!");
user.setCredit(1000);
userdao.update(user);
}
}
}
else if(e.getSource()==chakButton)
{
//System.out.println("进入系统黑名单界面");
List list = new UserDAOImp().findByBlacklist(1);
final Frame frame=new Frame();
TextArea text=new TextArea(50,50);
frame.setLayout(new FlowLayout());
frame.add(text);
frame.setBounds(240,250,500,300);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
frame.setVisible(false);
}
});
if(list.size()==0)
text.append("系统现在没有黑名单的用户");
else{
for(int i=0;i<list.size();i++){
User user=(User)list.get(i);
text.append("卡号:"+user.getId());
text.append("\n密码:"+user.getPassword());
text.append("\n姓名:"+user.getName());
text.append("\n余额:"+user.getMoney());
text.append("\n信用额度:"+user.getCredit());
text.append("\n透支金额:"+user.getOverdraft());
text.append("\n******************************");
}
}
}
else if(e.getSource() == _return){
new LoginView();
dispose();
}
}
}
管理员登陆界面截图:
e.普通用户登陆界面
public class PtFram extends Frame implements ActionListener{
private String id;
Button getButton=new Button("现金转出");
Button setButton=new Button("现金转入");
Button changeButton=new Button("个人信息修改");
Button serchButton=new Button("余额查询");
Button serchjiluButton=new Button("交易记录查询");
Button serchfhButton=new Button("返回");
Box baseBox,box1;
public PtFram(String s,String id)
{
super(s);
this.id=id;
box1=Box.createVerticalBox();
box1.add(Box.createVerticalStrut(10));
box1.add(getButton);
box1.add(Box.createVerticalStrut(10));
box1.add(setButton);
box1.add(Box.createVerticalStrut(10));
box1.add(changeButton);
box1.add(Box.createVerticalStrut(10));
box1.add(serchButton);
box1.add(Box.createVerticalStrut(10));
box1.add(serchjiluButton);
box1.add(Box.createVerticalStrut(10));
box1.add(serchfhButton);
baseBox=Box.createHorizontalBox();
baseBox.add(box1);
getButton.addActionListener(this);
setButton.addActionListener(this);
changeButton.addActionListener(this);
serchButton.addActionListener(this);
serchjiluButton.addActionListener(this);
serchfhButton.addActionListener(this);
setLayout(new FlowLayout());
add(baseBox);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setBounds(240,250,500,300);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==getButton)
{
System.out.println("进入现金转出界面");
new GetFrame(id).setVisible(true);
}
else if(e.getSource()==setButton)
{
System.out.println("进入现金转入界面");
new SetFrame(id).setVisible(true);
}
else if(e.getSource()==changeButton)
{
System.out.println("进入信息修改界面");
//User user=new UserDAOImp().update(id);
new ChangePasswordFrame(id).setVisible(true);
}
else if(e.getSource()==serchButton)
{
System.out.println("进入余额查询界面");
展开阅读全文