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.

基于Java面向对象程序设计课程报告 .word教育资料基于Java语言的简易坦克大战游戏设计课程报告摘 要:    本课程设计使用Java语言开发了一个简单坦克大战小游戏,主要采用面向对象程序设计 思想来完成程序的需求分析,概念及逻辑设计,系统的详细实现等过程。    游戏主要实现了游戏场景的构造,坦克及子弹类的初始化,敌我坦克对战,游戏存盘及 读档等功能。关键词:    Java;    面向对象;    敌我坦克对战;    引言坦克大战是一个经典的单机对战游戏,其在青少年中非常流行,目前游戏开发商对 其不断改进,已从简单的单机手游扩充为大型的网络对战游戏,但其基于面向对象程序 设计思想仍未变。本设计是为检验面向对象程序设计课程的知识运用而进行的实践,其 主要目的是采用面向对象的思想,独立完成程序的各个过程,并在实践中应用学到的关 于Java类与对象,接口,包,异常处理,多线程,事件处理及各类流的处理等知识。1. 系统分析1.1系统可行性分析 在技术上,本系统的坦克大战是基于Java语言设计,并在Eclipse软件上具体实现的。J ava语言是一种跨平台,适合于分布式计算环境的面向对象编程语言,具有简洁,安全, 面向对象,动态,体系结构中立,可移植,高性能,多线程,解释执行,分布式等特性 。Java现在主要用在WEB开发,手机游戏及一些平台游戏的开发,因为其具有良好的跨平 台性,在各类电子产品上应用非常广泛。本系统使用Swing,GUI,Socket,面向对象设 计等技术实现,这些技术已非常成熟,广泛应用于各类程序开发,故现在使用这些技术 是可行的。在实用性上,坦克大战为一款经典射击游戏,其前身为1985年日本游戏公司 在任天堂FC(FamilyComputer)平台上开发的红白单机游戏,游戏以坦克战斗及保卫基 地为主题,凭借流畅的游戏体验,不错的游戏视觉效果风靡全世界。直到今天,仍有游 戏商家以其为模型开发出3D网络对战版坦克大战,可见其具有广大的市场效益。本系统 运用Java跨平台编程语言,在PC上重新实现这一经典游戏,探究其设计思路与实现方法 ,并且设计了关卡模式,新增了游戏存盘,读档功能,使游戏玩法更加丰富。因此,本 系统具有一定的实用性。1.2系统需求分析 凭着由于系统为简易的单机对战射击游戏故游戏必须具有以下功能:    1) 有图形游戏界面,使用户看得到游戏给出的反馈。2) 有人机交互功能,用户可以操作指定的游戏元素。3) 坦克可以上下左右四个方向任意行走,且不可超出游戏设定边界。4) 敌方坦克必须明显区别于我方坦克,且可以随机移动,随机打出炮弹。5) 我方坦克可在控制下四个方向任意移动,且可按不同速率发射炮弹。6) 敌方坦克之间不能重叠,我方坦克与敌方坦克也不能重叠。7) 炮弹与坦克的碰撞检测,且炮弹超出边界的检测。8) 加入声音,图片等资源,使游戏具有良好体验性。9) 菜单栏选项,可以选择新游戏,退出游戏,存档游戏,读取游戏,并可以查看帮助信息 。2.系统概要设计2.1 系统结构设计坦克大战游戏主要实现玩家参加游戏的整个过程,用户打开游戏,将出现 游戏初始界面,用户可点击菜单栏选择游戏模式和帮助文档。若玩家选择游戏菜单,将 出现四个选项:    新游戏(N)、退出游戏(E)、存盘退出(C)和继续游戏(S),选择新游戏则玩家开始游戏, 选择存盘退出将保存游戏记录并退出,选择继续游戏则读取保存记录玩家继续上次游戏 。    帮助菜单将帮助玩家了解游戏的相关操作。整个游戏流程如图1所示:    是否判断胜负负程序开始初始化游戏帮助新游戏-省略部分- 题,通过持续的努力,也学习到了很多知识,例如在设计坦克在行进中正确发射炮弹的 问题,开始时自己设计的坦克发射的炮弹总是方向不正确,或是在发出后落在行驶的坦 克后面;    还有就是坦克的碰撞检测,如何解决坦克相互的"穿越"问题。这些问题,我通过在网上 查资料,然后自己修改程序代码,然后一次次的调试,最终这些问题都得到了解决。坦 克大战游戏虽然已设计完毕,但程序只具备了一些基本的功能,程序仍很简陋,游戏还 有很大改进空间,如可在游戏界面中加入"墙壁"、"河流"等障碍物,多添加一些游戏关 卡,设置游戏的难度等级等等。    这些都需要我在以后的学习中不断完善。参考文献[1] 刘秀芳,刘仲鹏. 基于ASP.NET的商品交易网站设计与实现[J].黑龙江科技信息,XXXX年来所有关心帮助过 我的各位授课老师表示由衷的敬意和感谢,感谢四年来给予我很多关心和帮助的同学们 ,我衷心的祝福我的朋友们以后的人生道路越来越宽广。word教育资料 达到当天最大量API KEY 超过次数限制 ----------------------- 基于Java面向对象程序设计课程报告全文共4页,当
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值