报刊订阅管理系统 课程设计.docx

上传人:b****4 文档编号:24262451 上传时间:2023-05-25 格式:DOCX 页数:29 大小:457.97KB
下载 相关 举报
报刊订阅管理系统 课程设计.docx_第1页
第1页 / 共29页
报刊订阅管理系统 课程设计.docx_第2页
第2页 / 共29页
报刊订阅管理系统 课程设计.docx_第3页
第3页 / 共29页
报刊订阅管理系统 课程设计.docx_第4页
第4页 / 共29页
报刊订阅管理系统 课程设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

报刊订阅管理系统 课程设计.docx

《报刊订阅管理系统 课程设计.docx》由会员分享,可在线阅读,更多相关《报刊订阅管理系统 课程设计.docx(29页珍藏版)》请在冰豆网上搜索。

报刊订阅管理系统 课程设计.docx

报刊订阅管理系统课程设计

1.开发环境和相关技术介绍

1.1开发环境

数据库系统:

SQLServer2000

编程语言:

JAVA

数据库连接方式:

JDBC

开发工具:

Eclipse3.2

1.2相关技术介绍

MicrosoftSQLServer2000数据库管理系统支持并扩展了SQL语言标准,可以运用标准SQL语句对数据进行操作,也可以使用功能强大的GUI工具进行灵活的数据管理。

Eclipse:

功能强大的应用程序开发工具,主要支持基于Java语言的各种开发项目。

JDBC连接方式:

Java与数据库系统的一种连接方式,Java程序使用JDBCAPI与数据库进行通信,并用它操作数据库中的数据。

JDBCAPI使Java程序与具体数据库系统独立开来,保证了Java程序高度的可移植性。

2.需求分析

2.1系统需求和功能

设计一个报刊订阅应用系统,使系统满足以下功能和需求:

1)

a一个订户可订多种报刊;一种报刊可被多个用户订阅;订单只能订阅现有报刊目录内容;

b投递时,必须根据订单的情况进行投递,不得超出订单的订阅品种、数量;

2)、系统功能包括:

a订户管理:

订户添加、修改、删除、查询;

b 目录管理:

目录添加、修改、删除、查询;

c订单管理:

完成订户订阅数据的管理(包括添加、修改、删除、查询);

d统计查询:

按报刊目录统计各类报刊的订阅数量及金额;

e帐号管理:

增加管理帐号、删除帐号。

2.2数据字典

2.2.1数据结构

管理员用户=管理员帐户+管理员密码

订户=订户编号+订户名+联系电话+联系地址

目录=目录编号+目录名+单价+批注信息

订单=订单号+订户编号+下订日期

订单细节=订单号+目录编号+订户编号+订阅数量+订阅期数+单价+总价+下订日期

2.2.2数据项

表2.1数据项表

编号

标识符

类型

长度

所属表名

同义名

1

UName

Varchar

20

Login

管理员帐户

2

UPassword

Varchar

20

Login

管理员密码

3

Cid

Varchar

10

Customer,OrderDetail

订户编号

4

Cname

Varchar

20

Customer

订户名

5

Phone

Varchar

15

Customer

联系电话

6

Address

Varchar

50

Customer

联系地址

7

Did

Varchar

10

Diretory,OrderDetail

目录编号

8

Dname

Varchar

20

Diretory

目录名

9

UnitPrice

Float

8

Diretory、OrderDetail

目录单价

10

Ifo

Varchar

50

Diretory

批注信息

11

Ono

Varchar

10

Order,OrderDetail

订单编号

12

Quantity,

Int

4

OrderDetail

订阅数量

13

QiShu,

Int

4

OrderDetail

订阅期数

14

Total

Float

8

OrderDetail

订单项总价

15

Odate

Datetime

8

OrderDetail

下订日期

2.2.3数据流

表2.2数据流表

编号

名称

来源

去向

组成

1

身份信息

系统管理员

应用系统

管理员帐户+密码

2

授权信息

应用系统

系统管理员

3

错误身份信息

应用系统

系统管理员

4

查询请求

系统管理员

应用系统

待查询对象识别符(如Cid,Ono)

5

查询结果

应用系统

系统管理员

被查询对象具体信息

6

管理请求

系统管理员

应用系统

识别符(Cid,Ono等)+管理类型

7

管理结果信息

应用系统

系统管理员

被管理对象处理结果

8

非法请求

应用系统

系统管理员

非法请求提示信息

2.3安全性要求

访问数据库时需要输入登陆帐号和密码。

在数据库内设有管理员表,登陆系统时会要求输入管理员帐号和密码。

登陆模块根据输入帐号和密码查管理员表,查到匹配记录则允许其登陆系统。

管理员帐号和密码可以在系统中添加和修改。

2.4一致性要求

在管理系统相关的表之间,有较强的关联性。

为了实现一致性的需求,各个表之间均建立起了相应的一致性约束。

2.5完整性要求

数据库各个表设置了实体完整性、参照完整性。

防止了数据表中存在不正确的数据。

 

3.数据库设计

3.1设计方法和步骤

采用自底而上的设计方法。

先自顶向下地进行需求分析,对报刊订阅管理系统的需求进行逐步细化;然后再自底而上地设计概念结构,最终将各个局部应用的概念结构集合成为全局概念结构。

3.2概念结构E-R图

通过对局部应用的选择,逐一设计出分E-R图,并对各个分E-R图进行合并,生成初步E-R图,消除不必要的系统冗余,可以得出以下报刊订阅管理系统E-R图。

报刊订阅管理系统E-R图

4.逻辑结构设计

4.1关系模式设计与优化

4.1.1关系模式设计

根据概念结构的设计,可以将系统E-R图转换为以下关系模式:

Login(UName,UPassword)

Customer(Cid,Cname,Phone,Address)

Diretory(Did,Dname,UnitPrice,Ifo)

OrderDetail(Ono,Did,Cid,Quantity,QiShu,UnitPrice,Total,Odate)

Foreignkey:

Ono,Did

4.1.2优化分析

对上面关系模式进行分析可知:

表Customer、Diretory、Login都属于BCNF范式,在数据操作性能和存储空间的利用率上都比较高。

表OrderDetail:

(Ono,Did)Quantity,

(Ono,Did)QiShu,

(Ono,Did)UnitPrice,

(Quantity,QiShu,UnitPrice)Total,

(Ono,Did)Total.

将Total作为一个属性独立出来有利于统计和查询,减少反复运算操作。

4.2系统结构图

4.3系统完整性设计

Login(UName,UPassword)

其中(UName,UPassword)为主码。

Customer(Cid,Cname,Phone,Address)

其中:

Cid为主码,Cid,Cname,Phone,Address约束为非空

Diretory(Did,Dname,UnitPrice,Ifo)

其中:

Did为主码,Dname,UnitPrice,Ifo约束为非空

OrderDetail(Ono,Did,Cid,Quantity,QiShu,UnitPrice,Tota,Odate)

其中:

(Ono,Did)为主码,Cid和Did分别为外码(参照分别为:

Customer(Cid)和Diretory(Did)).

Quantity,QiShu,UnitPrice,Tota,Odate分别约束为非空

 

5.数据库物理设计

5.1索引的建立

由于系统可能要涉及大量数据的操作,所以索引的建立就成为一种必需。

本系统采用B+树索引方法,分别在各Customer,Diretory和OrderDetail各个表的主键上建立索引。

5.2数据存放位置

本系统所有数据和索引均存放在磁盘中。

5.3模块设计

5.3.1登录模块

5.3.2管理功能模块

5.3.3管理帐号模块

5.3.4查询模块

 

6.数据库实施

6.1各数据表说明

编号

数据表名称

类型

内容

01

Login

辅助表

记录管理员帐号,密码

02

Customer

主表

记录订户信息

03

Diretory

主表

记录目录信息

05

OrderDetail

主表

记录详细订单项信息

 

6.2数据库创建

6.2.1Powerdesigner建模

用powerdesigner根据E-R图建立概念模型。

转换成物理模型:

6.2.2SQLserver2000建立数据库

在SQLSERVER2000上新建一个数据库,再建立一个数据源,把数据源指向新建的数据库。

 

6.2.3powerdesigner连接数据库,建立数据表。

如图:

6.3数据库备份和恢复方案

6.3.1应用辅助工具进行备份和恢复

应用数据库进行备份,选择所需要备份的数据库和目标地址即可进行数据备份,恢复数据库只需要指定备份文件和需要恢复的数据库即可进行数据恢复。

6.3.2分离数据库法

在企业管理器中右击需要备份的数据库,选择“所有任务”,“分离数据库”,执行分析操作,拷贝数据库MDF文件和LDF文件。

恢复方案:

在企业管理器的控制台树中选择“数据库”节点,右击,“所有任务”,“附加数据库”,找到待恢复数据库的MDF文件,确定。

 

 

7.用户界面设计和应用程序代码

7.1用户界面设计

这个系统的用户界面运用了JavaSwing编写,由一个主界面跟五个辅助界面构成。

7.2类文件功能描述

NO

类名

类型

功能

01

myframe

Frame

主界面类,提供各个功能的接口

02

Connectdatabase

辅助类

调用该类连接数据库

03

SimpleTable

Frame

实现对目录的管理,包括增、删、改、查

04

DHTable

Frame

实现对订户的管理,包括增、删、改、查

05

DDxinxi

Frame

实现对订单的管理,包括增、删、改、查

06

LG

Frame

管理员登陆对话框,提供登陆界面,检查登陆信息

07

addadmin

Frame

添加一个管理帐号

08

deleteadmin

Frame

删除一个管理帐号

09

orderdetail

Frame

显示所有订户的订单,订单的详细信息

7.3主要代码分析(选取了三个类的主要代码)

//------------------------------------------------------------------------

//所属类:

Connectdatabase

//功能:

取得应用程序与数据库系统的连接

publicclassConnectdatabase{

privateConnectionconn;

publicStatementstmt;

publicStatementConnect(){

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

conn=DriverManager.getConnection("jdbc:

odbc:

BKDY","sa","");stmtconn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

}

catch(Exceptione){

System.out.println("异常:

"+e.getMessage());

}

returnstmt;

}

}

//------------------------------------------------------------------------

//所属类:

orderdetail

//功能:

显示所有订户的订单详细信息,

publicclassorderdetailextendsJFrame

{staticDefaultTableModeldata;

JTabletable;

publicorderdetail()

{super("订单统计列表");

setSize(800,500);

setVisible(true);

setResizable(false);

Containerc=getContentPane();

c.setLayout(newFlowLayout());

String[]s={"订单编号","目录名字","订户名字","订阅数量","订单总价","下定日期","订户电话","联系地址"};

data=newDefaultTableModel(s,0);

table=newJTable(data);

table.setEnabled(false);

table.setPreferredScrollableViewportSize(newDimension(700,400));

table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);

JScrollPanesp=newJScrollPane(table);

c.add(sp);

try{

DatabaseDB=newDatabase();

DB.OpenConn();

Stringsql1="select*fromOrderDetail";

ResultSetrs1=DB.executeQuery(sql1);

while(rs1.next()){

Stringsql0="select*fromDiretorywhereDid='"+rs1.getString("Did")+"'";

ResultSetrs0=DB.executeQuery(sql0);

rs0.next();

Stringsql2="select*fromCustomerwhereCid='"+rs1.getString("Cid")+"'";

ResultSetrs2=DB.executeQuery(sql2);

rs2.next();

StringOno=rs1.getString("Ono");

StringDname=rs0.getString("Dname");

StringCname=rs2.getString("Cname");

StringQuantity=rs1.getString("Quantity");

StringOdate=rs1.getString("Odate");

StringPhone=rs2.getString("Phone");

StringAddress=rs2.getString("Address");

StringTotal=rs1.getString("Total");

String[]str={Ono,Dname,Cname,Quantity,Total,Odate,Phone,Address};

data.addRow(str);}

}

catch(Exceptione){

System.out.println(e);

}

setVisible(true);

setLocation(150,150);

}

}

//------------------------------------------------------------------------

//所属类:

myframe

//功能:

用户系统界面,提供各种功能的接口

publicclassmyframeextendsJFrameimplementsActionListener

{

MenuBarmb;

Menum1,m2,m3,m4,m5;

Labellb1=newLabel("报刊订阅管理系统",Label.CENTER);

Labellb4=newLabel("计算机06-2班组员:

周锦佩、邱沛志、朱荣辉",Label.CENTER);

Labellb3=newLabel("数据库课程设计",Label.CENTER);

MenuItemmi1,mi3,mi4,mi7,mi8,mi10,mi11;

myframe()

{

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setTitle("报刊订阅管理系统");

mb=newMenuBar();

m1=newMenu("目录管理");

m2=newMenu("订单管理");

m3=newMenu("订户管理");

m4=newMenu("帐号管理");

m5=newMenu("系统");

mb.add(m1);mb.add(m3);mb.add(m2);mb.add(m4);mb.add(m5);

mi1=newMenuItem("目录管理");mi3=newMenuItem("关于系统");

mi4=newMenuItem("订单管理");mi11=newMenuItem("订单统计");

mi7=newMenuItem("增加管理员");mi8=newMenuItem("删除管理员");

mi10=newMenuItem("订户管理");

m1.add(mi1);m3.add(mi10);m2.add(mi4);m2.add(mi11);

m4.add(mi7);m4.add(mi8);m5.add(mi3);

finalContainercon=this.getContentPane();

con.add(lb1);

con.add(lb3);con.add(lb4);

con.setLayout(newGridLayout(4,1,1,1));

lb1.setFont(newFont("黑体",Font.BOLD,40));

lb1.setForeground(Color.blue);

lb1.setBounds(newRectangle(16,13,93,28));

lb3.setFont(newFont("黑体",Font.BOLD,25));

lb3.setForeground(Color.black);

lb4.setFont(newFont("黑体",Font.BOLD,20));

lb4.setForeground(Color.black);

mi1.addActionListener(this);

mi3.addActionListener(this);

mi4.addActionListener(this);

mi7.addActionListener(this);

mi8.addActionListener(this);

mi10.addActionListener(this);

mi11.addActionListener(this);

this.setMenuBar(mb);

setBounds(300,300,460,300);

setVisible(true);

setResizable(false);

setSize(700,500);

setLocationRelativeTo(null);

}

////鼠标事件

publicvoidactionPerformed(finalActionEvente)

{

if(e.getSource()==mi1)//目录查询

{

newSimpleTable();

}

elseif(e.getSource()==mi3)//关于系统

{

JOptionPane.showMessageDialog(null,"系统名称:

报刊订阅管理系统","关于系统",JOptionPane.INFORMATION_MESSAGE);

}

elseif(e.getSource()==mi4)//订单查询

{newDDxinxi();

}

elseif(e.getSource()==mi7)//增加管理员

{

newaddadmin();

}

elseif(e.getSource()==mi8)

{

newdeleteadmin();//删除管理员

}

elseif(e.getSource()==mi10)///订户管理

{newDHTable();

}

elseif(e.getSource()==mi11){//订单统计

neworderdetail();

}

}

 

8.系统测试报告

8.1登录测试

双击可执行文件BKDY.jar打开应用系统,可见登陆界面;

当输入错误帐号密码时弹出错误对话框,只有输入了正确的帐号密码才能登录到主界面。

当输入空帐号空密码时则提示输入错误。

如下面两幅图:

8.2目录管理功能测试

8.2.1添加目录

在相应输入框内输入所要添加的目录的信息,点击“插入”,相关目录信息则插入到数据库中,并通过表格显示出来。

同时输入框清空,等待下次目录信息的添加。

如图:

 

8.2.2修改目录

在修改目录框中,输入要修改目录的编号,按“查询”即可把该目录所有信息查出来(如左图),点击“修改”即可对目录信息进行修改(如右图)。

最后确定,即可把修改后信息放进数据库中,并从表格显示出来,同时输入框清空,等待下次的修改:

8.2.3删除目录

如上图,输入目录编号查询可以查询所要删除目录的名字。

点击“删除”可以把该目录删除掉。

输入框清空等待下一次的删除操作:

8.2.4按目录编号查询

8.2.5按目录名字查询

输入要查询目录的名字,点击“查询”便可以显示出所查询目录的所有信息:

 

8.3订户管理功能测试

8.3.1添加订户(参考“目录管理”,操作基本类似,略)

8.3.2删除订户(参考“目录管理”,操作基本类似,略)

8.3.3修改订户(参考“目录管理”,操作基本类似,略)

8.3.4按编号查询订户(参考“目录管理”,操作基本类似,略)

8.3.5按名字查询订户(参考“目录管理”,操作基本类似,略)

订户管理界面如图:

订单管理界面:

8.4订单管

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

当前位置:首页 > IT计算机 > 互联网

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

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