JA V A程序设计课程设计(论文)
题目: QQ个人资料
院(系):软件学院
专业班级:计算机信息管理051班
学号:
学生姓名:
指导教师:
教师职称:
起止时间:2007.5.28至2007.6.10
程序设计专题(报告)任务及评语
院(系):软件学院教研室:软件教研窒
学号0 学生姓名专业班级计算机信息管理051班
程序设计(报告)题目QQ个人资料
程序设计(报告)任务
程序设计专题的任务与要求:
(1)掌握Java编程、面向对象的基础知识。
(2)较熟练地编写Java应用程序Application。
(3)了解Java的常用标准类库、编程技巧、异常处理。
(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。
(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。
课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩
成绩:指导教师签字:
2007 年6 月13 日
目录
第1章课程设计的目的与要求 1
1.1 课程设计目的 1
1.2 课程设计的实验环境 1
1.3 课程设计的预备知识 1
1.4 课程设计要求 1
第2章课程设计内容 2
2.1课程设计题目 2
2.2课程设计整体设计说明 2
2.2.1课程设计内容 2
2.2.2程序中所用类说明 3
2.2.3程序中使用方法的说明 3
2.2.4异常处理说明 4
2.2.5程序运行效果及存在的问题 4
2.3程序部分源代码及注释 5
第3章课程设计总结12
第1章课程设计的目的与要求
1.1 课程设计目的
《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是电子商务专业学生学习完《JA V A程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2 课程设计的实验环境
硬件要求能运行Windows 9.X操作系统的微机系统。JA V A程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。
1.3 课程设计的预备知识
熟悉JA V A语言及ECLIPSE开发工具。
1.4 课程设计要求
按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和
判断;能编写出具有良好风格的程序;掌握JA V A程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
第2章课程设计内容
2.1课程设计题目
QQ个人资料
2.2课程设计整体设计说明
这次课程设计是制作一个QQ个人资料窗体,
这次我使用的编程语言是JA V A语言。我采用的编译环境是Windows XP中文版+J2SDK1.6.0中文版+Eclipse3.2.1+ Eclipse3.2.1中文语言包+SWT designer5.1.0
使用JA V A语言及SWT进行可视编辑完成该功能。
2.2.1课程设计内容
(一)安装编译环境
(1)安装jdk1.6.0 运行j2sdk1.6.0.exe程序
(2)安装Eclipse 将下载的Eclipse压缩包eclipse-SDK-3.2.1-win32.zip解压到指定目录下(3)将下载的汉化压缩包NLpack1-eclipse-SDK-3.2-win32.zip按原路径解压即可,也就是直接覆盖eclipse文件下的features、plugins两个文件夹。
(4)安装SWT designer,将下载的压缩包按原路径解压即可,也就是直接覆盖eclipse文件夹下的features、plugins两个文件夹。
(二)进入Eclipse平台新建JA V A项目、新建包、新建类
(三)打开eclipse,首先选择工作空间,点击“浏览”选择路径。
(四)在Eclipse 内,选择菜单项文件> 新建> 项目... Designer>SWT/JFace Java Project以新建SWT项目。
项目名称:“Kechengsheji”。
(五)选择菜单项文件> 新建>包,包的名称为xuliu,按“确定”按钮,新建包。(六)在“包资源管理器”视图中,选择xuliu 项目。单击文件>新建>类
(七)新建并设计主窗体类QQ
(八)调试选择菜单项运行>调试>调试方式>SWT应用程序
找出错误并改正,直到调试成功。
(九)运行菜单项运行>运行>运行方式>SWT应用程序
运行程序看结果。
2.2.2程序中所用类说明
MainFrame 主窗体类:
设计显示年份月份选择按钮及查看按钮,显示月历。
Clock 当前时间类:
从系统中提取当前时间并以yyyy年MM月dd日hh:mm:ss显示。
2.2.3程序中使用方法的说明
MainFrame类中方法:
MainFrame():MainFrame类的构造函数
Init()显示月历方法
use():取查询月份第一天星期的方法
Resetday():运算是否闰年及各个月天数的方法
main():主方法程序在此开始执行
Clock 类中方法:
Clock():Clock类的构造函数
run():每秒取一次系统时间
paint():在主窗体上显示当前时间的方法
getTime():提取系统时间的方法
2.2.4异常处理说明
异常是异常事件的简称,它定义为在执行程序过程中出现了不正常的事件,破坏了正常的指令流。Java语言如果出现异常就要进行异常处理。
Clock类中有段代码含有异常处理。
try{
t.sleep(1000);//休眠1秒钟
}catch(InterruptedException e){
System.out.println("异常");
}
很多Java? 语言方法,如Thread.sleep()可以抛出InterruptedException异常。
程序需要暂停一段时间,于是调用t.sleep(1000)休眠一秒。(t.sleep(1000)是Thread.sleep()的一个实例。)所以我在使用这个方法时先try捕获异常,然后catch处理异常(显示提示信息:异常)。
2.2.5程序运行效果及存在的问题
在ECLIPSE下编译运行的效果如图。可以选择年月查看每月日历。并且能显示当前系统时间和某天是星期几。可以点击年份后的▼选择年,月份后的▼选择月,点查看按钮查看该月的日历。
存在的问题就是不能显示出农历效果,当然农历的算法比较复杂,就连Microsoft Windows系统的时间/日期功能也没有提供农历的效果。
2.3程序部分源代码及注释
QQ.java 源代码
package xuliu;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import https://www.wendangku.net/doc/504454795.html,yout.GridData;
import https://www.wendangku.net/doc/504454795.html,yout.GridLayout;
import https://www.wendangku.net/doc/504454795.html,yout.RowLayout;
import org.eclipse.swt.widgets.*;
public class QQ {
/* 为了自定义类MyMouseListener中的代码能访问到以下对象,故将这些对象定义成类的实例变量*/
private StackLayout stackLayout = new StackLayout();
private Composite yourDataComp;
private Composite otherComp;
private List selectList;
private Composite rightComp;
/* 由于自定义方法程序较长,这次的主程序框架选择了Eclispe“新建”向导的第二种"public open() mothd" */
public static void main(String[] args) {
try {
QQ window = new QQ();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
public void open() {
Display display = Display.getDefault();
Shell shell = new Shell();
shell.setSize(550, 350);
shell.setText("个人设置");
shell.setLayout(new GridLayout());
{
// 分割窗口
SashForm sashForm = new SashForm(shell, SWT.BORDER);
sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
{
// 分割窗左边的列表框
selectList = new List(sashForm, SWT.BORDER);
// 作为演示只加了两项
selectList.setItems(new String[] { "个人资料", "联系方式" });
// 加一个鼠标
selectList.addMouseListener((MouseListener) new MyMouseListener());
}
{
// 右边的堆栈式面板
rightComp = new Composite(sashForm, SWT.NONE);
rightComp.setLayout(stackLayout);
// 共两项,将生成此面板的代码提出成一个方法,保证代码结构的清晰
yourDataComp = createYourDataComp(rightComp);// 个人资料的面板
otherComp = createOtherComp(rightComp);// 联系方式的面板
// 在堆栈面板上先显示"个人资料"界面
stackLayout.topControl = yourDataComp;
}
// 分割窗口的左右空间比例
sashForm.setWeights(new int[] { 1, 4 });
}
{
// 界面的按钮的面板
Composite buttonComp = new Composite(shell, SWT.BORDER);
// 使用GridData设置buttonsComp在它你容器shell中的布局方式
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.END;// 让buttonComp向右靠
buttonComp.setLayoutData(gridData);
// 设置buttonsComp的布局为RowLayout,用来设定buttonComp内组件的布局方式
RowLayout rowLayout = new RowLayout();
rowLayout.spacing = 15;// 按钮之间间隔15个元素
buttonComp.setLayout(rowLayout);
// 在buttonComp下建立三个按钮
Button btn1 = new Button(buttonComp, SWT.NONE);
btn1.setText("确定");
btn1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
MessageDialog.openInformation(null, "提示", "你单击了'确定'按钮");
System.exit(0);
}
});
Button btn2 = new Button(buttonComp, SWT.NONE);
btn2.setText("取消");
btn2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
MessageDialog.openInformation(null, "提示", "你单击了'取消'按钮");
System.exit(0);
}
});
Button btn3 = new Button(buttonComp, SWT.NONE);
btn3.setText("应用");
btn3.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
MessageDialog.openInformation(null, "提示", "你单击了'应用'按钮");
}
});
}
https://www.wendangku.net/doc/504454795.html,yout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
// 个人资料面板的生成
private Composite createYourDataComp(Composite rightComp) {
Composite composite = new Composite(rightComp, SWT.NONE);
composite.setLayout(new GridLayout(6, false));// 个人资料面板分成6列
// 用户号码的标签及文本框
new Label(composite, SWT.NONE).setText("用户号码");
// 只读型的文本框
Text text = new Text(composite, SWT.READ_ONL Y | SWT.BORDER);
// 水平抢占式充满,并占用三列的空间createGridData是自定义方法
text.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 3));
// 图片部分,我们再用一个面板嵌套来管理
Composite photoComp = new Composite(composite, SWT.BORDER);
// 水平垂直对齐式充满,横占两列,竖占4行
photoComp.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL, 2, 4));
photoComp.setLayout(new GridLayout(2, false));// 分2列
{
// 图片Image类的使用暂还没讲到,我们先用一个Composite来代替图片
Composite tempComp = new Composite(photoComp, SWT.BORDER);
tempComp.setLayoutData(new GridData(50, 50));// 设定大小;宽50,高50
// 选择图片的箭头型按钮,并设置它向下靠
Button selPhotoButton = new Button(photoComp, SWT.ARROW | SWT.DOWN); selPhotoButton.setLayoutData(new GridData(
GridData.VERTICAL_ALIGN_END));
// 升级成为会员的按钮,横占photoComp的两列,并横向对齐充满
Button updateButton = new Button(photoComp, SWT.NONE);
updateButton.setLayoutData(createGridData(
GridData.HORIZONTAL_ALIGN_FILL, 2));
updateButton.setText("升级成为会员");
}
new Label(composite, SWT.NONE).setText("用户昵称");
Text nicknameText = new Text(composite, SWT.BORDER);
nicknameText.setLayoutData(createGridData(
GridData.HORIZONTAL_ALIGN_FILL, 3));
new Label(composite, SWT.NONE).setText("个性签名");
Text attachNameText = new Text(composite, SWT.BORDER);
attachNameText.setLayoutData(createGridData(
GridData.HORIZONTAL_ALIGN_FILL, 3));
new Label(composite, SWT.NONE).setText("等级");
{
// Image类的使用暂还没有讲到,我们先用一个Composite来代替图片
Composite tempComp = new Composite(composite, SWT.BORDER);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL
| GridData.VERTICAL_ALIGN_BEGINNING);
gridData.horizontalSpan = 3;
// Composite默认的高度太高,故手工设定高度为20像素
gridData.heightHint = 20;
tempComp.setLayoutData(gridData);
}
new Label(composite, SWT.NONE).setText("姓名");
Text nameText = new Text(composite, SWT.BORDER);
nameText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
new Label(composite, SWT.NONE).setText("性别");
Combo setCombo = new Combo(composite, SWT.NONE);
new Label(composite, SWT.NONE).setText("年龄");
Text okText = new Text(composite, SWT.BORDER);
okText.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
new Label(composite, SWT.NONE).setText("毕业院校");
Text schoolText = new Text(composite, SWT.BORDER);
schoolText.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL,
3));
new Label(composite, SWT.NONE).setText("生肖");
Combo animalCombo = new Combo(composite, SWT.NONE);
animalCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); new Label(composite, SWT.NONE).setText("职业");
Text jobText = new Text(composite, SWT.BORDER);
jobText
.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL, 3));
new Label(composite, SWT.NONE).setText("星座");
Text starText = new Text(composite, SWT.BORDER);
Label introLabel = new Label(composite, SWT.NONE);
// 默认是居中,改为顶端对齐
introLabel
.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
introLabel.setText("个人说明");
Text introlText = new Text(composite, SWT.BORDER | SWT.WRAP);// WRAP自动换行 introlText.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_VERTICAL, 5));
// 返回个人资料面板composite
return composite;
}
// 生成一个简单的联系方式的面板
private Composite createOtherComp(Composite rightComp) {
Composite composite = new Composite(rightComp, SWT.NONE);
composite.setLayout(new GridLayout(4, false));
new Label(composite, SWT.NONE).setText("国家/地区");
Combo contryCombo = new Combo(composite, SWT.NONE);
contryCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
new Label(composite, SWT.NONE).setText("省份");
Combo stateCombo = new Combo(composite, SWT.NONE);
stateCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
new Label(composite, SWT.NONE).setText("姓名");
Text nameText = new Text(composite, SWT.BORDER);
nameText
.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL, 3));
new Label(composite, SWT.NONE).setText("工号");
Text wnText = new Text(composite, SWT.BORDER);
wnText.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL, 3));
new Label(composite, SWT.NONE).setText("密码");
Text pswText = new Text(composite, SWT.PASSWORD|SWT.BORDER);
pswText
.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL, 3));
return composite;
}
/*
* 生成GridData对象的重复代码太多,写成一个方式可以减少程序的行数,用起来也方便,而且还要注意一个GridData只能被一个组件使用,不能两个组件使用一个GridData,则
*
* 有一个组件将不会显示出来
*/
private GridData createGridData(int style, int horizontalSpan) {
GridData gridData = new GridData(style);
gridData.horizontalSpan = horizontalSpan;
return gridData;
}
private GridData createGridData(int style, int horizontalSpan,
int verticalSpan) {
GridData gridData = new GridData(style);
gridData.horizontalSpan = horizontalSpan;
gridData.verticalSpan = verticalSpan;
return gridData;
}
// 鼠标,采用事件的命名内部类的写法
private class MyMouseListener extends MouseAdapter {
public void mouseDown(MouseEvent e) {
// 得到列表的当前选择项的序号(即单击的那项)
int selectIndex = selectList.getSelectionIndex();
// 如果单击第一项"个人资料",则让相对的面板移至居上面
if (selectIndex == 0)
stackLayout.topControl = yourDataComp;
else
stackLayout.topControl = otherComp;
https://www.wendangku.net/doc/504454795.html,yout();// 刷新堆栈式布局的项容器
}
}
}
度条对话框,源文件内容如下:
package com.awt.sample;
import https://www.wendangku.net/doc/504454795.html,ng.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import https://www.wendangku.net/doc/504454795.html,yout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class ProgressDialog {
public static void main(String[] args) {
// TODO 自动生成方法存根
new ProgressDialog().monitor();
}
public void monitor() {
Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(550, 350);
shell.setLocation(450, 200);
shell.setText("进度条对话框测试");
shell.setLayout(new RowLayout());
Button button = new Button(shell, SWT.BORDER | SWT.CENTER);
button.setText(" GO ");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 第一步:创建一个进度条对话框对象
System.out.println("开始2");
ProgressMonitorDialog pmd = new ProgressMonitorDialog(shell);//ProgressMonitorDialog是SWT的类
第3章课程设计总结
通过这次课程设计,我对JA V A这门程序设计语言进行了一次完整的学习与实践。对JA VA 的常量、变量、运算、类、流程、SWT、窗体和Applet进行了复习与实践,系统的进行了一次软件工程开发,完成了课程设计的任务。
为了能够较好地完成本次课程设计,我进行了阅读教材,网上搜索,到图书馆查找相关资料等准备工作,在做课程设计的过程中,我在利用所学知识的同时,又学到了很多实例化的理论知识和软件工程的一些实践。总结了一些经验和方法。强化了我的实际动手能力。同时也找到自己的不足。我一定会继续学习增加自己的编程能力,在今后的学习中我会更加的努力,增加自己的知识储备。
在掌握JA V A语言程序设计的理论知识的基础上,我能够结合实际,设计编程,调试运行JA V A 语言程序,完成课程设计论文。
这次课程设计,使我对本门课程有了更深一步的理解,《JA V A程序设计》并不是简单的计算机语言,它能够延伸到更宽更广的领域。学好这些知识也能为自己在以后学习动态网页制作打下坚实的基础。
最后感谢老师给予的耐心指导与帮助。
参考文献
[1] 耿祥义.《JA V A大学实用教程》. 北京:电子工业出版社. 2005年3月
[2] 耿祥义.《JA V A大学实用教程实验指导》.北京:电子工业出版社. 2005年3月
[3] [美]Cay S.Horstmann,程峰.《JA V A2核心技术》. 北京: 机械工业出版社. 2003年6月
[4] 张浩军.《Eclipse应用与实践》. 北京:高等教育出版社. 2006年9月
[5] 魏永继.《JA V A应用程序开发》. 北京:机械工业出版社. 2007年2月
[6] 胡祖荣,王雪轻.《JA V A入门与提高》. 北京:人民邮电出版社. 2004年2月
[7] 王永先.《J2SDK开发应用》. 武汉:华中科技大学出版社. 2005年9月
[8] 赵如艳.《JA V A软件工程》. 沈阳:东北大学出版社. 2007年2月
[9] 王新强,吴广智.《JA V A程序设计》. 北京:清华大学出版社. 2004年8月
[10] 李宇.《从零开始JA V A语言培训教程》. 北京:人民邮电出版社. 2005年6月