Vue.app
<script>
import Exams from './components/Exams.vue';
import Students from './components/Students.vue';
export default {
components: {
Exams,
Students
},
data() {
return {
students: [],
exams: []
}
},
methods: {
async fetchStudents() {
fetch("http://localhost:8000/api/students")
.then(response => response.json())
.then(response => {
this.students = response.students;
})
.catch(error => alert("Hiba történt: " + error));
},
async fetchExams() {
fetch("http://localhost:8000/api/exams")
.then(response => response.json())
.then(response => {
this.exams = response;
})
.catch(error => alert("Hiba történt: " + error));
},
async addStudent(student) {
fetch("http://localhost:8000/api/students", {
method: "POST",
body: JSON.stringify(student),
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(response => {
this.fetchStudents();
})
.catch(error => alert("Hiba történt: " + error));
},
async addExam(exam) {
fetch("http://localhost:8000/api/exams", {
method: "POST",
body: JSON.stringify(exam),
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(response => {
this.fetchExams();
})
.catch(error => alert("Hiba történt: " + error));
},
async deleteStudent(student) {
fetch("http://localhost:8000/api/students", {
method: "DELETE",
body: JSON.stringify({
id: student.id
}),
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(response => {
this.fetchStudents();
this.fetchExams();
})
.catch(error => alert("Hiba történt: " + error));
},
async deleteExam(exam) {
fetch("http://localhost:8000/api/exams", {
method: "DELETE",
body: JSON.stringify({
id: exam.id
}),
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(response => {
this.fetchExams();
})
.catch(error => alert("Hiba történt: " + error));
}
},
created() {
this.fetchStudents();
this.fetchExams();
}
}
</script>
<template>
<div class="container" style="border-radius: 10px;">
<div class="row mt-5">
<h1 class="main-title">Board</h1>
<div class="col-md-6 mt-3">
<Students :students="students" @addStudent="addStudent" @deleteStudent="deleteStudent"></Students>
</div>
<div class="col-md-6 mt-3">
<Exams :students="students" :exams="exams" @addExam="addExam" @deleteExam="deleteExam"></Exams>
</div>
</div>
</div>
</template>
<style>
.main-title {
text-align: center;
font-family: Arial, sans-serif;
font-weight: 700;
}
</style>
<script>
export default {
data() {
return {
student: {
student_name: "",
class: "",
kor: 0
}
}
},
props: {
students: Array
},
methods: {
addStudent() {
if (this.student.student_name == "" || this.student.class == "") {
alert("Nem töltöttél ki minden mezőt!");
return;
}
this.$emit("addStudent", this.student);
this.student = {
student_name: "",
class: "",
kor: 0
}
},
deleteStudent(student) {
this.$emit("deleteStudent", student);
}
},
emits: ["addStudent", "deleteStudent"]
}
</script>
<template>
<div class="card">
<div class="card-body">
<h4 class="card-title">Input</h4>
<div class="mb-3">
<label class="form-label">Név</label>
<input type="text" class="form-control" placeholder="Például: Békés Csaba" v-model="student.student_name">
</div>
<div class="mb-3">
<label class="form-label">Osztály</label>
<input type="text" class="form-control" placeholder="Például: 12X" v-model="student.class">
</div>
<div class="mb-3">
<button class="btn btn-primary" @click="addStudent()">Diák hozzáadása</button>
</div>
<div class="mb-3">
<label class="form-label">kor</label>
<input type="number" class="form-control" placeholder="Például: Békés Csaba" v-model="student.kor">
</div>
<div class="card">
<ul class="list-group list-group-flush">
<li class="list-group-item" v-for="student in students">
<div class="d-flex">
<div class="flex-fill"><b>{{ student.student_name }}</b></div>
<div class="flex-fill">-</div>
<div class="flex-fill">{{ student.class }}</div>
<div><button class="btn btn-sm btn-danger" @click="deleteStudent(student)">Törlés</button></div>
</div>
</li>
</ul>
</div>
</div>
</div>
</template>
<style scoped>
</style>
<script>
export default {
data() {
return {
exam: {
student_id: "",
classroom: "",
subject: "",
date: ""
}
}
},
props: {
students: Array,
exams: Array
},
methods: {
addExam() {
if (this.exam.student_id == "" || this.exam.classroom == "" || this.exam.subject == "" || this.exam.date == "") {
alert("Nem töltöttél ki minden mezőt!");
return;
}
this.$emit("addExam", this.exam);
this.exam = {
student_id: "",
classroom: "",
subject: "",
date: ""
}
},
deleteExam(exam) {
this.$emit("deleteExam", exam);
}
},
emits: ["addExam", "deleteExam"]
}
</script>
<template>
<div class="card">
<div class="card-body">
<h4 class="card-title">Input2</h4>
<div class="mb-3">
<label class="form-label">Név</label>
<select class="form-select" v-model="exam.student_id">
<option disabled selected value="">Válassz nevet</option>
<option v-for="student in students" :value="student.id">{{ student.student_name }}</option>
</select>
</div>
<div class="mb-3">
<label class="form-label">Terem</label>
<input type="text" class="form-control" placeholder="Például: 17" v-model="exam.classroom">
</div>
<div class="mb-3">
<label class="form-label">Tárgy</label>
<input type="text" class="form-control" placeholder="Például: Matematika" v-model="exam.subject">
</div>
<div class="mb-3">
<label class="form-label">Dátum</label>
<input type="date" class="form-control" v-model="exam.date">
</div>
<div class="mb-3">
<button class="btn btn-primary" @click="addExam()">Vizsga hozzáadása</button>
</div>
<div class="card">
<ul class="list-group list-group-flush">
<li class="list-group-item" v-for="exam in exams">
<div class="d-flex">
<div class="flex-fill">Diák: {{ exam.student }} | Tárgy: {{ exam.subject }} | Terem: {{ exam.classroom }} | Dátum: {{ exam.date.split(" ")[0] }}</div>
<div><button class="btn btn-sm btn-danger" @click="deleteExam(exam)">Törlés</button></div>
</div>
</li>
</ul>
</div>
</div>
</div>
</template>
<style scoped>
</style>
composer create-project laravel/laravel "nev"
Backend.migration(php artisan make:migration)
return new class extends Migration
{
/**s
*/
public function up(): void
{
Schema::create('students', function (Blueprint $table) {
$table->id();
$table->string('student_name');
$table->string('class');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('students');
}
};
Backend.model (php artisan make:model)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Exam extends Model
{
protected $fillable = ["classroom","subject","date","student_id"];
public function student()
{
return $this -> belongsTo(Student::class);
}
}
Backend.api (php artisan install:api)
<?php
use App\Http\Controllers\ExamController;
use App\Http\Controllers\StudentController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');
Route::get('/students',[StudentController::class,"index"])-> name("student.index");
Route::post('/students',[StudentController::class,"store"])-> name("student.store");
Route::get('/exams',[ExamController::class,"index"])-> name("exam.index");
Route::post('/exams',[ExamController::class,"store"])-> name("exam.store");
Route::delete('/exams',[ExamController::class,"destroy"])-> name("exam.destroy");
Backend.controller(php artisan make:controller)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Student;
use Illuminate\Validation\ValidationException;
use App\Models\Exam;
class ExamController extends Controller
{
public function store(Request $request)
{
try {
$request->validate([
"student_id" => "integer|required|exists:students,id",
"classroom" => "string|max:255|required",
"subject" => "string|max:255|required",
"date" => "date|required"
], [
"max" => ":attribute nem lehet nagyobb mint :max",
"required" => ":attribute megadása kötelező",
"string" => ":attribute mezőnek szöveget kell tartalmaznia",
"integer" => ":attribute mezőnek számot kell tartalmaznia",
"date" => ":attribute mezőnek dátumot kell tartalmaznia",
"exists" => ":attribute nem létezik"
], [
"classroom" => "Osztály",
"student_id" => "Tanuló azonosító",
"subject" => "Tantárgy",
"date" => "Dátum"
]);
} catch (ValidationException $e) {
return response()->json(["message" => $e->getMessage()], 400, options: JSON_UNESCAPED_UNICODE);
}
;
$exam = Exam::create([
"student_id" => $request->student_id,
"classroom" => $request->classroom,
"subject" => $request->subject,
"date" => $request->date
]);
if (!$exam) {
return response()->json(["Sikertelen adatfelvitel"], 418, options: JSON_UNESCAPED_UNICODE);
}
return response()->json(["Sikeresen felvitte az új terembeosztast!"], 418, options: JSON_UNESCAPED_UNICODE);
}
public function index()
{
$exams = Exam::all();
$result =[];
foreach ($exams as $exam) {
array_push($result, ["student"=>$exam->student->student_name . ' - ' . $exam->student->class,"classroom"=> $exam->classroom,"subject"=>$exam->subject,"date"=>$exam->date,"id"=>$exam->id]);
}
return response()->json($result, 200, options:JSON_UNESCAPED_UNICODE);
}
public function destroy(Request $request)
{
try {
$request -> validate([
"id" => "required|integer|exists:exams,id"
]);
$exam = Exam::findOrFail($request->id);
if ($exam->delete()) {
return response()->json(["message"=>"Vizsga törölve"], 200, options:JSON_UNESCAPED_UNICODE);
} else {
return response()->json(["message"=>"Sikertelen törlés"], 500, options:JSON_UNESCAPED_UNICODE);
}
} catch (ValidationException $e) {
return response()->json(["message"=>$e->getMessage()], 400, options:JSON_UNESCAPED_UNICODE);
}
}
}
Java.Consol
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.JButton;
import javax.swing.JFrame;
public class KeresztrejtvenyRacs {
private List<String> adatSorok = new ArrayList<>();
private char[] racs;
private int[] sorszamok;
private int oszlopokDB = -1;
private int sorokDB = 0;
public KeresztrejtvenyRacs(String forras) {
beolvasAdatsorok(forras);
racs = new char[oszlopokDB * sorokDB];
sorszamok = new int[oszlopokDB * sorokDB];
feltoltRacs();
System.out.println("5. A keresztrejtvény mérete\n\tSorok száma: " + sorokDB + "\n\tOszlopok száma: " + oszlopokDB);
System.out.println("6. A beolvasott keresztrejtvény ");
kiir();
System.out.println("7. A leghosszabb függ.: " + getLeghosszabb() + " karakter");
System.out.println("8. Vízszintes szavak statisztikája");
for (Entry<Integer,Integer> entry : getVizszintes().entrySet()) {
System.out.println("\t" + entry.getKey() + " betűs: " + entry.getValue() + " darab");
}
System.out.println("9. A keresztrejtvény számokkal");
for (Entry<Integer,Integer> entry : getSzamokkal().entrySet()) {
System.out.println("\t" + entry.getKey() + " betűs: " + entry.getValue() + " darab");
}
}
private void beolvasAdatsorok(String forras) {
try {
FileReader fr = new FileReader(forras);
BufferedReader br = new BufferedReader(fr);
while (br.ready()) {
String line = br.readLine();
adatSorok.add(line);
if (oszlopokDB == -1) {
oszlopokDB = line.split("").length;
}
System.out.println(line);
sorokDB++;
}
br.close();
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
private void feltoltRacs() {
int n = 0;
for (int i = 0; i < sorokDB; i++) {
String[] sor = adatSorok.get(i).split("");
for (int j = 0; j < oszlopokDB; j++) {
racs[n] = sor[j].charAt(0);
n++;
}
}
System.out.println(Arrays.toString(racs));
}
public void kiir() {
int n = 0;
for (int i = 0; i < sorokDB; i++) {
System.out.print("\t");
for (int j = 0; j < oszlopokDB; j++) {
if (racs[n] == '#') {
System.out.print("##");
} else {
System.out.print("[]");
}
n++;
}
System.out.println();
}
}
public int getLeghosszabb() {
int n = 0;
int currLength = 0;
int longest = 0;
for (int i = 0; i < oszlopokDB; i++) {
for (int j = 0; j < sorokDB; j++) {
if (racs[i + j * sorokDB] == '-') {
currLength++;
} else {
longest = Math.max(longest, currLength);
currLength = 0;
}
n++;
}
longest = Math.max(longest, currLength);
currLength = 0;
}
return longest;
}
}
class Main {
public static void main(String[] args) {
KeresztrejtvenyRacs keresztrejtvenyRacs = new KeresztrejtvenyRacs("./kr1.txt");
KeresztrejtvenyGUI gui = new KeresztrejtvenyGUI();
}
}
Java.GUI
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
public class Keresztrejtveny {
private JFrame frame = new JFrame("Keresztrejtvény készítő");
private List<JButton> buttons = new ArrayList<>();
private JButton last = null;
private long lastClick = 0;
public static void main(String[] args) {
Keresztrejtveny keresztrejtveny = new Keresztrejtveny();
}
public Keresztrejtveny() {
frame.setBounds(100, 100, 1500, 900);
frame.setLayout(null);
JLabel jLabel = new JLabel("Keresztrejtvény mérete [sor x oszlop]: ");
jLabel.setBounds(10, 50, 350, 30);
frame.add(jLabel);
JComboBox<Integer> boxX = new JComboBox<>();
for (int i = 6; i < 16; i++) {
boxX.addItem(i);
}
boxX.setBounds(250, 50, 50, 30);
frame.add(boxX);
JComboBox<Integer> boxY = new JComboBox<>();
for (int i = 6; i < 16; i++) {
boxY.addItem(i);
}
boxY.setBounds(310, 50, 50, 30);
frame.add(boxY);
JButton createButton = new JButton("Keresztrejtvény létrehozás");
createButton.setBounds(10, 100, 200, 30);
frame.add(createButton);
JButton saveButton = new JButton("Keresztrejtvény mentése");
saveButton.setBounds(220, 100, 200, 30);
frame.add(saveButton);
JComboBox<Integer> boxSave = new JComboBox<>();
for (int i = 1; i < 11; i++) {
boxSave.addItem(i);
}
boxSave.setSelectedItem(3);
boxSave.setBounds(450, 100, 50, 30);
frame.add(boxSave);
createButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (JButton button : buttons) {
frame.remove(button);
}
for (int i = 0; i < ((Integer) boxX.getSelectedItem()); i++) {
for (int j = 0; j < ((Integer) boxY.getSelectedItem()); j++) {
JButton jButton = new JButton("-");
jButton.setBounds(10 + 45 * j, 150 + 45 * i, 43, 43);
frame.add(jButton);
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
last = jButton;
if (System.currentTimeMillis() - lastClick < 1_000L) {
if (jButton.getText() == "-") {
jButton.setText("#");
}
else {
jButton.setText("-");
}
}
lastClick = System.currentTimeMillis();
}
});
jButton.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
if (last == null) return;
jButton.setText("" + e.getKeyChar());
}
});
buttons.add(jButton);
}
}
frame.setVisible(false);
frame.setVisible(true);
}
});
saveButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
FileWriter fw = new FileWriter("./kr" + boxSave.getSelectedItem() + ".txt");
BufferedWriter bw = new BufferedWriter(fw);
int n = 0;
for (int i = 0; i < ((Integer) boxX.getSelectedItem()); i++) {
for (int j = 0; j < ((Integer) boxY.getSelectedItem()); j++) {
bw.append(buttons.get(n).getText());
n++;
}
bw.write("\n");
}
bw.close();
fw.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
frame.setVisible(true);
}
}