Java课程设计报告书.docx

上传人:b****4 文档编号:4196862 上传时间:2022-11-28 格式:DOCX 页数:16 大小:28.32KB
下载 相关 举报
Java课程设计报告书.docx_第1页
第1页 / 共16页
Java课程设计报告书.docx_第2页
第2页 / 共16页
Java课程设计报告书.docx_第3页
第3页 / 共16页
Java课程设计报告书.docx_第4页
第4页 / 共16页
Java课程设计报告书.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Java课程设计报告书.docx

《Java课程设计报告书.docx》由会员分享,可在线阅读,更多相关《Java课程设计报告书.docx(16页珍藏版)》请在冰豆网上搜索。

Java课程设计报告书.docx

Java课程设计报告书

学号

201510159308

 

武汉科技大学城市学院

 

课程设计报告

 

课程设计名称JAVA程序设计课程设计

题目

ACM

院系

信息工程学部

专业

软件工程

班级

姓名

指导教师

 

2017

6

23

课程设计评分表

评分标准:

1.学生是否严格遵守课程设计纪律,按照规定时间完成设计任务(占30%)

2.程序设计的质量与规范:

(占40%)

(1)任务书上的题目是否完成,并选做了ACM题目

(2)成功提交的ACM题目的数题及难度

(3)是否采用了良好的设计方法,独立完成程序设计

(4)程序是否运行正常,未见运行错误

3.课程设计报告书的质量与规范(占30%)

教师评分:

1.学生出勤得分

A.优B.良C.中D.及格E.不及格

2.程序设计得分

A.优B.良C.中D.及格E.不及格

3.设计报告得分

A.优B.良C.中D.及格E.不及格

总分:

_________

教师评语:

根据该生在课程设计期间,是否严格遵守课程设计纪律,按照规定时间完成设计任务,完成的程序设计的质量与规范,提交的课程设计报告书的质量与规范等多方面的评分,该生本次课程设计的评分为:

________

 

教师签名:

日期:

年月日

JAVA编程课程设计指导书

学时:

1周,学分:

1

1.课程设计目的:

JAVA编程课程设计属于软件开发类课程设计。

该课程设计培养学生熟练应用当前主流的JAVA软件开发语言,检验软件的设计、编码与测试,具备较强的JAVA语言软件开发能力。

2.课程设计方式:

(1)JAVA编程课程设计方式采取ACM测试的方式,利用所学的面向对象程序设计(JAVA)知识,培养学生具有分析应用问题的能力,能够独立完成应用程序的编制与调试工作。

(3)每个同学必须完成8-12道题,每题写出解题报告,解题报告内容:

.题目标题

.题目描述

.解题思路

.源码

.小结

3.课程设计平台:

eclipse或Myeclipse

4.课程设计考核方式

(1)学生独立提交软件设计作品和“课程设计报告书”,指导教师根据学生组提交的软件设计作品和“课程设计报告书”的质量,为学生组评定“优”“良”“中”“及格”或“不及格”;

(2)根据各组学生所选题目的难易程度以及验收结果,为学生评定“优”“良”“中”“及格”或“不及格”。

“课程设计报告书”包括:

课程设计项目名称,课程设计任务,课程设计任务(功能)说明及功能模块图,数据库设计,各模块功能说明,使用的算法描述(如果需使用算法),各模块界面设计,各模块中关键代码段功能说明与代码行注释,测试说明,参考文献等。

5.参考文献

[1]张思民.Java语言程序设计(第2版)[M].北京:

清华大学出版社,2012.1

[2]姜华.Java项目实战教程[M].北京:

清华大学出版社,2012.9

[3]陈喧.Java程序设计教程[M].北京:

清华大学出版社,2011.5

[4][美]Echel,B.Java编程思想(第四版)[M].北京:

机械工业出版社,2007

[5]MichaelMain.数据结构:

Java语言描述(第二版)(国外经典计算机科学教材)[M].北京:

中国电力出版社,2007

 

1星系炸弹

1.1问题描述

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。

每个炸弹都可以设定多少天之后爆炸。

比如:

阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。

有一个贝塔炸弹,2014年11月9日放置,输入定时天数,例如定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。

比如:

2015-02-19

输入:

 输入炸弹引爆延迟的天数。

输出:

对于每个输入天数,输出符合题目要求的格式的日期。

样例输入:

1000

样例输出:

2017-08-05

1.2解题思路

1,分析题意可知,本题是求一个日期,想到了Calendar。

2,输入的数据是这个日期距离2014-11-09的天数,想到了add方法。

3,用set设置起始日期2014-11-0911月在代码中表现为10。

4,用add方法设置偏移值,偏移值由键盘输入获取scanner。

5,用getTime获取偏移后的Date对象。

6,自定义格式把对象转换成字符串输出,格式为:

yy-MM-dd。

1.3代码

importjava.text.SimpleDateFormat;

importjava.util.Calendar;

importjava.util.Date;

importjava.util.Scanner;

publicclassMain{

/**

*@paramargs

*@throwsIOException

*/

publicstaticvoidmain(String[]args)throwsIOException{

//TODOAuto-generatedmethodstub

Scannersc=newScanner(System.in);

while(sc.hasNext())

{

Calendarc=Calendar.getInstance();

c.set(2014,10,9);

intamount=sc.nextInt();

c.add(Calendar.DATE,amount);

Datedate=c.getTime();

DateFormatformat=newSimpleDateFormat("yyyy-MM-dd");

Stringstr=format.format(date);

System.out.println(str);

}

}

}

1.4小结

Calendar对象可以灵活地设置修改日期,非常好用,还有就是要注意在java中日期的数字表示:

月是用0~11的整数表示的,0表示1月,1表示2月......11表示12月。

日是用1~31的整数表示。

小时用0~23的整数表示。

2小光棍数

2.1问题描述

为了迎接一年一度光棍节的到来,让我们一起来看看小光棍数吧。

倘若一个数的三次方最后三位数是111,这样的数称为小光棍数。

从0开始计数,第一个小光棍数是471(471^3=104487111),请问第m个小光棍数是多少。

输入

第一行一个整数T表示有T组测试数据

接下来T行每行有一个数m

输出

输出第m个小光棍数

每次输出占一行

样例输出

1

1

样例输出

471

2.2解题思路

1,分析题意可知,第一次输入的数据表示测试数据有几组,也就是控制循环的次数。

2,第二次输入的数据表示查找第几个小光棍数,想到了定义一个变量作为计数器,查找到一个记一次数,计数器的值等于输入的数据就停止查询,

并输出查到的数据。

3,循环控制着一个查找功能,数字的三次方要保证是三位数,不是就不用查找了,用if条件语句控制。

直接把三次方处理后的数据对1000取余数得出的值就是最后三位,如果是111就满足条件,这个数字就是小光棍数。

2.3代码

importjava.util.Scanner;

publicclassMain{

publicstaticvoidmain(String[]args){

Scannerscanner=newScanner(System.in);

intn=scanner.nextInt();

while(n--!

=0)

{

longm=scanner.nextLong();

System.out.println(471+(m-1)*1000);

}

}

}

2.4小结

这种特殊数字的查找原本在不用数学方法的情况下,计算量十分大,但是对计算机而言却不是很大,以后这种数据找不到规律可以直接用java写一个程序快速计算。

但要注意对循环的控制。

 

3零起点学算法12——求2个日期之间的天数

2.2问题描述

水题

输入

输入2个日期,日期按照年月日,年月日之间用符号-隔开(题目包含多组数据)

输出

求出这2个日期之间的天数(不包括自身),每组测试数据一行

样例输入:

2011-1-1

2011-1-5

样例输出:

3

2.3解题思路

1,分析题意可知,本题使用了日历,想到了Calendar。

2,分别用两个字符串接收输入的数据,并且把接收到的字符串中的年、月、日切割出来,想到了split方法。

3,分别用set设置起始日期和终止日期。

4,分别用getTime方法获取Date对象,再把Date对象转化为毫秒值。

5,用后一个毫秒值减前一个毫秒值,并把毫秒转化成天打印。

2.4代码

importjava.util.Date;

importjava.util.Calendar;

importjava.util.Scanner;

publicclassMain{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Calendarc1=Calendar.getInstance();

Calendarc2=Calendar.getInstance();

Scannersc=newScanner(System.in);

while(sc.hasNext())

{

Strings1=sc.nextLine();

Strings2=sc.nextLine();

if(s1.equals(s2))

return;

String[]str1=s1.split("-");

String[]str2=s2.split("-");

c1.set(Integer.parseInt(str1[0]),Integer.parseInt(str1[1]),Integer.parseInt(str1[2]));

c2.set(Integer.parseInt(str2[0]),Integer.parseInt(str2[1]),Integer.parseInt(str2[2]));

if(pareTo(c2)>0)

return;

Datedate1=c1.getTime();

Datedate2=c2.getTime();

longtime1=date1.getTime();

longtime2=date2.getTime();

longt=time2-time1;

intday=(int)(t/1000/3600/24)-1;

System.out.println(day);

}

}

}

2.5小结

对日期进行运算首先要想到,将日期转化为毫秒值,转化后就可以使用数学方法计算,从而得到日期结果,这种想法很方便。

3

4零起点学算法34——继续求多项式

4.1问题描述

输入1个正整数n,

计算1+(1+2)+(1+2+3)+...+(1+2+3+...+n)

输入

输入正整数n(多组数据)

输出

输出1+(1+2)+(1+2+3)+...+(1+2+3+...+n)的值(每组数据一行)

样例输入:

2

样例输出:

4

4.2解题思路

1,看到这个式子想到了循环,把一个数据从1累加到n。

但这只是完成了一个小括号内部的运算。

2,继续思考,想到了递归,定义一个方法add实现累加功能,运算完一次就把传入的值减一,把每次累加后的值相加。

3,如果n的值等于1,就停止递归,把最终的和返回。

4.3代码

importjava.util.Scanner;

publicclassMain

{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

while(sc.hasNext())

{

intsum=0;

inta=0;

intn=sc.nextInt();

for(inti=1;i<=n;i++)

{

a=a+i;

sum=sum+a;

}

System.out.println(sum);

}

}

}

4.4小结

在方法中自己调用了自己,就要想到递归。

使用递归要注意:

1. 递归一定要有结束条件。

2.递归次数不能过多,容易引起内存溢出。

5零起点学算法35——再求多项式(含浮点)

5.1问题描述

输入一个整数n,计算 

1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...+2n-1)的值

输入

输入一个整数n(多组数据)

输出

出1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...+2n-1)的值,保留2位小数(每组数据一行)

样例输入:

1

样例输出:

1.00

5.2解题思路

1,建立一个名称为fun的方法计算1-3+5-...+2n-1的值。

2,建立一个名称为operation的方法计算1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5...+2n+1)的值,分母的值调用fun方法得到,分子为1,运用递归知识,和上一题思想一样。

3,调用operation方法得到返回值,将返回值以保留两个小数的固定格式输出。

5.3代码

importjava.text.DecimalFormat;

importjava.util.Scanner;

publicclassMain

{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

while(sc.hasNext())

{

inta;

doubleb=0;

doublec=0;

intflag=1;

a=sc.nextInt();

for(inti=1;i<=a;i++)

{

c=c+flag*(2*i-1);

b=b+1.0/c;

flag=-flag;

}

DecimalFormatdf=newDecimalFormat("#0.00");

System.out.println(df.format(b));

}

}

}

5.4小结

在方法中自己调用了自己,就要想到递归。

使用递归要注意:

1. 递归一定要有结束条件。

2.递归次数不能过多,容易引起内存溢出。

以固定格式输出可以考虑String类中的静态方法format方法。

63n+1问题

6.1问题描述

任给一个正整数n,如果n为偶数,就将它变为n/2,如果为奇数,则将它乘3加1(即3n+1)。

不断重复这样的运算,经过有限步后,一定可以得到1。

输入:

输入1个正整数n(n<=10^10)(多组数据)

输出:

输出变化的次数(每组数据一行)

样例输入:

3

样例输出:

7

6.2解题思路

1,获取输入的数据,判断是否满足n<=10^10。

2,定义一个变量count为计数器。

3,用if判断n为奇数还是偶数,按各自要求分别处理数据,直到n值为1。

每处理一次count就加1,循环结束打印count。

6.3代码

importjava.util.Scanner;

publicclassMain{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

while(sc.hasNext())

{

intnum=sc.nextInt();

if(num<=Math.pow(10,10))

{

intcount=0;

while(!

(num==1)){

if(num==0)

break;

if(num%2==0)

num=num/2;

else{

num=num*3+1;

}

count++;

}

System.out.println(count);

}

}

sc.close();

}

}

}

6.4小结

凡是遇到和次数有关的问题,就要想到能否定义一个计数器来记录次数,合适的定义变量可以很好地控制和显化代码的执行。

 

7基础练习Huffuman树

7.1问题描述

Huffman树在编码中有着广泛的应用。

在这里,我们只关心Huffman树的构造过程。

  给出一列数{pi}={p0,p1,…,pn-1},用这列数构造Huffman树的过程如下:

  1.找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。

这个过程的费用记为pa+pb。

  2.重复步骤1,直到{pi}中只剩下一个数。

  在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

  本题任务:

对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

  例如,对于数列{pi}={5,3,8,2,9},Huffman树的构造过程如下:

  1.找到{5,3,8,2,9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5,8,9,5},费用为5。

  2.找到{5,8,9,5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8,9,10},费用为10。

  3.找到{8,9,10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10,17},费用为17。

  4.找到{10,17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

  5.现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入

输入的第一行包含一个正整数n(n<=100)。

  接下来是n个正整数,表示p0,p1,…,pn-1,每个数不超过1000。

输出

输出用这些数构造Huffman树的总费用。

样例输入:

5

53829

样例输出

59

7.2解题思路

1.分析题意知道先输入数列的总数,然后输入数列,可以用数组进行存储数列。

2.用循环,当数列不为空,对数组进行排序,进行运算,直至队列为空,输出结果。

7.3代码

importjava.util.Arrays;

importjava.util.Scanner;

publicclassO{

publicstaticvoidmain(String[]args)throwsException{

Scannera=newScanner(System.in);

while(a.hasNext()){

intnum=a.nextInt();

int[]huff=newint[num];

for(inti=0;i

huff[i]=a.nextInt();

intsum=0;

intk=0;

while(num>1){

Arrays.sort(huff);

k=huff[0]+huff[1];

sum=sum+k;

huff[0]=k;

huff[1]=Integer.MAX_VALUE;

num--;

}

System.out.println(sum);

}

}

}

 

7.4小结

Java中可以直接调用排序,很方便。

 

总结

通过这次课程设计,我学到了更多的java的知识,很多类库能很好的解决我需要的功能,这使我很有兴趣来学习java,上课时候的还可以听懂,但是在实验过程中我遇到了许多的问题,总是找不到头绪,让自己不知所措,但通过查阅api文档,使我有了很大进步,这让我认识到学习Java一定要多多练习,才能巩固知识。

还好学校安排了课程设计这门课,在这个时候我算是又重新学了一遍java程序设计。

在这次课程设计的过程中有很多的地方不会,但我尽量靠自己的独立思考和查阅书籍来完成的了。

虽然自己遇到了少的困难,但是我当我成功提交一个题目的时候,那种喜悦感记忆犹新。

这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于解决了。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1