数据库课程电话计费系统Word文档格式.docx
《数据库课程电话计费系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据库课程电话计费系统Word文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
![数据库课程电话计费系统Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/40da6365-32fe-498e-9037-6c1dee276b25/40da6365-32fe-498e-9037-6c1dee276b251.gif)
实现电话计费系统的基本功能,完成数据库的基本操作
课程设计工作进度计划
序号
起止日期
工作内容
分工情况
1
2012-6.1—
2012-6.2
需求分析
由孔旭东搜索相关资料,了解需求,并完成相应文档。
2
2012-6.3—
2012-6.4
概要设计
由夏方杰完成该部分的文档编写,由孔旭东和吴启阳完成E-R图。
3
2012-6.5—
2012-6.6
数据库设计
由王兵完成设计,由吴启阳制作表格,填写相应信息。
4
2012-6.7—
2012-6.15
设计实现
由王兵完成主模块及公共部分的相应操作。
由夏方杰完成添加用户,杨天金完成数据库设计,向世阳完成系统登录,吴启阳完成缴费,徐孔旭东成修改密码。
5
2012-6.16
测试
由王兵完成。
2012-6.17
总结
大家讨论得出总结,由夏方杰完成相应文档。
指导教师签字:
年月日
教研室审核意见:
教研室主任签字:
目录
1概述1
2需求分析1
2.1系统结构1
2.2系统模块划分1
2.3功能需求1
3概念模型设计4
4关系模型设计4
5物理模型设计5
6系统测试与操作说明6
7附录8
致谢16
1概述
随着电信运营领域垄断因素的逐步消除,以及中国加入WTO后所面临的开放的电信市场,我国电信领域的竞争日益激烈。
电信市场的竞争逐步从简单的价格战转向高层次的服务竞争,运营商把提高服务能力作为核心竞争力。
计费系统作为业务运营支撑系统的基础,其准确性和有效性至关重要,计费系统的错误将直接影响结算、帐务及客户管理等系统的处理结果。
由于我国电信用户的基数很大,计费系统任何微小的偏差所造成的损失都是巨大的。
该系统信息来源主要由管理员添加,方便网站管理员的查询和管理。
该系统的任务是方便,灵活的管理网吧的各项信息
2需求分析
开发一套能够适用于电话计费管理系统,能够使运营商对电话的计费管理达到方便,易于管理,其管理人员可以对用户和电话费等信息内容进行查阅,统计和打印等管理;
本系统实现的是一个独立的系统,在数据库的基础上,实现对电话计费的管理。
2.1系统结构
其中,管理者是管理客户受理表、收费信息和收费人;
客户受理表是用户提建议的表单;
收费信息是收费人收取用户是产生的记录;
收费人收取用户的费用;
用户可以查看自己的收费信息,也可以提建议。
2.2系统模块划分
通过对系统的模块划分,可以清楚的理解系统的总体功能,以及相关功能的子功能。
图2-1系统模块划分
2.3功能需求
对于信息处理系统来说,划分系统边界很重要,即哪些功能由计算机来完成,哪些工作在计算机外完成。
这些要通过业务分析确定。
同时,业务流程中涉及的相关数据也通过业务分析得到归类和明确。
在业务分析的基础上,确定数据流图和数据字典。
本系统主要包含以下业务内容。
①能用关系数据库理论建立几个数据库文件存储用户信息、收费员信息和收费信息等;
②具有对各种数据文件装入和修改数据的功能;
③能在用户交费同时打印发票;
④能通过统计制定未来邮局服务计划方案;
⑤有多种查询和统计功能。
⑥系统维护:
如数据安全管理(含备份与恢复)、操作员管理、权限设置等;
一个用户可以拥有多个电话
一个收费员可以向多个用户收费
一个管理者可以管理多个用户和收费员
电话计费管理系统主要应该具有以下几个功能模块,
在用户信息管理部分,要求如下。
可以浏览用户信息。
可以对用户信息进行维护,包括添加及删除等操作。
在收费员信息管理部分,要求如下。
可以浏览收费员信息。
可以对收费员信息进行维护,包括添加及删除等操作。
在收费信息管理部分,要求如下。
可以浏览收费信息。
可以对收费信息进行维护操作。
首先确定实体类别以及它们各自的属性构成,指出实体标识符,并尽量规范属性名,避免同名异义或异名同义。
确定实体后,就可以分析实体之间的联系。
可以很容易确定,用户、收费员、收费信息、管理者、客户受理是不同的实体。
用户的属性:
用户编号、姓名、性别、电话号码、身份证号、申请日期,帐户余额;
收费员的属性:
收费员编号、姓名、性别、身份证号、所在邮局;
用户与收费员发生收费联系。
这里一个用户能在多个收费员出缴费,一个收费员可以收取多个用户费用,它们是m:
n联系。
当联系发生时,产生收费信息属性。
收费信息属性:
收费流水号、收费员编号、用户编号、短信条数、通话时间、收费日期实收费用、手机号码。
完整E-R图
图2-2完整E-R图
开发一套能够适用于邮局电话计费管理系统,能够使邮局对电话的计费管理达到方便,易于管理,其管理人员可以对用户和电话费等信息内容进行查阅,修改等管理;
①能用关系数据库理论建立几个数据库文件存储用户信息、收费员信息和收费信息等资料用户;
3概念模型设计
图3-1收费员E-R图
图3-2用户E-R图
图3-3收费E-R图
4关系模型设计
用户信息(姓名、电话号码、身份证号、申请日期,帐户余额、用户所在地)
收费员信息(收费员编号、姓名、性别,身份证号,所在邮局)
收费表信息(收费流水号、收费员编号、用户编号、短信条数、通话时间、收费日期、实收费用、手机号码)
图3-4电话计费系统总体E-R图
5物理模型设计
(1)用户信息
表3-1用户信息表
列名
数据类型
长度
说明
电话号码tel
char
15
唯一标识用户,主键,自动编号
姓名name
20
不能为空
用户所在地adress
身份证号id
25
申请日期utime
datetime
账户余额leftmoney
money
该用户的余额,欠费为负
性别sex
(2)收费员信息
表3-2收费员信息表
收费员编号aid
int
唯一标识收费员主键,自动编号
姓名aname
密码password
Varchar
性别asex
smallint
半字长
为“男”或“女”
所在邮局mail
(3)收费信息
表3-3收费信息表
收费流水号fid
主键,自动编号唯一标识
收费员编号adid
外码
用户编号unum
短信条数note
通话时间phonetime
numeric
收费日期time
实收费用cost
手机号码tel
6系统测试与操作说明
输入正确的用户名和密码。
验证成功则可进入主管理界面。
用户名和登录密码存在数据库中的管理员信息表。
表中存在的管理员才允许登录。
图6-1系统主界面
图6-2话费管理
选择修改密码进入修改密码界面原密码输入正确且新密码和确认密码相同时修改成功。
图6-3修改用户密码
选择添加用户进入添加用户界面用户名不重复且新密码和确认密码相同时添加成功。
图6-4添加收费员
选择缴费进入缴费界面输入电话号码显示顾客信息,输入缴费金额,点击缴费,缴费成功同时打印缴费单。
图6-5主界面
7附录
登录功能的实现
输入帐号和密码,点击登录。
其中用户名和密码必须输入正确。
如果输入错误,则系统自动提示输入错误
下面是登录功能的主要代码:
publicvoidactionPerformed(ActionEvente){
JButtonbtn=(JButton)e.getSource();
if(btn==btn1){
Stringname=txf1.getText().trim();
txf2.setEchoChar('
*'
);
Stringpassword=newString(txf2.getPassword());
Connectionconn=null;
//连接对象
Statementstmt=null;
//语句对象
ResultSetsqlRst=null;
//结果集对象
Useruser=newUser();
user.setName(name);
user.setPwd(password);
if(UserDao.okUser(user)){
newMainFrame();
jf.dispose();
}
}
elseif(btn==btn2)
System.exit(0);
}
功能的实现
主页面中,选择添加用户则进入添加用户页面。
通过填写用户名、新密码、确认密码。
其中用户名、新密码、确认密码为必添项,新密码与确认密码必须一致。
在提交之后,系统会给出相应的信息
privateJPanelgetJContentPane(){
if(jContentPane==null){
jLabel2=newJLabel();
jLabel2.setBounds(newRectangle(26,80,69,18));
jLabel2.setText("
确认密码:
"
jLabel1=newJLabel();
jLabel1.setBounds(newRectangle(34,49,44,18));
jLabel1.setText("
密码:
jLabel=newJLabel();
jLabel.setBounds(newRectangle(33,18,45,18));
jLabel.setText("
用户:
jContentPane=newJPanel();
jContentPane.setLayout(null);
jContentPane.add(jLabel,null);
jContentPane.add(jLabel1,null);
jContentPane.add(jLabel2,null);
jContentPane.add(getTf_user(),null);
jContentPane.add(getPf_pwd(),null);
jContentPane.add(getPf_okPwd(),null);
jContentPane.add(getBtn_save(),null);
jContentPane.add(getBtn_return(),null);
}
returnjContentPane;
privateJTextFieldgetTf_user(){
if(tf_user==null){
tf_user=newJTextField();
tf_user.setBounds(newRectangle(95,18,166,22));
returntf_user;
privateJPasswordFieldgetPf_pwd(){
if(pf_pwd==null){
pf_pwd=newJPasswordField();
pf_pwd.setBounds(newRectangle(95,49,164,22));
pf_pwd.setEchoChar('
returnpf_pwd;
privateJPasswordFieldgetPf_okPwd(){
if(pf_okPwd==null){
pf_okPwd=newJPasswordField();
pf_okPwd.setBounds(newRectangle(96,78,164,22));
pf_okPwd.setEchoChar('
returnpf_okPwd;
privateJButtongetBtn_save(){
if(btn_save==null){
btn_save=newJButton();
btn_save.setBounds(newRectangle(41,111,84,23));
btn_save.setText("
保存"
btn_save.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEvente){
Stringusername=tf_user.getText().trim();
//获得用户名
Stringpassword=newString(pf_pwd.getPassword());
//获得密码
StringokPassword=newString(pf_okPwd.getPassword());
//获得确认密码
Useruser=newUser();
//创建User类的实例
user.setName(username);
//封装用户名
user.setPwd(password);
//封装密码
user.setOkPwd(okPassword);
//封装确认密码
UserDao.insertUser(user);
//保存用户信息
});
returnbtn_save;
privateJButtongetBtn_return(){
if(btn_return==null){
btn_return=newJButton();
btn_return.setBounds(newRectangle(151,110,85,23));
btn_return.setText("
返回"
btn_return.addActionListener(newjava.awt.event.ActionListener(){
dispose();
returnbtn_return;
修改密码功能的实现
登录页面中,选择修改密码则进入修改密码页面。
修改密码通过填写用户名、旧密码、新密码、确认密码。
其中用户名、旧密码、新密码、确认密码为必添项,新密码与确认密码必须一致。
在提交之后,系统会给出相应的信息。
下面是修改密码功能的主要代码:
privateJPasswordFieldgetPf_oldPwd(){
if(pf_oldPwd==null){
pf_oldPwd=newJPasswordField();
pf_oldPwd.setBounds(newRectangle(93,21,185,22));
pf_oldPwd.setEchoChar('
pf_oldPwd.addActionListener(newjava.awt.event.ActionListener(){
pf_newPwd.requestFocus();
returnpf_oldPwd;
/**
*Thismethodinitializespf_newPwd
*
*@returnjavax.swing.JPasswordField
*/
privateJPasswordFieldgetPf_newPwd(){
if(pf_newPwd==null){
pf_newPwd=newJPasswordField();
pf_newPwd.setBounds(newRectangle(94,54,182,22));
pf_newPwd.setEchoChar('
pf_newPwd.addActionListener(newjava.awt.event.ActionListener(){
pf_okNewPwd.requestFocus();
returnpf_newPwd;
*Thismethodinitializespf_okNewPwd
privateJPasswordFieldgetPf_okNewPwd(){
if(pf_okNewPwd==null){
pf_okNewPwd=newJPasswordField();
pf_okNewPwd.setBounds(newRectangle(94,90,182,22));
pf_okNewPwd.setEchoChar('
pf_okNewPwd.addActionListener(newjava.awt.event.ActionListener(){
StringoldPwd=newString(pf_oldPwd.getPassword());
StringnewPwd=newString(pf_newPwd.getPassword());
StringokPwd=newString(pf_okNewPwd.getPassword());
UserDao.updateUser(oldPwd,newPwd,okPwd);
returnpf_okNewPwd;
*Thismethodinitializesbtn_update
*@returnjavax.swing.JButton
privateJButtongetBtn_update(){
if(btn_update==null){
btn_update=newJButton();
btn_update.setBounds(newRectangle(40,123,75,27));
btn_update.setText("
修改"
btn_update.addActionListener(newjava.awt.event.ActionListener(){
//获得原密码
//获得新密码
//更新密码
returnbtn_update;
*Thismethodinitializesbtn_return
btn_return.setBounds(newRectangle(162,124,82,26));
*Thisisthedefaultconstructor
publicUpdatePasswordFrame(){
super();
initialize();
*Thismethodinitializesthis
*@returnvoid
privatevoidinitialize(){
this.setSize(