Java实例幸运观众手机号码抽取器.docx
- 文档编号:7147848
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:30
- 大小:686.34KB
Java实例幸运观众手机号码抽取器.docx
《Java实例幸运观众手机号码抽取器.docx》由会员分享,可在线阅读,更多相关《Java实例幸运观众手机号码抽取器.docx(30页珍藏版)》请在冰豆网上搜索。
Java实例幸运观众手机号码抽取器
幸运观众手机号码抽取器
——自主实验
前言-----------------------------------------------------------------------------------3
第一章实验介绍---------------------------------------------------------------4
1.1基础知识------------------------------------------------------------------------------4
1.2实验目的-----------------------------------------------------------------------------4
1.3实验原理-----------------------------------------------------------------------------4
1.4实验环境-----------------------------------------------------------------------------5
第二章系统需求分析---------------------------------------------------------6
2.1整体框架分析-----------------------------------------------------------------------6
2.2功能分析-----------------------------------------------------------------------------6
2.3模块分析-----------------------------------------------------------------------------6
第三章项目分析---------------------------------------------------------------9
第四章数据库设计----------------------------------------------------------10
4.1数据库设计思想------------------------------------------------------------------10
4.2数据库创建------------------------------------------------------------------------10
4.3数据库连接设置------------------------------------------------------------------14
4.4数据库操作------------------------------------------------------------------------17
第五章系统实现与运行----------------------------------------------------23
5.1编码---------------------------------------------------------------------------------23
5.2测试---------------------------------------------------------------------------------26
5.3程序运行详细过程说明---------------------------------------------------------26
5.4关键类和程序段说明------------------------------------------------------------28
第六章系统功能评价与改进思路----------------------------------------33
参考文献--------------------------------------------------------------------------34
前言
我们在很多电视台上都看到过手机号码的抽奖程序一般来说该抽奖的流程都是一致的。
首先电视台的节目会要求观众打电话或发短信给某一个号码,内容大致是回答问题或是投票等,然后电视台会通过一个特殊的抽奖程序从打过电话或发过短信的观众的手机号码中抽取幸运观众,客服人员外呼,给抽取出来的手机号码打电话,询问参与节目互动情况、身份以及地址等情况。
现在也已经有了很多用各种不同技术实现的手机抽奖软件,本实验用Java技术来实现该功能。
分析手机抽奖过程及其原理,可以归纳出手机号码抽奖程序有如下特点:
(1)抽奖的手机号码必须是打过电话或发过短信的号码。
这一点的实现应该说是比较简单的,一般来说电视台都是与一些电信公司来合作办这个节目的,所有的手机号码我们可以从该电信公司的数据库中来获取。
(2)必须保证所有的手机号码具有公平的被抽取的机会。
这一点是程序优劣的关键所在。
(3)必须保护中奖手机号码的用户的隐私。
这个问题绝对不容忽视,因为电视台是一个公众的平台,同时关注的人特别多。
如果我们没有采取必要的措施,那么会给该手机号码的用户带来许多的不便。
这一点在程序之中的解决也比较简单只要我们在显示手机号码的时候隐藏号码的部分数字即可。
比如号码最后两位用“**”代替。
(4)必须考虑同时要抽取多名中奖者的情况,也就是说我们抽取了一个手机号码后应该对它予以保留并且在原数据库中对该号码进行删除以防再次被抽中造成重复中奖的情况。
然后抽取第二个号码反复上面的操作直至完成所有幸运号码的抽取。
这样的话我们可以在数据库中多建立一个表用来保存中奖的号码。
第一章实验介绍
1.1基础知识
Java技术已经成为当今Internet应用开发的核心与主流技术。
这一方面是因为Java语言具有面向对象、可移植性、强壮性与安全性等优良特性,另一方面也由于Java技术对各个层次的分布式(包括电器设备的嵌入式计算、桌面计算与企业级计算)都提供了全面系统的方法与技术。
因此,本实验采用Java语言来设计本系统。
Swing是使用纯Java语言编写的更高级的GUI工具箱。
它以AWT为基础,但提供了许多新的GUI组件及与GUI相关的有用的应用程序服务。
Swing提供了一种可插拔的界面外观(pluggablelook-and-feel)体系结构,这种体系结构使应用程序可以容易地进行配置,以显示独立于平台的界面外观或者模拟本机操作系统的界面外观。
Swing也包括一些可存取性API,它们帮助一些辅助性的技术。
Swing的这些特点使它成为实现本系统功能的界面的最佳选择。
数据库是数据管理的最新技术,是计算机科学的重要分支今
天,信息资源已成为各个部门的重要财富和资源。
作为信息系统核心和基础的数据库技术得到越来越广泛的应用。
如数据库被应用于维护商业内部记录,在万纬网上为顾客和客户显示数据,以及支持很多其他商业处理。
鉴于数据库的强大信息存储和处理功能,本实验用数据库来保存参与的手机观众信息。
JDBC是Java数据库连接性(JavaDatabaseConnectivity)API,它允许用户从Java应用程序中访问任何表格化数据源。
JDBC除了提供到更宽范围的SQL数据库的连接外,也允许用户访问其他的表格数据源,例如电子表格。
JDBC定义了一个底层的API,用来支持独立于任何特定SQL实现的基本SQL功能。
这意味着重要的是执行原SQL语句,然后检索它们的结果。
JDBC的主要特点是与任何关系数据库协同工作的方式完全相同。
JDBC主要有如下功能:
(1)建立与数据库或其他表列数据源的连接;
(2)向数据库发送SQL命令;(3)处理结果。
本实验中使用JDBC技术成功地实现了Java应用程序与数据库的连接。
1.2实验目的
通过实现幸运观众手机号码抽取器功能的实际编程了解多线程和数据库操作原理,提高Swing、多线程和JDBC技术结合的综合运用能力。
1.3实验原理
目前与观众互动类电视节目越来越多,比如一场球赛转播,观众可以发短信与主持人进行评球,转播结束后,主持人利用抽奖程序,从发送短信的观众的手机号码中抽取若干个号码作为幸运观众,并给予一定的奖品。
本实验要求在理解Java多线程原理基础上,设定简单的参数后,能随机抽取数据库中的若干个观众手机号码,显示时隐藏最后两位号码,并同时显示该手机号码的所属地。
1.4实验环境
软件环境:
Windows操作系统、具有JDK1.4以上Java编译环境和JCreator3.5或Eclipse3.0以上Java编辑环境。
硬件环境:
计算机
第二章系统需求分析
1.1整体框架分析
1.2功能分析
1.3模块分析
手机参与观众发送短信给服务器,服务器接受短信并将观众的手机号码及其他相关信息输入数据库;准备工作结束后,主持人利用抽奖程序,从数据库中的发送短信的观众的手机号码中随机抽取若干个号码作为幸运观众;客服人员外呼,给抽取出来的手机号码打电话,询问参与节目互动情况、身份以及地址等情况。
系统模拟图
功能流程图
系统模块设计图
第三章项目分析
UML类图
第四章数据库设计
4.1数据库设计思想
鉴于本实验系统要用的数据数量不是特别庞大,所以选用Access来建立数据库。
如果希望把该系统推广,或是企业化,可以选用SQLServer来建立数据库。
Access是一种关系型的桌面数据库管理系统,是MicrosoftOffice套件产品之一。
本系统选用了Access2003.
Access具有以下一些特点:
(1)具有方便实用的强大功能;
(2)可以利用各种图例快速获取数据;
(3)可以利用报表设计工具,方便生成报表;
(4)能处理多种数据类型;
(5)采用OLE技术,能方便地创建和编辑多媒体数据库;
(6)支持ODBC标准的SQL数据库的书;
(7)设计过程自动化,大大提高了数据库的工作效率;
(8)具有较好的集成开发环境;
(9)提供了断点设置、单步执行等调试功能。
本实验系统先建立名为“手机抽奖”的Access数据库,然后在其下建立“所属地”和“参与的观众”两张表,分别用于存储手机号码与相应所属地之间的联系和发短信参与抽奖的观众的信息。
4.2数据库创建
(1)打开Access,弹出如图4.1所示的对话框。
图4.1
(2)选中“空Access数据库”单选项,单击“空数据库”,弹出“文件新建数据库”对话框,如图4.2所示,选择好数据库的存储路径并输入数据库名称“手机抽奖.mdb”后,单击“创建按钮”。
图4.2
(3)在如图4.3所示的对话框中双击“使用设计器创建表”选项,弹出如图4.4所示界面。
图4.3
图4.4
(4)输入各字段及数据类型,然后右击号码一在行,在弹出的快捷菜中选择“主键”命令,如图4.5所示。
图4.5
(5)执行“文件”→“保存”命令,输入表名“所属地”,关闭数据表设计窗口,此时“手机抽奖:
数据库”对话框就会出现一个数据表“所属地”,双击它可以在表中输入数据,如图4.6所示。
本实验通过程序来向表中插入数据。
图4.6
(6)再次执行(3)(4)(5),在“手机抽奖”下创建表“参与的观众”。
如图4.7所示。
图4.7
4.3数据库连接设置
(1)打开控制面板→管理工具,双击,进入如图4.8所示界面。
图4.8
(2)双击数据源(ODBC),出现如图4.9所示界面。
图4.9
(3)选择系统DSN,准备添加数据源:
出现如图4.10的对话框。
图4.10
(4)选择新数据源的驱动程序:
DriverdoMicrosoftAccess(*.mdb),点击完成按钮,如图4.11所示。
图4.11
(5)输入新数据源名source,点击选择按钮,如图4.12所示。
图4.12
(6)指定数据库:
手机抽奖.mdb.如图4.13所示。
点击确定按钮,返回图4.12,点击确定按钮。
图4.13
(7)添加了新数据源source,点击确定按钮,关闭窗口。
经过上述7个步骤,我们创建了一个数据源source,这个数
据源就是待JAVA语言操作的ACCESS数据库文件――“手机抽奖.mdb”。
以上做好了数据库连接的设置工作。
4.4数据库操作
在JAVA环境中访问数据库需要通过JDBC(JAVA数据库连接),具体说JDBC可完成三件事:
(1)与ACCESS数据库连接;
(2)用SQL语言对ACCESS数据库进行操作;
(3)处理ACCESS数据库返回的结果。
下面将详细介绍。
JDBC与ACCESS数据库连接时,首先建立一个JDBC-ODBC桥接器。
因ODBC(开放式数据库连接)驱动程序可与目前流行的任何一种数据库直接建立连接,而JAVA的JDBC借助桥接器另一端ODBC就间接与任何一种数据库连接了。
建立JDBC-ODBC桥接器用Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");语句,其中Class是包java.lang中的一个类,该类通过调用它的方法forName就可以建立JDBC-ODBC桥接器。
建立桥接器可能发生异常,捕获这个异常需建立桥接器的模式如下:
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione)
{}
桥接器建好后,就要将JAVA与ACCESS数据库真正建立连接了:
使用包java.sql中的Connection类声明一个连接对象con,格式为Connectioncon,再使用类DriverManager的方法getConnection创建这个连接对象con,语句格式如下:
Connectioncon=DriverManager.getConnection("jdbc:
odbc:
source");
这样JAVA就与ACCESS数据库真正建立了连接。
接下来就可以通过JAVA程序对ACCESS数据库进行操作了
(1)通过运行a.java程序向数据表“所属地”插入数据,程序如下:
//建立手机号码与所属地的联系
importjava.sql.*;//importtheJDBCcorepackage
importjava.math.*;//随机数生成器
importjava.io.*;
importjava.math.*;
classJdbcDemo
{
publicstaticvoidmain(Stringargs[])throwsIOException
{
FileReaderfile=newFileReader("1.txt");
Stringsw,q;
intstart,end,m;
chars1,s2;
for(inti=0;i<20840;i++)
{
start=end=0;
for(intA=0;A<7;A++)
{
m=file.read()-'0';
start=start+m*(int)(Math.pow(10.0,6-A));
}
file.read();
for(intB=0;B<7;B++)
{
m=file.read()-'0';
end=end+m*(int)(Math.pow(10.0,6-B));
}
file.read();
s1=(char)file.read();
s2=(char)file.read();
sw=Character.toString(s1)+Character.toString(s2);
file.read();
file.read();
for(inty=start;y<=end;y++)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//loadtheJDBCdriver
Connectioncon=DriverManager.getConnection("jdbc:
odbc:
source");
Statementstmt=con.createStatement();
q=newString("INSERTINTO所属地(号码,地区)VALUES”+”("+"'"+y+"','"+sw+"')");
stmt.executeUpdate(q);
con.close();
}
catch(ClassNotFoundExceptione)
{
e.printStackTrace();
}
catch(SQLExceptione)
{
e.printStackTrace();
}
}
}
}
}
运行后得到更新后的表“所属地”如图4.14:
图4.14
(2)通过运行b.java程序向数据表“参与的观众”插入数据,如下:
//建立模拟的参与的观众手机号码数据表
importjava.sql.*;//importtheJDBCcorepackage
importjava.math.*;//随机数生成器
classJdbcDemo
{
publicstaticvoidmain(Stringargs[])
{
intr,m,flag;
Stringsw;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//loadtheJDBCdriver
Connectioncon=DriverManager.getConnection("jdbc:
odbc:
source");
Statementstmt1=con.createStatement();
Statementstmt2=con.createStatement();
for(inti=0;i<10000;)
{
m=1300000;
StringBuffert=newStringBuffer("13");
for(intj=0;j<5;j++)
{
r=(int)(Math.random()*10);
m=m+r*(int)(Math.pow(10.0,(4-j)));
t.append(Integer.toString(r));
}
for(intk=0;k<4;k++)
{
r=(int)(Math.random()*10);
t.append(Integer.toString(r));
}
Stringquery="SELECT地区FROM所属地WHERE号码="+m;
ResultSetrs=stmt1.executeQuery(query);
while(rs.next())
{
sw=rs.getString("地区");StringBuffers=newStringBuffer("INSERTINTO参与的观众(序号,手机号码,地区)VALUES(");
s.append("'"+i+"'");
s.append(",");
s.append("'"+t.toString()+"'");
s.append(",");
s.append("'"+sw+"'");
s.append(")");
flag=stmt2.executeUpdate(s.toString());
if(flag!
=0)
i++;
}
}
con.close();
}
catch(ClassNotFoundExceptione)
{
e.printStackTrace();
}
catch(SQLExceptione)
{
e.printStackTrace();
}
}
}
运行后得到更新后的表“参与的观众”如图4.15:
图4.15
第五章系统实现与运行
5.1编码
模拟随机抽奖过程(主程序)
代码如下:
//主程序
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjava.sql.*;//importtheJDBCcorepackage
importjava.math.*;//随机数生成器
importjava.lang.Thread;
publicclassLuckyNumbersextendsJFrame
{
JLabel[]label=newJLabel[5];
JButtonstartButton,endButton;
choseh=newchose();
Threadt=newThread(h);
staticintk=0;
LuckyNumbers()
{
//GUI合成
JPanelpanel1=newJPanel();
JPanelpanel2=newJPanel();
panel1.setLayout(newBoxLayout(panel1,BoxLayout.Y_AXIS));
panel2.setLayout(newFlowLayout());
for(inti=0;i<5;i++)
{
label[i]=newJLabel();
label[i].setAlignmentX(Component.LEFT_ALIGNMENT);
label[i].setFont(newFont("SansSerif",Font.BOLD|Font.ITALIC,30));
panel1.add(label[i]);
}
startButton=newJButton("开始");
panel2.add(startButton,"Center");
endB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实例 幸运 观众 手机号码 抽取
![提示](https://static.bdocx.com/images/bang_tan.gif)