oracle书店图书销售管理数据库.docx
- 文档编号:11308195
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:27
- 大小:71.43KB
oracle书店图书销售管理数据库.docx
《oracle书店图书销售管理数据库.docx》由会员分享,可在线阅读,更多相关《oracle书店图书销售管理数据库.docx(27页珍藏版)》请在冰豆网上搜索。
oracle书店图书销售管理数据库
中北大学软件学院
Oracle作业
姓名:
高田田
学号:
1221010516
班级:
12210A02
设计题目:
书店图书销售系统
指导老师:
孔祥艳
书店图书销售系统
一、项目背景
随着信息时代的到来,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,网络应用越来越普遍,而且走进了千家万户,一直使用手工记账的小镇书店老板,也想购买一个图书销售系统,但想先体验一下计算机的快捷方便。
因此,设计了如下测试用例,供其初步体验!
二、系统用表
系统用表共四张,分别为:
藏书信息表(book)、进货表(stock)、出货表(sold)、用户表(users)。
藏书信息表:
用来存放书店现有图书的信息。
进货表:
用来存放书店进货信息。
出货表:
用来存放书店卖出的图书信息。
用户表:
用来存放书店员工信息。
建表:
1.藏书信息表(book)
藏书信息表(book)表1
列名
数据类型
长度
描述
bookno
varchar2
6
图书编号,定义为主键
bookname
varchar2
20
书名,唯一
species
varchar2
5
图书分类,不允许为空
bookprice
number
(7,2)
图书单价,不允许为空
publish_house
varchar2
20
出版社,不允许为空
publishdate
date
出版日期,不允许为空
author
varchar2
10
作者,不允许为空
number
number
4
藏书量,大于0
建表语句:
createtablebook
(booknovarchar2(6)primarykey,
booknamevarchar2(20)unique,
speciesvarchar2(5)notnull,
bookpricenumber(7,2)notnull,
publish_housevarchar2(20),
publishdatedate,
authorvarchar2(10)notnull,
numbersnumbercheck(numbers>=0));
修改表结构:
altertablebookmodifyspeciesvarchar2(15);
altertablebookmodifybooknamevarchar2(20);
altertablebookmodifynumbersnumber(4);
2.进货表(stock)
进货表(stock)表2
列名
数据类型
长度
描述
iono
varchar2
6
进货编号,定义为主键
bookno
varchar2
6
图书编号,定义为外键
numbers
number
进货量,大于等于0
in_price
number
进价,不能为空
in_time
date
进货时间,不能为空
建表语句:
createtablestock
(ionovarchar2(6)primarykey,
booknovarchar2(6),
numbersnumbercheck(numbers>=0),
in_pricenumbernotnull,
in_timedatenotnull,
constraintfk_stockforeignkey(bookno)referencesbook(bookno));
3.出货表(sold)
出货表(sold)表3
列名
数据类型
长度
描述
oono
varchar2
6
出货编号,定义为主键
bookno
varchar2
6
图书编号,定义为外键
numbers
number
出货量,大于等于0
out_price
number
售卖价格,不能为空
out_time
date
售卖时间,不能为空
建表语句:
createtablesold
(oonovarchar2(6)primarykey,
booknovarchar2(6),
numbersnumbercheck(numbers>=0),
out_pricenumbernotnull,
out_timedatenotnull,
constraintfk_soldforeignkey(bookno)referencesbook(bookno));
4.用户表(users)
用户表(users)表4
列名
数据类型
长度
描述
username
varchar2
10
用户名,定义为主键
password
varchar2
15
密码,不允许为空
sal
number
月薪,可以为空
comm
number
奖金,可以为空
remark
varchar2
15
用户类型,允许为空
建表语句:
createtableusers
(usernamevarchar2(10)primarykey,
passwordvarchar2(15)notnull,
salnumber,
commnumber,
remarkvarchar2(15));
三、数据初始化
1.藏书信息表插入数据
--insert语句插入
insertintobookvalues('001010','《细说PHP》','IT',109.00,'电子工业出版社',to_date('2013-04','yyyy-mm'),'高洛峰',50);
--替代变量插入--语句保存到d:
\oracle\replace_sql\insert_book.sql
acceptv_booknoprompt'编号(六位数字):
'
acceptv_booknameprompt'书名《书名》:
'
acceptv_speciesprompt'种类:
'
acceptv_bookpriceprompt'价格:
'
acceptv_phprompt'出版社:
'
acceptv_ptprompt'出版日期(yyyy-mm):
'
acceptv_authorprompt'作者:
'
acceptv_numbersprompt'库存量(>=0):
'
insertintoboss.bookvalues
('&v_bookno','&v_bookname','&v_species',&v_bookprice,'&v_ph',to_date('&v_pt','yyyy-mm'),'&v_author',&v_numbers);
执行:
startd:
\oracle\replace_sql\insert_book.sql
2.进货表插入数据
--insert语句插入
insertintostockvalues
('000001','001001',3,15.00,to_date('2014-11-07','yyyy-mm-dd'));
--替代变量插入--语句保存到d:
\oracle\replace_sql\insert_stock.sql
acceptv_ionoprompt'进货编号(六位数字):
'
acceptv_booknoprompt'图书编号(六位数字):
'
acceptv_numbersprompt'进货数量:
'
acceptv_in_priceprompt'进货价格:
'
acceptv_in_timeprompt'进货日期(yyyy-mm-dd):
'
insertintostockvalues
('&v_iono','&v_bookno',&v_numbers,&v_in_price,to_date('&v_in_time','yyyy-mm-dd'));
执行:
startd:
\oracle\replace_sql\insert_stock.sql
3.出货表插入数据
--insert语句插入
insertintosoldvalues
('000001','001002',1,25.80,to_date('2014-11-07','yyyy-mm-dd'));
--替代变量插入--语句保存到d:
\oracle\replace_sql\insert_sold.sql
acceptv_oonoprompt'出货编号(六位数字):
'
acceptv_booknoprompt'图书编号(六位数字):
'
acceptv_numbersprompt'售卖数量:
'
acceptv_in_priceprompt'售卖价格:
'
acceptv_in_timeprompt'售卖日期(yyyy-mm-dd):
'
insertintosoldvalues('&v_oono','&v_bookno',&v_numbers,&v_out_price,to_date('&v_out_time','yyyy-mm-dd'));
执行:
startd:
\oracle\replace_sql\insert_sold.sql
4.用户表插入数据
--insert语句插入
insertintousersvalues('boss','boss','','','admin');
--替代变量插入--语句保存到d:
\oracle\replace_sql\insert_users.sql
acceptv_nameprompt'用户名:
'
acceptv_pwordprompt'密码:
'
acceptv_salprompt'月薪:
'
acceptv_commprompt'奖金:
'
acceptv_remarkprompt'备注:
'
insertintousersvalues
('&v_name','&v_pword',&v_sal,&v_comm,'&v_remark');
执行:
startd:
\oracle\replace_sql\insert_users.sql
四、索引
1.由于对book表的图书的分类查找会比较频繁,所以对book表的species列建索引
createindexbook_species_idxonbook(species);
2.由于对stock表的进货量,进价,进货时间的查询会比较频繁,所以对stock表的
numbers,in_price,in_time列建索引
createindexstock_num_ip_idxonstock(numbers,in_price);
createindexstock_num_it_idxonstock(numbers,in_time);
3.由于对sold表的进货量,进价,进货时间的查询会比较频繁,所以对sold表的
numbers,out_price,out_time列建索引
createindexsold_num_op_idxonsold(numbers,out_price);
createindexsold_num_ot_idxonsold(numbers,out_time);
五、视图
视图共三个,分别为:
进货信息视图(stock_infor)、出货信息视图(sold_infor)、盈利视图(profit)。
进货信息视图:
由藏书信息表和进货表整合。
包括进货编号,图书编号,书名,类别,进价,数量,总进价。
出货信息视图:
由藏书信息表和出货表整合。
包括出货编号,图书编号,书名,类别,卖价,售卖数量,总价,售卖日期。
盈利视图:
由进货表和出货表整合。
包括图书编号,进价,卖价,数量,盈利,售卖日期。
1.进货信息视图(stock_infor)
建视图语句:
createviewstock_infor
as
selects.iono"进货编号",b.bookno"图书编号",b.bookname"书名",b.species"类别",s.in_price"进价",s.numbers"数量",s.in_price*s.numbers"总价",s.in_time"进货日期"
frombookb,stocks
whereb.bookno=s.bookno;
2.出货信息视图(sold_infor)
建视图语句:
createviewsold_infor
as
selects.oono"出货编号",b.bookno"图书编号",b.bookname"书名",b.species"类别",s.out_price"卖价",s.numbers"售卖数量",s.out_price*s.numbers"总价",s.out_time"售卖日期"
frombookb,solds
whereb.bookno=s.bookno;
3.盈利视图(profit)
建视图语句:
createviewprofit
as
selectso.bookno"图书编号",st.in_price"进价",so.out_price"卖价",so.numbers"数量",((so.out_price-st.in_price)*so.numbers)"盈利",so.out_time"售卖日期"
from(selectdistinctbookno,in_pricefromstock)st,soldso
wherest.bookno=so.bookno
orderbyso.out_time,so.bookno;
六、过程
1.输入(图书编号,增/减,数量)实现增减库存----条件选择
createorreplaceprocedurexgkc(bnovarchar2,signchar,numnumber)is
v_bnoboss.book.bookno%type;
begin
selectbooknointov_bnofromboss.bookwherebookno=bno;
ifsign='+'then
updateboss.booksetnumbers=numbers+numwherebookno=v_bno;
dbms_output.put_line(v_bno||'号图书成功增加库存'||num);
elsifsign='-'then
updateboss.booksetnumbers=numbers-numwherebookno=v_bno;
dbms_output.put_line(v_bno||'号图书成功减少库存'||num);
else
dbms_output.put_line('第二个参数只能为+/-');
endif;
exception
whenno_data_foundthen
dbms_output.put_line('库存表中不存在该图书,请修改图书编号或增加该图书信息到库存中');
end;
/
执行:
execxgkc('001002','-',1);
execxgkc('001002','+',1);
2.输入(图书类型),根据参数传递来查询图书编号,图书名称,价格----游标
createorreplaceprocedurelxcx(c1speciesvarchar2)is
typebook_record_typeisrecord(
v_noboss.book.bookno%type,
v_nameboss.book.bookname%type,
v_priceboss.book.bookprice%type);
book_no_name_pricebook_record_type;
cursorc1(c1speciesvarchar2)returnbook_no_name_priceis
selectbookno,bookname,bookpricefromboss.bookwherespecies=c1species;
begin
openc1(c1species);
loop
fetchc1intobook_no_name_price;
ifc1%foundthen
dbms_output.put_line('类型为'||c1species||',编号为'||book_no_name_price.v_no||',名称为'||book_no_name_price.v_name||',价格为'||book_no_name_price.v_price);
else
dbms_output.put_line('查询结束!
');
exit;
endif;
endloop;
closec1;
end;
/
执行:
execlxcx('IT');
3.执行过程,输出提示库存少于5的图书信息方便进货。
createorreplaceprocedurejhtxis
typebook_record_typeisrecord(
v_bnoboss.book.bookno%type,
v_bnameboss.book.bookname%type,
v_numboss.book.numbers%type,
v_sumboss.book.numbers%type);
v_no_name_num_sumbook_record_type;
cursorc1returnv_no_name_num_sumis
selectb.bookno,b.bookname,b.numbers,s.sumnumberfromboss.bookb,(select图书编号,sum(售卖数量)sumnumberfromboss.sold_inforgroupby图书编号)swhereb.bookno=图书编号andb.numbers<=5;
begin
openc1;
loop
fetchc1intov_no_name_num_sum;
ifc1%foundthen
dbms_output.put_line('图书编号'||v_no_name_num_sum.v_bno||'图书名称'||v_no_name_num_sum.v_bname||'现库存量--'
||v_no_name_num_sum.v_num||
'--已售卖--'||v_no_name_num_sum.v_sum);
else
dbms_output.put_line('查询结束!
');
exit;
endif;
endloop;
closec1;
end;
/
执行:
execjhtx;
七、函数
输入(员工姓名),求出员工年薪
createorreplacefunctiony_sal(namevarchar2)returnnumberisssalnumber;
begin
selectsal*12+nvl(comm,0)*12intossalfromboss.users
whereusername=name;
returnssal;
end;
/
调用:
varyearsalnumber
cally_sal('staff2')into:
yearsal;
printyearsal
八、包
创建一个包实现以下功能:
1.输入(图书编号,增/减,数量)实现增减库存
2.查询某类型所有图书的图书编号,图书名称和价格
3.执行过程,输出提示库存少于5的图书信息方便进货。
4.输入(员工姓名),求出员工年薪
--声明包
createorreplacepackagepkis
procedurexgkc(bnovarchar2,signchar,numnumber);
procedurelxcx(c1speciesvarchar2);
procedurejhtx;
functiony_sal(namevarchar2)returnnumber;
end;
/
--创建包体
createorreplacepackagebodypkis
procedurexgkc(bnovarchar2,signchar,numnumber)is
v_bnoboss.book.bookno%type;
begin
selectbooknointov_bnofromboss.bookwherebookno=bno;
ifsign='+'then
updateboss.booksetnumbers=numbers+numwherebookno=v_bno;
dbms_output.put_line(v_bno||'号图书成功增加库存'||num);
elsifsign='-'then
updateboss.booksetnumbers=numbers-numwherebookno=v_bno;
dbms_output.put_line(v_bno||'号图书成功减少库存'||num);
else
dbms_output.put_line('第二个参数只能为+/-');
endif;
exception
whenno_data_foundthen
dbms_output.put_line('库存表中不存在该图书,请修改图书编号或增加该图书信息到库存中');
end;
procedurelxcx(c1speciesvarchar2)is
typebook_record_typeisrecord(
v_noboss.book.bookno%type,
v_nameboss.book.bookname%type,
v_priceboss.book.bookprice%type);
book_no_name_pricebook_record_type;
cursorc1(c1speciesvarchar2)returnbook_no_name_priceis
selectbookno,bookname,bookpricefromboss.bookwherespecies=c1species;
begin
openc1(c1species);
loop
fetchc1intobook_no_name_price;
ifc1%foundthen
dbms_output.put_line('类型为'||c1species||',编号为'||book_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 书店 图书 销售 管理 数据库