资源描述
*******************
实践教学
*******************
软件学院
春季学期
软件技术综合训练说明书
题 目 图书信息管理系统
专业班级: 软件3班
姓 名: 王浩东
学 号:
指导老师: 高玮军
目录
目录 2
摘要 3
序言 4
一、系统需求分析 5
二、设计思绪 6
三、系统设计 7
3.1 系统总体设计 7
3.2 系统步骤图 8
3.3系统具体设计 8
四、数据结构基础算法实现 11
4.1数据结构需求分析 11
4.2数据结构概念结构设计 11
4.3数据结构逻辑结构实现 12
五、运行调试和分析讨论 13
5.1源代码及注释 13
5.2 运行调试 24
六、设计总结 32
七、参考文件 33
致谢 34
附录 35
摘要
伴随社会经济快速发展和科学技术全方面进步,技术安吉事业飞速发展,以计算机和通讯技术为基础信息系统正处于蓬勃发展时期。伴随经济文化水平显著提升,大家对生活质量及工作环境要求也越来越高。书籍作为人类精神粮食,在现代社会中越来越受到重视,大量书籍出现在市场上,大家有了多种多样不一样选择。和此同时,为了管理大量图书,图书馆也大量出现,图书馆管理问题也提上日程。伴随图书大量增加,其管理难度也越来越大怎样优化图书馆日常管理也就成为了一个大众化课题。
在计算机飞速发展进一案,将计算机这一信息处理利器应用于图书馆日常管理已是肯定,而且这也将为图书馆管理带来前所未有改变,它能够带来意想不到效率,同时也会为企业飞速发展提供无限潜力。采取计算机管理信息系统已成为仓库管理科学化和现代化关键标志,它给企业管理带来了显著经济效益和社会效益。
关键表现在:极大地提升了图书馆工作人员工作效率,大大降低了以往入出存步骤繁琐,杂乱,周期长弊端。
序言
伴随中国改革开放不停深入,经济飞速发展,企业要想生存、发展,要想在猛烈市场竞争中立于不败之地,没有现代化管理是万万不行,图书馆管理全方面自动化、信息化则是其中极其关键部分。为了加紧仓库管理自动化步伐,提升仓库管理也不处理效率,建立图书馆管理系统已变得十分关键。
入库新书、库存、出库还是现在企业图书馆管理常规基础模式,即使,最近又出现很多新管理模式。怎样设计好仓库管理系统,尽可能降低仓库管理反复性和低效性就成为目前最为关键问题。图书馆管理关键是入库、查询、和删除之间联络,怎样处理好三者之间关系是系统最为关键部分。另外,图书信息和新书入库信息管理是图书管理系统中必不可少部分,它提供着和还书和接书相关部分信息,使得整个系统愈加完整,愈加实用。
一、系统需求分析
为了广大学生学习,开阔学生视野,大部分学校全部设置了图书馆。学生能够依据自己爱好爱好,到图书馆借阅自己喜爱图书,因为图书馆图书数量众多,利用手工操作管理图书不仅仅会花费学生和工作人员大量时间和精力。效率和正确性也很低。怎样让图书管理更方便更高效,已成为一个关键问题。
用图书信息管理系统进行图书信息管理,不仅仅能够确保正确、无误、快速输出,而且还能够利用查询功效对相关信息进行查询,检索快速、查找方便、可靠性高、保密性好。要科学实现图书信息信息化管理,开发一个能够进行图书信息存放、查询、修改等功效图书信息管理系统是十分必需;
经过调查,要求图书信息管理系统需要有以下功效:
1图书信息包含图书编号、书名、作者、出版社、出版日期、图书介绍及图书类别等。
2 因为操作人员计算机知识普遍较差,要求有良好人机界面;
3 图书信息修改,支持一次修改多个属性
4 方便图书信息查询,支持多条件查询
5 图书信息删除
二、设计思绪
因为本系统管理对象单一,全部是图书生,且每个数据内容含有较强关联性,包含过程不是很复杂。所以,采取数据结构管理。在技术难度方面,因为有指导老师指导和相关参考文件,所以完全能够实现。
本系统设计是在Windows 7 操作系统环境下,使用Java、JDK1.7/1.8已及Eclipse集成开发环境。数据结构是图书信息管理系统中关键支持技术,在图书信息管理系统开发过程中,怎样选择数据结构是一个关键问题。
图书管理系统在系统中实现图书信息添加和查询、读者信息添加、查询、删除和修改。
图书信息包含书名、图书编号、作者、出版社、出版时间、图书类型、页数、价格等。
三、系统设计
3.1 系统总体设计
系统开发总体任务是实现图书信息管理系统化,规范化和自动化。
图书信息管理系统需要完成功效关键有:
图书信息添加,信息包含图书编号、书名、作者、出版社、出版日期、图书介绍及图书类别。
图书信息修改
图书信息删除
对上述各功效进行集中、分块、根据结构化程序设计要求。
图书信息管理系统
图书信息添加
图书信息修改
图书信息查询
图书信息删除
3.2 系统步骤图
选择操作
开始
退出系统
图书信息添加
图书信息修改
图书信息删除改
图书信息查询
结束
3.3系统具体设计
系统设计总体任务是实现图书信息管理系统化,规范化和自动化。要求实现功效有:
1:图书信息输入,包含图书编号、书名、作者、出版社、出版日期、图书介绍及图书类别等。
2: 图书信息查询,包含依据用户要求实现利用图书编号、书名、作者、出版社、出版日期、图书介绍及图书类别等信息查询。
3: 图书信息修改,要求能包含依据用户要求实现利用图书编号、书名、作者、出版社、出版日期、图书介绍及图书类别等信息修改等
首先,考虑到因为操作人员计算机知识可能较差,要求有良好人机界面,我决定使用图形界面方法,采取Java Swing来提供一个表格将图书信息全部显示出来,这么方便用户浏览,当用户对其中图书信息感爱好时,能够用鼠标点击表格中单元格,在表格下面我提供了一个文件面板,上面放置了很多文本区域,将用户选择信息全部显示在文本区域中,这么用户能够愈加方便对信息进行添加,修改,删除操作。利用图形界面,提供一个愈加友好方法。用户就不见面对黑乎乎命令行界面,能够利用鼠标来实现图书信息修改删除,这么系统就能够降低对用户要求,经过将系统多种功效封装,只是提供给用户一个简单按钮,用户经过简单利用鼠标点击按钮,就能够实现多种复杂操作,这么就能够,提升系统可用性。 当然 复杂实现过程对用户来说是不能够见。
第二,考虑到使用图形界面方法,当有很多数据时,就有必需使用数据结构来保留数据了,保留信息愈加方便。于本系统管理对象图书,全部是学生,且每个数据内容含有较强关联性,包含过程不是很复杂。因为当对数据进行多种修改操作时,使用数据结构能够方便保留用户多种修改操作。将数据结构和图形界面向结合能提供一个愈加友好界面。
第三,相关图书信息录入功效,我是在菜单下面提供一个面板,在面板上放置很多文本按钮,用户能够在文本区域中录入图书信息,考虑到本系统实现只是一个很简单图书信息管理。而对图书来说录入图书编号、书名、作者、出版社、出版日期、图书介绍及图书类别就已经足够了,其它信息对于图书来说就无须要了。在图书信息录入时,考虑到图书信息规范性,同时也考虑到实用性,对和图书来说,图书编号通常采取LZLG开头,所以用户在录入图书信息时,也要要求用户对图书额编号采取LZLG开头,LZLG后面内容用户能够依据自己喜好进行自定义,系统不做具体要求,因为数据表Book采取图书编号作为主键,所以对于用户输入图书编号必需确保唯一性,唯一性是经过查询数据来实现。当图书编号相同时,同时用户编号反复,要求用户重新输入。在更新图书信息时,是采取判定图书编号信息来实现图书信息修改,相关图书信息删除,很简单,利用图书主键就能够很快删除图书信息。最终一点是,在用户选择图书信息时,要求一次只能选择一条图书统计,因为选择多条图书统计不能确定到底显示哪一条数据信息,这关键是经过设置表格单选属性实现。
第四,在查询图书信息时,能利用两种条件来实现复合查询,能够利用图书编号来查询,或经过书名来查询,这就要求查询能灵活处理情况,既能够使用单关键字来查询,也能够使用多关键字来查询。首先要处理时怎样判定用户到底是想用单关键字还是使用多关键字来查询,思绪是经过提供给用户一个复选框,当用户想使用某个关键字时,能够勾选关键字前面复选框,从而实现单关键字和多关键字判定,第二是因为多关键字能够组合出很多中情况,假如一一实现是不可能,同时也是无须要,所以必需经过通用查询函数来实现多关键字查询,思绪是经过判定关键字是否为空来实现,假如关键字不为空就能够增加一个条件来实现多关键字查询。
最终一点,是在进行图书信息插入,修改,删除时,要求能显示实施结果,成功或失败,在操作失败时要求能提供失败信息,关键是经过判定实施语句返回值是否为真。为真说明实施成功,为假则说明操作失败,这时系统会打印堆栈信息,同时提醒用户操作失败。假如操作成功要求能自动刷新,将最新结果显示出来,这关键是经过refresh事件监听实现,当操作成功时,重新实施查询操作,查询数据结构中最新结果。并显示出来,以上是基础思绪。
四、数据结构基础算法实现
4.1数据结构需求分析
图书基础信息:包含数据项有:图书编号、书名、作者、出版社、出版日期、图书介绍及图书类别
图书信息管理系统
图书基础信息
数据结构汉字本文件
图4-1图书信息管理系统数据步骤图
4.2数据结构概念结构设计
本系统实体有:图书实体。具体描述E-R图图下所表示。
图书信息
书名
图书编号
图书介绍
图书类别
作者
出版日期
出版社
图4-2 图书信息图
现在需要将上面数据结构概念结构转化为文本文件数据系统所支持实际数据模型,也就是数据结构逻辑结构
4.3数据结构逻辑结构实现
创建图书信息表
Create table book(
BID varchar(20) primary key,
Bname varchar(20) not null ,
Bauthor varchar(16) not null ,
Press varchar(20) not null ,
BInfo varchar(50) not null ,
BDate date not null,
Bclass varchar(20) not null ,
);
五、运行调试和分析讨论
5.1源代码及注释
图书信息管理系统关键是用于图书管理,关键功效包含图书增、删、改、查。
用户界面直接影响用户操作和使用体验,所以界面要求简单、美观、易操作等;我设计界面关键分为窗体、菜单等按钮组成,分别实施对应操作。
(1)窗体设计:
窗体整个框架使用Frame类结构,在Frame有外边框和标题,创建Frame是能够指定窗口标题。
//主类程序,包含用户界面设计,按钮功效,图书信息录入,图书信息查找
Books.java
import java.awt.*;
import java.awt.event.*;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
public class Books implements ActionListener {
Frame mainFrame;
Frame inputFrame;
Frame searchFrame;
TextArea stuInfo;
Label lb[] = new Label[9];
Label lb2[] = new Label[2];
TextField tf[] = new TextField[9];
TextField tf2[] = new TextField[2];
Button btn[] = new Button[3];
Button btn2[] = new Button[2];
Panel p1, p2, p3, p4;
IOOperation ioo;
Student stu;
Student student[] = new Student[100];
public Books() {
/**
* 建立主类
*/
mainFrame = new Frame("图书信息");
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
MenuItem item1 = new MenuItem("录入"); //菜单栏下选项
MenuItem item2 = new MenuItem("查询"); //菜单栏下选项
MenuItem item3 = new MenuItem("更改"); //菜单栏下选项
MenuItem item4 = new MenuItem("退出"); //菜单栏下选项
MenuItem item5 = new MenuItem("制作人员"); //菜单栏下选项
item1.addActionListener(this);
item2.addActionListener(this);
item3.addActionListener(this);
item4.addActionListener(this);
item5.addActionListener(this);
Menu menu1 = new Menu("菜单"); //项目下两选项之一,包含录入,查询,更改,退出。
menu1.add(item1);
menu1.add(item2);
menu1.add(item3);
menu1.addSeparator();
menu1.add(item4);
Menu menu2 = new Menu("相关"); //项目下两选项之一,包含制作人员。
menu2.add(item5);
MenuBar mb = new MenuBar();
mb.add(menu1);
mb.add(menu2);
mainFrame.setMenuBar(mb);
stuInfo = new TextArea();
stuInfo.setFont(new Font("serif", Font.PLAIN, 18));
mainFrame.add(stuInfo);
mainFrame.setSize(500, 320); //定义程序打开时框大小
mainFrame.setLocation(470, 220); //定义程序打开时框位置
mainFrame.setVisible(true);
/*ImageIcon imageicon=new //插曲背景图片失败 1
ImageIcon("F:\\1.jpg");
JButton b=new JButton(imageicon);*/
/*ImageIcon img=new ImageIcon("F:\\1.jpg"); //插入背景图片失败 2
JLabel Ib=new JLabel();
Ib.setIcon(img);
Ib.setSize(img.getIconWidth(),img.getIconHeight());*/
(2)录入信息:
图书就是经过这个功效录入进计算机,图书录入进算计时要把图书编号、书名、类型、出版社、作者、信息、出版时间、页数、价格等基础信息输入。每个信息全部有自己类型,比如:书名就用String,页数就用int;
/**
* 建立录入信息
*/
inputFrame = new Frame();
inputFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
inputFrame.setVisible(false);
}
});
p1 = new Panel(new GridLayout(9, 2));
p2 = new Panel();
String lbname[] = {"图书编号:", "书名:", "类型:", "出版社:",
"作者:", "信息:", "出版时间:", "页数:", "价格:"};
String btnname[] = {"保留", "删除", " 退出 "};
for(int i=0; i<9; i++) {
lb[i] = new Label(lbname[i]);
tf[i] = new TextField(15);
p1.add(lb[i]);
p1.add(tf[i]);
}
for(int i=0; i<3; i++) {
btn[i] = new Button(btnname[i]);
btn[i].addActionListener(this);
p2.add(btn[i]);
}
btn[2].setActionCommand("输入");
inputFrame.add(p1, BorderLayout.CENTER);
inputFrame.add(p2, BorderLayout.SOUTH);
inputFrame.pack();
inputFrame.setLocationRelativeTo(mainFrame);
(3)查找功效:
查找功效下信息,查找时我们能够经过图书编号或书名查询;因为通常我们找书就经过这个查找,我用if语句是实现插找。
/**
*建立查找信息
*/
searchFrame = new Frame("查询书名");
searchFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
searchFrame.setVisible(false);
}
});
p3 = new Panel(new GridLayout(2, 2));
p4 = new Panel();
String lbname2[] = {"图书编号:", "书名:"}; //查询菜单下按钮
String btnname2[] = {"查询", "退出"};
for(int i=0; i<2; i++) {
lb2[i] = new Label(lbname2[i]);
tf2[i] = new TextField(15);
p3.add(lb2[i]);
p3.add(tf2[i]);
}
for(int i=0; i<2; i++) {
btn2[i] = new Button(btnname2[i]);
btn2[i].addActionListener(this);
p4.add(btn2[i]);
}
btn2[1].setActionCommand("查询");
searchFrame.add(p3, BorderLayout.CENTER);
searchFrame.add(p4, BorderLayout.SOUTH);
searchFrame.pack();
searchFrame.setLocationRelativeTo(mainFrame);
/*
IO operation object
*/
ioo = new IOOperation();
student = ioo.getAllStudent();
}
public void actionPerformed(ActionEvent e) {
/**
* 菜单功效
*/
(4)菜单功效:
菜单下选项,有录入、查询、更改等功效;
if (e.getSource() instanceof MenuItem) {
MenuItem mi = (MenuItem) e.getSource();
if (mi.getLabel().equals("录入")) {
inputFrame.setTitle("录入");
for(int i=0; i<9; i++)
tf[i].setText("");
p2.remove(btn[1]);
btn[0].setActionCommand("输入");
inputFrame.setVisible(true);
}
else if (mi.getLabel().equals("查询")) {
searchFrame.setVisible(true);
}
else if (mi.getLabel().equals("更改")) {
inputFrame.setTitle("更改");
if(stu != null) {
tf[0].setText(stu.getCode());
tf[1].setText(stu.getName());
tf[2].setText(stu.getSex());
tf[3].setText(stu.getBirthPlace());
tf[4].setText(stu.getStuClass());
tf[5].setText(stu.getChinese() + "");
tf[6].setText(stu.getMath() + "");
tf[7].setText(stu.getEnglish() + "");
tf[8].setText(stu.getTotalScore() + "");
}
p2.remove(btn[2]);
p2.add(btn[1]);
p2.add(btn[2]);
btn[0].setActionCommand("更改");
inputFrame.setVisible(true);
}
else if (mi.getLabel().equals("退出"))
System.exit(0);
else if (mi.getLabel().equals("制作人员")) {
final Dialog progInfo = new Dialog(mainFrame, "ProgInfo", true);
progInfo.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
progInfo.dispose();
}
});
progInfo.setLayout(new FlowLayout());
Label l = new Label("制作组:\n"+"王浩东 刘凡 汤文暖");
progInfo.add(l);
progInfo.setSize(200, 100);
progInfo.setLocationRelativeTo(mainFrame);
progInfo.setVisible(true);
}
}
/**
* 按钮功效
*/
(5)按钮功效:
这里面有按钮功效实现,还有输出时类型等;
else {
Button btn = (Button)e.getSource();
if(btn.getLabel().equals("保留")) {
if(!tf[0].getText().equals("") &&
!tf[1].getText().equals("") &&
!tf[2].getText().equals("") &&
!tf[3].getText().equals("") &&
!tf[4].getText().equals("") &&
!tf[5].getText().equals("") &&
!tf[6].getText().equals("") &&
!tf[7].getText().equals("") &&
!tf[8].getText().equals("")) {
Student s = new Student(tf[0].getText(), tf[1].getText(),
tf[2].getText(), tf[3].getText(), tf[4].getText(),
Integer.parseInt(tf[5].getText()),
Integer.parseInt(tf[6].getText()),
Integer.parseInt(tf[7].getText()),
Integer.parseInt(tf[8].getText()));
if(btn.getActionCommand().equals("输入")) {
for(int i=0; i<student.length; i++) {
if(student[i] == null) {
student[i] = s;
break;
}
}
ioo.write(student);
}
else {
for(int i=0; i<student.length; i++) {
if(student[i].equals(stu)) {
student[i] = s;
break;
}
}
ioo.write(student);
}
}
inputFrame.setVisible(false);
stuInfo.setText("");
}
else if(btn.getLabel().equals("删除")) {
int index = 200;
if(stu != null) {
for(int i=0; i<student.length; i++) {
if(student[i]!=null && student[i].equals(stu)) {
index = i;
if(i != student.length-1)
student[i] = student[i+1];
else
student[i] = null;
}
if(i==index && student[i+1]==null)
break;
else if(i>index && i<student.length-1) {
student[i] = student[i+1];
if(i == student.length - 1)
student[i] = null;
}
}
ioo.write(student);
}
stu = null;
inputFrame.setVisible(false);
stuInfo.setText("");
for(int i=0; i<student.length; i++) {
if(student[i]!=null)
System.out.println(i + " " + student[i].getCode());
}
}
else if(btn.getLabel().equals("查询")) {
stu = null;
if(!tf2[0].getText().equals("") ||
!tf2[1].getText().equals("")) {
String condition = "";
if(!tf2[0].getText().equals("")) {
condition = tf2[0].getText();
}
else
condition = tf2[1].getText();
for(int i=0; i<student.length; i++) {
if (student[i] != null) {
if (student[i].getCode().equals(condition) ||
student[i].getName().equals(condition)) {
stu = student[i];
break;
}
}
}
}
if(stu != null) {
stuInfo.setText("图书编号: " + "LZLG"+stu.getCode() + "\n" +
"书名: " + stu.getName() + "\n" +
"类型: " + stu.getSex() + "\n" +
"出版社: " + stu.getBirthPlace() + "\n" +
"作者: " + stu.getStuClass() + "\n" +
"信息: " + stu.getChinese() + "\n" +
"出版时间: " + stu.getMath() + "\n" +
"页数: " + stu.getEnglish() + "页\n" +
"价格: " + stu.getTotalScore()+"元");
}
searchFrame.setVisible(false);
}
else if(btn.getLabel().equals(" 退出 "))
if(btn.getActionCommand().equals("输入"))
inputFrame.setVisible(false);
else
searchFrame.setVisible(false);
}
}
public static void main(String[] args) {
new Books();
}
}
这类包含信息存放方法,和从菜单中读取全部图书信息。
IOOperation.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
//信息存放方法
/**
* class which is used to do I/O operation
*/
class IOOperation {
private File file = new File("C:\\stuinfo.txt"); //信息存放位置
public IOOperation() {
try {
if(!file.exists())
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 写菜单
*/
public void write(Student[] s) {
try {
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream objOut = new ObjectOutputStream(fos);
objOut.writeObject(s);
objOut.close();
fos.close();
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* 从菜单中读取全部图书信息
*/
public Student[] getAllStudent() {
Student ss[] = new Student[100];
try {
if (file.length() > 0) {
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
ss = (Student[]) ois.readObject();
ois.close();
fis.close();
}
} catch(Exception e) {
e.printStackTrace();
}
return ss;
}
}
这类存放图书信息接口方法
Student.Java
import java.io.Serializable;
/**
*图书信息接口
*/
class Student implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String code;
private String name;
private String sex;
private String birthPlace;
private String stuClass;
private int Chinese;
private int Math;
private int English;
private int totalScore;
public Student(String code, String name, String sex, String birthPlace,
String stuClass, int i, int j
展开阅读全文