说在前面:利用此次课程设计的机会,慢慢地加强对编程语言实际应用的能力,不断地丰富知识点!
此篇文章是基于java语言开发GUI的应用程序,希望可以帮助一些想在Java学习中深入的同学(当然,这里应用的都是Java基础),希望可以激发同学们的学习兴趣!
C语言版移步软件设计-C语言版
C++版移步软件设计-C++版
C语言版本均在VC++6.0环境下编译成功!
本篇程序设计文章所用Java语言版本为:jdk1.8.0_171,IDE环境为Eclipse IDE for Java Developers,如其他环境下未调试成功,请以本文章的软件版本为准!
使用说明:为功能展示方便,本人将各个模块功能单独写一个类,所有的子功能都由主类统一激发,所以有个主类Main.java,其余的类文件均与此主类在同一个包下即可实现主类的子功能调用。
上图即是本人的目录结构,所有文件都在同一包下。
软件环境:
软件总览
下面两张图片为本程序系统的预览图,本程序将几个子模块程序都分块放在屏幕显示,同时可以根据自己的喜好自行调整位置。
代码展示
Main.java
import javax.swing.JFrame;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Main extends JFrame implements ActionListener{
JButton A1, A2, A3, A4, A5, B1, B2;
int x_location, y_location;
public static void main(String[] args) {
new Main();
}
public Main() {
setTitle("B16031114");
setSize(600,400);
x_location = getCenterLocation(1);
y_location = getCenterLocation(2);
setLocation(x_location, y_location);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(2,4));
A1 = new JButton("A1");
A1.addActionListener(this);
add(A1);
A2 = new JButton("A2");
A2.addActionListener(this);
add(A2);
A3 = new JButton("A3");
A3.addActionListener(this);
add(A3);
A4 = new JButton("A4");
A4.addActionListener(this);
add(A4);
A5 = new JButton("A5");
A5.addActionListener(this);
add(A5);
B1 = new JButton("B1");
B1.addActionListener(this);
add(B1);
B2 = new JButton("B2");
B2.addActionListener(this);
add(B2);
setVisible(true);
}
public int getCenterLocation(int type) {
double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
if(type == 1) {
return (int) (width - this.getWidth()) / 2;
}else {
return (int) (height - this.getHeight()) / 2;
}
}
@Override
public void actionPerformed(ActionEvent event) {
if(event.getSource() == A1) {
A1_Frame a1 = new A1_Frame();
a1.setVisible(true);
}else if(event.getSource() == A2) {
A2_Frame a2 = new A2_Frame();
a2.setVisible(true);
}else if(event.getSource() == A3) {
A3_Frame a3 = new A3_Frame();
a3.setVisible(true);
}else if(event.getSource() == A4) {
A4_Frame a4 = new A4_Frame();
a4.setVisible(true);
}else if(event.getSource() == A5) {
A5_Frame a5 = new A5_Frame();
a5.setVisible(true);
}else if(event.getSource() == B1) {
B1_Frame b1 = new B1_Frame();
b1.setVisible(true);
}else if(event.getSource() == B2) {
B2_Frame b2 = new B2_Frame();
b2.setVisible(true);
}
}
}
A档
一、分数统计
课题内容:
设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。
课题要求:
(1)输入某班级学生的姓名、分数;
(2)对(1)的分数进行降幂排列并输出;
(3)具有输入输出界面。
点击添加数据按钮,列表会自增1,并提示用户填写内容
若成绩一栏输入有字母等其他字符,当点击排序按钮时会提示上述错误,用户可以根据错误进行修改,若用户不想修改数据,可以直接选择这一栏,点击删除按钮删除本栏内容。
下面图片展示的是选择一栏点击删除按钮,被选一栏删除掉排序。


代码展示
A1_Frame.java
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.MessageFormat;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class A1_Frame extends JFrame{
// 默认表格模型
private DefaultTableModel model = null;
private JTable table = null;
private JButton addBtn = null, decBtn = null, solveBtn = null;
String number = "0";
public A1_Frame()
{
super("学生成绩排名");
String[][] datas = {
};
String[] titles = {
"序号", "姓名","成绩" };
model = new DefaultTableModel(datas, titles);
table = new JTable(model);
addBtn = new JButton("添加数据");
addBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
number = String.valueOf(Integer.valueOf(number)+1);
model.addRow(new String[] {
number, "", "" });
}
});
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new GridLayout(2, 1));
decBtn = new JButton("删除数据");
decBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if(table.getRowCount() == 0) {
JOptionPane.showMessageDialog(null, "请添加数据", "警告", JOptionPane.INFORMATION_MESSAGE);
}else {
model.removeRow(table.getSelectedRow());
}
}catch(ArrayIndexOutOfBoundsException e1) {
JOptionPane.showMessageDialog(null, "未选择所要删除的栏目", "警告", JOptionPane.INFORMATION_MESSAGE);
}
}
});
solveBtn = new JButton("排序");
btnPanel.add(decBtn);
btnPanel.add(solveBtn);
add(addBtn, BorderLayout.NORTH);
add(btnPanel,BorderLayout.SOUTH);
add(new JScrollPane(table));
setBounds(300, 0, 400, 300);
setVisible(true);
//table居中显示
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
tcr.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, tcr);
table.setFont(new Font("Serif",0,18));
table.setRowHeight(30);
main_solve();
table.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
table.clearSelection();
}
});
}
private void main_solve() {
solveBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean infoCom = false;
String[] name = new String[table.getRowCount()];
float[] score = new float[table.getRowCount()];
if(table.getRowCount() != 0) {
for(int i=0;i<table.getRowCount();i++) {
if(table.getModel().getValueAt(i,1).equals("")||table.getModel().getValueAt(i,2).toString().equals("")) {
JOptionPane.showMessageDialog(null, "请完善信息", "警告", JOptionPane.INFORMATION_MESSAGE);
break;
}else {
try {
name[i] = (String) table.getModel().getValueAt(i,1);
score[i] = Float.valueOf(table.getModel().getValueAt(i,2).toString());
infoCom = true;
}catch(NumberFormatException except) {
JOptionPane.showMessageDialog(null, "行序号为"+table.getModel().getValueAt(i,0)+"的成绩格式错误", "错误", JOptionPane.ERROR_MESSAGE);
infoCom = false;
break;
}
}
}
if(infoCom) {
for(int i=0;i<table.getRowCount();i++) {
float scoreTemp;
String nameTemp;
for(int j=0;j<table.getRowCount();j++) {
if(score[j]<score[i]) {
scoreTemp = score[i];
score[i] = score[j];
score[j] = scoreTemp;
nameTemp = name[i];
name[i] = name[j];
name[j] = nameTemp;
}
}
}
for(int i=0;i<table.getRowCount();i++) {
table.setValueAt(i+1, i, 0);
table.setValueAt(name[i], i, 1);
table.setValueAt(score[i], i, 2);
}
}
}else {
JOptionPane.showMessageDialog(null, "请添加数据", "警告", JOptionPane.INFORMATION_MESSAGE);
}
}
});
}
}
二、打字程序
课题内容:
设计一个打字程序。包括随机产生字符串,以及字符串比较和统计。通过此课题,熟练掌握数组、格式输出、字符串处理等。
课题要求:
(1)随机产生一字符串,每次产生的字符串内容、长度都不同;
(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率;
(3)具有输入输出界面。
下图是本程序打开界面,主界面随机字符一栏自动初始化。用户可在提示输入处进行输入操作。
不输入或输入为空时点击计算正确率按钮就会弹出如下弹框。
用户根据提示输入,点击计算按钮即可生成正确率。


代码展示
A2_Frame.java
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.MessageFormat;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class A2_Frame extends JFrame implements ActionListener{
JPanel mypanel0, mypanel1, mypanel2, mypanel3, mypanel4, mypanel5;
JLabel label1, label2, label3, label4;
JTextField randomS, input, output;
JButton btn1, btn2;
public A2_Frame() {
mypanel0 = new JPanel();
mypanel0.setLayout(new GridLayout(5, 1));
mypanel1 = new JPanel();
mypanel2 = new JPanel();
mypanel3 = new JPanel();
mypanel4 = new JPanel();
mypanel5 = new JPanel();
label1 = new JLabel("打字练习程序");
label1.setFont(new Font("Serif",0,18));
mypanel1.add(label1);
label2 = new JLabel("随机字符:");
randomS = new JTextField(10);
randomS.setText(getRandomData());
randomS.setEditable(false);
mypanel2.add(label2);
mypanel2.add(randomS);
label3 = new JLabel("请您输入:");
input = new JTextField(10);
mypanel3.add(label3);
mypanel3.add(input);
btn1 = new JButton("生成字符串");
btn1.addActionListener(this);
btn2 = new JButton("计算正确率");
btn2.addActionListener(this);
mypanel4.add(btn1);
mypanel4.add(btn2);
label4 = new JLabel("您的正确率:");
output = new JTextField(4);
mypanel5.add(label4);
mypanel5.add(output);
mypanel0.add(mypanel1);
mypanel0.add(mypanel2);
mypanel0.add(mypanel3);
mypanel0.add(mypanel4);
mypanel0.add(mypanel5);
add(mypanel0);
setTitle("打字练习");
setBounds(760 , 0, 400, 300);
}
/**
* 获得随机字符串,该方法仅用于获得随机字符串,可以忽略
*
* @return
*/
private String getRandomData(){
String myString = "";
String ss = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int x=4+(int)(Math.random()*12);
for(int i=0;i<x;i++) {
myString = myString + ss.toCharArray()[1+(int)(Math.random()*52)];
}
return myString;
}
@Override
public void actionPerformed(ActionEvent event) {
if(event.getSource() == btn1) {
randomS.setText(getRandomData());
}else if(event.getSource() == btn2) {
String proStr = randomS.getText();
String inputStr = input.getText();
int temp = 0;
try{
for(int i=0;i<proStr.length();i++) {
if(proStr.toCharArray()[i] == inputStr.toCharArray()[i]) {
temp++;
}
}
output.setText(String.valueOf((int)(((float)temp/proStr.length())*10000)/100.0)+"%");
}catch(ArrayIndexOutOfBoundsException e) {
JOptionPane.showMessageDialog(null, "输入为空", "警告", JOptionPane.INFORMATION_MESSAGE);
}
}
}
}
三、文本编辑器
课题内容:
设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组或字符指针实现字符串操作的功能。
课题要求:
(1)编辑文本;
(2)保存、打开指定位置的文本文件;
(3)具有输入输出界面。
本程序界面涵盖一个Label,一个TextArea,两个按钮,用户可以选择打开文件,或直接在文本域内输入,进而保存输入内容,在保存时可以输入需要保存的文件名称。


代码展示
A3_Frame.java
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;
public class A3_Frame extends JFrame implements ActionListener{
JTextArea input;
JLabel title;
JPanel mypanel0, mypanel1, mypanel2, mypanel3;
JButton openbtn, savebtn;
JScrollPane sc;
public A3_Frame(){
mypanel0 = new JPanel();
mypanel1 = new JPanel();
mypanel2 = new JPanel();
mypanel3 = new JPanel();
title = new JLabel("文本编辑器");
title.setFont(new Font("Serif",0,20));
mypanel1.add(title);
input = new JTextArea(8,30);
sc = new JScrollPane(input);
mypanel2.add(sc);
openbtn = new JButton("打开文件");
openbtn.addActionListener(this);
savebtn = new JButton("保存文件");
savebtn.addActionListener(this);
mypanel3.add(openbtn);
mypanel3.add(savebtn);
mypanel0.add(mypanel1);
mypanel0.add(mypanel2);
mypanel0.add(mypanel3);
add(mypanel0);
setTitle("文本编辑器");
setBounds(1220,0,400,300);
}
@Override
public void actionPerformed(ActionEvent event) {
if(event.getSource() == openbtn) {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("dat&txt File", "dat", "txt");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION){
File filex=chooser.getSelectedFile();
byte[] b = new byte[10];
try {
//使用BufferedReader读取
BufferedReader br = new BufferedReader(new FileReader(filex));
String line = "";
while((line=br.readLine())!=null){
input.append(line+"\n");
}
br.close();
} catch (Exception e) {
}
}
}else if(event.getSource() == savebtn) {
String filename;
String inputstr = JOptionPane.showInputDialog("请输入您所要保存的文件名:","output.dat");
if(inputstr != null) {
filename = inputstr