第1页共28页J2EE体系结构与程序设计课程设计报告基于JavaEE的个人通信录管理系统开发学号:姓名:专业:日期:年月日报告目录1.课程设计内容与要求(P2)2.程序设计报告2.1总体设计(P3-P5)2.2数据库设计(P6)2.3详细设计(P7-P9)3.测试报告(P10)4.结论(P11)5.源程序附录(P12-28)评分满分——15分第2页共28页1.课程设计内容与要求采用JavaEE技术开发实现一个简单的个人通信录管理系统软件。该软件工作于B/S方式,可为多个用户提供个人通信录管理服务。系统主要功能包括:(1)用户登录及退出登录;(2)登录用户编辑个人通信录(增、删、改);(3)登录用户查询通信录(输入姓名或姓名的单字拼音首字母查询)。系统性能要求:(1)操作界面美观;(2)编辑通信录时,要求以5个记录为一组分页实现显示;(3)查询失败、登录成功、退出登录、未登录访问等应有相应提示信息;(4)个人通信录应至少包含姓名、性别、手机号三个信息;(5)安全性:登录要求输入验证码;登录密码要求采用MD5加密传输及数据库存储;个人通信录编辑与查询功能仅成功登录用户可访问。基本数据量要求:(1)用户数不少于3人(采用数据库预置用户名和登录密码方式初始化);(2)平均每个用户的通信录记录数不少于10条(至少有一个用户的通信录记录数不少于20条)。开发平台与技术要求:(1)数据库采用SQL-Server或MySQL;(2)采用HTML/JavaScript/JSP;(3)可选用Ajax/Struts2/Hibernate。第3页共28页2.程序设计报告2.1总体设计在明确了系统与数据库结构的前提下,设计该系统主要功能:系统登录,数据的输入与修改,数据的删除,联系人和群管理等。主要功能包括:(1)用户登录及退出登录;(2)登录用户编辑个人通信录(增、删、改);(3)登录用户查询通信录(输入姓名或姓名的单字拼音首字母查询)。分流程示意图1.系统登录:姓名设计流程图用户名密码用户联系人姓名性别电话地址email分组群组管理分组名第4页共28页2用户界面流程图:未注册消息不正确开始登陆界面注册界面输入用户密码链接数据库信息进入通讯录结束3用户增加联系人流程:4用户修改流程图:输入不合法输入不合法输入不合法信息已存在或不合法开始通讯录界面新建联系人信息链接数据库信息返回通讯录界面结束结束返回通讯录界面链接数据库信息输入联系人信息通讯录界面开始第5页共28页5用户修查询程:6用户删除流程:入查找失败查找失败信息不存在信息不存在开始开始进入通讯录界面查找联系人删除联系人返回通讯录界面结束通讯录界面输入查找信息链接数据库信息返回登陆界面结束第6页共28页2.2数据库设计(1)表1普通用户数据表列名数据类型长度是否为空usernamevarchar50否passwordvarchar50否(2)记录信息数据表,如表2表2记录信息数据表名类型长度是否空idint50否namevarchar50否telvarchar50否phonevarchar50否qqvarchar50否emailvarchar50否categoryvarchar50否workvarchar50否aaressvarchar50否第7页共28页2.3详细设计LoginAction类,封装的信息由密码和账户名,以及登录失败时抛出的异常方法。Stringexecute()函数继承了Exception类,如果登录密码不匹配,则会抛出异常,提示Error登录失败。在登录模块中有管理员用户和普通用户,管理员可以对系统中的信息添加,修改,删除等功能,普通用户只进行查找操.用户添加:LoginAction类继承ActionSuporrt类,封装有name,sex,birthday,email,tel属性,封装有成员函数set_name(),set_sex(),set_birthday(),set_email(),set_tel()用来添加各个属性值,提示操作失败信息用Stringexecute()函数抛出异常。用询查询:第8页共28页FindAction类继承ActionSuporrt类的属性及方法,setInput()方法将输入的信息传递给FindAction类内的相应属性,getInput()方法用于返回输入值,封装的成员函数包括getlist()用于返回查询到的元组列表。图5显示可以通过姓名,性别,出生日期,email地址对联系人进行查询。用户修改:ModAction类继承ActionListenerde同名方法,完成MyFirstFrame中类的所有方法进行修改直到成功,并且将修改后的信息通过ModActionString()导入数据库。用户删除:DeleAction类继承ActionSuporrt类,get_name()方法用于得到所要删除的信息的主码。封装的数据成员包括name,封装有isSuccess()函数,用于判断删除成功与否。删除模块中,用户可以根据某一关键字或多个关键字进行删除,删除信息后会自动提示。第9页共28页用户导出:根据ActionlistenrWindows窗口提示,联系人已经成功导出。其结构体经初始化后已经完成,导出的数据将成功存入数据库中,此时数据库可以随时进行查询等一切可行性操作。第10页共28页3.测试报告通过这次课程设计我加深了对于java语言应用与实践之间的连接,能更好的使用java语言!在老师及同学们的引导下配合下,我完成了题目。只有通过合作,才能更高效率的完成任务。实践非常的重要。很多东西在理论层面是行的通的,但到实际中就行不通了。所以要多实践,在不断的修改调试过程中巩固知识。程序设计基本符合了我预期的要求,运行效果良好,无明显的大的bug。在完成作业的过程中,我遇到了不少困难,其中有的是经过自己苦思冥想想出来的,也有的是询问比较厉害的同学得以解决的,还剩下的一些疑难问题当然就是求助网络了。譬如说照片上传管理预览功能的实现,以及最小化到系统托盘的功能实现等。其实不光是在网络上查询解决问题的方法,我也从网络上得到了不少编程的灵感和好的思想。比如说我的程序中并没有运用网络编程,基本是一个单机版的程序,这其中基本上没有能够应用到多线程的地方。但是经过我在网络上的查询,有人建议我可以在相片加载预览时候运用多线程,从而提高速度。于是我就这样做了,从而使我的程序更完善了。善于利用网络,对于我们的学习是大有裨益的。第11页共28页4.结论通过两周的努力,我顺利的完成了通讯录系统的开发。基于基本设计要求,我查阅了相关自资料,进行了需求分析,概要设计,详细设计,编码,调试运行等软件开发步骤。无论在理论上还是在实践上都有较大幅度的提高,独立分析问题解决问题和他人交流的能力明显提高。通过这次课程设设计,我对JAVA语言有了基本的认识。JAVA是完全面向对象的语言,使用方便,界面友好,编译较难,能极大的节约运行时间,提高响应速度。其次软件工程的思想有了深入了解:完善需求,最大的满足客户需求,充分做好风险分析。为了保证项目的速度,定期对项目进行评估工作。本次项目随小,我却悟出了个简单的道理:学习就像软件开发,拿到一本书后看看,提出自己未知的问题,进而分析问题,解决问题。通过课程设计,我深刻的认识到在当今激烈的社会竞争中只有学到本领才能有立足之地,同时也感到软件开发的辛苦。首先要有耐心,要忍着密密麻麻的代码,无数遍的修改,无数遍的调试,但是当你调试成功时,你会感受到努力的幸福。第12页共28页5.源程序1packagetongxun;publicclassUseSystem{/***@paramargs*/publicstaticvoidmain(String[]args){newMySystem().validate();}}2packagetongxun;importjava.awt.*;importjava.awt.*;importjava.awt.event.*;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.util.*;importjavax.swing.*;publicclassMySystemextendsJFrameimplementsActionListener,ItemListener{UserServiceuService=newUserService();Useru=newUser();Choicechoice=newChoice();JTextFieldt1=newJTextField(15);JButtonb1=newJButton(查询);java.awt.Listlist=newjava.awt.List(6,true);JButtonb2=newJButton(增加);JButtonb3=newJButton(删除);JButtonb4=newJButton(修改);JButtonb5=newJButton(导出);Containercon=getContentPane();java.util.ListUseruList=newArrayListUser();//staticVectorUseruv=newVectorUser(100);第13页共28页intflag=0;MySystem(){super(通讯录管理程序);setSize(400,400);con.setLayout(newBorderLayout());choice.add(姓名);choice.add(类别);choice.add(手机号码);choice.add(查询全部记录);choice.add(qq);Panelp1=newPanel();//Panelp2=newPanel();Panelp3=newPanel();p1.setBackground(Color.red);p1.setSize(300,10);//p2.setBackground(Color.cyan);//p2.setSize(380,300);p3.setBackground(Color.yellow);list.setSize(300,300);p1.add(choice);p1.add(t1);p1.add(b1);p3.add(b2);p3.add(b4);p3.add(b3);p3.add(b5);con.add(North,p1);con.add(Center,list);con.add(South,p3);setVisible(true);validate();addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){setVisible(false);System.exit(0);}});b1.addActionListener(this);第14页共28页b2.addActionListener(this);b3.addActionListener(this);b4.addActionListener(this);b5.addActionListener(this);list.addItemListener(this);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==b2){//通过产生外部窗体,来实现添加功能finalJFramenewf=newJFrame(添加联系人);newf.setSize(400,400);newf.setVisible(false);newf.setLayout(newGridLayout(10,2));JLabeljb1=newJLabel(联系人姓名:);finalJTextField