手机话费查询系统
姓名:刘东班级:12信管(1)班学号:2
1、需求分析
1.1编写目的
使用该数据库使用户和通信工作更好的管理和查询手机话费
1.2背景
项目名称:手机话费查询系统
项目提出者:中国移动,中国联通,中国电信总公司
项目开发者:项目开发人员
项目鉴定者:各通信总公司
项目开始时间:××××-××-××。
1.3定义
系统数据流程图的一些定义:数据流图是结构化分析方法中使用的工具,它以图形的方
式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它
是一种功能模型。
基本符号
:圆框,表示加工;学生表示数据的源点;
:方框,表示数据的源点或数据的终点;
:箭头,表示被加工数据的路径和流向,即数据流;
:双杠,表示数据存储,可以是一个纪录或一个数据文件,可用名
词或名
1.4目标
当用户使用手机时所产生的费用需由手机营业厅和用户知道并且缴纳相应的手机话费费
用,需要有相应的话费打印凭证。
对手机话费查询系统可以分为三类:
用户:用户需要对自己所消费的信息由明确的细节了解并且可以随时的查询自己的消费记
录。
营业员:工作人员可以借助手机话费查询系统自动查寻到用户的消费记录,可以自动的管
理并计算出用户的消费金额,帮助营业员管理用户信息等。
管理人员:管理人员需要了解该手机话费查询系统的缺点和不足,应具备一定的数据库知
识,不过只要了解就行,这些人员负责对数据库中重要数据及基本数据的更新,如对静态
表的重新定义,普通用户的权限分配。
1.5需求分析
在手机话费查询系统中,主要有手机用户和工作人员两个操作实体,对于
普通的手机用户来说,该系统仅允许他们作一个操作:即可以使用该系统通过
手机号与密码发出查询请求,查询该手机所剩余的话费。工作人员必须通过账
号与相对应的密码登陆系统才能有权限完成以下的各种功能。工作人员的登陆
可以统计并查看所有的手机用户信息。
1.5.1通过对手机话费查询的各个步骤、所需的各项信息等的分析,我们规定:
(1)手机话费管理系统中实体的联系如下:
一个用户可以注册多个手机号码,一个手机号码只能被一个用户注册。
用户和号码之间是一对多的联系。
一个用户可以拥有多张银行卡,一张银行卡只能属于一个用户,用户和
银行卡之间是一对多的联系。
一张银行卡可以为多个号码缴费,一个号码可以由多张银行卡缴费,银
行卡和号码之间是多对多联系。
④一个号码可以办理多个业务,一个业务可以被多个号码办理,号码和业
务之间是多对多的联系。
⑤一个帐目包含多种业务,一种业务只能产生一种业务,帐目和业务之间
是一对多的联系。
(2)通过对手机话费查询系统各方面分析,系统中包含的实体有用户、工作人员、银行
卡、话费、手机、业务、账目、缴费等实体。它们包含的数据项有:
用户:{身份证号码,用户姓名,用户密码,用户性别,用户地址,用户状
态}
工作人员:{工作人员编号,工作人员姓名,工作人员性别,工作人员口令}
银行卡:{银行卡号,余额}
话费{话费编号,手机号码,话费余额}
业务{业务编号,业务名称,业务金额}
手机{手机号码}
账目{账目编号,消费月份,业务费}
(3)实体之间的联系:
银行卡实体和话费实体之间的联系:(n:m)
手机实体和业务实体之间的联系:(n:m)
工作人员实体和用户实体之间的联系:(n:m)
1.5.2软硬件平台设计
(1)软件平台:windows操作系统、Sql-Server2000数据库
(2)硬件平台:普通微机
2、概念设计
2.1设计局部E—R图
⑪用户实体信息,如图2.2所示。
用户性别
用户
身份号码
用户姓名
用户密码
用户地址
用户状态
图2.2用户实体信息
用户实体定义。用户:{身份证号码,用户姓名,用户密码,用户性别,用
户地址,用户状态}
⑫工作人员实体信息,如图2.3所示。
工作人员
工作人员姓名
工作人员性别工作人员编号
工作人员口令
图2.3工作人员实体信息
工作人员实体定义。工作人员:{工作人员编号,工作人员姓名,工作人员
性别,工作人员口令}
⑬银行卡实体信息,如图2.4所示。
银行卡
卡号
余额
图2.4银行卡实体信息
银行卡实体定义。银行卡:{银行卡号,余额}
⑭话费实体信息,如图2.5所示。
手机号码
话费
话费余额
话费编号
图2.5话费实体信息
话费实体定义。话费{话费编号,手机号码,话费余额}
⑮业务实体信息,如图2.6所示。
业务
业务编号
业务名称业务金额
图2.6业务实体信息
业务实体定义。业务{业务编号,业务名称,业务金额}
⑯账目实体信息,如图2.7所示。
账目
账目编号
业务费消费月份
图2.7账目实体信息
账目实体定义。账目{账目编号,消费月份,业务费}
⑰手机信息实体,如图2.8所示。
手机
手机号码
图2.8手机实体信息
手机实体定义。手机{手机号码}
⑧银行卡实体和话费实体之间的联系,如图2.9所示。
银行卡
缴费
话费
缴费金额
缴费时间
nm
图2.9银行卡实体和话费实体之间的缴费联系
用户的一张银行卡可以为自己的多部手机缴费,一部手机的缴费可以通过
用户的多张不同的银行卡进行。银行卡实体和话费实体之间通过缴费构成多对
多的联系。
⑨手机实体和业务实体之间的联系,如图2.10所示。
办理
业务
办理时间
手机
图2.10手机实体和业务实体之间的办理联系
一个手机号码可以办理多个业务,一个业务可以被多个手机号码办理。手
机实体和业务实体通过办理构成多对多联系。
⑩工作人员实体和用户实体之间的联系,如图2.11所示。
工作人员
注册
用户
注册时间
手机号码
图2.11工作人员实体和用户实体之间的注册联系
一个工作人员可以为用户注册多个手机号码,一个用户的手机号码可以由
多个工作人注册。工作人员实体和用户实体之间通过注册构成多对多的联系。
2.2集成局部E—R图生成全局E—R图
根据局部E—R图,实体的属性,实体的码,实体之间的联系,设计出的
手机话费管理系统E-R图,如下图2.12所示。
缴费金额缴费时间
工作人员
工作人员编号工作人员口令
工作人员姓名
注册
工作人员性别
用户
注册时间手机号码
身份号码
用户姓名
用户性别
用户密码
用户地址
使用
银行卡
卡号
余额
缴费
话费
办理
业务
消费
账目
话费编号
话费余额
办理时间
业务编号
业务名称
业务金额
账目编号
业务费
消费月份
n
m
p
q
1
s
n
m
r
1
手机号码
手机属于
手机号码
1
s
用户状态
3、逻辑设计
本次设计的数据库在SQLServer2005上实现,将概念结构设计中的E-R图转换成SQL
Server2005支持的关系数据模型后,结合上述分析得到如下数据表:
①用户的基本信息(身份证号码,用户姓名,用户密码,用户性别,用户地址,用户状
态)此为用户实体对应的关系模式,主码为用户的身份证号码
ID_noCHAR(18)notnullprimaryKey身份证号码
ur_nameCHAR(8)用户姓名
ur_passwordCHAR(10)用户密码
ur_xCHAR(2)用户性别
ur_addrCHAR(20)用户地址
ur_stateCHAR(2)用户状态
②工作人员的基本信息(工作人员编号,工作人员姓名,工作人员性别,工作人员口令)
此为工作人员实体对应的关系模式,主码为工作人员的编号。
staff_idCHAR(10)notnullprimarykey工作人员编号
staff_nameCHAR(8)工作人员姓名
staff_passwor
d
CHAR(8)工作人员口令
staff_xCHAR(2)工作人员性别
③银行卡信息(银行卡号,身份证号码,余额)此为银行卡实体对应的关系模式,主码为
银行卡号。
card_noCHAR(18)not_nullprimarykey银行卡号
ID_noCHAR(18)not_null身份证号码
card_balanceNUMERIC(8)余额
④话费信息(话费编号,手机号码,话费余额)此为话费实体对应的关系模式,主码为话
费编号。
fee_noCHAR(10)not_nullprimarykey话费编号
phone_noCHAR(12)手机号码
fee_balanceNUMERIC(8)话费余额
⑤业务信息(业务编号,账目编号,业务名称,业务金额)此为业务实体对应的关系模
式,主码为业务编号,业务消费产生账目,n:为1的“消费”联系,所以账目编号
为业务信息的外码。
business_noCHAR(6)not_nullprimarykey业务编号
account_noCHAR(10)not_null账目编号
business_nameCHAR(8)业务名称
business_sumNUMERIC(8)业务金额
⑥账目信息(账目编号,消费月份,业务费)此为账目实体对应的关系模式,账目编号为
主码。
account_noCHAR(10)not_nullprimarykey账目编号
consume_monthCHAR(4)消费月份
business_feeNUMERIC(8)业务费
⑦缴费(银行卡号,手机号码,缴费金额,缴费时间)此为联系“缴费”所对应的关系模
式,银行卡缴费话费的n:m“缴费”联系,所以银行卡号和手机号码联合做“缴费”的主
码。
card_noCHAR(18)notnullprimarykey银行卡号
phone_noCHAR(12)notnull手机号码
pay_sumNUMERIC(8)notnull缴费金额
pay_timedatetimenotnull缴费时间
⑧手机信息(手机,手机号码)此为手机实体的关系模式,手机为主码。
mobilephoneCHAR(10)not_nullprimarykey手机
phone_noCHAR(12)not_null手机号码
⑨办理(业务编号,手机,办理时间)此为联系“办理”所对应的关系模式,手机办理业
务的n:m“办理”联系,所以手机和业务编号联合做“办理”的主码。
YEWU_noCHAR(6)not_nullprimarykey业务编码
mobilephoneCHAR(10)not_null手机
handle_timedatetime办理时间
⑩注册(工作人员编号,身份证号码,注册时间,手机号码)此为联系“注册”所对应的
关系模式,工作人员为用户注册的n:m“注册”联系,所以工作人员的编号和用户的身
份证号码联合做“注册”的主码。
staff_idCHAR(10)not_nullprimarykey工作人员编号
ID_noCHAR(18)not_null身份证号码
Register_timedatetime注册时间
phone_noCHAR(12)手机号码
4、物理设计
为了加速表的查询,根据所设计的表的特点,我们咋业务表中“业务编号”“手机”,
银行卡中“身份证号”,缴费表中“卡号”“缴费号”,注册表中“注册号”“身份证号”,手
机表中“身份证号”,办理表中“办理号”分别建立索引。
Createindexhandle_FKonhandle(business_noASC)
Createindexhandle2_FKonhandle(mobilephoneASC)
Createindex“u_FK”on“bank_card”(“ID_no”ASC)
Createindex“pay_FK”on“pay”(“card_no”ASC)
Createindex“pay2_FK”on“pay”(“fee_no”ASC)
Createindex“register_FK”on“register”(“staff_id”ASC)
Createindex“register2_FK”on“register”(“ID_no”ASC)
Createindex“belong_FK”onmobile(“ID_no”ASC)
Createindex“consume_FK”onaccount(“account_no”ASC)
5、触发器
(1)建立触发器T1(一个用户只能有一个密码)
createtriggerT1onur
forinrt,update
as
if@@rowcount=1
begin
declare@counttinyint
lect@count=count(_no)
fromur,inrted
_password=_password
if@count>2
begin
print'一名用户最多只有一个密码'
rollback
end
end
6、存储过程
(1)建立存储过程P1,可以使用该系统通过手机号与密码发出查询请求,查询该手机所
剩余的话费。
ifexists(lect*fromsysobjectswherename='P1')
dropproceduredbo.P1
GO
createprocedureP1as
lectfee_balance
frommobilephoneur
whereur_name='„„'andur_password='„„'
go
()建立存储过程P2,统计并查看所有的手机用户信息,该信息主要包括两方面,一方面
是仅关于本手机的各种信息;另一方面是登记该手机的用户信息。
ifexists(lect*fromsysobjectswherename='P2')
dropproceduredbo.P2
GO
createprocedureP2as
t_no,__no,card_balance
frommobilephone,ur
_no=_no
go
()建立存储过程P3,利用存储过程查找地址的工作人员的具体信息
ifexists(lect*fromsysobjectswherename='P3')
dropproceduredbo.P3
GO
createprocedureP3as
lect*
fromstaff_id
wherestaff_name='„„.'
go
7、脚本
createdatabaQuerysystem
createtable"ur"(--用户表
"ID_no"CHAR(18)notnull,"ur_name"CHAR(8),
"ur_password"CHAR(10),--用户密码
"ur_x"CHAR(2),
"ur_addr"CHAR(20),
"ur_state"CHAR(2),
constraintPK_USERprimarykey(ID_no)
)
--插入数据
inrtinto"ur"values('361111','乔布斯','123','男','湘湖','开
')
inrtinto"ur"values('362222','雷军','111','男','湘湖','开')
inrtinto"ur"values('363333','王章','121','男','鹅湖','停')
inrtinto"ur"values('364444','任正非','122','男','鹅湖','开
')
inrtinto"ur"values('365555','段永平','102','男','甲路','开
')
inrtinto"ur"values('366666','杜甫','124','男','珠山','停')
createtablestaff(--工作人员表
"staff_id"CHAR(10)notnull,"staff_name"CHAR(8),
"staff_password"CHAR(10),
"staff_x"CHAR(2),
constraintPK_STAFFprimarykey(staff_id)
)
--插入数据
inrtintostaffvalues('01','a','0000','男')
inrtintostaffvalues('02','b','1111','男')
inrtintostaffvalues('03','c','2222','男')
inrtintostaffvalues('04','d','3333','男')
inrtintostaffvalues('05','e','4444','男')
inrtintostaffvalues('06','f','5555','男')
createtablebank_card(--银行卡表
"card_no"CHAR(18)notnull,"ID_no"CHAR(18)notnull,
"card_balance"NUMERIC(8),
constraintPK_BANK_CARDprimarykey(card_no)
)
inrtintobank_card
values('664001','361111','1000')
inrtintobank_card
values('664002','362222','1000')
inrtintobank_card
values('664003','363333','1000')
inrtintobank_card
values('664004','364444','1000')inrtintobank_card
values('664005','365555','1000')inrtintobank_card
values('664006','366666','1000')
createtable"phone_cost"(--话费表
"fee_no"CHAR(10)notnull,"phone_no"CHAR(12),
"fee_balance"NUMERIC(8),
constraintPK_PHONE_COSTprimarykey("fee_no")
)
inrtintophone_costvalues('0001','','10')inrtintophone_cos
tvalues('0002','','10')inrtintophone_costvalues('0003','1234
5678903','20')inrtintophone_costvalues('0004','','12')inrt
intophone_costvalues('0005','','2')inrtintophone_costvalue
s('0006','','8')
createtable"business"(--业务表
"business_no"CHAR(6)notnull,"account_no"CHAR(10)notnull,"business_name
"CHAR(8),
"business_sum"NUMERIC(8),
constraintPK_businessprimarykey("business_no")
)
inrtintobusinessvalues('001','00001','来电显示','5')inrtintobusiness
values('002','00002','亲情号','1')
inrtintobusinessvalues('003','00003','彩铃','2')
inrtintobusinessvalues('004','00004','来电提醒','5')inrtintobusiness
values('005','00005','GPRS功能','3')inrtintobusinessvalues('006','0000
6','流量包','1')
createtable"account"(--账目表
"account_no"CHAR(10)notnull,"consume_month"CHAR(4),
"business_fee"NUMERIC(8),
constraintPK_ACCOUNTprimarykey("account_no")
)
inrtintoaccountvalues('00001','1','5')
inrtintoaccountvalues('00002','2','10')
inrtintoaccountvalues('00003','3','2')
inrtintoaccountvalues('00004','4','7')
inrtintoaccountvalues('00005','5','5')
inrtintoaccountvalues('00006','6','5')
createtablemobile(--手机表
mobilephoneCHAR(10)notnull,"ID_no"CHAR(18)notnull,
constraintPK_mobileprimarykey("mobilephone")
)
inrtintomobilevalues('苹果','')
inrtintomobilevalues('小米','')
inrtintomobilevalues('魅族','')
inrtintomobilevalues('华为','')
inrtintomobilevalues('oppo','')
inrtintomobilevalues('联想','')
createtable"pay"(--缴费表
"card_no"CHAR(18)notnull,
"phone_no"CHAR(10)notnull,
"pay_sum"NUMERIC(8)notnull,"pay_time"DATETIMEnotnull,constraintPK_PAY
primarykey("card_no","phone_no")
)
inrtintopayvalues('664001','','41','2012.1.14')in
rtintopayvalues('664002','','61','2012.3.29')inr
tintopayvalues('664003','','80','2012.2.26')inrt
intopayvalues('664004','','73','2011.5.19')inrtin
topayvalues('664005','','25','2011.3.18')inrtinto
payvalues('664006','','34','2011.3.19')
createtablehandle(--办理表
"business_no"CHAR(6)notnull,mobilephoneCHAR(10)notnull,
"handle_time"datetime,
constraintPK_handleprimarykey("business_no",mobilephone))
inrtintohandlevalues('001','苹果','2011.3.18')
inrtintohandlevalues('002','小米','2011.3.19')
inrtintohandlevalues('003','魅族','2011.5.19')
inrtintohandlevalues('004','华为','2011.4.16')
inrtintohandlevalues('005','oppo','2012.4.30')
inrtintohandlevalues('006','联想','2011.4.13')
createtable"register"(--注册表
"staff_id"CHAR(10)notnull,
"ID_no"CHAR(18)notnull,
"register_time"DATETIME,
"phone_no"CHAR(12),
constraintPK_REGISTERprimarykey("staff_id","ID_no")
)
inrtintoregister
values('01','3645678901111','2009.1.20','')
inrtintoregister
values('02','362222','2009.4.28','')
inrtintoregister
values('03','363333','2010.3.21','')
inrtintoregister
values('04','364444','2009.2.06','')
inrtintoregister
values('05','365555','2010.3.21','')
inrtintoregister
values('06','366666','2010.5.08','')
go
--建立索引
createindexhandle_FKonhandle(business_noASC)
createindexhandle2_FKonhandle(mobilephoneASC)
createindex"u_FK"on"bank_card"("ID_no"ASC)
createindex"pay_FK"on"pay"("card_no"ASC)
createindex"pay2_FK"on"pay"("fee_no"ASC)
createindex"register_FK"on"register"("staff_id"ASC)
createindex"register2_FK"on"register"("ID_no"ASC)
createindex"belong_FK"onmobile("ID_no"ASC)
createindex"consume_FK"onaccount("account_no"ASC)
--修改表,外键
altertablehandle
addconstraintFK_handle_handle_businessforeignkey("business_no")reference
sbusiness("business_no")
altertablehandle
addconstraintFK_handle_handle2_mobileforeignkey(mobilephone)referencesm
obile(mobilephone)
altertable"bank_card"
addconstraintFK_BANK_CAR_USE_USERforeignkey("ID_no")
references"ur"("ID_no")
altertable"pay"
addconstraintFK_PAY_PAY_BANK_CARforeignkey("card_no")
references"bank_card"("card_no")
altertable"pay"
addconstraintFK_PAY_PAY2_PHONE_COforeignkey("fee_no")
references"phone_cost"("fee_no")
altertable"register"
addconstraintFK_REGISTER_REGISTER_STAFFforeignkey("staff_id")references
"staff"("staff_id")
altertable"register"
addconstraintFK_REGISTER_REGISTER2_USERforeignkey("ID_no")references"us
er"("ID_no")
altertablemobile
addconstraintFK_mobile_BELONG_USERforeignkey("ID_no")
references"ur"("ID_no")
altertablebusiness
addconstraintFK_business_CONSUME_ACCOUNTforeignkey("account_no")referenc
es"account"("account_no")
--修改表,外键建立触发器T1(一个用户只能有一个)
createtriggerT1onur
forinrt,update
as
if@@rowcount=1
begin
declare@counttinyint
lect@count=count(_no)
fromur,inrted
_password=_password
if@count>2
begin
print'一名用户最多只有一个密码'
rollback
end
end
本文发布于:2023-03-02 18:03:32,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1677751413113851.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:怎么查手机话费.doc
本文 PDF 下载地址:怎么查手机话费.pdf
留言与评论(共有 0 条评论) |