数据库课程设计 网上图书销售系统数据库课程设计报告.docx
《数据库课程设计 网上图书销售系统数据库课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据库课程设计 网上图书销售系统数据库课程设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
数据库课程设计网上图书销售系统数据库课程设计报告
数据库系统原理及其应用教程
课程设计报告
题目名称:
网上图书销售系统
姓名:
学号:
2012年6月3日
摘要
随着计算机的普及书店规模的不断扩大,使图书销售管理成为书店管理中的一个重要课题。
通过图书销售管理系统可以解决书店管理中遇到的各种问题。
本系统分析了市场需求和实际需要,利用MyEclipse8.5连接SQL数据库的方式,主要实现了书店的网上图书销售管理,该系统具有处理图书录入、图书销售、图书查询、图书统计等功能。
1引言
传统的图书销售管理方法,都是通过人工统计和计算的管理方式进行的。
这样的管理方法不但费时费力,也容易产生计算上的错误和疏漏;计算机技术的全面普及,打破了书店管理的传统管理方法,提高了管理效率的同时,克服了传统管理方法中易产生的问题,使管理员能够有序的、全面的对图书销售和库存进行管理。
网上图书销售系统可以完成书店的日常管理,如图书录入、图书销售、图书查询、图书统计等功能,迅速准确地对已售图书和剩余库存进行统计和汇总工作,大大提高了书店的管理效率和准确性。
2需求分析
2.1功能需求
2.1.1待开发软件的功能需求
本系统是根据书店的实际需求而开发的,要求稳定、可靠的实现图书销售的自动化管理,通过本系统可以达到以下目标:
1.图书录入,包括图书的基本信息,如分类、进价、售价、作者等。
2.图书销售,包括图书的类型、书名、售价、销售日期。
3.图书销售,包括按图书类型、书名、作者、出版日期等进行处理。
4.查询图书,对指定的某本图书进行查询。
5.图书统计,对已售完剩余图书进行查询。
2.1.2待开发软件的功能
按照用户需求,要满足以上功能,我设计出了图书销售管理系统的系统功能图,如图2.1所示。
图2.1图书销售管理系统的系统功能图
综合系统要求,对图2.1所示的系统功能解释如下:
图书录入,包括图书的基本信息,如分类、进价、售价、作者等。
图书销售,包括图书的类型、书名、售价并实现对数据库的修改。
图书查询,对图书按书名进行查询。
图书统计,对指定的某本图书剩余库存量进行统计。
客户图书浏览,对剩余图书进行查询浏览。
通过以上分析,可以得到仓库管理系统的数据流图,如图2.2所示。
图2.2图书管理系统的数据流图
2.2数据库描述
本软件采用SQL数据库。
3概要设计
本系统是根据书店的实际需求而开发的,完全能够帮助书店实现高效、准确的图书销售自动化管理。
在分析阶段,我们已经提出了系统的结构和数据字典。
本节我们将对系统的使用环境作简要介绍,并对该系统作概要设计。
3.1系统运行环境
PC机
Windows操作系统
MyEclipse8.5
3.2系统功能模块设计
在前面系统功能分析的基础上,结合MyEclipse8.5程序编制的特点,得到如图3.1所示的系统功能模块图。
图3.1图书销售管理系统功能模块图
各模块功能分配如下:
(1)用户登陆功能:
管理员登陆模块(M1)。
(2)图书录入功能:
图书录入模块(M2)。
(3)图书销售功能:
图书销售模块(M3)。
(4)图书查询功能:
图书查询模块(M4)。
(5)图书统计功能:
图书统计模块(M5)。
(6)客户图书浏览功能:
客户图书浏览模块(M6)。
3.3系统处理流程
(1)系统启动,进入身份验证。
(2)初始化系统,导入数据库。
(3)录入图书信息。
(4)图书销售。
(5)查询图书信息。
(6)统计图书信息。
(7)返回登陆界面
(8)顾客身份登录
(9)浏览图书信息
(10)退出系统。
3.4接口设计
3.4.1外部接口
(1)用户界面
采用图形用户界面,包含菜单、按钮、对话框等元素。
(2)软件接口
软件运行于MyEclipse8.5平台上。
(3)硬件接口
运行于PC机上。
3.4.2内部接口
(1)用户登陆模块(M1):
由相应事件驱动消息激活,完成用户登陆功能,之后进入消息循环状态。
(2)图书销售模块(M3):
由相应事件驱动消息激活,完成图书销售功能,之后进入消息循环状态。
(3)图书查询模块(M4):
由相应事件驱动消息激活,完成销售统计功能,之后进入消息循环状态。
(4)图书统计模块(M5):
由相应事件驱动消息激活,完成查询库存功能,之后进入消息循环状态。
(5)顾客图书浏览模块(M6):
由相应事件驱动消息激活,完成售完图书查询功能,之后进入消息循环状态。
4详细设计
该系统采用MyEclipse8.5中的MFC连接SQL数据库的方式,使用图形用户界面,主要实现图书录入、图书销售等功能。
下面具体对各模块进行介绍。
4.1登录模块及主界面
在登录界面(如图4.1所示)中输入用户名和密码,登录成功后进入主界面。
登陆框流程图如图4.2所示,系统主界面如图4.3所示,单击某个按钮就能弹出某个功能的界面。
图4.1系统登录界面
图4.2登录模块流程图
4.2图书录入模块
4.2.1实现目标
图4.4图书录入对话框
图4.5流程图
4.2.2设计步骤
(1)将书店管理中心的“购入”按钮与新书注册界面通过监听器进行连接,通过“购入”按钮响应注册功能。
(2)设计好注册界面后,将界面上的操作与SQL上数据库进行连接,通过SQL语言向表中插入信息而不影响其他变化。
4.2.3代码分析
(1)添加代码如下:
classGRextendsJFrameimplementsActionListener
{
JPanelp,p1,p2;
JLabelsl,sm,zz,jj,sj,rq;
Choicechoice;
JTextFieldt1,t2,t3,t4,t5;
JButtonb1,b2;
publicGR(Stringstr)
{
super(str);
p=newJPanel();
p1=newJPanel();
p2=newJPanel();
sl=newJLabel("书类:
");
sm=newJLabel("书名:
");
zz=newJLabel("作者:
");
jj=newJLabel("进价:
");
sj=newJLabel("售价:
");
rq=newJLabel("出版日期:
");
choice=newChoice();
choice.add("文学");
choice.add("艺术");
choice.add("自然科学");
choice.add("社会科学");
choice.add("其它");
t1=newJTextField(10);
t2=newJTextField(10);
t3=newJTextField(5);
t4=newJTextField(5);
t5=newJTextField(10);
b1=newJButton("确定");
b2=newJButton("返回");
p.add(sl);
p.add(choice);
p.add(sm);
p.add(t1);
p.add(zz);
p.add(t2);
p1.add(jj);
p1.add(t3);
p1.add(sj);
p1.add(t4);
p2.add(rq);
p2.add(t5);
p2.add(b1);b1.addActionListener(this);
p2.add(b2);b2.addActionListener(this);
p.setLayout(newGridLayout(0,2));
p1.setLayout(newFlowLayout());
p2.setLayout(newGridLayout(0,2));
add(p,"North");
add(p1,"Center");
add(p2,"South");
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==b1)
{
Connectioncon;
Stringsql;
Statementstmt;
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=test";
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(java.lang.ClassNotFoundExceptione1){
e1.printStackTrace();
}
try{
con=DriverManager.getConnection(url,"xyx","19900929");
stmt=con.createStatement();
sql="INSERTINTO总表库(书名,作者,进价,售价,出版日期,类型)VALUES('"+t1.getText()+"','"+t2.getText()+"','"+t3.getText()+"','"+t4.getText()+"','"+t5.getText()+"','"+choice.getSelectedItem()+"')";
intflag=stmt.executeUpdate(sql);
if(flag>0)
{
JOptionPane.showMessageDialog(this,"恭喜你!
添加成功!
");
}
stmt.close();
con.close();
}catch(SQLExceptione2){
e2.printStackTrace();
}
}
if(e.getSource()==b2)
{
this.dispose();
GLYgly=newGLY("书店管理中心");
gly.setSize(450,400);
gly.setVisible(true);
}
}
}
4.3图书销售模块
4.3.1实现目标
实现图书销售功能,流程图如图4.7所示。
图4.6图书销售对话框
图4.7流程图
4.3.2实现步骤
1)将书店管理中心的“售出”按钮与图书售出界面通过监听器进行连接,通过“售出”按钮响应售出功能。
(2)设计好销售界面后,将界面上的操作与SQL上数据库进行连接,通过SQL语言从表中删除信息而不影响其他变化。
表4.2图书销售添加Dialog资源属性设置
4.3.3代码分析
(1)为“销售”按钮添加代码,实现图书销售功能,代码如下:
classSCextendsJFrameimplementsActionListener
{
JPanelp;
JLabelsl,sm,sj;
Choicechoice;
JTextFieldt1,t2;
JButtonb1,b2;
publicSC(Stringstr)
{
super(str);
p=newJPanel();
p.setLayout(newGridLayout(0,2,5,5));
sl=newJLabel("书类:
");
sm=newJLabel("书名:
");
sj=newJLabel("售价:
");
choice=newChoice();
choice.add("文学");
choice.add("艺术");
choice.add("自然科学");
choice.add("社会科学");
choice.add("其它");
t1=newJTextField(10);
t2=newJTextField(10);
b1=newJButton("确定");
b2=newJButton("返回");
p.add(sl);
p.add(choice);
p.add(sm);
p.add(t1);
p.add(sj);
p.add(t2);
p.add(b1);b1.addActionListener(this);
p.add(b2);b2.addActionListener(this);
add(p);
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==b1){
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=test";
Connectioncon;
Stringsql;
Statementstmt;
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(java.lang.ClassNotFoundExceptione1){
e1.printStackTrace();
}
try{
con=DriverManager.getConnection(url,"xyx","19900929");
stmt=con.createStatement();
sql="DELETEFROM总表库WHERE(书名='"+t1.getText()+"')";
intflag=stmt.executeUpdate(sql);
if(flag>0)
{
JOptionPane.showMessageDialog(this,"恭喜你!
售出成功!
");
}
stmt.close();
con.close();
}catch(SQLExceptione2){
e2.printStackTrace();
}
}
if(e.getSource()==b2){
this.dispose();
GLYgly=newGLY("书店管理中心");
gly.setSize(450,400);
gly.setVisible(true);
}
}
}
4.4图书查询模块
4.4.1实现目标
实现对已销售的图书进行统计的功能,销售统计对话框如图4.8所示。
图4.8销售统计对话框
4.4.2设计步骤
1)将书店管理中心的“查询”按钮与查询图书界面通过监听器进行连接,通过“查询”按钮响应查询功能。
(2)设计好图书查询界面后,将界面上的操作与SQL上数据库进行连接,通过SQL语言从表中查询信息而不影响其他变化。
4.4.3代码分析
代码如下:
classCXextendsJFrameimplementsActionListener
{
JPanelp;
JLabelsm;
publicstaticJTextFieldtt;
JButtonb1,b2;
publicCX(Stringstr)
{
super(str);
p=newJPanel();
p.setLayout(newFlowLayout(FlowLayout.CENTER,10,20));
sm=newJLabel("书名");
tt=newJTextField(10);
b1=newJButton("确定");
b2=newJButton("返回");
p.add(sm);
p.add(tt);
p.add(b1);b1.addActionListener(this);
p.add(b2);b2.addActionListener(this);
add(p);
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==b1)
{
this.dispose();
CXTSts=newCXTS("查询结果");
ts.setSize(500,300);
ts.setVisible(true);
}
if(e.getSource()==b2)
{
this.dispose();
GLYgly=newGLY("图书店管理中心");
gly.setSize(450,400);
gly.setVisible(true);
}
}
}
classCXTSextendsJFrameimplementsActionListener
{
JPanelp;
JButtonb1;
MyTableModel18mt;
JTablet;
JScrollPanes;
publicCXTS(Stringstr){
super(str);
setLayout(newBorderLayout());
mt=newMyTableModel18();
t=newJTable(mt);
s=newJScrollPane(t);
p=newJPanel();
p.setLayout(newFlowLayout(FlowLayout.CENTER,110,10));
b1=newJButton("返回上级");
b1.addActionListener(this);
p.add(b1);
add(p,"South");
add(s,"Center");
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==b1){
this.dispose();
GLYgly=newGLY("书店管理中心");
gly.setSize(450,400);
gly.setVisible(true);
}
}
}
classMyTableModel18extendsAbstractTableModel{
Stringsm,zz,sj,rq,lx;
finalString[]columnNames={"书名","作者","售价","出版日期","类型"};
Object[][]data=newObject[100][5];
publicMyTableModel18(){
intm=0;
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=test";
Connectioncon;
Stringsql;
Statementstmt;
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(java.lang.ClassNotFoundExceptione){
}
try{
con=DriverManager.getConnection(url,"xyx","19900929");
stmt=con.createStatement();
sql="SELECT*FROM总表库WHERE书名='"+CX.tt.getText()+"'";
ResultSetrs=stmt.executeQuery(sql);
while(rs.next()){
sm=rs.getString
(1);
zz=rs.getString
(2);
sj=rs.getString(3);
rq=rs.getString(4);
lx=rs.getString(5);
data[m][0]=sm;data[m][1]=zz;data[m][2]=sj;data[m][3]=rq;data[m++][4]=lx;
}
stmt.close();
con.close();
}catch(SQLExceptione){
}
}
publicintgetColumnCount(){
returncolumnNames.length;
}
publicintgetRowCount(){
returndata.length;
}
publicStringgetColumnName(intcol){
returncolumnNames[col];
}
publicObjectgetValueAt(introw,intcol){
returndata[row][col];
}
publicvoidsetValueAt(Objectvalue,introw,intcol){
System.out.println("Newvalueofdata:
");
intnumRows=getRowCount();
intnumCols=getColumnCount();
for(inti=0;iSystem.out.print("row"+i+":
");
for(intj=0;jSystem.out.print(""+data[i][j]);
}System.out.println();
}System.out.println("----------------------");
}
}
4.5图书统计模块
4.5.1实现目标
实现对已销售的图书进行统计的功能,销售统计对话框如图4.9所示。
图4.9查询库存对话框
4.5.2设计步骤
1)将书店管理中心的“统计”按钮与图书统计界面通过监听器进行连接,通过“统计”按钮响应图书浏览功能。
(2)设计好图书查询界面后,将界面上的操作与SQL上数据库进行连接,通过SQL语言从表中查找统计信息而不影响其他变化。
4.5.3代码分析