数据库程序设计
-----小型图书管理系统设计
专业班级: 10信息管理与信息系统本(一)班
小组组长: 罗国灏 学号:100513025
小组副组长: 张晓雅 学号:100513008
小组成员: 周来明 学号:100914024
目 录
数据库程序设计....................... - 1 -
一、选题目的与系统概述........... - 2 -
二、项目开发小组成员任务分配..... - 3 -
三、系统可行性分析与相关技术背景分析 - 3 -
四、系统设计与关键技术........... - 5 -
五、系统测试与操作实施方法....... - 8 -
六、系统设计总结与回顾.......... - 13 -
七、参考文献.................... - 14 -
八、附录........................ - 14 -
一、选题目的与系统概述
图书馆如果使用手工管理,效率低,易出错,手续繁琐,而且要耗费大量的人力。图书馆希望设计一个图书馆系统,方便图书的入库、图书的删除、读者对图书的查询等。管理人员可以查询某位读者、某本图书的借阅情况,对当前借阅情况给出一些统计,给出统计表格,以全面掌握图书的流通情况. 图书管理系统可以为学校教师和学生提供充足的信息和快捷的查询手段,让教师和学生能够及时查询图书信息,更好地为读者服务。
本系统是小型图书管理系统,专为个人设计。此系统能方便给用户提供关于图书的相关内容。本系统启动后需要登陆,在登录界面中有一注册功能,待用户注册后,输入相应用户名及密码后,然后进入主界面。在这个界面我们可以选择所需要的功能模块来完成所要执行的功能。
系统共有5个功能模块:图书入库、图书查询、图书删除、图书概览、修改密码。支持一系列关于图书管理方面的简单操作,诸如查询、删除、添加、修改密码等。
二、项目开发小组成员任务分配
组长与小组成员互相商讨关于开发此款软件的所需要实现的何种功能及所需要的开发工具,之后先组成员们讨论出该项目的整体开发流程,形成一份明晰的纸质稿。然后大致分配好各自的任务。
其中,各个小组成员负责如下的任务:
组长:负责设计并调试程序;
副组长:负责设计数据库;
成员:负责监督,并进行排版设计;
三、系统可行性分析与相关技术背景分析
1、可行性分析:
(1)项目背景分析
本项目名称为“小型图书管理系统”。该系统主要为管理员设计,方便查找图书及录入图书。系统功能主要包括:能够存储一定数量的图书信息并进行图书查询、图书删除、图书入库、图书概览、修改密码等,系统的注册功能可以让多个人登录系统,方便个人使用。本项目的任务提出者为安工计科学院,开发者为计科学院软件工程专业的学生。
(2)性能分析
小型图书管理系统的使用者是个人或是管理员。对于管理工作,性能要求不是太严格,但需要方便图书入库等操作。
(3)可靠性和安全性
由于图书管理系统的图书量会非常大,所以在对这些图书导入和查询时要保证速度。对于整个系统,由于是对管理员专用,并未设置权限控制。但是,数据库中的数据需要定时备份,防止系统数据丢失。
(4)项目基本目标分析
该系统的目标应考虑以下几个方面:
(i)系统需要操作方便,方便管理员的管理。
(ii)系统需要提供综合查询功能,方便图书的查询。
(iii)系统需要良好的扩展性,方便功能扩展和性能扩展。
(5)技术条件可行性分析
本系统是一个采用面向对象技术、数据库技术等先进技术开发的应用程序,现有的开发技术已经成熟,虽没有大规模推广,相信不久的将来会被广泛应用。利用现有哦技术可以达到功能目标。
(6)经济可行性分析
该系统为小型系统,花费小,开发时间短,开发人数少,既经济又适用。
(7)社会因素方面的可行性
所建议系统的研制和开发都选用正版软件,将不会侵犯他人、集体和国家的利益,不会违反相关的国家政策和法律。
(8)操作方面的可行性
本系统的研制和开发充分考虑用户工作流程、计算机操作水平等,尽可能提供更人性化、直观的界面,满足用户要求。系统的操作方式在用户组织内可行。
(9)可行性的结论
经上述可行性分析,系统的研制和开发可以立即开始进行。
2、相关技术背景分析:
本系统采用增加进度条、动态图片加载、登录进度页面等来完善系统。本系统运用RemoveBook、Regist、Book、BookIn、QueryBook、BookBrower、StartWindow、UpdateMima、Login九个类来编写系统。
用Toolkit kit=Toolkit.getDefaultToolkit(); Dimension screen=kit.getScreenSize();等函数获得当前屏幕大小,从而确定框架的位置。
用JLabel label=new JLabel(new ImageIcon("5.gif"));来调用动态图片,并用Time类设置时间,用以实现登录进度界面过程。
用addActionListener(this)事件监听器来实现单击按钮时执行的事件,如单击“取消”按钮时退出当前界面。
四、系统设计与关键技术.
1、流程图
说明:
首先是进入登录界面,相当于在登陆模块,要求管理员输入用户名和密码;然后判断管理员帐号及密码的正确性,如果不正确或不存在,则退出系统,否则进入图书管理系统的主界面。进入主界面后,用户要选择所需执行的功能,即通过鼠标点击相应项,来完成所需操作。
2、数据库设计
在图书管理系统中,共设计2张表。本系统使用Windows SQL server 2000来创建数据库表。数据库的名称为BookSystem.mdb。
1.表book
2.表user
3、关键技术
本小项目系统采用技术大部分是java教材里的相关知识,各种类的建立。
操作系统:windows xp;
开发工具:Eclipse;
运行环境:JDK 1.6.0;
编程语言:Java语言等。
利用Eclipse开发项目,是可以提高项目的开发效率的。这些理论知识为该项目的进行提供了有力支持。
五、系统测试与操作实施方法
(1)注册模块
注册模块主要包含用户名、输入密码及确定密码三个文本,和确定、取消两个按钮,由Regist实现。在输入完成后,选择确定按钮,会显示“注册成功”窗口,从而把用户信息储存到数据库中的user表中等。当注册成功后就可以用注册的账号进行登录了 。从而就可以进行后续的功能操作。而点击取消按钮,则会退出程序。
(2)登录及加载正在登录模块
因为对图书管理系统中所收录的信息的保密性,所以设置了登录模块,而对于登录模块,主要由Login实现。对于已注册的用户,可以通过注册来获得账号,从而可以使用图书管理系统,并获得其中的信息。对于未注册的用户则不能进入和使用图书管理系统。验证密码是调用Book数据库中的user表中的信息进行对比。
加载登录模块:主要由StartWindow实现,当用户名存在而且密码正确时,进入登录界面。加载对应的动态图片及进度条,给用户一正在登录的视觉效果。
(3)主界面模块
当系统登录完毕后,进入图书管理系统主界面,由Book实现。在主界面中,主要包含图书查询,图书入库,图书删除,图书概览,修改密码及退出系统等六大功能,用户可以根据不同的需要进行选择不同的功能进行实现,而且在主界面框架中加载动态图片。
(4)图书查询模块
当单击图书查询按钮时,进入图书查询功能,主要是按图书号进行查询,由BookBrower实现。查询时系统调用Book数据库中的book表中的图书信息,当找到对应图书号时,系统将加载数据库表中的信息显示出来,即图书名、图书号、单价、作者、出版社、入库时间等信息;如果没有,则会提示“您输入的图书号不存在,请重新输入”的提示。
(5)图书入库模块
进入图书入库界面后,用户输入图书的相关信息,用户必须输入此图书的全部信息,如果有未输入的信息,系统则会提示“请填写图书全部信息”的提示;如果输入的图书号在数据库中已经存在,系统则会提示“图书号已经被使用,请重新输入”的提示。
(6)图书删除模块
删除图书时,点击主界面上的“图书删除”按钮,在弹出的对话框中的“请输入要删除的图书名:”后的JTextField文本框里输入要删除的图书名,点击对话框下面的“查询”按钮,系统会调用showRecord(String ql)函数搜索数据库中有关的书籍,并将此类书籍的详细信息显示在列表框中。在列表框的上边有一个“该种图书共有XX本”的提示,“XX”表示搜索出的结果共有几种书籍。此时若要继续删除搜索结果中的图书,需选中该图书所在的列表行,再点击“删除”按钮,系统调用deleteRecord(int index)函数从数据库中删除相应的记录。如果不选中所删除图书所在行的话而直接点击“删除”按钮的话,会提示“请选定要删除的表格行”。
(7)图书概览模块
浏览系统中所有的图书信息时,可点击主界面中的“图书概览”按钮,在所弹出的对话框中将以表格的形式显示出来,显示图书的所有信息是从数据库中存储的相关信息中提取出来。
(8)修改密码模块
若要修改登录密码时,可点击主界面中的“修改密码”按钮,在弹出的对话框中需输入的信息为:“用户名”、“原密码”、“新密码”、“确认密码”。当填好信息后点击“确定”按钮后,系统会调用updateM()函数来检查所输入的信息是否符合要求,请注意,输入的原密码需和用户名相一致且正确,不然会提示错误信息;输入的新密码和确认的密码也需一致,不然也会提示错误信息。如果都符合要求,将更新数据库,否则提示错误并重新输入。
(9)退出系统模块
当点击退出系统后,系统调用setVisable(boolean)函数,退出系统。
六、系统设计总结与回顾
通过小组成员2个周不懈努力,我们小组终于成功的把程序按功能分成不同的模块进行编写、编译、调试和修改,对各个模块所对应对话框的制作以及相应函数的调用,使各个分功能得以实现;最后,在程序中进行各个不同模块的调用,把各个功能对应的函数在同一个大的前提下运行以实现最终的信息的存取、修改和删除以及记录和读取,这样就能实现用户想要得到的功能。在项目工作的这一段时间里大家相处融洽,小组内部共同探讨解决问题的方法,向各模块负责人学习模块功能处理方式
在做图书管理系统时,从中学到了很多专业知识,使自己对实现某一功能不在感觉无从下手。不过在实现过程中,借阅很多相关专业知识,遇到很多问题,所以我们的相关专业知识方面还需要进一步加强,测试技能及测试管理方面还需要进一步完善学习。更好的吸收项目经验,做好以后的补丁测试工作及其他项目的测试工作。
经过这次课程设计,我们学会了Java在程序设计中的功能实现和数据调试,Java框架及其函数实现,增加了我们在实战中的工作能力和信心,在这次课程设计中,我们共同设计和研究,最终实现程序顺利运行,感觉到了在一个程序设计中团队合作是多么重要,虽然这次设计时间短暂但我们会在以后的学习中继续努力。
七、参考文献
[1] Java语言程序设计基础篇(原书第6版)、(美)梁(Liang,Y.D.)著;万波等译------北京:机械工业出版社,2008.6
[2] 张广彬等.Java课程设计案例精编[M].北京:清华大学出版社,2007,1.
[3] 黄晓东.Java课程设计案例精编[M].北京:中国水利水电出版社,2004,5.
[4] 求是科技.Java数据库系统开发实例导航[M].北京:人民邮电出版社,2004,9.
[5]张海藩,软件工程导论(第4版).北京:清华大学出版社,2003
[6]李芝兴,Java 程序设计之网络编程. 清华大学出版社,2006
[7] 张海藩,牟永敏。面向对象程序设计实用教程。北京:清华大学出版社,2001
八、附录
源代码:
1、注册界面
package org;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.sql.*;
import javax.swing.text.JTextComponent;
//extends JFrame
class Regist implements ActionListener
{
JFrame f3;
Container cp;
JPanel jp1;
JButton jbt1,jbt2;//按钮:确定、取消、
JLabel label; //标签
JTextField tf1,tf2,tf3; //定义文本框
JLabel label1;
Regist()
{
f3=new JFrame();
cp=f3.getContentPane(); // 初始化面板、按钮、标签、文本框
jp1=new JPanel();
//------------------------------------------------
jbt1=new JButton("确定");
jbt2=new JButton("取消");
//------------------------------------------------
label=new JLabel("<html><font color=#0000E6 size='4'>填写注册信息</font>",SwingConstants.CENTER);
label.setForeground(Color.blue);
//------------------------------------------------
tf1=new JTextField(20);
tf2=new JPasswordField(20);
tf3=new JPasswordField(20);
//------------------------------------------------
//布局,添加控
JPanel jpanel=new JPanel();
jpanel.add(label);
JPanel pp4=new JPanel();
//JPanel jpane4=new JPanel();
cp.add(jpanel,"North");
JPanel pp2=new JPanel(new GridLayout(3,1));
JPanel pp3=new JPanel();
pp4.setLayout(new GridLayout(3,1));
pp4.add(new JLabel("用户名",SwingConstants.CENTER));
pp2.add(tf1);
pp4.add(new JLabel("密码",SwingConstants.CENTER));
pp2.add(tf2);
pp4.add(new JLabel("确认密码",SwingConstants.CENTER));
pp2.add(tf3);
pp3.add(jbt1);
pp3.add(jbt2);
cp.add(pp4,"West");
cp.add(pp2,"Center");
cp.add(pp3,"South");
//cp.add(jpane4,"East");
//------------------------------------------------
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height; /*取得显示器窗口的高度*/
f3.setSize(400,300);
int xcenter=(x-350)/2;
int ycenter=(y-330)/2;
f3.setLocation(xcenter,ycenter);/*显示在窗口中央*/
f3.setVisible(true);
jbt1.addActionListener(this);//注册监听器
jbt2.addActionListener(this);
}
public void insertRecord()
{
if(tf1.getText().equals("")||tf2.getText().equals(""))
{
JOptionPane.showMessageDialog(f3,"请填写用户资料");
return;
}
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
Statement sql;
String s="insert into users values('"+tf1.getText()+"','"+tf2.getText()+"');";
sql=con.createStatement();
//查询输入的图书号是否在数据库中存在
String query="select * from users where 用户名='"+tf1.getText()+"'";
ResultSet rs=sql.executeQuery(query);//返回查询结果集*/
boolean moreRecords=rs.next();
if(moreRecords)
{
JOptionPane.showMessageDialog(null,"用户名已存在,请重新注册");
con.close();
tf1.setText("");
tf2.setText("");
tf3.setText("");
return;
}
if(tf2.getText().equals(tf3.getText()))
{
int insert=sql.executeUpdate(s);
if(insert==1)
{
JOptionPane.showMessageDialog(null,"注册成功!");
tf1.setText("");
tf2.setText("");
tf3.setText("");
}
}
else
{
JOptionPane.showMessageDialog(null,"请重新确认密码!");
tf2.setText("");
tf3.setText("");
}
}catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();
if(cmd.equals("确定"))
{
insertRecord();
}
else if(cmd.equals("取消"))
f3.setVisible(false)
}
public static void main(String[] arg){
Regist a=new Regist();
}2、登录界面
package org;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.sql.*;
public class Login extends JFrame implements ActionListener
{ Container cp=null;
JFrame f=null;
JButton j1,j2,j3;
JTextField t1,t2;
//JPasswordField ;////////////
JLabel jlable1,jlable2;
Color c;
JPanel jp1,jp2
Login(){
f=new JFrame("小型图书管理系统");
j1=new JButton("确定");
j2=new JButton("取消");
j3=new JButton("成为管理员");
cp=f.getContentPane();
jlable1=new JLabel("管理员账户");
jlable2=new JLabel(" 密码 ");
jp1=new JPanel()
{
public void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon img = new ImageIcon("33.jpg");
Dimension size=this.getParent().getSize();
int x=this.getWidth();
int y=this.getHeight();
g.drawImage(img.getImage(),0,0,x,y,null);
}
};
jp2=new JPanel();
t1=new JTextField(18);
t2=new JPasswordField(18);
t1.setOpaque(false);
t2.setOpaque(false);
jp1.add(jlable1);
jp1.add(t1);
jp1.add(jlable2);
jp1.add(t2);
JLabel JL=new JLabel("<html><font color=#0000E3 size='7'><i>欢迎登陆</i></font>",SwingConstants.CENTER);
setLayout(new BorderLayout(5,2)); //边界布局管理器
cp.add(JL,"North");
jp2.add(j1);
jp2.add(j2);
jp2.add(j3);
cp.add(jp1,"Center");
cp.add("South",jp2);
//jp1.setBackground(new Color(255,153,255)); //面板jp1背景颜色
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height; /*取得显示器窗口的高度*/
setSize(300,300);
int xcenter=(x-300)/2;
int ycenter=(y-300)/2;
f.setLocation(xcenter,ycenter);/*显示在窗口中央*/
f.setVisible(true);
//-----------------------------------------------------
j1.addActionListener(this);//注册事件监听器
j2.addActionListener(this);
j3.addActionListener(this);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
public void confirm()//验证管理员账户和密码是否存在
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
Statement sql=con.createStatement();
String uname=t1.getText().trim();
String Mima=t2.getText().trim();
String queryMima="select * from users where 用户名='"+uname+"' and 密码='"+Mima+"'";
ResultSet rs=sql.executeQuery(queryMima);
if(rs.next())
{
f.setVisible(false);
con.close();
StartWindow startW=new StartWindow();
}else{
JOptionPane.showMessageDialog(null,"用户名不存在","提示!", JOptionPane.YES_NO_OPTION);
}
t1.setText("");
t2.setText("");
} catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
}
public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();
if(cmd.equals("确定")){
confirm();
}
else if(cmd.equals("取消")){
f.dispose();
}
else if(cmd.equals("成为管理员"))
{
new Regist();
}
}
public static void main(String []arg){
Login a=new Login();
}
}3、正在登录
package org
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class StartWindow extends JWindow implements ActionListener
{
JProgressBar progressBar=new JProgressBar(1,100);
JLabel label=new JLabel(new ImageIcon("5.gif"));
Timer timer;
int n=100;
public StartWindow()
{
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height;
setSize(400,400);
int xcenter=(x-400)/2;
int ycenter=(y-400)/2;
setLocation(xcenter,ycenter);/*显示在窗口中央*/
toFront();
setVisible(true);
progressBar.setStringPainted(true);
progressBar.setString("loading......");
progressBar.setForeground(Color.BLUE);
getContentPane().add(label,"Center");
getContentPane().add(progressBar,"South");
timer=new Timer(100,this);
timer.addActionListener(this);
timer.start();
}
public void actionPerformed(ActionEvent e)
{
if(--n>0)
{
progressBar.setValue(100-n);
timer.restart();
}
else
{
timer.stop();
dispose();
new Book(" ");
}
}
public void Splash(String uname)
{
StartWindow frame=new StartWindow();
frame.setVisible(true);
}
}4、系统主界面
package org;
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;
class Book extends JFrame implements ActionListener
{
JButton QueryScore=new JButton("图书查询");
JButton QueryXuefen=new JButton("图书入库");
JButton jiangfa=new JButton("图书删除");
JButton xuanke=new JButton("图书概览");
JButton gaiMima=new JButton("修改密码");
JButton exitSystem=new JButton("退出系统");
JMenuBar mb = new JMenuBar();//菜单栏
JLabel label=new JLabel(new ImageIcon("1.gif")); //获取动态图片
JPanel jp=new JPanel();
Container cp=getContentPane();
String username;
Book(){}
Book(String username)
{
this.username=username;
mb.add(QueryScore);
mb.add(QueryXuefen);
mb.add(jiangfa);
mb.add(xuanke);
mb.add(gaiMima);
mb.add(exitSystem);
cp.add(mb,"North");
// 设置边框
jp.setBorder(BorderFactory.createTitledBorder(BorderFactory
.createLineBorder(Color.blue, 2),null,
TitledBorder.CENTER, TitledBorder.TOP));
jp.setLayout(new BorderLayout());
jp.add(label); //加入动态背景
JScrollPane scrollpane=new JScrollPane(jp);
cp.add(scrollpane);
setTitle("欢迎登陆");
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height; /*取得显示器窗口的高度*/
setSize(800,600);
int xcenter=(x-800)/2;
int ycenter=(y-600)/2;
setLocation(xcenter,ycenter);/*显示在窗口中央*/
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//注册临听器
QueryScore.addActionListener(this);
QueryXuefen.addActionListener(this);
jiangfa.addActionListener(this);
xuanke.addActionListener(this);
gaiMima.addActionListener(this);
exitSystem.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();
if (cmd.equals("图书查询"))
{
new QueryBook();
}
if (cmd.equals("图书入库"))
{
new BookIn();
}
if (cmd.equals("图书删除"))
{
new RemoveBook();
}
if (cmd.equals("图书概览"))
{
new BookBrower().showRecord();
}
if (cmd.equals("修改密码"))
{
new UpdateMima(username);
}
if(cmd.equals("退出系统"))
setVisible(false);
}
public static void main(String[]args)
{
new Book("");
}
}
5、图书查询
package org;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.sql.*;
class QueryBook implements ActionListener
{
JFrame f3;
Container cp;
JPanel jp1,jp2,jp3,jp4,jp,jpanelWest;
JButton jbt1,jbt2;//按钮,确定、取消
JLabel label; //标签:请输入图书号
JTextField tf,tf1,tf2,tf3,tf4,tf5,tf6; //定义文本框
JLabel label1,label2,label3,label4;
QueryBook()
{
f3=new JFrame();
cp=f3.getContentPane(); // 初始化面板、按钮、标签、文本框
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();
jpanelWest=new JPanel();
jp=new JPanel();
//------------------------------------------------
jbt1=new JButton("确定");
jbt2=new JButton("取消");
//------------------------------------------------
label=new JLabel("<html><font color=#CC00FF size='3'>请输入图书号:</font>",SwingConstants.CENTER);
label.setForeground(Color.black);
tf=new JTextField(20);
//------------------------------------------------
tf1=new JTextField(20);
tf2=new JTextField(20);
tf3=new JTextField(20);
tf4=new JTextField(20);
tf5=new JTextField(20);
tf6=new JTextField(20);
tf1.setEditable(false); //除图书号外其它均为不可编辑
tf2.setEditable(false);
tf3.setEditable(false);
tf4.setEditable(false);
tf5.setEditable(false);
tf6.setEditable(false);
//------------------------------------------------
//布局,添加控件
JPanel jpanel=new JPanel();
jpanel.add(label);
jpanel.add(tf);
JPanel pp4=new JPanel();
JPanel jpane4=new JPanel();
cp.add(jpanel,"North");
JPanel pp2=new JPanel(new GridLayout(6,1));
JPanel pp3=new JPanel();
pp4.setLayout(new GridLayout(6,1));
pp4.add(new JLabel("图书名",SwingConstants.CENTER));
pp2.add(tf1);
pp4.add(new JLabel("图书号",SwingConstants.CENTER));
pp2.add(tf2);
pp4.add(new JLabel("单 价",SwingConstants.CENTER));
pp2.add(tf3);
pp4.add(new JLabel("作 者",SwingConstants.CENTER));
pp2.add(tf4);
pp4.add(new JLabel("出版社",SwingConstants.CENTER));
pp2.add(tf5);
pp4.add(new JLabel("入库时间",SwingConstants.CENTER));
pp2.add(tf6);
pp3.add(jbt1);
pp3.add(jbt2);
cp.add(pp4,"West");
cp.add(pp2,"Center");
cp.add(pp3,"South");
cp.add(jpane4,"East");
//------------------------------------------------
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height; /*取得显示器窗口的高度*/
f3.setSize(350,330);
int xcenter=(x-350)/2;
int ycenter=(y-330)/2;
f3.setLocation(xcenter,ycenter);/*显示在窗口中央*/
f3.setVisible(true);
jbt1.addActionListener(this);//注册监听器
jbt2.addActionListener(this);
}
public void showRecord()
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
Statement sql;
String ql=tf.getText().trim();
String s="select * from book where 图书号 ='"+ql +"'";
sql=con.createStatement();
ResultSet rs=sql.executeQuery(s);
if(rs.next())
{
String bname=rs.getString(1);
String bno=rs.getString(2);
String price=rs.getString(3);
String writer=rs.getString(4);
String publish=rs.getString(5);
String indate=rs.getString(6);
tf1.setText(bname);
tf2.setText(bno);
tf3.setText(price);
tf4.setText(writer);
tf5.setText(publish);
tf6.setText(indate);
}
else
{JOptionPane.showMessageDialog(null,"您输入的图书号不存在,请重新输入",
"输入错误", JOptionPane.YES_NO_OPTION);
}
con.close();
}catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
tf1.setEditable(false);
tf2.setEditable(false);
tf3.setEditable(false);
tf4.setEditable(false);
tf5.setEditable(false);
tf6.setEditable(false);
}
public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();
if(cmd.equals("确定"))
{
showRecord();
tf.setText("");
}
else if(cmd.equals("取消"))
f3.setVisible(false);
}
public static void main(String []arg){
QueryBook a=new QueryBook();
}
}
6、图书入库
package org;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
class BookIn implements ActionListener
{
JFrame f3;
Container cp;
JPanel jp1,jp2,jp3,jp4,jp,jpanelWest;
JButton jbt1,jbt2;//按钮:确定、取消、
JLabel label; //标签
JTextField tf1,tf2,tf3,tf4,tf5,tf6; //定义文本框
JLabel label1,label2,label3,label4;
String sno;
BookIn()
{
f3=new JFrame();
cp=f3.getContentPane(); // 初始化面板、按钮、标签、文本框
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();
jpanelWest=new JPanel();
jp=new JPanel();
//------------------------------------------------
jbt1=new JButton("确定");
jbt2=new JButton("取消");
//------------------------------------------------
label=new JLabel("<html><font color=#0000E6 size='4'>图书入库</font>",SwingConstants.CENTER);
label.setForeground(Color.blue);
tf1=new JTextField(20);
tf2=new JTextField(20);
tf3=new JTextField(20);
tf4=new JTextField(20);
tf5=new JTextField(20);
tf6=new JTextField(20);
//布局,添加控件
jp1.add(jbt1);
jp1.add(jbt2);
sno=tf4.getText();
jp1.add(new JLabel("您好"+sno+"欢迎登陆学生信息系统"));
JPanel jpanel=new JPanel();
jpanel.add(label);
JPanel pp4=new JPanel();
JPanel jpane4=new JPanel();
cp.add(jpanel,"North");
JPanel pp2=new JPanel(new GridLayout(6,1));
JPanel pp3=new JPanel();
pp4.setLayout(new GridLayout(6,1));
pp4.add(new JLabel("图书名",SwingConstants.CENTER));
pp2.add(tf1);
pp4.add(new JLabel("图书号",SwingConstants.CENTER));
pp2.add(tf2);
pp4.add(new JLabel("单 价",SwingConstants.CENTER));
pp2.add(tf3);
pp4.add(new JLabel("作 者",SwingConstants.CENTER));
pp2.add(tf4);
pp4.add(new JLabel("出版社",SwingConstants.CENTER));
pp2.add(tf5);
pp4.add(new JLabel("入库时间",SwingConstants.CENTER));
pp2.add(tf6);
pp3.add(jbt1);
pp3.add(jbt2);
cp.add(pp4,"West");
cp.add(pp2,"Center");
cp.add(pp3,"South");
cp.add(jpane4,"East");
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height; /*取得显示器窗口的高度*/
f3.setSize(350,330);
int xcenter=(x-350)/2;
int ycenter=(y-330)/2;
f3.setLocation(xcenter,ycenter);/*显示在窗口中央*/
f3.setVisible(true);
jbt1.addActionListener(this);//注册监听器
jbt2.addActionListener(this);
}
public void insertRecord()
{
if(tf1.getText().equals("")||tf2.getText().equals("")||tf3.getText().equals("")||
tf4.getText().equals("")||tf5.getText().equals("")||tf6.getText().equals(""))
{
JOptionPane.showMessageDialog(f3,"请填写图书资料");
return;
}
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
Statement sql;
String s="insert into book values('"+tf1.getText()+"','"+tf2.getText()+"','"+
tf3.getText()+"','"+tf4.getText()+"','"+tf5.getText()+"','"+tf6.getText()+"');"; //查询输入的图书号是否在数据库中存在
String query="select * from book where 图书号='"+tf2.getText()+"'";
sql=con.createStatement();
ResultSet rs=sql.executeQuery(query);//返回查询结果集
boolean moreRecords=rs.next();//判断结果集是否有数据
if(moreRecords)
{
JOptionPane.showMessageDialog(f3,"图书号已经被使用,请重新输入");
con.close();
tf2.setText("");
return;
}
int insert=sql.executeUpdate(s);
if(insert==1)
{
JOptionPane.showMessageDialog(null,"图书信息录入成功!");
tf1.setText("");
tf2.setText("");
tf3.setText("");
tf4.setText("");
tf5.setText("");
tf6.setText("");
}
}catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
}
public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();
if(cmd.equals("确定"))
{
insertRecord()
}
else if(cmd.equals("取消"))
f3.setVisible(false);
}
public static void main(String []arg){
BookIn a=new BookIn();
}
}
7、图书删除
package org;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.sql.*;
class RemoveBook implements ActionListener
{
JFrame f;
Container cp;
JPanel jpS,jpanelWest;
JButton jbt1,jbt2,jbt3;//按钮,查询、取消、修改
JLabel label,L; //标签:请输入学号
JTextField tf; //定义文本框
JTable table;//用来接收数据库中返回的信息
Object columnName[]={"图书名","图书号","单价","作者","出版社","入库时间"};
Object ar[][] =new Object[80][6];
String sno;
String count="xx";
RemoveBook()
{
f=new JFrame();
cp=f.getContentPane(); // 初始化面板、按钮、标签、文本框
jpS=new JPanel();
jpanelWest=new JPanel();
//------------------------------------------------
jbt1=new JButton("查询");
jbt2=new JButton("取消");
jbt3=new JButton("删除");
//------------------------------------------------
label=new JLabel("<html><font color=#0000E6 size='4'>请输入要删除的图书名:</font>",SwingConstants.CENTER);
label.setForeground(Color.blue);
L=new JLabel("该种图书共有"+count+"本");
//------------------------------------------------
table=new JTable(ar,columnName);//ar存放表中的数据,columnname表示列名
JScrollPane scrollpane = new JScrollPane(table);
//------------------------------------------------
tf=new JTextField(18);
//------------------------------------------------
//------------------------------------------------
//布局,添加控件
jpS.add(jbt1);
jpS.add(jbt2);
jpS.add(jbt3);
JPanel jpanel=new JPanel();
jpanel.add(label);
jpanel.add(tf);
JPanel pp4=new JPanel();
JPanel jpE=new JPanel();
cp.add(jpanel,"North");
JPanel jp=new JPanel();
//jp.add(scrollpane);
JPanel p=new JPanel();//用来放两个表
p.setLayout(new BorderLayout());
p.add(L,"North");
p.add(scrollpane);
cp.add(pp4,"West");
cp.add(p,"Center");
cp.add(jpS,"South");
cp.add(jpE,"East");
//------------------------------------------------
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height; /*取得显示器窗口的高度*/
f.setSize(400,330);
int xcenter=(x-350)/2;
int ycenter=(y-330)/2;
f.setLocation(xcenter,ycenter);/*显示在窗口中央*/
f.setVisible(true);
//-------------------------------------------------
jbt1.addActionListener(this);//注册监听器
jbt2.addActionListener(this);
jbt3.addActionListener(this);
}
//------------------------------------------------
int i=0;
public void showRecord(String ql)
{
while(i>=0)
{
ar[i][0]="";
ar[i][1]="";
ar[i][2]="";
ar[i][3]="";
ar[i][4]="";
ar[i][5]="";
i--;
}
i=0;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
Statement sql;
String s="select * from book where 图书名 ='"+ql +"'";
sql=con.createStatement();
ResultSet rs=sql.executeQuery(s);
while(rs.next())
{
String bname=rs.getString(1);
String bno=rs.getString(2);
String price=rs.getString(3);
String writer=rs.getString(4);
String publish=rs.getString(5);
String indate=rs.getString(6);
ar[i][0]=bname;
ar[i][1]=bno;
ar[i][2]=price;
ar[i][3]=writer;
ar[i][4]=publish;
ar[i][5]=indate;
i++;
}
count=""+i+"";
L.setText("该种图书共有"+count+"本");
f.repaint();
con.close();System.out.println(ar[0][1]);
}catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
}
public void deleteRecord(int index)
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
Statement sql;
String ql=(String)(ar[index][1]);
String s="delete * from book where 图书号 ='"+ql +"'";
sql=con.createStatement();
int del=sql.executeUpdate(s);
if(del==1)
{JOptionPane.showMessageDialog(null,"删除成功!",
"信息", JOptionPane.YES_NO_OPTION);
}
con.close();
f.repaint();
}catch(SQLException g) {
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
}
public void actionPerformed(ActionEvent e)
{
String remember="";
String ql="";
String cmd=e.getActionCommand();
if(cmd.equals("查询"))
{
ql=tf.getText().trim();
remember=ql;
showRecord(ql);
}
if(cmd.equals("删除"))
{
int index=table.getSelectedRow();
if( index==-1)
JOptionPane.showMessageDialog(null,"请选定要删除的表格行",
"输入错误", JOptionPane.YES_NO_OPTION); else{
deleteRecord(index);
//showRecord(remember);
}
}
if(cmd.equals("取消"))
f.setVisible(false);
}
public static void main(String []arg){
RemoveBook a=new RemoveBook();
}
}
8、图书概览
package org
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
class BookBrower implements ActionListener
{
Container cp;
JPanel jpS,jpanelWest;
JButton jbt1,jbt2;//按钮,查询、取消、修改
JLabel label,L; //标签
//定义文本框
JTable table;//用来接收数据库中返回的信息
Object columnName[]={"图书名","图书号","单价","作者","出版社","入库时间"};
Object ar[][] =new Object[80][6];
String sno;
String count="xx";
BookBrower()
{
f=new JFrame();
cp=f.getContentPane(); // 初始化面板、按钮、标签、文本框
jpS=new JPanel();
jpanelWest=new JPanel();
jbt1=new JButton("确定");
jbt2=new JButton("返回");
//------------------------------------------------
label=new JLabel("图书概览",SwingConstants.CENTER);
label.setForeground(Color.blue);
L=new JLabel("书库现在共有图书"+count+"本");
//------------------------------------------------
table=new JTable(ar,columnName);//ar存放表中的数据,columnname表示列名
JScrollPane scrollpane = new JScrollPane(table);
//------------------------------------------------
//布局,添加控件
jpS.add(jbt1);
jpS.add(jbt2);
JPanel jpanel=new JPanel();
jpanel.add(label);
JPanel pp4=new JPanel();
JPanel jpE=new JPanel();
cp.add(jpanel,"North");
JPanel jp=new JPanel();
//jp.add(scrollpane);
JPanel p=new JPanel();//用来放两个表
p.setLayout(new BorderLayout());
p.add(L,"North");
p.add(scrollpane);
cp.add(pp4,"West");
cp.add(p,"Center");
cp.add(jpS,"South");
cp.add(jpE,"East");
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height; /*取得显示器窗口的高度*/
f.setSize(400,330);
int xcenter=(x-350)/2;
int ycenter=(y-330)/2;
f.setLocation(xcenter,ycenter);/*显示在窗口中央*/
f.setVisible(true);
jbt1.addActionListener(this);//注册监听器
jbt2.addActionListener(this);
}
int i=0;
public void showRecord()
{
while(i>=0)
{
ar[i][0]="";
ar[i][1]="";
ar[i][2]="";
ar[i][3]="";
ar[i][4]="";
ar[i][5]="";
i--;
}
i=0;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
String s="select * from book ";
Statement sql=con.createStatement();
ResultSet rs=sql.executeQuery(s);
while(rs.next())
{
String bname=rs.getString(1);
String bno=rs.getString(2);
String price=rs.getString(3);
String writer=rs.getString(4);
String publish=rs.getString(5);
String indate=rs.getString(6);
ar[i][0]=bname;
ar[i][1]=bno;
ar[i][2]=price;
ar[i][3]=writer;
ar[i][4]=publish;
ar[i][5]=indate;
i++;
}
count=""+i+"";
L.setText("书库现在共有图书"+count+"本");
f.repaint();
con.close();
}catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
}
}
public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();
if(cmd.equals("确定"))
f.setVisible(false);
if(cmd.equals("返回"))
f.setVisible(false);
}
public static void main(String []arg){
BookBrower a=new BookBrower();
a.showRecord();
}
}
9、修改密码
package org;
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.applet.Applet;
class UpdateMima extends JFrame implements ActionListener
{
JFrame f;
Container cp;
JPanel jp1,jp2,jp3,jp4,jp,jpanelWest;
JButton jbt1,jbt2;//按钮,确定、取消
JLabel label; //标签:修改密码
JTextField name;
//JPasswordField/////////////
JTextField tf1,tf2,tf3; //定义文本框
JLabel label1,label2,label3,label4;
String sno;
UpdateMima(){}
UpdateMima(String username)
{
sno=username;
f=new JFrame();
cp=f.getContentPane(); // 初始化
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();
jpanelWest=new JPanel();
jp=new JPanel();
//------------------------------------------------
jbt1=new JButton("确定");
jbt2=new JButton("取消");
//------------------------------------------------
label=new JLabel("<html><font color=#CC00FF size='4'>修改密码</font>",SwingConstants.CENTER);
label.setForeground(Color.blue);
label.setFont(new Font("BOLD",Font.BOLD,15));
name=new JTextField(20);
//name.setEditable(false);
//------------------------------------------------
tf1=new JPasswordField(20);
tf2=new JPasswordField(20);
tf3=new JPasswordField(20);
//------------------------------------------------
//布局,添加控件
jp1.add(jbt1);
jp1.add(jbt2);
jp1.add(new JLabel("您好"+"xx"+"欢迎登陆学生信息系统"));
JPanel jpanel=new JPanel();
jpanel.add(label);
JPanel pp4=new JPanel();
JPanel jpane4=new JPanel();
cp.add(jpanel,"North");
JPanel pp2=new JPanel(new GridLayout(6,1));
JPanel pp3=new JPanel();
pp4.setLayout(new GridLayout(6,1));
pp4.add(new JLabel("用户名: ",SwingConstants.RIGHT));
pp2.add(name);
pp2.add(tf1);
pp4.add(new JLabel(" 新密码: ",SwingConstants.RIGHT));
pp2.add(tf2);
pp4.add(new JLabel("确认密码: ",SwingConstants.RIGHT));
pp2.add(tf3);
pp2.add(new JLabel());
JPanel jpbutton=new JPanel();
jpbutton.add(jbt1);
jpbutton.add(jbt2);
pp2.add(jpbutton);
//pp3.add(jbt1);
//pp3.add(jbt2);
cp.add(pp4,"West");
cp.add(pp2,"Center");
//cp.add(pp3,"South");
cp.add(jpane4,"East");
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();
int x=screen.width; /*取得显示器窗口的宽度*/
int y=screen.height;
f.setSize(350,330); /*取得显示器窗口的高度*/
int xcenter=(x-350)/2;
int ycenter=(y-330)/2;
f.setLocation(xcenter,ycenter); /*显示在窗口中央*/
//f.setTitle("修改密码");
f.setVisible(true); //-------------------------------------------------
jbt1.addActionListener(this);//注册监听器
jbt2.addActionListener(this);
}
public void updateM()
{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){System.out.println("加载驱动程序失败!");}
try{
String url = "jdbc:sqlserver://localhost:1433;databasename=BookSystem";//直接使用当前类目录下的数据库文件
Connection con=DriverManager.getConnection(url,"sa","");
Statement sql=con.createStatement();
String uname=name.getText().trim();
String queryMima="select * from users where 用户名='"+uname+"'";
ResultSet rs=sql.executeQuery(queryMima);
if(rs.next())
{
String newMima=tf2.getText().trim();
String s="update users set 密码='"+newMima+"' where 用户名 ='"+uname +"'";
sql=con.createStatement();
int updateMima=sql.executeUpdate(s);
if(updateMima==1)
{
JOptionPane.showMessageDialog(f,"密码修改成功!");
}
con.close();
f.repaint();
}else
{
JOptionPane.showMessageDialog(null,"该用户不存在","警告!",
JOptionPane.YES_NO_OPTION);
}
name.setText("");
tf1.setText("");
tf2.setText("");
tf3.setText("");
} catch(SQLException g)
{
System.out.println("E Code"+g.getErrorCode());
System.out.println("E M"+g.getMessage());
} }
public void actionPerformed(ActionEvent e)
{
String cmd=e.getActionCommand();
if(cmd.equals("确定")) {
if(name.getText().equals("")||tf1.getText().equals("")||tf2.getText().equals("")||tf3.getText().equals("")) {
JOptionPane.showMessageDialog(null,"请填写用户的所有信息","提示",
JOptionPane.YES_NO_OPTION);
Return;}
if(tf2.getText().trim().equals(tf3.getText().trim()))
updateM();
else {
JOptionPane.showMessageDialog(null,"密码不相同,请重新确认密码!");
tf2.setText("");
tf3.setText(""); } }
else if(cmd.equals("取消")) //单击取消
f.setVisible(false);
}
public static void main(String[]args)
{
new UpdateMima("");
}
}