资源描述
数据库课程设计报告手机进销存
告
手机进销存管理系统
软件学院 软件工程专业
姓名: 学号:
任课教师: 实验教师:
目 录
一、系统开发平台 1
二、数据库规划 2
2.1 任务陈述 2
2.2 任务目标 2
三、系统定义 2
3.1 系统边界 2
3.2 用户视图 2
四、需求分析 2
4.1 用户需求说明 2
4.1.1 数据需求 2
4.1.2 事务需求 2
4.2 系统需求说明 2
五、数据库逻辑设计 2
5.1 ER图 2
5.2 数据字典 2
5.3 关系表 2
六、数据库物理设计 3
6.1 索引 3
6.2 视图 3
6.3 安全机制 3
6.4 其它 3
七、应用程序设计 3
7.1 功能模块 3
7.2 界面设计 3
7.3 事务设计 3
八、测试和运行 3
九、总结 4
附. 参考文献 4
一、系统开发平台
题目:手机进销存管理系统
开发工具:Eclipse,sql server
数据库:sql server
操作系统:windows7
二、数据库规划
2.1 任务陈述
进销存管理系统是流程较为完整的中小型商业企业信息管理系统,包括企业的客户信息、供应商信息、银行资料信息、采购管理、销售管理、库房管理、报表管理、应收应付、报表统计、利润统计和异常处理一等一系列企业业务全方位的解决方案。
手机进销存管理系统是主要针对销售手机的中小企业的信息管理系统,主要包括手机的库存信息,出库、入库,手机销售,售后服务, 手机调价,供应商信息,各种数据的记录、查询等的解决方案。软件主要针对手机销售过程中所涉及的不同阶段分不同的功能板块进行设计,满足手机信息管理所需的数据的各种查询、增加、删除、更新等操作,方便用户使用,为用户提供所需的手机库存、销售等方面的各种信息,实现对手机进销存的管理。
2.2 任务目标
添加供应商提供的手机品牌信息
按入库日期、手机品牌或型号、供应商、手机串号查询有关库存手机信息
添加有关手机入库信息
按手机串号、品牌或型号、供应商添加出库手机信息
按手机品牌或型号、供应商、手机串号查询有关出库手机信息
添加手机销售信息
按销售日期、品牌或型号、供应商、手机串号查询销售手机信息
添加手机换机信息
添加手机退机信息
查询手机销售排行信息
添加更新手机售后信息
按品牌或型号、手机串号查询已修手机售后信息
查询未修手机售后信息
添加手机调价信息
按品牌或型号查询手机调价信息
添加新用户
修改用户密码信息
按串号查询手机状态信息
添加手机结款信息
查询手机结款信息
顾客
供应商
三、系统定义
购买手机
供应手机
3.1 系统边界
手机退机、换机
库存手机
手机入库
销售记录
手机销售
售后记录
售后登记
出库记录
手机出库
调价记录
登录用户
库存查询
售后查询
调价查询
出库查询
查询售后
结款记录
库存结款
已售结款
结款查询
3.2 用户视图
普通用户:
1.添加供应商供应的手机品牌信息
2.查询手机销售排行信息
3.查询库存手机信息
4.添加入库手机信息
5.添加出库手机信息
6.查询出库手机记录
7.添加销售手机信息
8.录入销售换机信息
9.录入销售退机信息
10.查询销售记录
11.登记售后手机信息
12.添加售后取机信息
13.查询售后手机记录
14.添加手机调价信息
15.查询手机调价记录
16.查询手机状态信息
17.录入手机结款信息
18.查询手机结款信息
19.修改用户密码
管理员:
除了具有与普通用户相同的权限外,管理员能够新增普通用户
四、需求分析
4.1 用户需求说明
4.1.1 数据需求
品牌信息:供应商,品牌
手机信息:串号,品牌,型号,颜色,结款状态,备注
机型信息:品牌,型号,键/触,机型,进价
入库信息:串号,入库日期
出库信息:串号,出库日期
销售信息:串号,售价,销售日期
换机信息:卖机串号,换机串号,换机价格
退机信息:退机串号
售后信息:售后机串号,故障
售后取机信息:取机串号
调价信息:品牌,型号,调后价格
结款信息:串号,结款日期
4.1.2 事务需求
查询销售量最多的十五部手机
按品牌、价格、键/触、机型查询符合组合条件的所有库存手机信息
添加一部准备入库的手机信息
提交插入所有准备入库的手机信息
按串号添加一部准备出库的手机信息
按品牌或型号添加多部准备出库的手机信息
按供应商添加多部准备出库的手机信息
提交删除所有准备出库的手机信息,同时添加相应的所有的出库信息
按品牌或型号查询所有的出库记录
按日期查询所有的出库记录
按串号查询一部手机的出库记录
添加一部准备销售的手机信息
提交多部准备销售的手机信息
添加一部准备换机的手机信息和一部换机的手机信息
提交一部换机手机信息
添加一部准备退机的手机信息
提交一部准备退机的手机信息
按日期、品牌、型号、供应商查询符合组合条件的销售记录信息
按串号查询一部手机的销售记录信息
添加登记一部手机的售后信息
提交一部手机的售后信息
添加一部手机的售后取机信息
提交一部手机的售后取机信息
查询所有售后待修手机的信息
查询所有售后已修手机的信息
添加一种机型的手机调价信息
提交一种机型的手机调价信息
查询手机调价记录
添加一种品牌的供应商名称
添加一部将要结款的手机信息
提交所有准备结款的手机信息
查询手机结款记录
修改一位用户的密码信息
创立一位新的用户
查询一部手机的手机状态信息
4.2 系统需求说明
1) 软件环境
软件环境需支持windows操作系统,sql server数据库
2) 初始数据库大小
大约有500部库存手机
大约有500种不同品牌和型号的机型信息
大约有10家供应商提供不同品牌的手机
至少有一名普通用户和一名管理员
其它初始信息可为零
3) 数据库增长速度
平均每天销售3-10部手机
平均每月有50部手机入库
平均每月有2-5部手机售后
平均每月有10-20部手机出库
平均每月有1-3部手机退机
平均每月有1-5部手机换机
平均每月有 1-10部手机调价
平均每月有30-50部手机结款
4) 记录查找的类型和平均数量
查询库存手机信息 每天大约20次
查询出库记录 每天大约5-10次
查询销售记录 每天大约20-30次
查询调价记录 每天大约3-10次
查询结款记录 每天大约5-10次
查询销售排行 每天大约3-5次
查询手机状态 每天大约30-50次
5) 性能
单个记录查询时间少于一秒
多个记录查询时间少于三秒
添加、删除、更新记录时间少于五秒
五、数据库逻辑设计
5.1 ER图
品牌
型号
颜色
所有手机
结款状态
库存手机
串号
入库日期
供应商
出库记录
销售记录
结款记录
售后记录
机型
调价记录
品牌
型号
调价日期
品牌
型号
键/触
机型
进价
备注
串号
出库日期
串号
售价
销售日期
入库日期
入库日期
串号
登记日期
故障
维修状态
调前
调后
串号
结款日期
入库
结款
销售
售后
结款
出库
属性
调价
机型
机型
机型
机型
机型
串号
5.2 数据字典
1.实体和联系属性
所有手机 allmobile:串号num 品牌brand 型号model 颜色color 结款状态paystate 备注remark
供应品牌 supplybrand:供应商 supplyer 品牌 brand
机型 mobilemodel:品牌 brand 型号 model 键/触 keytouch 机型 tool 进价 pricein
手机入库 storage: 串号 num 入库日期 instoragedate
手机出库 outstorage:串号 num 出库日期 outstoragedate 入库日期 instoragedate
手机销售 sell: 串号 num 售价sellprice 销售日期 selldate 入库日期 instoragedate
售后服务 aftersell: 串号 num 登记日期 checkdate 故障 faulty 维修状态 repairstate
手机调价 chprice: 品牌 brand 型号 model 调价日期 chpricedate 调前 beforech 调后 afterch
手机结款 payment: 串号 num 结款日期 paystate
用户 account: 用户名 username 密码 psw
实体
属性
类型及大小
空
Account
Username
Varchar(20)
Not null
Psw
Varchar(15)
Not null
Allmobile
Num
Varchar(15)
Not null
brand
Varchar(10)
model
Varchar(10)
color
Varchar(10)
paystate
Varchar(10)
remark
Varchar(10)
chprice
brand
Varchar(10)
model
Varchar(10)
chpricedate
date
beforech
int
afterch
int
2.属性描述
实体
属性
类型及大小
空
Mobilemodel
Brand
Varchar(10)
Not null
Model
Varchar(10)
Not null
Keytouch
Varchar(10)
Tool
Varchar(10)
Pricein
Int
Outstorage
Num
Varchar(15)
Not null
Outstoragedate
Date
Instoragedate
Date
Paymentdate
Num
Varchar(15)
Paydate
Date
Sell
Num
Varchar(15)
Sellprice
Int
Selldate
Date
Instoragedate
Date
Sellservice
Num
Varchar(15)
Checkdate
Date
Fault
Varchar(30)
Repairstate
Varchar(10)
Storage
Num
Varchar(10)
Instoragedate
Date
Supplybrand
Suplyer
Varchar(10)
Brand
Varchar(10)
5.3 关系表
六、数据库物理设计
6.1 索引
Objectname
ObjecteId
Indexname
Indexed
Averagefreebytes
allmobile
PK__allmobil__DF908D650BC6C43E
1
7511
supplybrand
0
8023.5
storage
0
8077
outstorage
0
7986
sell
0
7912
sellservice
0
8034
mobilemodel
PK__mobilemo__11841F0F1FCDBCEB
1
7734
chprice
0
8018
paymentdate
PK__paymentd__DF908D65276EDEB3
1
8039
account
PK__account__F3DBC5732C3393D0
1
8044
sysdiagrams
PK__sysdiagr__C2B05B6130F848ED
1
0
sysdiagrams
UK_principal_name
2
0
6.2 视图
本节可选。
6.3 安全机制
系统安全、数据安全
1.系统安全
为用户设置登录密码,登录时必须经过验证才可进入系统。
设有管理员,只有管理员能够新建用户。
所有用户名和密码均存在数据库中,不可擅自修改,需要验证后才能够修改密码。
2.数据安全
对于手机出库、入库、销售、售后、结款等重要的插入删除等操作均设有列表,首先将数据添加到列表中,然后进行二次确认才会进行提交。
对于入库、出库、销售等操作均排除对空数据、重复的数据、错误的数据进行插入删除查询操作。
对于空查询结果,错误查询结果均有提示。
对于重要的数据需要输入相应手机串号后进行操作。
6.4 其它
本节可选:引入受控冗余等。
由于进行手机销售,查看销售记录,手机出库,查看出库记录,手机售后,手机调价以及与供应商进行结款时都需要查看手机入库时间,因此为了避免大量的表之间的连接操作,这些表中均加入了入库时间这一列,以使查询效率更高。
七、应用程序设计
7.1 功能模块
1.主界面查询
主界面分为两块查询,为销售排行和机型推荐。销售排行列出销售量最大的15部手机。机型推荐可对手机从品牌、价格、键/触、机型几个方面进行查询。
2.库存查询
从品牌、型号、供应商、串号、入库日期等几个方面对库存手机进行查询
3.手机出/入库
分为手机入库,手机出库和出库记录三个方面。主要实现手机出入库,以及对出库信息的查询。
4.手机销售
分为手机销售,销售换机,销售退机,销售查询几个方面。实现手机销售操作,销售后能够进行换机、退机操作,以及查询销售记录。
5.手机售后
分为售后登记、售后取机,以及查询售后记录。实现手机售后方面的功能
6.手机调价
分为手机调价和查询调价记录。实现手机调价方面的功能。
7.品牌添加
能够进行手机品牌的添加以及与之对应的供应商的名称。
8.供应商结款
分为库存手机结款,已售手机结款,和查询借款记录。
9.串号追踪
主要查询手机状态,查询某串号的手机在库存还是已售,或者是已出库。
10.账户保护
用户能够修改密码,管理员能够新建用户。
7.2 界面设计
可抓几幅画面介绍。
1. 登陆界面
2.主界面
主界面分为功能表和查询两块,功能表包括程序的所有基本功能,查询分为销售排行查询和机型查询,这两个查询是常见查询与各功能模块并不相关,因此设在了主界面。
2. 品牌添加
3. 库存手机
这个界面设计时没有考虑到用户查询的方便性,而且几个查询组建位置设置不太好,需要进一步改进。
4. 手机出/入库
5.手机销售
6.手机售后
8.手机调价
9.账户保护
10.供应商结款
11.串号追踪
7.3 事务设计
关键或复杂的事务操作的设计,可附相应SQL语句进行分析介绍。
1.查询销售排行
查询销售排行对于用户及时掌握销售信息,促进手机销售有很重要的作用。包括两条主要查询语句:
r=c.executeQuery("select COUNT(distinct model) from allmobile where exists (select * from sell where allmobile.num=sell.num)");
r.next();
totlenumber=Integer.parseInt(r.getString(1));
if(totlenumber==0)
{
JOptionPane.showMessageDialog(null, "暂无销售记录!");
return;
}
r=c.executeQuery("select p.brand,p.model,q.keytouch,q.tool,COUNT(*) as number from allmobile as p,mobilemodel as q where p.brand=q.brand and p.model=q.model and exists(select * from sell where p.num=sell.num) group by p.brand,p.model,q.keytouch,q.tool order by COUNT(*) desc");
其中第一条语句查询已销售的总的手机型号数,以确保有已售手机并正确显示;第二条语句为了避免多个表的连接操作,使用了exist语句,查询出销售排行。
2.销售换机
销售换机分别涉及到两个表的插入和删除操作,需将已售机从销售记录中删除,插入到库存手机记录中,并将要换手机从库存中删除,插入到销售记录中:
c=connection.getConnection().createStatement();
c.executeUpdate("delete from sell where num='"+num1+"'");
c.executeUpdate("insert into storage(num,instoragedate) values('"+num1+"','"+eindate1+"')");
c.executeUpdate("delete from storage where num='"+num2+"'");
c.executeUpdate("insert into sell(num,sellprice,selldate,instoragedate) values('"+num2+"',"+esellprice+",'"+eselldate+"','"+eindate2+"')");
四条语句分别进行相应的插入删除操作,如果抛出异常,将进行回滚,保证数据的一致性。
3.多次添加,一次提交
对于手机入库,出库,销售,结款等常见操作,特别是手机的大批量入库,为了避免每部手机均要进行提交的麻烦,程序首先将用户输入或经过查询得到的数据显示在表格中,待用户确认后,可一起进行提交,这样就方便了用户的操作。
//首先将数据显示在表格中
s = connection1.getConnection().createStatement();
r=s.executeQuery("select * from mobilemodel where brand='"+inbrandstr+"'"+" and model='"+inmodelstr+"'");
if(!r.next())
{
s.executeUpdate("insert into mobilemodel(brand,model,keytouch,tool,pricein) values('"+inbrandstr+"','"+inmodelstr+"','"+inkeytouchstr+"','"+intoolstr+"',"+pri cein+")");
}
r.close();
mobile[0]=(String) brandb.getSelectedItem();
mobile[1]=(String) modelb.getSelectedItem();
mobile[2]=numf.getText();
mobile[3]=(String)keytouchb.getSelectedItem();
mobile[4]=(String)toolb.getSelectedItem();
mobile[5]=(String) colourb.getSelectedItem();
mobile[6]=pricef.getText();
mobile[7]=(String) stateb.getSelectedItem();
mobile[8]=remarkf.getText();
for(int i=0;i<9;i++)
{
instoragetable.setValueAt(mobile[i], number, i);
}
number++;
//将表中数据一起提交
for(int s=0;s<number;s++)
{
submitinstr[0]=(String) instoragetable.getValueAt(s,0);
submitinstr[1]=(String) instoragetable.getValueAt(s,1);
submitinstr[2]=(String) instoragetable.getValueAt(s,2);
submitinstr[3]=(String) instoragetable.getValueAt(s,5);
submitinstr[4]=(String) instoragetable.getValueAt(s,7);
submitinstr[5]=(String) instoragetable.getValueAt(s,8);
try {
si= connection1.getConnection().createStatement();
si.executeUpdate("insert into allmobile (num, brand, model, color, paystate,remark)values('"+submitinstr[2]+"','"+submitinstr[0]+"','"+submitinstr[1]+"','"+submitinstr[3]+"','"+submitinstr[4]+"','"+submitinstr[5]+"')");
si.executeUpdate("insert into storage(num,instoragedate) values('"+submitinstr[2]+"','"+yearstr+"-"+monthstr+"-"+daystr+")");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
八、测试和运行
介绍系统的测试情况,可提供几个测试用例。
可选:生成大数据量的仿真数据,进行性能测试的情况。
经过不同的错误输入,漏输测试各个部分是否给出准确提示,检测系统漏洞,而且不断完善,增强系统的健壮性。
同时在几名同学的帮助下,首先向她们讲述了系统需求和所需操作方法;然后请她们使用该系统,测试尽可能多的情况;最后根据同学的测试感受主要对系统提示方式和内容方面做出了改进。
九、总结
经验体会;系统的特色、不足(可继续完善的方面)。
编写本系统是从暑假开始,共用了一个多月的时间完成,从需求的分析到功能的设置,以及数据库的设计和界面的设计,到编码,中间发现了许多问题,也收获了一些编程的经验,虽然有不少的错误和失误的地方,但最终完成了整个系统。从中感受到了编写一个完整系统所需的步骤,也了解到了自己编程方面的不足,对于以后的变成很有帮助。
刚开始的时候以为一个手机进销存的系统编写起来会很容易,但要入手的时候才会感受到各个方面需要学习和注意的地方有很多。首先就感受到了需求分析的重要性。一开始不进行需求分析就有种无从下手的感觉,不能够很清晰的知道手机入库、出库、销售各个功能模块所需实现的功能,特别是一些细节的实现。而需求分析以后,不但各个功能的实现清晰了,数据库中所要建立的表格也很清楚。其次就是软件设计过程中应该注意的软件的健壮性问题,特别是对于重要数据的插入、删除、更新操作必须非常慎重,而且要检查数据的正确性、一致性,这对于整个系统至关重要,只有保证数据的正确才能使用户得到有用的信息,否则整个软件是没有意义的。还有就是对于数据库事务的概念有了体会,对于一些插入删除操作必须建立事务的概念,在对数据库操作失败时,应该及时回滚。
系统的特色是功能的设置考虑的比较全面,对于手机运营过程中所涉及的操作基本都有实现,因此用户操作起来会更加方便。从手机的入库、出库、销售、售后到手机的调价、结款,串号的追踪,从出入库的记录、销售的记录到调价、结款的记录的查询以及库存的各种查询,都有实现。因此说整个系统的功能相对完善。其次就是对于数据库的插入、删除、更新操作的使用相对谨慎。涉及到这些操作时,比如出入库、销售、调价、结款等,都是使用户先将这些信息添加到表格中,然后再进行两次确认,最终才会提交。这就防止了因用户的错误操作而对数据库造成不良影响。
当然系统也有一些不足的方面。最主要的就是界面的设计,有些功能的实现有一些设计多余的按钮,一些功能的界面布置不是很合理,在用户友好性方面做的不是很好。这一点实验老师给了我很多建议,我也感受到了设计中的不足,这也是我收获最大的地方之一。其次就是对于一些细节的设计还存在不足,特别是入库时没有注意到手机串号的唯一性,这是一个严重错误,这让我知道在以后的设计中多于一些重要的细节应当加以重视。
总的来说,这次课程设计对我来说是一次重要而难得的经历,也是第一次设计一个代码量相对较大的一个完整的系统。收获很多,包括一个完整软件设计的过程,数据库操作的谨慎,软件界面的友好型等等。让我知道了软件的设计过程中,编码仅是其中的一个环节,只有认真把握好软件设计中的每一个环节,才能够设计出一个好的软件。
附. 参考文献
主要的参考资料、网址。
Java编程艺术/(美) 高永强著 北京:清华大学出版社,
展开阅读全文