JAVA版班级通讯录含代码.docx
《JAVA版班级通讯录含代码.docx》由会员分享,可在线阅读,更多相关《JAVA版班级通讯录含代码.docx(56页珍藏版)》请在冰豆网上搜索。
![JAVA版班级通讯录含代码.docx](https://file1.bdocx.com/fileroot1/2023-1/9/cf2bb7c6-1768-4ecf-af46-7998c5e1b589/cf2bb7c6-1768-4ecf-af46-7998c5e1b5891.gif)
JAVA版班级通讯录含代码
工商学院
Java程序设计课程设计
项目名称:
班级通讯录程序设计
学生:
伟
学号:
14404036
班级:
14计科数据处理实验班
指导教师:
喻晓
2015年12月13日
1选题背景
1.1国外选题现状
通讯录在当今的日常生活工作中是十分普及的,每个人都拥有大量的通讯录资料信息,当前大家一般都用手工来记录所有的通讯信息。
随着时代的发展,人们的联系方式及信息变得复杂多样,通讯录信息大量增加,导致管理这些信息资料就成了问题。
直接操作来查找,添加,修改,删除这些信息,由于数据多,工作量十分巨大,查找,编辑,都很困难,而且极易出错,容易造成资料里的混乱与丢失。
所以,运用文件或数据处库技术建立一个通讯录资料系统十分必要,使通讯录资料管理工作规化,程序化,避免资料管理中的混乱。
提高信息处理速度和准确性,能够及时准确有效的查询和修改通讯录。
1.2开发技术简介
1.2.1GUI技术简介
GUI,用户与程序之间可以方便地进行交互。
Java包含了许多支持GUI设计的类,如按钮,菜单,列表,文本框等组件类,同时要包含窗口,面板等容器类。
Java1.0刚出现时,包含一个用于基本GUI编程的类库,Sun把它叫做抽象窗体工具箱(AbstractWindowToolkit,AWT).AWT库处理用户界面元素的方法是把这些元素的创建及其行为委托给每个目标平台(Window,Solaris,Macintosh等)的本地GUI工具进行处理。
不同平台的AWT用户界面而存在着不同的bug。
程序员们必须在每一个平台上测试他们的应用程序,他们因此嘲笑AWT是“一次编写,到处调试”。
1.2.2输入输出流简介
输入/输出时,数据在通信通道中流动。
所谓“数据流(stream)”指的是所有数据通信通道之中,数据的起点和终点。
信息的通道就是一个数据流。
只要是数据从一个地方“流”到另外一个地方,这种数据流动的通道都可以称为数据流。
输入/输出是相对于程序来说的。
程序在使用数据时所扮演的角色有两个:
一个是源,一个是目的。
若程序是数据流的源,即数据的提供者,这个数据流对程序来说就是一个“输出数据流”(数据从程序流出)。
若程序是数据流的终点,这个数据流对程序而言就是一个“输入数据流”(数据从程序外流向程序)。
1.3系统测试环境
a.被测试软件系统的名称
课程设计项目——班级通讯录程序设计
b.系统任务提出者
喻晓老师
c.系统开发者
14计科数据处理实验班:
伟
d.系统用户及安装此软件的计算中心
1-708机房、1-710机房、1-710机房、3-106机房。
e.测试环境与实际运行环境之间的差异以及这些差异对测试结果的影响
测试环境:
Windows2000/XP、Windows10、JDK1.7、NetBeans。
本系统运用的开发工具主要是Eclipse。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
该系统的设计还运用到文件的相关知识。
Java使用File类创建的对象来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等,文件对象并不涉及对文件的读写操作。
1.4功能模块及系统流程分析
1.4.1功能模块
班级通讯录的功能模块有:
(1)提供登录界面,保护班级成员个人信息;
(2)添加:
可以添加联系人到班级通讯录,依次输入学号、、家庭住址、等,用户可以随时继续添加;
(3)查询:
可以通过学号查询班级成员;
(4)修改:
输入要修改的学号后,再依次输入学号、、家庭住址、等即可完成修改;
(5)删除:
可以通过删除学号直接删除某个联系人的信息。
1.4.2系统流程分析
图1-1登录界面流程图
为了保证班级通讯录中同学的私人信息不被泄露,设计了此功能,此流程图是用户在进入通讯录之前所设的,使系统更加严密,只有用户输入正确的用户名和密码才能进入。
保证了系统的严密性和实用性,达到功能的完善。
图1-2主菜单流程图
该流程图是主界面的总体功能图,即上面所显示的模块:
添加模块、查找模块、删除模块、修改模块等。
图1-3添加功能流程图
该流程图是为了实现添加班级成员功能的,在菜单选项中点击“录入学生基本信息”菜单项,便会进入信息录入界面,输入用户即将添加的人信息,包括:
联系人、学号、手机号、地址,点击“录入”按钮,在此前,各项信息被写入到文件中保存,添加完成。
图1-4删除功能流程图
该流程图是为了实现删除功能的,点击主窗体中的“删除学生基本信息”菜单,即可输入联系人的学号,此过程中还需将读取文件写到数组中,之后删除该文件中的所有容。
图1-5查找流程图
该流程是为了实现查找功能而设计的,当用户需要查找某一个人的信息的时候,输入该学生的学号,点击查询,即可显示该生的所有信息。
2功能设计
2.1从技术角度分析实现的功能
(1)图形用户界面设计中的功能
表2-1功能测试概要表
序号
功能容
控件
对象名
备注
1.
添加学生
JMenuItem
StudentSituation
子菜单(添加人)
2.
删除联系人
JMenuItem
Delete
子菜单(删除人)
3.
修改联系人
JMenuItem
ModifySituation
子菜单(修改人)
4.
查找联系人
JMenuItem
Inquest
子菜单(查找人)
5.
修改联系人
JButton
B1
确定修改按钮
6.
修改联系人
JButton
b2
取消修改按钮
表2-2文件测试概要表
序号
文件容
类名
类对象名
备注
1
文件读
ObjectInputStream
file
2
创文件输出流
FileOutputStream
out
3
文件写
ObjectOutputStream
file
4
创文件输入流
FileInputStream
in
2.2从系统角度分析实现的功能
个人通讯录管理系统设计的总体框图如下:
图2-1功能模块图
该个人通讯录管理系统总体功能主要包括以上几类:
(1)添加联系人;
(2)删除联系人;(3)修改联系人;(4)查找联系人。
在图形用户界面中,用户可以根据自己的需要,点击界面上的菜单或按钮进行某一功能的选择,,一旦选定了某个模块,便进入到下一个窗体界面,进而实现你所要实现的功能操作。
图2-2菜单栏图
菜单栏中控件分布如上图所示,菜单栏:
(编辑、操作)、编辑:
(添加组名、添加联系人、删除联系人)、操作:
(修改联系人、查找联系人)。
3详细设计
3.1界面设计
图3-1用户登录界面图
为了保证班级通讯录中同学的私人信息不被泄露,设计了此功能,此流程图是用户在进入通讯录之前所设的,使系统更加严密,只有用户输入正确的用户名和密码才能进入。
保证了系统的严密性和实用性,达到功能的完善。
如果正确,则有如下界面图:
图3-2主界面图
此界面是登录进去后的欢迎界面,右上角的“菜单选项”为主菜单,除了退出功能外,在进入其他功能是随时都可以点击菜单选项用来进入不同的功能。
首先我们来进入录入界面,录入界面如下图:
图3-3录入界面图
图3-4录入界面提示图
进入录入界面后,依次输入学号、选择性别、专业、住址、。
然后点击录入,将信息保存到文件中,如果学号输入重复,则会提示:
“该生基本信息已存在,请到修改页面修改”。
图3-5信息修改图
在修改界面中首先输入要修改的学号,接着输入新的,选择性别、专业、住址、等,如果大面积的输错,则可以点击右下方的重置按钮,以上错误信息便会清空,重新输入正确信息。
图3-6查询界面图
在查询界面中,只需要输入学号,点击“查询”即可显示该同学的所有信息。
图3-7删除功能界面图
图3-8删除功能界面图
该界面图是删除功能的输入界面图,在输入框中输入要删除的学号,点击“删除”后,会提示是否删除该同学的信息,同时该同学的信息会显示出来以便于确认信息。
3.2关键代码说明
(1)主类StudentManager.java
1)成员变量
表3-1主要成员变量表
成员变量描述
变量类型
变量名称
基本信息录入界面
基本信息修改界面
基本信息查询界面
基本信息删除界面
菜单选项
存基本信息的散列表
存放散列表的文件
StudentSituation
ModifySituation
Inquest
Delete
JMenuItem
Hashtable
File
基本信息录入
基本信息修改
基本信息查询
基本信息删除
录入,修改,查询,删除
基本信息
file
2)方法
表3-2主要方法表
名称
功能
备注
StudentManager
actionPerformed
main
创建程序主窗口
处理ActionEvent事件
程序开始运行
构造方法
接口方法
(2)学生对象
1)成员变量
表3-3主要成员变量表
描述
变量类型
变量名称
学号
所学专业
家庭住址
出生
性别
String
String
String
String
String
String
Number
Name
Discipling
Grade
Borth
Sex
2).方法
表3-4主要方法表
名称
功能
Setnumber
Setnumber
Setname
Setname
setDisciping
setDisciping
setGrade
setGrade
setBorth
setBorth
setSex
setSex
设置学号
获取学号
设置
获取
设置所学专业
获取所学专业
设置家庭住址
获取家庭住址
设置
获取
设置性别
获取性别
publicclassStudentManagerextendsJFrameimplementsActionListener
{
StudentSituation基本信息录入=null;//先把基本信息设置为空
ModifySituation基本信息修改=null;
Inquest基本信息查询=null;
Delete基本信息删除=null;
JMenuBarbar;
JMenufileMenu;
JMenuItem录入,修改,查询,删除,退出;//设置窗口的标签
Containercon=null;//容器置为空
Hashtable基本信息=null;//散列表置为空
Filefile=null;//文件置为空
CardLayoutcard=null;//布局管理置为空
JLabellabel;
JPanelpCenter;
publicStudentManager()//成员变量
{
setTitle("欢迎进入班级管理系统");
录入=newJMenuItem("录入学生基本信息");
修改=newJMenuItem("修改学生基本信息");
查询=newJMenuItem("查询学生基本信息");
删除=newJMenuItem("删除学生基本信息");
退出=newJMenuItem("退出本系统");//标签设置
退出.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEventevent)
{
System.exit(0);//退出系统
}
});
bar=newJMenuBar();
fileMenu=newJMenu("菜单选项");//设置主菜单
fileMenu.add(录入);
fileMenu.addSeparator();
fileMenu.add(修改);
fileMenu.addSeparator();
fileMenu.add(查询);
fileMenu.addSeparator();
fileMenu.add(删除);
fileMenu.addSeparator();
fileMenu.addSeparator();
fileMenu.add(退出);
bar.add(fileMenu);
setJMenuBar(bar);
label=newJLabel("欢迎进入班级管理系统!
",label.CENTER);//设置主页面的欢迎语句
label.setFont(newFont("隶书",Font.BOLD,30));//设置字体以及字的大小
label.setForeground(Color.blue);//设置字体颜色
基本信息=newHashtable();//新建一个散列表
录入.addActionListener(this);
修改.addActionListener(this);
查询.addActionListener(this);
删除.addActionListener(this);
card=newCardLayout();//新的布局管理
con=getContentPane();//定义容器
pCenter=newJPanel();
pCenter.setLayout(card);
file=newFile("学生基本信息.txt");//新建一个文件
if(!
file.exists())//判断指定位置的文件是否存在
{
try{
FileOutputStreamout=newFileOutputStream(file);//创建一个文件输出流
ObjectOutputStreamobjectOut=newObjectOutputStream(out);//写入文件
objectOut.writeObject(基本信息);//对象为“基本信息”
objectOut.close();//关闭文件
out.close();
}
catch(IOExceptione)//捕获IO(输入输出)异常
{
}
}
基本信息录入=newStudentSituation(file);
基本信息修改=newModifySituation(file);
基本信息查询=newInquest(this,file);
基本信息删除=newDelete(file);
pCenter.add("欢迎语界面",label);
pCenter.add("录入界面",基本信息录入);
pCenter.add("修改界面",基本信息修改);
pCenter.add("删除界面",基本信息删除);
con.add(pCenter,BorderLayout.CENTER);//将pCenter加入到容器中采用边界布局方式将pCenter居中
con.validate();
addWindowListener(newWindowAdapter()//给窗口注册一个事件监听器
{publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
setVisible(true);//将图形界面设置为可见的
setBounds(100,50,420,380);//设置窗口的大小
validate();
}
以上是使用对象流读写文件的部分代码,ObjectOutputStream将Java对象的基本数据类型和图形写入OutputStream。
可以使用ObjectInputStream读取(重构)对象。
通过在流中使用文件可以实现对象的持久存储。
如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
只能将支持java.io.Serializable接口的对象写入流中。
每个serializable对象的类都被编码,编码容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。
4测试系统
在登录时,若用户名或密码中有一项与之所设不同时,即会弹出提示输入错误的窗体,提示错误的窗体如下图所示:
图4-1错误提示界面图
此界面是提示界面,即之前登录输入错误时显示,此界面的设计使系统更加优化,因为用户的输入必定存在与用户名或密码不相同的情况,此界面的设计在现实中合情合理,也使用户瞬间知道自己输入的是对是错。
在实现录入功能时,如若用户输入的同学学号之前录入过时,则有下图提示:
图4-2录入功能提示界面图
在实现查找、删除、修改功能时,倘若需查找、删除、修改的联系人在通讯录中不存在,则系统会提示:
“该学号不存在”的提示话语,如下图:
图4-3错误提示界面图
总结
经过十多天的努力终于把课程设计给做完了,总算是完成了这么些天的任务了。
在刚做课程设计的时候,真的是什么都不懂,看着题目有点无从下手的感觉,这时才真切的感受到和别人是差距,平时不努力到了关键时刻就不知所措了。
接着,就从书上找例子,仿照书上的方法一步一步的,慢慢的知道了一些重点。
但是,在课程设计过程中很多功能都不能实现,按钮不能响应相应的功能,就去图书馆找书,同时问问同学老师,就这样一点一点的做,终于在他们的帮助下功能一点一点的实现了。
在课程设计过程中,看着那些一团糟的代码真的很想不做,很想放弃,但是后来还是坚持了下来。
所以真的应了那句话:
没有做不到,只有不想做。
参考文献
[1]基温.Java程序开发教程[M].:
华大学,2004
[2]跃平.Java信息管理系统开发实例导航[M].:
人民邮电,2005
[3]毕广吉.Java程序设计实例教程[M].:
冶金工业,2007
[4]王保罗.Java面向对象程序设计[M].:
清华大学,2003
[5]高林,周海燕.Jsp网上书店系统与案例分析[M].:
人民邮电,2004
[6]新,管磊.Java编程实战宝典[M].:
清华大学,2014:
238-274.
[7]Paul·Graham.黑客与画家[M].:
人民邮电,2004:
59-278.
[8]严蔚敏.数据结构(C语言版)[M].:
清华大学,2010:
98-76.
[9]云清,庆红,揭安全.数据结构(C语言版第三版)[M].:
人民邮电,2014:
169-172.
[10]云舟工作室.Python编程指南[M].:
国水利水电,2002
附录:
packageKn;
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
importjavax.swing.JOptionPane;
/**
*
*authorAdministrator
*/
publicclassasdextendsjavax.swing.JFrame{
/**
*Createsnewformasd
*/
publicasd(){
initComponents();
}
/**
*Thismethodiscalledfromwithintheconstructortoinitializetheform.
*WARNING:
DoNOTmodifythiscode.Thecontentofthismethodisalways
*regeneratedbytheFormEditor.
*/
SuppressWarnings("unchecked")
//
privatevoidinitComponents(){
setTitle("欢迎进入实验班班级通讯录系统");
jTabbedPane1=newjavax.swing.JTabbedPane();
jLabel1=newjavax.swing.JLabel();
jLabel2=newjavax.swing.JLabel();
jLabel3=newjavax.swing.JLabel();
id=newjavax.swing.JTextField();
password=newjavax.swing.JPasswordField();
dl=newjavax.swing.JButton();
close=newjavax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("实验班班级通讯录");
jLabel2.setText("用户名");
jLabel3.setText("密码");
dl.setText("登录");
dl.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
dlActionPerformed(evt);
}
});
close.setText("关闭");
close.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
closeActionPerformed(evt);
}
});
javax.swing.GroupLayoutlayout=newjavax.swing.GroupLa