模拟售票系统java编程
基于Java技术的的火车票订购系统设计研究

1技 术可行性 分析
对 于本 系统 的操 作 界面 ,无 论 用户 界面 还是 管理 员 界面 都 只是一 些 J S P页面 ,连接 数据库和 中文处理等部 分则采用 J a v a Be a n s 技 术。本项 目使 用了集成开 发工具 E c l i p s e 7 . 0 , 用于它 们拥 有强大的语法提示及 自动纠错等功 能, 因此可 以方 便 的进 行 J a v a及 J S P开 发。 Mi c r o s o t f s OL S e r v e r 2 0 0 0是 一 个 全 面 的 、 集 成化 的数据 库。其 基本操作实质还是对 数据库 进行添加 、删 除、查找等简单操作 ,利用它可 以为用户提供一个安 全、可靠、便 捷和高效的 平 台。 目前在 网络上开设车 次查询订 票系统 ,获 得 网址 的方法 可以通 过注册 和交费向域名管理 机构 申请 网络地址 的使用权 , 这 种方式需要一 定的投资额 ,但是 获得域 名较为稳定 ,且容易 记忆 。本系统开 发涉 及到的技术 因素主要有如 下几 个 方 面 :数 据库 技 术,对 s QL S e ve r r熟 悉 ,能够 熟练 使 用 S Q L S e ve r r 数 据库 ;系统 架构的规划 ,使用 B / S架构 ;页面开发 ,使用 HT M L和 J S P技 术 ,能够 使 用这 两 种 技 术 开 发 页面;配置环境 ,装有 Wi n d o ws XP电脑一 台, 安装 S Q L S e v r e r 2 0 0 0数据 库 ,搭建 E c l i p s e 平 台和 T o mc a t 服务 器,I E浏 览器等 。具备 上述 条件基 本,本系统设计开 发就 可以进行 。
4数据库设计
只需对 照用 户所 要 出发 的始 发站 和想 要 到达 的终点站名称 ,即可通过站站查询 ,选择 正确 的出行 线路,并查看 线路具体信息 。
网上订票系统

网上订票系统摘要随着我国铁路交通的不断发展,简单的窗口售票模式已经不能满足方便人们出行的目的。
采用先进的网络技术开发出方便快捷的网上订票系统是现代客运业务发展的必然需求。
本次设计的火车票网上订票系统通过访问主页,可以实现个人信息注册、车次车票价格查询、在线订票退票等基本功能,为用户提供方便快捷的订票服务。
本毕业设计的内容是设计并且实现一个基于web技术的网上订票网站,故而系统主要以j2EE作为开发基础,主要使用了struts2+spring+hibernate等多种框架的结合使用,用myeclipse作为开发工具,以SQL作为数据库,使用JAVA语言开发,页面采取JSP动态页面开发技术。
该系统界面简单、操作方便,容易维护。
关键词:网上订票网站 ,S.S.H(Struts ,Hibernate ,Spring),JAVA , JSPOnline booking systemAbstractWith the continuous development of China's railway transportation, simple window ticketing mode cannot satisfy the convenient for people to travel to. The use of advanced network technology to develop the online booking system convenient is the inevitable requirement of modern passenger business development. The online train tickets booking system design through the home page, you can realize the basic functions of the personal information registration, the train ticket price query, online booking, refund, provide convenient booking service for users.The contents of this graduation project is to design and implement an online booking website based on Web technology, this system mainly uses j2EE as the basis of development, the main use of the combined use of struts2+spring+hibernate and other frameworks, MyEclipse as a development tool, SQL as the database, using Macromedia's Dreamweaver as the interface landscaping tools, the use of JAVA language development take, page development technology of JSP dynamic pages. The system has a simple interface, easy operation, easy maintenance.Keywords:Online booking site ,Struts2 ,Hibernate ,Spring ,JAVA ,JSP目录摘要 (I)ABSTRACT ........................................................................................................................................ I I 1 绪论. (1)1 绪论 (1)2 系统的开发环境及技术简介 (1)2.1 系统开发环境 (1)2.1.1 MyEclipse (1)2.1.2 数据库简介 (2)2.1.3 Tomcat (2)2.2系统开发的思想与技术 (3)2.2.1JSP技术与MVC模式以及系统的基本框架 (3)2.2.2 S.S.H框架的优点 (3)3 系统总体设计 (6)3.1 总体功能模块 (6)3.2用户的功能模块 (6)3.3 系统业务描述 (7)3.4 程序流程图 (7)4系统详细设计与实现 (9)4.1系统和数据库的配置 (9)4.2概念模型设计 (10)4.3数据库逻辑模型 (10)4.4数据库表结构 (10)4.5平台数据表的设计 (12)5系统功能实现 (18)5.1程序的类图 (18)5.1.1订单Order类图 (18)5.1.2公告Gonggao类图 (19)5.1.3类型Leixing类图 (20)5.1.4票价Piaojia类图 (21)5.1.5时间Shijian类图 (22)5.1.6线路Xianlu类图 (23)5.1.7用户User类图 (24)5.2程序的时序图 (26)5.2.1 公告模块时序图 (26)5.2.2 类型模块时序图 (27)5.2.3 票价模块时序图 (28)5.2.4 线路模块时序图 (29)5.2.5 用户模块时序图 (30)5.3系统功能实现的主要框架 (30)5.3.1 SSH框架 (30)5.3.2 hibernate配置文件 (30)5.3.3 struts配置文件 (32)5.3.4 spring配置文件 (33)5.4系统功能实现的主要模块 (34)5.4.1 登陆页面 (34)5.4.2 用户注册页面 (36)5.4.3 网站主页面 (37)6系统的调试与测试 (39)6.1软件测试的目的 (39)6.2软件测试的任务 (39)6.3测试环境 (39)6.4测试环境的配置 (40)6.4.1 创建安装项目 (40)6.4.2 添加项目输出 (41)6.4.3 运行项目 (43)参考文献 (45)致谢 (46)1 绪论1 绪论火车站市场的管理和规范问题,是困扰我们多年的一个老问题,订票是客运业务中的一个最基本的业务,表面上看,它只是火车站业务的一个简单的部分,但是它涉及到管理与客户服务等多方面,因此,过去传统的售票方式已经不能满足现代客运业务流量剧增的客观要求,这就要求一种全新的订票方式——网上订票,来缓解订票高峰时期的客运压力,并为用户提供方便快捷的订票服务。
火车票售票管理系统 (3)

火车票售票管理系统介绍火车票售票管理系统是一个用于管理火车票售票、订单管理和客户信息的软件系统。
该系统提供了一个方便快捷的平台,使用户能够在线浏览、预订和购买火车票,并对订单进行管理和查询。
功能1. 火车票查询用户可以通过系统提供的火车票查询功能查找目标日期和路线的火车票。
用户可以输入出发地、目的地和日期等信息来查找合适的火车票。
查询结果包括列车的发车时间、到达时间、车次、票价和余票数量等。
2. 火车票预订用户可以查看到的火车票信息后进行预订。
用户需要输入乘车人的信息,并选择座位类型和票数进行预订。
系统会根据用户的选择自动生成订单号,并提供支付链接进行付款。
3. 订单管理用户可以在系统中管理自己的订单。
用户可以查看订单详情,包括订单号、乘车人信息、座位类型、票价和支付状态等。
用户还可以取消未支付的订单,并根据需要重新预订。
4. 客户信息管理系统提供了客户信息管理功能,用户可以在系统中维护个人信息。
用户可以修改个人信息,包括姓名、性别、手机号码和电子邮箱等。
用户也可以查看自己的历史订单和购票记录。
5. 系统管理系统管理员可以对火车票售票管理系统进行管理。
管理员可以管理火车票信息,包括添加新的火车车次、修改票价和调整余票数量等。
管理员还可以管理用户信息,包括添加新用户、修改用户信息和删除用户等。
架构火车票售票管理系统的架构包括前端和后端两部分。
前端前端使用HTML、CSS和JavaScript编写,采用响应式设计,能够在不同终端设备上良好地展示。
前端实现了用户界面和交互逻辑,包括火车票查询、预订、订单管理和客户信息管理等功能。
后端后端使用Java编程语言开发,采用Spring框架和Spring Boot技术,实现了业务逻辑和数据交互。
后端处理用户请求,调用相应的服务进行数据处理和查询,并将结果返回给前端。
数据库设计火车票售票管理系统使用关系型数据库存储数据。
数据库中包括以下主要表:用户表存储用户的个人信息,包括用户ID、姓名、性别、手机号码和电子邮箱等。
售票系统方案

售票系统方案第1篇售票系统方案一、项目背景随着社会经济的发展和人们生活水平的提高,文化娱乐活动日益丰富,各类演出、体育赛事等活动的门票销售业务量不断攀升。
为满足市场需求,提高票务销售效率,降低排队等候时间,实现公平、公正、透明的售票流程,本项目旨在构建一套合法合规的售票系统。
二、系统目标1. 提高票务销售效率,缩短购票时间。
2. 确保售票过程的公平、公正、透明。
3. 方便用户购票,提高用户体验。
4. 降低人力成本,提高管理水平。
5. 预防和打击黄牛倒卖门票行为。
三、系统设计1. 用户端用户可通过PC端、移动端等渠道访问售票系统,实现以下功能:- 用户注册与登录;- 活动查询、票务信息查询;- 在线选座、购票、支付;- 订单查询、修改与取消;- 电子票获取、验票;- 客户服务与投诉建议。
为保障用户隐私,用户需同意并遵守相关法律法规,不得泄露他人信息。
2. 管理端管理人员可通过后台管理系统进行以下操作:- 活动发布与管理;- 票务管理;- 用户管理;- 订单管理;- 数据分析与报表;- 系统设置与权限分配。
管理人员需严格遵守相关法律法规,确保售票过程合法合规。
3. 技术架构售票系统采用前后端分离的技术架构,前端负责展示与交互,后端负责数据处理与存储。
具体如下:- 前端:使用HTML、CSS、JavaScript等技术实现用户界面,采用响应式设计,兼容不同设备;- 后端:采用Java、Python等编程语言,使用Spring Boot、Django等框架,实现业务逻辑处理、数据存储与接口调用;- 数据库:采用MySQL、Oracle等关系型数据库,存储用户、活动、票务、订单等数据;- 服务器:使用Linux系统,部署在云平台上,确保系统稳定可靠。
4. 安全措施为确保系统安全,采取以下措施:- 数据加密:采用SSL/TLS等加密技术,保障数据传输安全;- 用户认证:采用用户名密码、短信验证码等方式进行用户身份认证;- 权限控制:实现不同角色之间的权限分离,防止越权操作;- 防火墙与安全审计:部署防火墙,防止恶意攻击,进行安全审计,及时发现并处理异常。
模拟售票系统安装操作手册

作者:dracula1213安装手册1.安装必要的程序1.1 安装sqlserver2005数据库运行售票系统需要安装sqlserver2005和jdk1.6。
首先说明:Sqlserver2005可以不安装在本机上,但如果安装在另外的机器上,运行售票程序连接Sqlserver2005时,需将装有Sqlserver2005计算机的windows防火墙关闭,否则会连接不上。
重要说明:无论数据库是否安装在本机上,本售票程序都不支持两台以上的计算机连接到同一个数据库上,本程序并做任何的并发处理,任何两台以上的计算机同时针对同一个数据库的操作,都可能引发数据库错误。
首先准备sqlserver2005的安装程序,运行,首先安装程序会进行一些检查,有一个IIS Admin Service要安装,大家可以通过“运行”-输入services.msc查看系统是否已安装此服务,并且是否运行,如果没有安装,Sqlserver2005的安装前检查会提示错误:。
如果没有安装此服务,大家可以通过控制面版中的“添加/删除程序”中的添加windows组件来安装此服务。
sqlserver2005的安装检查通过后,下一步,到如下的界面:此处要把第一项“SQL Server Database Services”和最后一项“工作站组件……”勾选上,然后点选“高级”,可修改安装路径,然后下一步,选择默认实例即可。
然后一直下一步即可,当系统出现要让你指定服务器身份验证模式的时候,要选择“SQL Server 和 Windows身份验证模式”,然后指定“sa”用户的密码,请记住此密码,以后数据库的用户便是“sa”,密码便是此密码,其它步骤系统默认即可。
安装完成后,查看服务项是否有此服务,并确定此服务处于启动状态;同时查看任务管理器是否有sqlserver.exe的进程:如果有此两项,说明sqlserver2005已安装成功。
1.2 导入数据库打开开始菜单-程序,找到Microsoft SQL Server 2005,运行该目录下的SQL Server Management Studio,运行界面如下:将“身份验证”选择“SQL Server身份验证”,登录名录入“sa”,密码录入先前安装Sqlserver2005时指定的密码,连接,连接成功后,界面如下:选中左边列表中的“数据库”单击右键,选择“还原数据库”:运行后界面如下:在“目标数据库”中输入数据库名称,此名称可随便起,但要记住此名称,接下来配置售票系统时要用到此名称。
java 多线程练习题

java 多线程练习题Java多线程练习题在Java中,多线程是非常常见和重要的概念。
通过使用多线程,我们可以实现并发处理和同时执行多个任务。
为了熟悉和掌握多线程的用法,下面将给出一些Java多线程的练习题。
1. 编写一个Java程序,创建两个线程,分别输出从1到50和从51到100的数字。
确保两个线程交替输出数字,即输出的结果应为:1,51,2,52,3,53...,99,100。
2. 编写一个Java程序,创建三个线程,分别输出字符A、字符B和字符C。
确保三个线程按顺序交替输出字符,即输出的结果应为:ABCABCABC...3. 编写一个Java程序,模拟购票系统。
假设有100张票,多个窗口同时售票,要求保证售出的票没有重复,即每张票只能卖给一个人。
4. 编写一个Java程序,使用多线程实现生产者-消费者模型。
假设有一个信号灯,生产者线程可以向信号灯放置数据,消费者线程可以从信号灯中取走数据。
要求生产者线程和消费者线程交替执行,确保生产者放置数据后,消费者才能取走数据。
5. 编写一个Java程序,使用多线程计算1到100之间所有数字的和。
要求将任务分成10个子任务,由10个线程并行地执行,并最后将子任务的计算结果合并得到最终结果。
6. 编写一个Java程序,实现一个简单的线程池。
线程池中包含固定数量的线程,多余的任务将会排队等待执行。
当新的任务到达时,如果有空闲线程,则立即执行,否则任务将会进入等待队列。
以上是一些Java多线程的练习题,通过完成这些练习题,您将熟悉和掌握多线程的基本用法和常见应用场景。
希望这些练习题对您的学习和实践有所帮助!。
基于Java和数据库系统设计的航空售票系统

基于Java和数据库系统设计的航空售票系统航空售票系统是一个复杂的软件系统,涉及到用户预订机票、航班信息管理、座位管理、票务管理、支付系统等多个模块。
本文将着重介绍基于Java和数据库系统设计的航空售票系统的整体架构和关键功能模块。
一、系统架构1.1 系统整体架构航空售票系统的整体架构可以分为三层:表示层、业务逻辑层和数据访问层。
- 表示层:负责与用户交互,包括用户界面展示、用户输入接收和响应等。
通常采用Web或移动应用作为表示层。
- 业务逻辑层:处理用户的请求,进行业务逻辑的处理,包括航班查询、订票、支付等。
- 数据访问层:负责与数据库进行交互,包括数据的读取、更新和删除等操作。
1.2 技术选型基于Java的航空售票系统可以采用Spring框架作为整体框架,通过Spring MVC实现表示层的功能,Spring IOC实现业务逻辑层的功能,MyBatis或Hibernate实现数据访问层的功能。
Java语言本身具有平台无关性和较好的跨平台兼容性,能够满足航空售票系统在不同平台上的部署需求。
二、系统功能模块2.1 用户模块用户模块包括用户注册、登录、个人信息管理等功能。
注册时需要验证用户输入的信息,并将用户信息存储到数据库中;登录时需要验证用户的身份信息,确保用户登录后能够进行相关操作;个人信息管理包括用户的个人资料和订单信息的展示和管理等。
2.2 航班查询模块航班查询模块允许用户根据出发地、目的地、日期等条件查询符合条件的航班信息。
系统需要从数据库中读取航班信息,并将符合条件的航班信息展示给用户。
2.3 订票模块订票模块允许用户选择符合条件的航班进行订票操作。
用户需要输入乘客信息、选择座位以及支付方式等。
系统需要对用户输入的信息进行验证,确保订单的合法性;在用户订票成功后,需要更新数据库中的座位信息和订单信息。
2.4 支付模块支付模块是航空售票系统中非常重要的一个模块。
用户在订票成功后需要进行支付操作,系统需要与第三方支付平台进行交互,完成支付流程。
火车票售票系统源代码

public void actionPerformed(ActionEvent e){
JFileChooser openfile = new JFileChooser();
p2.add(jtf4);
p2.add(jlb6);
p2.add(jtf5);
p2.add(jlb7);
p2.add(jtf6);
p2.add(jbt1);
p3.add(p1,BorderLayout.NORTH);
p3.add(p2,BorderLayout.CENTER);
inputfile = new FileInputStream(filename);
int len = 0;
// 如下为依次读取文件中的每一行内容,将其加入StringBuffer数据类型便利strBF中
FileReader in = new FileReader(filename.getAbsoluteFile());
JLabel jlb5=new JLabel(" 身份证号");
JLabel jlb6=new JLabel(" 工作");
JLabel jlb7=new JLabel(" 电话");
final JTextField jtf1=new JTextField(10);
final JTextField jtf2=new JTextField(10);
JOptionPane.showMessageDialog(panel, error_message
);
火车票销售系统实验报告

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
panel1.add( new JLabel("出发站:"));
panel1.add(firstStation);
panel1.add( new JLabel("到达站:"));
panel1.add(endStation);
but_reback.addActionListener(handel);
but_alter.addActionListener(handel);
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.border.EtchedBorder;
import java.util.List;
impoபைடு நூலகம்t javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
private static final long serialVersionUID =1L;
景点售票系统源代码

import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;public class LogOn{public static void main(String[] args)throws SQLException{final JFrame jfrmlogin=new JFrame("系统登录");jfrmlogin.setSize(400,280);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();jfrmlogin.setLocation((int) (screenSize.width-400)/2,(int)(screenSize.height-300)/2);//设置框出现的位置JPanel p1=new JPanel();p1.add(new JLabel("用户名:"));final JTextField jtxtuser=new JTextField(14);JPanel p2=new JPanel();p2.add(new JLabel("密码:"));final JPasswordField jspwd=new JPasswordField(14);JPanel p3=new JPanel();final JButton jbtUser=new JButton("登录");final JButton jbtreg=new JButton("注册");JButton jbtexit=new JButton("退出");p1.add(jtxtuser);p2.add(jspwd);p3.add(jbtUser);p3.add(jbtreg);p3.add(jbtexit);jbtUser.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Connection conn=null;ResultSet rs=null;Statement stmt=null;if(e.getSource()==jbtUser){try {Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");stmt=conn.createStatement();String USER_NAME=jtxtuser.getText();rs = stmt.executeQuery("select * from TICKET_USERS where USER_NAME='"+jtxtuser.getText()+"'and USER_PWD='"+jspwd.getText()+"'");if(rs.next()){if(USER_NAME.equals("admin")==false){MainUser mf=new MainUser();mf.setVisible(true);jfrmlogin.dispose();}else{MainFrame mf=new MainFrame();mf.setVisible(true);jfrmlogin.dispose();}}else{JOptionPane.showMessageDialog(null,"用户名或密码不一致,请重新输入!","系统提示",JOptionPane.ERROR_MESSAGE);jtxtuser.setText("");jspwd.setText("");}} catch (Exception ex) {JOptionPane.showMessageDialog(null,"用户名或密码不一致,请重新输入!","系统提示",JOptionPane.ERROR_MESSAGE);jtxtuser.setText("");jspwd.setText("");}}}});jbtreg.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Connection conn=null;ResultSet rs=null;Statement stmt=null;if(e.getSource()==jbtreg){try {Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");stmt=conn.createStatement();rs = stmt.executeQuery("insert into TICKET_USERS(USER_NAME,USER_PWD) values('"+jtxtuser.getText()+"','"+jspwd.getText()+"')");if(rs.next()){JOptionPane.showMessageDialog(null,"你已成功注册!可以登录了!","系统提示",RMATION_MESSAGE);jtxtuser.setText("");jspwd.setText("");}else{JOptionPane.showMessageDialog(null,"用户注册失败!","系统提示",JOptionPane.ERROR_MESSAGE);jtxtuser.setText("");jspwd.setText("");}} catch (Exception ex) {JOptionPane.showMessageDialog(null,"用户注册失败!","系统提示",JOptionPane.ERROR_MESSAGE);jtxtuser.setText("");jspwd.setText("");}}}});jbtexit.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});jfrmlogin.getContentPane().setLayout(new GridLayout(3,1));jfrmlogin.getContentPane().add(p1);jfrmlogin.getContentPane().add(p2);jfrmlogin.getContentPane().add(p3);jfrmlogin.setVisible(true);}}import java.sql.*;public class ConnectOracle{public static void connection(String[] args) throws SQLException {//Connection conn=null;//Statement stmt=null;//ResultSet rs=null;//JDBC 直连Oracle数据库加载驱动try {System.out.println("正在连接数据库.......");Class.forName("oracle.jdbc.driver.OracleDriver");/*conn =*/DriverManager.getConnection("jdbc:oracle:thin:@localh ost:1521:orcl", "system", "123");System.out.println("已经连接到数据库.....");//stmt=conn.createStatement();//stmt.executeQuery("insert intostudent(STUID,STUNAME,SEX,AGE)values(0001,'李华','男',20)");//rs=stmt.executeQuery("select * from STUDENT");//System.out.println(" stuID "+" StuName " + " Sex " + " Age");//while(rs.next()){//int STUID=rs.getInt("STUID");//String STUNAME=rs.getString("STUNAME");//String SEX=rs.getString("SEX");//int AGE=rs.getInt("AGE");//System.out.println(" "+STUID+" "+STUNAME+" "+SEX+" "+AGE);//System.out.println(" STUID "+STUID+" STUNAME"+STUNAME+"SEX"+SEX+"AGE"+AGE);//}} catch (Exception ex) {//System.out.println("出现的异常为" + ex);;}}}import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class AddTicket extends JPanel implements ActionListener{Connection con;Statement st;JLabel jLabel1=new JLabel("票单价:");JLabel jLabel2=new JLabel("票日期:");JTextField jTextField1=new JTextField();JTextField jTextField2=new JTextField();JButton jButton1=new JButton("确定增加");public AddTicket(){try{jbInit();}catch(Exception exception){exception.printStackTrace();}}private void jbInit() throws Exception{Class.forName("oracle.jdbc.driver.OracleDriver");con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");this.setLayout(null);jLabel1.setBounds(new Rectangle(40,40,64,24));jLabel2.setBounds(new Rectangle(40,100,53,22));jTextField1.setBounds(new Rectangle(102,40,200,30));jTextField2.setBounds(new Rectangle(102,100,200,30));jButton1.setBounds(new Rectangle(120,220,150,32));jButton1.addActionListener(this);this.add(jLabel1);this.add(jTextField1);this.add(jLabel2);this.add(jTextField2);this.add(jButton1);ResultSet rs=null;st=con.createStatement();rs = st.executeQuery("select * from TICKET_TRANSCRIPT");if(rs.next()){jTextField1.setText(rs.getString("TICKET_PRICE"));}}public void actionPerformed(ActionEvent e){try{st=con.createStatement();st.executeUpdate("delete from TICKET");st.executeUpdate("delete from TICKET_ORDER_FORM");st.executeUpdate("insert into TICKET select * from TICKET_TRANSCRIPT");st.executeUpdate("update TICKET set TICKET_DATE='"+jTextField2.getText()+"'");st.executeUpdate("update TICKET set TICKET_PRICE='"+jTextField1.getText()+"'");JOptionPane.showMessageDialog(this,"票增加成功!");jTextField1.setText("");jTextField2.setText("");}catch(Exception ex){JOptionPane.showMessageDialog(this,"票增加失败!");ex.printStackTrace();}}}import javax.swing.*;import javax.swing.table.JTableHeader;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.*;public class AdminInquireTicket extends JFrame{Connection con;Statement st;private JScrollPane scpDemo;private JTableHeader jth;private JTable tabDemo;private JButton btnShow;private JButton btnShow1;public AdminInquireTicket(){super("华清池售票系统");this.setSize(430,400);this.setLayout(null);this.setLocation(500,180);this.scpDemo = new JScrollPane();this.scpDemo.setBounds(10,50,390,270);this.btnShow = new JButton("显示票信息");this.btnShow.setBounds(10,10,390,30);this.btnShow1 = new JButton("返回");this.btnShow1.setBounds(260,330,120,30);JLabel jLabel1=new JLabel("余票总数:");JTextField jTextField1=new JTextField();jLabel1.setBounds(new Rectangle(20,330,100,30));jTextField1.setBounds(new Rectangle(90,330,70,30));add(this.scpDemo);add(this.btnShow);add(this.btnShow1);this.add(jLabel1);this.add(jTextField1);this.setVisible(true);try{Class.forName("oracle.jdbc.driver.OracleDriver");con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");ResultSet rs=null;int n = 0;st=con.createStatement();rs = st.executeQuery("select * from TICKET");while(rs.next()){n++;}jTextField1.setText(""+n+"");}catch(Exception exception){exception.printStackTrace();}this.btnShow1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){MainFrame mu=new MainFrame();mu.setVisible(true);dispose();}});this.btnShow.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent ae){btnShow_ActionPerformed(ae);}});}public void btnShow_ActionPerformed(ActionEvent ae){try{Class.forName("oracle.jdbc.driver.OracleDriver");Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");String sql = "select * from TICKET";PreparedStatement pstm = con.prepareStatement(sql);ResultSet rs = pstm.executeQuery();int count = 0;while(rs.next()){count++;}rs = pstm.executeQuery();Object[][] info = new Object[count][4];count = 0;while(rs.next()){info[count][0] = rs.getString("TICKET_NUM");info[count][1] = rs.getString("TICKET_DATE");info[count][2] = rs.getString("TICKET_PRICE");count++;}String[] title = {"票号","日期","票价"};this.tabDemo = new JTable(info,title);this.jth = this.tabDemo.getTableHeader();this.scpDemo.getViewport().add(tabDemo);}catch(ClassNotFoundException cnfe){JOptionPane.showMessageDialog(null,"查询失败!","错误",JOptionPane.ERROR_MESSAGE);}catch(SQLException sqle){JOptionPane.showMessageDialog(null,"查询失败!","错误",JOptionPane.ERROR_MESSAGE);}}}import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class BuyTicket extends JPanel implements ActionListener{Connection con;Statement st;JLabel jLabel1=new JLabel("用户名:");JLabel jLabel2=new JLabel("票编号:");JLabel jLabel3=new JLabel("票单价:");JLabel jLabel4=new JLabel("票日期:");JTextField jTextField1=new JTextField();JTextField jTextField2=new JTextField();JTextField jTextField3=new JTextField();JTextField jTextField4=new JTextField();JButton jButton1=new JButton("确定购买");public BuyTicket(){try{jbInit();}catch(Exception exception){exception.printStackTrace();}}private void jbInit() throws Exception{Class.forName("oracle.jdbc.driver.OracleDriver");con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");this.setLayout(null);jLabel1.setBounds(new Rectangle(40,40,64,24));jLabel2.setBounds(new Rectangle(40,100,53,22));jLabel3.setBounds(new Rectangle(40,160,61,27));jLabel4.setBounds(new Rectangle(40,220,61,27));jTextField1.setBounds(new Rectangle(102,40,200,30));jTextField2.setBounds(new Rectangle(102,100,200,30));jTextField3.setBounds(new Rectangle(102,160,200,33));jTextField4.setBounds(new Rectangle(102,220,200,33));jButton1.setBounds(new Rectangle(120,300,150,32));jButton1.addActionListener(this);this.add(jLabel1);this.add(jTextField1);this.add(jLabel2);this.add(jTextField2);this.add(jLabel3);this.add(jTextField3);this.add(jLabel4);this.add(jTextField4);this.add(jButton1);ResultSet rs=null;st=con.createStatement();rs = st.executeQuery("select * from (select rownum num, a.* from TICKET a)where num = (select count(1) from TICKET)");if(rs.next()){jTextField2.setText(rs.getString("TICKET_NUM"));jTextField3.setText(rs.getString("TICKET_PRICE"));jTextField4.setText(rs.getString("TICKET_DATE"));}}public void actionPerformed(ActionEvent e){if(e.getSource()==jButton1){try{st.executeUpdate("insert into TICKET_ORDER_FORM values('"+jTextField1.getText()+"','"+jTextField2.getText()+"','"+jTextField4.getText()+"','"+jTextFiel d3.getText()+"')");st.executeUpdate("delete from TICKET where TICKET_NUM='"+jTextField2.getText()+"'");JOptionPane.showMessageDialog(this,"购票成功!");jTextField1.setText("");jTextField2.setText("");jTextField3.setText("");jTextField4.setText("");}catch(Exception ex){JOptionPane.showMessageDialog(this,"购票失败!");ex.printStackTrace();}}}}import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;public class InquireTicket extends JPanel implements ActionListener{Connection con;Statement st;JLabel jLabel1=new JLabel("余票数:");JTextField jTextField1=new JTextField();JLabel jLabel2=new JLabel("票价:");JTextField jTextField2=new JTextField();JLabel jLabel3=new JLabel("日期:");JTextField jTextField3=new JTextField();public InquireTicket(){try{jbInit();}catch(Exception exception){exception.printStackTrace();}}private void jbInit() throws Exception{Class.forName("oracle.jdbc.driver.OracleDriver");con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");this.setLayout(null);jLabel1.setBounds(new Rectangle(40,50,64,24));jTextField1.setBounds(new Rectangle(102,50,200,30));jLabel2.setBounds(new Rectangle(40,100,64,24));jTextField2.setBounds(new Rectangle(102,100,200,30));jLabel3.setBounds(new Rectangle(40,150,64,24));jTextField3.setBounds(new Rectangle(102,150,200,30));this.add(jLabel1);this.add(jTextField1);this.add(jLabel2);this.add(jTextField2);this.add(jLabel3);this.add(jTextField3);ResultSet rs=null;int count = 0;st=con.createStatement();rs = st.executeQuery("select * from TICKET");while(rs.next()){jTextField2.setText(rs.getString("TICKET_PRICE"));jTextField3.setText(rs.getString("TICKET_DATE"));count++;}jTextField1.setText(""+count+"");}public void actionPerformed(ActionEvent e){}}import java.awt.Dimension;import java.awt.Font;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;public class MainFrame extends JFrame implements ActionListener{JPanel contentPane;JMenuBar jMenuBar1=new JMenuBar();JMenu jMenu0=new JMenu("系统");JMenuItem jMenuItem0=new JMenuItem("退出");JMenu jMenu1=new JMenu("增加票");JMenuItem jMenuItem1=new JMenuItem("增加票");JMenu jMenu2=new JMenu("修改票");JMenuItem jMenuItem2=new JMenuItem("修改票");JMenu jMenu3=new JMenu("查询票");JMenuItem jMenuItem3=new JMenuItem("查询票");JLabel jLabel1=new JLabel(" 华清池售票系统(管理员)");JLabel jLabel2=new JLabel(" 延安大学软件12课程设计");public MainFrame(){try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exception exception){exception.printStackTrace();}}private void jbInit() throws Exception{contentPane =(JPanel) getContentPane();contentPane.setLayout(null);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation((int) (screenSize.width-400)/2,(int)(screenSize.height-360)/2);setSize(new Dimension(400,420));setTitle("华清池售票系统");jMenuItem0.addActionListener(this);jMenuItem1.addActionListener(this);jMenuItem2.addActionListener(this);jMenuItem3.addActionListener(this);setJMenuBar(jMenuBar1);jMenuBar1.add(jMenu0);jMenuBar1.add(jMenu1);jMenuBar1.add(jMenu2);jMenuBar1.add(jMenu3);jMenu0.add(jMenuItem0);jMenu1.add(jMenuItem1);jMenu2.add(jMenuItem2);jMenu3.add(jMenuItem3);contentPane.add(jLabel1);contentPane.add(jLabel2);jLabel1.setFont(new java.awt.Font("黑体",Font.BOLD,20));jLabel1.setBounds(new Rectangle(65,70,275,55));jLabel2.setFont(new java.awt.Font("黑体",Font.BOLD,16));jLabel2.setBounds(new Rectangle(90,150,200,35));}public void actionPerformed(ActionEvent actionEvent){if(actionEvent.getSource()==jMenuItem0){JOptionPane.showMessageDialog(null,"您已成功退出系统!","系统提示",JOptionPane.CANCEL_OPTION);System.exit(0);}if(actionEvent.getSource()==jMenuItem1){AddTicket AddT=new AddTicket();this.remove(this.getContentPane());this.setContentPane(AddT);this.setVisible(true);}if(actionEvent.getSource()==jMenuItem2){ModifyTicket AddT=new ModifyTicket();this.remove(this.getContentPane());this.setContentPane(AddT);this.setVisible(true);}if(actionEvent.getSource()==jMenuItem3){this.setVisible(false);AdminInquireTicket AddT=new AdminInquireTicket();this.remove(this.getContentPane());this.setContentPane(AddT);this.setVisible(true);}}}import java.awt.Dimension;import java.awt.Font;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;public class MainUser extends JFrame implements ActionListener {JPanel contentPane;JMenuBar jMenuBar1=new JMenuBar();JMenu jMenu0=new JMenu("系统");JMenuItem jMenuItem0=new JMenuItem("退出");JMenu jMenu1=new JMenu("购票");JMenuItem jMenuItem1=new JMenuItem("购票");JMenu jMenu2=new JMenu("查询余票");JMenuItem jMenuItem2=new JMenuItem("查询余票");JMenu jMenu3=new JMenu("我的订票");JMenuItem jMenuItem3=new JMenuItem("我的订票");JLabel jLabel1=new JLabel(" 华清池售票系统(游客)");JLabel jLabel2=new JLabel(" 延安大学软件12课程设计");public MainUser(){try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exception exception){exception.printStackTrace();}}private void jbInit() throws Exception{contentPane =(JPanel) getContentPane();contentPane.setLayout(null);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();setLocation((int) (screenSize.width-400)/2,(int)(screenSize.height-340)/2);setSize(new Dimension(400,420));setTitle("华清池售票系统");jMenuItem0.addActionListener(this);jMenuItem1.addActionListener(this);jMenuItem2.addActionListener(this);jMenuItem3.addActionListener(this);setJMenuBar(jMenuBar1);jMenuBar1.add(jMenu0);jMenuBar1.add(jMenu1);jMenuBar1.add(jMenu2);jMenuBar1.add(jMenu3);jMenu0.add(jMenuItem0);jMenu1.add(jMenuItem1);jMenu2.add(jMenuItem2);jMenu3.add(jMenuItem3);contentPane.add(jLabel1);contentPane.add(jLabel2);jLabel1.setFont(new java.awt.Font("黑体",Font.BOLD,20));jLabel1.setBounds(new Rectangle(65,70,275,55));jLabel2.setFont(new java.awt.Font("黑体",Font.BOLD,16));jLabel2.setBounds(new Rectangle(90,150,200,35));}public void actionPerformed(ActionEvent actionEvent){if(actionEvent.getSource()==jMenuItem0){JOptionPane.showMessageDialog(null,"您已成功退出系统!","系统提示",JOptionPane.CANCEL_OPTION);System.exit(0);}if(actionEvent.getSource()==jMenuItem1){BuyTicket AddT=new BuyTicket();this.remove(this.getContentPane());this.setContentPane(AddT);this.setVisible(true);}if(actionEvent.getSource()==jMenuItem2){InquireTicket AddT=new InquireTicket();this.remove(this.getContentPane());this.setContentPane(AddT);this.setVisible(true);}if(actionEvent.getSource()==jMenuItem3){this.setVisible(false);MyTicket AddT=new MyTicket();this.remove(this.getContentPane());this.setContentPane(AddT);this.setVisible(true);}}}import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class ModifyTicket extends JPanel implements ActionListener{Connection con;Statement st;JLabel jLabel1=new JLabel("票单价:");JLabel jLabel2=new JLabel("票日期:");JTextField jTextField1=new JTextField();JTextField jTextField2=new JTextField();JButton jButton1=new JButton("确定修改");public ModifyTicket(){try{jbInit();}catch(Exception exception){exception.printStackTrace();}}private void jbInit() throws Exception{Class.forName("oracle.jdbc.driver.OracleDriver");con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");this.setLayout(null);jLabel1.setBounds(new Rectangle(40,40,64,24));jLabel2.setBounds(new Rectangle(40,100,53,22));jTextField1.setBounds(new Rectangle(102,40,200,30));jTextField2.setBounds(new Rectangle(102,100,200,30));jButton1.setBounds(new Rectangle(120,200,150,32));jButton1.addActionListener(this);this.add(jLabel1);this.add(jTextField1);this.add(jLabel2);this.add(jTextField2);this.add(jButton1);ResultSet rs=null;st=con.createStatement();rs = st.executeQuery("select * from (select rownum num, a.* from TICKET a)where num = (select count(1) from TICKET)");if(rs.next()){jTextField1.setText(rs.getString("TICKET_PRICE"));jTextField2.setText(rs.getString("TICKET_DATE"));}}public void actionPerformed(ActionEvent e){if(e.getSource()==jButton1){try{Class.forName("oracle.jdbc.driver.OracleDriver");Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");ResultSet rs=null;st=con.createStatement();rs = st.executeQuery("select * from TICKET");if(rs.next()){st.executeUpdate("update TICKET set TICKET_DATE='"+jTextField2.getText()+"'");st.executeUpdate("update TICKET set TICKET_PRICE='"+jTextField1.getText()+"'");}JOptionPane.showMessageDialog(this,"修改成功!");jTextField1.setText("");jTextField2.setText("");}catch(Exception ex){JOptionPane.showMessageDialog(this,"修改失败!");ex.printStackTrace();}}}}import javax.swing.*;import javax.swing.table.JTableHeader;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.*;public class MyTicket extends JFrame{private JScrollPane scpDemo;private JTableHeader jth;private JTable tabDemo;private JButton btnShow;private JButton btnShow1;private JButton btnShow2;public MyTicket(){super("华清池售票系统");this.setSize(430,400);this.setLayout(null);this.setLocation(500,180);this.scpDemo = new JScrollPane();this.scpDemo.setBounds(10,45,390,270);this.btnShow = new JButton("我的订单");this.btnShow.setBounds(10,10,390,30);this.btnShow1 = new JButton("返回");this.btnShow1.setBounds(290,320,90,30);JLabel jLabel1=new JLabel("输入票号:");final JTextField jTextField1=new JTextField();jLabel1.setBounds(new Rectangle(20,320,100,30));jTextField1.setBounds(new Rectangle(90,320,70,30));this.btnShow2 = new JButton("退票");this.btnShow2.setBounds(170,320,90,30);add(this.btnShow1);add(this.btnShow2);this.add(jLabel1);this.add(jTextField1);this.setVisible(true);this.btnShow1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){MainUser mu=new MainUser();mu.setVisible(true);dispose();}});this.btnShow2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{Statement st;Class.forName("oracle.jdbc.driver.OracleDriver");Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");st=con.createStatement();ResultSet rs=st.executeQuery("select * from TICKET_ORDER_FORM where TICKET_NUM ='"+jTextField1.getText()+"'");if(rs.next()){String TICKET_NUM=rs.getString("TICKET_NUM");String TICKET_PRICE=rs.getString("TICKET_PRICE");String TICKET_DATE=rs.getString("TICKET_DATE");st.executeUpdate("insert into TICKET values('"+TICKET_NUM+"','"+TICKET_DATE+"','"+TICKET_PRICE+"')");st.executeUpdate("delete from TICKET_ORDER_FORM where TICKET_NUM='"+TICKET_NUM+"'");JOptionPane.showInputDialog(this,"退票成功!");jTextField1.setText("");}else{JOptionPane.showInputDialog(this,"退票失败!");}}catch(ClassNotFoundException cnfe){JOptionPane.showMessageDialog(null,"退票失败!","错误",JOptionPane.ERROR_MESSAGE);}catch(SQLException sqle){JOptionPane.showMessageDialog(null,"退票失败!","错误",JOptionPane.ERROR_MESSAGE);}}});this.btnShow.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent ae){btnShow_ActionPerformed(ae);}});add(this.scpDemo);add(this.btnShow);this.setVisible(true);}public void btnShow_ActionPerformed(ActionEvent ae){try{Class.forName("oracle.jdbc.driver.OracleDriver");Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "system", "123");String sql = "select * from TICKET_ORDER_FORM";PreparedStatement pstm = con.prepareStatement(sql);ResultSet rs = pstm.executeQuery();int count = 0;。
基于JAVA的火车票售票系统毕业论文

届别学号毕业设计(论文)基于JAVA的火车票售票系统姓名系别、专业导师、职称完成时间基于JAVA的火车票售票系统毕业论文目录摘要...................................... 错误!未定义书签。
ABSTRACT................................... 错误!未定义书签。
1概述 ..................................... 错误!未定义书签。
1.1 开发背景.............................................................. 错误!未定义书签。
1.2 系统简介.............................................................. 错误!未定义书签。
1.3 论文的组织结构 (2)2开发技术简介 ........................................................ 错误!未定义书签。
2.1 JSP概述................................................................ 错误!未定义书签。
2.2 Java I/0系统简介................................................. 错误!未定义书签。
2.3 Hibernate框架简介.............................................. 错误!未定义书签。
2.4 SQL Server 2000 简介 (4)2.5 Struts2框架与MVC简介................................... 错误!未定义书签。
3系统需求分析............................ 错误!未定义书签。
模拟售票系统java课程设计

模拟售票系统java课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握Java编程语言的基本语法和编程思想,了解面向对象编程的概念和方法。
技能目标要求学生能够运用Java语言设计并实现一个简单的模拟售票系统,提高学生的编程能力和解决问题的能力。
情感态度价值观目标要求学生在学习过程中培养良好的编程习惯和团队合作精神,增强对计算机科学的兴趣和自信心。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、面向对象编程、集合框架、异常处理和文件操作等。
教学内容将按照教材的章节顺序进行安排和讲解,结合具体的实例和案例进行分析,以便学生能够更好地理解和掌握Java编程语言的应用。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
首先,将采用讲授法,向学生传授Java编程语言的基本语法和概念。
其次,通过讨论法,引导学生进行思考和交流,培养学生的解决问题能力。
同时,将采用案例分析法,通过分析具体的实例和案例,使学生更好地理解和应用Java编程语言。
最后,将学生进行实验,让学生亲自动手编写代码,提高学生的编程能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,将选择和准备适当的教学资源。
教材将是主要的教学资源,我们将选择一本适合学生年级和知识深度的Java编程语言教材。
此外,还将提供参考书籍、多媒体资料和实验设备等,以便学生能够更好地学习和实践Java编程语言。
五、教学评估为了全面反映学生的学习成果,将设计合理的评估方式。
评估方式包括平时表现、作业和考试等。
平时表现将根据学生在课堂上的参与度、提问和回答问题的表现进行评估。
作业将根据学生提交的代码质量和完成情况进行评估。
考试将采用闭卷考试的方式,测试学生对Java编程语言的掌握程度和应用能力。
评估方式将尽量客观、公正,以确保全面准确地评价学生的学习成果。
六、教学安排教学进度将按照教材的章节顺序进行安排,确保在有限的时间内完成教学任务。
java自动售货机程序设计思路

Java自动售货机程序设计思路1. 简介自动售货机是一种能够自动完成商品销售的设备,它能够接受用户选择的商品、接收付款并提供所购商品的功能。
本文将介绍如何使用Java编写一个简单的自动售货机程序,实现基本的购买流程和管理功能。
2. 功能需求为了实现一个完善的自动售货机程序,我们需要考虑以下功能需求:1.用户能够浏览商品列表并选择购买。
2.用户能够输入金额进行支付,并根据支付情况进行相应处理。
3.程序需要根据用户选择和支付情况来计算和找零。
4.程序需要记录每次交易的信息,包括购买商品、支付金额和找零等。
5.程序需要提供管理员功能,包括添加新商品、修改商品信息和查看销售统计等。
3. 设计思路3.1 商品类设计我们需要设计一个商品类来表示售货机中的商品。
该类应包含以下属性:•商品名称•商品价格•商品数量(库存)该类还应提供以下方法:•获取商品名称•获取商品价格•获取商品数量•减少商品数量(用于购买时减少库存)3.2 自动售货机类设计接下来,我们设计一个自动售货机类来管理售货机的整个流程。
该类应包含以下属性:•商品列表(包含多个商品对象)•用户选择的商品•用户支付金额•交易记录该类还应提供以下方法:•初始化商品列表•显示商品列表•用户选择商品•用户输入支付金额•处理支付情况(判断是否足够支付)•计算找零金额•更新商品库存数量•添加交易记录3.3 管理员功能设计为了提供管理员功能,我们可以在自动售货机类中添加一些额外的方法:•添加新商品:管理员可以输入新商品的名称、价格和数量,然后将其添加到商品列表中。
•修改商品信息:管理员可以选择要修改的商品,并输入新的价格和数量进行修改。
•查看销售统计:管理员可以查看每次交易的信息,包括购买商品、支付金额和找零等。
4. 代码实现下面是一个简单的Java自动售货机程序的代码示例:import java.util.ArrayList;import java.util.List;import java.util.Scanner;class Product {private String name;private double price;private int quantity;public Product(String name, double price, int quantity) { = name;this.price = price;this.quantity = quantity;}public String getName() {return name;}public double getPrice() {return price;}public int getQuantity() {return quantity;}public void decreaseQuantity(int amount) {quantity -= amount;}}class VendingMachine {private List<Product> products;private Product selectedProduct;private double payment;private List<String> transactionHistory;public VendingMachine() {products = new ArrayList<>();transactionHistory = new ArrayList<>();// 初始化商品列表products.add(new Product("Coke", 1.5, 10));products.add(new Product("Chips", 2.0, 5));products.add(new Product("Water", 1.0, 8));}public void displayProductList() {System.out.println("Available products:");for (int i = 0; i < products.size(); i++) {Product product = products.get(i);System.out.println(i + ". " + product.getName() + " - $" + product. getPrice());}}public void selectProduct(int index) {if (index >= 0 && index < products.size()) {selectedProduct = products.get(index);System.out.println("Selected product: " + selectedProduct.getName ());} else {System.out.println("Invalid product selection.");}}public void enterPayment(double amount) {payment += amount;System.out.println("Payment entered: $" + payment);}public void processPayment() {if (selectedProduct != null) {if (payment >= selectedProduct.getPrice()) {double change = payment - selectedProduct.getPrice();selectedProduct.decreaseQuantity(1);transactionHistory.add("Purchased: " + selectedProduct.getName () +" | Payment: $" + payment +" | Change: $" + change);System.out.println("Thank you for your purchase!");System.out.println("Change: $" + change);} else {System.out.println("Insufficient payment.");}} else {System.out.println("No product selected.");}}public void addNewProduct(String name, double price, int quantity) {products.add(new Product(name, price, quantity));System.out.println("New product added: " + name);}public void modifyProduct(int index, double price, int quantity) { if (index >= 0 && index < products.size()) {Product product = products.get(index);product.price = price;product.quantity = quantity;System.out.println("Product modified: " + product.getName());} else {System.out.println("Invalid product selection.");}}public void viewTransactionHistory() {System.out.println("Transaction history:");for (String transaction : transactionHistory) {System.out.println(transaction);}}}public class Main {public static void main(String[] args) {VendingMachine vendingMachine = new VendingMachine();Scanner scanner = new Scanner(System.in);while (true) {System.out.println("\n===== Vending Machine =====");vendingMachine.displayProductList();System.out.print("\nEnter the product number to select (or -1 to e xit): ");int index = scanner.nextInt();if (index == -1) break;vendingMachine.selectProduct(index);System.out.print("Enter payment amount: $");double payment = scanner.nextDouble();vendingMachine.enterPayment(payment);vendingMachine.processPayment();}scanner.close();}}5. 总结通过以上设计思路和代码实现,我们成功地创建了一个简单的Java自动售货机程序。
java抢票实现思路

java抢票实现思路Java抢票实现思路随着互联网技术的不断发展,越来越多的人选择在网上购买车票、机票等各种票务。
但是由于网络流量大,服务器压力大,很容易出现抢票失败的情况。
而对于一些重要的节假日或热门演出等活动,抢票更是难上加难。
为了解决这个问题,我们可以使用Java编写一个抢票程序来实现自动抢票。
1. 抢票原理在介绍Java实现抢票之前,我们先来了解一下抢票的原理。
当我们在网站上进行购买时,其实是向服务器发送了一个请求,并且服务器会返回相应的信息。
而在高峰期时,服务器会有很多请求同时到达,导致响应速度变慢或者直接崩溃。
因此,在抢票时需要尽可能地减少请求次数和响应时间。
2. Java实现思路2.1 登录首先需要登录到购买网站的账号中去,在Java中可以使用HttpURLConnection模拟登录过程,并保存登录后得到的cookie信息。
2.2 获取车次信息获取车次信息包括起点站、终点站、出发时间等信息。
这些信息可以通过解析购买页面得到。
2.3 查询余票数量查询余票数量需要向服务器发送一个查询请求,获取到余票数量后,可以根据自己的需求决定是否购买。
2.4 自动抢票如果需要抢票,就需要向服务器发送一个购买请求。
在高峰期时,服务器可能会拒绝请求或者返回错误信息。
因此,在自动抢票时需要设置一个重试机制,即在失败后多次尝试购买。
2.5 支付当购买成功后,还需要进行支付。
支付方式有很多种,可以使用第三方支付平台或者直接使用银行卡等方式进行支付。
3. Java实现技术Java实现抢票程序可以使用多种技术来完成。
比较常用的有以下几种:3.1 HttpClientHttpClient是Apache开源组织提供的Java HTTP客户端工具包,它支持HTTP协议的各种方法和请求头信息,并且具有连接池、SSL、Cookie管理等功能。
通过HttpClient可以模拟登录、发送HTTP请求等操作。
3.2 JsoupJsoup是一款Java HTML解析器,它可以从HTML文件中提取数据、修改HTML文档内容,并且支持CSS选择器等功能。
基于Flex和Java框架技术的影院网上售票系统

称 、 映时间、 放 放映厅 、 票价等 ; 订单表包括订单号 、 订单用户 、 放 1 系统技术架构设计 、 映号 以及座位号等。 系统表现层采用 Fe l x开发技术 , 代码 编译成为 S WF文件 , 5 系统 界 面 设 计 、 客户端只需一次加载即可体验丰富 的交互功能 [ 1 1 。业务层采用 系统采用 Fe 组件快速有效开发应用 界面 , Fe lx 而 l x页面设 Jv 主 流框 架技术 S r g Hb ra , aa p n 和 ie t 这样可 以很好 地将业 务 计使用 MX i ne ML语言 , 界面展示效果非常优秀 。界面设计 的主 其 层与数据库层分开管理 。层 间链接采用 的是 We e i 技术 , 要页面包括 : 台首页 、 b rc Sve 平 搜索页 面、 订票页 面、 片管理 页面 、 影 订
开 发平 台 : n o s 00Sre, db l ule 3 My — Wi w 0 e rA o e e B i r , E d 2 v Fx d c pe .,o a 6 , y Q l s 6T mct . M S L数据库。 i 6 0 发布平 台: n o s 0 0Sre,o ct ., S L数据库 , Widw 0 e rT m a 6 MyQ 2 v 0
数据库则采 用 MyQ 。 良好 的分层设计 可 以使系 SL 面 对 全 球性 的 电影 观看 热 潮 ,加 上 大 众 对 视 觉 效 果 和 环 境 应用服务器 , 统 层 次 清 晰 , 于 系统 维 护 和 升 级 。 便 的需求 ,电影院独有 的互 动效果和场 内气氛吸引 了越来越多 的 观众 。传统的影 院售 票采用人工售票 的方法 ,该方法不仅效率 低, 而且容易 出错 。为 了满足影院对 售票业务进行 高效 的管理 ,
电脑彩票销售与管理系统(java)

毕业设计(论文)开题报告
专业计算机科学与技术
学生
学号
班号
指导教师
开题日期2017年9月16日
2017 年月日
说明
一、开题报告应包括下列主要内容:
1.通过学生对课题题目和课题研究现状、选题的目的和意义论述,判断是否已充分理解毕业设计(论文)的内容和要求。
2.进度计划是否切实可行。
3.是否具备毕业设计所要求的基础条件。
4.预计研究过程中可能遇到的困难和问题,以及解决的措施。
5.主要参考文献。
二、如学生首次开题报告未通过,需在一周内再进行一次。
三、开题报告要求学生认真填写,由开题答辩组和指导教师填写意见、签字后,统
一交所在分院保存,以备检查。
指导教师评语:
指导教师:年月日
开题答辩组审查意见:
组长:组员:
年月日。
火车售票系统的设计与实现

火车售票系统的设计与实现一、本文概述本文旨在全面探讨火车售票系统的设计与实现。
火车售票系统作为现代交通运输领域的重要组成部分,其高效、便捷的特性对于提升旅客出行体验、优化铁路运输资源配置具有重要意义。
随着信息技术的快速发展,传统的火车售票方式已经难以满足日益增长的出行需求和复杂多变的运营环境。
开发一套功能完善、性能稳定的火车售票系统成为当务之急。
本文首先将对火车售票系统的基本需求和功能进行详细介绍,包括用户注册与登录、车次查询、座位预订、在线支付、订单管理等功能模块。
随后,将深入探讨火车售票系统的架构设计,包括前后端分离的设计思想、数据库的选择与优化、系统的安全性与可靠性保障等方面。
在系统设计部分,将重点分析系统的数据库设计、接口设计以及关键业务逻辑的实现。
在实现部分,将详细介绍系统的开发环境、开发工具以及具体的实现过程,包括前端页面的开发、后端服务的搭建、数据库的配置等。
本文将对火车售票系统的测试与优化进行阐述,包括单元测试、集成测试、性能测试等方面的内容。
通过对系统的全面测试,确保系统的稳定性和可用性。
根据测试结果对系统进行优化和改进,提升系统的性能和用户体验。
本文旨在为火车售票系统的设计与实现提供一套完整的解决方案,为相关领域的开发人员提供有益的参考和借鉴。
二、系统需求分析火车售票系统是一个复杂的信息管理系统,它涉及到火车票的销售、查询、退换票、座位管理等多个环节。
为了满足广大乘客和火车站的实际需求,该系统需要具备以下几个方面的功能:票务管理:系统需要能够实时处理票务信息,包括票价的设定、票量的统计、票务的预订和销售等。
系统还需要能够处理各种票务变更,如退票、改签等。
座位管理:火车售票系统需要能够管理火车的座位信息,确保每个座位的状态(如已售、未售、预留等)能够实时更新,并提供座位查询功能。
查询功能:乘客和工作人员应能够方便地查询火车时刻、票价、座位等信息。
系统需要提供多种查询方式,如按车次、出发地、目的地、时间等进行查询。
火车售票系统完整代码

package com.yue;import java.awt.Color;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextArea;import javax.swing.JTextField;public class BuyPanel extends JPanel {StringBuffer sb = new StringBuffer();private boolean flag = false;JTextArea jtArea = new JTextArea(10, 78);JLabel buyLabel = new JLabel("订票");JTextField fId = new JTextField(7);JTextField ftid = new JTextField(7);JTextField fche = new JTextField(7);JTextField fzhangshu = new JTextField(7);JTextField fbodyId = new JTextField(7);JPasswordField jpField = new JPasswordField(7);public JPanel getBuypn() {JPanel pan = new JPanel();GridBagLayout layout = new GridBagLayout();pan.setLayout(layout);GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 100, 100, GridBagConstraints.NONE, GridBagConstraints.WEST);pan.add(buyLabel, con);con = getGridBagConstraints(0, 2, 1, 1, 100, 100,GridBagConstraints.NONE, GridBagConstraints.WEST);pan.add(new pan3(), con);con = getGridBagConstraints(0, 3, 1, 1, 100, 100,GridBagConstraints.NONE, GridBagConstraints.WEST);pan.add(new pan4(), con);con = getGridBagConstraints(0, 4, 1, 1, 100, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);pan.add(new pan5(), con);this.setLocation(270, 150);this.add(pan);return pan;}/*** 定义下面购票操作区面板pan3** @author Administrator**/class pan3 extends JPanel {JLabel lId = new JLabel(" 车票号码 ");JLabel ltid = new JLabel(" 车票号码 ");JLabel che = new JLabel(" 车次 ");JLabel lbodyId = new JLabel(" 身份证号 ");JLabel password = new JLabel(" 密码 ");JLabel lzhangshu = new JLabel(" 所需张数 ");JLabel la1 = new JLabel(" ");JLabel la2 = new JLabel(" ");JButton sureButton = new JButton("查询确认");JButton buyButton = new JButton("确认购票");public pan3() {buyButton.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {UpdateUser();if (flag==true){UpdateTrain();System.out.println("hjkasfhjkaf");}}});sureButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {select();}});GridBagLayout layout = new GridBagLayout();this.setLayout(layout);GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 0, 100, GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(lId, con);con = getGridBagConstraints(1, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(fId, con);con = getGridBagConstraints(8, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(la2, con);con = getGridBagConstraints(9, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(sureButton, con);con = getGridBagConstraints(0, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(ltid, con);con = getGridBagConstraints(1, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(ftid, con);con = getGridBagConstraints(2, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(che, con);con = getGridBagConstraints(3, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(fche, con);con = getGridBagConstraints(4, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(lbodyId, con);con = getGridBagConstraints(5, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(fbodyId, con);con = getGridBagConstraints(0, 2, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(password, con);con = getGridBagConstraints(1, 2, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(jpField, con);con = getGridBagConstraints(2, 2, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(lzhangshu, con);con = getGridBagConstraints(3, 2, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(fzhangshu, con);con = getGridBagConstraints(8, 2, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(la1, con);con = getGridBagConstraints(9, 2, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(buyButton, con);this.setBorder(BorderFactory.createTitledBorder("订票操作区"));}}/*** 定义下面一个JList用于显示车票的所有信息面板pan4** @author Administrator**/class pan4 extends JPanel {JButton btId = new JButton("车票号码");JButton bt1 = new JButton("起点站");JButton bt2 = new JButton("终点站");JButton bt3 = new JButton("车次");JButton bt4 = new JButton("发车时间");JButton bt5 = new JButton("到达时间");JButton bt6 = new JButton("座位类型");JButton bt7 = new JButton("发车日期");JButton bt8 = new JButton("剩余票数");JButton bt9 = new JButton("车票价格");public pan4() {this.setLayout(new GridBagLayout());GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 0, 100, GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(btId, con);con = getGridBagConstraints(1, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt1, con);con = getGridBagConstraints(2, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt2, con);con = getGridBagConstraints(3, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt3, con);con = getGridBagConstraints(4, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt4, con);con = getGridBagConstraints(5, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt5, con);con = getGridBagConstraints(6, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt6, con);con = getGridBagConstraints(7, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt7, con);con = getGridBagConstraints(8, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt8, con);con = getGridBagConstraints(9, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt9, con);con = getGridBagConstraints(0, 1, 11, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(jtArea, con);jtArea.setBackground(Color.GREEN);}}/*** 定义最下面的按钮面板pan5** @author Administrator**/class pan5 extends JPanel {JButton bt1 = new JButton("退出登录");JLabel lab1 = new JLabel(" ");public pan5() {GridBagLayout layout = new GridBagLayout();this.setLayout(layout);GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 0, 100, GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt1, con);con = getGridBagConstraints(1, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(lab1, con);bt1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});}}/*** 放回一个网格包约束** @param x* @param y* @param width* @param heigh* @param weighx* @param weighy* @param fill* @param anchor* @return*/private GridBagConstraints getGridBagConstraints(int x, int y, int width, int heigh, int weighx, int weighy, int fill, int anchor) { GridBagConstraints con = new GridBagConstraints();con.gridx = x;con.gridy = y;con.gridwidth = width;con.gridheight = heigh;con.weightx = weighx;con.weighty = weighy;con.fill = fill;con.anchor = anchor;return con;}/*** 按车票号码搜索所有的车票信息** @throws SQLException*/private void select() {Connection conn = null;Statement stmt = null;ResultSet ticket = null;try {conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "store", "store");} catch (SQLException e1) {e1.printStackTrace();}try {stmt = conn.createStatement();String text = "select * from train_table " + "where tid=" + "'"+ fId.getText() + "'";ticket = stmt.executeQuery(text);while (ticket.next()) {String starter = ticket.getString("starter");String reacher = ticket.getString("reacher");String ticketNumber = ticket.getString("ticketNumber");String startTime = ticket.getString("startTime");String endTime = ticket.getString("endTime");String seatIdNumber = ticket.getString("seatIdNumber");String busDate = ticket.getString("busDate");int ticketNum = ticket.getInt("ticketNum");double price = ticket.getDouble("price");sb.append(" " + fId.getText() + "\t"+ " " + starter + "\t"+ " " + reacher+ "\t"+ " " + ticketNumber + "\t" + startTime + "\t"+ endTime + "\t" + seatIdNumber + "\t" + busDate + "\t"+ ticketNum + "\t" + price + " " + "\n");}jtArea.setText(sb.toString());if (sb.length() > 0) {sb.delete(1, sb.length());} else {JOptionPane.showMessageDialog(new TestFrame(), "无此车!");}} catch (SQLException e) {} finally {if (ticket != null) {try {ticket.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}/*** 订票时更新数据库中的车票表*/private void UpdateTrain() {String tId=ftid.getText();int num=0;if (fzhangshu.getText().length()>0){num=Integer.parseInt(fzhangshu.getText());}Connection conn = Getgbc.getconnect();CallableStatement cst = null;try {conn.setAutoCommit(false);cst = conn.prepareCall("call train_proc (?,?)");cst.setString(1, tId);cst.setInt(2, num);cst.execute();mit();} catch (SQLException e1) {try {conn.rollback();JOptionPane.showMessageDialog(new TestFrame(), "客户订票失败!");} catch (SQLException e2) {JOptionPane.showMessageDialog(new TestFrame(), "客户订票失败!");}} finally {if (cst != null) {try {cst.close();} catch (SQLException e1) {e1.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e1) {e1.printStackTrace();}}}}/*** 订票时更新数据库中的用户表*/private void UpdateUser() {String tId=ftid.getText();String bId=fbodyId.getText();String cID=fche.getText();String pwd=String.valueOf(jpField.getPassword());int num=0;if((bId.equals(EnterFrame.ID))&&(pwd.equals(EnterFrame.password))){ if(fzhangshu.getText().length()>0){num=Integer.parseInt(fzhangshu.getText());}Connection conn = Getgbc.getconnect();Statement cst = null;try {cst = conn.createStatement();cst.executeUpdate("insert into order_table(tid,id_number,t_num,trainsum)"+ " values('"+ tId+ "','"+ bId+ "','"+ cID + "','"+num+"')");JOptionPane.showMessageDialog(new TestFrame(), "客户订票成功!");flag=true;} catch (SQLException e1) {JOptionPane.showMessageDialog(new TestFrame(), "订票失败!");flag=false;} finally {if (cst != null) {try {cst.close();} catch (SQLException e1) {e1.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e1) {e1.printStackTrace();}}}}else{JOptionPane.showMessageDialog(new TestFrame(), "您的身份证或密码有误!请查证后再订票");}}}package com.yue;import java.awt.Color;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class CheckPanel extends JPanel {StringBuffer sb = new StringBuffer();JTextField trainField = new JTextField(9);JTextField dateField = new JTextField(9);JTextField stationField = new JTextField(9);JTextField zhiField = new JTextField(9);JTextArea jtArea = new JTextArea(10, 80);JLabel checkLabel = new JLabel("查询");public JPanel getCheckpn() {JPanel pan = new JPanel();GridBagLayout layout = new GridBagLayout();pan.setLayout(layout);GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 100, 100,GridBagConstraints.NONE, GridBagConstraints.WEST);pan.add(checkLabel, con);con = getGridBagConstraints(0, 1, 1, 1, 100, 100,GridBagConstraints.NONE, GridBagConstraints.WEST);pan.add(new pan2(), con);con = getGridBagConstraints(0, 3, 1, 1, 100, 100,GridBagConstraints.NONE, GridBagConstraints.WEST);pan.add(new pan4(), con);con = getGridBagConstraints(0, 4, 1, 1, 100, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);pan.add(new pan5(), con);this.setLocation(270, 150);this.add(pan);return pan;}/*** 定义上部查询区面pan2** @author Administrator**/class pan2 extends JPanel {JLabel trainLabel = new JLabel(" 车次 ");JLabel dateLabel = new JLabel(" 日期 ");JLabel stationLabel = new JLabel(" 起点站 ");JLabel zhiLabel = new JLabel(" 终点站 ");JLabel l1 = new JLabel(" ");JLabel l2 = new JLabel(" ");JButton checkButton = new JButton("查询");JButton flushButton = new JButton("清空");JPanel panel1 = new JPanel();JPanel panel2 = new JPanel();JTextArea area = new JTextArea();public pan2() {flushButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {trainField.setText(null);stationField.setText(null);zhiField.setText(null);dateField.setText(null);jtArea.setText(null);}});checkButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (dateField.getText().trim().length() > 0) {if (trainField.getText().trim().length() > 0|| stationField.getText().trim().length() > 0|| zhiField.getText().trim().length() > 0) {jtArea.setText(null);JOptionPane.showMessageDialog(new TestFrame(),"输入有误,请检查输入位置");} else {try {dateSelect();} catch (SQLException e1) {e1.printStackTrace();}}} else if (trainField.getText().trim().length() > 0) { if (dateField.getText().trim().length() > 0|| stationField.getText().trim().length() > 0|| zhiField.getText().trim().length() > 0) {jtArea.setText(null);JOptionPane.showMessageDialog(new TestFrame(),"输入有误,请检查输入位置");} else {try {idSelect();} catch (SQLException e1) {e1.printStackTrace();}}} else if (stationField.getText().trim().length() > 0&& zhiField.getText().trim().length() > 0) {if (dateField.getText().trim().length() > 0|| trainField.getText().trim().length() > 0) { jtArea.setText(null);JOptionPane.showMessageDialog(new TestFrame(),"输入有误,请检查输入位置");} else {try {stationSelect();} catch (SQLException e1) {e1.printStackTrace();}}} else if (dateField.getText().trim().length() <= 0&& stationField.getText().trim().length() <= 0&& zhiField.getText().trim().length() <= 0) {if (dateField.getText().trim().length() > 0|| stationField.getText().trim().length() > 0|| zhiField.getText().trim().length() > 0) {jtArea.setText(null);JOptionPane.showMessageDialog(new TestFrame(),"输入有误,请检查输入位置");} else {try {allSelect();} catch (SQLException e1) {e1.printStackTrace();}}}}});JPanel panel3 = new JPanel(new GridBagLayout());panel1.setBorder(BorderFactory.createTitledBorder("查询区"));panel2.setBorder(BorderFactory.createTitledBorder("售票注意事项"));area.setText("每人每次最多可够买十张火车票,超过十张火车票数的" + "\n"+ "请一定要出示您的相关的证件,一旦经过售票员查" + "\n" + "询核实并且同意后方可购买");panel2.add(area);GridBagLayout layout = new GridBagLayout();panel1.setLayout(layout);GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(trainLabel, con);con = getGridBagConstraints(1, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(trainField, con);con = getGridBagConstraints(2, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(dateLabel, con);con = getGridBagConstraints(3, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(dateField, con);con = getGridBagConstraints(4, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(l1, con);con = getGridBagConstraints(5, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(flushButton, con);con = getGridBagConstraints(0, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(stationLabel, con);con = getGridBagConstraints(1, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(stationField, con);con = getGridBagConstraints(2, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(zhiLabel, con);con = getGridBagConstraints(3, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(zhiField, con);con = getGridBagConstraints(4, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(l2, con);con = getGridBagConstraints(5, 1, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel1.add(checkButton, con);con = getGridBagConstraints(0, 0, 6, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.WEST);panel3.add(panel1, con);con = getGridBagConstraints(6, 0, 2, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);panel3.add(panel2, con);this.add(panel3);}}/*** 定义下面一个JList用于显示车票的所有信息面板pan4** @author Administrator**/class pan4 extends JPanel {JButton btId = new JButton("车票号码");JButton bt1 = new JButton("起点站");JButton bt2 = new JButton("终点站");JButton bt3 = new JButton("车次");JButton bt4 = new JButton("发车时间");JButton bt5 = new JButton("到达时间");JButton bt6 = new JButton("座位类型");JButton bt7 = new JButton("发车日期");JButton bt8 = new JButton("剩余票数");JButton bt9 = new JButton("车票价格");public pan4() {this.setLayout(new GridBagLayout());GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 0, 100, GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(btId, con);con = getGridBagConstraints(1, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt1, con);con = getGridBagConstraints(2, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt2, con);con = getGridBagConstraints(3, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt3, con);con = getGridBagConstraints(4, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt4, con);con = getGridBagConstraints(5, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt5, con);con = getGridBagConstraints(6, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt6, con);con = getGridBagConstraints(7, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt7, con);con = getGridBagConstraints(8, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt8, con);con = getGridBagConstraints(9, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt9, con);con = getGridBagConstraints(0, 1, 11, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(jtArea, con);jtArea.setBackground(Color.CYAN);}}/*** 定义最下面的按钮面板pan5** @author Administrator**/class pan5 extends JPanel {JButton bt1 = new JButton("退出登录");JLabel lab1 = new JLabel(" ");public pan5() {bt1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});GridBagLayout layout = new GridBagLayout();this.setLayout(layout);GridBagConstraints con = getGridBagConstraints(0, 0, 1, 1, 0, 100, GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(bt1, con);con = getGridBagConstraints(1, 0, 1, 1, 0, 100,GridBagConstraints.NONE, GridBagConstraints.EAST);this.add(lab1, con);}}/*** 放回一个网格包约束** @param x* @param y* @param width* @param heigh* @param weighx* @param weighy* @param fill* @param anchor* @return*/private GridBagConstraints getGridBagConstraints(int x, int y, int width, int heigh, int weighx, int weighy, int fill, int anchor) { GridBagConstraints con = new GridBagConstraints();con.gridx = x;con.gridy = y;con.gridwidth = width;con.gridheight = heigh;con.weightx = weighx;con.weighty = weighy;con.fill = fill;con.anchor = anchor;return con;}/*** 按初始站至终点站搜索车票** @throws SQLException*/private void stationSelect() throws SQLException {Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "store", "store");Statement stmt = conn.createStatement();String sqlText = "select tid,starter,reacher,ticketNumber,startTime,endTime,seatIdNumber,busDate,ticketN um,price from train_table where starter='"+ stationField.getText()+ "' and reacher='"+ zhiField.getText() + "'";ResultSet ticket = stmt.executeQuery(sqlText);while (ticket.next()) {int tid = ticket.getInt("tid");String starter = ticket.getString("starter");String reacher = ticket.getString("reacher");String ticketNumber = ticket.getString("ticketNumber");String startTime = ticket.getString("startTime");String endTime = ticket.getString("endTime");String seatIdNumber = ticket.getString("seatIdNumber");String busDate = ticket.getString("busDate");int ticketNum = ticket.getInt("ticketNum");double price = ticket.getDouble("price");sb.append(" " + tid + "\t" + starter + "\t" + reacher + "\t"+ ticketNumber + "\t" + startTime + "\t" + endTime + "\t"+ seatIdNumber + "\t" + busDate + "\t" + " " + ticketNum + "\t"+ " "+ price + " " + "\n");}jtArea.setText(sb.toString());if (sb.length() > 0) {sb.delete(1, sb.length());}else {JOptionPane.showMessageDialog(new TestFrame(), "无此车!");}ticket.close();stmt.close();conn.close();}/*** 搜索所有的车票信息** @throws SQLException*/private void allSelect() throws SQLException {Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "store", "store");Statement stmt = conn.createStatement();String text = "select * from train_table ";ResultSet ticket = stmt.executeQuery(text);while (ticket.next()) {int tid = ticket.getInt("tid");String starter = ticket.getString("starter");String reacher = ticket.getString("reacher");String ticketNumber = ticket.getString("ticketNumber");String startTime = ticket.getString("startTime");String endTime = ticket.getString("endTime");String seatIdNumber = ticket.getString("seatIdNumber");String busDate = ticket.getString("busDate");int ticketNum = ticket.getInt("ticketNum");double price = ticket.getDouble("price");sb.append(" " + tid + "\t" + starter + "\t" + reacher + "\t"+ ticketNumber + "\t" + startTime + "\t" + endTime + "\t"+ seatIdNumber + "\t" + busDate + "\t" + " "+ ticketNum + "\t"+ " "+ price + " " + "\n");}jtArea.setText(sb.toString());if (sb.length() > 0) {sb.delete(1, sb.length());}else {JOptionPane.showMessageDialog(new TestFrame(), "今天没车!");}ticket.close();stmt.close();conn.close();}/*** 按日期搜索所有的车票信息** @throws SQLException*/private void dateSelect() throws SQLException {Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "store", "store");Statement stmt = conn.createStatement();String text = "select * from train_table where busDate='"+ dateField.getText() + "'";ResultSet ticket = stmt.executeQuery(text);while (ticket.next()) {int tid = ticket.getInt("tid");String starter = ticket.getString("starter");String reacher = ticket.getString("reacher");String ticketNumber = ticket.getString("ticketNumber");String startTime = ticket.getString("startTime");String endTime = ticket.getString("endTime");String seatIdNumber = ticket.getString("seatIdNumber");String busDate = ticket.getString("busDate");int ticketNum = ticket.getInt("ticketNum");double price = ticket.getDouble("price");sb.append(" " + tid + "\t" + starter + "\t" + reacher + "\t"+ ticketNumber + "\t" + startTime + "\t" + endTime + "\t"+ seatIdNumber + "\t" + busDate + "\t" + " "+ ticketNum + "\t"+ " "+ price + " " + "\n");}jtArea.setText(sb.toString());if (sb.length() > 0) {sb.delete(1, sb.length());}else {JOptionPane.showMessageDialog(new TestFrame(), "没车!");}ticket.close();stmt.close();conn.close();}/*** 按车次搜索所有的车票信息*。
地铁售票系统实训报告

#### 一、实训背景随着我国城市化进程的加快,地铁作为一种高效、便捷的城市公共交通工具,得到了广泛的应用。
为了提高地铁售票的效率,减少人工操作的误差,地铁售票系统应运而生。
本实训旨在通过模拟地铁售票系统的实际操作,提高学生对地铁售票系统运行原理及操作流程的理解和掌握。
#### 二、实训目的1. 熟悉地铁售票系统的基本架构和功能模块;2. 掌握地铁售票系统的操作流程,提高实际操作能力;3. 了解地铁售票系统的维护与管理方法;4. 提高学生对城市轨道交通行业的发展趋势的认识。
#### 三、实训内容1. 地铁售票系统概述本实训所使用的地铁售票系统是基于JAVA语言,结合SpringBoot框架与Vue 框架以及MYSQL数据库设计并实现的。
系统主要包括个人中心、地铁线路管理、站点管理、购票信息管理、乘坐管理、用户信息管理等多个模块。
2. 系统功能模块(1)个人中心:用户可在此模块查看个人信息、修改密码、绑定手机号等;(2)地铁线路管理:管理员可在此模块添加、修改、删除地铁线路信息;(3)站点管理:管理员可在此模块添加、修改、删除地铁站点信息;(4)购票信息管理:用户可在此模块查询、购买车票,查看购票记录;(5)乘坐管理:用户可在此模块查看乘车信息,如乘车路线、座位等信息;(6)用户信息管理:管理员可在此模块添加、修改、删除用户信息。
3. 系统操作流程(1)用户登录:用户需在个人中心进行登录,登录后才能进行购票等操作;(2)查询车票:用户在购票信息管理模块查询所需车票信息;(3)购买车票:用户根据查询结果,选择合适的车票进行购买;(4)支付车票:用户完成支付后,系统生成电子车票;(5)乘车:用户凭电子车票通过检票闸机进入车厢。
4. 系统维护与管理(1)系统维护:定期对系统进行备份,防止数据丢失;(2)故障处理:发现系统故障时,及时进行修复;(3)数据安全:确保用户信息、交易记录等数据的安全。
#### 四、实训过程1. 学习地铁售票系统的基本架构和功能模块;2. 模拟实际操作,熟悉操作流程;3. 针对系统中的各个模块进行测试,确保系统稳定运行;4. 分析实训过程中遇到的问题,总结经验教训。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*项目:用多线程设计一个模拟火车站售票大厅的工作情形。
问题描述:火车站有许多售票窗口,有些开放,有些不开放。
顾客进入火车站售票厅后,到某个售票窗口排队等候,排到了就办理业务,然后离去。
如图2.1所示。
*//**共有五个类:*SimulateRailwayStation:具体运行主类;*RailwayStation:火车站售票大厅类*Agent类:代表火车站售票窗口类;*Customer类:顾客类;*List类:存储类*/import java.util.Date;import java.awt.*;import java.awt.event.*;public class SimulateRailwayStation extends Frame implements ActionListener{//预设火车站售票大厅有10个售票窗口protected static final int NUM_AGANTS=10;//预设目前正在售票的窗口为6个protected static final int NUM_INITIAL_AGANTS=6;//设置每个窗口办理售票业务的时间protected static final int BUSINESS_DELAY=6000;//设置有10辆火车的座位可以出售protected static final int MAX_TRAIN_NUM=10;//设置每个窗口从一个顾客完成到下一个顾客开始的时间间隔protected static final int MAX_NO_CUSTOMERS=200;//定义按钮,手动添加顾客。
private Button addcus=new Button("添加顾客");//定义按钮,模拟顾客自己离开private Button delcus=new Button("顾客离去");//定义按钮,增加售票窗口private Button addagent=new Button("增加售票窗口");//定义按钮,关闭售票窗口private Button delagent=new Button("关闭售票窗口");//10辆火车班次的信息protected static String[] train_num={"南京->北京,46次","南京->上海,34次","南京->福州,231次","南京->杭州,65次","南京->武汉,112次","南京->成都,77次","南京->天津,21次","南京->徐州,134次","南京->乌鲁目齐,335次","南京->合肥,456次"}; //与上面的信息对应的每辆火车的票务信息protected static int[] tickets={50,70,50,50,50,120,60,100,50,50};//实例化火车站售票大厅类private RailwayStation railwaystation=new RailwayStation();//建立窗体适配器,能关闭窗口private class WindowCloser extends WindowAdapter{public void windowClosing(WindowEvent we){railwaystation.stop();System.exit(0);}}//构造方法,完成界面初始化public SimulateRailwayStation(){super("Simulation RailwayStation");//设置面板Panel buttons=new Panel();buttons.setLayout(new FlowLayout());//在面板中添加按钮buttons.add(addcus);buttons.add(delcus);buttons.add(addagent);buttons.add(delagent);//对按钮设置监听addcus.addActionListener(this);delcus.addActionListener(this);addagent.addActionListener(this);delagent.addActionListener(this);//对窗体适配器设置监听addWindowListener(new WindowCloser());setLayout(new BorderLayout());add("North",railwaystation);add("South",buttons);setSize(500,200);validate();pack();show();//调用火车站售票大厅类的start()方法,开始售票工作railwaystation.start();}public void actionPerformed(ActionEvent ae){if(ae.getSource()==addcus){//新增顾客railwaystation.generateCustomer();}else if(ae.getSource()==delcus){}else if(ae.getSource()==addagent){//增加售票窗口railwaystation.addAgent();}else if(ae.getSource()==delagent){//关闭服务窗口railwaystation.retireAgent();}}public static void main(String[] args){SimulateRailwayStation smlt=new SimulateRailwayStation();}}/* 火车站售票大厅类 */class RailwayStation extends Panel implements Runnable{//定义售票窗口数组Agent[]protected Agent[] agent=new Agent[SimulateRailwayStation.NUM_AGANTS];protected Label[] labelAgent=new Label[SimulateRailwayStation.NUM_AGANTS]; protected Label labelQueue=new Label("正在等待的顾客数:0");protected Label labelServed=new Label("已经服务的顾客数:0");//定义可以进行售票服务的窗口protected int numAgents=SimulateRailwayStation.NUM_INITIAL_AGANTS;//定义存放已服务过的顾客数public static int numCustomerServered=0;private Thread thread=null;public RailwayStation(){setup("各窗口实时状态显示:");}//显示各售票窗口的实时工作状态private void setup(String title){//定义售票窗口的工作状态面板Panel agentPanel=new Panel();agentPanel.setLayout(new GridLayout(SimulateRailwayStation.NUM_AGANTS,1)); //各售票窗口的工作状态for(int i=0;i<SimulateRailwayStation.NUM_AGANTS;i++){if(i<numAgents){labelAgent[i]=new Label("窗口"+(i+1)+":空闲中...");agentPanel.add(labelAgent[i]);//实例化售票窗口agent[i]=new Agent(i);//售票窗口开始售票服务agent[i].start();}else{labelAgent[i]=new Label("窗口"+(i+1)+":暂停服务!");agentPanel.add(labelAgent[i]);}}//定义顾客候票情况面板Panel otherPanel=new Panel();otherPanel.setLayout(new GridLayout(2,1));otherPanel.add(labelQueue);otherPanel.add(labelServed);setLayout(new BorderLayout());//显示各售票窗口的工作状态安排在下部add("South",agentPanel);//显示顾客候票状况安排在中部add("Center",otherPanel);//显示调用本方法 setup()的参数安排在上部add("North",new Label(title));}//开始工作public void start(){if(thread==null){thread =new Thread(this);//启动线程thread.start();}}//线程,调用显示实时售票状况的updateDisplay()方法public void run(){while (true){this.updateDisplay();}}//实时处理售票的状况public void updateDisplay(){//定义在本窗口等候的顾客数int totalSize=0;//对可以服务的窗口进行循环for(int i=0;i<numAgents;i++){//getCIdOfHandling()方法为正在办理业务的顾客编号if(agent[i].getCIdOfHandling()!=0){//统计在本窗口等候的顾客数totalSize+=agent[i].getCusCountOfQueue();String s="窗口"+(i+1)+":正在办理顾客"+agent[i].getCIdOfHandling()+"业务"; //显示在本窗口等候的顾客数if(agent[i].getCusCountOfQueue()>0)labelAgent[i].setText(s+"["+agent[i].getCusOfQueue()+"正在等待]");elselabelAgent[i].setText(s);}else{labelAgent[i].setText("窗口"+(i+1)+":空闲中...");}}for(int i=numAgents;i<SimulateRailwayStation.NUM_AGANTS;i++) labelAgent[i].setText("窗口"+(i+1)+":暂停服务!");labelQueue.setText("正在等待的顾客数:"+totalSize);labelServed.setText("已经服务的顾客数:"+numCustomerServered); }//火车站售票窗口关闭public void stop(){thread=null;for(int i=0;i<numAgents;i++){//停止售票服务agent[i].halt();}}//添加窗口public void addAgent(){if(numAgents<SimulateRailwayStation.NUM_AGANTS){agent[numAgents]=new Agent(numAgents);agent[numAgents].start();numAgents++;}}//关闭窗口,该方法暂时没有使用public void retireAgent(){if(numAgents>1){agent[numAgents-1].halt();numAgents--;}}//接待顾客的方法public void generateCustomer(){//所有工作窗口的队列中,至少有一个顾客在排队时为真.boolean allAgentQueueHasOne=true;/* 如果所有正在工作窗口的队列中至少有一个顾客在排队,就把新顾客添加到队列最少的那个队.否则,就把顾客添加到没有业务处理的窗口中.*///对可以服务的窗口进行循环for(int i=0;i<numAgents;i++){//如果本窗口队列中没有顾客if(agent[i].getCusCountOfQueue()==0 && agent[i].getCIdOfHandling()==0) {//添加新顾客agent[i].joinNewCustomer(new Customer());allAgentQueueHasOne=false;break;}}//如果所有工作窗口都有顾客在等候if(allAgentQueueHasOne){//定义变量index存放最少等候顾客数的窗口编号int index=0;//对可以服务的窗口进行循环for(int i=0;i<numAgents;i++){if(agent[i].getCusCountOfQueue()<agent[index].getCusCountOfQueue()) {(见教材)}}//往最少顾客的窗口加新顾客agent[index].joinNewCustomer(new Customer());}}}/*火车站售票窗口类 */class Agent extends Panel implements Runnable{//窗口开放标志private boolean running =false;private int ID=-1;private int numCustomers=0;private int handlingCId=0;//该窗口中排队的顾客private List customersofqueue=new List(); //该窗口中已办理的顾客private List customersofhandled=new List(); private Label labelHandling=new Label();private Label labelThisQueue=new Label();private Thread thread=null;//构造方法,定义售票窗口编号public Agent(int ID){(见教材)}// 售票窗口开始售票服务public void start(){if(thread==null){running=true;thread =new Thread(this);//启动线程thread.start();}}//停止售票服务public void halt(){running=false;}//获得正在办理业务的顾客IDpublic int getCIdOfHandling(){return handlingCId;}//从本窗口的队列中获得将要服务的顾客public Customer requestCustomerFor(){if(customersofqueue.getSize()>0){Customer c=(Customer)customersofqueue.get(0);customersofqueue.delete(0);return c;}else{return null;}}//本窗口已办理业务的顾客数public int getCusCountOfHandled(){return numCustomers;}//本窗口已办理业务的顾客列表public String getCusOfHandled(){if(customersofhandled.getSize()>0){StringBuffer sbuf=new StringBuffer();sbuf.append("顾客");for(int i=0;i<customersofhandled.getSize();i++){sbuf.append(((Customer)customersofhandled.get(i)).getCustomerId()); if(i!=customersofhandled.getSize()-1)sbuf.append(",");}return sbuf.toString();}else{return new String("");}}//在窗口的队列中添加新顾客public synchronized void joinNewCustomer(Customer c){if(!customersofqueue.isFull()){customersofqueue.add(c);System.out.println("join to agent"+(this.ID+1));}}//获得本窗口的队列中的顾客列表public synchronized String getCusOfQueue(){if(customersofqueue.getSize()>0){StringBuffer sbuf=new StringBuffer();sbuf.append("Customer");for(int i=0;i<customersofqueue.getSize();i++){sbuf.append(((Customer)customersofqueue.get(i)).getCustomerId()); if(i!=customersofqueue.getSize()-1)sbuf.append(",");}return sbuf.toString();}else{return new String("");}}//获得本窗口的队列中的顾客数public int getCusCountOfQueue(){return customersofqueue.getSize();}//本窗口队列中的顾客未办理业务离去public void CustomerLeft(){if(customersofqueue.getSize()>0)customersofqueue.delete(customersofqueue.getSize()-1);}//顾客办理完业务离去public void releaseCustomer(Customer c){numCustomers++;customersofhandled.add(c);}//本窗口在不断的处理业务public void run(){while (running){try{thread.sleep((int)(Math.random()*SimulateRailwayStation.MAX_NO_CUSTOMERS)+1000); Customer customer=requestCustomerFor();//获得服务的顾客if(customer!=null){handlingCId=customer.getCustomerId();//获得顾客ID//办理业务时间:主要是询问等thread.sleep((int)(Math.random()*SimulateRailwayStation.BUSINESS_DELAY)/2); synchronized(this){//检索对应的票务信息for(int i=0;i<SimulateRailwayStation.train_num.length;i++){if(customer.getCustomerWilling()==i+1)SimulateRailwayStation.tickets[i]--;//对应票数减一}}//办理业务时间:打印票、交钱等thread.sleep((int)(Math.random()*SimulateRailwayStation.BUSINESS_DELAY)/2); releaseCustomer(customer);//顾客办理后离开。