通讯录管理系统Java课程设计Word文件下载.docx
《通讯录管理系统Java课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统Java课程设计Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]张广彬.Java课程设计案例精编(第二版).北京:
清华大学出版社,2011.
[2]耿祥义.Java课程设计(第二版).北京:
清华大学出版社,2008.
[3]耿祥义.JAVA大学实用教程.北京:
[4]邹林达.陈国君Java2程序设计基础.北京:
清华大学出版社,2010.
[5]邹林达.Java2程序设计基础实验指导.北京:
清华大学,2010.
指导教师(签名):
20年月日
1需求与总体设计……………………………………………………………………………1
1.1需求分析……………………………………………………………………………………1
1.2本系统总体功能………………………………………………………………………1
1.3系统流程图………………………………………………………………………2
1.4本系统E-R图…………………………………………………………………………………5
2详细设计…………………………………………………………………………………8
2.1用户登录模块功能………………………………………………………………………8
2.2用户提示功能实现…………………………………………………………………8
2.3帐户修改功能实现…………………………………………………………………………8
2.4主窗体功能…………………………………………………………………………………8
2.5文件读取与新增模块功能…………………………………………………………………9
3编码实现…………………………………………………………………………………9
3.1用户登录模块代码………………………………………………………………………9
3.2登陆按钮触发事件代码…………………………………………………………………11
3.3主窗体代码…………………………………………………………………………………12
3.4新增与文件读取模块代码…………………………………………………………………19
4系统测试…………………………………………………………………………………30
总结…………………………………………………………………………………33
1需求与总体设计
1.1需求分析
随着社会的发展,现代人的交际圈越来越大,接触的人也越来越多。
面对着没完没了的通讯记录,过去的老式人为存储已远远满足不了需求,如果想查询,则需一个一个的翻阅,却怎么都找不到自己的需要的号码。
所设计的通讯录系统正是在这种需求之下应运而生的,通讯录管理系统是一个非常通用的管理系统。
很多地方都需要拥有自己的通讯录管理系统,以便对自己的同学、同事、朋友等信息资料的管理及使用。
所以在这两周的实训中,,通讯录作为一种实用行的工具,有着不可估量的市场前景。
1.2本系统总体功能模块图
图1.1系统总体功能模块图
1.3系统流程图
系统数据流程图
1.4本系统的E-R图
普通用户实体E-R图
普通用户实体E-R图
记录信息实体E-R图
记录信息实体E-R图
多图之间的E-R图
多图之间的E-R图
数据库表的设计
普通用户数据表
列名
数据类型
长度
是否为空
用户名(主键)
varchar
20
否
密码
char
10
是
记录信息数据表
记录信息数据表
姓名(主键)
性别
出生日期
datetime
8
电子邮箱
电话
2详细设计
2系统功能实现
2.1用户登录模块功能
登陆界面是进入系统的基础也是程序最先开始的部分,而且在界面的搭配及程序的安全性上要有保证,第一个出现的界面要给人清爽的感觉,给用户一个好心情来操作。
本模块用的图形界面类swing来做主要的支撑,其中对按钮和文本框的设计按通用的样式给出,这是为了便于用户理解和上手考虑。
在安全性和易用性考虑上,通讯录也属于隐私范畴,必需要有保密措施,而欢迎界面又有太大的影响易用性,在易用性方面,该界面充份发挥了作用。
输入用户名和密码后点击登陆即可。
初始用户名和密码分别为admin和123456。
2.2用户提示功能实现
为了适时提醒用户,有必要设计提示框界面。
提示框界面主要用于提示用户操作错误或下一步应该怎么做。
因此用Jframe提供的类及接口能很快的建立起一个简洁明了的提示框。
由于提示框可在很多的地方用到,因此有必要在提示框上的Jlabel标签做空项,图中的Jlabel1标签本来是空的,现在为了要显示他的存在而加的。
当调用该提示框的时候,将提示信息作为实参写入调用该提示框的方法中。
达到一个程序多处用。
该提示框的大部分代码与登陆界面的代码原理及方法用法相同,不多做说明。
2.3帐户修改功能实现
该模块采用在界面上依然用Jframe。
在数据的输入输出上,用数据流的方式将数据快速输出到文件或调入内存中。
在用户数量上控制在1个人,因为本程序以个人为中心,所以在用户上只能有1个用户,但可以修改用户名和密码。
将用户数据存储在“CONFIG/ADMIN.DAT”中。
该模块增加了重置及对密码的校验功能。
2.4主窗体功能
主窗体作为GUI主界面,其功能是提供用户交互,实现通讯录功能。
该界面采用可视化设计,在这里我主要做的是将界面组件的交互事件与实现逻辑功能的类连接起来,并在相关的事件处理程序中调用管理通讯录的一些方法。
在该模块设计中主要是对窗体中显示出来的按钮进行设计,使各个按钮能够完成相应的功能,还包括了用户信息、登录时间、浏览等功能的实现。
时间显示功能,当用户登录到系统中时,便可看到系统中当前显示的时间信息。
此时间的显示代码是用线程实现的。
首先定义了timeinfo为字符字段用来存放时间的信息,然后定义Run方法用来启动线程,其中包括对时、分、秒的获得。
最后用txttime.setText(timeInfo)语句格式化输出系统当前的时间。
面板定义,本人在系统界面中加入了面板,把不同的按钮功能放入了不同的区域中加以区分,让用户的操作易懂使用更方便。
激活按钮,当用户按动每个按钮时必要经过此功能的调用,主窗体中还包括了,对各类的调用,显示等功能,其代码在下面有详细介绍。
2.5文件读取与新增模块功能
该模块的主要功能为:
为用户提供一个输入新号码的渠道,由于随着时间的增加,面对不同的需求,联系号码是必不可少的联系方式,老式电话簿已被淘汰,所以当用户想将新号码添加到电话本中时,可以选择主页面下的新增功能。
这样就大大的提高了电话本功能的可扩展性,为用户在使用时提供方便。
在此模块内,用户如果想使用此功能,只需直接点击添加按钮,这时会进入新增记录的界面,让用户输入想添加的电话信息,系统会自动为该记录编号,当输入相应的信息后,点击保存按钮,会出现“保存成功”的字样。
若记录文件不存在,则需初始化记录文件。
初始化后方可输入记录。
其中主要成员变量包括:
lstUsers、fileName定义的各个成员变量;
主要方法包括:
save(Useruser)为构造方法,保存用户输入的记录信息;
与intRecord()为接口方法,处理记录文件不存在时产生异常的事件。
3编码实现
3.1用户登录模块代码
publicWelcome()
{
ContainercontentPane=getContentPane();
contentPane.setBackground(Color.yellow);
//背景色设置为黄色
contentPane.setLayout(null);
pictureJLablel=newJLabel();
//加载图片标签
pictureJLablel.setIcon(newImageIcon("
config/snapshot2007070321
4240.jpg"
));
pictureJLablel.setBounds(50,120,500,250);
pictureJLablel.setHorizontalAlignment(JLabel.CENTER);
contentPane.add(pictureJLablel);
user=newJTextField();
//用户名接收框
user.setBounds(150,30,80,25);
pictureJLablel.add(user);
psw=newJPasswordField();
//密码接收框
psw.setBounds(150,60,80,25);
pictureJLablel.add(psw);
btna=newJButton("
登陆"
);
//登陆按钮设置及触发事件
btna.setBounds(200,380,60,25);
contentPane.add(btna);
btna.addActionListener(this);
btna.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
String[]a={"
"
"
};
try{
a=adminsave.get();
}catch(Exceptionx){
}
if(a[0]==user.getText()&
&
a[1]==psw.toString()){
setVisible(false);
newMainWindow();
}elseif(user.getText()=="
)
{
newmessageb("
用户名不能为空1"
}elseif(psw.toString()=="
密码不能为空!
}else
用户名或密码错误!
}
});
btna1=newJButton("
退出"
//退出按钮及触发事件
btna1.setBounds(340,380,60,25);
contentPane.add(btna1);
btna1.addActionListener(this);
btna1.addActionListener(newActionListener(){
setVisible(false);
代码省略了对变量了设置、部分标签和按钮的设置代码以及JAVA包的导入代码。
本代码中,密码用JpasswordField文本框来接受数据,好达到保密的效果。
对登陆容易出现的状况做了点保护措施,如用户名或密码不能为空等
3.2登陆按钮触发事件代码:
if(jTextField2.getText()!
=jTextField3.getText()){
newmessageb("
两次密码输入相同请重新输入!
}elseif(jTextField2.getText()=="
||jTextField3.getText()=="
{
密码项不能为空!
}elseif(jTextField1.getText()=="
用户名不能为空!
}else
try{
adminsave.save(jTextField1.getText(),jTextField2.getText());
}catch(Exceptione){
}}
重置按钮触发事件代码:
jTextField1.setText("
jTextField2.setText("
jTextField3.setText("
对于文件存储的完整代码:
importjava.io.*;
publicclassadminsave{
publicstaticfinalvoidsave(Stringa,Stringb)throwsIOException{
DataOutputStreamout=null;
out=newDataOutputStream(newBufferedOutputStream(newFileOutputStream("
config/admin.dat"
)));
out.writeUTF(a);
out.writeUTF(b);
}finally{
out.close();
}
}
publicstaticfinalString[]get()throwsIOException{
DataInputStreamin=null;
String[]pp={"
in=newDataInputStream(newBufferedInputStream(newFileInputStream("
pp[0]=in.readUTF();
pp[1]=in.readUTF();
in.close();
returnpp;
}
}
3.3主窗体代码
/*浏览按钮与操作按钮*/
JButtonbtnFirst;
//第一条
JButtonbtnPrevious;
//上一条
JButtonbtnNext;
//下一条
JButtonbtnLast;
//最后一条
JButtonbtnAdd;
//增加
JButtonbtnSave;
//保存
JButtonbtnExit;
//退出
JButtonbtnAbout;
//关于
JButtonbtnCx;
//查寻
JButtonbtnEt;
//帮助
JLabellblSaved;
//提示已保存的标签
JButtonbtnPhoto;
//浏览图片的按钮
/*时间*/
Threadclock;
publicStringtimeInfo="
;
publicvoidstart(){//开始进程
if(clock==null){//如果进程为空值
clock=newThread(this);
//实例化进程
clock.start();
//开始进程
publicvoidrun(){//运行进程
while(clock!
=null){
//调用paint方法重绘界面
try{
Calendarnow=newGregorianCalendar();
//实例化日历对象
//输出信息
inthour=now.get(Calendar.HOUR_OF_DAY);
//得到小时数
intminute=now.get(Calendar.MINUTE);
//得到分数
intsecond=now.get(Calendar.SECOND);
//得到秒数
if(hour<
=9)
timeInfo+="
0"
+hour+"
:
//格式化输出
else
timeInfo+=hour+"
if(minute<
=9)
+minute+"
else
timeInfo+=minute+"
if(second<
+second;
timeInfo+=second;
txttime.setText(timeInfo);
//输出时间
timeInfo="
Thread.sleep(1000);
//线程暂停一秒(1000毫秒)
}
catch(InterruptedExceptionex){
ex.printStackTrace();
//输出出错信息
}
publicvoidstop(){//停止进程
clock=null;
/*窗体方法的实现*/
publicMainWindow(){
start();
this.setTitle("
通讯录"
this.setSize(350,430);
this.setLocationRelativeTo(null);
//窗口居中
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
bo=newAnNiu();
//面板
Containercon=this.getContentPane();
con.setLayout(null);
//设置此容器的布局管理
JLabellblNum=newJLabel("
用户编号:
lblNum.setBounds(20,20,60,25);
//标签位置
con.add(lblNum);
txtNum=newJTextField();
txtNum.setBounds(90,20,100,25);
//文本框位置
txtNum.setEditable(false);
//用户编号文本框不可变
con.add(txtNum);
JLabellblName=newJLabel("
姓名:
lblName.setBounds(20,55,60,25);
con.add(lblName);
txtName=newJTextField();
txtName.setBounds(90,55,100,25);
con.add(txtName);
JLabellblAge=newJLabel("
年龄:
lblAge.setBounds(20,90,60,25);
con.add(lblAge);
txtAge=newJTextField();
txtAge.setBounds(90,90,50,25);
con.add(txtAge);
JLabellblSex=newJLabel("
性别:
lblSex.setBounds(20,125,60,25);
con.add(lblSex);
rBtnMale=newJRadioButton("
男"
rBtnMale.setBounds(90,125,50,25);
rBtnMale.setSelected(true);
con.add(rBtnMale);
rBtnFemale=newJRadioButton("
女"
rBtnFemale.setBounds(150,125,50,25);
con.add(rBtnFemale);
ButtonGroupbtnGroup=newButtonGroup();
btnGroup.add(rBtnMale);
btnGroup.add(rBtnFemale);
JLabellblTel=newJLabel("
联系方式:
lblTel.setBounds(20,160,60,25);
con.add(lblTel);
txtTel=newJTextField();
txtTel.setBounds(90,160,150,25);
con.add(txtTel);
JLabellblPhoto=newJLabel("
照片路径:
lblPhoto.setBounds(20,195,60,25);
con.add(lblPhoto);
txtPhotoAddr=newJTextField();
txtPhotoAddr.setBounds(90,195,150,25);
con.add(txtPhotoAddr);
lblPhotoShow=newJLabel("
照片"
lblPhotoShow.s