数据库课程快要结束了,老师让我们选择一个课题完成子系统设计,这段时间刚好在学android知识,于是花费两个星期完成了这个App,其中代码都是java完成的,下面是我做这个app的一些总结。
源程序代码及app文件下载链接https://download.csdn.net/download/jjsnsnns/20678330
产品销售管理子系统(题目)
设计本系统模拟企业在产品销售活动过程中的管理内容,包括产品与顾客管理、订货、开票、信贷状况查询、产品销售后的查询、统计等的处理情况,简化的系统需要管理的情况如下:
1、每个顾客分配唯一顾客号(cno),要反映出顾客名(cna)、地址(cad)、电话(cte)、信贷状况(cco),预付款(cpm)等信息。
2、顾客订购产品由订单反应,每张订单由订单号(sno)、订货项数(snu)、订货日期(sdrq)、交货日期(sjrq)、付款金额(sje)和若干订单细节组成。订单细节又由订单细则号(ssno)、订货产品号(pno)、数量(ssnu)等来描述。
3、产品由产品号(pno)、产品名(pna)、单价(ppr)与重量(pwe)来刻画。
4、某一顾客可任意订单,而某一订单只针对某一顾客;每一订单细节是相对某一订单来说的并只反映一种产品的订购情况,而某一产品能在不同的订单细节中出现。
根据以上信息完成如下要求:
1、请认真作系统需求分析,设计出反映本系统的E-R图(需求分析、概念设计)。
2、写出相应已设计的E-R图的关系模式,根据设计需要也可增加辅助关系模式,并找出各关系模式的关键字(逻辑设计)。
3、在你设计的关系模式基础上利用关系型数据库管理系统开发设计子系统,要求子系统能完成如下功能要求(物理设计、设施与试运行):
1)在某数据库管理系统中建立各关系模式对应的库表,并设计所需的视图、索引等。
2)能对各库表进行输入、修改、删除、添加、查询、打印等基本操作。
3)能根据顾客对产品的需求,完成一次销售订购处理,即以开发票形式完成对不同产品的订购及金额汇总。
4)能明细查询某顾户的订购情况及某产品的销售情况。
5)能统计出某顾客不同产品的总订购数量与总金额及某产品总销售数量、总销售金额。
6)能根据客户预付款、订单付款情况、订单量等来确定顾客信贷状况。
7)其他你认为子系统应有的查询、统计功能。
8)要求子系统设计得界面友好、操作方便,并适当考虑子系统在其安全性、完整性、备份、恢复等方面的功能要求。
具体实现思路
系统由八个表组成。以下为关系模式,数据类型和约束与系统实际设计有较小差别,下面会贴出系统实际建表语句。由于麻烦,像日期,电话号码,数字我都没有按照int,date,长度等类型约束,均使用了nchar(15)。可参照一篇sqlite数据类型的博客,讲了sqlite的数据类型的问题,https://blog.csdn.net/b724293918/article/details/80682764。系统还存在非空约束问题,暂时没实现。
一些设计的逻辑
数据库设计没有设置索引之类的约束。题目中的信贷状况,我没看懂是什么意思,就自己定了个规则,顾客未支付订单的比例/全部订单的比例=x。x>3,信贷状况为差,1.5<x<3,信贷状况为良,x<1.5信贷状况为优秀。
订单日期为时间函数生成,为付款日期,发货日期为订单日期延后两天,这两个数据跟程序功能没什么关系。
订单号,顾客号,管理员号都是用System.currentTimeMills()函数生成的,据说不会重复。
订单细节是指某个产品的购买情况,因此一个订单会对应多个订单细节。
我做这个App思路就分为了以下两大块功能
管理员:产品信息,顾客信息,订单信息,管理表
顾客:商城,购物车,订单,个人信息
还有登录、注册功能。
购物车功能是自己加进去的,毕竟是模拟产品销售。
总er图,管理员实体与其他实体没有联系
系统sql建表语句
管理员
Str表ing create_manager="create table if not exists manager(" +
"mno nchar(15) primary key not null,"管理员号
"mn nchar(15) ," +姓名
"mac nchar(15) unique not null,"+ 账号
"mps nchar(15) "+密码
")";
顾客表
String create_customer="create table if not exists customer(" +
"cno nchar(15) primary key not null," +顾客号
"cn nchar(15) ," +姓名
"cac nchar(15) unique not null,"+账号
"cps nchar(15) ,"+密码
"cadr nchar(15),"+地址
"ctel nchar(15) unique,"+电话
"ccrd nchar(15)"+信贷状况
")";
产品表
String create_product="create table if not exists product(" +
"pno nchar(15) primary key not null," +产品号
"pn nchar(15) ," +名称
"ppr int not null,"+价格
"pw int "+质量
")";
订单表
String create_order="create table if not exists order1 (" +
"ono nchar(15) primary key not null," +订单号
"onum int ," +订货项数
"odate nchar(15),"+订单日期
"ddate nchar(15),"+发货日期
"np int ,"+需付款金额
"ap nchar(15)"+是否付款
")";
订购表
String create_buy="create table if not exists buy(" +
"ono nchar(15) ," +订单号
"cno nchar(15) ," +顾客号
"primary key (ono),foreign key (ono) references order1 (ono),"+
"foreign key (cno) references customer (cno)"+
")";
该表为顾客和订单的联系
订单细节表
String create_detail="create table if not exists detail(" +
"dno nchar(15) primary key not null," +订单号
"pno nchar(15) ,"+产品号
"num int , foreign key (pno) references product (pno) "+产品数
")";
订单细节表
String create_odetail="create table if not exists odetail(" +
"dno nchar(15) ," +订单细节号
"ono nchar(15) ," +订单号
"primary key(dno),"+
"foreign key (dno) references detail(dno),"+
"foreign key (ono) references order1(ono)"+
")";
该表为订单和订单细节的联系
购物车表
String create_shop="create table if not exists shop(" +
"cno nchar(15) ," +顾客号
"pno nchar(15)," +产品号
"num int not null,foreign key (cno) references customer (cno)," +
" foreign key (pno) references product (pno),"+
"primary key(cno,pno)"+
")";
经过我的反复测试排除了大部分bug,之前遇到的主要bug就是用户操作后页面的数据更新问题。由于非空约束没有实现,登录注册的账号,密码可以为空,对程序功能也没太大影响。
系统内表格用到第三方库,省了我很多事https://github.com/RmondJone/LockTableView
下面贴出系统部分系统界面,系统实现了产品销售管理功能,管理员界面,顾客界面,管理表功能。
管理员界面