java SSM火车票务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

news2024/12/24 20:27:57

一、源码特点
    java SSM火车票务管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代
码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。

java ssm火车票务管理系统


二、功能介绍
(1)用户管理:对用户信息进行添加、删除、修改和查看
(2)管理员管理:对管理员信息进行添加、删除、修改和查看
(3)新闻管理:对新闻信息进行添加、删除、修改和查看
(4)列车管理:对列车信息进行添加、删除、修改和查看
(5)途径站点管理:对途径站点信息进行添加、删除、修改和查看
(6)订票管理:对订票信息进行添加、删除、修改和查看。
(7)用户登录、个人信息修改

数据库设计

(1)用户信息表如表3.1所示:

表3.1 用户信息表

序号

字段名称

数据类型

长度

主键

描述

1

yhid

INTEGER

11

用户编号

2

yhm

VARCHAR

40

用户名

3

mm

VARCHAR

40

密码

4

xm

VARCHAR

40

姓名

5

xb

VARCHAR

40

性别

6

dh

VARCHAR

40

电话

7

yx

VARCHAR

40

邮箱

8

zjh

VARCHAR

40

证件号

(2)管理员信息表如表3.2所示:

表3.2 管理员信息表

序号

字段名称

数据类型

长度

主键

描述

1

glyid

INTEGER

11

管理员编号

2

yhm

VARCHAR

40

用户名

3

mm

VARCHAR

40

密码

4

xm

VARCHAR

40

姓名

5

xb

VARCHAR

40

性别

6

dh

VARCHAR

40

电话

7

yx

VARCHAR

40

邮箱

(3)新闻信息表如表3.3所示:

表3.3新闻信息表

序号

字段名称

数据类型

长度

主键

描述

1

xwid

INTEGER

11

新闻编号

2

bt

VARCHAR

40

标题

3

nr

VARCHAR

40

内容

4

fbsj

VARCHAR

40

发布时间

(4)列车信息表如表3.4所示:

表3.4 列车信息表

序号

字段名称

数据类型

长度

主键

描述

1

lcid

INTEGER

11

列车编号

2

cc

VARCHAR

40

车次

3

qsz

VARCHAR

40

起始站

4

mdz

VARCHAR

40

目的站

5

fcsj

VARCHAR

40

发车时间

6

dzsj

VARCHAR

40

到站时间

7

pj

VARCHAR

40

票价

8

ptzjg

VARCHAR

40

普通座价格

9

wpjg

VARCHAR

40

卧铺价格

10

rwjg

VARCHAR

40

软卧价格

控制层代码

@RequestMapping(value="/add")
	public String add(lieche lieche,HttpServletRequest request){
		Map<String,Object> map= new HashMap<String,Object>();
		//String name=(String)request.getParameter("name");

		map.put("lcid", lieche.getLcid());//列车编号

		map.put("cc", lieche.getCc());//车次

		map.put("qsz", lieche.getQsz());//起始站

		map.put("mdz", lieche.getMdz());//目的站

		map.put("fcsj", lieche.getFcsj());//发车时间

		map.put("dzsj", lieche.getDzsj());//到站时间

		map.put("pj", lieche.getPj());//票价

		map.put("ptzjg", lieche.getPtzjg());//普通座价格

		map.put("wpjg", lieche.getWpjg());//卧铺价格

		map.put("rwjg", lieche.getRwjg());//软卧价格

		String lcid=(String)lieche.getLcid();//列车编号

		String cc=(String)lieche.getCc();//车次

		String qsz=(String)lieche.getQsz();//起始站

		String mdz=(String)lieche.getMdz();//目的站

		String fcsj=(String)lieche.getFcsj();//发车时间

		String dzsj=(String)lieche.getDzsj();//到站时间

		String pj=(String)lieche.getPj();//票价

		String ptzjg=(String)lieche.getPtzjg();//普通座价格

		String wpjg=(String)lieche.getWpjg();//卧铺价格

		String rwjg=(String)lieche.getRwjg();//软卧价格

		
	String sql="select count(1) as num from lieche where cc='"+cc+"'";
		
		ResultSet rs=null;
		int num=0;
		DBO db=new DBO();
		try{
			
			
			rs=db.query(sql);
			if(rs.next()){
				
				num=rs.getInt("num");
			}
			if(num>0){
				request.setAttribute("msg", "<script>alert('添加失败、车次重复');</script>");
				
			}else{
				liechedao.save(map);
				request.setAttribute("msg", "<script>alert('添加成功');</script>");	
			}
		}catch(Exception e){
			
			e.printStackTrace();
		}
		
	
		
		
	//	request.setAttribute("msg", "<script>alert('添加成功');</script>");
		System.out.println("addok");
		return "lieche/liecheadd";
	}
	
	/**删除 
	 * 
	 */
	@RequestMapping(value="/del")
	public String  del(Integer id,HttpServletRequest request,Map<String,Object> map){
	//	Map<String,Object> map= new HashMap<String,Object>();
		String a=(String)request.getParameter("keyid");
		id=Integer.parseInt(a);
		request.setAttribute("msg", "<script>alert('删除成功');</script>");
		liechedao.del(id);
		return selectall(null,map,request);
	}
	/**
	 * 修改lieche信息
	 */
	@RequestMapping(value="/update")
	public String update(lieche lieche,HttpServletRequest request,Map<String,Object> map1){
		Map<String,Object> map= new HashMap<String,Object>();
		map.put("lcid", lieche.getLcid());//列车编号

		map.put("cc", lieche.getCc());//车次

		map.put("qsz", lieche.getQsz());//起始站

		map.put("mdz", lieche.getMdz());//目的站

		map.put("fcsj", lieche.getFcsj());//发车时间

		map.put("dzsj", lieche.getDzsj());//到站时间

		map.put("pj", lieche.getPj());//票价

		map.put("ptzjg", lieche.getPtzjg());//普通座价格

		map.put("wpjg", lieche.getWpjg());//卧铺价格

		map.put("rwjg", lieche.getRwjg());//软卧价格

		String lcid=(String)lieche.getLcid();//列车编号

		String cc=(String)lieche.getCc();//车次

		String qsz=(String)lieche.getQsz();//起始站

		String mdz=(String)lieche.getMdz();//目的站

		String fcsj=(String)lieche.getFcsj();//发车时间

		String dzsj=(String)lieche.getDzsj();//到站时间

		String pj=(String)lieche.getPj();//票价

		String ptzjg=(String)lieche.getPtzjg();//普通座价格

		String wpjg=(String)lieche.getWpjg();//卧铺价格

		String rwjg=(String)lieche.getRwjg();//软卧价格

		request.setAttribute("msg", "<script>alert('修改成功');</script>");
		liechedao.update(map);
		return selectall(null,map1,request);
	}
	/**
	 * 查询lieche信息
	 */
	@RequestMapping(value="/modify")
	public String modify(Integer id,Map<String,Object> map,HttpServletRequest request){
		String keyid=(String)request.getParameter("keyid");
		List<Map<String,Object>> list= new  ArrayList<Map<String,Object>>();
		list=liechedao.select(Integer.parseInt(keyid));
		request.setAttribute("lcid", list.get(0).get("lcid"));//列车编号

		request.setAttribute("cc", list.get(0).get("cc"));//车次

		request.setAttribute("qsz", list.get(0).get("qsz"));//起始站

		request.setAttribute("mdz", list.get(0).get("mdz"));//目的站

		request.setAttribute("fcsj", list.get(0).get("fcsj"));//发车时间

		request.setAttribute("dzsj", list.get(0).get("dzsj"));//到站时间

		request.setAttribute("pj", list.get(0).get("pj"));//票价

		request.setAttribute("ptzjg", list.get(0).get("ptzjg"));//普通座价格

		request.setAttribute("wpjg", list.get(0).get("wpjg"));//卧铺价格

		request.setAttribute("rwjg", list.get(0).get("rwjg"));//软卧价格

		
		return "lieche/liechemodify";
	}

持久层代码

public void save(Map<String, Object> map) {
		sqlSession.insert("com.lieche.insertlieche", map);
		
	}
	/**
	 * 删除aa
	 * @param id
	 */
	public void del(Integer id) {
		sqlSession.delete("com.lieche.dellieche", id);
	}

	/**
	 * 修改lieche信息
	 * @param map
	 */
	public void update(Map<String, Object> map) {
		sqlSession.update("com.lieche.updatelieche", map);
	}

	/**
	 * 查询lieche信息
	 * @param id
	 * @return 
	 */
	public List<Map<String, Object>> select(Integer id) {
		return sqlSession.selectList("com.lieche.selectlieche", id) ; 
	}
	/**
	 * 查询lieche信息
	 * 
	 * @return 
	 */
	public List<Map<String, Object>> selectAll(Map<String, Object> map) {
		return sqlSession.selectList("com.lieche.selectall", map) ; 
	}

mybatis 配置文件

<insert id="insertlieche"  parameterType="java.util.Map">
 insert  into  lieche(cc,qsz,mdz,fcsj,dzsj,pj,ptzjg,wpjg,rwjg)  values(#{cc},#{qsz},#{mdz},#{fcsj},#{dzsj},#{pj},#{ptzjg},#{wpjg},#{rwjg})
</insert>

<delete id="dellieche" parameterType="int">
 delete  from  lieche where lcid=#{lcid}
</delete>

<update id="updatelieche" parameterType="java.util.Map">
update lieche set cc=#{cc},qsz=#{qsz},mdz=#{mdz},fcsj=#{fcsj},dzsj=#{dzsj},pj=#{pj},ptzjg=#{ptzjg},wpjg=#{wpjg},rwjg=#{rwjg} where lcid=#{lcid}
</update>

<!--  查询返回的是 list<map> -->
<!-- resultType 就是返回查询结果的类型,而如果是resultMap=则返回的就是你定义的javabean  -->
<select  id="selectlieche"  parameterType="int" resultType="java.util.Map">
  select  * from lieche where lcid=#{lcid}
</select>

<!-- resultType 就是返回查询结果的类型,而如果是resultMap=则返回的就是你定义的javabean  -->
<select  id="selectall"  parameterType="java.util.Map" resultType="java.util.Map">
  select  * from lieche where 1=1
<if test=" null != cc and cc!=''" >
 and cc = #{cc}
</if>
<if test=" null != qsz and qsz!=''" >
 and qsz = #{qsz}
</if>
<if test=" null != mdz and mdz!=''" >
 and mdz = #{mdz}
</if>
<if test=" null != fcsj and fcsj!=''" >
 and fcsj = #{fcsj}
</if>
<if test=" null != dzsj and dzsj!=''" >
 and dzsj = #{dzsj}
</if>
<if test=" null != pj and pj!=''" >
 and pj = #{pj}
</if>
<if test=" null != ptzjg and ptzjg!=''" >
 and ptzjg = #{ptzjg}
</if>
<if test=" null != wpjg and wpjg!=''" >
 and wpjg = #{wpjg}
</if>
<if test=" null != rwjg and rwjg!=''" >
 and rwjg = #{rwjg}
</if>

</select>


三、注意事项
    1、管理员账号:admin 密码:admin 数据库配置文件datasource.properties
     2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。
    3、数据库文件名是jspssmhcpw.sql,系统名称ssmhcpw
    4、系统首页地址:http://127.0.0.1:8080/ssmhcpw/login.jsp

四 系统实现


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1312486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机的外部中断的以及相关寄存器的讲解

中断系统 本文主要涉及8051单片机的中断系统的讲解与使用 其中包括中断相关寄存器的介绍与使用以及外部中断初始化的代码分析。 文章目录 中断系统一、 中断的介绍二、 中断结构及相关寄存器2.1 中断源 2.2 中断请求控制器2.2.1 TCON寄存器2.2.2 SCON寄存器2.2.3 中断允许寄存器…

【算法小技巧】如何判断奇偶

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

LLM(七)| Mamba:LLM新架构的浅探

目前大型语言模型&#xff08;LLM&#xff09;领域发展如火如荼&#xff0c;本文将重点探索在单个消费级GPU上可以有效运行的小型模型&#xff08;≤7B个参数&#xff09;。 我们将从以下几个方面重点介绍基于新架构的语言模型&#xff1a;&#x1f40d;Mamba模型&#xff08;h…

图-数据结构

图的介绍 如果你有学过《离散数学》&#xff0c;那么对图的概念一定不陌生&#xff0c;在计算机科学中&#xff0c;一个图就是一些顶点的集合&#xff0c;这些顶点通过一系列边连接&#xff08;结对&#xff09;。顶点用圆圈表示&#xff0c;边就是这些圆圈之间的连线。注意&a…

webGL开发数字孪生项目的流程

数字孪生是指使用数字模型来模拟和仿真现实世界的实体或系统。WebGL&#xff08;Web Graphics Library&#xff09;是一种用于在Web浏览器中进行高性能图形渲染的JavaScript API。将数字孪生与WebGL结合起来&#xff0c;可以实现在Web环境中呈现和交互数字模型的目标。北京木奇…

不完全伽马函数-Incomplete Gamma Function

REFERENCES Abramowitz, M. and Stegun, I. A. (Eds.). Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables, 9th printing. New York: Dover, p. 260, 1972. Arfken, G. “The Incomplete Gamma Function and Related Functions.” 10.5 in…

FRP 内网穿透工具部署

FRP 介绍 frp 是一个专注于内网穿透的高性能反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 官方网站&#xff1a;https://gofrp.org/zh-cn/ 项目地…

KylinV10 将项目上传至 Github

KylinV10 将项目上传至 Github 银河麒麟操作系统 V10 是在 Ubuntu 的基础上开发的&#xff0c;所以适用于 Ubuntu 的也适用于 KylinV10 一般上传至 GitHub&#xff0c;有两种方式&#xff0c;一种是 HTTPS&#xff0c;一种是 SSH&#xff0c;但是在 KylinV10 操作系统 HTTPS 的…

Gradio入门详细教程

常用的两款AI可视化交互应用比较&#xff1a; Gradio Gradio的优势在于易用性&#xff0c;代码结构相比Streamlit简单&#xff0c;只需简单定义输入和输出接口即可快速构建简单的交互页面&#xff0c;更轻松部署模型。适合场景相对简单&#xff0c;想要快速部署应用的开发者。便…

设计模式详解---抽象工厂模式

继续前言&#xff0c;工厂模式中抽象工厂模式的讲解&#xff1a; 1. 前面的工厂模式有啥问题&#xff1f; 前面的工厂模式有这么个问题&#xff1a;一个产品就给了一个工厂&#xff0c;这样子如果产品变多&#xff0c;系统就会很复杂&#xff1a; 2. 解决方法 我们可以按照手…

如何利用Python爬取网络上的图片

在当今数字化时代&#xff0c;网络上蕴藏着丰富的图片资源。对于开发者和研究者来说&#xff0c;从网络上获取图片数据是十分常见的需求。而Python作为一种强大的编程语言&#xff0c;提供了丰富的工具和库&#xff0c;使得爬取网络上的图片变得简单和高效。本文将介绍如何利用…

扫描电镜中的信号-噪声比(SNR)参数如何优化

在扫描电镜&#xff08;SEM&#xff09;中&#xff0c;信号-噪声比&#xff08;SNR&#xff09;的优化对于获得高质量的图像和可靠的数据分析至关重要。以下是一些优化SNR的方法&#xff1a; 选择适当的检测器&#xff1a;SEM通常配备了不同类型的检测器&#xff0c;如二次电子…

cmake 最基础示例

C 代码 文件名&#xff1a;first_cmake.cpp #include <iostream> using namespace std;int main() {cout<< "A" << endl;return 0; }CMakeLists.txt 文件 #CMakeLists.txt # 设置:版本 cmake_minimum_required(VERSION 3.20)# 定义 :项目名称 …

小红书种草和抖音传播区别是什么?

目前品牌较为关注的2大平台小红书和抖音&#xff0c;两者在种草方面存在一些明显的区别。本次就存量竞争、种草形式和种草策略这三个方面入手进行分析&#xff0c;今天和大家分享下小红书种草和抖音传播区别是什么&#xff1f; 一、存量竞争下的2大平台 2个都是属于存量竞争下的…

Point A的配置方式

Point A是5g中进行资源分配的参考点&#xff0c;所以UE驻留在小区上时&#xff0c;必须要知道Point A的位置&#xff0c;才能进一步根据参数确定属于自己的资源&#xff0c;这里就整理下协议上告知UE PointA的2种方式。 先看38.211中的描述&#xff0c;Point A是RB grids的公共…

Mysql - 常用插入数据的三种方法详解及练习

目录 &#x1f959;8.1.1 mysql中常用的三种插入数据的语句 1. insert into - 插入数据 2. replace into - 插入替换数据 3. insert ignore - 如果已存在&#xff0c;忽略当前新数据 &#x1f959;8.1.2 以上三种方法的练习及区分 &#x1f959;8.1.3 说明 &#x1f959…

C# WPF上位机开发(日志调试)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 程序开发的过程中&#xff0c;调试肯定是少不了的。比如说&#xff0c;这个时候&#xff0c;我们可以设置断点、查看变量、检查函数调用堆栈等等。…

Polkadot 品牌焕新提案:重返前卫,市场营销的创新愿景

波卡的品牌形象和营销策略也许将迎来新变化。长久以来一些社区成员批评道&#xff0c;波卡的形象过于保守、太企业化&#xff0c;缺乏 Crypto 行业应有的先锋气质。 在前阵子的 Parity “去中心化” 变革中&#xff0c;Parity 的营销团队经历了大幅的变动&#xff0c;随后建立…

ToolLLM model 以及LangChain AutoGPT Xagent在调用外部工具Tools的表现对比浅析

文章主要谈及主流ToolLLM 以及高口碑Agent 在调用Tools上的一些对比&#xff0c;框架先上&#xff0c;内容会不断丰富与更新。 ToolLLM model 也就是主打Function Call 的大模型 OPENAI GPT 宇宙第一LLM NexusRaven 开源&#xff0c;可商用&#xff0c;function call的效果对…

vue3 vite动态路由的问题

因为to.matched未配到路由导致&#xff0c; vue-router.mjs:35 [Vue Router warn]: No match found for location with path "/basedata/psiIntialCustomer/add"加下面的代码&#xff0c;是解决不了问题&#xff0c;因为它只是转向了404页面。 const routes_404 {…