通讯录管理系统Java课程设计.docx
- 文档编号:5380635
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:35
- 大小:154.88KB
通讯录管理系统Java课程设计.docx
《通讯录管理系统Java课程设计.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统Java课程设计.docx(35页珍藏版)》请在冰豆网上搜索。
通讯录管理系统Java课程设计
《面向对象程序设计》
课程设计报告
题目:
通讯录管理系统软件设计与实现
院(系):
信息科学与工程学院
专业班级:
计算机科学与技术1201班
学生姓名:
程伟
学号:
20121183011
指导教师:
吴奕
2014年12月29日至2015年1月9日
华中科技大学武昌分校制
面向对象程序设计课程设计任务书
一、设计(调查报告/论文)题目
通讯录管理系统软件设计与实现
二、设计(调查报告/论文)主要内容
内容:
通讯录管理系统软件实现用户和人员信息的查看和预览、更新(添加、修改)、用户和(新)人员信息的登记,修改;生成预览报表。
基本功能与要求:
1主窗体设计
设计带有菜单等标准GUI组件的界面,并能够结合文件及输入输出流的处理方法,通过菜单、文本域等GUI组件实现用户增减、编辑、浏览、查询通讯录信息。
2浏览模块
用户可以通过浏览模块对通讯录的个人信息进行浏览
3操作模块
操作模块用来管理大量的通讯录成员对象,及其保存通讯录成员的信息
4查询模块
用户通过查询模块查询存储在通讯录中的个人信息。
三、原始资料
1.《面向对象程序设计课程设计》指导书
2.耿祥义.JAVA大学实用教程.北京:
清华大学出版社,2009.
四、要求的设计(调查/论文)成果
1.课程设计报告
2.课程设计软件
五、进程安排
布置任务,查找资料、需求分析1天
总体设计1天
详细设计1.5天
编制源程序实现3.5天
测试与修改1天
撰写课设报告2天
六、主要参考资料
[1]张广彬.Java课程设计案例精编(第二版).北京:
清华大学出版社,2011.
[2]耿祥义.Java课程设计(第二版).北京:
清华大学出版社,2008.
[3]耿祥义.JAVA大学实用教程.北京:
清华大学出版社,2009.
[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
是
记录信息数据表
记录信息数据表
列名
数据类型
长度
是否为空
姓名(主键)
varchar
20
否
性别
char
20
是
出生日期
datetime
8
是
电子邮箱
char
20
是
电话
char
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()=="")
{
newmessageb("密码不能为空!
");
}else
{
newmessageb("用户名或密码错误!
");
}
}
});
btna1=newJButton("退出");//退出按钮及触发事件
btna1.setBounds(340,380,60,25);
contentPane.add(btna1);
btna1.addActionListener(this);
btna1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
setVisible(false);
}
});
代码省略了对变量了设置、部分标签和按钮的设置代码以及JAVA包的导入代码。
本代码中,密码用JpasswordField文本框来接受数据,好达到保密的效果。
对登陆容易出现的状况做了点保护措施,如用户名或密码不能为空等
3.2登陆按钮触发事件代码:
if(jTextField2.getText()!
=jTextField3.getText()){
newmessageb("两次密码输入相同请重新输入!
");
}elseif(jTextField2.getText()==""||jTextField3.getText()=="")
{
newmessageb("密码项不能为空!
");
}elseif(jTextField1.getText()=="")
{
newmessageb("用户名不能为空!
");
}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;
try{
out=newDataOutputStream(newBufferedOutputStream(newFileOutputStream("config/admin.dat")));
out.writeUTF(a);
out.writeUTF(b);
}finally{
out.close();
}
}
publicstaticfinalString[]get()throwsIOException{
DataInputStreamin=null;
String[]pp={"",""};
try{
in=newDataInputStream(newBufferedInputStream(newFileInputStream("config/admin.dat")));
pp[0]=in.readUTF();
pp[1]=in.readUTF();
}finally{
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)
timeInfo+="0"+minute+":
";
else
timeInfo+=minute+":
";
if(second<=9)
timeInfo+="0"+second;
else
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 系统 Java 课程设计