Java 课程设计结题报告.docx
《Java 课程设计结题报告.docx》由会员分享,可在线阅读,更多相关《Java 课程设计结题报告.docx(26页珍藏版)》请在冰点文库上搜索。
Java课程设计结题报告
浙江科技学院
程序设计综合课程设计报告
班级:
学号:
姓名:
指导教师:
二○一一年六月七日
设计日期自2011年4月8日至2011年6月7日
目录
1前言1
2设计内容2
2.1系统设计2
2.1.1需求分析2
2.1.2系统功能模块2
2.1.3功能设计3
2.2数据库设计与实现4
2.2.1数据库需求分析4
2.2.2数据库逻辑结构设计4
2.3系统的设计与实现5
2.2.1登录界面(Login)5
2.2.2主界面(MainWindow)6
2.2.3密码修改界面(Mima)10
2.2.4密码修改数据库链接(MimaConnect)11
2.2.5读者种类界面(ZhongleiReader)12
2.2.6读者种类数据库链接(ZhongleiReader)16
2.2.7读者基本信息(ReaderInformation)17
2.2.8查询报表界面(ShowRecord)17
2.2.9图片欣赏界面(Haha)18
2.2.10图书登记管理界面(Booktable)19
2.2.11关于界面(Massage)19
2.4数据库配置19
3设计总结与体会20
4参考文献21
1前言
2010年为期3星期的时间,我在浙江科技学院第一次做课程设计,由于之前没有实际项目开发的经验,先是阅读了很多JAVA方面的书籍,其中以SWING编程为主,然后结合理论知识,在指导老师的指导下完成了基于JAVA的图书管理系统的开发。
通过上次的课程设计,我学到了很多专业知识,也获得了不少的编程经验,使我在编程能力上有了很大的提高,通过理论联系实际使我对项目开发也有了比较清晰的了解。
在此次工程实习中我主要完成的工作是:
在JDK6.0环境下用JAVA语言以及Access2003完成图书管理系统。
从需求分析开始,按照软件工程的整个流程一步步的做下来,最终完成整个软件的设计。
2设计内容
2.1系统设计
2.1.1需求分析
本图书管理系统具有如下功能模块:
密码修改模块:
对当前登陆用户进行登陆密码的修改。
报表模块:
基本书籍浏览表。
以表格的形式展现给用户所有书本的基本信息。
时钟模块:
在主界面提供了本地当时的时间(日期,时间,星期*)。
图片欣赏模块:
提供图片浏览功能。
音乐模块:
提供音乐欣赏功能,可以随时关闭和开启。
基本信息管理模块:
对读者基本信息进行管理,可以添加、查询、修改和删除基本信息。
2.1.2系统功能模块
本系统分为以下四大模块:
系统管理模块、基本信息管理模块、成绩管理模块、报表模块。
图2-1功能模块划分图
2.1.3功能设计
各模块功能设计如下:
1.系统管理模块:
可以方便地了解系统,欣赏音乐和图片。
2.基本信息管理模块:
基本信息录入功能,输入读者信息,可以实现添加此信息到相应的数据库db(读者基本信息表)表里。
基本信息查询功能,输入编号,可以查询此读者信息的详细。
基本信息修改功能:
输入编号,可以显示此读者信息的详细,然后作修改操作,并保存修改后的信息到相应的数据库表里。
基本信息删除功能:
输入编号,可以显示该读者信息的详细,然后作删除操作,可以把数据库表中对应的该学生的记录全部删除。
3.读者种类管理模块:
读者种类基本信息录入功能,输入读者种类信息,可以实现添加此信息到相应的数据库db(读者种类信息表)表里。
基本信息查询功能,输入编号,可以查询此读者信息的详细。
基本信息修改功能:
输入编号,可以显示此读者信息的详细,然后作修改操作,并保存修改后的信息到相应的数据库表里。
基本信息删除功能:
输入编号,可以显示该读者信息的详细,然后作删除操作,可以把数据库表中对应的该学生的记录全部删除。
4.报表模块:
基本信息浏览表功能:
通过以表格的形式,给用户显示数据库里所有书籍读者种类对应的书名编号,书名,作者,借书期限的信息一目了然,可以浏览所有书籍的基本信息。
2.2数据库设计与实现
2.2.1数据库需求分析
根据本系统的需求分析,需要4张表。
读者种类表:
存放读者的借阅信息。
读者基本信息表:
存放读者详细的注册信息。
书籍表:
存放书籍的详细信息。
用户表:
存放用户的账号密码的信息。
2.2.2数据库逻辑结构设计
下面是本系统设计的表及其作用。
表2-1数据表说明
表名
表的作用
bookInformation(读者种类表)
存放读者的借阅信息
readerInformation(读者基本信息表)
存放读者详细的注册信息
book(书籍表)
存放书籍的详细信息
user(用户表)
存放用户的账号密码的信息
下面是各个表的详细结构。
1.bookInformation(读者种类表),见表2-2
表2-2bookInformation(读者种类表)
字段名称
数据类型
是否为空
是否主键
是否外键
种类编号
Int(4)
否
是
否
种类名称
char(50)
是
否
否
借书数量
Int(4)
是
否
否
借书期限
char(10)
是
否
否
2.readerInformation(读者基本信息表),见表2-3
表2-3readerInformation(读者基本信息表)
字段名称
数据类型
是否为空
是否主键
是否外键
读者编号
Int(4)
否
是
否
读者姓名
char(10)
是
否
否
读者种类
char(50)
是
否
否
读者性别
char(10)
是
否
否
读者单位
char(10)
是
否
否
读者住址
char(50)
是
否
否
读者号码
char(10)
是
否
否
读者日期
char(10)
是
否
否
2.book(书籍表),见表2-4
表2-4book(书籍表)
字段名称
数据类型
是否为空
是否主键
是否外键
书名
char(50)
否
是
否
作者
char(10)
是
否
否
现存
char(10)
是
否
否
时间
日期/时间
是
否
否
4.user(用户表),见表2-5
表2-5user(用户表)
字段名称
字段说明
数据类型
是否为空
是否主键
是否外键
id
编号
Int(4)
否
是
否
name
用户名
char(30)
否
否
否
psword
登录密码
char(30)
否
否
否
admin
是否管理员
Int(4)
否
否
否
2.3系统的设计与实现
对于本系统各个功能块的实现,是通过JAVA语言在JDK6.0环境下完成的,界面是用JAVASWING编写的,用Access2003实现JAVA语言与数据库的连接,最后完成整个系统的开发。
2.2.1登录界面(Login)
登录窗口是很多应用系统中不可缺少的组成部分。
通过验证用户输入的用户名和密码,决定是否允许用户进入系统,在一定程度上保证系统的安全。
本系统建立一个登录窗口,运行界面如图2-4所示。
图2-4登陆界面
本登录窗口在对话框上使用JTextField接收用户名,使用JPasswordField接收密码。
在按钮动作事件中对用户名和密码进行校验。
按确定键进入主界面,按取消键退出系统。
2.2.2主界面(MainWindow)
主界面是负责应用程序的,由它调用其他模块。
因此应该具有操作性好、界面清晰的特点,使用户能够很方便地找到所需功能。
根据功能需求和总体设计的结果,主界面包括菜单栏,图书登记管理,图片欣赏,音乐开关,时间系统。
可以通过点击菜单项进入相应的功能模块,此窗口的类名为“MainWindow”,窗体布局设置为默认面板BorderLayout。
在此窗体上添加菜单栏menuBar,和一个工具栏toolBar。
主界面如图2-5所示。
图2-5主界面
菜单栏bar的内容如表2-7所示。
表2-7菜单栏组成列表
名称
类型
文本
menul_01
JMenu
图书管理
menul_02
JMenu
学生管理
menul_03
JMenu
借阅管理
menul_04
JMenu
查询报表
menul_05
JMenu
关于
menul_06
JMenu
帮助
item1
JMenuItem
图书现存
item2
JMenuItem
图书翻新
图书登记管理
JMenuItem
图书登记管理
item3
JMenuItem
密码服务
item4
JMenuItem
自助服务
读者种类信息
JMenuItem
读者种类信息
读者基本信息
JMenuItem
读者基本信息
item5
JMenuItem
借阅信息
查询报表
JMenuItem
查询报表
关于
JMenuItem
关于
通过主界面来进入其他界面的方法为:
调用其他类里的构造方法或者方法。
因为跟数据库连接的缘故,所以所调用的类的构造函数必须设置成带rs(结果返回集)参数的。
主界面添加子窗体的方法,实现如下:
publicstaticvoidaddIFame(JInternalFrameiframe){
DESKTOP_PANE.add(iframe);}
主界面还调用了菜单栏和按钮的连接方法,实现如下:
publicclassMenuActions{
publicstaticMenuAndButtonActionMENUANDBUTTONACTION=newMenuAndButtonAction();
privatestaticclassMenuAndButtonActionextendsAbstractAction{
MenuAndButtonAction(){
putValue(Action.NAME,"图书登记管理");
}
publicvoidactionPerformed(ActionEvente){
MainWindow.addIFame(newBooktable());
}
}}
主界面上的音乐控制按钮实现如下:
finalJButtonbutton1=newJButton("停止音乐");
button1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
chosenClip.stop();
button1.setLabel("开启音乐");
i++;
if(i%2==0){
{chosenClip.loop();
button1.setLabel("停止音乐");}
if(i%2!
=0){
{chosenClip.stop();
button1.setLabel("开启音乐");}
}
}
}
});
音乐播放功能实现如下:
try{
chosenClip=Applet.newAudioClip(file1.toURL());
chosenClip.loop();
}
catch(Exceptione){
e.printStackTrace();
}
主界面上的时间模块实现如下:
intdelay=1000;
ActionListenerdraw=newActionListener(){
publicvoidactionPerformed(ActionEventevt){
repaint();
}
};
newTimer(delay,draw).start();
}
publicvoidpaint(Graphicsg){
Calendarnow=newGregorianCalendar();
inthour=now.get(Calendar.HOUR_OF_DAY);
intminute=now.get(Calendar.MINUTE);
intsecond=now.get(Calendar.SECOND);
Stringst;
if(hour<10)
st="0"+hour;
else
st=""+hour;
if(minute<10)
st+=":
0"+minute;
else
st+=":
"+minute;
if(second<10)
st+=":
0"+second;
else
st+=":
"+second;
g.setColor(newColor(245,245,245));
g.fillRect(940,23,50,20);
g.setColor(Color.blue);
g.drawString(st,940,40);
Daten=newDate();
Stringssss=String.format("%ty/%tm/%td",n,n,n);
g.setColor(Color.BLACK);
g.drawString(ssss,940,52);
Stringsss=String.format("%tA",n);
g.drawString(sss,945,64);
g.setColor(newColor(169,169,169));
}
2.2.3密码修改界面(Mima)
此界面是给予用户自己修改自己的密码的界面,不能修改别人的登录密码。
在原始密码处输入刚刚使用的登录密码,否则弹出如图如图2-6所示
图2-6
在新建密码输入新的登录密码,并在确认密码处输入相同的密码,否则弹出如图如图2-7所示
图2-7
在数据全部正确时弹出如图如图2-8
图2-8
密码修改界面运行界面入下图2-9
图2-9
此界面导入了图片,实现的代码如下:
ImageIconii=newImageIcon(getClass().getResource("/Picture/c.jpg"));
JLabeluppicture=newJLabel(ii);
this.add(uppicture,BorderLayout.NORTH);
本界面运用BorderLayout和FlowLayout布局,用面板加以实现。
在按钮上增加监听器,点击出发事件。
2.2.4密码修改数据库链接(MimaConnect)
此类写了2.2.3密码修改界面(Mima)的数据库链接方法。
检验密码的主要代码实现如下:
Strings=Mima.passwordField1.getText();
con=DriverManager
.getConnection("jdbc:
odbc:
Driver={MicrosoftAccessDriver(*.mdb)};DBQ=db/db.mdb");
sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
if(!
(Mima.passwordField1.getText().equals(Login.loginmima))){
JOptionPane.showMessageDialog(null,"原密码错误!
","警告",2);
return;
}
elseif(Mima.passwordField2.getText().equals(Mima.passwordField3.getText()))
;
else
{JOptionPane.showMessageDialog(null,"两次输入的密码不一致!
","警告",2);
return;
}
con.close();
密码修改的SQL语句如下
sql.executeUpdate("updateusersetpsword='"+
Mima.passwordField2.getText()+"'wherepsword='"+Mima.passwordField1.getText()+"'andname='"+Login.loginuser+"'");
2.2.5读者种类界面(ZhongleiReader)
此类记录了读者的编号,种类,借书的数量和期限。
本类运用BorderLayout和BoxLayout布局。
增加了图片和按钮,输入框,标签等。
运行界面如下图2-10
图2-10
如图所示,该窗体实现了增加,去除,修改,查询4个功能。
查询:
如果输入空,则结果如下图2-11
图2-11
其余都有警告框,不再图片显示。
当修改时,输入的编号不在数据库中,会弹出“不存在此编号”警告框
当增加时,先弹出确认对话框,若输入的编号已在数据库中,会弹出“已存在此编号”警告框。
当去除时,先弹出确认对话框,若输入的编号不在数据库中,会弹出“不存在此编号”警告框如下图2-12
图2-12
往种类编号里输入数字1,点击查询按钮
图2-13-1
以下给出用BoxLayout布局的实现代码
BoxbaseBox,boxV1,boxV2,boxV3,boxV4;
boxV1=Box.createVerticalBox();
boxV1.add(newJLabel("种类编号"));
boxV1.add(Box.createVerticalStrut(13));
boxV1.add(newJLabel("种类名称"));
boxV1.add(Box.createVerticalStrut(13));
boxV1.add(newJLabel("借书数量"));
boxV1.add(Box.createVerticalStrut(13));
boxV1.add(newJLabel("借书期限"));
boxV1.add(Box.createVerticalStrut(13));
boxV3=Box.createHorizontalBox();
boxV3.add(add);
boxV3.add(Box.createHorizontalStrut(20));
boxV3.add(del);
boxV3.add(Box.createHorizontalStrut(20));
boxV3.add(revise);
boxV3.add(Box.createHorizontalStrut(20));
boxV3.add(query);
boxV2=Box.createVerticalBox();
boxV2.add(种类编号);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(种类名称);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(借书数量);
boxV2.add(Box.createVerticalStrut(8));
boxV2.add(借书期限);
boxV2.add(Box.createVerticalStrut(8));
baseBox=Box.createHorizontalBox();
boxV4=Box.createVerticalBox();
baseBox.add(boxV1);
baseBox.add(Box.createHorizontalStrut(10));
baseBox.add(boxV2);
boxV4.add(Box.createVerticalStrut(33));
boxV4.add(baseBox);
boxV4.add(Box.createVerticalStrut(15));
boxV4.add(boxV3);
setLayout(newFlowLayout());
add(boxV4);
2.2.6读者种类数据库链接(ZhongleiReader)
此类写了链接读者种类信息界面的数据库链接,里面封装了4个方法:
查询,增加,修改,去除。
具体关键部分实现如下:
查询SQL语句
rs=sql.executeQuery("SELECT*FROMbookInformationwhere种类编号="+no);
while(rs.next()){
ZhongleiReader.种类名称.setText(rs.getString
(2));
ZhongleiReader.借书数量.setText(rs.getString(3));
ZhongleiReader.借书期限.setText(rs.getString(4));
JOptionPane.showMessageDialog(null,"查询成功!
");
}
增加SQL语句
rs=sql.executeQuery("select*frombookInformation");
rs.moveToInsertRow();
rs.updateInt(1,Integer.parseInt(ZhongleiReader.种类编号.getText()));
rs.updateString(2,ZhongleiReader.种类名称.getText());
rs.updateInt(3,Integer.parseInt(ZhongleiReader.借书数量.getText()));
rs.updateString(4,ZhongleiReader.借书期限.getText());
rs.insertRow();
删除SQL语句
sql.executeUpdate("deletefrombookInformationwhere种类编号="+no);
更新SQL语句
sql=con.createStatement();