报刊订阅管理系统.docx
- 文档编号:9407915
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:30
- 大小:334.88KB
报刊订阅管理系统.docx
《报刊订阅管理系统.docx》由会员分享,可在线阅读,更多相关《报刊订阅管理系统.docx(30页珍藏版)》请在冰点文库上搜索。
报刊订阅管理系统
成绩
评阅人
评阅日期
计算机科学与技术系
数据库课程设计
设计题目:
报刊订阅管理系统
班级:
学号:
姓名:
指导老师:
2009年12月14-18日
一、需求分析
当今是信息化社会,信息对于人们的生活起到了举足轻重的作用,报刊是人们获得信息的重要媒介。
在报刊企业中,报刊的订阅是一件日常性的工作,企业的各级管理人员需要及时了解掌握各种报刊的销售量等信息,以便心中有数,合理安排企业经营的各个环节的工作,所以报刊订阅管理是一项非常重要的工作.
就一般报刊企业中,报刊的种类很多,各种报刊每日的印刷量和销售量是很大的,依靠手工处理来记录,既难做到及时性,也难保证数据的正确性,因而有必要建立一个报刊订阅管理系统.这一点在企业中,从主管领导、到具体的业务人员认识是一致的.因而建立新的报刊订阅管理系统在管理上是可行的.
本系统就是一个报刊订阅管理系统。
它面向所有用户,但具有比较高的安全性能。
它能够实现报刊订阅的基本功能,包括新报刊信息的录入、订阅、查询等操作。
用户合法注册后必须输入有效密码才能成功进入此系统,可以进行订阅报刊,查询信息,统计信息等操作。
对于非法操作,系统有识别和防护措施。
二、总体设计
2.1系统总体结构设计
报刊订阅管理系统主要是由登录、录入、订阅、信息查询、统计等主要模块构成。
本系统的结构功能图:
三、数据库设计
3.1概念设计
将需求分析得到的用户需求抽象为概念模型(即E-R图)。
选取需求分析中间层,逐一设计E-R图,然后集成得到总E-R图,最后通过消除不必要的冗余,设计成基本E-R图(包括实体、属性、联系类型)。
3.1.1数据抽象与局部视图设计
本系统采用E-R图(实体-关系图)的方法进行数据库概念结构设计。
系统E-R图如下所示:
图3.1总体联系
各实体属图:
用户:
图3.2用户实体属性图
管理员:
图3.3管理员实体属性图
报刊:
图3.4报刊实体属性图
关系表E-R图:
订阅:
图3.5订阅关系
3.1.2视图的集成
经过逐步细化再进行每两个一集成初步形成一个E-R图,最后得到图3.8总体概念结构E-R图:
图3.6整体E-R图
3.2逻辑设计
逻辑设计的任务就是把概念设计阶段设计好的基本E-R图转换为与选用的关系数据库所支持的数据模型相符合的逻辑结构。
首先按照E-R图向数据模型转换的规则,将概念结构转换为选用数据库所支持的数据模型;然后用关系数据库规范化理论对数据模型进行优化,使之至少达到3NF。
3.2.1E-R图向关系模型的转换
用户(用户名,真实姓名,密码,性别,联系电话,联系地址)
管理员(管理员名,密码)
报刊(报刊代号,报刊名,报刊类型,出版社,出版周期,半年订阅价)
订阅(用户名,报刊代号,订阅年限,订阅份数,总金额)
3.2.2数据模型的优化
数据模型的优化是为了提高数据库应用系统的性能,根据应用需要适当地修改、调整关系模式。
将转化的关系模式进行优化,最终达到第三范式。
3.2.3数据库的结构
(1).用户表(表consumer)
(2).管理员表(表administrator)
(3).报刊表(表magazine)
(4).订阅表(表subscribe)
3.3物理设计
根据实际应用的情况:
(1)建立一个唯一索引、一个聚簇索引;
(2)要求表和索引存储在不同的表空间里;
(3)至少建立两个以上的表空间,存放在目录容器和文件容器中。
3.3.1索引的建立
建立索引是加快查询速度的有效手段。
索引有唯一索引和聚簇索引类型:
UNIQUE表示次索引的每一个索引值,只对应唯一的数据记录,不允许表中不同的行在索引列上取相同的值。
3.3.2表空间的建立
给出表空间是用来指定数据库的物理位置的,是位于数据库和实际存放表数据的容器之间的逻辑层。
表空间有两种类型:
系统管理表空间和数据库管理表空间。
四、程序模块设计
4.1功能需求
本系统主要面向的用户有系统管理员、用户。
下面分角色对该系统的不同操作范围做说明。
本系统主要有以下功能模块:
(1)登陆功能:
登陆系统为身份验证登录。
分为管理员登录和一般用户登录。
分别通过不同的用户名和密码进入不同的报刊订阅管理界面。
(2)录入新信息功能:
对于管理员,可以进行新报刊信息的录入功能,信息一旦提交就存入到后台数据库中;普通用户自行注册进行修改个人信息。
(3)订阅功能:
用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不可订阅报刊,必须以用户身份订阅报刊。
(4)查询功能:
用户可以查询并显示自己所订阅的信息;管理员可以按用户、报刊分类查询。
(5)统计功能:
管理员可以按用户、报刊统计报刊的销售情况,并对一些重要的订阅信息进行统计;普通用户可以统计出自己的订阅情况。
(6)重新登录功能:
用户可以转换用户进行重新登录。
4.2用户界面设计
4.3程序代码设计与分析
//管理员主程序adminFrame.java
importjavax.swing.*;
importjava.awt.*;
importjavax.swing.tree.*;
importjavax.swing.event.*;
publicclassadminFrameextendsJFrame{
privateJTreejtree;
privateCardLayoutcardLayout=newCardLayout(20,10);
privateJPanelshowPanel=newJPanel(cardLayout);
publicadminFrame(){
super("管理员");
DefaultMutableTreeNoderoot=newDefaultMutableTreeNode("菜单");
DefaultMutableTreeNodeluRu=newDefaultMutableTreeNode("更新");
luRu.add(newDefaultMutableTreeNode("更新报刊信息"));
DefaultMutableTreeNodechaXun=newDefaultMutableTreeNode("查询");
chaXun.add(newDefaultMutableTreeNode("人员查询"));
chaXun.add(newDefaultMutableTreeNode("报刊查询"));
DefaultMutableTreeNodetongJi=newDefaultMutableTreeNode("统计");
tongJi.add(newDefaultMutableTreeNode("订阅信息"));
DefaultMutableTreeNodebangZhu=newDefaultMutableTreeNode("帮助");
bangZhu.add(newDefaultMutableTreeNode("关于"));
root.add(luRu);
root.add(chaXun);
root.add(tongJi);
root.add(bangZhu);
JPanelptree=newJPanel(newBorderLayout());
ptree
.add(newJScrollPane(jtree=newJTree(root)),
BorderLayout.CENTER);
JPanelluRuPanel=newluRu();
JPanelppPanel=newppSearch();
JPanelmagazineSearch=newmagazineSearch();
JPanelcc=newJPanel(newBorderLayout());
JPanelppTongji=newppTongji();
cc.add(ppTongji,BorderLayout.CENTER);
JPanelmessage=newJPanel();
message.add(newJLabel("开发人员:
wei"));
showPanel.add(message,"e");
showPanel.add(luRuPanel,"a");
showPanel.add(ppPanel,"b");
showPanel.add(magazineSearch,"c");
showPanel.add(ppTongji,"d");
JSplitPanejsp=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,ptree,
showPanel);
add(jsp);
jtree.addTreeSelectionListener(newTreeSelectionListener(){
publicvoidvalueChanged(TreeSelectionEvente){
Stringselect=e.getPath().getPathComponent(
e.getPath().getPathCount()-1).toString();
if(select.equals("关于"))
cardLayout.show(showPanel,"e");
elseif(select.equals("更新报刊信息"))
cardLayout.show(showPanel,"a");
elseif(select.equals("人员查询"))
cardLayout.show(showPanel,"b");
elseif(select.equals("报刊查询"))
cardLayout.show(showPanel,"c");
elseif(select.equals("订阅信息"))
cardLayout.show(showPanel,"d");
}
});
}
}
//更新报刊信息insertMaga.java
importjavax.swing.*;
importjava.awt.*;
importjava.util.*;
importjava.sql.*;
importjava.awt.event.*;
publicclassinsertMagaextendsJDialog{
privateJTextFieldjt1,jt2,jt3,jt4;
privateJButtonjbSure,jbCancel;
privateConnectionconnection;
privateStatementstmt;
privateJComboBoxjcb1=newJComboBox(newString[]{"报纸","杂志","其他"});
privateJComboBoxjcb2=newJComboBox(newString[]{"每天","一周","半月","一个月","半年","一年"});
publicinsertMaga(){
this(null,true);
}
publicinsertMaga(JFrameparent,booleanmodal){
super(parent,modal);
setTitle("添加新报刊");
JPanelp1=newJPanel(newFlowLayout());
p1.add(newJLabel("报刊代号:
"));
p1.add(jt1=newJTextField(6));
JPanelp2=newJPanel(newFlowLayout());
p2.add(newJLabel("\t\t\t\t报刊名:
"));
p2.add(jt2=newJTextField(6));
JPanelp3=newJPanel(newFlowLayout());
p3.add(newJLabel("报刊类型:
"));
p3.add(jcb1);
JPanelp4=newJPanel(newFlowLayout());
p4.add(newJLabel("\t\t\t\t出版社:
"));
p4.add(jt3=newJTextField(6));
JPanelp5=newJPanel(newFlowLayout());
p5.add(newJLabel("\t\t\t\t出版周期:
"));
p5.add(jcb2);
JPanelp6=newJPanel(newFlowLayout());
p6.add(newJLabel("半年订阅价:
"));
p6.add(jt4=newJTextField(6));
JPanelp7=newJPanel(newGridLayout(7,1));
p7.add(p1);
p7.add(p2);
p7.add(p3);
p7.add(p4);
p7.add(p5);
p7.add(p6);
JPanelp8=newJPanel(newFlowLayout());
p8.add(jbSure=newJButton("确定"));
p8.add(jbCancel=newJButton("取消"));
setLayout(newBorderLayout());
add(p7,BorderLayout.NORTH);
add(p8,BorderLayout.CENTER);
ActionListenerlistener=newEventListener();
jbSure.addActionListener(listener);
jbCancel.addActionListener(listener);
}
privateclassEventListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand()=="取消"){
dispose();
}
if(e.getActionCommand()=="确定"){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection=DriverManager.getConnection(
"jdbc:
odbc:
zhazhi","sa","");
stmt=connection.createStatement();
}catch(java.lang.Exceptionex){
ex.printStackTrace();
}
Stringid=jt1.getText();
Stringname=jt2.getText().trim();
Stringtype=((String)jcb1.getSelectedItem()).trim();
Stringpublisher=jt3.getText();
Stringcycle=((String)jcb2.getSelectedItem()).trim();
Stringprice=jt4.getText();
try{
Stringsql1="select报刊代号frommagazinewhere报刊代号='"+id
+"'";
ResultSetrset=stmt.executeQuery(sql1);
if(rset.next()){
JOptionPane.showMessageDialog(null,"报刊代号已经存在!
");
jt1.setText("");
}elseif(id.equals("")){
JOptionPane.showMessageDialog(null,"报刊代号不能为空!
");
}else{
Stringsql2="insertintomagazinevalues('"+id
+"','"+name+"','"+type+"','"
+publisher+"','"+cycle+"','"+price
+"')";
stmt.executeUpdate(sql2);
JOptionPane.showMessageDialog(null,"添加成功!
");
dispose();
}
stmt.close();
connection.close();
}catch(SQLExceptionex){
ex.printStackTrace();
}
}
}
}
}
//人员查询ppSearch.java
importjavax.swing.tree.*;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.sql.*;
importjavax.swing.table.*;
importjavax.swing.border.*;
publicclassppSearchextendsJPanel{
privateJButtonxianShi,renMing,zhenMing;
privateJTextFieldjt1,jt2;
privateConnectionconnection;
privateStatementstmt;
privateJTablejtable=newJTable();
privateString[]columnName={"用户名","真实姓名","密码","性别","联系电话","联系地址"};
privateDefaultTableModeltableModel=newDefaultTableModel(columnName,0){
publicbooleanisCellEditable(introw,intcolumn){
returnfalse;
}
};
publicppSearch(){
JPanelnameSearch=newJPanel(newFlowLayout());
nameSearch.add(jt1=newJTextField(10));
nameSearch.add(renMing=newJButton("检索"));
nameSearch.setBorder(newTitledBorder("按用户查询:
"));
JPanelrealNameSearch=newJPanel(newFlowLayout());
realNameSearch.add(jt2=newJTextField(10));
realNameSearch.add(zhenMing=newJButton("检索"));
realNameSearch.setBorder(newTitledBorder("按用户真名查询:
"));
JPanelbutton=newJPanel(newFlowLayout());
button.add(xianShi=newJButton("显示所有用户"));
JPanelp=newJPanel(newGridLayout(3,1));
p.add(nameSearch);
p.add(realNameSearch);
p.add(button);
setLayout(newBorderLayout());
jtable.setModel(tableModel);
jtable.getTableHeader().setReorderingAllowed(false);
add(newJScrollPane(jtable),BorderLayout.SOUTH);
add(p,BorderLayout.CENTER);
xianShi.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
connetionToDB();
try{
ResultSetrset=stmt.executeQuery("select*fromconsumer");
tableModel.setRowCount(0);
while(rset.next()){
Stringname=rset.getString
(1);
StringrealName=rset.getString
(2);
StringPW=rset.getString(3);
Stringsex=rset.getString(4);
Stringtele=rset.getString(5);
Stringaddress=rset.getString(6);
String[]rowMessage={name,realName,PW,sex,tele,
address};
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 报刊 订阅 管理 系统