图书管理系统课程设计报告.docx
《图书管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《图书管理系统课程设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
图书管理系统课程设计报告
图书管理管理系统
课程设计
设计内容:
图书管理系统
学生班级:
XXXXX
学生姓名:
XXXXXX
一、课设目的
通过对图书管理信息系统的系统分析、系统设计、编码和调试等工作的实践,了解管理信息系统的一般设计方法和实现思路,深入了解数据库设计的基本理论及方法。
二、系统功能框图
该系统主要由四大功能模块组成:
用户登录、图书管理、用户管理和借阅查询。
各大功能模块又由一些子功能模块构成,其功能框图如下。
三、数据库结构
●需求分析:
依照项目功能,需要建立的表有图书信息,类别,出版社信息,用户信息四大类。
1、系统功能的基本要求:
(1)图书信息的输入,包括图书的书名、出版号、价格、分类、作者、简介、出版社、出版日期、编号、数量等。
(2)图书各种信息的修改与更新;
(3)对于入库、借出、归还、报废、丢失等信息的记录、;
(4)按照一定的条件,查询、统计符合条件的图书信息;至少应该包括每本图书按书名详细信息的查询、按借出归还状态查询、按作者查询、按出版社查询等,至少应该包括按分类、数量、价格等统计图书信息;
(5)对查询、统计的结果打印输出。
2、数据库要求:
在数据库中至少应该包含下列数据表:
(1)图书基本信息表;
(2)图书分类表、出版社分类表等
(3)图书状态表、图书运行记录表
(4)工作人员表
●数据库的E-R模型图:
●E-R图转换成逻辑模型
bookInformation(编号,书名,出版号,价格,出版日期,数量,作者,类别编号,简介)
bookType(图书类别,类别编号)
publishCompany(出版号,出版社)
user(用户名,密码,权限)
●逻辑模型转换成物理模型
选用SQLServer2000,建立用户表:
1、图书信息表
2、图书类型表(Type)
3、出版社信息表(PublishCompany)
4、用户信息表(User)
四、功能模块
图书管理
用户管理:
●具体设计实现
五、界面设计(Java编写)
1、登入窗口
逻辑功能实现代码:
//登录
privatevoidlogin(){
ResultSetrs=null;
try{
Stringsql="Select用户名,密码,权限fromUserTable";
conn=DataBaseConnection.getConnection();
messageGet=conn.prepareStatement(sql);
//messageGet.setString(1,"administor");
rs=messageGet.executeQuery();
Strings=String.valueOf(PasswordTextField.getPassword());//匹配String字符串,getPassword()是字符数组类型的,需要转换成字符串类型。
password=s;
while(rs.next()){
System.out.println(rs.getString("用户名")+"\n"+rs.getString("密码"));//测试用,可以看出有哪些用户进行了查找。
if(UserTextField.getText().equals("")){JOptionPane.showMessageDialog(null,"请输入用户名!
!
!
");}
elseif((UserTextField.getText().equals(rs.getString
(1).trim()))){
if(s.equals(rs.getString
(2).trim())){
if(rs.getString(3).trim().equals("管理员")){
operator=rs.getString
(1).trim();
setVisible(false);
newLibrary_Display_Main(conn);
dispose();
return;
}
else
{
JOptionPane.showMessageDialog(null,"Sorry,只有管理员能登陆!
");
return;
}
}
}
}
JOptionPane.showMessageDialog(null,"密码错误!
!
!
");//循环完成后还未搞定就密码错误。
}catch(SQLExceptionex){
JOptionPane.showMessageDialog(null,"服务端未响应,请查看服务端是否启动");
ex.printStackTrace();
}
}
2、主界面(下面的图标以此是:
图书入库,图书信息修改,图书类别添加及修改,图书信息查找,系统退出)
主要逻辑实现代码:
点击按钮的时候新开辟一个已经做好的类即可。
3、用户管理窗口
口令更改
逻辑功能实现代码:
//修改密码(点击“确定”键)
privatevoidAlterUserPassword(StringnewPassword){//修改密码
conn=DataBaseConnection.getConnection();
Stringsql="UpdateUserTableset密码=?
where用户名=?
";
try{
ps=conn.prepareStatement(sql);
ps.setString(1,newPassword);
ps.setString(2,Operator.getText());
ps.executeUpdate();
setVisible(false);
JOptionPane.showConfirmDialog(null,"修改成功","提示",JOptionPane.OK_CANCEL_OPTION);
dispose();
}catch(SQLExceptionex){
ex.printStackTrace();
}
}
privatevoidConfirmActionPerformed(java.awt.event.ActionEventevt){
//确认用户输入的密码
//TODOaddyourhandlingcodehere:
if(!
OldPasswordConfirm.getText().equals(Login.getPassword()))JOptionPane.showMessageDialog(null,"原密码错误,请输入正确密码!
");
elseif(NewPasswordConfirm.getText().equals("")||NewPasswordInput.getText().equals(""))JOptionPane.showMessageDialog(null,"新密码不能为空,请输入你的新密码!
");
elseif(!
NewPasswordConfirm.getText().equals(NewPasswordInput.getText()))
JOptionPane.showMessageDialog(null,"新密码确认不一致,请重新输入正确的新密码!
");
elseif(NewPasswordConfirm.getText().equals(NewPasswordInput.getText())){
StringnewPassword=NewPasswordConfirm.getText();
AlterUserPassword(newPassword);
}
}
3、用户信息添加:
逻辑功能实现代码:
(点击“新增”键)
privatevoidaddUserActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
Stringgrant=null;
if(user.getText().equals("")){
JOptionPane.showMessageDialog(null,"用户名不能为空");
return;
}
if(YES.isSelected())grant="管理员";
elsegrant="普通用户";//选中或未选均为普通用户,默认
Stringsql="insertintoUserTable(用户名,密码,权限)values(?
?
?
)";
try{
ps=conn.prepareStatement(sql);
ps.setString(1,user.getText());
ps.setString(2,password.getText());
ps.setString(3,grant);
ps.executeUpdate();
dtm=userTableShow.tableShow(conn);
this.setVisible(false);//暂时还未想到如何直接在表格上更新。
JOptionPane.showConfirmDialog(null,"添加成功","提示",JOptionPane.OK_CANCEL_OPTION);
newuserModified().view(conn);//重新生成界面,将原来的界面去除。
this.dispose();
}catch(SQLExceptionex){
//Logger.getLogger(userModified.class.getName()).log(Level.SEVERE,null,ex);
ex.printStackTrace();
}
}
4、用户信息修改与删除
逻辑功能实现代码:
一:
privateStringgrantGet(){//获得输入的用户信息if(administrator.isSelected())newGrant="管理员";
elsenewGrant="普通用户";//选中或未选均为普通用户,默认
returnnewGrant;
}
二:
privatevoidupdateUser(){//修改用户
Stringsql="UpdateUserTableset用户名=?
密码=?
权限=?
where用户名=?
";//更改数据库用户的代码。
try{
ps=conn.prepareStatement(sql);
ps.setString(1,newUser.getText());
ps.setString(2,newPassword.getText());
ps.setString(3,newGrant);
ps.setString(4,tableMessage[0]);
ps.executeUpdate();
dtm=userTableShow.tableShow(conn);
this.setVisible(false);//暂时还未想到如何直接在表格上更新。
JOptionPane.showConfirmDialog(null,"修改成功","提示",JOptionPane.OK_CANCEL_OPTION);
newuserModified().view(conn);//重新生成界面,将原来的界面去除。
this.dispose();
}catch(SQLExceptionex){
//Logger.getLogger(userModified.class.getName()).log(Level.SEVERE,null,ex);
ex.printStackTrace();
}
}
三:
publicvoiddeleteUser(){//删除用户
Stringsql="deletefromUserTablewhere用户名=?
";
try{
ps=conn.prepareStatement(sql);
ps.setString(1,user.getText());
ps.executeUpdate();
this.setVisible(false);//暂时还未想到如何直接在表格上更新。
JOptionPane.showConfirmDialog(null,"删除成功","提示",JOptionPane.OK_CANCEL_OPTION);
newuserModified().view(conn);//重新生成界面,将原来的界面去除。
this.dispose();
}catch(SQLExceptionex){
Logger.getLogger(userModified.class.getName()).log(Level.SEVERE,null,ex);
}
}
4、图书管理
5、图书信息添加
逻辑功能实现代码:
privatevoidaddBookInformation(){//添加图书信息,不过之前先要检查。
if(judgeBookInformation()==false){
return;
}
publishNameConfirm();//确认出版社是否和表中一样。
StringaddBookInformation="InsertintobookInformation(书名,出版号,价格,出版日期,编号,数量,作者,图书类别,简介)values(?
?
?
?
?
?
?
?
?
)";
StringaddPublishInformation="InsertintopublishCompany(出版号,出版社)values(?
?
)";
StringconfirmPublishInformation="select出版号frompublishCompany";
try{
messageGet=conn.prepareStatement(addBookInformation);
messageGet.setString(1,bookName.getText());
messageGet.setInt(2,publishNum);
floatbookPrice=Float.parseFloat(Price.getText());
messageGet.setFloat(3,bookPrice);
messageGet.setDate(4,publishDate);
bookNumber=Integer.parseInt(this.bookNum.getText());//this.bookNum是文本框中的。
messageGet.setInt(5,bookNumber);
messageGet.setInt(6,Integer.parseInt(Num.getText()));
messageGet.setString(7,Author.getText());
messageGet.setString(8,(String)classify.getSelectedItem());
messageGet.setString(9,BookIntroduce.getText());
messageGet.executeUpdate();
//只有在出版号不相等的时候,才插入出版社,否则会出主键重复插入的错误。
messageGet=conn.prepareStatement(confirmPublishInformation,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//设置为可滚动
rs=messageGet.executeQuery();
inti=0;
while(rs.next()){
if(publishNum==rs.getInt("出版号"))break;
i++;
}
rs.last();
System.out.println(rs.getRow());
if(imessageGet=conn.prepareStatement(addPublishInformation);
messageGet.setInt(1,publishNum);
messageGet.setString(2,PublishName.getText());
messageGet.executeUpdate();
}catch(SQLExceptionex){
ex.printStackTrace();
}
}
6、图书信息修改
7、图书类别修改
逻辑功能实现代码:
一、(新增类别)
privatevoidaddTypeActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
sql="insertintobookType(图书类别,类别编号)values(?
?
)";
StringnewBookType=JOptionPane.showInputDialog("请输入新类别");
getClassifyNum();
messageGet=conn.prepareStatement(sql);
messageGet.setString(1,newBookType);//将新增类型数据写入数据库。
messageGet.setInt(2,classifyNum+1);
messageGet.executeUpdate();
reShowTable();
try{
}catch(SQLExceptionex){
Logger.getLogger(bookTypeAdd_Modify.class.getName()).log(Level.SEVERE,null,ex);
}
}
二:
(修改类别)
privatevoidmodifyTypeActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere//点确认修改后修改类型
sql="UpdatebookTypeset图书类别=?
where图书类别=?
";
if(newBookType.getText().equals("")){
JOptionPane.showMessageDialog(null,"输入类别不能为空!
请重新输入!
!
");
return;
}
try{
messageGet=conn.prepareStatement(sql);
messageGet.setString(1,newBookType.getText());
messageGet.setString(2,oldBookType.getText());
messageGet.executeUpdate();
reShowTable();
}catch(SQLExceptionex){
Logger.getLogger(bookTypeAdd_Modify.class.getName()).log(Level.SEVERE,null,ex);
}
}
三:
(删除类别)
privatevoidDeleteActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
Stringsql="deletefrombookTypewhere图书类别=?
";
try{
messageGet=conn.prepareStatement(sql);
messageGet.setString(1,oldBookType.getText());
messageGet.executeUpdate();
this.setVisible(false);//暂时还未想到如何直接在表格上更新。
JOptionPane.showConfirmDialog(null,"删除成功","提示",JOptionPane.OK_CANCEL_OPTION);
newbookTypeAdd_Modify().view(conn);//重新生成界面,将原来的界面去除。
this.dispose();
}catch(SQLExceptionex){
Logger.getLogger(bookTypeAdd_Modify.class.getName()).log(Level.SEVERE,null,ex);
}
}
8、图书信息查询
逻辑功能实现代码:
(查询按钮)
privatevoidselectedButton(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
StringselectContent=SelectInput.getText().trim();
if(((String)selectChoose.getSelectedItem()).equals("--请选择查询方式--")||((String)selectChoose.getSelectedItem()).equals("按书名查询"))
bookTableShow.tableShowForSelect(conn,"书名",selectContent);
if(((String)selectChoose.getSelectedItem()).equals("按作者查询"))
bookTableShow.tableShowForSelect(conn,"作者",selectContent);
if(((String)selectChoose.getSelectedItem()).equals("按图书类型查询"))
bookTableShow.tableShowF