Java课设留言板.docx
《Java课设留言板.docx》由会员分享,可在线阅读,更多相关《Java课设留言板.docx(15页珍藏版)》请在冰豆网上搜索。
Java课设留言板
华北科技学院
课程设计说明书
班级:
计算B101姓名:
设计题目:
Java留言板设计
设计时间:
2013.1.7至2013.1.11
指导教师:
________________________________
评语:
________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
_____
第1部分《课程设计》目标和内容
《课程设计》实训课程是对学生的一种全面综合训练,它包括需求分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。
是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,课程设计的课题比平时的习题复杂的多,也更接近实际。
课程设计着眼于理论与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养程序设计工作所需要的知识综合能力和动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。
1.1课程设计目标
使学生综合使用所学过的JAVA语言程序设计知识,掌握面向对象程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的面向对象程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。
课程设计的目的和要求:
(1)使学生巩固和加强《JAVA程序设计》课程的理论知识。
(2)使学生掌握JAVA语言的基本概念、语法、语义和数据类型的使用特点。
(3)使学生掌握JAVA语言程序设计的方法及编程技巧,能正确使用JAVA语言编写程序。
(4)进一步理解与运用面向对象程序设计的思想和方法。
(5)使学生掌握调试程序的基本方法及上机操作方法。
(6)掌握书写设计开发文档的能力,使学生学会撰写训练总结报告。
实训的思想和方法还可以作为学生做毕业论文时的参考资料。
(7)通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。
为学生做毕业设计打好基础。
(8)初步掌握开发一个小型实用程序的基本方法:
结合实际应用的要求,使技能训练的内容既覆盖知识点,又接近工程实际需要。
通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。
(9)培养学生的创新能力和创新思维。
学生可以根据指导书和相关文献上的参考方法,自己设计出相应的应用程序。
(10)培养学生良好的程序设计风格。
在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。
学生在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。
1.2训练内容
1.2.1设计环境
1、硬件:
PC机,档次不低于CPU为P4,内存为512M,40G硬盘,其它硬件与此相配套。
2、软件:
操作系统为WindowsXP或Windows2007,设计语言为JAVA。
1.2.2基本要求
(1)课程设计可采取每人一题,可任选一题进行设计,至少包含五个功能模块。
或者每组完成一个课题,每组成员分工合作完成一个课程设计,每个人的任务不同;
(2)可以选择老师提供的参考选题,也可以自选,如果自选,需要将自选题目的详细内容以及实现要求提供给老师,老师批准后方可采用。
(3)要求利用面向对象程序设计方法以及java的编程思想来完成系统的设计;
(4)要求有欢迎界面、菜单、文件操作,数据使用数组、结构体、链表等均可,键盘操作或鼠标操作均可;
(5)模块化程序设计:
要求在设计的过程中,按功能定义函数书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现;
(6)学生所选课题必须上机通过,并获得满意的结果;
(7)程序书写风格:
锯齿型书写格式。
1.2.3设计步骤
(1)根据问题描述,进行需求分析,设计数据存储方式;
(2)总体设计。
分析系统功能,划分功能模块,确定各模块函数名称,对类的接口进行设计;
(3)详细设计。
主程序算法设计和各模块算法设计,对类的实现进行设计;
(4)编程实现;
(5)调试和测试;
(6)完成设计文档和课程设计说明书。
第2部分《课程设计》案例
2.1问题陈述及其需求分析
2.1.1问题陈述
本次课设的目标是制作一个留言板,可以进行简单的留言和回复。
(1)模块的组合及测试,查找出程序的错误并改正;
(2)窗口的创建和分配;设计留言板的界面;
(3)组合其余的工作;使程序完整化;
(4)编写具体的计算方法;添加功能代码。
2.1.2功能需求分析
设计简易计算器程序,实现简单的留言和回复功能,具体任务如下:
(1)留言板窗口界面布局设计;
(2)各种功能的分析;
(3)编程实现具体的留言功能;
(4)运行测试程序,调试纠正运行错误。
(5)调试无误,运行,测试具体留言功能。
2.2总体设计
2.2.1功能结构图设计
依据程序的功能需求,描述该系统功能的结构图如图2所示。
图2系统功能结构图
2.3详细设计
2.3.1留言板设计示意图:
主类和类间关系:
程序编写参照教材例题的格式,主类就是一个main函数,然后通过调用text类的方法来实现留言板的各个功能。
在类text中,要进行初始的布局设计,将留言板窗口的整体布局设计好之后,再在每个JPanel面板行进行局部设计,全部细节设计好之后,可以先运行一下程序,看窗口是否是自己需要的样子,留言板成型后再在按钮上添加监视器,以实现用户对留言板的动态控制。
text类
主类
调用text方法
实现留言板功能
2.3.1运行调试与分析讨论
(1)编译后运行程序出现的最初界面:
(2)在各个文本框中输入文字后,单击“提交”按钮,每个文本框中的文本将会按照事先设定的格式在文本域中输出;当输出文本超出文本域时会出现滚动窗格,以便继续输出文本。
如下图所示:
(3)当需要重新编辑留言但不需要更改主题和留言者的姓名的时候,单击“清空”按钮就可以重新编辑留言,如下图所示:
(4)当需要退出该留言板的编辑时,可以单击窗口右上角的叉号,该界面就会关闭。
2.4设计体会与小结
本次实验主要通过基于AWT的图形用户界面设计,设计出一个可以满足基本需求的留言板,该留言板包括一些常用的标准组件,如标签、按钮、文本框、文本域以及滚动窗格等。
该留言板涵盖了FlowLayout布局、BorderLayout布局和BoxLayout布局,并多次应用中间容器JPanel面板向其中加入各种组件。
在界面布局好了以后,还要通过监听来处理组件上发生的界面事件。
JTextField就可以触发ActionEvent事件,为了监视到ActionEvent事件,事件源要使用addActionEvent()方法获得监视器,然后做出相应的反应,从而实现动态控制。
2.5参考文献
[1]耿祥义,张跃平,《JAVA大学实用教程》,电子工业出版社.
[2]
附件:
参考源程序
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjava.lang.*;
publicclassMessage1
{
publicstaticvoidmain(Stringargs[])
{
Testwin=newTest("留言板");
}
}
classTestextendsJFrameimplementsActionListener,ItemListener
{
JMenuBarmenubar;
JMenumenu1,menu2;
JMenuItemitemCopy,itemCut,itemPaste,itemOpen,itemSave;
JTextAreaSay,Reply;
JPopupMenumenu;
JTextFieldinputName,inputSay,inputReply;
JPanelpSouth,pNorth,pEast;
JButtonA,B,D;
JLabelC1,C2,C3;
JScrollPaneJPane1,JPane2;
JComboBoxListFont;
JSplitPanesplitPane;
Test(Strings)
{
setTitle(s);
menubar=newJMenuBar();
menu1=newJMenu("文件");
itemOpen=newJMenuItem("打开");
itemSave=newJMenuItem("保存");
menu1.add(itemOpen);
menu1.addSeparator();
menu1.add(itemSave);
menubar.add(menu1);
setJMenuBar(menubar);
menu2=newJMenu("编辑");
itemCopy=newJMenuItem("复制");
itemCut=newJMenuItem("剪切");
itemPaste=newJMenuItem("粘贴");
menu2.add(itemCopy);
menu2.addSeparator();
menu2.add(itemCut);
menu2.addSeparator();
menu2.add(itemPaste);
menubar.add(menu2);
menu=newJPopupMenu();
menu.add(itemCopy);
menu.add(itemCut);
menu.add(itemPaste);
inputName=newJTextField(6);
inputSay=newJTextField(20);
inputReply=newJTextField(20);
pNorth=newJPanel();
pSouth=newJPanel();
C1=newJLabel("姓名");
pNorth.add(C1);
pNorth.add(inputName);
C2=newJLabel("留言:
");
pNorth.add(C2);
pNorth.add(inputSay);
C3=newJLabel("回复:
");
pSouth.add(C3);
pSouth.add(inputReply);
B=newJButton("确定");
A=newJButton("确定");
pNorth.add(B);
pSouth.add(A);
B.addActionListener(newActionListener(){//提交留言
publicvoidactionPerformed(ActionEvente)
{
Stringtext1,text2;
text1=inputName.getText();
text2=inputSay.getText();
inputSay.setText(null);
inputName.setText(null);
if(inputSay.getText()!
="")
{
Say.insert("\n",Say.getCaretPosition());
Say.insert(text1+"给您留言:
",Say.getCaretPosition());
Say.insert(text2,Say.getCaretPosition());
}
}
});
add(pNorth,BorderLayout.NORTH);
A.addActionListener(newActionListener(){//提交回复
publicvoidactionPerformed(ActionEvente)
{
Stringtext;
text=inputReply.getText();
inputReply.setText(null);
if(inputReply.getText()!
="")
{
Reply.insert("\n",Reply.getCaretPosition());
Reply.insert("回复留言:
"+text,Reply.getCaretPosition());
}
}
});
add(pSouth,BorderLayout.SOUTH);
Say=newJTextArea("留言内容:
");
Reply=newJTextArea("回复内容:
");
Say.setCaretPosition(5);
Reply.setCaretPosition(5);
Say.addMouseListener(newMouseAdapter(){//弹出式菜单
publicvoidmousePressed(MouseEvente)
{
if(e.getModifiers()==InputEvent.BUTTON3_MASK)
menu.show(inputSay,e.getX(),e.getY());
}
});
Reply.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente)
{
if(e.getModifiers()==InputEvent.BUTTON3_MASK)
menu.show(inputReply,e.getX(),e.getY());
}
});
JPane1=newJScrollPane(Say);
JPane2=newJScrollPane(Reply);
add(JPane1,BorderLayout.CENTER);
add(JPane2,BorderLayout.CENTER);
splitPane=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,Say,Reply);
splitPane.setDividerLocation(400);
pEast=newJPanel();
GraphicsEnvironmentf=GraphicsEnvironment.getLocalGraphicsEnvironment();
StringfontName[]=f.getAvailableFontFamilyNames();
ListFont=newJComboBox(fontName);
pEast.add(newJLabel("字体"));
pEast.add(ListFont);
D=newJButton("清空");
D.addActionListener(newActionListener(){//清空
publicvoidactionPerformed(ActionEvente)
{
Say.setText("留言内容:
");
Reply.setText("回复内容:
");
Say.setCaretPosition(5);
Reply.setCaretPosition(5);
}
});
pEast.add(D);
pEast.setLayout(newGridLayout(9,0,1,10));
add(pEast,BorderLayout.EAST);
add(splitPane,BorderLayout.CENTER);//组件的字体
ListFont.addItemListener(this);
inputSay.addActionListener(this);
itemCopy.addActionListener(this);
itemCut.addActionListener(this);
itemPaste.addActionListener(this);
validate();
setBounds(100,100,600,600);
setSize(1000,500);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoiditemStateChanged(ItemEvente)
{
Stringname=(String)ListFont.getSelectedItem();
Fontf=newFont(name,Font.BOLD,32);
Fontg=newFont(name,Font.ITALIC,12);
Say.setFont(f);
Reply.setFont(f);
inputName.setFont(g);
inputSay.setFont(g);
inputReply.setFont(g);
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==Say)
Say.append(inputName.getText()+"留言:
"+inputSay.getText());
elseif(e.getSource()==itemCopy)
Say.copy();
elseif(e.getSource()==itemCut)
Say.cut();
elseif(e.getSource()==itemPaste)
Say.paste();
elseif(e.getSource()==Reply)
Reply.append("回复留言:
"+inputReply.getText());
elseif(e.getSource()==itemCopy)
Reply.copy();
elseif(e.getSource()==itemCut)
Reply.cut();
elseif(e.getSource()==itemPaste)
Reply.paste();
}
}