版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-. z.中北大学软件学院Oracle作业姓 名:高田田学 号:1221010516班 级:12210A02设计题目:书店图书销售系统指导教师:孔祥艳目录TOC o 1-2 h u HYPERLINK l _Toc10339 一、 工程背景 PAGEREF _Toc10339 1 HYPERLINK l _Toc1961 二、 系统用表 PAGEREF _Toc1961 1 HYPERLINK l _Toc2401 1. 藏书信息表(book) PAGEREF _Toc2401 1 HYPERLINK l _Toc16523 2. 进货表(stock) PAGEREF _Toc16523 2
2、HYPERLINK l _Toc21831 3. 出货表(sold) PAGEREF _Toc21831 3 HYPERLINK l _Toc23255 4. 用户表(users) PAGEREF _Toc23255 3 HYPERLINK l _Toc26511 三、 数据初始化 PAGEREF _Toc26511 4 HYPERLINK l _Toc28446 1. 藏书信息表插入数据 PAGEREF _Toc28446 4 HYPERLINK l _Toc32127 2. 进货表插入数据 PAGEREF _Toc32127 5 HYPERLINK l _Toc6305 3. 出货表插入数
3、据 PAGEREF _Toc6305 6 HYPERLINK l _Toc5149 4. 用户表插入数据 PAGEREF _Toc5149 7 HYPERLINK l _Toc7151 四、 索引 PAGEREF _Toc7151 7 HYPERLINK l _Toc13016 五、 视图 PAGEREF _Toc13016 8 HYPERLINK l _Toc19310 1.进货信息视图 (stock_infor) PAGEREF _Toc19310 8 HYPERLINK l _Toc28776 2. 出货信息视图 (sold_infor) PAGEREF _Toc28776 8 HYPE
4、RLINK l _Toc24892 3.盈利视图(profit) PAGEREF _Toc24892 9 HYPERLINK l _Toc11178 六、 过程 PAGEREF _Toc11178 10 HYPERLINK l _Toc268 七、 函数 PAGEREF _Toc268 13 HYPERLINK l _Toc148 八、 包 PAGEREF _Toc148 14 HYPERLINK l _Toc358 九、 用户创立 PAGEREF _Toc358 19 HYPERLINK l _Toc24308 1.创立用户 PAGEREF _Toc24308 19 HYPERLINK l
5、_Toc16070 2.创立角色 PAGEREF _Toc16070 19 HYPERLINK l _Toc18382 3.授予角色权限 PAGEREF _Toc18382 19 HYPERLINK l _Toc15727 十、 复杂功能实现 PAGEREF _Toc15727 20 HYPERLINK l _Toc19408 十一、 Oracle体系构造 PAGEREF _Toc19408 24 HYPERLINK l _Toc11923 附录: PAGEREF _Toc11923 26-. z.书店图书销售系统工程背景 随着信息时代的到来,IT产业和Internet获得了飞速开展,计算机应
6、用已渗透到了各个领域,网络应用越来越普遍,而且走进了千家万户,一直使用手工记账的小镇书店老板,也想购置一个图书销售系统,但想先体验一下计算机的快捷方便。因此,设计了如下测试用例,供其初步体验!系统用表系统用表共四*,分别为:藏书信息表(book)、进货表(stock)、出货表(sold)、用户表(users)。藏书信息表:用来存放书店现有图书的信息。进货表:用来存放书店进货信息。出货表:用来存放书店卖出的图书信息。用户表:用来存放书店员工信息。建表:1. 藏书信息表(book)藏书信息表(book) 表1列名数据类型长度描述booknovarchar26图书编号,定义为主键booknameva
7、rchar220书名, 唯一speciesvarchar25图书分类, 不允许为空bookpricenumber(7,2)图书单价, 不允许为空publish_housevarchar220, 不允许为空publishdatedate出版日期, 不允许为空authorvarchar210作者, 不允许为空numbernumber4藏书量, 大于0建表语句:create table book ( bookno varchar2(6) primary key,bookname varchar2(20) unique,species varchar2(5) not null,bookprice nu
8、mber(7,2) not null,publish_house varchar2(20),publishdate date,author varchar2(10) not null,numbers number check(numbers=0) );修改表构造:alter table book modify species varchar2(15);alter table book modify bookname varchar2(20);alter table book modify numbers number(4);2. 进货表(stock)进货表(stock) 表2列名数据类型长度描
9、述 ionovarchar26进货编号,定义为主键booknovarchar26图书编号,定义为外键numbersnumber进货量, 大于等于0 in_pricenumber进价,不能为空in_timedate进货时间,不能为空建表语句:create table stock(iono varchar2(6) primary key,bookno varchar2(6),numbers number check(numbers=0),in_price number not null,in_time date not null,constraint fk_stock foreign key(bo
10、okno) references book(bookno);出货表(sold)出货表(sold) 表3列名数据类型长度描述 oonovarchar26出货编号,定义为主键booknovarchar26图书编号,定义为外键numbersnumber出货量, 大于等于0 out_pricenumber售卖价格,不能为空out_timedate售卖时间,不能为空建表语句:create table sold(oono varchar2(6) primary key,bookno varchar2(6),numbers number check(numbers=0),out_price number n
11、ot null,out_time date not null,constraint fk_sold foreign key(bookno) references book(bookno);用户表(users)用户表(users) 表4列名数据类型长度描述usernamevarchar210用户名,定义为主键passwordvarchar215密码, 不允许为空 salnumber月薪,可以为空mnumber奖金,可以为空remarkvarchar215用户类型,允许为空建表语句:create table users (username varchar2(10) primary key,pass
12、word varchar2(15) not null, sal number, m number, remark varchar2(15);数据初始化藏书信息表插入数据-insert语句插入insert into book values(001010,细说PHP,IT,109.00,电子工业,to_date(2013-04,yyyy-mm),高洛峰,50);-替代变量插入-语句保存到d:oraclereplace_sqlinsert_book.sqlaccept v_bookno prompt 编号(六位数字):accept v_bookname prompt 书名书名:accept v_sp
13、ecies prompt 种类:accept v_bookprice prompt 价格:accept v_ph prompt :accept v_pt prompt 出版日期yyyy-mm:accept v_author prompt accept v_numbers prompt 库存量=0:insert into boss.book values(&v_bookno,&v_bookname,&v_species,&v_bookprice,&v_ph,to_date(&v_pt,yyyy-mm),&v_author,&v_numbers);执行:start d:oraclereplace_
14、sqlinsert_book.sql进货表插入数据-insert语句插入insert into stock values(000001,001001,3,15.00,to_date(2014-11-07,yyyy-mm-dd);-替代变量插入-语句保存到d:oraclereplace_sqlinsert_stock.sqlaccept v_iono prompt 进货编号(六位数字):accept v_bookno prompt 图书编号(六位数字):accept v_numbers prompt 进货数量:accept v_in_price prompt 进货价格:accept v_in_t
15、ime prompt 进货日期(yyyy-mm-dd):insert into stock values(&v_iono,&v_bookno,&v_numbers,&v_in_price,to_date(&v_in_time,yyyy-mm-dd);执行:start d:oraclereplace_sqlinsert_stock.sql出货表插入数据-insert语句插入insert into sold values(000001,001002,1,25.80,to_date(2014-11-07,yyyy-mm-dd);-替代变量插入-语句保存到d:oraclereplace_sqlinse
16、rt_sold.sqlaccept v_oono prompt 出货编号(六位数字):accept v_bookno prompt 图书编号(六位数字):accept v_numbers prompt 售卖数量:accept v_in_price prompt 售卖价格:accept v_in_time prompt 售卖日期(yyyy-mm-dd):insert into sold values(&v_oono,&v_bookno,&v_numbers,&v_out_price,to_date(&v_out_time,yyyy-mm-dd);执行:start d:oraclereplace_
17、sqlinsert_sold.sql用户表插入数据-insert语句插入insert into users values(boss,boss,admin);-替代变量插入-语句保存到d:oraclereplace_sqlinsert_users.sqlaccept v_name prompt 用户名:accept v_pword prompt 密码:accept v_sal prompt 月薪:accept v_m prompt 奖金:accept v_remark prompt 备注 :insert into users values(&v_name,&v_pword,&v_sal,&v_m
18、,&v_remark);执行:start d:oraclereplace_sqlinsert_users.sql索引 1.由于对book表的图书的分类查找会比拟频繁,所以对book表的species列建索引 create inde* book_species_id* on book(species); 2.由于对stock表的进货量,进价,进货时间的查询会比拟频繁,所以对stock表的numbers,in_price,in_time列建索引create inde* stock_num_ip_id* on stock(numbers,in_price);create inde* stock_nu
19、m_it_id* on stock(numbers,in_time); 3.由于对sold表的进货量,进价,进货时间的查询会比拟频繁,所以对sold表的numbers,out_price,out_time列建索引create inde* sold_num_op_id* on sold(numbers,out_price);create inde* sold_num_ot_id* on sold(numbers,out_time);视图视图共三个,分别为:进货信息视图(stock_infor)、出货信息视图(sold_infor)、盈利视图(profit)。进货信息视图:由藏书信息表和进货表整合
20、。包括进货编号,图书编号,书名,类别,进价,数量,总进价。出货信息视图:由藏书信息表和出货表整合。包括出货编号,图书编号,书名,类别,卖价,售卖数量,总价,售卖日期。盈利视图:由进货表和出货表整合。包括图书编号,进价,卖价,数量,盈利,售卖日期。1.进货信息视图 (stock_infor)建视图语句:create view stock_infor as select s.iono进货编号,b.bookno图书编号,b.bookname书名 ,b.species类别,s.in_price进价,s.numbers数量,s.in_price*s.numbers总价,s.in_time进货日期from
21、 book b,stock s where b.bookno=s.bookno;出货信息视图 (sold_infor)建视图语句:create view sold_infor as select s.oono出货编号,b.bookno图书编号,b.bookname书 名,b.species类别,s.out_price卖价,s.numbers售卖数量 ,s.out_price*s.numbers总价,s.out_time售卖日期 from book b,sold s where b.bookno=s.bookno;3.盈利视图(profit)建视图语句:create view profit as
22、 select so.bookno图书编号,st.in_price进价,so.out_price卖价,so.numbers数量,(so.out_price-st.in_price)*so.numbers)盈利,so.out_time售卖日期 from (select distinct bookno,in_price from stock) st,sold so where st.bookno=so.bookno order by so.out_time,so.bookno;过程输入图书编号,增/减,数量实现增减库存条件选择create or replace procedure *gkc(bno
23、 varchar2,sign char,num number)isv_bno boss.book.bookno%type;beginselect bookno into v_bno from boss.book where bookno=bno;if sign=+ thenupdate boss.book set numbers=numbers+num where bookno=v_bno;dbms_output.put_line(v_bno|号图书成功增加库存|num);elsif sign=- thenupdate boss.book set numbers=numbers-num whe
24、re bookno=v_bno;dbms_output.put_line(v_bno|号图书成功减少库存|num);elsedbms_output.put_line(第二个参数只能为+/-);end if;e*ceptionwhen no_data_found thendbms_output.put_line(库存表中不存在该图书,请修改图书编号或增加该图书信息到库存中);end;/执行:e*ec *gkc(001002,-,1); e*ec *gkc(001002,+,1); 输入图书类型,根据参数传递来查询图书编号,图书名称,价格游标create or replace procedure
25、l*c*(c1species varchar2)istype book_record_type is record(v_no boss.book.bookno%type,v_name boss.book.bookname%type,v_price boss.book.bookprice%type);book_no_name_price book_record_type;cursor c1(c1species varchar2) return book_no_name_price isselect bookno,bookname,bookprice from boss.book where sp
26、ecies=c1species;beginopen c1 (c1species);loopfetch c1 into book_no_name_price;if c1%found thendbms_output.put_line(类型为|c1species|,编号为|book_no_name_price.v_no|,名称为|book_no_name_price.v_name|,价格为|book_no_name_price.v_price);elsedbms_output.put_line(查询完毕!);e*it;end if;end loop;close c1;end;/执行:e*ec l*c
27、*(IT); 执行过程,输出提示库存少于5的图书信息方便进货。create or replace procedure jht* istype book_record_type is record(v_bno boss.book.bookno%type,v_bname boss.book.bookname%type,v_num boss.book.numbers%type,v_sum boss.book.numbers%type);v_no_name_num_sum book_record_type;cursor c1 return v_no_name_num_sum is select b.b
28、ookno,b.bookname,b.numbers,s.sumnumber from boss.book b,(select 图书编号,sum(售卖数量) sumnumber from boss.sold_infor group by 图书编号) s where b.bookno=图书编号 and b.numbers=5; beginopen c1;loopfetch c1 into v_no_name_num_sum;if c1%found thendbms_output.put_line(图书编号|v_no_name_num_sum.v_bno|图书名称|v_no_name_num_su
29、m.v_bname|现库存量-|v_no_name_num_sum.v_num|-已售卖-|v_no_name_num_sum.v_sum);elsedbms_output.put_line(查询完毕!);e*it;end if;end loop;close c1;end;/执行:e*ec jht*;函数输入员工*,求出员工年薪create or replace function y_sal (name varchar2) return number is ssal number;beginselect sal*12+nvl(m,0)*12 into ssal from boss.users
30、where username=name;return ssal;end;/调用:var yearsal number call y_sal(staff2) into:yearsal; print yearsal包创立一个包实现以下功能:输入图书编号,增/减,数量实现增减库存查询*类型所有图书的图书编号,图书名称和价格3.执行过程,输出提示库存少于5的图书信息方便进货。4.输入员工*,求出员工年薪-声明包create or replace package pk isprocedure *gkc(bno varchar2,sign char,num number);procedure l*c*(c
31、1species varchar2);procedure jht*;function y_sal (name varchar2) return number;end;/-创立包体create or replace package body pk isprocedure *gkc(bno varchar2,sign char,num number)isv_bno boss.book.bookno%type;beginselect bookno into v_bno from boss.book where bookno=bno;if sign=+ thenupdate boss.book set
32、 numbers=numbers+num where bookno=v_bno;dbms_output.put_line(v_bno|号图书成功增加库存|num);elsif sign=- thenupdate boss.book set numbers=numbers-num where bookno=v_bno;dbms_output.put_line(v_bno|号图书成功减少库存|num);elsedbms_output.put_line(第二个参数只能为+/-);end if;e*ceptionwhen no_data_found thendbms_output.put_line(库
33、存表中不存在该图书,请修改图书编号或增加该图书信息到库存中);end;procedure l*c*(c1species varchar2)istype book_record_type is record(v_no boss.book.bookno%type,v_name boss.book.bookname%type,v_price boss.book.bookprice%type);book_no_name_price book_record_type;cursor c1(c1species varchar2) return book_no_name_price isselect book
34、no,bookname,bookprice from boss.book where species=c1species;beginopen c1 (c1species);loopfetch c1 into book_no_name_price;if c1%found thendbms_output.put_line(类型为|c1species|,编号为|book_no_name_price.v_no|,名称为|book_no_name_price.v_name|,价格为|book_no_name_price.v_price);elsedbms_output.put_line(查询完毕!);e
35、*it;end if;end loop;close c1;end;procedure jht* istype book_record_type is record(v_bno boss.book.bookno%type,v_bname boss.book.bookname%type,v_num boss.book.numbers%type,v_sum boss.book.numbers%type);v_no_name_num_sum book_record_type;cursor c1 return v_no_name_num_sum is select b.bookno,b.bookname
36、,b.numbers,s.sumnumber from boss.book b,(select 图书编号,sum(售卖数量) sumnumber from boss.sold_infor group by 图书编号) s where b.bookno=图书编号 and b.numbers=5; beginopen c1;loopfetch c1 into v_no_name_num_sum;if c1%found thendbms_output.put_line(图书编号|v_no_name_num_sum.v_bno|图书名称|v_no_name_num_sum.v_bname|现库存量-|
37、v_no_name_num_sum.v_num|-已售卖-|v_no_name_num_sum.v_sum);elsedbms_output.put_line(查询完毕!);e*it;end if;end loop;close c1;end;function y_sal (name varchar2) return number is ssal number;beginselect (sal+nvl(m,0)*12 into ssal from boss.users where username=name;return ssal;end;end;/执行:e*ec pk.*gkc(001002,
38、-,1); e*ec pk.*gkc(001002,+,1); e*ec pk.l*c*(IT); e*ec pk.jht*; var yearsal number call pk.y_sal(staff1) into:yearsal; print yearsal用户创立1.创立用户创立boss用户并授予最高权限create user boss identified by boss password e*pire;grant dba,connect,resource to boss; 创立其他角色create user staff1 identified by staff1;-进货经理crea
39、te user staff2 identified by staff2;-售货经理create user staff3 identified by staff3;-进货员create user staff4 identified by staff4;-售货员2.创立角色create role bmanager;-进货人员create role smanager;-售货人员3.授予角色权限授予bmanager角色权限授予bmanager登陆,查询,删除,更新boos的book表,stock表,stock_infor视图的权限,和执行boss的所有过程的权利。grant connect to bm
40、anager with admin option;-登陆grant e*ecute any procedure to bmanager;-执行所有过程grant select,delete,update,insert on boss.book to bmanager;-操作book表grant select,delete,update,insert on boss.stock to bmanager;-操作stock表grant select,delete,update,insert on boss.stock_infor to bmanager; -操作stock_infor视图授予sman
41、ager角色权限授予smanager登陆,查询,删除,更新boos的book表,sold表,sold_infor视图的权限和执行boss的所有过程的权利。grant create session to smanager with admin option;-登陆grant e*ecute any procedure to smanager;-执行所有过程grant select,delete,update,insert on boss.book to smanager;-操作book表grant select,delete,update,insert on boss.sold to bmana
42、ger;-操作stock表grant select,delete,update,insert on boss.sold_infor to bmanager; -操作stock_infor视图将bmanager角色授予staff1和staff3:grant bmanager to staff1 with admin option;:grant bmanager to staff3;将smanager角色授予staff2和staff4:grant smanager to staff2 with admin option;:grant smanager to staff4;复杂功能实现查询book表
43、并让其有序显示-表book 该语句可被所有用户使用set linesize 130select * from boss.book;顾客在购置*一本书之后,让店员推荐一样类型的图书名称,类型,作者,单价-表book单行子查询-保存到d:oraclereplace_sqlslc*_book.sql该语句可被所有用户使用accept v_bname prompt 输入书名后将显示与该书类型一样的书籍信息,请输入书名:select bookname,species,bookprice,author from book where species in(select distinct species f
44、rom boss.book where bookname=&v_bname);执行:start d:oraclereplace_sqlslc*_book.sql五周年店庆老板打算搞一个打折促销活动,其中,工具类九折,文学八折,IT七折,需要给销售人员折后价格表编号,书名,单价,活动价,备注-表bookdecode该语句可被所有用户使用select bookno,bookname,bookprice,species,decode(species,工具类,bookprice*0.9,文学,bookprice*0.8,IT,bookprice*0.7) 活动价,decode(species,工具类,
45、9折,文学,8折,IT,7折) 备注 from boss.book order by 备注;查询图书售卖情况未售卖的图书售卖数量为0-表book,表sold该语句可被boss,seller manager,seller用户使用select b.bookno,b.bookname,b.species,b.bookprice,nvl(s.numbers,0),s.out_time from boss.book b,boss.sold s where b.bookno=s.bookno(+) order by s.out_time;查询*年,月,日进货时每种类型的书花费多少钱?-视图stock_in
46、for该语句可被boss,buyer manager,buyer用户使用select 类别,sum(总价)进货总价 from boss.stock_infor where to_char(进货日期,&v_datetype)=&v_date group by 类别;查询年,月,日的销售总额-内嵌视图sold_infor -保存d:oraclereplace_sqlse1_sold_infor.sql 该语句可被boss,seller manager,seller用户使用 accept v_datetype prompt 请输入您要查询的时间段类型年yyyy,月yyyy-mm,日yyyy-mm-d
47、d: select sum(总价)销售总额,售卖日期 from (select 总价,to_char(售卖日期,&v_datetype) 售卖日期 from boss.sold_infor) group by 售卖日期;执行:start d:oraclereplace_sqlse1_sold_infor.sql 7.查询按要求的属性求销售总额 -保存d:oraclereplace_sqlse2_sold_infor.sql 该语句可被boss,seller manager,seller用户使用accept v_col prompt请输入您要按(书名or类别or单价or售卖日期)查看销售总量:s
48、elect sum(售卖数量)总数量,sum(总价)销售额,&v_col from boss.sold_infor group by &v_col; 执行:start d:oraclereplace_sqlse2_sold_infor.sql 8.查询*天,*月,*年的盈利 -保存start d:oraclereplace_sqlse_profit.sql 该语句可被boss用户使用accept v_datetype prompt 请输入您要查询的盈利的时间段类型yyyy,月yyyy-mm,日yyyy-mm-dd:select sum(盈利),售卖日期 from (select 盈利,to_c
49、har(售卖日期,&v_datetype) 售卖日期 from profit) group by 售卖日期 order by 售卖日期; 执行:start d:oraclereplace_sqlse_profit.sql9.使用包功能:该语句可被所有用户使用 set serveroutput on;-翻开控制台输出 1)输入图书编号,增/减,数量实现增减库存 e*ec boss.pk.*gkc(001002,-,1); e*ec boss.pk.*gkc(001002,+,1); 2)查询*类型所有图书的图书编号,图书名称和价格 e*ec boss.pk.l*c*(IT);3)执行过程,输出提
50、示库存少于5的图书信息方便进货e*ec boss.pk.jht*; 4)输入员工*,求出员工年薪var yearsal numbercall boss.pk.y_sal(staff2) into:yearsal;print yearsalOracle体系构造No1.alter system flush shared_pool;-清空共享池执行语句1:insert into boss.book values(001012,红与黑,文学,49.80,*出版集团,to_date(2011-10,yyyy-mm),司汤达,0);已用时间: 00: 00: 00.12 统计信息 322 recursive calls 递归调用 9 db block gets 84 consistent gets 逻辑读 2 physical reads 物理读 1076 redo size 668 bytes sent via SQL*Net to client 658 bytes received via SQL*Net from clie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全宣教车服务合同
- 2024年电气工程设计与咨询服务合同
- 二零二五年度房产买卖合同含抵押权解除及后续贷款偿还0143篇
- 二零二五年度房地产私募股权投资包销合同3篇
- 2025公司股份制合同范文
- 2025劳务分包合同备案意见书
- 2025房屋修建承包合同「下载」
- 2024版物业管理装修协议
- 2025运输车辆的承包合同
- 2025借款合同需要注意什么
- 行业财务对标分析
- 脱糖果汁的生产工艺优化
- 2023机器人用精密减速器重复定位精度测试方法
- SL176-2007 水利水电工程施工质量检验与评定规程
- 家长会课件:高三(13)班家长会课件
- 推拿治疗小儿食积腹痛技术
- 你比划我猜搞笑题目你说我猜题目大全
- 成品可靠性测试计划
- 八年级上册数学复习计划3篇
- 私人抵押借款合同
- 放射治疗技术-常用放射治疗方法-课件
评论
0/150
提交评论