Java程序设计说明书.docx

上传人:b****6 文档编号:8848222 上传时间:2023-02-02 格式:DOCX 页数:27 大小:602.11KB
下载 相关 举报
Java程序设计说明书.docx_第1页
第1页 / 共27页
Java程序设计说明书.docx_第2页
第2页 / 共27页
Java程序设计说明书.docx_第3页
第3页 / 共27页
Java程序设计说明书.docx_第4页
第4页 / 共27页
Java程序设计说明书.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Java程序设计说明书.docx

《Java程序设计说明书.docx》由会员分享,可在线阅读,更多相关《Java程序设计说明书.docx(27页珍藏版)》请在冰豆网上搜索。

Java程序设计说明书.docx

Java程序设计说明书

目录

图书荐购系统2

1.需求分析2

1.1问题描述2

1.2用例图2

2.概要设计3

2.1识别需求文档中的类3

2.2初步建模类及类间关系3

2.3初步的UML类图4

3.详细设计4

3.1将UML类图转换成Java代码框架4

3.2数据存储5

3.3算法设计8

3.4图形化界面9

4.调试分析18

4.1调试过程中遇到的问题及经验体会18

4.2经验和体会21

5.用户使用说明22

5.1用户登录22

5.2主菜单(征订书目荐购)22

5.3征订图书荐购23

5.4我要新荐24

5.5重置密码25

5.6基本信息维护25

6参考文献26

 

图书荐购系统

1.需求分析

1.1问题描述

目前高校都是多专业、多学科的综合性大学,需要的专业图书馆资料相对比较多,基本要覆盖到每一个学科。

所以图书馆图书采购过程中主要存在的问题是再众多的图书资料中难以准确订购到有价值的专业图书资料。

造成目前这种现象的主要原因是图书馆图书采购人员很难具备各学科、个专业的专业知识,要采购人员具备学校所开专业全部知识又不切实际。

所以要掌握相关专业知识的读者、老师参与到图书荐购来。

本人选择设计开发“图书馆图书荐购系统”来解决这一冲突。

该系统有2种角色权限:

读者、管理员。

读者进行登录,荐购征订数目,添加图书,修改密码;管理员添加/修改征订数目、馆藏书目,添加/修改/删除读者信息。

1.2用例图

需求文档简要描述如下:

需求

登录

需求

读者荐购征订数目,新荐数目,修改密码

需求

管理员登录,添加/修改征订数目、馆藏书目,添加/修改读者信息。

用例的文字简要描述如下:

用例

登录

用例

读者服务:

荐购征订数目,新荐数目,维护读者信息

用例

基本信息管理:

添加/修改征订数目、馆藏书目,添加/修改/删除读者信息

(1).图书荐购系统的用例图

2.概要设计

2.1识别需求文档中的类

1)对需求文档进行名词/名词短语分析,对名词/名词短语加下划线显示:

需求

登录

需求

读者荐购征订数目,新荐数目,查询馆藏书目,修改密码,退出系统

需求

管理员添加/修改征订数目、馆藏数目,添加/修改读者信息。

2)需求文档中的名词/名词短语,按照出现顺序,从左到右排列(不重复):

读者、管理员、征订书目、馆藏书目、荐购书目

而图书荐购系统中主要的对象是书,所以读者、管理员信息可以存在数据库中,通过直接通过条件查询语句来获取。

2.2初步建模类及类间关系

该系统的类有基类Book,馆藏类LibraryBook、征订书目类RecommendBook、荐购书目类JgBook类继承基类Book,但其子类又有其私有的实例变量和方法。

以基类Book,馆藏类LibraryBook为例:

Book类的实例变量:

privateStringISBN;privateStringbookName;

privateStringpress;privateStringauthor;

privateintcatagory;privateStringdetail;

方法:

publicBook(StringISBN,StringbookName){}

(2)publicBook(StringISBN,StringbookName,Stringpress,Stringauthor,

intcatagory,Stringdetail){}

publicStringtoString(){}

私有实例变量的getter()/setter(){}

馆藏类LibraryBook的实例变量:

privateStringpalce;

方法:

publicStringgetPalce(){}

publicLibraryBook(StringISBN,StringbookName,

Stringpress,Stringauthor,

intcatagory,Stringdetail,

Stringpalce)

2.3初步的UML类图

(2)图书荐购系统的UML类图

3.详细设计

3.1将UML类图转换成Java代码框架

根据VisualParadigmforUML11.0软件创建UML类图,设计好类图间的关系(继承、泛化、依赖)等,利用该软件工具栏的“程序代码”----“Java来回往返”---“程序代码生成”,完成后生成了相应的Java文件,对生成的Java文件进行适当的修改。

3.2数据存储

由于图书荐购系统中的数据量比较大且需要长久存储,对数据的存储不能仅仅局限的文件、集合、数组中,所以需要配置sqlserver数据源,将数据存储在数据库中,实现逻辑层和数据层的分离。

本系统的数据库为SQLserver2008,开发软件为EclipseEE,以及画图工具VisualParadigmforUML11.0。

3.2.1SqlServer数据源的配置

1)在“控制面板”---“系统和安全”—“管理工具”中点击“数据源”,添加SQLserver的数据源,同时在“SQL配置管理器”将所运行实例MSSQLSERVER的TCP/IP协议开启,并记下其端口1433.如下图(3)

图(3)配置SQL数据源

2)在windows官网上下载sqljdbc,并将sqljdbc中sqljdbc_auth.dll的文件放在C盘下的System32文件夹下,再通过Eclipse的buildpath将sqljdbc包导入到项目中。

SqlServer的驱动:

privatestaticfinalStringDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";

连接数据库的URL(windows身份验证):

privatestaticfinalStringURL="jdbc:

sqlserver:

//localhost:

1433;DatabaseName=Book;

integratedSecurity=TRUE;";

加载驱动的程序:

publicConnectiongetConnection()throwsException{

try{

Class.forName(DRIVER);//加载驱动

conn=DriverManager.getConnection(URL);//建立数据库连接

returnconn;

}

catch(ClassNotFoundExceptionex){

thrownewSQLException("驱动错误或数据库连接失败");

}

}

3.2.2数据表的关系

本系统创建了6张数据表,依次是征订书目表Book_information、书的类别表Book_type、馆藏书目表Libarary_Book、管理员权限表Maneger_login、读者信息表Reader_login1、荐购信息表Recommand。

数据库Book的表间的关系如下图(4):

图(4)数据库关系图

3.2.3SQL语句

本系统主要进行的是数据的增删查改操作,所以编写了DbHelper类来创建数据库对象,数据的增删查改方法。

具体代码如下:

packageinit;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

publicclassDbHelper{

privatestaticfinalStringDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";

privatestaticfinalStringURL="jdbc:

sqlserver:

//localhost:

1433;DatabaseName=Book;

integratedSecurity=TRUE;";

privateConnectionconn=null;

ResultSetrs=null;

PreparedStatementpstmt=null;

publicConnectiongetConnection()throwsException{

try{

Class.forName(DRIVER);

conn=DriverManager.getConnection(URL);

returnconn;}

catch(ClassNotFoundExceptionex){

thrownewSQLException("驱动错误或数据库连接失败");}

}

//查询语句

publicResultSetexecuteQuery(Stringsql,String[]param){

try{pstmt=conn.prepareStatement(sql);

if(pstmt!

=null){

for(inti=0;i

pstmt.setString(i+1,param[i]);}

rs=pstmt.executeQuery();}

catch(SQLExceptione){

e.printStackTrace();}

returnrs;}

//增删改操作

publicintexecuteUpdate(Stringsql,String[]param){

intnum=0;

try{pstmt=conn.prepareStatement(sql);

if(pstmt!

=null){

for(inti=0;i

pstmt.setString(i+1,param[i]);

}

num=pstmt.executeUpdate();}

catch(SQLExceptione){

e.printStackTrace();}

returnnum;

}

//关闭数据库,释放资源

publicvoidcloseAll()throwsSQLException{

if(rs!

=null){

try{rs.close();}

catch(SQLExceptione){

e.printStackTrace();}}

if(pstmt!

=null)

pstmt.close();

if(conn!

=null)

conn.close();

}

}

3.3算法设计

由于需要将数据库提取出来的结果集显示在Jlist中,而结果集的大小是不确定的,所以需要泛型ArrayList类型的集合来暂时存储结果集。

1)创建MyTableModel类,并在该类中声明一个返回类型为ArrayList的tabledata()方法,方法的作用是将征订书目表Book_information的ISBN和bookName字段的值查询出来,并存储在Book类型的集合中。

方法体如下:

publicArrayListtabledata()throwsException{

DbHelperdb=newDbHelper();

ResultSetrs=db.getConnection().createStatement().executeQuery(

"selectISBN,bookNamefromBook_information");

ArrayListbook=newArrayList(){};

while(rs.next()){

Bookbookinf=newBook(rs.getString("ISBN"),

rs.getString("bookName"));

book.add(bookinf);

}

returnbook;}

2)将集合list添加到JList中显示出来。

如JList将DefaultListModel模型填充进来,而DefaultListModel模型添加元素的方法是.addElement(),所以需要Iterator迭代器来遍历arraylist中的每个元素。

方法体如下:

ArrayListbooklist=(newMyTableModel().tabledata());

DefaultListModelm=newDefaultListModel();

Iteratorit=booklist.iterator();

while(it.hasNext())

m.addElement((it.next()).toString());

JListlist=newJList(m);

list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

scrollPane.setRowHeaderView(list);

3.4图形化界面

3.4.1登录界面

1)设计思路

登录界面作为程序的人口,即只在登录界面中书写main()方法。

登录界面有2种角色:

读者、管理员。

读者权限表和管理员权限表如下表

(1)、表

(2)

(1)读者权限表

用户名

密码

姓名

出生年月日

类型

荐购权值

0121103490201

910812

吴兆建

19910812

本科生

5

0121103490202

930401

庞文锵

19930401

本科生

5

0121103490227

111

刘文佳

19911214

研究生

7

0121103490240

700101

张骏

19700101

教师

10

(2)管理员权限表

用户名

密码

lily

222

sa

sa

sandy

111

2)源代码

由于图形用户界面控件的代码比较多,所以此处仅附上触发事件和方法。

登录界面上有2个JRadioButtonreaderid,manager;2个JButtonlogin,cancel;

●JRadioButtonreaderid,manager的触发事件代码如下:

booleanmark=true;//mark为TRUE表示读者身份,反之为管理员身份

ButtonGroupradiogroup=newButtonGroup();

radiogroup.add(readerid);radiogroup.add(manager);

//读者身份

readerid.addItemListener(newItemListener(){

publicvoiditemStateChanged(ItemEvente){

JRadioButtonreader=(JRadioButton)e.getSource();

if(reader.isSelected())

mark=true;}

});

//管理员身份

manager.addItemListener(newItemListener(){

publicvoiditemStateChanged(ItemEvente){

JRadioButtonmanager=(JRadioButton)e.getSource();

if(manager.isSelected())

mark=false;}

});

●JButtonlogin,cancel的触发事件如下:

publicvoidactionPerformed(ActionEventevent){

Objectsource=event.getSource();

if(source.equals(login))

try{

login();

}catch(Exceptione){

e.printStackTrace();

}

elseif(source.equals(cancel))

cancel();

}

●login()的作用是验证用户身份的合法性,方法体如下:

privatevoidlogin()throwsException,Exception{

Stringreadersno=txtName.getText().trim();

char[]s=txtpw.getPassword();

Stringpw=(newString(s)).trim();

if(readersno.equals("")||pw.equals(""))

JOptionPane.showMessageDialog(this,

"对不起,请输入用户名或密码","error",JOptionPane.ERROR_MESSAGE);

elseif(check(readersno,pw)){

this.dispose();

if(mark==true){

Masterframe=newMaster(readersno);

frame.setVisible(true);}

else{

Managerframe=newManager();

frame.setVisible(true);}

}

else

JOptionPane.showMessageDialog(this,"对不起,用户名或密码错误","error",JOptionPane.ERROR_MESSAGE);

}

privatebooleancheck(Stringreadersno,Stringpw)throwsException{

booleanflag=false;

Strings="";

DbHelperdb=newDbHelper();

db.getConnection();

if(mark==true)

s="selectreader_Sno,passwordfromReader_login1wherereader_Sno=?

andpassword=?

";

else

s="selectmanagerName,managerPwfromManeger_loginwheremanagerName=?

andmanagerPw=?

";

ResultSetrs=db.executeQuery(s,newString[]{readersno,pw});

if(rs!

=null&&rs.next())

flag=true;

returnflag;

}

●cancel()是清空文本框,方法体如下:

privatevoidcancel(){

txtName.setText("");

txtpw.setText("");

}

3.4.2.征订书目荐购界面(主界面)

1)设计思路

读者登录成功,将进入征订图书荐购界面。

此界面是读者通过条件ISBN或书名来快捷检索JList中显示的所有荐购书目的图书来进行荐购操作。

同时此界面也是主界面,合法用户可以通过菜单栏来跳转到不同界面。

2)源代码

由于图形用户界面的控件代码比较多,此处仅附上触发事件代码。

此征订书目荐购界面有1个菜单栏JMenuBarmenuBar,2个JButtonselect,buttonOk。

●菜单栏JMenuBarmenuBar下的每个菜单项都注册了不同的方法,代码如下:

JMenuItemzdmenuitem=newJMenuItem("征订图书荐购");

zdmenuitem.addActionListener(newActionListener()

{publicvoidactionPerformed(finalActionEvente){

Masterframe1=null;

try{

frame1=newMaster(username);//创建征订书目荐购的窗体

}catch(Exceptione1){

e1.printStackTrace();

}

frame1.setVisible(true);}});

JMenuItemzjmenuitem=newJMenuItem("我要新荐");

zjmenuitem.addActionListener(newActionListener()

{publicvoidactionPerformed(finalActionEvente){

NewRecomframe2=null;

try{

frame2=newNewRecom(username);//创建我要新荐的窗体

}catch(Exceptione1){

e1.printStackTrace();

}

frame2.setVisible(true);}});

menubook.add(zdmenuitem);

menubook.add(zjmenuitem);

JMenuItemresetpwmenuitem=newJMenuItem("修改密码");

resetpwmenuitem.addActionListener(newActionListener()

{publicvoidactionPerformed(finalActionEvente){

ResetPwframe3=null;

try{

frame3=newResetPw(username);//创建重置密码的窗体

}catch(Exceptione1){

e1.printStackTrace();

}

frame3.setVisible(true);

}});

JMenuItemexitmenuitem=newJMenuItem("退出");

exitmenuitem.addActionListener(newActionListener(){

public

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1