JAVA图书查询系统.docx
《JAVA图书查询系统.docx》由会员分享,可在线阅读,更多相关《JAVA图书查询系统.docx(18页珍藏版)》请在冰豆网上搜索。
JAVA图书查询系统
一、设计目的
《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
二、设计问题
图书查询系统
要求完成:
a)图书信息的添加、删除、查询、修改功能
b)使用界面操作
c)使用文件完成
设计思路:
首先设计布局管理器,完成图形用户界面,再通过事件监听器,完成各个事件的操作。
整个框架就是一个布局管理器,设置监听器,设置按钮接口,通过主函数调用主方法,完成最终的设计功能。
三、概要设计
3.1界面设计
publicLibMan()中,Containercontent=getContentPane()定义容器类对象,content.setLayout(newBorderLayout())设置布局管理器为BorderLayout,BorderLayout是一个布置容器的边界布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:
南、北、东、西和中间区域。
每个区域最多只能包含一个组件,并通过相应的常量进行标识:
NORTH、SOUTH、EAST、WEST和CENTER。
当使用边界布局将一个组件添加到容器中时,要使用这五个常量之一。
content.add(biaoti,BorderLayout.NORTH)添加“biaoti”组件,content.add(apanel,BorderLayout.CENTER)添加“apanel”组件,其中包含有标签和文本框。
content.add(bpanel,BorderLayout.SOUTH)添加“bpanel”组件,也就是按钮。
setLocation(300,200)确定界面在屏幕上的显示坐标,setResizable(false)固定窗口大小。
主函数调用publicLibMan()。
3.2事件监听及处理
LibMan类继承Jframe类,首先定义用到的文本输入框和按钮,接下来就是各个按钮事件监听器接口的设计。
PrintWritert=null创建新的PrintWriter,t=newPrintWriter(newFileWriter("Library.txt",true))把library用作此writer目标的文件名称,文件格式为txt。
如果存在该文件,则将其大小截取为零;否则,创建一个新文件。
将输出写入文件中,并对其进行缓冲处理。
t.prin
tln(shuming+";"+zuozhe+";"+chubanshe)把在文本框中输入的信息写入文件中。
这样就完成了添加功能。
BufferedReader从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
BufferedReaderbf=null定义新的BufferedReader,bf=newBufferedReader(newFileReader("Library.
txt")),将缓冲指定文件”Library.txt”的输入,read=bf.readLine()每次从Library.txt中读取一个文本行,StringTokenizerst=newStringTokenizer
(read,";")为从文件中读取的字符串(文本行)构造一个stringtokenizer,“;”为分隔符,st.nextToken()返回所构造的stringtokenizer的下一个标记,例如:
Stringshumi=st.nextToken()执行完毕后,shumi就等于所读取文本行的书名,这样就很好的对应了起来,当shumi.equals(shuming)||zuo.equals(zuo
zhe)||chuban.equals(chubanshe),JOptionPane.showMessageDialog()告知用户某事已经发生,显示你所查找的信息,最终完成查找功能。
delete和modify按钮接口也基本上用了同样的方法,最终都是实现对文件的操作。
texts
huming.setText(null)就是把界面上的文本输入框重新置空,这样就完成了重置的功能。
publicLibMan()程序段实现了用户界面的设计和窗口的关闭,通过事件监听器完成add、delete、modify、reset以及research的功能。
四、详细设计
4.1所用到的类或接口
importjava.awt.BorderLayout;
importjava.awt.Container;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjava.io.IOException;
importjava.io.FileNotFoundException;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.Writer;
importjava.util.StringTokenizer;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.Jlabel;
importjavax.swing.JList;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
父类:
Jframe
主类:
LibMan
监听器接口:
classaddimplementsActionListener;//add事件接口
classdeleteimplementsActionListener;//delete事件接口
classmodifyimplementsActionListener;//modify事件接口
classsearchimplementsActionListener;//search事件接口
classresetimplementsActionListener;//reset事件接口
4.2界面设计
JLabelbiaoti,shuming,zuozhe,chubanshe;//定义标签
Containercontent=getContentPane();//定义容器类对象
content.setLayout(newBorderLayout());//设置布局管理为BorderLayout
biaoti=newJLabel("图书信息管理系统");
shuming=newJLabel("书名:
");
zuozhe=newJLabel("作者:
");
chubanshe=newJLabel("出版社:
");
content.add(biaoti,BorderLayout.NORTH);//放置容器,位置为NORTH
JPanelapanel=newJPanel();//定义容器
textshuming=newJTextField("",25);//定义文本框
textzuozhe=newJTextField("",25);
textchubanshe=newJTextField("",25);
apanel.add(shuming);//将组件添加到容器apanel中
apanel.add(textshuming);
apanel.add(zuozhe);
apanel.add(textzuozhe);
apanel.add(chubanshe);
apanel.add(textchubanshe);
content.add(apanel,BorderLayout.CENTER);//放置容器,位置为CENTER
add=newJButton("添加");//定义、设计按钮
delete=newJButton("删除");
modify=newJButton("修改");
search=newJButton("查询");
reset=newJButton("重置");
JPanelbpanel=newJPanel();//定义容器
bpanel.add(add);//将组件添加到容器bpanel中
bpanel.add(delete);
bpanel.add(modify);
bpanel.add(search);
bpanel.add(reset);
content.add(bpanel,BorderLayout.SOUTH);//放置容器,位置为CENTERsetSize(350,400);//设置窗体大小
setTitle("图书信息管理系统");//设置窗口标题
setLocation(300,200);//设置窗口显示坐标
setResizable(false);//固定窗体大小
setVisible(true);//设置窗口可见
//关闭窗口
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
4.3按钮“添加“的监听及处理
监听:
add.addActionListener(newadd());
处理:
【该段实现图书信息的添加功能】
classaddimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
PrintWritert=null;
try{
Stringshuming=textshuming.getText();
Stringzuozhe=textzuozhe.getText();
Stringchubanshe=textchubanshe.getText();
t=newPrintWriter(newFileWriter("library.txt",true));
t.println(shuming+";"+zuozhe+";"+chubanshe);
}catch(FileNotFoundExceptione1){
}catch(IOExceptione1){
}t.close();
}
}
4.4按钮“删除”的监听及处理
监听:
delete.addActionListener(newdelete());
处理:
【该段实现图书信息的删除功能】
classdeleteimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
BufferedReaderbf;
@SuppressWarnings("unused")
BufferedWriterra;
try{
ra=newBufferedWriter(newFileWriter("library.txt"));
bf=newBufferedReader(newFileReader("library.txt"));
Stringread,rea;
Stringshuming=textshuming.getText();
Stringchubanshe=textchubanshe.getText();
Stringzuozhe=textzuozhe.getText();
intbl=0;
StringBufferre=newStringBuffer();
//线程安全的可变字符序列。
while((read=bf.readLine())!
=null){
StringTokenizerst=newStringTokenizer(read,";");
Stringshumi=st.nextToken();
Stringzuo=st.nextToken();
Stringchuban=st.nextToken();
if(shumi.equals(shuming)&&chuban.equals(chubanshe)&&zuo.equals(zuozhe)){
re.append(read+"\n");
rea=re.toString();
bf.close();
rea=rea.replaceAll(read,";");
}
else{
bl=1;
}
}
if(bl==1){
JOptionPane.showMessageDialog(null,"找不到信息");
}
bf.close();
}catch(FileNotFoundExceptione1){
}catch(IOExceptione1){
}
}
}
4.5按钮“修改”的监听及处理
监听:
modify.addActionListener(newmodify());
处理:
【该段实现图书信息的修改功能】
classmodifyimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
finalJFramejf2=newJFrame("修改页面");
jf2.setBounds(150,150,400,400);
jf2.getContentPane().setLayout(newGridLayout(4,1));
JPaneljp1=newJPanel();
jp1.setLayout(newGridLayout(1,2));
JPaneljp2=newJPanel();
jp2.setLayout(newGridLayout(1,2));
JPaneljp3=newJPanel();
jp3.setLayout(newGridLayout(1,2));
JLabeljlb1=newJLabel("请输入你的书名");
finalJTextFieldjtf11=newJTextField(20);
jtf11.getDocument().addDocumentListener(newDocumentListener(){
publicvoidchangedUpdate1(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr4=jtf11.getText().trim();
}
publicvoidinsertUpdate1(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr4=jtf11.getText().trim();
}
publicvoidremoveUpdate1(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr4=jtf11.getText().trim();
}
@Override
publicvoidchangedUpdate(DocumentEventarg0){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidinsertUpdate(DocumentEventarg0){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidremoveUpdate(DocumentEventarg0){
//TODOAuto-generatedmethodstub
}
});
jp1.add(jlb1);
jp1.add(jtf11);
JLabeljlb2=newJLabel("请输入修改的作者");
finalJTextFieldjtf12=newJTextField(20);
jtf12.getDocument().addDocumentListener(newDocumentListener(){
publicvoidchangedUpdate(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr5=jtf12.getText().trim();
}
publicvoidinsertUpdate(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr5=jtf12.getText().trim();
}
publicvoidremoveUpdate(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr5=jtf12.getText().trim();
}
});
jp2.add(jlb2);
jp2.add(jtf12);
JLabeljlb3=newJLabel("出版社");
finalJTextFieldjtf13=newJTextField(20);
jtf13.getDocument().addDocumentListener(newDocumentListener(){
publicvoidchangedUpdate(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr6=jtf13.getText().trim();
}
publicvoidinsertUpdate(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr6=jtf13.getText().trim();
}
publicvoidremoveUpdate(DocumentEvente){
//TODOAuto-generatedmethodstub
Stringstr6=jtf13.getText().trim();
}
});
jp3.add(jlb3);
jp3.add(jtf13);
JButtonjb=newJButton("确定");
//只允许用户修改书名,不能修改出版社和作者
jb.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
jf2.dispose();
Filef=newFile("Library.txt");
if(!
f.exists()){
System.exit(0);
}
try{
Stringstr4=null;
Filef0=newFile(f,str4);
if(!
f0.exists()){
JFramejf001=newJFrame("书名不存在");
JPaneljp001=newJPanel();
JButtonjb001=newJButton("确定");
jp001.add(jb001);
jb001.setSize(100,100);
jf001.setSize(250,120);
jf001.setLocation(240,200);
jf001.add(jp001);
jf001.setVisible(true);
jb001.addActionListener(new
ActionListener(){
publicvoidactionPerformed(ActionEvente){
}
});
}
Filef2=newFile(f0.getAbsolutePath(),"作者名"+".txt");
FileWriterfw11=newFileWriter(f2);
Filef1=newFile(f0.getAbsolutePath(),"书名"+".txt");
if(!
f1.exists()){
System.exit(0);
}