This commit is contained in:
marcusferl 2022-03-22 23:09:39 +01:00
parent b5de16c01b
commit 7a56e75a5c
15 changed files with 313 additions and 0 deletions

11
README.md Normal file
View File

@ -0,0 +1,11 @@
<h1> Projekt Fragen - Katalog</h1>
Ziel ist es ein Programm mit einer Datenbank zu erstellen, welches:
- Fragen und Antworen einließt
- Ein Auswahlmenü bietet
- Fragen abfragt und die Antwort ausgibt
<br>
<br>
<h4>Um das Programm zu starten:</h4>
Führe die 'start.bat' aus.

23
app.py Normal file
View File

@ -0,0 +1,23 @@
# TODO: Datenbankabfrage
# Auswahlmenü (Neue Fragen/ Oder Abfrage)
# Ein und Ausgabe der Fragen/Antworten
# Datenbanken (CRUD) Tabellen (CRUD)
from menu import main_menu
from assets import requirements_installer
# Aufruf des Main Menüs
def main():
print('Programm wird in 5 Sekunden gestartet, bitte gewährleiste, dass beim Programmstart dein Mysql Server '
'online ist\n')
print('Installation vom Mysql Connector\n')
# Installiert die nötigen Ressourcen
requirements_installer.installer()
print('\n ----IHK Prüfungsfragen---- \n')
main_menu.main_menu()
# Starten der Main
main()

0
assets/__init__.py Normal file
View File

8
assets/config.py Normal file
View File

@ -0,0 +1,8 @@
# TODO Database verbindung herstellen
# Database Verbindungsdaten
user = 'root'
password = ''
host = 'localhost'
json_file = 'assets/questions_answers.json'

View File

@ -0,0 +1,24 @@
import json
from random import randrange
# Einlesen vom Json File
def read_json(filename):
with open(filename,encoding='utf-8') as filename:
data = json.load(filename)
return data
# Zufällige Frage erstellen
def random_question(filename):
min_ = 0
max_ = len(read_json(filename))
random_number = randrange(min_,max_)
questions = read_json(filename)
question = f'Frage #{random_number}: ' + questions[random_number][str(random_number)]['question']
answer = questions[random_number][str(random_number)]['answer']
return question, answer
#print(random_question(config.json_file)[0])

View File

@ -0,0 +1,9 @@
[
{
"0": {
"question": "Was versteht man unter dem Begriff Cross-Selling?",
"answer": "Eine Verkaufsstrategie, bei der zu einem Produkt, zusätzliche ( inhalte, produkte, services etc...) angeboten werden, um einen höheren Umsatz und die Kundenanbindung zu erhöhen"
}
}
]

View File

@ -0,0 +1,8 @@
import sys
import subprocess
# Ressourcen für den Autoinstaller
def installer():
subprocess.check_call([sys.executable, '-m', 'pip', 'install',
'mysql-connector-python'])

0
database/__init__.py Normal file
View File

87
database/database.py Normal file
View File

@ -0,0 +1,87 @@
# TODO: Datenbank Klasse (CRUD)
#
# TODO: Tabellen und Spaltennamen selbst bestimmen
import mysql.connector
# Create Database or Table
def create(db_cursor, name, type_):
# TODO Fix nötig
query = f'CREATE {type_} {name};'
if type_ == 'TABLE':
query = f'CREATE {type_} {name} (ID integer primary key auto_increment, question varchar(255), answers varchar(255));'
try:
db_cursor.execute(query)
except mysql.connector.Error as err:
print('Something went wrong', err)
def read(db_cursor, name):
query = f'SELECT * FROM {name}'
try:
db_cursor.execute(query)
except mysql.connector.Error as err:
print('Something went wrong', err)
def update(db_cursor, name, type_):
# TODO
return
def del_(db_cursor, name, type_):
query = f'DROP {type_} IF EXISTS {name};'
try:
db_cursor.execute(query)
except mysql.connector.Error as err:
print('Something went wrong', err)
# TODO hier die Spaltennamen selbst bestimmen
def add(db_cursor, name, question, answer):
query = f'INSERT INTO {name} (question, answer) VALUES ({question}, {answer});'
try:
db_cursor.execute(query)
except mysql.connector.Error as err:
print('Something went wrong', err)
def show(db_cursor, type_):
query = f'SHOW {type_};'
try:
db_cursor.execute(query)
except mysql.connector.Error as err:
print('Something went wrong', err)
def use(db_cursor, name):
query = f'USE {name};'
try:
db_cursor.execute(query)
except mysql.connector.Error as err:
print('Something went wrong', err)
def show_tables(db_cursor):
query = 'show tables;'
try:
db_cursor.execute(query)
except mysql.connector.Error as err:
print('Something went wrong', err)
def show(db_cursor, use_type):
query = f'show {use_type}'
try:
db_cursor.execute(query)
for i in db_cursor.fetchall():
print(str(i).replace(',','').replace('(', '').replace(')', ''))
print('\n')
except mysql.connector.Error as err:
print('Something went wrong', err)
def string_formater(_string):
_string.replace(',','').replace('(', '').replace(')', '')
return str(_string)

View File

@ -0,0 +1,15 @@
import mysql.connector
# Aufbau der verbindung zum Mysql Server
def db_connection(user, password, host, database):
connection = ''
try:
# Verbindung - Eingaben in der config.py bestimmen
connection = mysql.connector.connect(user=user, password=password, host=host, database=database)
except mysql.connector.Error as err:
print('Something went wrong', err)
print('Veruche deinen Mysql Server neu zu starten')
return connection

0
menu/__init__.py Normal file
View File

83
menu/database_menu.py Normal file
View File

@ -0,0 +1,83 @@
from assets import config
from database import database
from database import database_connection
from menu import main_menu
# Datenbank Menü
def menu():
connection = database_connection.db_connection(config.user, config.password, config.host, None)
selection = {0: ' Datenbanken anzeigen', 1: ' Datenbank erstellen', 2: ' Datenbank löschen',
3: ' Datenbank umbenennen',
4: ' Datenbanken benutzen',
5: ' Tabelle erstellen', 6: ' Tabelle umbenennen', 7: ' Tabelle löschen', 8: ' Tabelle auslesen',
9: ' In Tabelle einfügen', 10: 'Tabellen anzeigen', 11: 'Frage/Antwort hinzufügen',
12: 'Zurück zum Hauptmenü'}
while connection.is_connected():
print('#Datenbank Menü# \n'
'\nWas möchtest du tun?\n')
cursor = connection.cursor()
for key, value in selection.items():
print(key, value)
selection_number = int(input('\nBitte Auswahl treffen\n'))
match selection_number:
case 0:
use_type = 'DATABASES'
print('# Datenbanken #\n')
database.show(cursor, use_type)
case 1:
use_type = 'DATABASE'
print('# Datenbank erstellen #\n')
database_name = input('Wie soll die Datenbank heißen?\n')
database.create(cursor, database_name, use_type)
case 2:
use_type = 'DATABASE'
print('# Datenbank löschen #\n') # Platzhalter für die Funktion
database_name = input('Welche Datenbank soll gelöscht werden?\n')
database.del_(cursor, database_name, use_type)
case 3:
print('--Funktion ist in Arbeit-- \n')
continue
case 4:
name = input('Welche Datenbank möchtest du benutzen?\n')
database.use(cursor, name)
connection.database = name
case 5:
use_type = 'TABLE'
print('# Tabelle erstellen #\n')
table_name = input('Wie soll die Datenbank heißen?\n')
database.create(cursor, table_name, use_type)
case 6:
print('--Funktion ist in Arbeit-- \n')
continue
case 7:
print('--Funktion ist in Arbeit-- \n')
continue
case 8:
print('# Tabelle Auslesen #\n')
name = input('Aus welcher Tabelle soll dir alles angezeigt werden?\n')
database.read(cursor, name)
case 9:
print('--Funktion ist in Arbeit-- \n')
continue
case 10:
database.show_tables(cursor)
print(str(cursor.fetchall()).replace(',', ''))
return
case 11:
table_name = str(input('Bitte den Tabellennamen angeben\n'))
print("#Fragen und Antworten hinzufügen #\n")
question = str(input('Bitte die Frage eingeben\n'))
answer = str(input('Bitte die dazugehörige antwort eingeben\n'))
database.add(cursor, table_name, question, answer)
case 12:
main_menu.main_menu()

30
menu/main_menu.py Normal file
View File

@ -0,0 +1,30 @@
from assets import config, question_answer_output
from menu import database_menu
# Main Menu
def main_menu():
enable_menu = True
selection = {0: 'Datenbank Menü', 1: 'Zufallsfrage', 2: 'Programm beenden\n'}
print('# Main Menü #\n')
while enable_menu:
for key, value in selection.items():
print(key, value)
selection_number = int(input('Bitte Auswahl treffen\n'))
match selection_number:
case 0:
database_menu.menu()
break
case 1:
while True:
print('#Frage#\n' + '-' * 60 + '\n' + question_answer_output.random_question(config.json_file)[0])
input('\nBitte Enter drücken um die Antwort zu sehen\n')
print('#Antwort#\n' + question_answer_output.random_question(config.json_file)[1])
number = int(input('\nZurück zum Hauptmenü\n 1: Ja \n 2: Nein, nächste Frage\n'))
if number == 1:
break
case 2:
break

10
start.bat Normal file
View File

@ -0,0 +1,10 @@
@echo off
chcp 65001
echo #####################################
echo # Autor : Marcus Ferl #
echo # Beschreibung : IHK Fragenkatalog #
echo # Programm gestartet #
echo #####################################
@py.exe app.py
pause

5
start_app.py Normal file
View File

@ -0,0 +1,5 @@
import os
# Startet das Programm in der Windows Konsole
os.system("start /wait cmd /c py app.py")