ssm火车订票系统源码

【202】ssm火车订票系统

 开发工具:idea 
 数据库mysql5.7+
 数据库链接工具:navcat,小海豚等
  技术:ssm

Fields

Field

Type

Collation

Null

Key

Default

Extra

Privileges

Comment

id

int(11)

(NULL)

NO

PRI

(NULL)

auto_increment

select,insert,update,references

编号

name

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

车次

type

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

车型

bsite

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

起点

esite

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

终点

btime

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

发车时间

etime

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

到达时间

isdel

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

座位

Indexes

Table

Non
unique

Key
name

Seq
in
index

Column
name

Collation

Cardinality

Sub
part

Packed

Null

Index
type

Comment

Index
comment

checi

0

PRIMARY

1

id

A

5

(NULL)

(NULL)

BTREE

Back

  

gonggao

Fields

Field

Type

Collation

Null

Key

Default

Extra

Privileges

Comment

id

int(11)

(NULL)

NO

PRI

(NULL)

auto_increment

select,insert,update,references

编号

title

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

标题

content

varchar(2550)

utf8_general_ci

YES

(NULL)

select,insert,update,references

内容

optime

varchar(110)

utf8_general_ci

YES

(NULL)

select,insert,update,references

时间

isdel

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

删除标记

Indexes

Table

Non
unique

Key
name

Seq
in
index

Column
name

Collation

Cardinality

Sub
part

Packed

Null

Index
type

Comment

Index
comment

gonggao

0

PRIMARY

1

id

A

1

(NULL)

(NULL)

BTREE

Back

  

message

Fields

Field

Type

Collation

Null

Key

Default

Extra

Privileges

Comment

id

int(11)

(NULL)

NO

PRI

(NULL)

auto_increment

select,insert,update,references

编号

uid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

用户

title

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

主题

content

varchar(2550)

utf8_general_ci

YES

(NULL)

select,insert,update,references

内容

optime

varchar(110)

utf8_general_ci

YES

(NULL)

select,insert,update,references

留言时间

isdel

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

删除标记

Indexes

Table

Non
unique

Key
name

Seq
in
index

Column
name

Collation

Cardinality

Sub
part

Packed

Null

Index
type

Comment

Index
comment

message

0

PRIMARY

1

id

A

1

(NULL)

(NULL)

BTREE

Back

  

orders

Fields

Field

Type

Collation

Null

Key

Default

Extra

Privileges

Comment

id

int(11)

(NULL)

NO

PRI

(NULL)

auto_increment

select,insert,update,references

编号

uid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

用户

cid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

车次

sid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

座位

bsite

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

起点

esite

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

终点

price

double

(NULL)

YES

(NULL)

select,insert,update,references

票价

btime

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

发车时间

etime

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

到达时间

optime

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

下单时间

status

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

状态

Indexes

Table

Non
unique

Key
name

Seq
in
index

Column
name

Collation

Cardinality

Sub
part

Packed

Null

Index
type

Comment

Index
comment

orders

0

PRIMARY

1

id

A

2

(NULL)

(NULL)

BTREE

Back

  

reply

Fields

Field

Type

Collation

Null

Key

Default

Extra

Privileges

Comment

id

int(11)

(NULL)

NO

PRI

(NULL)

auto_increment

select,insert,update,references

编号

uid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

用户

mid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

消息

content

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

内容

optime

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

回复时间

Indexes

Table

Non
unique

Key
name

Seq
in
index

Column
name

Collation

Cardinality

Sub
part

Packed

Null

Index
type

Comment

Index
comment

reply

0

PRIMARY

1

id

A

1

(NULL)

(NULL)

BTREE

Back

  

seat

Fields

Field

Type

Collation

Null

Key

Default

Extra

Privileges

Comment

id

int(11)

(NULL)

NO

PRI

(NULL)

auto_increment

select,insert,update,references

编号

cid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

车次

sid

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

站点

name

varchar(255)

utf8_general_ci

YES

(NULL)

select,insert,update,references

座位类型

price

double

(NULL)

YES

(NULL)

select,insert,update,references

价格

num

int(11)

(NULL)

YES

(NULL)

select,insert,update,references

票数

Indexes

Table

Non
unique

Key
name

Seq
in
index

Column
name

Collation

Cardinality

Sub
part

Packed

Null

Index
type

Comment

Index
comment

seat

0

PRIMARY

1

id

A

32

(NULL)

(NULL)

BTREE

package cn.controller;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

import javafx.print.Collation;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.entity.Checi;
import cn.entity.Gonggao;
import cn.entity.Orders;
import cn.entity.Seat;
import cn.entity.Site;
import cn.entity.Users;
import cn.service.CheciService;
import cn.service.GonggaoService;
import cn.service.OrdersService;
import cn.service.SeatService;
import cn.service.SiteService;
import cn.service.UsersService;
import cn.test.Dijkstra;
import cn.test.Node;
import cn.util.Const;
import cn.util.PageBean;
import cn.util.ServerResponse;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mysql.jdbc.StringUtils;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author nnn
 * @since 2019-12-07
 */
@Controller
public class IndexController {
	@Autowired
	UsersService usersService;
	@Autowired
	GonggaoService gonggaoService;
	@Autowired
	OrdersService ordersService;
	@Autowired
	CheciService checiService;
	@Autowired
	SiteService siteService;
	@Autowired
	SeatService seatService;

	@RequestMapping("/index")
	public String index(Model model, String bsite,String esite,HttpSession session) {
		QueryWrapper<Gonggao> gwrapper = new QueryWrapper<Gonggao>();
		gwrapper.orderByDesc("id");
		List<Gonggao> glist = gonggaoService.list(gwrapper);
		session.setAttribute("glist", glist);
		
		boolean flag=true;
		
		if(bsite!=null && esite!=null){
			List<Checi> list=new ArrayList<Checi>();
			//1、始发-终点,如果刚好是始发和终点
			QueryWrapper<Checi> wrapper=new QueryWrapper<Checi>();
			wrapper.eq("bsite", bsite);
			wrapper.eq("esite", esite);
			wrapper.eq("isdel", 0);
			list=checiService.list(wrapper);
			if(list.size()==0){
				List<Integer> cidMap=checiService.getCid2(bsite, esite);
				//2、同一车次直达
				if(cidMap!=null && cidMap.size()>0){
					wrapper=new QueryWrapper<Checi>();
					wrapper.in("id", cidMap);
					wrapper.eq("isdel", 0);
					list=checiService.list(wrapper);
//					int n=list.size();
//					//同一车次判断顺序
//					for(int i=0;i<n;i++){
//						Checi c=list.get(i);
//						//出发
//						QueryWrapper<Site> siteWrapper1=new QueryWrapper<Site>();
//						siteWrapper1.eq("cid", c.getId());
//						siteWrapper1.eq("sname",bsite);
//						Site site1=siteService.getOne(siteWrapper1);
//						//到站
//						QueryWrapper<Site> siteWrapper2=new QueryWrapper<Site>();
//						siteWrapper2.eq("cid", c.getId());
//						siteWrapper2.eq("sname",esite);
//						Site site2=siteService.getOne(siteWrapper2);
//						//如果顺序不正确就删除
//						if(site1!=null && site2!=null){
//							if(site1.getStime()>site2.getStime()){
//								list.remove(c);
//								i--;//移除后少一个
//							}
//						}
//					}
					
				}else{
					flag=false;
					//3、多车次中转,Dijkstra算法选择中转点
					//包含起点的所有站,包含终点的所有站
					List<Integer> bcids=checiService.getCid3(bsite);
					List<Integer> ecids=checiService.getCid3(esite);
					ArrayList<Node> nodes=new ArrayList<Node>();
					//起点所有节点
					if(bcids!=null && bcids.size()>0){
						for(Integer cid : bcids){
							QueryWrapper<Site> siteWrapper1=new QueryWrapper<Site>();
							siteWrapper1.eq("cid",cid);
							List<Site> bsites=siteService.list(siteWrapper1);
							for(int i=0;i<bsites.size()-1;i++){
								Site b=bsites.get(i);
								Site e=bsites.get(i+1);
								Node node=new Node();
								node.setCheci(cid);
								node.setBsite(b.getSname());
								node.setEsite(e.getSname());
								node.setTime(e.getStime()-b.getStime());
								nodes.add(node);
							}
						}
					}
					//终点所有节点
					if(ecids!=null && ecids.size()>0){
						for(Integer cid : ecids){
							QueryWrapper<Site> siteWrapper1=new QueryWrapper<Site>();
							siteWrapper1.eq("cid",cid);
							List<Site> bsites=siteService.list(siteWrapper1);
							for(int i=0;i<bsites.size()-1;i++){
								Site b=bsites.get(i);
								Site e=bsites.get(i+1);
								Node node=new Node();
								node.setCheci(cid);
								node.setBsite(b.getSname());
								node.setEsite(e.getSname());
								node.setTime(e.getStime()-b.getStime());
								nodes.add(node);
							}
						}
					}
					
					//调用算法
					Dijkstra dijkstra=new Dijkstra();
					
					dijkstra.addNodes(nodes);
					
					ArrayList<Node> result=dijkstra.wrap(bsite,esite);
					
					if(result.size()>0){
						//找到了中转路线
						List<Integer> cids=new ArrayList<Integer>();
						for(int i=0;i<result.size();i++){
							Node node=result.get(i);
							if(!cids.contains(node.getCheci())){
								cids.add(node.getCheci());
							}
						}
						for(Integer cid:cids){
							//将能中转的车次查出
							QueryWrapper<Checi> cwrapper=new QueryWrapper<Checi>();
							cwrapper.eq("id", cid);
							cwrapper.eq("isdel", 0);
							Checi c=checiService.getOne(cwrapper);
							c.setSeats("需要中转,请分开预订!");
							
							if(c!=null){
								list.add(c);
							}
						}
					}	
					
				}
			}
			
			
				//站点和票价
				for(Checi c:list){
					//查询站点
					QueryWrapper<Site> siteWrapper=new QueryWrapper<Site>();
					siteWrapper.eq("cid",c.getId());
					List<Site> siteList=siteService.list(siteWrapper);
					StringBuffer sb=new StringBuffer();
					int bsid=0;
					int esid=0;
					for(Site s:siteList){
						if(s.getSname().equals(bsite)){
							bsid=s.getId();
							sb.append("<div><span style='color:#F00'>"+s.getSname()+"</span>&nbsp;&nbsp;达到时间"+s.getAtime()+"&nbsp;&nbsp;历时"+s.getStime()+"分</div>");
						}else if(s.getSname().equals(esite)){
							esid=s.getId();
							sb.append("<div><span style='color:#F00'>"+s.getSname()+"</span>&nbsp;&nbsp;达到时间"+s.getAtime()+"&nbsp;&nbsp;历时"+s.getStime()+"分</div>");
							break;
						}else{
							sb.append("<div><span>"+s.getSname()+"</span>&nbsp;&nbsp;达到时间"+s.getAtime()+"&nbsp;&nbsp;历时"+s.getStime()+"分</div>");
						}
					}
					c.setSites(sb.toString());
					if(flag){//无需中转的直接出价格
						sb=new StringBuffer();
						//查询票价
						QueryWrapper<Seat> seatWrapper=new QueryWrapper<Seat>();
						seatWrapper.eq("cid",c.getId());
						List<Seat> seatList=seatService.list(seatWrapper);
						for(Seat s:seatList){
	//						if(s.getSid()==bsid){
	//							sb.append("<div>"+s.getName()+"&nbsp;&nbsp;<span style='color:#F00'>价格"+s.getPrice()+"元</span>&nbsp;&nbsp;余票"+s.getNum()+"</div>");
	//						}else 
							if(s.getSid()==esid){
								sb.append("<div><input type='radio' name='sid' value='"+s.getId()+"'/>"+s.getName()+"&nbsp;&nbsp;<span style='color:#F00'>价格<span class='p"+s.getId()+"'>"+s.getPrice()+"</span>元</span>&nbsp;&nbsp;余票"+s.getNum()+"</div>");
							}
	//						else{
	//							sb.append("<div>"+s.getName()+"&nbsp;&nbsp;<span>价格"+s.getPrice()+"元</span>&nbsp;&nbsp;余票"+s.getNum()+"</div>");
	//						}
						}
						c.setSeats(sb.toString());
					}
				}
			
			
			model.addAttribute("list",list);
			model.addAttribute("bsite", bsite);
			model.addAttribute("esite", esite);
		}
		
		return "index";
	}

	

	@RequestMapping("/login")
	@ResponseBody
	public String login(String username, String password, Integer role,
			HttpSession session) {
		session.setAttribute("role", role);
		QueryWrapper<Users> wrapper = new QueryWrapper<Users>();
		wrapper.eq("role", role);
		wrapper.eq("isdel", 0);
		wrapper.eq("username", username);
		wrapper.eq("password", password);
		List<Users> list = usersService.list(wrapper);
		if (list != null && list.size() > 0) {
			Users user = list.get(0);
			session.setAttribute("users", user);
			QueryWrapper<Gonggao> gwrapper = new QueryWrapper<Gonggao>();
			gwrapper.orderByDesc("id");
			List<Gonggao> glist = gonggaoService.list(gwrapper);
			session.setAttribute("glist", glist);
			return "ok";
		}
		return "error";
	}

	@RequestMapping("/logout")
	public String logout(HttpSession session) {
		session.invalidate();
		return "login";
	}

	@RequestMapping("reg")
	@ResponseBody
	public ServerResponse<Users> reg(Users user) {
		QueryWrapper<Users> wrapper = new QueryWrapper<Users>();
		wrapper.eq("username", user.getUsername());
		Users u = usersService.getOne(wrapper);
		if (u != null) {
			return new ServerResponse<Users>("1", "该用户名已经存在!");
		} else {
			user.setRole(1);
			user.setIsdel(0);
			usersService.save(user);
			return new ServerResponse<Users>("0", "注册成功!");
		}
	}

	@RequestMapping("/uppwd")
	@ResponseBody
	public ServerResponse<String> uppwd(String password, HttpSession session) {
		Users a = (Users) session.getAttribute("users");
		a.setPassword(password);
		boolean flag = usersService.updateById(a);
		if (flag) {
			session.invalidate();
			return new ServerResponse<String>("0", "修改成功,请重新登录");
		}
		return new ServerResponse<String>("1", "修改失败");
	}

}

 

SSM(Spring + Spring MVC + MyBatis)是一种流行的Java Web开发框架,它结合了三个强大的框架,可以有效地构建高性能的、可扩展的网上订票系统。 网上订票系统的源码主要包含以下几个关键模块: 1. 用户管理模块:包括用户注册、登录、个人信息管理等功能,实现用户的身份验证和权限控制。 2. 车票管理模块:包括车票查询、订购、支付等功能,通过与数据库交互实现实时的车票信息管理。 3. 订单管理模块:包括订单生成、查询、修改等功能,记录用户的购票行为,并与车票管理模块进行交互。 4. 支付管理模块:集成第三方支付接口,实现用户的支付功能,确保支付的安全和可靠性。 5. 数据库管理模块:使用MyBatis框架进行数据库访问,包括数据库连接、事务管理等操作。 6. 日志管理模块:记录系统运行日志,方便管理员进行系统的监控和故障排查。 7. 界面设计模块:使用Spring MVC框架进行视图渲染,实现用户友好的界面和良好的用户体验。 通过以上几个模块的协同工作,SSM网上订票系统可以提供用户方便快捷的在线订票服务。用户可以通过系统查询车票信息,选择合适的车次和座位,进行订票并完成支付。系统会生成相应的订单,并及时更新车票信息,以保证票款的正确性。同时,系统还提供用户管理、订单管理等功能,方便用户进行个人信息管理和订单查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值