Java课程设计报告

一、设计时间
2020-2021学年第二学期第17-18周
二、设计地点
三、设计目的
1.复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;
2.课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力。提高学生适应实际,实践编程的能力;
3.培养学生查阅资料、独立思考、创新意识及能力。
四、设计小组成员
五、指导老师
六、设计课题
选取选题(1)车票信息查询和购买系统的设计与实现。
理由:
1、整个系统适合程序练习增强自己的实力,运用多个系统进行操作。
2、代码编写涉及面广,利于提高综合应用能力。
3、设计页面并且做出每一个菜单的功能要用到很多知识,利于熟悉JAVA。
七、基本思路及关键问题的解决方法
基本思路:
先制作登录界面,对MySQL进行连接,默认布局,进行界面布局,将窗口中添加文本区域,各式的按钮添加上去,对登录按钮进行监控,然后跳转车票信息查询系统,中间添加列车的信息标签,加入查询按钮和下拉框进行查询,对照数据库中表的数据,正确就进行跳转列车运行信息,并且可以进行发票售票
关键问题的解决方法:
1、数据库的连接。对connection、statement和resultset进行对象创建,用statement对象执行SQL语句,将执行的语句返回resultset结果集,对这些语句进行try、catch最后关闭反顺序关闭resultset,statement,connection。
2、信息的对比和列车信息的输出。将数据库的返回值类型改成ArrayList<HashMap<String,String>>并对对比语句进行限制,只有值配对才能执行以下语句,利用封箱和拆箱将返回的信息值利用图形用户界面展现出来
3、利用for循环对比信息。将获取resultset结果集的值与下拉框进行对比,要将装箱的for循环写到其中。
八、算法及流程图
在这里插入图片描述

九、调试过程中出现的问题及相应解决办法
1、出现的问题:

  1. 下拉框信息无法与数据库进行对比
  2. 多线程无法停止并输出图形用户界面
  3. 无法取到数据库中的信息
  4. 系统自动修改从数据库中取出的信息
    2、解决办法:
  5. 将数据库的方法返回值换成ArrayList<HashMap<String,String>>
  6. 在执行多线程的类中添加图形用户界面,并在最后加入break;
  7. 使用封箱和拆箱的方法将信息进行对比后取出所需要的值
  8. 在数据库中将封箱代码放入获取结果集数值的for循环中

十、课程设计心得体会
1、完成这次程序设计以后,对多个项目的层层叠加,我的代码量比原来多了不少,一些不理解的概念就会慢慢理解,自己的认知会有一定的提升。
2、从面向过程到面向对象的转变。以前学习面向过程的编程语言时,总是一步一步分析问题,然后按步骤逐渐完成整个程序;现在学习面向对象的编程语言是,我们编程是利用类和对象的机制将数据和方法封装在一起,通过统一的接口与外界交互;通过类的继承机制实现代码重用。
3、面向对象的编程需要长期的练习以及熟悉设计模式的。学习编程语言,还是要多实践,多敲代码,在实践中发现问题,解决问题。

十一、源程序
int i = 0;
for (HashMap<String, String> train : trains) {
//拆箱从train中拿出信息
String loc = train.get(“loc”); //获取train集合中的本地信息
String arv = train.get(“arv”); //获取train集合中的目的地信息
String time = train.get(“time”); //获取train集合中的时间信息
String trinf = train.get(“trinf”); //获取train集合中的列车信息
//创建售票按钮
JButton jbu = new JButton(“开放售票”);
jbu.setBounds(160, 50+60*i, 90, 20); //设置按钮位置
//对文本域进行监听
jbu.addActionListener(new ActionListener() {
//创建售票监听
public void actionPerformed(ActionEvent e) {
//调用售票线程
TicketSold tic = new TicketSold();
tic.addWindow();}});
dia.add(jbu);
// 创建装载列车信息的文本域
JTextArea jta = new JTextArea();//创建与信息数量相同的文本域
jta.setLayout(new FlowLayout()); //设置文本域为流体布局
jta.setEditable(false); //设置文本域不可编辑
jta.setBounds(250, 50 + i * 60, 300, 20);
// 文本域中的信息摆放
String white = " 列车编号:"+trinf+" 发车时间:" + time + “”;
jta.append(loc); //文本域加入loc信息
jta.append(white); //文本域加入列车时间和编号
jta.append(arv); //文本域加入目的地
i++;
dia.add(jta);
System.out.println(loc + “” + arv); //输出本地和目的地
class MyThread implements Runnable {
private int tick = TicketSystem.ticket; //获取售票系统的票数
Object obj = new Object();
public void run() {
while (true) { //进行循环
synchronized (obj) {
if (tick > 0) {
String name = Thread.currentThread().getName(); //获取线程名字
int windows = Integer.parseInt(name.substring(7, name.length())); //获取窗口名字
try {Thread.sleep(100); //设置线程休眠时间
} catch (Exception e) {}
System.out.println(“第” + (windows+ 1) + “窗口卖出了第” + tick-- + “张票”);
} else if (tick == 0) {
JFrame jframe = new JFrame();
jframe.setLayout(null);
jframe.setLocation(600, 300);
jframe.setSize(200,180); //设置窗口位置
jframe.setVisible(true); //设置窗口可视化
JLabel jlabel = new JLabel(“票已经售完”);
jlabel.setBounds(58, 40, 100, 50); //设置跳出标签的位置
jframe.add(jlabel); //窗口加入标签
break;}}}}}
//创建多个窗口售票
public class TicketSold {
public void addWindow() {
MyThread mt = new MyThread();
Thread t1 = new Thread(mt);
t1.start(); //线程开始运行}}
// 登录按钮的监控
logining.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String qq = number.getText(); //获取qq账号
String pwd = password.getText(); //获取密码
DBS dao = new DBS(); //创建数据库对象
ArrayList<HashMap<String, String>> counts;
try {
counts = dao.method(qq, pwd); //调用数据库中的method方法
if (counts == null) {
throw new RegisterException(); //抛出自定义异常
} else {
for (HashMap<String, String> count : counts) {
String qqnum = count.get(“qq”); //将qq中的数据放入qqnum中
String pwdnum = count.get(“pwd”); //将pwd中的数据放在pwdnum中
if (qq.equals(qqnum) && pwd.equals(pwdnum)) {
TicketSystem ts = new TicketSystem(); //创建售票查询对象
ts.sst(); //调用查询对象的sst方法
}}}} catch (SQLException e1) {e1.printStackTrace();}}});
参考文献
[1] 温昱. 软件架构设计[M]. 北京:电子工业出版社,2007:157-177.
[2] 叶核亚. Java程序设计实用教程(第3版)[M]. 北京:电子工业出版社, 2010.
[3] 霍斯特曼. Java核心技术[M]. 北京: 机械工业出版社, 2008.
[4] Bruce Eckel. Java编程思想[M]. 北京: 机械工业出版社, 2009.
[5] 刘欣怡. 软件工程[M]. 北京: 清华大学出版社, 2007.
[6] 传智播客高教产品研发部. Java基础入门[M]. 北京: 清华大学出版社, 2017.

  • 10
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值