《程序语言综合课程设计》
设计报告
学 院: 专业班级: 学 号: 姓 名: 指导老师:
信息工程学院 计算机112班
完成时间:
2013.7.6
目 录
题目一 计算器...................................................... ……………………1
1 题目简介 . ......................................................................................................... 1 2 设计的内容、要求和目标 . ............................................................................. 1 3 总体设计 . ......................................................................................................... 1 4 详细设计及实现 . ............................................................................................. 2 4.1 操作界面设计 . ........................................................................................ 3 4.2 类成员变量及方法设计 .......................................................................... 4 4.3 源代码分析 .............................................................................................. 7 5 系统运行及使用说明 . ................................................................................... 13
题目二 学生信息管理系统 ............................................................... 15
1 题目简介 . ....................................................................................................... 15 2 设计的内容、要求和目标 . ........................................................................... 15 3 总体设计 . ....................................................................................................... 16 3.1 功能模块划分 . ...................................................................................... 15 3.2 功能模块层次及划分 . .......................................................................... 16 3.3 相关类文件 . .......................................................................................... 16 4 数据库设计 . ................................................................................................. 18 4.1 数据库表设计 . ...................................................................................... 18 4.2 数据库表间的关系 . ............................................................................ 19 4.3 数据库的MySQL (SQL )实现 . ...................................................... 19 5 详细设计及实现 . ........................................................................................... 20 5.1 操作界面设计 ........................................................................................ 20 5.2 类成员变量及方法设计 ........................................................................ 20 5.4 源代码分析 ............................................................................................ 21 6 系统运行及使用说明 . ................................................................................... 22 6.1 系统运行 . ................................................................................................ 22 6.2 使用说明 . ................................................................................................ 26
总 结 . ..................................................................................................................... 27
附录 ........................................................................................................................ 28
A.1 题目一关键源码 . ................................................................................ 28
A.2 题目二关键源码 . ................................................................................. 38
题目一 计算器
1 题目简介
本程序采用高级程序语言JA V A 编写, 采用eclipse 工具完成的一个简单的计算器。
2 设计的内容、要求和目标
设计内容:
设计一个GUI 简易计算器,用户可以通过鼠标依次输入参加计算的数值,进行加减乘除,cos 、sin 等混合运算,设计帮助文档。
设计要求:
要求所设计GUI 界面计算器是一个使用方便的程序,能实现基本的加减乘除功能,同时实现退格、清零、sin 、cos 等复杂运算并且设计菜单栏和帮助文档。
设计目标:
添加运算和帮助主题,同时实现树形结构表示帮助主题。
3 总体设计
1、 利用布局管理器设计计算器整体布局,整个系统采用borderlayout 布局,其中使用了6个面板, 各面板分别放置。
2、利用按钮设计计算器的各个运算符和操作符,通过按钮的事件处理实现按钮计算功能。
3、利用文本框显示操作数字和运算结果。 4、利用树的结构设计帮助文档。 JTree 树:
JTree 组件以树结构显示数据项,从中可选择一个或多个数据项。JTree 中数据项通常称为节点。使用JTree 组件需要多个接口和类的配合,除了JTree 类之外,还需要Javax.swing.tree 子包中的树模型类、树节点类,以及Javax.swing.event 子包中的选择时间接口和类等。
DefaultMutableTreeNode 默认可变树节点类
Javax.swing.tree.DefaultMutableTreeNode 默认可变树节点类声明如下:
DefaultMutableTreeNode root = new DefaultMutableTreeNode(" 帮助" );
DefaultMutableTreeNode t1=new DefaultMutableTreeNode(" 帮助信息”);
D efaultMutableTreeNode t2 = new DefaultMutableTreeNode(" 简介" ); DefaultMutableTreeNode t1_1 = new DefaultMutableTreeNode(" 说明" );
5、功能模块图见图1.1
图1.1 功能模块图
4 详细设计及实现
4.1 操作界面设计
1、首先是设计一个大小为(100,50,528,258)的窗口,界面布局应用了borderlayout 布局。将六个面板组合好添加到窗体里面。其中将文本框放置在窗
体的上部,显示按钮的值。窗体的西部放置了计算器的功能按钮,将数字键安置在窗体的中间,而东部则是放置了显示运算过程面板和功能按钮。, 并设置
s aveButton =new JButton(" 保存" );
copyButton =new JButton(" 复制" );
clearButton =new JButton(" 清除" ); 三个按钮。 主界面:
2、帮助文档树的设计:
(1)、采用JFrame 类设计图形用户界面,框架左边使用一个自定义组件MutableJTree 以树结果显示帮助文档;MutableJTree 组件响应选择事件,当选择树中一个接点时,将该节点的所有孩子节点的对象值显示在右边的Jlist 组件中。
(2)、各个节点为DefaultMutableTreeNode 默认可变树节点类。
图1.2 树的结构
4.2 类成员变量及方法设计
计算器主类声明主要是声明各个组件。 菜单项包括帮助主题和关于计算器。
功能键定义区设置好sin ,cos,tan,exp 等按键的布局。 数字键定义区设置好数字键的布局。
计算方法区主要是定义按钮操作事件,实现计算功能。
1、首先声明一个主类CalculatorWindow ,在主类中定义各个组件包括:功能键定义区设置好sin 、cos 、tan 、exp 等按键的布局、数字键定义区设置好数字键的布局、计算方法区主要是定义按钮操作事件,实现计算功能、菜单项包括
帮助和查看。
2、主类中通过调用HandleSin 、HandleCos 、HandleDigit 、HandleExp 等方法实现Sin 、cos 、数字键、exp 等功能。
3、各个类名:
HandleDigit handleDigit; //负责处理ActionEvent 事件
HandleOperation handleOperation ; 实现加、减、乘、除运算
HandleBack handleBack; 实现退格事件
HandleClear handleClear; 实现清零事件
HandleEquality handleEquality; 实现等号事件
HandleDot handleDot; 实现小数点事件
HandlePOrN handlePOrN; 实现正负号事件
HandleSin handleSin; 实现sin 按钮事件
HandleCon handleCos; 实现cos 按钮事件
HandleTan handleTan; 实现Tan 按钮事件
HandleLog handleLog 实现log 按钮事件 ;
HandleExp handleExp; 实现exp 操作
HandleOff handleOff; 关闭
系统流程图
图1.3系统流程图
4.3 源代码分析
1、主要功能实现涉及的类及方法: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.util.LinkedList; import java.io.*; import java.lang.Object;
public class CalculatorWindow extends JFrame implements ActionListener{ NumberButton numberButton[]; OperationButton operationButton[];
JButton 小数点操作, 正负号操作, 退格操作, 等号操作, 清零操作,sin,cos,tan,log,exp,off; JMenuBar bar; JMenu help,view;
JMenuItem about,exit,information;
JTextField resultShow; //显示计算结果 JTextField showComputerProcess; //显示当前计算过程 JTextArea saveComputerProcess; //显示计算步骤 JButton saveButton,copyButton,clearButton;
LinkedList list; //链表用来存放第一个运算数、运算符号和第二个运算数
HandleDigit handleDigit; //负责处理ActionEvent 事件 HandleOperation handleOperation ; HandleBack handleBack; HandleClear handleClear; HandleEquality handleEquality; HandleDot handleDot; HandlePOrN handlePOrN; HandleSin handleSin; HandleCos handleCos; HandleTan handleTan; HandleLog handleLog;
HandleExp handleExp; HandleOff handleOff; public CalculatorWindow(){
在主类中定义各个组件、方法。主类中通过调用各个方法进行运算: 2、HandleCos 方法:实现cos 键运算功能: import java.util.LinkedList; import javax.swing.*; import java.awt.event.*;
public class HandleCos implements ActionListener{ LinkedList list;
JTextField resultShow,showComputerProcess; JTextArea saveComputerProcess; HandleCos(LinkedList t1,JTextField t2,
JTextArea t3){ this.list=list; resultShow=t1;
showComputerProcess=t2; saveComputerProcess=t3; }
public void actionPerformed(ActionEvent e){ if(list.size()==1||list.size()==2){ String numOne=list.getFirst();
try{ double x=Double.parseDouble(numOne); double result=Math.cos(x);
String str=String.valueOf(result); list.set(0,str);
resultShow.setText(str);
String proccess="sin("+numOne+")="+result; showComputerProcess.setText(proccess); saveComputerProcess.append(" "+proccess+"\n");
if(list.size()==2)
list.removeLast(); //移掉运算符号
list,JTextField
}
catch(Exception ee){} }
else if(list.size()==3){
String numTwo=list.getLast();
try{ double x=Double.parseDouble(numTwo); double result=Math.cos(x);
String str=String.valueOf(result); list.set(0,str);
resultShow.setText(str);
String proccess="cos("+numTwo+")="+result; showComputerProcess.setText(proccess); saveComputerProcess.append(" "+proccess+"\n");
list.removeLast(); //移掉第2个运算数 list.removeLast(); //移掉运算符号 }
catch(Exception ee){} }
} }
3、help 类:实现帮助文档: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import java.io.*;
public class Help implements TreeSelectionListener{
JEditorPane editorPane; public Help() {
JFrame help = new JFrame("计算器");
Container contentPane = help.getContentPane(); DefaultMutableTreeNode
root
=
new
DefaultMutableTreeNode("帮助");
tree.getSelectionModel().setSelectionMode(TreeSelectio
tree.addTreeSelectionListener(this);
JScrollPane scrollPane1 = new JScrollPane(tree); editorPane = new JEditorPane();
JScrollPane scrollPane2 = new JScrollPane(editorPane); JSplitPane
splitPane
=
new
nModel.SINGLE_TREE_SELECTION);
DefaultMutableTreeNode DefaultMutableTreeNode DefaultMutableTreeNode root.add(t1); root.add(t2); t1.add(t1_1);
JTree tree = new JTree(root);
t1 t1_1 t2
= = =
new new new
DefaultMutableTreeNode("帮助信息 "); DefaultMutableTreeNode("说明"); DefaultMutableTreeNode("简介");
JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true, scrollPane1, scrollPane2);
}
public void valueChanged(TreeSelectionEvent e) {
JTree tree = (JTree) e.getSource(); DefaultMutableTreeNode
selectionNode
=
contentPane.add(splitPane); help.pack();
help.setBounds(100,50,600,400); help.setVisible(true);
(DefaultMutableTreeNode)
tree.getLastSelectedPathComponent();
String nodeName = selectionNode.toString(); if (selectionNode.isLeaf()) {
String
filepath
=
"file:"
+
System.getProperty("user.dir")+
System.getProperty("file.separator") + nodeName+".txt"; } }
4、HandleDot 类:实现小数点事件: import java.util.LinkedList; import javax.swing.*; import java.awt.event.*;
public class HandleDot implements ActionListener{ LinkedList list;
JTextField resultShow,showComputerProcess; HandleDot(LinkedList t1,JTextField t2){ this.list=list; resultShow=t1;
showComputerProcess=t2; }
public void actionPerformed(ActionEvent e){ String dot=e.getActionCommand(); if(list.size()==1){
String num=list.getFirst(); String s=null;
if(num.indexOf(dot)==-1){ s=num.concat(dot);
list.set(0,s); } else
list,JTextField
}
else editorPane.setText(null); }
try {
editorPane.setPage(filepath); System.out.println("找不到此文件"); } catch (IOException ex) {
s=num; list.set(0,s);
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0)); }
else if(list.size()==3){ String num=list.getLast(); String s=null;
if(num.indexOf(dot)==-1){ s=num.concat(dot); list.set(2,s); } else s=num;
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0)+""+list.get(1)+
""+list.get(2)); } } }
5 系统运行及使用说明
1、系统运行结果
采用
eclipse
工具对程序进行编译运行;运行结果:
图1.4 主界面
图1.5 查看退出
使用说明文档:
图1.6 帮助文档
2、使用说明:
您可以使用计算器进行如加、减、乘、除这样简单的运算。计算器还提供了编程计算器、科学型计算器和统计信息计算器的高级功能。
可以单击计算器按钮来执行计算,或者使用键盘键入进行计算。通过按 Num Lock ,您还可以使用数字键盘键入数字和运算符。
题目二 学生管理系统
1 题目简介
本系统是应用java 语言,在eclipse 环境下,调用SQL 数据库设计的一个简易学生管理系统,系统中包含学号,姓名,性别,专业,,年级,出生,学生六个基本信息。学生管理系统,是为老师和学生提供一个学生管理的平台。长期以来,学校基本都是使用传统人工的方式管理学生信息,效率低、保密性差,随着计算机和网络技术的发展,使用计算机来管理学生信息已经成为发展趋势。因此,基于java 的学生管理系统已成为作为学校管理者不可缺少的部分,应为使用者提供充足的信息和快捷的查询、删除、插入、修改手段。
2 设计的内容、要求和目标
设计内容:
建立学生信息数据库,学生管理系统调用数据库进行登录判断和四个基
本信息进行查询,添加,修改,删除等操作。将查询出来的信息应用表格显示出来,在添加信息面板中,设置该信息的各个组件,要求用户填入数据实现添加功能。修改删除面板中创建该信息的各个组件,从数据库中将该信息显示在组件中,再手动修改数据,实现修改删除功能。
设计要求:
1. 用SQL 或者mysql 设置数据库。 2. 要能够链接上数据库。
3 .在主界面中利用菜单项进行操作。 4. 能够重置学生的信息 5. 设置欢迎界面。
设计目标:
通过对数据库的操作,则进入管理系统的主界面,可以通过主界面提供的菜单,可以实现对学生管理系统的基本添加、查询、删除,修改等操作。
3 总体设计
3.1功能模块划分
1、学生管理系统需要实现查询、修改、删除、插入学生的个人信息功能。
2、在主界面上进行操作。 功能模块图如下:
图2.1 功能模块划分图
3.2 功能模块层次及调用关系
1、功能模块层次
图2.2 功能模块层次及调用关系
2、调用关系
从图2.2知,菜单选项通过调用四个功能函数来实现对数据库的管理。
3.3 相关类文件
首先声明一主类Managerwindow ,在主类中定义各个组件;还包括:对各个类
的调用以及对Frame 类的调用。 Inquest 类:主要实现查询功能模块; Delete 类:主要实现删除功能模块; ModifySituation 类:主要实现修改功能模块; InputStudent 类:主要实现插入功能模块;
通常包括功能模块划分、功能模块层次及调用关系、相关类文件,可分小节介绍。
4 数据库设计
主要阐述数据库的各表、视图、触发器等的结构(表名、各字段名、类型、宽度、精度、是否允许空、是否主键、外键、缺省值)。如果设计题目未涉及数据库则本节省略。。。。。
4.1 数据库表设计
1、使用Microsoft Office Access 新建一数据库student ,设计6个字段Sno 、Sname 、Ssex 、Sspec 、Sgrade 、Sborn 。
2、在字段下面添加数据:
4.2 数据表之间关系
4.3 数据库的MySQL (SQL )实现
1、这里用的是SQL2000 数据库,数据库名称为:stu 2、连接数据库: 创建数据源:
5 详细设计及实现
5.1 操作界面设计
程序首先运行时弹出登陆界面,在登陆界面中提供菜单选项
在菜单选项中添加基本信息录入; 基本信息修改; 基本信息查询; 基本信息删除; 欢迎界面。点击分别弹出录入、修改、查询、删除功能框。
登录界面大小为(600*580),定义一个面板p 将背景图片。
阐述软件的运行及用户操作的界面方案,包括窗口大小、控件布局、文字颜色、字体及操作逻辑等。。。。。。
5.2 类成员及方法设计
1、ManagerWindow.Java
ManagerWindow 类继承了Frame 类之间组合关系 成员变量:
1.JTextField mz 单行文本对象,用于输入学号和显示文本信息。。
2.JMenu filemenu 单按钮对象,用于设置菜单按钮。
3.JMenuItem 录入,修改,查询,删除,欢迎界面子菜单按钮。 4、(JPanel) contentPane 容器
5、( JMenuBar) jMenuBar1用于添加下拉菜单
方法:
1.ManagerWindow()类的构造方法,为所有组件设置布局,添加组件。 2.actionPerformed(ActionEvent e)处理用户判定事件方法。
2、Inquest 类、Inputstudent 类、ModifySituation 类、delete 类。 分别实现对学生管理系统进行查询、插入、修改、删除的功能、
详细阐述各个类的成员变量及方法的实现细节,详细阐述算法逻辑。主要程序应绘制N-S 流程图。。。。。。。
5.3 源代码分析
1、主类ManagerWindow :
public void actionPerformed(ActionEvent e){ if (e.getSource()==录入){
card .show(pCenter , " 录入界面" ); }
else if (e.getSource()==修改){ 基本信息修改.clearMess(); card .show(pCenter , " 修改界面" ); }
else if (e.getSource()==查询){ 基本信息查询.clearMess(); 基本信息查
询.setLocation(getBounds().x +getBounds().width ,getBounds().y ); 基本信息查询.setVisible(true ); }
else if (e.getSource()==删除) card .show(pCenter , " 删除界面" ); else if (e.getSource()==欢迎界面) card .show(pCenter , " 欢迎界面" ); }
public static void main(String args[]){ new ManagerWindow(); }
}
实现对各个功能函数的调用
6系统运行及使用说明
6.1系统运行:
1. 主界面
2、查询功能:
3、插入功能:
4、修改功能:
5、删除功能:
6.2 使用说明
本系统是应用java 语言,在eclipse 环境下,调用SQL 数据库设计的一个简易学生管理系统。
点击运行程序,进入主界面,点击菜单选项进入功能选项: 选择你要进行的功能,查询、修改、插入、删除等学生信息。
对复杂软件系统,说明其安装、运行环境配置要求。写出简要使用说明书。。。。。。
总 结
对几个星期来的课程设计进行全面总结。为期四周的java 课程设计马上就要结束,在这四个星期的设计中我学会了许多,刚开始我对java 课程设计是茫然的,虽然在上个学期学过java ,但是我还从来没有花精力去编写java 程序。
刚开始我对老师给的题目无从下手,对上学期学习的java 知识忘得差不多了,后来我慢慢看课本,渐渐拾起了对java 的记忆,并参照着网上计算器的例子终于能够独立的编写出来了。
第二个程序是学生管理系统,这个程序对于我来说是一个比较大的程序这就要求对类与类之间的关系有一个很好的掌握,通过这个程序的编写,让我更加深入的了解了java 的结构。
附录
A.1 题目一关键源码
(1) 类的CalculatorWindow 方法
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.io.*;
import java.lang.Object;
public class CalculatorWindow extends JFrame implements ActionListener{
NumberButton numberButton[];
OperationButton operationButton[];
JButton 小数点操作, 正负号操作, 退格操作, 等号操作, 清零操作,sin,cos,tan,log,exp,off;
JMenuBar bar;
JMenu help,view;
JMenuItem about,exit,information;
JTextField resultShow; //显示计算结果
JTextField showComputerProcess; //显示当前计算过程
JTextArea saveComputerProcess; //显示计算步骤
JButton saveButton,copyButton,clearButton;
LinkedList list; //链表用来存放第一个运算数、运算符号和第二个运算数
HandleDigit handleDigit; //负责处理ActionEvent 事件
HandleOperation handleOperation ;
HandleBack handleBack;
HandleClear handleClear;
HandleEquality handleEquality;
HandleDot handleDot;
HandlePOrN handlePOrN;
HandleSin handleSin;
HandleCos handleCos;
HandleTan handleTan;
HandleLog handleLog;
HandleExp handleExp;
HandleOff handleOff;
public CalculatorWindow(){
setTitle("计算器");
JPanel panelLeft,panelRight;
list=new LinkedList();
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimesRoman",Font.BOLD,16));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED)); resultShow.setEditable(false);
resultShow.setBackground(Color.white);
showComputerProcess=new JTextField();
showComputerProcess.setHorizontalAlignment(JTextField.CENTER); showComputerProcess.setFont(new Font("Arial",Font.BOLD,16)); showComputerProcess.setBackground(Color.cyan);
showComputerProcess.setEditable(false);
saveComputerProcess=new JTextArea();
saveComputerProcess.setEditable(false);
saveComputerProcess.setFont(new Font("宋体",Font.PLAIN,16)); numberButton=new NumberButton[10];
handleDigit=new HandleDigit(list,resultShow,showComputerProcess); for(int i=0;i
numberButton[i]=new NumberButton(i);
numberButton[i].setFont(new Font("Arial",Font.BOLD,20));
numberButton[i].addActionListener(handleDigit);
}
operationButton=new OperationButton[4];
handleOperation=new HandleOperation(list,resultShow,
showComputerProcess,saveComputerProcess); String 运算符号[]={"+","-","*","/"};
for(int i=0;i
operationButton[i]=new OperationButton(运算符号[i]);
operationButton[i].setFont(new Font("Arial",Font.BOLD,20)); operationButton[i].addActionListener(handleOperation);
}
bar=new JMenuBar();
help=new JMenu("帮助");
view=new JMenu("查看");
about=new JMenuItem("关于");
exit=new JMenuItem("退出");
help.add(about);
view.add(exit);
bar.add(help);
bar.add(view);
setJMenuBar(bar);
exit.addActionListener(this);
about.addActionListener(this);
小数点操作=new JButton(".");
handleDot=new HandleDot(list,resultShow,showComputerProcess); 小数点操作.addActionListener(handleDot);
正负号操作=new JButton("+/-");
handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess); 正负号操作.addActionListener(handlePOrN);
等号操作=new JButton("=");
handleEquality=new HandleEquality(list,resultShow,
showComputerProcess,saveComputerProcess);
等号操作.addActionListener(handleEquality);
sin=new JButton("sin");
handleSin=new HandleSin(list,resultShow,
showComputerProcess,saveComputerProcess); sin.addActionListener(handleSin);
cos=new JButton("cos");
handleCos=new HandleCos(list,resultShow,
showComputerProcess,saveComputerProcess);
cos.addActionListener(handleCos);
tan=new JButton("tan");
handleTan=new HandleTan(list,resultShow,
showComputerProcess,saveComputerProcess);
tan.addActionListener(handleTan);
log=new JButton("log");
handleLog=new HandleLog(list,resultShow,
showComputerProcess,saveComputerProcess);
log.addActionListener(handleLog);
off=new JButton("off");
handleOff=new HandleOff(list,resultShow,showComputerProcess);
off.addActionListener(handleOff);
exp=new JButton("exp");
handleExp=new HandleExp(list,resultShow,
showComputerProcess,saveComputerProcess);
exp.addActionListener(handleExp);
退格操作=new JButton("退格");
handleBack=new HandleBack(list,resultShow,showComputerProcess); 退格操作.addActionListener(handleBack);
清零操作=new JButton("C");
handleClear=new HandleClear(list,resultShow,showComputerProcess); 清零操作.addActionListener(handleClear);
清零操作.setForeground(Color.red);
退格操作.setForeground(Color.red);
等号操作.setForeground(Color.red);
sin.setForeground(Color.blue);
cos.setForeground(Color.blue);
tan.setForeground(Color.blue);
log.setForeground(Color.blue);
exp.setForeground(Color.blue);
正负号操作.setForeground(Color.blue);
小数点操作.setForeground(Color.blue);
panelLeft=new JPanel();
panelRight=new JPanel();
panelLeft.setLayout(new BorderLayout());
JPanel centerInLeft=new JPanel();
panelLeft.add(resultShow,BorderLayout.NORTH);
panelLeft.add(centerInLeft,BorderLayout.CENTER);
centerInLeft.setLayout(new GridLayout(5,5));
centerInLeft.add(numberButton[1]);
centerInLeft.add(numberButton[2]);
centerInLeft.add(numberButton[3]);
centerInLeft.add(operationButton[0]);
centerInLeft.add(off);
centerInLeft.add(numberButton[4]);
centerInLeft.add(numberButton[5]);
centerInLeft.add(numberButton[6]);
centerInLeft.add(operationButton[1]);
centerInLeft.add(退格操作);
centerInLeft.add(numberButton[7]);
centerInLeft.add(numberButton[8]);
centerInLeft.add(numberButton[9]);
centerInLeft.add(operationButton[2]);
centerInLeft.add(清零操作);
centerInLeft.add(numberButton[0]);
centerInLeft.add(小数点操作);
centerInLeft.add(正负号操作);
centerInLeft.add(operationButton[3]);
centerInLeft.add(等号操作);
centerInLeft.add(sin);
centerInLeft.add(cos);
centerInLeft.add(tan);
centerInLeft.add(log);
centerInLeft.add(exp);
panelRight.setLayout(new BorderLayout());
panelRight.add(showComputerProcess,BorderLayout.NORTH); saveButton=new JButton("保存");
copyButton=new JButton("复制");
clearButton=new JButton("清除");
saveButton.setToolTipText("保存计算过程到文件");
copyButton.setToolTipText("复制选中的计算过程");
clearButton.setToolTipText("清除计算过程");
saveButton.addActionListener(this);
copyButton.addActionListener(this);
clearButton.addActionListener(this);
panelRight.add(new
JScrollPane(saveComputerProcess),BorderLayout.CENTER);
JPanel southInPanelRight=new JPanel();
southInPanelRight.add(saveButton);
southInPanelRight.add(copyButton);
southInPanelRight.add(clearButton);
panelRight.add(southInPanelRight,BorderLayout.SOUTH);
JSplitPane split=new JSplitPane
(JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight); add(split,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(100,50,528,258);
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==about) new Help(); int i=JOptionPane.showConfirmDialog(this, "终止当前程序运行?"); if (i==JOptionPane.YES_OPTION) System.exit(0); if(e.getSource()==exit){
}
if(e.getSource()==copyButton)
saveComputerProcess.copy();
if(e.getSource()==clearButton)
saveComputerProcess.setText(null);
if(e.getSource()==saveButton){
JFileChooser chooser=new JFileChooser();
int state=chooser.showSaveDialog(null);
File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){ try{ String content=saveComputerProcess.getText(); StringReader read=new StringReader(content); BufferedReader in= new BufferedReader(read); FileWriter outOne=new FileWriter(file);
BufferedWriter out= new BufferedWriter(outOne); String str=null;
while((str=in.readLine())!=null){
out.write(str);
out.newLine();
}
in.close();
out.close();
}
catch(IOException e1){}
}
}
}
public static void main(String args[]){
new CalculatorWindow();
}
}
(2) HandleSin类
import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleSin implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess; JTextArea saveComputerProcess;
HandleSin(LinkedList list,JTextField t1,JTextField t2, JTextArea t3){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
saveComputerProcess=t3;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1||list.size()==2){
String numOne=list.getFirst();
try{ double x=Double.parseDouble(numOne);
double result=Math.sin(x);
String str=String.valueOf(result);
list.set(0,str);
resultShow.setText(str);
String proccess="sin("+numOne+")="+result; showComputerProcess.setText(proccess);
saveComputerProcess.append(" "+proccess+"\n"); if(list.size()==2)
list.removeLast(); //移掉运算符号
}
catch(Exception ee){}
}
else if(list.size()==3){
String numTwo=list.getLast();
try{ double x=Double.parseDouble(numTwo);
double result=Math.sin(x);
String str=String.valueOf(result); list.set(0,str);
resultShow.setText(str);
}
}
}
String proccess="sin("+numTwo+")="+result; showComputerProcess.setText(proccess); saveComputerProcess.append(" "+proccess+"\n"); list.removeLast(); //移掉第2个运算数 list.removeLast(); //移掉运算符号 } catch(Exception ee){}
A.2 题目二关键源码
(1) ManagerWindow 类的ManagerWindow 方法
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.HashMap;
public class ManagerWindow extends JFrame implements ActionListener{
InputStudent 基本信息录入;
ModifySituation 基本信息修改;
Inquest 基本信息查询;
Delete 基本信息删除;
JMenuBar bar;
JMenu fileMenu;
JMenuItem 录入, 修改, 查询, 删除, 欢迎界面;
HashMap 基本信息=null;
File file=null;
CardLayout card=null;
JLabel label=null;
JPanel pCenter;
public ManagerWindow(){
setTitle("学生管理系统");
录入=new JMenuItem("录入学生基本信息");
修改=new JMenuItem("修改学生基本信息");
查询=new JMenuItem("查询学生基本信息");
删除=new JMenuItem("删除学生基本信息");
欢迎界面=new JMenuItem("欢迎界面");
bar=new JMenuBar();
fileMenu=new JMenu("菜单选项");
fileMenu.add(录入);
fileMenu.add(修改);
fileMenu.add(查询);
fileMenu.add(删除);
fileMenu.add(欢迎界面);
bar.add(fileMenu);
setJMenuBar(bar);
label=new JLabel("学籍管理系统",JLabel.CENTER);
label.setIcon(new ImageIcon("welcome.jpg"));
label.setFont(new Font("隶书",Font.BOLD,36));
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setForeground(Color.red);
基本信息=new HashMap();
录入.addActionListener(this);
修改.addActionListener(this);
查询.addActionListener(this);
删除.addActionListener(this);
欢迎界面.addActionListener(this);
card=new CardLayout();
pCenter=new JPanel();
pCenter.setLayout(card);
//file=new File("基本信息.txt");
/*if(!file.exists()){
try{
FileOutputStream out=new FileOutputStream(file);
ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(基本信息);
objectOut.close();
out.close();
}
catch(IOException e){}
}*/
基本信息录入=new InputStudent(file);
基本信息修改=new ModifySituation(file);
基本信息查询=new Inquest(file);
基本信息删除=new Delete(file);
pCenter.add("欢迎界面",label);
pCenter.add("录入界面", 基本信息录入);
pCenter.add("修改界面", 基本信息修改);
pCenter.add("删除界面", 基本信息删除);
add(pCenter,BorderLayout.CENTER);
validate();
setVisible(true);
setBounds(100,50,660,580);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
int n=JOptionPane.showConfirmDialog(null,"确认退出吗?"," 确认对话框",
JOptionPane.YES_NO_OPTION );
if(n==JOptionPane.YES_OPTION)
System.exit(0);
}});
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==录入){
card.show(pCenter,"录入界面");
}
else if(e.getSource()==修改){
基本信息修改.clearMess();
card.show(pCenter,"修改界面");
}
else if(e.getSource()==查询){
基本信息查询.clearMess();
基本信息查询.setLocation(getBounds().x+getBounds().width,getBounds().y);
基本信息查询.setVisible(true);
}
else if(e.getSource()==删除)
card.show(pCenter,"删除界面");
else if(e.getSource()==欢迎界面)
card.show(pCenter,"欢迎界面");
}
public static void main(String args[]){
new ManagerWindow();
}
}
(2) inquest类的query ()方法
public void query() throws SQLException
{
String Sno,Sname,Ssex,Sspec,Sgrade,Sborn;
Con =DriverManager.getConnection ("jdbc:odbc:stu");
ResultSet rs=Stmt .executeQuery("SELECT * FROM stu"); while (rs.next())
{
Sno=rs.getString("Sno" );
Sname=rs.getString("Sname" );
Ssex=rs.getString("Ssex" );
Sspec=rs.getString("Sspec" );
Sgrade=rs.getString("Sgrade" );
Sborn=rs.getString("Sborn" );
if (Sno.trim().equals(学号.getText().trim()))
{
姓名.setText(Sname); 性别.setText(Ssex); 专业.setText(Sspec); 年级.setText(Sgrade); 出生.setText(Sborn); search_record=1; break ; }
}
if (search_record==0)
{
姓名.setText(" 没有该学生" ); }
}
《程序语言综合课程设计》
设计报告
学 院: 专业班级: 学 号: 姓 名: 指导老师:
信息工程学院 计算机112班
完成时间:
2013.7.6
目 录
题目一 计算器...................................................... ……………………1
1 题目简介 . ......................................................................................................... 1 2 设计的内容、要求和目标 . ............................................................................. 1 3 总体设计 . ......................................................................................................... 1 4 详细设计及实现 . ............................................................................................. 2 4.1 操作界面设计 . ........................................................................................ 3 4.2 类成员变量及方法设计 .......................................................................... 4 4.3 源代码分析 .............................................................................................. 7 5 系统运行及使用说明 . ................................................................................... 13
题目二 学生信息管理系统 ............................................................... 15
1 题目简介 . ....................................................................................................... 15 2 设计的内容、要求和目标 . ........................................................................... 15 3 总体设计 . ....................................................................................................... 16 3.1 功能模块划分 . ...................................................................................... 15 3.2 功能模块层次及划分 . .......................................................................... 16 3.3 相关类文件 . .......................................................................................... 16 4 数据库设计 . ................................................................................................. 18 4.1 数据库表设计 . ...................................................................................... 18 4.2 数据库表间的关系 . ............................................................................ 19 4.3 数据库的MySQL (SQL )实现 . ...................................................... 19 5 详细设计及实现 . ........................................................................................... 20 5.1 操作界面设计 ........................................................................................ 20 5.2 类成员变量及方法设计 ........................................................................ 20 5.4 源代码分析 ............................................................................................ 21 6 系统运行及使用说明 . ................................................................................... 22 6.1 系统运行 . ................................................................................................ 22 6.2 使用说明 . ................................................................................................ 26
总 结 . ..................................................................................................................... 27
附录 ........................................................................................................................ 28
A.1 题目一关键源码 . ................................................................................ 28
A.2 题目二关键源码 . ................................................................................. 38
题目一 计算器
1 题目简介
本程序采用高级程序语言JA V A 编写, 采用eclipse 工具完成的一个简单的计算器。
2 设计的内容、要求和目标
设计内容:
设计一个GUI 简易计算器,用户可以通过鼠标依次输入参加计算的数值,进行加减乘除,cos 、sin 等混合运算,设计帮助文档。
设计要求:
要求所设计GUI 界面计算器是一个使用方便的程序,能实现基本的加减乘除功能,同时实现退格、清零、sin 、cos 等复杂运算并且设计菜单栏和帮助文档。
设计目标:
添加运算和帮助主题,同时实现树形结构表示帮助主题。
3 总体设计
1、 利用布局管理器设计计算器整体布局,整个系统采用borderlayout 布局,其中使用了6个面板, 各面板分别放置。
2、利用按钮设计计算器的各个运算符和操作符,通过按钮的事件处理实现按钮计算功能。
3、利用文本框显示操作数字和运算结果。 4、利用树的结构设计帮助文档。 JTree 树:
JTree 组件以树结构显示数据项,从中可选择一个或多个数据项。JTree 中数据项通常称为节点。使用JTree 组件需要多个接口和类的配合,除了JTree 类之外,还需要Javax.swing.tree 子包中的树模型类、树节点类,以及Javax.swing.event 子包中的选择时间接口和类等。
DefaultMutableTreeNode 默认可变树节点类
Javax.swing.tree.DefaultMutableTreeNode 默认可变树节点类声明如下:
DefaultMutableTreeNode root = new DefaultMutableTreeNode(" 帮助" );
DefaultMutableTreeNode t1=new DefaultMutableTreeNode(" 帮助信息”);
D efaultMutableTreeNode t2 = new DefaultMutableTreeNode(" 简介" ); DefaultMutableTreeNode t1_1 = new DefaultMutableTreeNode(" 说明" );
5、功能模块图见图1.1
图1.1 功能模块图
4 详细设计及实现
4.1 操作界面设计
1、首先是设计一个大小为(100,50,528,258)的窗口,界面布局应用了borderlayout 布局。将六个面板组合好添加到窗体里面。其中将文本框放置在窗
体的上部,显示按钮的值。窗体的西部放置了计算器的功能按钮,将数字键安置在窗体的中间,而东部则是放置了显示运算过程面板和功能按钮。, 并设置
s aveButton =new JButton(" 保存" );
copyButton =new JButton(" 复制" );
clearButton =new JButton(" 清除" ); 三个按钮。 主界面:
2、帮助文档树的设计:
(1)、采用JFrame 类设计图形用户界面,框架左边使用一个自定义组件MutableJTree 以树结果显示帮助文档;MutableJTree 组件响应选择事件,当选择树中一个接点时,将该节点的所有孩子节点的对象值显示在右边的Jlist 组件中。
(2)、各个节点为DefaultMutableTreeNode 默认可变树节点类。
图1.2 树的结构
4.2 类成员变量及方法设计
计算器主类声明主要是声明各个组件。 菜单项包括帮助主题和关于计算器。
功能键定义区设置好sin ,cos,tan,exp 等按键的布局。 数字键定义区设置好数字键的布局。
计算方法区主要是定义按钮操作事件,实现计算功能。
1、首先声明一个主类CalculatorWindow ,在主类中定义各个组件包括:功能键定义区设置好sin 、cos 、tan 、exp 等按键的布局、数字键定义区设置好数字键的布局、计算方法区主要是定义按钮操作事件,实现计算功能、菜单项包括
帮助和查看。
2、主类中通过调用HandleSin 、HandleCos 、HandleDigit 、HandleExp 等方法实现Sin 、cos 、数字键、exp 等功能。
3、各个类名:
HandleDigit handleDigit; //负责处理ActionEvent 事件
HandleOperation handleOperation ; 实现加、减、乘、除运算
HandleBack handleBack; 实现退格事件
HandleClear handleClear; 实现清零事件
HandleEquality handleEquality; 实现等号事件
HandleDot handleDot; 实现小数点事件
HandlePOrN handlePOrN; 实现正负号事件
HandleSin handleSin; 实现sin 按钮事件
HandleCon handleCos; 实现cos 按钮事件
HandleTan handleTan; 实现Tan 按钮事件
HandleLog handleLog 实现log 按钮事件 ;
HandleExp handleExp; 实现exp 操作
HandleOff handleOff; 关闭
系统流程图
图1.3系统流程图
4.3 源代码分析
1、主要功能实现涉及的类及方法: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.util.LinkedList; import java.io.*; import java.lang.Object;
public class CalculatorWindow extends JFrame implements ActionListener{ NumberButton numberButton[]; OperationButton operationButton[];
JButton 小数点操作, 正负号操作, 退格操作, 等号操作, 清零操作,sin,cos,tan,log,exp,off; JMenuBar bar; JMenu help,view;
JMenuItem about,exit,information;
JTextField resultShow; //显示计算结果 JTextField showComputerProcess; //显示当前计算过程 JTextArea saveComputerProcess; //显示计算步骤 JButton saveButton,copyButton,clearButton;
LinkedList list; //链表用来存放第一个运算数、运算符号和第二个运算数
HandleDigit handleDigit; //负责处理ActionEvent 事件 HandleOperation handleOperation ; HandleBack handleBack; HandleClear handleClear; HandleEquality handleEquality; HandleDot handleDot; HandlePOrN handlePOrN; HandleSin handleSin; HandleCos handleCos; HandleTan handleTan; HandleLog handleLog;
HandleExp handleExp; HandleOff handleOff; public CalculatorWindow(){
在主类中定义各个组件、方法。主类中通过调用各个方法进行运算: 2、HandleCos 方法:实现cos 键运算功能: import java.util.LinkedList; import javax.swing.*; import java.awt.event.*;
public class HandleCos implements ActionListener{ LinkedList list;
JTextField resultShow,showComputerProcess; JTextArea saveComputerProcess; HandleCos(LinkedList t1,JTextField t2,
JTextArea t3){ this.list=list; resultShow=t1;
showComputerProcess=t2; saveComputerProcess=t3; }
public void actionPerformed(ActionEvent e){ if(list.size()==1||list.size()==2){ String numOne=list.getFirst();
try{ double x=Double.parseDouble(numOne); double result=Math.cos(x);
String str=String.valueOf(result); list.set(0,str);
resultShow.setText(str);
String proccess="sin("+numOne+")="+result; showComputerProcess.setText(proccess); saveComputerProcess.append(" "+proccess+"\n");
if(list.size()==2)
list.removeLast(); //移掉运算符号
list,JTextField
}
catch(Exception ee){} }
else if(list.size()==3){
String numTwo=list.getLast();
try{ double x=Double.parseDouble(numTwo); double result=Math.cos(x);
String str=String.valueOf(result); list.set(0,str);
resultShow.setText(str);
String proccess="cos("+numTwo+")="+result; showComputerProcess.setText(proccess); saveComputerProcess.append(" "+proccess+"\n");
list.removeLast(); //移掉第2个运算数 list.removeLast(); //移掉运算符号 }
catch(Exception ee){} }
} }
3、help 类:实现帮助文档: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import java.io.*;
public class Help implements TreeSelectionListener{
JEditorPane editorPane; public Help() {
JFrame help = new JFrame("计算器");
Container contentPane = help.getContentPane(); DefaultMutableTreeNode
root
=
new
DefaultMutableTreeNode("帮助");
tree.getSelectionModel().setSelectionMode(TreeSelectio
tree.addTreeSelectionListener(this);
JScrollPane scrollPane1 = new JScrollPane(tree); editorPane = new JEditorPane();
JScrollPane scrollPane2 = new JScrollPane(editorPane); JSplitPane
splitPane
=
new
nModel.SINGLE_TREE_SELECTION);
DefaultMutableTreeNode DefaultMutableTreeNode DefaultMutableTreeNode root.add(t1); root.add(t2); t1.add(t1_1);
JTree tree = new JTree(root);
t1 t1_1 t2
= = =
new new new
DefaultMutableTreeNode("帮助信息 "); DefaultMutableTreeNode("说明"); DefaultMutableTreeNode("简介");
JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true, scrollPane1, scrollPane2);
}
public void valueChanged(TreeSelectionEvent e) {
JTree tree = (JTree) e.getSource(); DefaultMutableTreeNode
selectionNode
=
contentPane.add(splitPane); help.pack();
help.setBounds(100,50,600,400); help.setVisible(true);
(DefaultMutableTreeNode)
tree.getLastSelectedPathComponent();
String nodeName = selectionNode.toString(); if (selectionNode.isLeaf()) {
String
filepath
=
"file:"
+
System.getProperty("user.dir")+
System.getProperty("file.separator") + nodeName+".txt"; } }
4、HandleDot 类:实现小数点事件: import java.util.LinkedList; import javax.swing.*; import java.awt.event.*;
public class HandleDot implements ActionListener{ LinkedList list;
JTextField resultShow,showComputerProcess; HandleDot(LinkedList t1,JTextField t2){ this.list=list; resultShow=t1;
showComputerProcess=t2; }
public void actionPerformed(ActionEvent e){ String dot=e.getActionCommand(); if(list.size()==1){
String num=list.getFirst(); String s=null;
if(num.indexOf(dot)==-1){ s=num.concat(dot);
list.set(0,s); } else
list,JTextField
}
else editorPane.setText(null); }
try {
editorPane.setPage(filepath); System.out.println("找不到此文件"); } catch (IOException ex) {
s=num; list.set(0,s);
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0)); }
else if(list.size()==3){ String num=list.getLast(); String s=null;
if(num.indexOf(dot)==-1){ s=num.concat(dot); list.set(2,s); } else s=num;
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0)+""+list.get(1)+
""+list.get(2)); } } }
5 系统运行及使用说明
1、系统运行结果
采用
eclipse
工具对程序进行编译运行;运行结果:
图1.4 主界面
图1.5 查看退出
使用说明文档:
图1.6 帮助文档
2、使用说明:
您可以使用计算器进行如加、减、乘、除这样简单的运算。计算器还提供了编程计算器、科学型计算器和统计信息计算器的高级功能。
可以单击计算器按钮来执行计算,或者使用键盘键入进行计算。通过按 Num Lock ,您还可以使用数字键盘键入数字和运算符。
题目二 学生管理系统
1 题目简介
本系统是应用java 语言,在eclipse 环境下,调用SQL 数据库设计的一个简易学生管理系统,系统中包含学号,姓名,性别,专业,,年级,出生,学生六个基本信息。学生管理系统,是为老师和学生提供一个学生管理的平台。长期以来,学校基本都是使用传统人工的方式管理学生信息,效率低、保密性差,随着计算机和网络技术的发展,使用计算机来管理学生信息已经成为发展趋势。因此,基于java 的学生管理系统已成为作为学校管理者不可缺少的部分,应为使用者提供充足的信息和快捷的查询、删除、插入、修改手段。
2 设计的内容、要求和目标
设计内容:
建立学生信息数据库,学生管理系统调用数据库进行登录判断和四个基
本信息进行查询,添加,修改,删除等操作。将查询出来的信息应用表格显示出来,在添加信息面板中,设置该信息的各个组件,要求用户填入数据实现添加功能。修改删除面板中创建该信息的各个组件,从数据库中将该信息显示在组件中,再手动修改数据,实现修改删除功能。
设计要求:
1. 用SQL 或者mysql 设置数据库。 2. 要能够链接上数据库。
3 .在主界面中利用菜单项进行操作。 4. 能够重置学生的信息 5. 设置欢迎界面。
设计目标:
通过对数据库的操作,则进入管理系统的主界面,可以通过主界面提供的菜单,可以实现对学生管理系统的基本添加、查询、删除,修改等操作。
3 总体设计
3.1功能模块划分
1、学生管理系统需要实现查询、修改、删除、插入学生的个人信息功能。
2、在主界面上进行操作。 功能模块图如下:
图2.1 功能模块划分图
3.2 功能模块层次及调用关系
1、功能模块层次
图2.2 功能模块层次及调用关系
2、调用关系
从图2.2知,菜单选项通过调用四个功能函数来实现对数据库的管理。
3.3 相关类文件
首先声明一主类Managerwindow ,在主类中定义各个组件;还包括:对各个类
的调用以及对Frame 类的调用。 Inquest 类:主要实现查询功能模块; Delete 类:主要实现删除功能模块; ModifySituation 类:主要实现修改功能模块; InputStudent 类:主要实现插入功能模块;
通常包括功能模块划分、功能模块层次及调用关系、相关类文件,可分小节介绍。
4 数据库设计
主要阐述数据库的各表、视图、触发器等的结构(表名、各字段名、类型、宽度、精度、是否允许空、是否主键、外键、缺省值)。如果设计题目未涉及数据库则本节省略。。。。。
4.1 数据库表设计
1、使用Microsoft Office Access 新建一数据库student ,设计6个字段Sno 、Sname 、Ssex 、Sspec 、Sgrade 、Sborn 。
2、在字段下面添加数据:
4.2 数据表之间关系
4.3 数据库的MySQL (SQL )实现
1、这里用的是SQL2000 数据库,数据库名称为:stu 2、连接数据库: 创建数据源:
5 详细设计及实现
5.1 操作界面设计
程序首先运行时弹出登陆界面,在登陆界面中提供菜单选项
在菜单选项中添加基本信息录入; 基本信息修改; 基本信息查询; 基本信息删除; 欢迎界面。点击分别弹出录入、修改、查询、删除功能框。
登录界面大小为(600*580),定义一个面板p 将背景图片。
阐述软件的运行及用户操作的界面方案,包括窗口大小、控件布局、文字颜色、字体及操作逻辑等。。。。。。
5.2 类成员及方法设计
1、ManagerWindow.Java
ManagerWindow 类继承了Frame 类之间组合关系 成员变量:
1.JTextField mz 单行文本对象,用于输入学号和显示文本信息。。
2.JMenu filemenu 单按钮对象,用于设置菜单按钮。
3.JMenuItem 录入,修改,查询,删除,欢迎界面子菜单按钮。 4、(JPanel) contentPane 容器
5、( JMenuBar) jMenuBar1用于添加下拉菜单
方法:
1.ManagerWindow()类的构造方法,为所有组件设置布局,添加组件。 2.actionPerformed(ActionEvent e)处理用户判定事件方法。
2、Inquest 类、Inputstudent 类、ModifySituation 类、delete 类。 分别实现对学生管理系统进行查询、插入、修改、删除的功能、
详细阐述各个类的成员变量及方法的实现细节,详细阐述算法逻辑。主要程序应绘制N-S 流程图。。。。。。。
5.3 源代码分析
1、主类ManagerWindow :
public void actionPerformed(ActionEvent e){ if (e.getSource()==录入){
card .show(pCenter , " 录入界面" ); }
else if (e.getSource()==修改){ 基本信息修改.clearMess(); card .show(pCenter , " 修改界面" ); }
else if (e.getSource()==查询){ 基本信息查询.clearMess(); 基本信息查
询.setLocation(getBounds().x +getBounds().width ,getBounds().y ); 基本信息查询.setVisible(true ); }
else if (e.getSource()==删除) card .show(pCenter , " 删除界面" ); else if (e.getSource()==欢迎界面) card .show(pCenter , " 欢迎界面" ); }
public static void main(String args[]){ new ManagerWindow(); }
}
实现对各个功能函数的调用
6系统运行及使用说明
6.1系统运行:
1. 主界面
2、查询功能:
3、插入功能:
4、修改功能:
5、删除功能:
6.2 使用说明
本系统是应用java 语言,在eclipse 环境下,调用SQL 数据库设计的一个简易学生管理系统。
点击运行程序,进入主界面,点击菜单选项进入功能选项: 选择你要进行的功能,查询、修改、插入、删除等学生信息。
对复杂软件系统,说明其安装、运行环境配置要求。写出简要使用说明书。。。。。。
总 结
对几个星期来的课程设计进行全面总结。为期四周的java 课程设计马上就要结束,在这四个星期的设计中我学会了许多,刚开始我对java 课程设计是茫然的,虽然在上个学期学过java ,但是我还从来没有花精力去编写java 程序。
刚开始我对老师给的题目无从下手,对上学期学习的java 知识忘得差不多了,后来我慢慢看课本,渐渐拾起了对java 的记忆,并参照着网上计算器的例子终于能够独立的编写出来了。
第二个程序是学生管理系统,这个程序对于我来说是一个比较大的程序这就要求对类与类之间的关系有一个很好的掌握,通过这个程序的编写,让我更加深入的了解了java 的结构。
附录
A.1 题目一关键源码
(1) 类的CalculatorWindow 方法
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.io.*;
import java.lang.Object;
public class CalculatorWindow extends JFrame implements ActionListener{
NumberButton numberButton[];
OperationButton operationButton[];
JButton 小数点操作, 正负号操作, 退格操作, 等号操作, 清零操作,sin,cos,tan,log,exp,off;
JMenuBar bar;
JMenu help,view;
JMenuItem about,exit,information;
JTextField resultShow; //显示计算结果
JTextField showComputerProcess; //显示当前计算过程
JTextArea saveComputerProcess; //显示计算步骤
JButton saveButton,copyButton,clearButton;
LinkedList list; //链表用来存放第一个运算数、运算符号和第二个运算数
HandleDigit handleDigit; //负责处理ActionEvent 事件
HandleOperation handleOperation ;
HandleBack handleBack;
HandleClear handleClear;
HandleEquality handleEquality;
HandleDot handleDot;
HandlePOrN handlePOrN;
HandleSin handleSin;
HandleCos handleCos;
HandleTan handleTan;
HandleLog handleLog;
HandleExp handleExp;
HandleOff handleOff;
public CalculatorWindow(){
setTitle("计算器");
JPanel panelLeft,panelRight;
list=new LinkedList();
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimesRoman",Font.BOLD,16));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED)); resultShow.setEditable(false);
resultShow.setBackground(Color.white);
showComputerProcess=new JTextField();
showComputerProcess.setHorizontalAlignment(JTextField.CENTER); showComputerProcess.setFont(new Font("Arial",Font.BOLD,16)); showComputerProcess.setBackground(Color.cyan);
showComputerProcess.setEditable(false);
saveComputerProcess=new JTextArea();
saveComputerProcess.setEditable(false);
saveComputerProcess.setFont(new Font("宋体",Font.PLAIN,16)); numberButton=new NumberButton[10];
handleDigit=new HandleDigit(list,resultShow,showComputerProcess); for(int i=0;i
numberButton[i]=new NumberButton(i);
numberButton[i].setFont(new Font("Arial",Font.BOLD,20));
numberButton[i].addActionListener(handleDigit);
}
operationButton=new OperationButton[4];
handleOperation=new HandleOperation(list,resultShow,
showComputerProcess,saveComputerProcess); String 运算符号[]={"+","-","*","/"};
for(int i=0;i
operationButton[i]=new OperationButton(运算符号[i]);
operationButton[i].setFont(new Font("Arial",Font.BOLD,20)); operationButton[i].addActionListener(handleOperation);
}
bar=new JMenuBar();
help=new JMenu("帮助");
view=new JMenu("查看");
about=new JMenuItem("关于");
exit=new JMenuItem("退出");
help.add(about);
view.add(exit);
bar.add(help);
bar.add(view);
setJMenuBar(bar);
exit.addActionListener(this);
about.addActionListener(this);
小数点操作=new JButton(".");
handleDot=new HandleDot(list,resultShow,showComputerProcess); 小数点操作.addActionListener(handleDot);
正负号操作=new JButton("+/-");
handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess); 正负号操作.addActionListener(handlePOrN);
等号操作=new JButton("=");
handleEquality=new HandleEquality(list,resultShow,
showComputerProcess,saveComputerProcess);
等号操作.addActionListener(handleEquality);
sin=new JButton("sin");
handleSin=new HandleSin(list,resultShow,
showComputerProcess,saveComputerProcess); sin.addActionListener(handleSin);
cos=new JButton("cos");
handleCos=new HandleCos(list,resultShow,
showComputerProcess,saveComputerProcess);
cos.addActionListener(handleCos);
tan=new JButton("tan");
handleTan=new HandleTan(list,resultShow,
showComputerProcess,saveComputerProcess);
tan.addActionListener(handleTan);
log=new JButton("log");
handleLog=new HandleLog(list,resultShow,
showComputerProcess,saveComputerProcess);
log.addActionListener(handleLog);
off=new JButton("off");
handleOff=new HandleOff(list,resultShow,showComputerProcess);
off.addActionListener(handleOff);
exp=new JButton("exp");
handleExp=new HandleExp(list,resultShow,
showComputerProcess,saveComputerProcess);
exp.addActionListener(handleExp);
退格操作=new JButton("退格");
handleBack=new HandleBack(list,resultShow,showComputerProcess); 退格操作.addActionListener(handleBack);
清零操作=new JButton("C");
handleClear=new HandleClear(list,resultShow,showComputerProcess); 清零操作.addActionListener(handleClear);
清零操作.setForeground(Color.red);
退格操作.setForeground(Color.red);
等号操作.setForeground(Color.red);
sin.setForeground(Color.blue);
cos.setForeground(Color.blue);
tan.setForeground(Color.blue);
log.setForeground(Color.blue);
exp.setForeground(Color.blue);
正负号操作.setForeground(Color.blue);
小数点操作.setForeground(Color.blue);
panelLeft=new JPanel();
panelRight=new JPanel();
panelLeft.setLayout(new BorderLayout());
JPanel centerInLeft=new JPanel();
panelLeft.add(resultShow,BorderLayout.NORTH);
panelLeft.add(centerInLeft,BorderLayout.CENTER);
centerInLeft.setLayout(new GridLayout(5,5));
centerInLeft.add(numberButton[1]);
centerInLeft.add(numberButton[2]);
centerInLeft.add(numberButton[3]);
centerInLeft.add(operationButton[0]);
centerInLeft.add(off);
centerInLeft.add(numberButton[4]);
centerInLeft.add(numberButton[5]);
centerInLeft.add(numberButton[6]);
centerInLeft.add(operationButton[1]);
centerInLeft.add(退格操作);
centerInLeft.add(numberButton[7]);
centerInLeft.add(numberButton[8]);
centerInLeft.add(numberButton[9]);
centerInLeft.add(operationButton[2]);
centerInLeft.add(清零操作);
centerInLeft.add(numberButton[0]);
centerInLeft.add(小数点操作);
centerInLeft.add(正负号操作);
centerInLeft.add(operationButton[3]);
centerInLeft.add(等号操作);
centerInLeft.add(sin);
centerInLeft.add(cos);
centerInLeft.add(tan);
centerInLeft.add(log);
centerInLeft.add(exp);
panelRight.setLayout(new BorderLayout());
panelRight.add(showComputerProcess,BorderLayout.NORTH); saveButton=new JButton("保存");
copyButton=new JButton("复制");
clearButton=new JButton("清除");
saveButton.setToolTipText("保存计算过程到文件");
copyButton.setToolTipText("复制选中的计算过程");
clearButton.setToolTipText("清除计算过程");
saveButton.addActionListener(this);
copyButton.addActionListener(this);
clearButton.addActionListener(this);
panelRight.add(new
JScrollPane(saveComputerProcess),BorderLayout.CENTER);
JPanel southInPanelRight=new JPanel();
southInPanelRight.add(saveButton);
southInPanelRight.add(copyButton);
southInPanelRight.add(clearButton);
panelRight.add(southInPanelRight,BorderLayout.SOUTH);
JSplitPane split=new JSplitPane
(JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight); add(split,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(100,50,528,258);
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==about) new Help(); int i=JOptionPane.showConfirmDialog(this, "终止当前程序运行?"); if (i==JOptionPane.YES_OPTION) System.exit(0); if(e.getSource()==exit){
}
if(e.getSource()==copyButton)
saveComputerProcess.copy();
if(e.getSource()==clearButton)
saveComputerProcess.setText(null);
if(e.getSource()==saveButton){
JFileChooser chooser=new JFileChooser();
int state=chooser.showSaveDialog(null);
File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){ try{ String content=saveComputerProcess.getText(); StringReader read=new StringReader(content); BufferedReader in= new BufferedReader(read); FileWriter outOne=new FileWriter(file);
BufferedWriter out= new BufferedWriter(outOne); String str=null;
while((str=in.readLine())!=null){
out.write(str);
out.newLine();
}
in.close();
out.close();
}
catch(IOException e1){}
}
}
}
public static void main(String args[]){
new CalculatorWindow();
}
}
(2) HandleSin类
import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleSin implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess; JTextArea saveComputerProcess;
HandleSin(LinkedList list,JTextField t1,JTextField t2, JTextArea t3){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
saveComputerProcess=t3;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1||list.size()==2){
String numOne=list.getFirst();
try{ double x=Double.parseDouble(numOne);
double result=Math.sin(x);
String str=String.valueOf(result);
list.set(0,str);
resultShow.setText(str);
String proccess="sin("+numOne+")="+result; showComputerProcess.setText(proccess);
saveComputerProcess.append(" "+proccess+"\n"); if(list.size()==2)
list.removeLast(); //移掉运算符号
}
catch(Exception ee){}
}
else if(list.size()==3){
String numTwo=list.getLast();
try{ double x=Double.parseDouble(numTwo);
double result=Math.sin(x);
String str=String.valueOf(result); list.set(0,str);
resultShow.setText(str);
}
}
}
String proccess="sin("+numTwo+")="+result; showComputerProcess.setText(proccess); saveComputerProcess.append(" "+proccess+"\n"); list.removeLast(); //移掉第2个运算数 list.removeLast(); //移掉运算符号 } catch(Exception ee){}
A.2 题目二关键源码
(1) ManagerWindow 类的ManagerWindow 方法
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.HashMap;
public class ManagerWindow extends JFrame implements ActionListener{
InputStudent 基本信息录入;
ModifySituation 基本信息修改;
Inquest 基本信息查询;
Delete 基本信息删除;
JMenuBar bar;
JMenu fileMenu;
JMenuItem 录入, 修改, 查询, 删除, 欢迎界面;
HashMap 基本信息=null;
File file=null;
CardLayout card=null;
JLabel label=null;
JPanel pCenter;
public ManagerWindow(){
setTitle("学生管理系统");
录入=new JMenuItem("录入学生基本信息");
修改=new JMenuItem("修改学生基本信息");
查询=new JMenuItem("查询学生基本信息");
删除=new JMenuItem("删除学生基本信息");
欢迎界面=new JMenuItem("欢迎界面");
bar=new JMenuBar();
fileMenu=new JMenu("菜单选项");
fileMenu.add(录入);
fileMenu.add(修改);
fileMenu.add(查询);
fileMenu.add(删除);
fileMenu.add(欢迎界面);
bar.add(fileMenu);
setJMenuBar(bar);
label=new JLabel("学籍管理系统",JLabel.CENTER);
label.setIcon(new ImageIcon("welcome.jpg"));
label.setFont(new Font("隶书",Font.BOLD,36));
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setForeground(Color.red);
基本信息=new HashMap();
录入.addActionListener(this);
修改.addActionListener(this);
查询.addActionListener(this);
删除.addActionListener(this);
欢迎界面.addActionListener(this);
card=new CardLayout();
pCenter=new JPanel();
pCenter.setLayout(card);
//file=new File("基本信息.txt");
/*if(!file.exists()){
try{
FileOutputStream out=new FileOutputStream(file);
ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(基本信息);
objectOut.close();
out.close();
}
catch(IOException e){}
}*/
基本信息录入=new InputStudent(file);
基本信息修改=new ModifySituation(file);
基本信息查询=new Inquest(file);
基本信息删除=new Delete(file);
pCenter.add("欢迎界面",label);
pCenter.add("录入界面", 基本信息录入);
pCenter.add("修改界面", 基本信息修改);
pCenter.add("删除界面", 基本信息删除);
add(pCenter,BorderLayout.CENTER);
validate();
setVisible(true);
setBounds(100,50,660,580);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
int n=JOptionPane.showConfirmDialog(null,"确认退出吗?"," 确认对话框",
JOptionPane.YES_NO_OPTION );
if(n==JOptionPane.YES_OPTION)
System.exit(0);
}});
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==录入){
card.show(pCenter,"录入界面");
}
else if(e.getSource()==修改){
基本信息修改.clearMess();
card.show(pCenter,"修改界面");
}
else if(e.getSource()==查询){
基本信息查询.clearMess();
基本信息查询.setLocation(getBounds().x+getBounds().width,getBounds().y);
基本信息查询.setVisible(true);
}
else if(e.getSource()==删除)
card.show(pCenter,"删除界面");
else if(e.getSource()==欢迎界面)
card.show(pCenter,"欢迎界面");
}
public static void main(String args[]){
new ManagerWindow();
}
}
(2) inquest类的query ()方法
public void query() throws SQLException
{
String Sno,Sname,Ssex,Sspec,Sgrade,Sborn;
Con =DriverManager.getConnection ("jdbc:odbc:stu");
ResultSet rs=Stmt .executeQuery("SELECT * FROM stu"); while (rs.next())
{
Sno=rs.getString("Sno" );
Sname=rs.getString("Sname" );
Ssex=rs.getString("Ssex" );
Sspec=rs.getString("Sspec" );
Sgrade=rs.getString("Sgrade" );
Sborn=rs.getString("Sborn" );
if (Sno.trim().equals(学号.getText().trim()))
{
姓名.setText(Sname); 性别.setText(Ssex); 专业.setText(Sspec); 年级.setText(Sgrade); 出生.setText(Sborn); search_record=1; break ; }
}
if (search_record==0)
{
姓名.setText(" 没有该学生" ); }
}