Java高级课程设计报告模板.doc
Java高级课程设计报告课程设计名称:Java高级课程设计学 期:13-14-1班 级:计网1231班姓 名:黄磊指 导 老 师:刘志生、白党强一、课程设计目的课程设计是课程教学中的一项重要内容,是完成教学计划达到教学目标的重要环节,是教学计划中综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。Java高级程序设计是一门实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位,它是JAVA程序设计课程的后继。它要求学生能灵活掌握所学知识,为后续JSP程序设计、J2EE程序设计等后续课程打好基础。 本课程设计的目的旨在帮助学生掌握Java高级应用相关知识,主要包括面向对象的数据结构,Java的集合构架、多线程、国际化、反射、泛型等内容,培养学生应用所学知识分析问题,解决问题的能力。二、课程设计内容项目1:编写一个Java应用程序,读取一个文本文件(以本程序源文件为例读取),一次读取其内的一行文本,令每行形成一个String,并将读出的String对象置于LinkedList中,以相反次序显示出LinkedList内的所有内容String s;BufferedReader in= new BufferedReader(new FileReader("B.java");while(s=in.readLine()!=null)l.add(s);in.close();for(int i=l.size()-1;i>=0;i-)System.out.println(l.get(i)+" ")这道题使用到了:读取文件时用到了java.io包下的BufferedReader类;将读出的String对象置于LinkedList中时用到了java.util包下LinkedList类;主要步骤时将文件读取并置于LinkedList中,然后倒着输出;项目2:编写一个Java应用程序,利用RandomAccessFile类,把10个10到100之间互不相等的随机int型整数写入到一个名字为int.dat文件中,然后按相反顺序读出这些数据置于TreeSet中,输出这个集合。(注意,一个int型数据占4个字节)RandomAccessFile accessFile = new RandomAccessFile(f, "rw");int a= new int10;int x,n=0;int k=0;while(n<10) x=(int)(Math.random()*89+11);for(int i=0;i<n;i+)if(x=ai)k=1;break;if(k=0) an+=x;这道题主要用到了RandomAccessFile类,支持对随机访问文件的读取和写入,随机读取10100之间不相等int型整数。项目3:创建学生类,至少包括学号、姓名、年龄和身高属性,一个构造方法用于设置属性,一个toString()方法用于将学生类对象转换成String对象和一个用于比较大小的方法(实现Comparable接口的compareTo方法)。要求将10名学生从大到小排序输出。(排序规则:先按年龄,然后按身高,最后按学号)public int compareTo(Object o) Student p=(Student)o; if (nl() < p.nl() return 1; if (nl() > p.nl() return -1; if (sg() < p.sg() return 1; if (sg() > p.sg() return -1; if (xh() < p.xh() return 1; if (xh() > p.xh() return -1; else return 0; 这道题主要用了compareTo方法,它允许在排序顺序上实现精确控制,还可以用来控制某些数据结构的顺序。这道题就是先按年龄,然后按身高,最后按学号来排序的。项目4:编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。服务器程序启动后,监听端口5678的请求;客户端程序启动后,向服务器端口5678发送请求。服务器不断接收客户机所写入的信息,并且服务器也会做出"Receive"为回应,告知客户机已接收到消息。要求:服务器程序采用多线程开发,允许多个客户端程序同时连接。客户机发送"End"字符串时,客户端程序退出。(服务端程序和客户端程序分别命名为Server.java和Client.java)class ServerThread implements Runnable private Socket socket; public ServerThread(Socket socket) this.socket = socket; public void run() 服务器端程序主要是ServerThread类,它是套接字工厂的服务器端对应物,用来捕获与正在创建的套接字相关的各种策略。if(a1.equals("end") socket.close(); fromServer.close(); toServer.close(); break; 这段是客户端中在运行时输入end结束程序运行的语句。项目5:编写一个Java应用程序,使用RandomAccessFile流统计Hello.txt中的单词,要求如下:(1)计算全文中共出现了多少个单词(重复的单词只计算一次);if(map.containsKey(word)map.put(word, Integer.parseInt(map.get(word).toString()+1);elsemap.put(word, 1);System.out.println("单词数量:"+map.size();containsKey方法根据 Container 中的子 Component 的顺序确定遍历顺序,不可视和不可显示的部分层次结构将不被搜索。(2)统计出有多少个单词只出现了一次;List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>();for(Iterator i = set.iterator();i.hasNext();)Map.Entry<String,Integer> entry = (Map.Entry<String,Integer>)i.next();if(entry.getValue().toString().equals("1")System.out.println(entry.getKey()+":出现一次"); list.add(entry);通过Entry,将多次出现的单词省略,只留下出现一次的单词并输出。(3)统计并显示出每个单词出现的频率,并将这些单词按出现频率高低顺序显示出来。Collections.sort(list,new WordComparator();for(Map.Entry<String,Integer> entry:list)System.out.println(entry.getKey()+":"+entry.getValue();class WordComparator implements Comparatorpublic int compare(Object arg0, Object arg1)Map.Entry<String,Integer> map1 = (Map.Entry<String,Integer>)arg0;Map.Entry<String,Integer>map2 = (Map.Entry<String,Integer>)arg1;return Integer.parseInt(map2.getValue().toString() - Integer.parseInt(map1.getValue().toString();Sort方法主要是请求 LDAP 服务器在返回搜索操作的结果前对这些结果进行排序。使用一个或多个排序键所组成的有序列表与关联的排序参数一起指定排序标准。搜索结果根据排序控件中提供的参数在 LDAP 服务器排序,然后返回给请求方。项目6:编写一个简单的考试系统,题库等数据存储在MySQL数据库中。启动程序后,首先要求考生输入学号、班级和姓名信息,之后随机抽取一题等待回答,回答完后抽取下一题,以此类推,做完规定数目的题后,显示成绩,考试结束(也可以将做过的题保存在数据表中以便检查修改,该功能可选)。Class.forName("com.mysql.jdbc.Driver"); Connectionconnection=DriverManager.getConnection("jdbc:mysql:/localhost:3306/hl", "root", ""); Statement statement = connection.createStatement();String s1="create table 学生(学号 int,姓名 varchar(10),成绩 int)" int y=statement.executeUpdate(s1); System.out.println("请输入你要回答的题目数量(11694)");int z=input.nextInt();int a= new intz; int x,shu=0;while(shu<z) int k=0;x=(int)(Math.random()*1694);for(int i=0;i<shu;i+)if(x=ai)k=1;break;这道题主要是在数据库中创建一个题库,然后使用语句调用数据库中的题库,形成一个考试系统。同时要注意配java的环境,不然运行程序会出现错误。三、课程设计总结通过此次课程设计,使我更加扎实的掌握了有关编程方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。 过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可! 课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。 回顾起此次Java课程设计,至今我仍感慨颇多,的确,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在刘志生老师和白党强老师的带领下,终于迎刃而解。同时,在刘志生老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!四、参考资料Java语言程序设计 基础篇 机械工业出版社Java语言程序设计 进阶篇 机械工业出版社