QQ个人资料java课程设计.docx
《QQ个人资料java课程设计.docx》由会员分享,可在线阅读,更多相关《QQ个人资料java课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
QQ个人资料java课程设计
辽宁工业大学
JAVA程序设计课程设计(论文)
题目:
QQ个人资料
院(系):
软件学院
专业班级:
计算机信息管理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课程设计目的
《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是电子商务专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2课程设计的实验环境
硬件要求能运行Windows9.X操作系统的微机系统。
JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。
1.3课程设计的预备知识
熟悉JAVA语言及ECLIPSE开发工具。
1.4课程设计要求
按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
第2章课程设计内容
2.1课程设计题目
QQ个人资料
2.2课程设计整体设计说明
这次课程设计是制作一个QQ个人资料窗体,
这次我使用的编程语言是JAVA语言。
我采用的编译环境是WindowsXP中文版+J2SDK1.6.0中文版+Eclipse3.2.1+Eclipse3.2.1中文语言包+SWTdesigner5.1.0
使用JAVA语言及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)安装SWTdesigner,将下载的压缩包按原路径解压即可,也就是直接覆盖eclipse文件夹下的features、plugins两个文件夹。
(二)进入Eclipse平台新建JAVA项目、新建包、新建类
(三)打开eclipse,首先选择工作空间,点击“浏览”选择路径。
(四)在Eclipse内,选择菜单项文件>新建>项目...Designer>SWT/JFaceJavaProject以新建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(InterruptedExceptione){
System.out.println("异常");
}
很多Java™语言方法,如Thread.sleep()可以抛出InterruptedException异常。
程序需要暂停一段时间,于是调用t.sleep(1000)休眠一秒。
(t.sleep(1000)是Thread.sleep()的一个实例。
)所以我在使用这个方法时先try捕获异常,然后catch处理异常(显示提示信息:
异常)。
2.2.5程序运行效果及存在的问题
在ECLIPSE下编译运行的效果如图。
可以选择年月查看每月日历。
并且能显示当前系统时间和某天是星期几。
可以点击年份后的▼选择年,月份后的▼选择月,点查看按钮查看该月的日历。
存在的问题就是不能显示出农历效果,当然农历的算法比较复杂,就连MicrosoftWindows系统的时间/日期功能也没有提供农历的效果。
2.3程序部分源代码及注释
QQ.java源代码
packagexuliu;
importorg.eclipse.jface.dialogs.MessageDialog;
importorg.eclipse.swt.SWT;
importorg.eclipse.swt.custom.*;
importorg.eclipse.swt.events.MouseAdapter;
importorg.eclipse.swt.events.MouseEvent;
importorg.eclipse.swt.events.MouseListener;
importorg.eclipse.swt.events.SelectionAdapter;
importorg.eclipse.swt.events.SelectionEvent;
importorg.eclipse.swt.layout.GridData;
importorg.eclipse.swt.layout.GridLayout;
importorg.eclipse.swt.layout.RowLayout;
importorg.eclipse.swt.widgets.*;
publicclassQQ{
/*为了自定义监听器类MyMouseListener中的代码能访问到以下对象,故将这些对象定义成类的实例变量*/
privateStackLayoutstackLayout=newStackLayout();
privateCompositeyourDataComp;
privateCompositeotherComp;
privateListselectList;
privateCompositerightComp;
/*由于自定义方法程序较长,这次的主程序框架选择了Eclispe“新建”向导的第二种"publicopen()mothd"*/
publicstaticvoidmain(String[]args){
try{
QQwindow=newQQ();
window.open();
}catch(Exceptione){
e.printStackTrace();
}
}
publicvoidopen(){
Displaydisplay=Display.getDefault();
Shellshell=newShell();
shell.setSize(550,350);
shell.setText("个人设置");
shell.setLayout(newGridLayout());
{
//分割窗口
SashFormsashForm=newSashForm(shell,SWT.BORDER);
sashForm.setLayoutData(newGridData(GridData.FILL_BOTH));
{
//分割窗左边的列表框
selectList=newList(sashForm,SWT.BORDER);
//作为演示只加了两项
selectList.setItems(newString[]{"个人资料","联系方式"});
//加一个鼠标监听器
selectList.addMouseListener((MouseListener)newMyMouseListener());
}
{
//右边的堆栈式面板
rightComp=newComposite(sashForm,SWT.NONE);
rightComp.setLayout(stackLayout);
//共两项,将生成此面板的代码提出成一个方法,保证代码结构的清晰
yourDataComp=createYourDataComp(rightComp);//个人资料的面板
otherComp=createOtherComp(rightComp);//联系方式的面板
//在堆栈面板上先显示"个人资料"界面
stackLayout.topControl=yourDataComp;
}
//分割窗口的左右空间比例
sashForm.setWeights(newint[]{1,4});
}
{
//界面的按钮的面板
CompositebuttonComp=newComposite(shell,SWT.BORDER);
//使用GridData设置buttonsComp在它你容器shell中的布局方式
GridDatagridData=newGridData();
gridData.horizontalAlignment=GridData.END;//让buttonComp向右靠
buttonComp.setLayoutData(gridData);
//设置buttonsComp的布局为RowLayout,用来设定buttonComp内组件的布局方式
RowLayoutrowLayout=newRowLayout();
rowLayout.spacing=15;//按钮之间间隔15个元素
buttonComp.setLayout(rowLayout);
//在buttonComp下建立三个按钮
Buttonbtn1=newButton(buttonComp,SWT.NONE);
btn1.setText("确定");
btn1.addSelectionListener(newSelectionAdapter(){
publicvoidwidgetSelected(SelectionEvente){
MessageDialog.openInformation(null,"提示","你单击了'确定'按钮");
System.exit(0);
}
});
Buttonbtn2=newButton(buttonComp,SWT.NONE);
btn2.setText("取消");
btn2.addSelectionListener(newSelectionAdapter(){
publicvoidwidgetSelected(SelectionEvente){
MessageDialog.openInformation(null,"提示","你单击了'取消'按钮");
System.exit(0);
}
});
Buttonbtn3=newButton(buttonComp,SWT.NONE);
btn3.setText("应用");
btn3.addSelectionListener(newSelectionAdapter(){
publicvoidwidgetSelected(SelectionEvente){
MessageDialog.openInformation(null,"提示","你单击了'应用'按钮");
}
});
}
shell.layout();
shell.open();
while(!
shell.isDisposed()){
if(!
display.readAndDispatch())
display.sleep();
}
}
//个人资料面板的生成
privateCompositecreateYourDataComp(CompositerightComp){
Compositecomposite=newComposite(rightComp,SWT.NONE);
composite.setLayout(newGridLayout(6,false));//个人资料面板分成6列
//用户号码的标签及文本框
newLabel(composite,SWT.NONE).setText("用户号码");
//只读型的文本框
Texttext=newText(composite,SWT.READ_ONLY|SWT.BORDER);
//水平抢占式充满,并占用三列的空间createGridData是自定义方法
text.setLayoutData(createGridData(GridData.FILL_HORIZONTAL,3));
//图片部分,我们再用一个面板嵌套来管理
CompositephotoComp=newComposite(composite,SWT.BORDER);
//水平垂直对齐式充满,横占两列,竖占4行
photoComp.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL
|GridData.VERTICAL_ALIGN_FILL,2,4));
photoComp.setLayout(newGridLayout(2,false));//分2列
{
//图片Image类的使用暂还没讲到,我们先用一个Composite来代替图片
CompositetempComp=newComposite(photoComp,SWT.BORDER);
tempComp.setLayoutData(newGridData(50,50));//设定大小;宽50,高50
//选择图片的箭头型按钮,并设置它向下靠
ButtonselPhotoButton=newButton(photoComp,SWT.ARROW|SWT.DOWN);
selPhotoButton.setLayoutData(newGridData(
GridData.VERTICAL_ALIGN_END));
//升级成为会员的按钮,横占photoComp的两列,并横向对齐充满
ButtonupdateButton=newButton(photoComp,SWT.NONE);
updateButton.setLayoutData(createGridData(
GridData.HORIZONTAL_ALIGN_FILL,2));
updateButton.setText("升级成为会员");
}
newLabel(composite,SWT.NONE).setText("用户昵称");
TextnicknameText=newText(composite,SWT.BORDER);
nicknameText.setLayoutData(createGridData(
GridData.HORIZONTAL_ALIGN_FILL,3));
newLabel(composite,SWT.NONE).setText("个性签名");
TextattachNameText=newText(composite,SWT.BORDER);
attachNameText.setLayoutData(createGridData(
GridData.HORIZONTAL_ALIGN_FILL,3));
newLabel(composite,SWT.NONE).setText("等级");
{
//Image类的使用暂还没有讲到,我们先用一个Composite来代替图片
CompositetempComp=newComposite(composite,SWT.BORDER);
GridDatagridData=newGridData(GridData.FILL_HORIZONTAL
|GridData.VERTICAL_ALIGN_BEGINNING);
gridData.horizontalSpan=3;
//Composite默认的高度太高,故手工设定高度为20像素
gridData.heightHint=20;
tempComp.setLayoutData(gridData);
}
newLabel(composite,SWT.NONE).setText("姓名");
TextnameText=newText(composite,SWT.BORDER);
nameText.setLayoutData(newGridData(GridData.HORIZONTAL_ALIGN_FILL));
newLabel(composite,SWT.NONE).setText("性别");
CombosetCombo=newCombo(composite,SWT.NONE);
newLabel(composite,SWT.NONE).setText("年龄");
TextokText=newText(composite,SWT.BORDER);
okText.setLayoutData(newGridData(GridData.HORIZONTAL_ALIGN_FILL));
newLabel(composite,SWT.NONE).setText("毕业院校");
TextschoolText=newText(composite,SWT.BORDER);
schoolText.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL,
3));
newLabel(composite,SWT.NONE).setText("生肖");
ComboanimalCombo=newCombo(composite,SWT.NONE);
animalCombo.setLayoutData(newGridData(GridData.HORIZONTAL_ALIGN_FILL));
newLabel(composite,SWT.NONE).setText("职业");
TextjobText=newText(composite,SWT.BORDER);
jobText
.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL,3));
newLabel(composite,SWT.NONE).setText("星座");
TextstarText=newText(composite,SWT.BORDER);
LabelintroLabel=newLabel(composite,SWT.NONE);
//默认是居中,改为顶端对齐
introLabel
.setLayoutData(newGridData(GridData.VERTICAL_ALIGN_BEGINNING));
introLabel.setText("个人说明");
TextintrolText=newText(composite,SWT.BORDER|SWT.WRAP);//WRAP自动换行
introlText.setLayoutData(createGridData(GridData.HORIZONTAL_ALIGN_FILL