Добавлен проект и заготовка для запуска лабораторных работ
This commit is contained in:
commit
3c60bcc92f
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/build/
|
||||
/dist/
|
||||
/proguard/
|
||||
/nbproject/private/
|
73
build.xml
Normal file
73
build.xml
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<!-- By default, only the Clean and Build commands use this build script. -->
|
||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
|
||||
<!-- the Compile on Save feature is turned off for the project. -->
|
||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
||||
<!-- in the project's Project Properties dialog box.-->
|
||||
<project name="TSE" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project TSE.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
used for execution of your tasks. These targets are usually executed
|
||||
before and after some main targets. They are:
|
||||
|
||||
-pre-init: called before initialization of project properties
|
||||
-post-init: called after initialization of project properties
|
||||
-pre-compile: called before javac compilation
|
||||
-post-compile: called after javac compilation
|
||||
-pre-compile-single: called before javac compilation of single file
|
||||
-post-compile-single: called after javac compilation of single file
|
||||
-pre-compile-test: called before javac compilation of JUnit tests
|
||||
-post-compile-test: called after javac compilation of JUnit tests
|
||||
-pre-compile-test-single: called before javac compilation of single JUnit test
|
||||
-post-compile-test-single: called after javac compilation of single JUunit test
|
||||
-pre-jar: called before JAR building
|
||||
-post-jar: called after JAR building
|
||||
-post-clean: called after cleaning build products
|
||||
|
||||
(Targets beginning with '-' are not intended to be called on their own.)
|
||||
|
||||
Example of inserting an obfuscator after compilation could look like this:
|
||||
|
||||
<target name="-post-compile">
|
||||
<obfuscate>
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
</obfuscate>
|
||||
</target>
|
||||
|
||||
For list of available properties check the imported
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
|
||||
Another way to customize the build is by overriding existing main targets.
|
||||
The targets of interest are:
|
||||
|
||||
-init-macrodef-javac: defines macro for javac compilation
|
||||
-init-macrodef-junit: defines macro for junit execution
|
||||
-init-macrodef-debug: defines macro for class debugging
|
||||
-init-macrodef-java: defines macro for class execution
|
||||
-do-jar: JAR building
|
||||
run: execution of project
|
||||
-javadoc-build: Javadoc generation
|
||||
test-report: JUnit report generation
|
||||
|
||||
An example of overriding the target for project execution could look like this:
|
||||
|
||||
<target name="run" depends="TSE-impl.jar">
|
||||
<exec dir="bin" executable="launcher.exe">
|
||||
<arg file="${dist.jar}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
Notice that the overridden target depends on the jar target and not only on
|
||||
the compile target as the regular run target does. Again, for a list of available
|
||||
properties which you can use, check the target you are overriding in the
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
-->
|
||||
</project>
|
3
manifest.mf
Normal file
3
manifest.mf
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
X-COMMENT: Main-Class will be added automatically by build
|
||||
|
1402
nbproject/build-impl.xml
Normal file
1402
nbproject/build-impl.xml
Normal file
File diff suppressed because it is too large
Load Diff
8
nbproject/genfiles.properties
Normal file
8
nbproject/genfiles.properties
Normal file
@ -0,0 +1,8 @@
|
||||
build.xml.data.CRC32=d6379fba
|
||||
build.xml.script.CRC32=47ea1871
|
||||
build.xml.stylesheet.CRC32=8064a381@1.68.0.46
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=d6379fba
|
||||
nbproject/build-impl.xml.script.CRC32=c20eaf60
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=cdba79fa@1.68.0.46
|
73
nbproject/project.properties
Normal file
73
nbproject/project.properties
Normal file
@ -0,0 +1,73 @@
|
||||
annotation.processing.enabled=true
|
||||
annotation.processing.enabled.in.editor=false
|
||||
annotation.processing.processors.list=
|
||||
annotation.processing.run.all.processors=true
|
||||
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
|
||||
application.title=TSE
|
||||
application.vendor=aNNiMON
|
||||
build.classes.dir=${build.dir}/classes
|
||||
build.classes.excludes=**/*.java,**/*.form
|
||||
# This directory is removed when the project is cleaned:
|
||||
build.dir=build
|
||||
build.generated.dir=${build.dir}/generated
|
||||
build.generated.sources.dir=${build.dir}/generated-sources
|
||||
# Only compile against the classpath explicitly listed here:
|
||||
build.sysclasspath=ignore
|
||||
build.test.classes.dir=${build.dir}/test/classes
|
||||
build.test.results.dir=${build.dir}/test/results
|
||||
# Uncomment to specify the preferred debugger connection transport:
|
||||
#debug.transport=dt_socket
|
||||
debug.classpath=\
|
||||
${run.classpath}
|
||||
debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
# This directory is removed when the project is cleaned:
|
||||
dist.dir=dist
|
||||
dist.jar=${dist.dir}/TSE.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
endorsed.classpath=
|
||||
excludes=
|
||||
includes=**
|
||||
jar.compress=false
|
||||
javac.classpath=
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.processorpath=\
|
||||
${javac.classpath}
|
||||
javac.source=1.7
|
||||
javac.target=1.7
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
javac.test.processorpath=\
|
||||
${javac.test.classpath}
|
||||
javadoc.additionalparam=
|
||||
javadoc.author=false
|
||||
javadoc.encoding=${source.encoding}
|
||||
javadoc.noindex=false
|
||||
javadoc.nonavbar=false
|
||||
javadoc.notree=false
|
||||
javadoc.private=false
|
||||
javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
main.class=tse.Main
|
||||
manifest.file=manifest.mf
|
||||
meta.inf.dir=${src.dir}/META-INF
|
||||
mkdist.disabled=false
|
||||
platform.active=default_platform
|
||||
run.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
# Space-separated list of JVM arguments used when running the project.
|
||||
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
|
||||
# To set system properties for unit tests define test-sys-prop.name=value:
|
||||
run.jvmargs=
|
||||
run.test.classpath=\
|
||||
${javac.test.classpath}:\
|
||||
${build.test.classes.dir}
|
||||
source.encoding=UTF-8
|
||||
src.dir=src
|
||||
test.src.dir=test
|
15
nbproject/project.xml
Normal file
15
nbproject/project.xml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>org.netbeans.modules.java.j2seproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>TSE</name>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
</source-roots>
|
||||
<test-roots>
|
||||
<root id="test.src.dir"/>
|
||||
</test-roots>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
8
src/res/desc1_0.txt
Normal file
8
src/res/desc1_0.txt
Normal file
@ -0,0 +1,8 @@
|
||||
<html>
|
||||
Реализовать простейший калькулятор, который обрабатывает строковые команды вида «a oper b», где a,b – вещественные числа, oper – один из знаков операций +, -, *, /, ^. Если первый операнд не указан, то вместо него использовать результат предыдущего действия. Например:<br/>
|
||||
<i>2 * 5<br/>
|
||||
10<br/>
|
||||
- 2.5<br/>
|
||||
7.5<br/>
|
||||
</i>
|
||||
</html>
|
28
src/tse/ILabRab.java
Normal file
28
src/tse/ILabRab.java
Normal file
@ -0,0 +1,28 @@
|
||||
package tse;
|
||||
|
||||
/**
|
||||
* Интерфейс работы с лабораторными работами.
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public interface ILabRab {
|
||||
|
||||
/**
|
||||
* Запустить лабораторную работу.
|
||||
* @param index номер задания
|
||||
*/
|
||||
public void execute(int index);
|
||||
|
||||
/**
|
||||
* Получить заголовки заданий.
|
||||
* @return массив имён
|
||||
*/
|
||||
public String[] getTitles();
|
||||
|
||||
/**
|
||||
* Получить описание задания.
|
||||
* @param index номер задания
|
||||
* @return текстовое описание
|
||||
*/
|
||||
public String getDescription(int index);
|
||||
|
||||
}
|
29
src/tse/LR_1.java
Normal file
29
src/tse/LR_1.java
Normal file
@ -0,0 +1,29 @@
|
||||
package tse;
|
||||
|
||||
/**
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class LR_1 implements ILabRab {
|
||||
|
||||
private static final String[] TITLES = {
|
||||
"Калькулятор",
|
||||
"Площадь и периметр треугольника",
|
||||
"Уменьшить изображение"
|
||||
};
|
||||
|
||||
@Override
|
||||
public void execute(int index) {
|
||||
System.out.println(TITLES[index]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getTitles() {
|
||||
return TITLES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription(int index) {
|
||||
return Util.readDescription(1, index);
|
||||
}
|
||||
|
||||
}
|
151
src/tse/Main.java
Normal file
151
src/tse/Main.java
Normal file
@ -0,0 +1,151 @@
|
||||
package tse;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTree;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.WindowConstants;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
import javax.swing.event.TreeSelectionEvent;
|
||||
import javax.swing.event.TreeSelectionListener;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
|
||||
/**
|
||||
* Класс меню, запускающий лабораторные работы.
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Main extends JFrame {
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
} catch(Exception ex) {
|
||||
System.out.println("Error setting native LAF: " + ex);
|
||||
}
|
||||
|
||||
EventQueue.invokeLater(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
new Main().setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private final ILabRab[] labs = new ILabRab[] {
|
||||
new LR_1()
|
||||
};
|
||||
|
||||
private JButton executeButton;
|
||||
private JTree labsTree;
|
||||
private JLabel description;
|
||||
|
||||
public Main() {
|
||||
setTitle("Технология Программной Инженерии");
|
||||
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||
|
||||
JPanel panel = new JPanel();
|
||||
initPanel(panel);
|
||||
initListeners();
|
||||
|
||||
getContentPane().add(panel);
|
||||
pack();
|
||||
setLocationRelativeTo(null);
|
||||
}
|
||||
|
||||
private void initPanel(JPanel panel) {
|
||||
panel.setLayout(new BorderLayout());
|
||||
panel.setBorder(new EmptyBorder(10, 10, 10, 10));
|
||||
|
||||
// Дерево лабораторных работ
|
||||
final DefaultMutableTreeNode root = new DefaultMutableTreeNode("ТПИ");
|
||||
labsTree = new JTree(root);
|
||||
labsTree.setPreferredSize(new Dimension(300, 0));
|
||||
panel.add(new JScrollPane(labsTree), BorderLayout.WEST);
|
||||
|
||||
for (int i = 0; i < labs.length; i++) {
|
||||
DefaultMutableTreeNode node = new DefaultMutableTreeNode();
|
||||
node.setUserObject("Лабораторная работа №" + (i+1));
|
||||
|
||||
addNodes(node, labs[i].getTitles());
|
||||
|
||||
root.add(node);
|
||||
}
|
||||
labsTree.expandRow(0);
|
||||
|
||||
// Панель описания
|
||||
description = new JLabel();
|
||||
description.setPreferredSize(new Dimension(250, 0));
|
||||
description.setFont(new Font("Arial", Font.PLAIN, 14));
|
||||
|
||||
executeButton = new JButton("Запустить");
|
||||
|
||||
JPanel rightPanel = new JPanel();
|
||||
rightPanel.setLayout(new BorderLayout());
|
||||
rightPanel.setBorder(new LineBorder(Color.GRAY));
|
||||
rightPanel.add(description, BorderLayout.CENTER);
|
||||
rightPanel.add(executeButton, BorderLayout.NORTH);
|
||||
|
||||
panel.add(rightPanel, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
private void addNodes(DefaultMutableTreeNode node, String[] titles) {
|
||||
for (String title : titles) {
|
||||
node.add(new DefaultMutableTreeNode(title));
|
||||
}
|
||||
}
|
||||
|
||||
private void initListeners() {
|
||||
labsTree.addTreeSelectionListener(new TreeSelectionListener() {
|
||||
|
||||
@Override
|
||||
public void valueChanged(TreeSelectionEvent ev) {
|
||||
int[] params = getSelectedLabIndex();
|
||||
if (params == null) return;
|
||||
|
||||
int number = params[0];
|
||||
int index = params[1];
|
||||
description.setText( labs[number].getDescription(index) );
|
||||
}
|
||||
});
|
||||
|
||||
executeButton.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent ev) {
|
||||
int[] params = getSelectedLabIndex();
|
||||
if (params == null) return;
|
||||
|
||||
int number = params[0];
|
||||
int index = params[1];
|
||||
labs[number].execute(index);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private int[] getSelectedLabIndex() {
|
||||
if (labsTree.isSelectionEmpty()) return null;
|
||||
|
||||
DefaultMutableTreeNode node = (DefaultMutableTreeNode) labsTree.getLastSelectedPathComponent();
|
||||
if (!node.isLeaf()) return null;
|
||||
|
||||
DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent();
|
||||
String labrab = (String) parent.getUserObject();
|
||||
String strNumber = labrab.substring(labrab.lastIndexOf('№') + 1);
|
||||
int number = Integer.parseInt(strNumber) - 1;
|
||||
int index = parent.getIndex(node);
|
||||
|
||||
return new int[] {number, index};
|
||||
}
|
||||
}
|
42
src/tse/Util.java
Normal file
42
src/tse/Util.java
Normal file
@ -0,0 +1,42 @@
|
||||
package tse;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author aNNiMON
|
||||
*/
|
||||
public class Util {
|
||||
|
||||
public static String readDescription(int labNumber, int index) {
|
||||
final StringBuilder text = new StringBuilder();
|
||||
final String resource = "/res/desc" + labNumber + "_" + index + ".txt";
|
||||
BufferedReader in = null;
|
||||
try {
|
||||
InputStream stream = Runtime.getRuntime().getClass().getResourceAsStream(resource);
|
||||
InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8);
|
||||
in = new BufferedReader(reader);
|
||||
|
||||
String line = in.readLine();
|
||||
while (line != null) {
|
||||
text.append(line);
|
||||
line = in.readLine();
|
||||
}
|
||||
} catch (IOException | NullPointerException ex) {
|
||||
text.append("Error");
|
||||
} finally {
|
||||
if (in != null) {
|
||||
try {
|
||||
in.close();
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return text.toString();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user