时间:2021-07-01 10:21:17 帮助过:2人阅读
1.3 安装好SQL Server 2008后,运行开始→所有程序→Microsoft SQL Server 2008→配置工具→SQL Server配置管理器,在打开的窗口的左边找到MSSQLSERVER的协议,在右边右单击TCP/IP,选择已启用。如果Named Pipes 未启用也设为启用。右边的 TCP/IP,在弹出的窗口中选择IP地址标签,把IPAll中的 TCP端口 设成 1433,并将上方所有的已启用选项设置成是。
1.4 然后重启数据库,重启完毕后,接下来使用命令测试1433端口是否打开。
开始菜单→运行cmd→在命令提示符下输入:telnet 127.0.0.1 1433(注意telnet与127之间有空格,1与1433之间有空格)若提示“不能打开到主机的连接,在端口1433: 连接失败”,则说明1433端口没有打开,需要重新进行以上配置。
如何实现eclipse与数据库SQLserver2008 的连接
2.1 为使各个小程序都能连接在一起,需使用JDBC连接数据库,包括安装ODBC驱动,连接数据源。所以,需要下载驱动程序工具。
Microsoft JDBC Driver for SQL Server
http://www.microsoft.com/zh-cn/download/details.aspx?id=11774
上面为下载地址。
2.2 在环境变量中配置JDBC Driver,方法与配置jdk类似,这里不再重述。
2.3 检测是否可以通过eclipse加载驱动数据库
2.3.1打开SQL Server 2008,在其中新建数据库 Test
2.3.2运行Eclipse,新建一个Java Project 名为 Test
2.3.3 右击工程名
Build Path→Configure Build Path,在打开的窗口的右边选Libraries标签,然后单击 Add External JARs,找到sqljdbc4jar文件并打开,然后单击
2
OK完成构建路径的配置
最后,进行程序设计,使eclipse成功加载驱动数据库
在test中建立一个名为package的包,源代码如下:
package pkg;
import java.sql.*;
public class
Main {
public static
void main(String
[] args)
{
String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=创建的数据库名";
String userName="数据库登录名";
String userPwd="登录密码";
try
{ Class.forName(driverName);
System.out.println("加载驱动成功!");
}catch(Exception e){
e.printStackTrace();
System.out.println("加载驱动失败!");
}
try
{
Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);
System.out.println("连接数据库成功!");
}catch(Exception e)
{e.printStackTrace();
System.out.print("SQL Server连接失败!");} }
}
直到出现 加载驱动成功! 连接数据库成功!
第二章
系统分析
针对现有的图书馆管理系统,我们设计简单的图书系统,以用来满足我们基本的需求。 业务流程:
3
|
No
|
|
|
|
|
|
|
|
Yes
针对业务流程,现在描述其功能如下:
1.用户登录 系统对其用户的合法性进行检查。
2.扩充书库 对新购进的书进行编号,并且把基本信息录入计算机,存储于数据库,易于形成表,并对表进行处理。
3.系统管理 更改界面,退出系统。
4.用户管理 更改用户密码,查询用户。
5.图书预览 查询图书管理系统的库存,及其图书信息
4
6.图书查询 查询图书管理系统是否存在该图书
7.帮助 使用指南,关于系统介绍,作者信息 版权所有
8.图书管理 删除用户等等操作
数据分析
根据系统的基本原理,详细设计分析所需功能,对目标进行精确的概述,从而把实现目标进行转换java语言,进行系统思想转换。详细的源代码见第六章系统源代码。
第三章
数据库分析
E-R关系图
|
|
1 n
|
设计表
实体型--->
|
|
属性----->
|
实体型--->
dbo.Table_book表
5
SELECT TOP (200) 图书名, 图书号, 单价, 作者, 出版社, 入库时间
FROM Table_book
ORDER BY 作者
dbo.Table_user表
SELECT TOP (200) 用户名, 密码
FROM Table_user
表的相关信息
6
数据表dbo.Table_book
数据表dbo.Table_user
7
第四章
系统详细设计与具体实现
系统的功能分析与详细设计
本系统的具体实现目标
·界面简单 友好 美观 画面感强
·操作简单 快捷方便 信息分类清晰准确 数据灵活查询
·数据存储安全 可靠
·对于用户输入的数据 进行严格检查 排除人为因素
操作说明:
系统用户名 sa 密码 123
8
操作流程:
1 选择系统管理/更改主题按钮,在弹出的窗体中进行对界面更换
2 选择系统管理/退出系统按钮,将要退出图书管理系统
3 选择图书预览/预览图书按钮,在弹出的窗体中进行查看库存
4 选择图书管理/删除操作按钮,在弹出窗体中进行操作
5 选择扩充图书/新书登记按钮,在窗口中添加新书信息
6 选择查询/查询图书操作按钮,在窗口中进行操作
7 选择用户管理/更改密码按钮,在窗体中进行更改密码操作
8 选择帮助/关于作者按钮,显示作者信息;帮助/关于系统按钮,显示系统相关信息;帮助/使用指南按钮,显示操作指南。
系统的具体实现
登录界面
主界面
9
系统管理系统/更改主题/睿智深灰
图书预览
10
图书删除
11
扩充图书
图书查询
用户管理/更改密码
12
关于作者
关于系统
使用指南
13
第五章
收获与体会
收获与体会
本人自从开始接触java,对其兴趣浓厚,然而其学习路途并不是很顺利,尤其是到用数据库安装和用java连接数据库时,其中遇到的困难很多,当时觉得太难了,现在回过头来看,其实还好。一切都是值得的,因为在用java做这个图书管理系统过程中收获挺多,自己进一步了解与入门java。
通过对java的学习,以及应用eclipse开发工具,我们初步了解通过编程实现企业图书管理的主要核心,实现一个简单图书管理系统。
系统在调试过程中基本调试了当初的设计要求,设计合理,功能较为完善,目前可以做到查询,改密码,添加,删除,修改等等基本操作。其中程序源代码我将会在在附录中给出,相信大家通过源代码会进一步对编程思想有更深的了解。在这个页面设计中,也有许多的不足,页面设计较为简单,不够精致,美观。
由于学习java的时间较短和使用java编程的能力有限,我们设计的图书管理系统只能完成几个简单的基本功能,还存在很多问题需要我们亟待解决,系统设计的不精致同时存在着许多不足与缺陷,还需要我们进一步完善。
根据目前大二的我以及对IT的了解,可以使用jsp进行网页界面的设计,使用MVC设计模式,采用开源框架Struts,使之具有开发效率高、设计灵活、生成的软件界面友好美观等特点。
在弄图书管理系统之前,我参阅了大量的图书设计文献,对所开发系统的现状,发展情况以及未来发展趋势有了深入的了解;在整个系统的需求分析过程中对开发前期工作的流程步骤有了深入的掌握;在开发过程我进一步学习了Java的基础语法和一些HTML网页设计方面的知识,以便使系统有更好的美观性,在编写过程中也规范了许多编码习惯。
在整个系统开发的过程中,我学到了很多新的知识,以前学过的许多知识点在运用过程中也有了更为深入的分析,这是我大一到大二期间做过的规模最大的系统,在这个过程中也体会到了如何将书本知识转化到实际的应用中。
14
第六章
系统源代码
登录源代码Login类
package pk;//login类所在的包
import java.sql.*;//包含实现java程序与操作系统以及其他java程序之间进行数据交换的类
import java.awt.*;//包含创建用户界面与绘制图形的类
import java.awt.event.*;//事件处理所在的类
import javax.swing.*;//包含轻量级组件
@SuppressWarnings("deprecation")
public class Login extends JFrame implementsActionListener//登录界面login类继承JFrame类实现ActionListener接口
{
privatestatic final long serialVersionUID = 1L;//序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
Containercp=null;//定义空集合
JFramef=null;//定义容器
JButtonj1,j2;//定义按钮
JTextFieldname;//文本框 用于存储用户名
JPasswordFieldpwd;//密码框 用于存储密码
JLabeljlabel1,jlabel2;//用于短文本字符串或图像或二者的显示区 标签
Color c;//定义颜色
JPaneljp1,jp2;//JPanel 是一般轻量级容器中间容器
Login()//实现登入界面
{
f=newJFrame("小型图书馆管理系统");//显示"小型图书管理系统"的标题
j1=newJButton("登录");//显示按钮登录
j2=newJButton("取消");//显示按钮取消
cp=f.getContentPane();//返回窗体的 contentPane对象
jlabel1=newJLabel(" 用户 ");//显示用户
jlabel2=newJLabel(" 密码 ");//显示密码
jp1=newJPanel();//面板1
jp2=newJPanel();//面板2
name=newJTextField(19);//设置用户名长度大小
pwd=newJPasswordField(19);//设置密码长度大小
jp1.add(jlabel1);
jp1.add(name);
jp1.add(jlabel2);
jp1.add(pwd);//以上分别把标签1 用户名 标签2 密码添加到面板1
JLabel JL=new JLabel("<html><fontcolor=red size=‘6‘><i>欢迎登陆图书馆
15
</i></font>",SwingConstants.CENTER);
//定义标签JL 将JL中的内容添加到某区域的中心位置。用于罗盘方向常量
(NORTH 等)和框方向常量(TOP 等)。
//"<html><font color=red size=‘6‘><i>欢迎登陆图书馆</i></font>"
//规定文本的字体、字体尺寸、字体颜色 color->颜色 size->字体 <i>标签显示斜体文本效果
cp.add(JL,"North");//将JL添加到NORTH
jp2.add(j1);//将按钮登录添加到面板2
jp2.add(j2);//将按钮取消添加到面板2
cp.add(jp1,"Center");//将面板1添加到Center
cp.add(jp2,"South");//将面板2添加到South
jp1.setBackground(new Color(245,211,155));//label颜色 面板1设置背景 三色板调制颜色
Toolkit kit=Toolkit.getDefaultToolkit();//
Dimension screen=kit.getScreenSize();//
int x=screen.width;//设置窗口的宽度
int y=screen.height;//设置窗口的高度
f.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);//注册事件监听器
f.addWindowListener(new WindowAdapter ()//事件适配器
{//设置窗口的关闭方式
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
public void confirm()//验证用户名与密码是否匹配
{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//连接数据库
}
catch(ClassNotFoundExceptione)
{
System.out.println("加载驱动程序出错");//加载异常}
16
try
{
Stringdbuser = "sa";//数据库登录名
Stringdbpwd = "123";//数据库登录密码
Stringurl="jdbc:sqlserver://localhost:1433;DatabaseName=student";
//直接使用当前类目录所在的数据库文件
Connectioncon=DriverManager.getConnection(url,dbuser,dbpwd);
//连接数据库
Statementsql=con.createStatement();
Stringuname=name.getText().trim();
StringMima=pwd.getText().trim();
StringqueryMima="select * from dbo.Table_user where 用户名=‘"+uname+"‘ and 密码=‘"+Mima+"‘";
//操作数据库的语句从dbo.Table_user表中获取用户名和密码
ResultSetrs=sql.executeQuery(queryMima);
if(rs.next())
{
newBook(uname);//登录密码正确 则进入主框架 主登录界面
f.hide();
con.close();
}
else
{
JOptionPane.showMessageDialog(null,"该用户不存在","提示!",JOptionPane.YES_NO_OPTION);
}
//如果不存在该用户则抛出用户不存在
name.setText("");
pwd.setText("");//重置用户名 密码框
}
catch(SQLExceptiong)
{
System.out.println(g.getErrorCode());
System.out.println(g.getMessage());//异常问题的处理
}
}
publicvoid actionPerformed(ActionEvent e)
{
Stringcmd=e.getActionCommand();
if(cmd.equals("登录"))
{
confirm();//匹配登录按钮
}
17
else if(cmd.equals("取消"))
{
f.dispose();//匹配取消按钮
}
}
publicstatic void main(String [] args)
{
newLogin();//程序入口处
}
}
图书登记BookIn类
package pk;
import java.sql.*;//包含实现java程序与操作系统以及其他java程序之间进行数据交换的类
import java.awt.*;//包含创建用户界面与绘制图形的类
import java.awt.event.*;//事件处理所在的类
import java.awt.Container;//包含容器类
import javax.swing.*;//包含轻量级组件
public class BookIn implements ActionListener{
//BookIn类实现接口ActionListener
JFrame f3;//设置顶级窗口对象
Container cp;//容器对象
JPanel jp1,jp2,jp3,jp4,jp,jpanelWest;//创建面板
JButton jbt1,jbt2;//设置按钮
JLabel label1,label2,label3,label4,label;//创建标签
String sno;//创建字符串对象
JTextField tf1,tf2,tf3,tf4,tf5,tf6;//创建文本框
BookIn()//BookIn类
{
f3=newJFrame("图书信息添加");//设置标题
cp=f3.getContentPane();//返回ContentPane内容
jp1=newJPanel();//面板jp1
jp2=newJPanel();//面板jp2
jp3=newJPanel();//面板jp3
jp4=newJPanel();//面板jp4
jpanelWest=newJPanel();//创建面板jpanelWest
jp=newJPanel();
jbt1=newJButton("确定");
jbt2=newJButton("取消");//创建按钮 内容分别为确定 取消
label=newJLabel("<html><font color=blue size=‘6‘>新书登记</font>",SwingConstants.CENTER);
//创建标签 放到中间
18
label.setForeground(Color.black);//标签设置前景色
tf1=newJTextField(20);//设置文本框tf1的大小
tf2=new JTextField(20);//设置文本框tf2的大小
tf3=newJTextField(20);//设置文本框tf3的大小
tf4=newJTextField(20);//设置文本框tf4的大小
tf5=newJTextField(20);//设置文本框tf5的大小
tf6=newJTextField(20);//设置文本框tf6的大小
jp1.add(jbt1);
jp1.add(jbt2);
JPaneljpanel=new JPanel();
jpanel.add(label);//面板添加标签 label
JPanelpp4=new JPanel();
JPaneljpane4=new JPanel();
cp.add(jpanel,"North");//面板放置North
JPanelpp2=new JPanel(new GridLayout(6,1,20,10));//设置为网格布局 容器的水平间距为20 垂直布局间距为10
JPanelpp3=new JPanel();
pp4.setLayout(newGridLayout(6,1));//设置容器6行1列
pp4.add(newJLabel("图书名",SwingConstants.CENTER));
pp2.add(tf1);
pp4.add(newJLabel("图书号",SwingConstants.CENTER));
pp2.add(tf2);
pp4.add(newJLabel("单 价",SwingConstants.CENTER));
pp2.add(tf3);
pp4.add(newJLabel("作 者",SwingConstants.CENTER));
pp2.add(tf4);
pp4.add(newJLabel("出版社",SwingConstants.CENTER));
pp2.add(tf5);
pp4.add(newJLabel("入库时间",SwingConstants.CENTER));
pp2.add(tf6);
//以上分别为将图书名 图书号 单价 作者 出版社 入库时间添加到pp4面板中
//以上分别为将文本框添加到pp2面板中
pp3.add(jbt1);
pp3.add(jbt2);// 分别将按钮添加到面板pp3中
cp.add(pp4,"West");
cp.add(pp2,"East");
cp.add(pp3,"South");
cp.add(jpane4,"Center");
//容器中West->pp4 East->pp2 South->pp3Center->jpane4 North->jpanel
f3.setSize(320,300);//设置顶级窗口大小
f3.setVisible(true);//设置顶级窗口可视化
jbt1.addActionListener(this);
19
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("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}//连接数据库
catch(ClassNotFoundExceptione)
{
System.out.println("加载驱动程序出错");
}
try
{
Stringdbuser = "sa";
String dbpwd= "123";
Stringurl="jdbc:sqlserver://localhost:1433;DatabaseName=student";
Connectioncon=DriverManager.getConnection(url,dbuser,dbpwd);
Statementsql;
Strings="insert into dbo.Table_bookvalues(‘"+tf1.getText()+"‘,‘"+tf2.getText()+"‘,‘"+tf3.getText()+"‘,‘"
+tf4.getText()+"‘,‘"+tf5.getText()+"‘,‘"+tf6.getText()+"‘);";
String query="select* from Table_book where 图书号=‘"+tf2.getText()+"‘";
//查询功能
sql=con.createStatement();
ResultSetrs=sql.executeQuery(query);
booleanmoreRecords=rs.next();//以上数据库操作基本上一样
if(moreRecords)
{
JOptionPane.showMessageDialog(f3,"图书号已经被使用,请重新输入");
con.close();//判断图书号是否已经被用
tf2.setText("");//重置图书号
return;
}
intinsert=sql.executeUpdate(s);
if(insert==1)
{
20
JOptionPane.showMessageDialog(null,"图书信息录入成功!!!");
con.close();
tf1.setText("");
tf2.setText("");
tf3.setText("");
tf4.setText("");
tf5.setText("");
tf6.setText("");//更新数据库,并且重置六个文本框
}
}
catch(SQLException g)
{
System.out.println(g.getErrorCode());
System.out.println(g.getMessage());
}
}
@SuppressWarnings("deprecation")@Override
public void actionPerformed(ActionEvent e) {
Stringcmd=e.getActionCommand();
if(cmd.equals("确定"))
{
insertRecord();//匹配按钮事件,调用插入方法
}
elseif(cmd.equals("取消"))
{
f3.hide();//退出窗口
}
}
public static void main(String [] args)
{
newBookIn();
}
}
更改密码UpdateMima类
package pk;//代码注释与上面几个类的代码近似一样
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class UpdateMima extends JFrame implementsActionListener{
privatestatic final long serialVersionUID = 1L;
21
JFrame f;
Container cp;
JPanel jp1,jp2,jp3,jp4,jp,jpanelWest;
JButton jbt1,jbt2;
JLabel label;
JTextField name;
JPasswordField tf1,tf2,tf3;
JLabel label1,label2,label3,label4;
String sno;
UpdateMima(){}
UpdateMima(String username)
{
sno=username;
f=newJFrame("修改密码");
cp=f.getContentPane();
jp1=newJPanel();
jp2=newJPanel();
jp3=newJPanel();
jp4=newJPanel();
jpanelWest=newJPanel();
jp=newJPanel();
jbt1=newJButton("确定");
jbt2=newJButton("取消");
label=newJLabel("<html><font color=red size=‘4‘>"
+"修改密码<br><hr>请记住你的密码</font>",SwingConstants.CENTER);
label.setForeground(Color.gray);
name=newJTextField(10);
tf1=newJPasswordField(10);
tf2=newJPasswordField(10);
tf3=newJPasswordField(10);
jp1.add(jbt1);
jp1.add(jbt2);
JPaneljpanel=new JPanel();
jpanel.add(label);
JPanelpp4=new JPanel();
JPaneljpane4=new JPanel();
JPanelpp3=new JPanel();
cp.add(jpanel,"North");
JPanelpp2=new JPanel(new GridLayout(6,1,20,10));
pp4.setLayout(newGridLayout(6,1,20,10));
pp4.add(newJLabel("用户名: ",SwingConstants.RIGHT));
pp4.add(name);
22
pp4.add(new JLabel("原密码: ",SwingConstants.RIGHT));
pp4.add(tf1);
pp4.add(newJLabel("新密码: ",SwingConstants.RIGHT));
pp4.add(tf2);
pp4.add(newJLabel("确认密码: ",SwingConstants.RIGHT));
pp4.add(tf3);
pp4.add(newJLabel());
JPaneljpbutton=new JPanel();
jpbutton.add(jbt1);
jpbutton.add(jbt2);
pp3.add(jbt1);
pp3.add(jbt2);
pp2.add(jpbutton);
cp.add(pp4,"West");
cp.add(pp2,"Center");
cp.add(pp3,"South");
cp.add(jpane4,"East");
f.setSize(400,300);
f.setVisible(true);
jbt1.addActionListener(this);
jbt2.addActionListener(this);
}
@SuppressWarnings("deprecation")
public void upDateM()
{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(ClassNotFoundExceptione)
{
System.out.println("加载驱动程序出错");
}
try
{
Stringdbuser = "sa";
String dbpwd = "123";
Stringurl="jdbc:sqlserver://localhost:1433;DatabaseName=student";
Connectioncon=DriverManager.getConnection(url,dbuser,dbpwd);
Statementsql=con.createStatement();
Stringuname=name.getText().trim();
StringqueryMima="select * from Table_userwhere 用户名=‘"+uname+"‘";
ResultSetrs=sql.executeQuery(queryMima);
23
if(rs.next())
{
StringnewMima=tf2.getText().trim();
Strings="update dbo.Table_user set 密码=‘"+newMima+"‘where用户名 =‘"+uname+"‘";
sql=con.createStatement();
intupdateMima=sql.executeUpdate(s);
if(updateMima==1)
{
JOptionPane.showMessageDialog(f,"密码修改成功!");
}
f.hide();
con.close();
}
else
{
JOptionPane.showMessageDialog(null,"该用户不存在","提示!",JOptionPane.YES_NO_CANCEL_OPTION);
}
name.setText("");
tf1.setText("");
tf2.setText("");
tf3.setText("");
}
catch(SQLExceptiong)
{
System.out.println(g.getErrorCode());
System.out.println