第二次小学期软工实践随笔

小学期后面两天的学习,我们进一步完善了我们的ssh框架,在Dao和Service包下我们声明好我们需要的操作方法:

package com.crm.dao;
import java.util.List;
import com.crm.bean.Cust;
public interface CustDao {
/**
* 保存客户信息
* @param cust
*/
public void saveCustomer(Cust cust);
/**
* 删除客户信息
* @param cust
*/
public void removeCustomer(Cust cust);
public Cust findCustomerById(Integer id);
public List<Cust> findAllCust();
public List<Cust> findCustByCondition(Cust cust);
}

然后分别在他们的实现类中补充好具体的实现方法和参数的导入步骤,在CustDaoImpl中的实现主要是调用Hibernate的方法,所以调用起来简单方便,复杂一点的是我们的条件查询操作,需要捕捉信息源在打出查询列表:

package com.crm.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.crm.bean.Cust;
import com.crm.dao.CustDao;

public class CustDaoImpl extends HibernateDaoSupport implements CustDao{

public List<Cust> findAllCust() {
// TODO Auto-generated method stub
String hql = "from Cust cust order by cust.id desc";
return (List<Cust>)this.getHibernateTemplate().find(hql);
}

public Cust findCustomerById(Integer id) {
// TODO Auto-generated method stub
Cust cust=(Cust)this.getHibernateTemplate().get(Cust.class,id);
return cust;
}

public void removeCustomer(Cust cust) {
// TODO Auto-generated method stub
this.getHibernateTemplate().delete(cust);
}

public void saveCustomer(Cust cust) {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(cust);
}

public List<Cust> findCustByCondition(Cust cust) {
// TODO Auto-generated method stub
StringBuffer strBuffer = new StringBuffer();
String hql = "from Cust cust where 1=1 ";
strBuffer.append(hql);
if(cust == null){
throw new NullPointerException("查询条件不能为空!");
}
if(!"".equals(cust.getCustname())){
String custname = " and custname = ‘"+cust.getCustname()+"‘";
strBuffer.append(custname);
}
if(!"".equals(cust.getCustno())){
String custname = " and custno = ‘"+cust.getCustno()+"‘";
strBuffer.append(custname);
}
String orderBy = " order by cust.id desc";
strBuffer.append(orderBy);
List<Cust> custList = this.getHibernateTemplate().find(strBuffer.toString());
//return (List<Cust>)this.getHibernateTemplate().find(strBuffer.toString());
return custList;
}

}

因此我们在com.crm.action包名下添加了如下的action类:

具体代码如下:

package com.crm.action;
import com.crm.bean.Cust;
import com.crm.service.CustService;
import com.opensymphony.xwork2.ActionSupport;
public class CustSaveAction extends ActionSupport{
private CustService service;
private Cust cust;

public Cust getCust() {
return cust;
}

public void setCust(Cust cust) {
this.cust = cust;
}

public CustService getService() {
return service;
}

public void setService(CustService service) {
this.service = service;
}

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
this.service.saveCustomer(cust);
return SUCCESS;
}
}

package com.crm.action;

import java.util.Map;

import com.crm.bean.Cust;
import com.crm.service.CustService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FindCustByCdtAction extends ActionSupport{

private Cust cust;
private CustService findCdtService;
public Cust getCust() {
return cust;
}
public void setCust(Cust cust) {
this.cust = cust;
}
public CustService getFindCdtService() {
return findCdtService;
}
public void setFindCdtService(CustService findCdtService) {
this.findCdtService = findCdtService;
}
@SuppressWarnings({ "unchecked", "unchecked" })
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
Map map = (Map)ActionContext.getContext().get("request");
map.put("list", this.findCdtService.findCustByCondition(cust));
return SUCCESS;
}
}

package com.crm.action;

import java.util.Map;

import com.crm.service.CustService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ListCustAction extends ActionSupport{

private CustService service;

public void setService(CustService service) {
this.service = service;
}

@Override
public String execute() throws Exception {
Map map = (Map)ActionContext.getContext().get("request");
map.put("list", this.service.findAllCust());
return SUCCESS;
}

}

package com.crm.action;

import com.crm.bean.Cust;
import com.crm.service.CustService;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class RemoveCustAction extends ActionSupport{

private Cust cust;
private CustService service;

public void setService(CustService service) {
this.service = service;
}

public Cust getCust() {
return cust;
}

public void setCust(Cust cust) {
this.cust = cust;
}

public String execute() throws Exception {
this.service.removeCustomer(cust);
return SUCCESS;
}

}

根据SSH框架的规则,我们在ApplicationContext中完成数据库连接,action配置等任务,这里的用到了许多我不了解的语法规则,我觉得后期可以认真学习一下,像是Bean,property的一类操作。

中间层用Struts.xml实现与前台的过渡,最后新建jsp文件进行前台界面的设计:

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>客户信息维护</title>
<style>
.divcss5{width:600px;height:120px;border:1px solid #000}
body,table{
font-size:12px;
}
table{
table-layout:fixed;
empty-cells:show;
border-collapse: collapse;
margin:0 auto;
}
td{
height:30px;
}
h1,h2,h3{
font-size:12px;
margin:0;
padding:0;
}
.table{
border:1px solid #000;
color:#000;
}
.table th {
background-repeat:repeat-x;
height:30px;
}
.table td,.table th{
border:1px solid #000;
padding:0 1em 0;
}
.table tr.alter{
background-color:#000;
}
</style>
</head>
<script language="JavaScript" type="text/javascript">
function openwind(){
feature="dialogWidth:650px;dialogHeight:200px;status:no;help:no;scrollbars:no;dialogTop:150;";
window.showModalDialog("custSave.jsp",null,feature);
};
function funDelete(){
//window.onload = alert(111);
if(confirm(‘确定要执行此操作吗?‘)){
return true;
}else{
return false;
}
}
</script>
<body>

<CENTER>
<center><div><font color="red" size="6">客户信息维护</font></div></center>
<div style="width:20px"></div>
<div class="divcss5">
<s:form action="findbycdtCust" theme="simple">
<p></p>
<div style="width:10px"></div>
客户编号:<s:textfield name="cust.custno" label="custno"></s:textfield>
客户名称:<s:textfield name="cust.custname" label="custname"></s:textfield><br><br>
公司地址:<s:textfield name="cust.address" label="address"></s:textfield>
电话号码:<s:textfield name="cust.telephone" label="telephone"></s:textfield><br><br>
<div style="width:20px"></div>
<input width="100" type = "button" id = "add" name = "btn" value="新增" onClick="openwind();"/>
<s:submit value="查询"></s:submit>
<input width="100" type = "button" id = "smt" name = "btn" value="返回" onClick="history.go(-1)"/>
</s:form>
</div>
<div style="width:20px"></div>
<table border="1" width="47%" class="table">
<tr>
<td>客户编号</td>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
<td>联系方式</td>
<td>公司职务</td>
<td>录入时间</td>
<td width="80">操作</td>
</tr>
<s:iterator value="#request.list" id="cust">
<tr>
<td><s:property value="#cust.custno"/></td>
<td><s:property value="#cust.custname"/></td>
<td>
<s:if test="#cust.sex == 1">
<s:property value="‘男‘"/>
</s:if>
<s:elseif test="#cust.sex == 2">
<s:property value="‘女‘"/>
</s:elseif>
<s:elseif test="#cust.sex == 3">
<s:property value="‘其他‘"/>
</s:elseif>
</td>
<td><s:property value="#cust.age"/></td>
<td><s:property value="#cust.telephone"/></td>
<td><s:property value="#cust.position"/></td>
<td><s:property value="#cust.logindate"/></td>
<td>
<s:a href="updateCust.action?cust.id=%{#cust.id}">修改</s:a>
<s:a href="deleteCust.action?cust.id=%{#cust.id}" onClick="return funDelete();">删除</s:a>
</td>
</tr>

</s:iterator>
</table>
</CENTER>
</body>
</html>

最终结果如下(后期我们还要添加修改记录的功能):

时间: 2024-10-07 06:58:56

第二次小学期软工实践随笔的相关文章

夏季学期软工综合实践小记(二)

短学期的软工实践前五天的学习结束了,虽然在课堂中我们学到了很多以前从未接触过的如:JDBC.Java Servlet等框架,XML语言和简单的网页制作语句的浅析,亦或是通过编程语言实现网页与数据库内容的桥接和使用等内容,但时间上总体来讲还是较为紧迫,加上很多基础的知识如网页制作技术.语句的使用和语法规则并未先修相关课程,这就造成很多基础内容都需要讲师在课堂上现场普及.虽然编程语句和逻辑与之前所学的相差不多,但一天的学习下来因为内容量大,并且整个工程在实际运作时会在多个文件之间跳转调用,实际理解起

软工实践心得(1)

这篇心得记录了在小学期开始的三天内,自己所遇到的问题.解决方法以及最后的结果,在一样的代码底下,是大家各种不同的问题,代码书写问题.格式问题.理解问题等.对于myeclipse,一定要很仔细地完成各项任务,不然一个很小的问题,在运行中也会出现很大的问题. 1.第一天,主要装了myeclipse软件,我在G盘新建了一个名叫软工实践的文件夹,并把安装包放在这个文件夹内,安装其中的myeclise软件到D盘中的软工实践中.安装过后,运行的时候,一直出现一个错误: An error has occurr

第一次软工实践体会

不知不觉,软工实践小学期已经进行了三天,一开始,老师就明确了我们最终要做出什么:一个客户信息维护软件 首先,我们需要安装编写软件的环境:my eclipse Java enterprise 要说明的是my eclipse和之前我们学习java语言所用的eclipse稍有出入MyEclipse企业级工作平台(My Eclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它可以在数据库和J2EE的开发.发布,以及应用程序服务器的整合方面极

该死的软工实践

这学期给我最大的感觉是比之前的每学期过得都快,可能是比较忙吧.还记得刚开始的时候,栋哥说可以退选实验的时候,有人和我说:”好像软工实践很麻烦的样子,要不我们退了吧“.其实,我也有打过退堂鼓,以为自己学也可以做点东西,但是我还是抱着这样的想法”找个大腿抱,水一水吧,毕竟过了这学期,又可以少修几学分了“,然后就没有去退选了.接下来就是开始这软工实践的日子.该开始总是想得很美好,以为这学期结束会有一个产品,上面写着made by ***,到最后还是生出了一个比较low的东西,那是第一次真正实践的东西,

软工实践第一次作业-黄紫仪

软工实践第一次作业 前言:emmmm之前因为没太注意,想着计算机专业怎么会有软工实践.所以之前一直都没去管.等到开学才发现突然翻车.QAQ现在赶紧先来补交一下. (1)回想一下你初入大学时对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的? 你认为过去两年中接触到的课程是否符合你对计算机专业的期待,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗?   说到选择计算机,emmmm,某种意义上来说是打RPG游戏打出来的想法,因为很喜欢这类的游戏,所以也想去试着写一个属于自己的这种

调研《构建之法》指导下的全国高校的历届软工实践作品、全国互联网+竞赛、物联网竞赛等各类全国性大学生信息化相关的竞赛平台的历届作品及其看法

1,豌豆荚一览 作品内容:主要是一款聚合阅读类作品,他收录了500+应用的内容,可以在一个应用里面,看完自己感兴趣的应用的最近更新的内容,更通俗的讲就是用一个应用代替其他阅读类的应用,你可以在豌豆荚一览中看到其他应用最新更新内容,比如可以看知乎日报,开眼,一个等等之类的..... 作品源于的平台:豌豆荚设计奖里的作品,链接:http://sspai.com/30278 作品的优势:我们手机里面有很多的应用,每天都要在这些应用花费很多时间,其中有一些可能下载下来都不会打开几次,但是删掉又可惜的,于

往届软工实践作品评述

描述 作品的内容:作品源于的平台或链接:你觉得的作品的优势和不足:你觉得入选你心目中最佳前三的理由:经过调研后,你的感受和对自己团队项目的期待. 作品一 作品的内容: Phylab-Web 官方描述: 支持通过选择物理实验序号进入相应物理实验预习报告页面. 个人理解: 一个制作物理实验预习报告的页面. 作品源连接: https://github.com/buaase/Phylab-Web/blob/master/docs/User-Interface.md 优势: 贴近大学生的实际需要,并且制作

软工实践总结作业

忽然间,说结束就结束了. 明明是一直以来觉得头疼无比.时间占用巨大的这门课程,在结束的时候,却没有想象中的轻松,反而有一丝失落. 1.课程总结: 翻开刚刚开课时写下的目标,字里行间读出的,半是憧憬,半是迷茫.计划中要做的,有一些没有完成: 原打算学习java,最后却学习了一些php和mysql: 想要学会更好的管理时间,熬夜的次数好像却更加频繁: 原以为可以初步成长为一个合格的pm,但是回头看看自己做的好像也不怎么样.. .当然,也有不少的收获: 学会了一些软件的使用,例如原型开发软件Axure

软工实践个人总结

一.请回望第一次作业,你对于软件工程课程的想象 1)对比开篇博客你对课程目标和期待,"希望通过实践锻炼,增强计算机专业的能力和就业竞争力",对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么? 2)总结这门课程的实践总结和给你带来的提升,包括以下内容: 1.统计一下,你在这门软件工程实践中,完成了多少行的代码: 2.软工实践的各次作业分别花了多少时间?(做一个列表) 3.哪一次作业让你印象最深刻?为什么? 4.累计花了多少个小时在软工实践上?平均每周