目录
第一章设计分析 (2)
1.1 需求分析 (2)
1.2 功能设计 (2)
第二章概要设计 (3)
2.1 程序设计 (3)
2.2 功能设计 (4)
第三章软件环境介绍 (5)
3. 1 开发环境 (5)
3. 2 开发工具 (5)
3. 3 MySql数据设计 (6)
第四章测试运行 (7)
4.1 程序运行界面 (7)
4.2 新建功能 (7)
4.3 修改功能 (8)
4.4 顺序显示 (8)
4.5 分组显示 (9)
4.6 搜索功能 (9)
第五章总结与分析 (10)
第七章参考文献 (11)
第八章程序源代码 (12)
8.1 类PhoneNumber (12)
8.2 类Operation (15)
8.3 类Searcher (19)
1.1需求分析
现在各大手机都有自己的、各种通讯录程序,但是这些公司都有自己的版权,我们也不可能得到这些源代码!而且这些公司的程序也相当复杂,仅从日常应用方面来说,对于初学java的我们也无法理解,就需要我们开发一个简单易懂的电话号码查询系统程序。
1.2功能设计
本程序的构建参照了手机通讯录,其功能是:
有电话录入,修改,增加,删除,按姓名查询,按电话号码查询,按部门查询,按部门显示,显示所有电话号码信息,打印等功能。
2.1程序设计
在本程序设计过程中用到了父类JFrame、JTable、JPanel、JMenuBar、JMenuItem、JButton。
JMenuBar用来创建主菜单
JMenuItem创建子菜单
JFrame创建框架
JTable创建表格部分
JScorollPane向文本框添加滚动条
JMenuItem创建功能键
JButton添加触发按钮。
编写BufferReader()方法实现待分析文件中数据的读取。
编写readLine()方法实现数据的读取。
编写Select()法实现查询。
编写rankVector()方法实现排序
编写addNumber()方法实现新建
编写removeNumber()方法实现删除
编写modifyPhoneNumber()方法实现修改
利用actionPerformed ()方法做为事件监听器。
编写J_fenxi()实现构造。
2.2 功能设计
主页面以分组形式显示电话号码的详细信息,满足了用户浏览通讯录时分组查看电话号码的要求,同时提供电话号码、姓名、分组、QQ、Email的详细查询及模糊查询功能,方便用户快速查找相关的号码信息。具体要求如下:
(1)新增功能:点击菜单栏中的编辑选项,选择新增功能,可添加号码详细信息
(2)删除功能:选中号码信息,点击菜单栏中的编辑选项,选择删除功能
(3)修改功能:选中号码信息,点击菜单栏中的编辑选项,选择修改功能,点击要修改的单元格所在的行即可修改
(4)查询功能:主页面搜索栏可根据号码、姓名、分组等进行搜索
(5)退出程序:点击菜单栏中的文件选项,选择关闭功能
图2-1 功能结构图
第三章软件环境介绍
3. 1 开发环境
本次项目的软件环境基于开源软件的使用基础上开发的,所以使用的开发环境是:前台使用JSP+CSS开发,后台使用JSP + MySQL做为基础,使用JavaBean 对数据进行存取。如图3-1所示:
图3-1前台与后台关系
3. 2 开发工具
①集成开发环境:MyEclipse 2014;
②服务器:Apache Tomcat 7.0;
③数据库:MySQL 5.6;
④数据库管理系统:Navicat MySQL 8.0;
⑤JavaBean开发使用:JDK 7.0
3. 3 MySql数据设计表3-1 数据表
第四章测试运行
4.1 程序运行界面
电话号码查询系统一共分为3部分,分别是菜单栏、查询栏、显示框。菜单栏由“文件”、“编辑”、“视图”组成,“文件”菜单有关闭功能键,“编辑”菜单有新建、删除、修改功能键,“视图”菜单有顺序显示和分类显示。如图4-1所示
图4-1 运行界面
4.2 新建功能
选择编辑—新建功能,填写号码信息后点击确定后即可保存。
图4-2 新增页面
4.3 修改功能
点击要修改的单元格所在的行,然后点击编辑修改键开始修改信息,点击确定后即可保存。
图4-3 修改页面
4.4 顺序显示
手机号码按从小到大的顺序排列显示。
图4-4 顺序显示页面
4.5 分组显示
按分组的类别显示,同分组的元素在一起。
图4-5 分组显示页面
4.6 搜索功能
可以按照手机号码,姓名、分组等进行搜索。
图4-6 搜索页面
第五章总结与分析
通过完成一个小程序,不仅发现了自己在java知识中的不足,对java更加了解,还能够增加自己的变成经验,增强对逻辑思维的运用能力。
在本次课程设计的过程中,详细阐述了整个网站的设计思路,并对各部分设计周期进行了详尽的分析,最终达成了一个完整的设计方案;在文章的最后,还根据数据库系统的调试结果,提出了可以进一步改进的部分,以便在以后的学习工作中得到更好的完善。以及在投入实际应用后网站可以更加稳定可靠的工作。
通过这段时间的课程设计,完成了“电话号码查询系统”的设计,更重要的是又复习了一遍JSP知识,看了许多关于JSP的书,不仅丰富了知识,而且从中学到了编程思想,相信通过这次课程设计,对以后的学习和程序设计会有很大的帮助。
第七章参考文献
[1] 张志峰等,《JSP程序设计实训与案例教程》,清华大学出版社.2013
[2] 荣钦科技,《JSP动态网站开发与实例》,清华大学出版社.2012
[3] 黄梯云,《管理信息系统》,高等教育出版社. 2013
[4] 曾凡奇等:《基于Internet的管理信息系统》,中国财政经济出版社,2011
[5] 易荣华:《管理信息系统》,高等教育出版社,2014
[6] 张靖:《管理信息系统》,高等教育出版社,2013
[7]张国锋:《管理信息系统》,机械工业出版社,2012
第八章程序源代码
8.1 类PhoneNumber
publicclass PhoneNumber {
private String Number;
private String Name;
private String Partition;
private String QQNumber;
private String Email;
public PhoneNumber() {}
public String getNumber(){
return Number;
}
public String getName(){
return Name;
}
public String getPartition() {
return Partition;
}
public String getQQNumber() {
return QQNumber;
}
public String getEmail() {
return Email;
}
public String getPretreatment( int Style ) { String Key = null;
switch ( Style ) {
case 1:
Key = getNumber();
break;
case 2:
Key = getName();
break;
case 3:
Key = getPartition();
break;
}
return Key;
}
class NumberException extends Exception {
public String warningString(){
return"电话号码不符合编码规则!";
}
}
publicboolean isNumeric( String str ) {
Pattern pattern = https://www.360docs.net/doc/5d17098843.html,pile("[0-9]*");
return pattern.matcher(str).matches();
}
publicboolean setNumber( String number ) {
number.trim();
String Str = number.substring( 0, 3 );
try {
if( !isNumeric( number ) )
thrownew NumberException();
}
catch ( NumberException e ) {
JOptionPane.showMessageDialog( null, e.warningString()+"号码为:"+number );
returnfalse;
}
try {
if ( number.length() != 11 )
thrownew NumberException();
}
catch ( NumberException e ){
JOptionPane.showMessageDialog( null, e.warningString()+"号码为:"+number );
returnfalse;
}
try {
int num = Integer.parseInt( Str );
if ( num< 130 || num> 139 )
{
num /= 10;
if(num != 15 || num != 18 )
thrownew NumberException();
}
Number = number;
returntrue;
}
catch ( NumberException e ) {
JOptionPane.showMessageDialog( null, e.warningString()+"号码为:"+number );
returnfalse;
}
}
publicboolean setName( String name ) {
name.trim();
Name = name;
returntrue;
}
publicboolean setPartition( String Str ) {
Str.trim();
Partition = Str;
returntrue;
}
publicboolean setQQNumber( String qqnumber ) {
qqnumber.trim();
QQNumber = qqnumber;
returntrue;
}
class EmailException extends Exception {
public String warningString() {
return"电子邮箱格式错误!";
}
}
publicboolean setEmail( String email ) {
email.trim();
String Str = email.substring(email.length()-4 );
try {
if ( !Str.equals(".com") )
thrownew EmailException();
if ( email.indexOf('@') < 1 )
thrownew EmailException();
Email = email;
returntrue;
}
catch ( EmailException e ) {
JOptionPane.showMessageDialog(null, e.warningString() );
returnfalse;
}
}
/**
* @param args
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
}
}
8.2类Operation
publicclass Operation extends PhoneNumber {
public VectorPhoneNumberList;
public Operation() {
PhoneNumberList = new Vector();
}
public VectorgetPhoneNumberList() {
return PhoneNumberList;
}
class OperatingException extends Exception {
public String warningString() {
return"操作失败!";
}
}
public Vector Select( String KeyStr, int Style ) { String Key = KeyStr.trim();
VectortempPhoneNumberList = new Vector();
for ( int pt = 0; ptString preKey =
PhoneNumberList.elementAt(pt).getPretreatment(Style);
if ( preKey.equals(Key) )
tempPhoneNumberList.addElement(PhoneNumberList.elementAt(pt) );
}
return tempPhoneNumberList;
}
publicboolean addNumber( PhoneNumberphoneNumber, int Index ) { try {
if ( PhoneNumberList.contains(phoneNumber) )
thrownew OperatingException();
}
catch ( OperatingException e ) {
JOptionPane.showMessageDialog(null, e.warningString() );
returnfalse;
}
try {
for ( int pt = 0; ptif
( PhoneNumberList.elementAt(pt).getNumber().equals(phoneNumber.getNumbe r()) )
thrownew OperatingException();
if ( Index >= PhoneNumberList.size() )
Index = PhoneNumberList.size();
PhoneNumberList.insertElementAt(phoneNumber, Index );
returntrue;
}
catch ( OperatingException e ) {
JOptionPane.showMessageDialog(null, e.warningString() );
returnfalse;
}
}
publicboolean removeNumber( String phoneNumber ) {
try {
int Index = 0;
for ( int pt = 0; ptif
( PhoneNumberList.elementAt(pt).getNumber().equals(phoneNumber) )
Index = pt;
if ( Index >= PhoneNumberList.size() )
thrownew OperatingException();
PhoneNumberList.removeElementAt(Index);
returntrue;
}
catch ( OperatingException e ) {
JOptionPane.showMessageDialog(null, e.warningString() );
returnfalse;
}
}
publicboolean modifyPhoneNumber( PhoneNumberphoneNumber ) { try {
if ( PhoneNumberList.contains(phoneNumber) )
thrownew OperatingException();
int Index = 0;
for ( int pt = 0; ptif
( PhoneNumberList.elementAt(pt).getNumber().equals(phoneNumber.getNumbe r()) ) {
PhoneNumberList.removeElementAt(pt);
PhoneNumberList.addElement(phoneNumber );
}
}
catch ( OperatingException e ) {
JOptionPane.showMessageDialog(null, e.warningString() );
returnfalse;
}
try {
if ( !PhoneNumberList.contains(phoneNumber) )
thrownew OperatingException();
returntrue;
}
catch ( OperatingException e ) {
JOptionPane.showMessageDialog(null, e.warningString() );
returnfalse;
}
}
public
VectorsortPhoneNumber( VectorphoneNumberList, String KeyStr ) {
VectortempPhoneNumberList = new
Vector( 10, 3 );
for ( int Index = 0; Index ( phoneNumberList.elementAt(Index).getPartition().equals(KeyStr) )
tempPhoneNumberList.addElement(phoneNumberList.elementAt(Index) );
return tempPhoneNumberList;
}
public
VectorrankVector( VectorphoneNumberList ) { VectortempPhoneNumberList = new Vector();
tempPhoneNumberList.addElement(phoneNumberList.elementAt(0));
for ( int Index = 0; Index boolean flag = true;
for ( pt = 0; ptif
( phoneNumberList.elementAt(Index).getNumber().compareTo(tempPhoneNumbe rList.elementAt(pt).getNumber()) < 0 )
break;
}
for ( int i = 0; iif
( tempPhoneNumberList.elementAt(i).getNumber().equals(phoneNumberList.e lementAt(Index).getNumber()) )
flag = false;
if ( flag )
tempPhoneNumberList.insertElementAt(phoneNumberList.elementAt(Index), pt );
}
return tempPhoneNumberList;
}
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
}
}
8.3类Searcher
JFrame {
public DefaultTableModel Data;
public JTable View;
public JButton button;
public JComboBox combobox;
public JFrame app;
public Operation operation;
public JMenuBar MenuBar;
public JTextField textField;
public JMenuItem[][] MenuItem = {
{ new JMenuItem("关闭(C)") },
{ new JMenuItem("新建(N)"), new JMenuItem("删除(D)"), new JMenuItem("修改(M)") },
{ new JMenuItem("顺序显示(O)"), new JMenuItem("分类显示(S)") } };
public Searcher() {
super("Searcher");
operation = new Operation();
MenuBar = new JMenuBar();
setJMenuBar(MenuBar);
Container c = getContentPane();
c.setLayout(new FlowLayout());
Data = new DefaultTableModel( 1, 5 );
View = new JTable(Data );
View.setValueAt( "号码", 0, 0 );
View.setValueAt( "姓名", 0, 1 );
View.setValueAt( "分组", 0, 2 );
View.setValueAt("QQ", 0, 3 );
View.setValueAt("Email", 0, 4 );
View.setPreferredScrollableViewportSize(new Dimension( 300, 150 ) );
View.setAutoResizeMode(JTable.AUTO_RESIZE_OFF );
JScrollPanespane = new JScrollPane(View );
spane.setLayout(new ScrollPaneLayout() );
View.setVisible(true );
JMenu[] Menu = { new JMenu("文件(F)"), new JMenu("编辑(E)"), new JMenu("视图(V)") };
char[][] MenuChar = { { 'F', 'E', 'V'}, { 'C'}, { 'N', 'D', 'M'}, { 'O', 'S' } };
int Index, IndexI;
for (Index = 0; Index
MenuBar.add(Menu[Index]);
Menu[Index].setMnemonic(MenuChar[0][Index]);
for(IndexI = 0; IndexI