软件开发综合实习报告_第1页
软件开发综合实习报告_第2页
软件开发综合实习报告_第3页
软件开发综合实习报告_第4页
软件开发综合实习报告_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、城建学院计算机科学与工程系软件开发综合实习报告设计名称: 网页通讯录 专业班级: 计算机12-1 姓 名: 杨正宇 周辉 廖传栋 学 号: 15号、21号、40号 吉林建筑大学城建学院计算机科学与工程系软件开发综合实习成绩评定表时间2015年11月 30日 至 2015 年 12月 9日地点机房2指导教师沙胜贤 刘磊学号姓名任务成绩设计表现(20%)阶段成果设计报告(20%)答辩(20%)总成绩第一阶段(20%)第二阶段(20%)指导教师评语: 指导教师签字:年 月 日教研室主任审核签字: 签 字: 年 月 日 - 报告正文一、设计目的及要求(一)设计目的本设计是在学过所有专业课程之后开设的一

2、门实习教学,主要目的是使学生进一步巩固和理解所学的专业基本理论知识和技术,培养学生运用所学的知识和技术能力,从而让学生能够掌握软件应用系统的整个开发过程及,培养学生的团队合作能力。(二)设计要求1.环境要求面向对象程序设计语言:Jave数据库环境:MySql系统环境:Windows 7开发环境:MyEclipse JAVAEE5.0版本,基于Tomcat7.0版本运行主要用到的技术:springMVC框架、AJAX、JAVAScript、JQuery等2.软件设计要求结合专业知识,用高级语言和后台统数据库相结合中的设计至少达到能独立运行,实现基本功能。3.系统基本功能要求(1) 有交互性较好的

3、界面;(2) 使用高级语言完成对系统的操作;(3) 能够调用后台的数据库;4.分组要求(1) 每组最多3人,任意搭配。(2) 每组提交一份设计报告,报告内要明确写出组内各人的任务。(3) 组内每名成员均需完成系统基本功能要求中的第2点与第3点要求以及设计总结。二、软件系统设计1需求分析1.1编写目的本系统主要是为了能更好的管理每个人的通讯录,给每个人提供一个井然有序的管理平台,防止手工管理的的混乱,造成不必要的麻烦。1.2功能需求 一个完整的通讯录管理系统包括:数据集模块,登录窗体模块,系统管理模块,通讯录数据管理模块,信息管理模块,登录信息查询模块。本信息主要实现我们的信息管理,包括我们平时

4、联系人信息的添加,分组,查询,修改和删除,及一些辅助项目管理,如登录系统用户管理和用户组管理。2 基本设计思想个人通讯录系统的功能模块有:(1)提供登陆界面,方便用户进入,满足需求;(2)添加:可以添加分组,添加联系人的姓名、移动电话、家庭住址;(3)分组:可以将已添加的联系人转移在其他已经分好的组中;(4)查询:可以用姓名查询;(5)修改:输入欲修改的那个人的名字后,再依次输入姓名、移动电话、家庭住址备注即可完成修改;(6)删除:可以根据需要从数据库中直接删除多余的联系人分组和联系人信息;程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。3 数据库逻辑设计联系人表(contac

5、ts) 属性名数据类型长度可否为空说明contacts_idvarchar100否联系人编号 group_idvarchar100否 分组编号con_user_idvarchar100否 用户编号contacts_namevarchar100是 联系人姓名contacts_phone_ numbervarchar11否联系人手机号contacts_addresstext是 联系人住址分组表(con_group) 属性名 数据类型 长度 可否为空 说明con_group_idvarchar 100 否 分组编号con_user_idvarchar 100 否 用户编号con_group_name

6、varchar 500 是 分组类名用户表(con_user) 属性名 数据类型 长度 可否为空 说明con_user_idvarchar 100 否 分组编号con_user_namevarchar 100 是 用户编号con_user_passwordvarchar 500 是 分组类名三、系统操作说明及运行结果(一)、在浏览器地址栏输入“http:/localhost:8080/phonebook/log_in.do”进入登录页面 当输入正确的用户名之后点击登录则进入电话本页面,如果用户名或者密码其中之一错误,则会提示“用户名或密码错误”,当鼠标单击注册按钮时则会进入用户注册页面,如下图

7、(由于时间的原因,注册功能只写了服务端而没有写客户端,所以注册功能暂不能实现)User.java该Java类是用户表的实体类,主要实现用户信息的获取以及发送功能package org.jlucc.user.entity;import java.io.Serializable;public class User implements Serializable private static final long serialVersionUID = 1L;-版本号便于二次开发private String con_user_id;private String con_user_name;privat

8、e String con_user_password;public String getCon_user_id() return con_user_id;public void setCon_user_id(String con_user_id) this.con_user_id = con_user_id;public String getCon_user_name() return con_user_name;public void setCon_user_name(String con_user_name) this.con_user_name = con_user_name;publi

9、c String getCon_user_password() return con_user_password;public void setCon_user_password(String con_user_password) this.con_user_password = con_user_password;UserMapper.xml该文件主要写登陆电话本时用到的有关查询以及注册时用到的添加用户的数据库语句<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBL

10、IC "-//DTD Mapper 3.0/EN" "/dtd/ibatis-3-mapper.dtd"><mapper namespace="org.jlucc.user.dao.UserDao"><insert id="save" parameterType="org.jlucc.user.entity.User">-返回包下的use类型insert into con_user (c

11、on_user_id,con_user_name,con_user_password)values (#con_user_id,#con_user_name,#con_user_password)#后续插入数据</insert><select id="findByName" parameterType="string" resultType="org.jlucc.user.entity.User">select * from con_user where con_user_name=#con_user_name

12、</select></mapper>UserDao.java该Java类为用户表的DAO类,封装了用户登录以及注册的方法,当执行时该类会自动调用UserMapper.xml文件中与该类的方法中方法名相同的id名的数据库代码。package org.jlucc.user.dao;import org.jlucc.user.entity.User;public interface UserDao public User findByName(String name);public void save(User user);UserService.java该Service接口

13、类中封装了用户登录时根据用户输入的用户名去数据库的用户表中比对用户名从而在数据库中查找用户信息的方法以及注册的方法,运行时该类会调用用户表的DAO类也就是会调用UserDao类。package org.jlucc.user.service;import org.jlucc.user.entity.UserResult;public interface UserService public UserResult checkLogin(String name,String pwd) throws Exception;public UserResult regist(String name,Stri

14、ng password) throws Exception;UserServiceImpl.java该类是对用户的Service接口类的实现,该类主要实现的功能是在用户登录输入用户名与密码后对用户输入的用户名与密码和数据库中所存的用户名与密码进行比对,如果比对成功则会返回一个提示信息、一个数据包以及一个状态码,该状态码在客户端编程时将会用作一个判断条件,只有当判断条件成立时客户端才能继续执行。package org.jlucc.user.service;import javax.annotation.Resource;import org.jlucc.user.dao.UserDao;impo

15、rt org.jlucc.user.entity.User;import org.jlucc.user.entity.UserResult;import org.jlucc.user.util.UserUtil;import org.springframework.transaction.annotation.Transactional;public class UserServiceImpl implements UserService -继承上面方法,并实现Resource -用于扫描组件private UserDao userDao;Transactional(readOnly = tr

16、ue)public UserResult checkLogin(String name, String pwd) throws Exception UserResult result = new UserResult();User user = userDao.findByName(name);if(user = null)result.setStatus(1);result.setMsg("用户名不存在");return result;if(!pwd.equals(user.getCon_user_password() result.setStatus(2);result

17、.setMsg("密码不正确");return result;result.setStatus(0);result.setMsg("用户名和密码正确");result.setData(user.getCon_user_id();return result;Transactionalpublic UserResult regist(String name, String password)throws Exception UserResult result = new UserResult();User has_user = userDao.findByN

18、ame(name);if(has_user != null) result.setStatus(1);result.setMsg("用户名已被占用");return result;User user = new User();user.setCon_user_name(name);user.setCon_user_password(password);String userId = UserUtil.createId();user.setCon_user_id(userId);userDao.save(user);result.setStatus(0);result.set

19、Msg("注册成功");return result;LoginController.java该Controller类为用户登录时实现登录功能的入口类,由于该电话本主要使用的是SpringMVC框架所写,该类中使用了一些扫描标记,扫描这些标记的工作都是由配置文件applicationContext.xml完成。当用户输入用户名与密码时客户端会将用户名与密码发送到该处,该类则会相继调用Service类来实现比对。package org.tarena.note.controller.user;import javax.annotation.Resource;import org.

20、jlucc.user.entity.UserResult;import org.jlucc.user.service.UserService;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;ControllerRequestMapping("/user")public class Lo

21、ginController Resourceprivate UserService userService;-发送AJAX请求时要找到所发送的请求的路径RequestMapping("/login.do")ResponseBodypublic UserResult execute(String name, String pwd) throws Exception UserResult result = userService.checkLogin(name, pwd);return result;RegistController.java该Controller类为用户注册时

22、实现注册功能的入口类,该类的实现方式与用户登录的COntroller实现方式相同。package org.jlucc.user.controller.user;import javax.annotation.Resource;import org.jlucc.user.entity.UserResult;import org.jlucc.user.service.UserService;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMa

23、pping;import org.springframework.web.bind.annotation.ResponseBody;Controller/扫描控制组件RequestMapping("/user")public class RegistController /用户注册Resourceprivate UserService userService;RequestMapping("/regist.do")ResponseBody/将返回值NoteResult转成json输出public UserResult execute(String nam

24、e,String password) throws Exception UserResult result = userService.regist(name, password);return result;下面这段代码是将客户端获取用户输入的用户名与密码并发送给服务端的,由于在一个静态页面中要实现局部模块刷新采用的是AJAX,这样不但减轻了服务器的压力,界面感也比较强。$(function() /给登录按钮追加单击处理 $("#login").click(function() /清除原有的提示信息 $("#count_msg").html("

25、;"); $("#password_msg").html(""); /获取请求数据 var name = $("#count").val().trim(); var password = $("#password").val().trim(); /检查数据格式 var ok = true; if(name="") $("#count_msg").html("用户名不能为空"); ok = false; if(password="&quo

26、t;) $("#password_msg").html("密码不能为空"); ok = false; if(ok) /发送Ajax请求 $.ajax( url:"http:/localhost:8080/phonebook/user/login.do", type:"post", data:"name":name,"pwd":password, dataType:"json", success:function(result) /result是服务器返回的

27、json结果 if(result.status=0)/成功 window.location.href="edit.html" else if(result.status=1)/用户名错 $("#count_msg").html(result.msg); else if(result.status=2)/密码错 $("#password_msg").html(result.msg); ); /end if ););到此,电话本的登录功能完全实现,注册功能由于前端代码没有写,暂时不能实现,只能做相应的注册测试功能。(2) 、进入电话本的主

28、界面后截图如下,可进行电话本分组的添加,联系人的添加等功能。此时会载入数据库中的分组以及联系人Group.java该Java类是电话本分组的实体类,主要实现电话本分组信息的获取以及发送功能package org.jlucc.user.entity;import java.io.Serializable;public class Group implements Serializable private static final long serialVersionUID = 1L;private String con_group_id;private String con_user_id;pr

29、ivate String con_group_name;public String getCon_group_id() return con_group_id;public void setCon_group_id(String con_group_id) this.con_group_id = con_group_id;public String getCon_user_id() return con_user_id;public void setCon_user_id(String con_user_id) this.con_user_id = con_user_id;public Str

30、ing getCon_group_name() return con_group_name;public void setCon_group_name(String con_group_name) this.con_group_name = con_group_name;GroupMapper.xml该文件主要写载入电话本分组时用到的有关查询用户的信息的数据库语句<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-/ibatis.apache.or

31、g/DTD Mapper 3.0/EN" "/dtd/ibatis-3-mapper.dtd"><mapper namespace="org.jlucc.user.dao.GroupDao"><insert id="save" parameterType="org.jlucc.user.entity.Group">insert into con_group (con_group_id,con_user_id,con_group_n

32、ame) values (#con_group_id,#con_user_id,#con_group_name)</insert><select id="findByUser" parameterType="string" resultType="org.jlucc.user.entity.Group">select * from con_group where cn_user_id=#cn_user_id</select><delete id="deleteById" p

33、arameterType="string">delete from con_group where con_group_id=#con_group_id</delete></mapper>GroupDao.java该Java类为电话本分组表的DAO类,封装了电话本分组的添加、删除以及载入的方法,当执行时该类会自动调用GroupMapper.xml文件中与该类的方法中方法名相同的id名的数据库代码。(电话本分组的功能也不太完整,载入和添加在客户端都有体现,但是分组的删除在客户端没有进行实现,仅写了分组删除的服务端)package org.jluc

34、c.user.dao;import java.util.List;import org.jlucc.user.entity.Group;public interface GroupDao public void save(Group group);public List<Group> findByUser(String userId);public void deleteById(String groupId);GroupService.java该Service接口类中封装了电话本分组的添加、删除以及载入的方法,运行时该类会调用电话本分组表的DAO类也就是会调用GroupDao类。

35、package org.jlucc.user.service;import org.jlucc.user.entity.UserResult;public interface GroupService public UserResult addGroup(String groupName, String userId, String groupId);public UserResult loadGroup(String userId);public UserResult deleteGroup(String groupId);GroupServiceImpl.java该类是分组表的Servic

36、e接口类的实现类,具体实现了Service接口类中定义的添加分组、载入分组与删除分组的功能。package org.jlucc.user.service;import java.util.List;import javax.annotation.Resource;import org.jlucc.user.dao.GroupDao;import org.jlucc.user.entity.Group;import org.jlucc.user.entity.UserResult;import org.jlucc.user.util.UserUtil;import org.springframe

37、work.stereotype.Service;import org.springframework.transaction.annotation.Isolation;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;ServiceTransactional(readOnly=false,rollbackFor=RuntimeException.class,propagation=Propaga

38、tion.REQUIRED,isolation=Isolation.DEFAULT)public class GroupServiceImpl implements GroupServiceResourceprivate GroupDao groupDao;public UserResult addGroup(String groupName, String userId, String groupId) UserResult result = new UserResult();Group group = new Group();group.setCon_group_id(userId);gr

39、oup.setCon_group_name(groupName);groupId = UserUtil.createId();group.setCon_user_id(groupId);groupDao.save(group);result.setStatus(0);result.setMsg("创建分组成功");result.setData(groupId);return result;public UserResult loadGroup(String userId) List<Group> list = groupDao.findByUser(userId

40、);UserResult result = new UserResult();result.setMsg("查询分组成功");result.setStatus(0);result.setData(list);return result;public UserResult deleteGroup(String groupId) groupDao.deleteById(groupId);UserResult result = new UserResult();result.setMsg("删除分组成功");result.setStatus(0);return

41、 result;以下三个Controller类分别是电话本分组添加、删除和载入功能的入口,执行步骤与方式与上述用户登录时执行的步骤与方式相同。AddGroupController.javapackage org.jlucc.controller.group;import javax.annotation.Resource;import org.jlucc.user.entity.UserResult;import org.jlucc.user.service.GroupService;import org.springframework.stereotype.Controller;import

42、 org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;ControllerRequestMapping("/group")public class AddGroupController Resourceprivate GroupService groupService;RequestMapping("/addgroup.do")ResponseBodypublic UserRes

43、ult execute(String groupName, String userId, String groupId) UserResult result = groupService.addGroup(groupName, userId, groupId);return result;DeleteGroupController.javapackage org.jlucc.controller.group;import javax.annotation.Resource;import org.jlucc.user.entity.UserResult;import org.jlucc.user

44、.service.GroupService;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;ControllerRequestMapping("/group")public class DeleteGroupController Resourceprivate GroupService

45、 groupService;RequestMapping("/deletegroup.do")ResponseBodypublic UserResult execute(String groupId) UserResult result = groupService.deleteGroup(groupId);return result;LoadGroupController.javapackage org.jlucc.controller.group;import javax.annotation.Resource;import org.jlucc.user.entity.

46、UserResult;import org.jlucc.user.service.GroupService;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;ControllerRequestMapping("/group")public class LoadGroupControlle

47、r Resourceprivate GroupService groupService;RequestMapping("/loadgroup.do")ResponseBodypublic UserResult execute(String userId) UserResult result = groupService.loadGroup(userId);return result;分组在网页上载入的前端代码如下,因为没添加一个分组就要动态的在页面上的分组列表下显示新加的那个分组,所以也用的是AJAX实现的。$(function()$.ajax( url:"htt

48、p:/localhost:8080/phonebook/group/loadgroup.do", type:"post", data:"userId":userId, dataType:"json", success:function(result) if(result.status=0) var groups = result.data;/分组json集合信息 /循环集合生成分组li列表 for(var i=0;i<groups.length;i+) /获取每个分组元素的笔记本名称 var groupName = g

49、roupsi.con_group_name; /获取每个分组元素的分组ID var groupId = groupsi.con_group_id; /拼成li元素 var s_li = '<li class="online"><a >' s_li += '<i class="fa fa-group" title="online" rel="tooltip-bottom">' s_li += '</i>'+groupNam

50、e+'</a></li>' /将s_li字符串转成jQuery对象,藏groupId var $li = $(s_li); $li.data("groupId",groupId); /将li添加到分组ul中 /$("#group_list").append($li); );当点击全部分组后面的+号时,会弹出如下对话框添加分组成功的截图由于添加分组的服务端代码已经在前面贴过来,此处就只粘贴添加分组的客户端代码,如下$("#can").on("click","#sure

51、_addgroup",function() /获取分组名 var groupName = $("#input_phonegroup").val().trim(); /TODO 检查分组名是否为空 /发送请求 $.ajax( url:"http:/localhost:8080/phonebook/group/addgroup.do", type:"post", data:"groupName":groupName,"userId":userId, dataType:"json&

52、quot;, success:function(result) if(result.status=0) closeWindow();/关闭对话框 /添加一个分组li var groupId = result.data;/获取返回的groupId /拼成li元素 var s_li = '<li class="online"><a >' s_li += '<i class="fa fa-group" title="online" rel="tooltip-bottom&quo

53、t;>' s_li += '</i>'+groupName+'</a></li>' /将s_li字符串转成jQuery对象,藏groupId var $li = $(s_li); $li.data("groupId",groupId); /将li添加到分组列表区 $("#group_list").prepend($li); , error:function() alert("创建分组失败"); ); );(3) 、单击全部联系人后面的+号会弹出新建联系人的窗口,如下添加联系人成功的截图Contacts.java该类为联系人的实体类,只要为了获取以及发送联系人的各种信息。package org.jlucc.user.entity;import java.io.Serializable;public class Contacts implements Serializable private static final long serialVersionUID = 1L;private String contacts_id;private String group_id;private String con_user_id;pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论