- init: inti repo
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
cmake-build-debug
|
||||
10
.idea/.gitignore
generated
vendored
Normal file
10
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Ignored default folder with query files
|
||||
/queries/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
1
.idea/.name
generated
Normal file
1
.idea/.name
generated
Normal file
@@ -0,0 +1 @@
|
||||
StationManager
|
||||
18
.idea/QtSettings.xml
generated
Normal file
18
.idea/QtSettings.xml
generated
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="QtSettings">
|
||||
<option name="myCurrentProfile" value="Debug" />
|
||||
<option name="mySettingsPerProfile">
|
||||
<map>
|
||||
<entry key="Debug">
|
||||
<value>
|
||||
<PerProfileState>
|
||||
<option name="myQmlPath" value="$PROJECT_DIR$/../../../../Qt/6.11.0/mingw_64/qml" />
|
||||
<option name="myQtBinPath" value="$PROJECT_DIR$/../../../../Qt/6.11.0/mingw_64/bin" />
|
||||
</PerProfileState>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
12
.idea/dataSources.xml
generated
Normal file
12
.idea/dataSources.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="station" uuid="4e7503e4-2f44-472c-9598-3464bb9d87a0">
|
||||
<driver-ref>sqlite.xerial</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/cmake-build-debug/station.db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
345
.idea/editor.xml
generated
Normal file
345
.idea/editor.xml
generated
Normal file
@@ -0,0 +1,345 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BackendCodeEditorSettings">
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefinitionsOrder/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedOverridenMethod/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppModulePartitionWithSeveralPartitionUnits/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantFwdClassOrEnumSpecifier/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifierADL/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
|
||||
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||
</component>
|
||||
</project>
|
||||
4
.idea/encodings.xml
generated
Normal file
4
.idea/encodings.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||
</project>
|
||||
7
.idea/misc.xml
generated
Normal file
7
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakePythonSetting">
|
||||
<option name="pythonIntegrationState" value="YES" />
|
||||
</component>
|
||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/untitled.iml" filepath="$PROJECT_DIR$/.idea/untitled.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
2
.idea/untitled.iml
generated
Normal file
2
.idea/untitled.iml
generated
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="CIDR" type="CPP_MODULE" version="4" />
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
85
CMakeLists.txt
Normal file
85
CMakeLists.txt
Normal file
@@ -0,0 +1,85 @@
|
||||
cmake_minimum_required(VERSION 4.2)
|
||||
project(StationManager)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
|
||||
set(CMAKE_PREFIX_PATH "C:/Qt/6.11.0/mingw_64")
|
||||
|
||||
find_package(Qt6 COMPONENTS
|
||||
Core
|
||||
Gui
|
||||
Widgets
|
||||
Sql
|
||||
REQUIRED)
|
||||
|
||||
set(SOURCES
|
||||
main.cpp
|
||||
database.cpp
|
||||
loginwindow.cpp
|
||||
mainwindow.cpp
|
||||
routeswidget.cpp
|
||||
ticketswidget.cpp
|
||||
printwidget.cpp
|
||||
userswidget.cpp
|
||||
)
|
||||
|
||||
set(HEADERS
|
||||
database.h
|
||||
loginwindow.h
|
||||
mainwindow.h
|
||||
routeswidget.h
|
||||
ticketswidget.h
|
||||
printwidget.h
|
||||
userswidget.h
|
||||
database.cpp
|
||||
)
|
||||
|
||||
add_executable(StationManager ${SOURCES} ${HEADERS})
|
||||
target_link_libraries(StationManager
|
||||
Qt::Core
|
||||
Qt::Gui
|
||||
Qt::Widgets
|
||||
Qt::Sql
|
||||
)
|
||||
|
||||
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
|
||||
set(DEBUG_SUFFIX)
|
||||
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||
set(DEBUG_SUFFIX "d")
|
||||
endif ()
|
||||
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
|
||||
message(STATUS "CMAKE PATH ${CMAKE_PREFIX_PATH}")
|
||||
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
|
||||
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
|
||||
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
|
||||
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
|
||||
endif ()
|
||||
endif ()
|
||||
if (EXISTS "${QT_INSTALL_PATH}/plugins/sqldrivers/qsqlite.dll")
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||||
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/sqldrivers/")
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${QT_INSTALL_PATH}/plugins/sqldrivers/qsqlite.dll"
|
||||
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/sqldrivers/")
|
||||
endif ()
|
||||
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory
|
||||
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
|
||||
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
|
||||
endif ()
|
||||
foreach (QT_LIB Core Gui Widgets Sql)
|
||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
|
||||
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
|
||||
endforeach (QT_LIB)
|
||||
endif ()
|
||||
78
SPEC.md
Normal file
78
SPEC.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Система учета работы вокзала - Спецификация
|
||||
|
||||
## 1. Обзор
|
||||
|
||||
**Название:** StationManager
|
||||
**Тип:** Десктопное приложение (Qt6 + SQLite)
|
||||
**Назначение:** Учет продажи билетов на железнодорожном вокзале
|
||||
|
||||
## 2. Функциональность
|
||||
|
||||
### 2.1 Авторизация
|
||||
- Форма входа с логином и паролем
|
||||
- Хранение пользователей в БД
|
||||
- Роли: Администратор, Кассир
|
||||
- Админ может добавлять пользователей
|
||||
|
||||
### 2.2 Продажа билетов
|
||||
- Выбор рейса из списка
|
||||
- Ввод данных пассажира (ФИО, номер документа)
|
||||
- Выбор количества билетов
|
||||
- Автоматический расчет стоимости
|
||||
- Сохранение в базу данных
|
||||
|
||||
### 2.3 Управление рейсами
|
||||
- Добавление новых рейсов (маршрут, дата/время, цена, количество мест)
|
||||
- Просмотр списка рейсов
|
||||
- Редактирование/удаление рейсов
|
||||
|
||||
### 2.4 Печать билетов
|
||||
- Фильтрация по номеру рейса
|
||||
- Отображение списка проданных билетов
|
||||
- Экспорт в текстовый файл для печати
|
||||
|
||||
## 3. Архитектура БД
|
||||
|
||||
### Таблица users
|
||||
| Поле | Тип | Описание |
|
||||
|------|-----|----------|
|
||||
| id | INTEGER PK | ID пользователя |
|
||||
| username | TEXT | Логин |
|
||||
| password | TEXT | Пароль (хеш) |
|
||||
| role | TEXT | Роль (admin/cashier) |
|
||||
|
||||
### Таблица routes
|
||||
| Поле | Тип | Описание |
|
||||
|------|-----|----------|
|
||||
| id | INTEGER PK | ID рейса |
|
||||
| route_name | TEXT | Название маршрута |
|
||||
| departure_time | TEXT | Дата/время отправления |
|
||||
| price | REAL | Цена билета |
|
||||
| total_seats | INTEGER | Всего мест |
|
||||
| available_seats | INTEGER | Свободных мест |
|
||||
|
||||
### Таблица tickets
|
||||
| Поле | Тип | Описание |
|
||||
|------|-----|----------|
|
||||
| id | INTEGER PK | ID билета |
|
||||
| route_id | INTEGER FK | ID рейса |
|
||||
| passenger_name | TEXT | ФИО пассажира |
|
||||
| document_number | TEXT | Номер документа |
|
||||
| seat_count | INTEGER | Количество билетов |
|
||||
| total_price | REAL | Общая стоимость |
|
||||
| seller_id | INTEGER FK | ID кассира |
|
||||
| sale_date | TEXT | Дата продажи |
|
||||
|
||||
## 4. Интерфейс
|
||||
|
||||
### Окна:
|
||||
1. **LoginWindow** - авторизация
|
||||
2. **MainWindow** - главное окно с меню
|
||||
3. **RoutesWidget** - управление рейсами
|
||||
4. **TicketsWidget** - продажа билетов
|
||||
5. **PrintWidget** - печать списка билетов
|
||||
6. **UsersWidget** - управление пользователями (admin)
|
||||
|
||||
### Навигация:
|
||||
- Боковое меню с переключением между виджетами
|
||||
- Строка состояния с информацией о текущем пользователе
|
||||
306
database.cpp
Normal file
306
database.cpp
Normal file
@@ -0,0 +1,306 @@
|
||||
#include "database.h"
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlError>
|
||||
#include <QSqlRecord>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QDir>
|
||||
|
||||
Database& Database::instance() {
|
||||
static Database instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
bool Database::initialize() {
|
||||
m_db = QSqlDatabase::addDatabase("QSQLITE", "StationDB");
|
||||
QString dbPath = QDir::currentPath() + "/station.db";
|
||||
m_db.setDatabaseName(dbPath);
|
||||
|
||||
if (!m_db.open()) {
|
||||
qDebug() << QDir::currentPath() + "/station.db";
|
||||
qDebug() << "Database open error:" << m_db.lastError().text();
|
||||
return false;
|
||||
}
|
||||
|
||||
QSqlQuery query(m_db);
|
||||
|
||||
query.exec("CREATE TABLE IF NOT EXISTS users ("
|
||||
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||
"username TEXT UNIQUE NOT NULL, "
|
||||
"password TEXT NOT NULL, "
|
||||
"role TEXT NOT NULL)");
|
||||
|
||||
query.exec("CREATE TABLE IF NOT EXISTS routes ("
|
||||
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||
"route_name TEXT NOT NULL, "
|
||||
"departure_time TEXT NOT NULL, "
|
||||
"price REAL NOT NULL, "
|
||||
"total_seats INTEGER NOT NULL, "
|
||||
"available_seats INTEGER NOT NULL)");
|
||||
|
||||
query.exec("CREATE TABLE IF NOT EXISTS tickets ("
|
||||
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||
"route_id INTEGER NOT NULL, "
|
||||
"passenger_name TEXT NOT NULL, "
|
||||
"document_number TEXT NOT NULL, "
|
||||
"seat_count INTEGER NOT NULL, "
|
||||
"total_price REAL NOT NULL, "
|
||||
"seller_id INTEGER NOT NULL, "
|
||||
"sale_date TEXT NOT NULL, "
|
||||
"FOREIGN KEY (route_id) REFERENCES routes(id), "
|
||||
"FOREIGN KEY (seller_id) REFERENCES users(id))");
|
||||
|
||||
query.exec("SELECT COUNT(*) FROM users WHERE role = 'admin'");
|
||||
if (query.next() && query.value(0).toInt() == 0) {
|
||||
addUser("admin", "admin123", "admin");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QString Database::hashPassword(const QString& password) {
|
||||
QByteArray hash = QCryptographicHash::hash(
|
||||
password.toUtf8(), QCryptographicHash::Sha256);
|
||||
return hash.toHex();
|
||||
}
|
||||
|
||||
bool Database::authenticate(const QString& username, const QString& password) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("SELECT password FROM users WHERE username = ?");
|
||||
query.addBindValue(username);
|
||||
|
||||
if (query.exec() && query.next()) {
|
||||
return query.value(0).toString() == hashPassword(password);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
User Database::getUser(const QString& username) {
|
||||
User user;
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("SELECT id, username, password, role FROM users WHERE username = ?");
|
||||
query.addBindValue(username);
|
||||
|
||||
if (query.exec() && query.next()) {
|
||||
user.id = query.value(0).toInt();
|
||||
user.username = query.value(1).toString();
|
||||
user.password = query.value(2).toString();
|
||||
user.role = query.value(3).toString();
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
QVector<User> Database::getAllUsers() {
|
||||
QVector<User> users;
|
||||
QSqlQuery query("SELECT id, username, password, role FROM users", m_db);
|
||||
|
||||
while (query.next()) {
|
||||
User user;
|
||||
user.id = query.value(0).toInt();
|
||||
user.username = query.value(1).toString();
|
||||
user.password = query.value(2).toString();
|
||||
user.role = query.value(3).toString();
|
||||
users.append(user);
|
||||
}
|
||||
return users;
|
||||
}
|
||||
|
||||
bool Database::addUser(const QString& username, const QString& password, const QString& role) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("INSERT INTO users (username, password, role) VALUES (?, ?, ?)");
|
||||
query.addBindValue(username);
|
||||
query.addBindValue(hashPassword(password));
|
||||
query.addBindValue(role);
|
||||
return query.exec();
|
||||
}
|
||||
|
||||
bool Database::deleteUser(int id) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("DELETE FROM users WHERE id = ? AND role != 'admin'");
|
||||
query.addBindValue(id);
|
||||
return query.exec();
|
||||
}
|
||||
|
||||
QVector<Route> Database::getAllRoutes() {
|
||||
QVector<Route> routes;
|
||||
QSqlQuery query("SELECT id, route_name, departure_time, price, total_seats, available_seats FROM routes", m_db);
|
||||
|
||||
while (query.next()) {
|
||||
Route route;
|
||||
route.id = query.value(0).toInt();
|
||||
route.routeName = query.value(1).toString();
|
||||
route.departureTime = query.value(2).toString();
|
||||
route.price = query.value(3).toDouble();
|
||||
route.totalSeats = query.value(4).toInt();
|
||||
route.availableSeats = query.value(5).toInt();
|
||||
routes.append(route);
|
||||
}
|
||||
return routes;
|
||||
}
|
||||
|
||||
Route Database::getRoute(int id) {
|
||||
Route route;
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("SELECT id, route_name, departure_time, price, total_seats, available_seats FROM routes WHERE id = ?");
|
||||
query.addBindValue(id);
|
||||
|
||||
if (query.exec() && query.next()) {
|
||||
route.id = query.value(0).toInt();
|
||||
route.routeName = query.value(1).toString();
|
||||
route.departureTime = query.value(2).toString();
|
||||
route.price = query.value(3).toDouble();
|
||||
route.totalSeats = query.value(4).toInt();
|
||||
route.availableSeats = query.value(5).toInt();
|
||||
}
|
||||
return route;
|
||||
}
|
||||
|
||||
bool Database::addRoute(const QString& routeName, const QString& departureTime,
|
||||
double price, int totalSeats) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("INSERT INTO routes (route_name, departure_time, price, total_seats, available_seats) "
|
||||
"VALUES (?, ?, ?, ?, ?)");
|
||||
query.addBindValue(routeName);
|
||||
query.addBindValue(departureTime);
|
||||
query.addBindValue(price);
|
||||
query.addBindValue(totalSeats);
|
||||
query.addBindValue(totalSeats);
|
||||
return query.exec();
|
||||
}
|
||||
|
||||
bool Database::updateRoute(const Route& route) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("UPDATE routes SET route_name = ?, departure_time = ?, price = ?, "
|
||||
"total_seats = ?, available_seats = ? WHERE id = ?");
|
||||
query.addBindValue(route.routeName);
|
||||
query.addBindValue(route.departureTime);
|
||||
query.addBindValue(route.price);
|
||||
query.addBindValue(route.totalSeats);
|
||||
query.addBindValue(route.availableSeats);
|
||||
query.addBindValue(route.id);
|
||||
return query.exec();
|
||||
}
|
||||
|
||||
bool Database::deleteRoute(int id) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("DELETE FROM routes WHERE id = ?");
|
||||
query.addBindValue(id);
|
||||
return query.exec();
|
||||
}
|
||||
|
||||
bool Database::updateAvailableSeats(int routeId, int change) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("UPDATE routes SET available_seats = available_seats + ? WHERE id = ?");
|
||||
query.addBindValue(change);
|
||||
query.addBindValue(routeId);
|
||||
return query.exec();
|
||||
}
|
||||
|
||||
QVector<Ticket> Database::getTicketsByRoute(int routeId) {
|
||||
QVector<Ticket> tickets;
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("SELECT t.id, t.route_id, r.route_name, t.passenger_name, "
|
||||
"t.document_number, t.seat_count, t.total_price, t.seller_id, "
|
||||
"u.username, t.sale_date "
|
||||
"FROM tickets t "
|
||||
"JOIN routes r ON t.route_id = r.id "
|
||||
"JOIN users u ON t.seller_id = u.id "
|
||||
"WHERE t.route_id = :route_id");
|
||||
query.bindValue(":route_id", routeId);
|
||||
|
||||
query.exec();
|
||||
|
||||
while (query.next()) {
|
||||
Ticket ticket;
|
||||
ticket.id = query.value(0).toInt();
|
||||
ticket.routeId = query.value(1).toInt();
|
||||
ticket.routeName = query.value(2).toString();
|
||||
ticket.passengerName = query.value(3).toString();
|
||||
ticket.documentNumber = query.value(4).toString();
|
||||
ticket.seatCount = query.value(5).toInt();
|
||||
ticket.totalPrice = query.value(6).toDouble();
|
||||
ticket.sellerId = query.value(7).toInt();
|
||||
ticket.sellerName = query.value(8).toString();
|
||||
ticket.saleDate = query.value(9).toString();
|
||||
tickets.append(ticket);
|
||||
}
|
||||
return tickets;
|
||||
}
|
||||
|
||||
QVector<Ticket> Database::getAllTickets() {
|
||||
QVector<Ticket> tickets;
|
||||
QSqlQuery query("SELECT t.id, t.route_id, r.route_name, t.passenger_name, "
|
||||
"t.document_number, t.seat_count, t.total_price, t.seller_id, "
|
||||
"u.username, t.sale_date "
|
||||
"FROM tickets t "
|
||||
"JOIN routes r ON t.route_id = r.id "
|
||||
"JOIN users u ON t.seller_id = u.id "
|
||||
"ORDER BY t.sale_date DESC",m_db);
|
||||
|
||||
query.exec();
|
||||
|
||||
while (query.next()) {
|
||||
Ticket ticket;
|
||||
ticket.id = query.value(0).toInt();
|
||||
ticket.routeId = query.value(1).toInt();
|
||||
ticket.routeName = query.value(2).toString();
|
||||
ticket.passengerName = query.value(3).toString();
|
||||
ticket.documentNumber = query.value(4).toString();
|
||||
ticket.seatCount = query.value(5).toInt();
|
||||
ticket.totalPrice = query.value(6).toDouble();
|
||||
ticket.sellerId = query.value(7).toInt();
|
||||
ticket.sellerName = query.value(8).toString();
|
||||
ticket.saleDate = query.value(9).toString();
|
||||
tickets.append(ticket);
|
||||
}
|
||||
return tickets;
|
||||
}
|
||||
|
||||
bool Database::addTicket(int routeId, const QString& passengerName,
|
||||
const QString& documentNumber, int seatCount, int sellerId) {
|
||||
Route route = getRoute(routeId);
|
||||
double totalPrice = route.price * seatCount;
|
||||
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("INSERT INTO tickets (route_id, passenger_name, document_number, "
|
||||
"seat_count, total_price, seller_id, sale_date) VALUES (?, ?, ?, ?, ?, ?, ?)");
|
||||
query.addBindValue(routeId);
|
||||
query.addBindValue(passengerName);
|
||||
query.addBindValue(documentNumber);
|
||||
query.addBindValue(seatCount);
|
||||
query.addBindValue(totalPrice);
|
||||
query.addBindValue(sellerId);
|
||||
query.addBindValue(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"));
|
||||
|
||||
if (query.exec()) {
|
||||
return updateAvailableSeats(routeId, -seatCount);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Database::deleteTicket(int id) {
|
||||
QSqlQuery query(m_db);
|
||||
query.prepare("SELECT route_id, seat_count FROM tickets WHERE id = ?");
|
||||
query.addBindValue(id);
|
||||
|
||||
if (query.exec() && query.next()) {
|
||||
int routeId = query.value(0).toInt();
|
||||
int seatCount = query.value(1).toInt();
|
||||
|
||||
query.prepare("DELETE FROM tickets WHERE id = ?");
|
||||
query.addBindValue(id);
|
||||
|
||||
if (query.exec()) {
|
||||
return updateAvailableSeats(routeId, seatCount);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int Database::getLastTicketId() {
|
||||
QSqlQuery query("SELECT last_insert_rowid()", m_db);
|
||||
if (query.next()) {
|
||||
return query.value(0).toInt();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
77
database.h
Normal file
77
database.h
Normal file
@@ -0,0 +1,77 @@
|
||||
#ifndef DATABASE_H
|
||||
#define DATABASE_H
|
||||
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlError>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QCryptographicHash>
|
||||
|
||||
struct User {
|
||||
int id;
|
||||
QString username;
|
||||
QString password;
|
||||
QString role;
|
||||
};
|
||||
|
||||
struct Route {
|
||||
int id;
|
||||
QString routeName;
|
||||
QString departureTime;
|
||||
double price;
|
||||
int totalSeats;
|
||||
int availableSeats;
|
||||
};
|
||||
|
||||
struct Ticket {
|
||||
int id;
|
||||
int routeId;
|
||||
QString routeName;
|
||||
QString passengerName;
|
||||
QString documentNumber;
|
||||
int seatCount;
|
||||
double totalPrice;
|
||||
int sellerId;
|
||||
QString sellerName;
|
||||
QString saleDate;
|
||||
};
|
||||
|
||||
class Database {
|
||||
public:
|
||||
static Database& instance();
|
||||
bool initialize();
|
||||
|
||||
bool authenticate(const QString& username, const QString& password);
|
||||
User getUser(const QString& username);
|
||||
QVector<User> getAllUsers();
|
||||
bool addUser(const QString& username, const QString& password, const QString& role);
|
||||
bool deleteUser(int id);
|
||||
|
||||
QVector<Route> getAllRoutes();
|
||||
Route getRoute(int id);
|
||||
bool addRoute(const QString& routeName, const QString& departureTime,
|
||||
double price, int totalSeats);
|
||||
bool updateRoute(const Route& route);
|
||||
bool deleteRoute(int id);
|
||||
bool updateAvailableSeats(int routeId, int change);
|
||||
|
||||
QVector<Ticket> getTicketsByRoute(int routeId);
|
||||
QVector<Ticket> getAllTickets();
|
||||
bool addTicket(int routeId, const QString& passengerName,
|
||||
const QString& documentNumber, int seatCount,
|
||||
int sellerId);
|
||||
bool deleteTicket(int id);
|
||||
int getLastTicketId();
|
||||
|
||||
private:
|
||||
Database() = default;
|
||||
~Database() = default;
|
||||
Database(const Database&) = delete;
|
||||
Database& operator=(const Database&) = delete;
|
||||
|
||||
QSqlDatabase m_db;
|
||||
QString hashPassword(const QString& password);
|
||||
};
|
||||
|
||||
#endif
|
||||
107
loginwindow.cpp
Normal file
107
loginwindow.cpp
Normal file
@@ -0,0 +1,107 @@
|
||||
#include "loginwindow.h"
|
||||
#include "database.h"
|
||||
#include <QMessageBox>
|
||||
|
||||
LoginWindow::LoginWindow(QWidget* parent)
|
||||
: QDialog(parent), isRegistering(false)
|
||||
{
|
||||
setWindowTitle("Авторизация - Система вокзала");
|
||||
setFixedSize(400, 280);
|
||||
setModal(true);
|
||||
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
mainLayout->setSpacing(15);
|
||||
mainLayout->setContentsMargins(30, 30, 30, 30);
|
||||
|
||||
QLabel* titleLabel = new QLabel("Система учета вокзала", this);
|
||||
titleLabel->setAlignment(Qt::AlignCenter);
|
||||
titleLabel->setStyleSheet("font-size: 18px; font-weight: bold;");
|
||||
mainLayout->addWidget(titleLabel);
|
||||
|
||||
QLabel* userLabel = new QLabel("Логин:", this);
|
||||
m_usernameEdit = new QLineEdit(this);
|
||||
m_usernameEdit->setPlaceholderText("Введите логин");
|
||||
mainLayout->addWidget(userLabel);
|
||||
mainLayout->addWidget(m_usernameEdit);
|
||||
|
||||
QLabel* passLabel = new QLabel("Пароль:", this);
|
||||
m_passwordEdit = new QLineEdit(this);
|
||||
m_passwordEdit->setPlaceholderText("Введите пароль");
|
||||
m_passwordEdit->setEchoMode(QLineEdit::Password);
|
||||
mainLayout->addWidget(passLabel);
|
||||
mainLayout->addWidget(m_passwordEdit);
|
||||
|
||||
m_messageLabel = new QLabel(this);
|
||||
m_messageLabel->setAlignment(Qt::AlignCenter);
|
||||
m_messageLabel->setStyleSheet("color: red;");
|
||||
mainLayout->addWidget(m_messageLabel);
|
||||
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout();
|
||||
m_loginBtn = new QPushButton("Войти", this);
|
||||
m_registerBtn = new QPushButton("Регистрация", this);
|
||||
btnLayout->addWidget(m_loginBtn);
|
||||
btnLayout->addWidget(m_registerBtn);
|
||||
mainLayout->addLayout(btnLayout);
|
||||
|
||||
connect(m_loginBtn, &QPushButton::clicked, this, &LoginWindow::onLoginClicked);
|
||||
connect(m_registerBtn, &QPushButton::clicked, this, &LoginWindow::onRegisterClicked);
|
||||
}
|
||||
|
||||
void LoginWindow::onLoginClicked() {
|
||||
QString username = m_usernameEdit->text().trimmed();
|
||||
QString password = m_passwordEdit->text();
|
||||
|
||||
if (username.isEmpty() || password.isEmpty()) {
|
||||
m_messageLabel->setText("Заполните все поля!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (Database::instance().authenticate(username, password)) {
|
||||
User user = Database::instance().getUser(username);
|
||||
m_username = user.username;
|
||||
m_role = user.role;
|
||||
accept();
|
||||
} else {
|
||||
m_messageLabel->setText("Неверный логин или пароль!");
|
||||
m_passwordEdit->clear();
|
||||
}
|
||||
}
|
||||
|
||||
void LoginWindow::onRegisterClicked() {
|
||||
if (!isRegistering) {
|
||||
isRegistering = true;
|
||||
m_loginBtn->setText("Зарегистрироваться");
|
||||
m_registerBtn->setText("Отмена");
|
||||
m_messageLabel->setText("Регистрация нового пользователя");
|
||||
m_messageLabel->setStyleSheet("color: green;");
|
||||
} else {
|
||||
QString username = m_usernameEdit->text().trimmed();
|
||||
QString password = m_passwordEdit->text();
|
||||
|
||||
if (username.isEmpty() || password.isEmpty()) {
|
||||
m_messageLabel->setText("Заполните все поля!");
|
||||
m_messageLabel->setStyleSheet("color: red;");
|
||||
return;
|
||||
}
|
||||
|
||||
if (password.length() < 4) {
|
||||
m_messageLabel->setText("Пароль должен быть >= 4 символов!");
|
||||
m_messageLabel->setStyleSheet("color: red;");
|
||||
return;
|
||||
}
|
||||
|
||||
if (Database::instance().addUser(username, password, "cashier")) {
|
||||
QMessageBox::information(this, "Успех", "Пользователь зарегистрирован!");
|
||||
isRegistering = false;
|
||||
m_loginBtn->setText("Войти");
|
||||
m_registerBtn->setText("Регистрация");
|
||||
m_messageLabel->setText("");
|
||||
m_messageLabel->setStyleSheet("color: red;");
|
||||
m_usernameEdit->clear();
|
||||
m_passwordEdit->clear();
|
||||
} else {
|
||||
m_messageLabel->setText("Ошибка: пользователь уже существует!");
|
||||
m_messageLabel->setStyleSheet("color: red;");
|
||||
}
|
||||
}
|
||||
}
|
||||
38
loginwindow.h
Normal file
38
loginwindow.h
Normal file
@@ -0,0 +1,38 @@
|
||||
#ifndef LOGINWINDOW_H
|
||||
#define LOGINWINDOW_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
|
||||
class LoginWindow : public QDialog {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit LoginWindow(QWidget* parent = nullptr);
|
||||
QString getUsername() const { return m_username; }
|
||||
QString getRole() const { return m_role; }
|
||||
|
||||
signals:
|
||||
void loginSuccessful();
|
||||
|
||||
private slots:
|
||||
void onLoginClicked();
|
||||
void onRegisterClicked();
|
||||
|
||||
private:
|
||||
QLineEdit* m_usernameEdit;
|
||||
QLineEdit* m_passwordEdit;
|
||||
QPushButton* m_loginBtn;
|
||||
QPushButton* m_registerBtn;
|
||||
QLabel* m_messageLabel;
|
||||
QString m_username;
|
||||
QString m_role;
|
||||
|
||||
bool isRegistering;
|
||||
};
|
||||
|
||||
#endif
|
||||
28
main.cpp
Normal file
28
main.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#include <QApplication>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "database.h"
|
||||
#include "loginwindow.h"
|
||||
#include "mainwindow.h"
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
QApplication a(argc, argv);
|
||||
a.setApplicationName("StationManager");
|
||||
a.setOrganizationName("Station");
|
||||
|
||||
if (!Database::instance().initialize()) {
|
||||
QMessageBox::critical(nullptr, "Ошибка",
|
||||
"Не удалось инициализировать базу данных!");
|
||||
return 1;
|
||||
}
|
||||
|
||||
LoginWindow login;
|
||||
if (login.exec() != QDialog::Accepted) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
MainWindow w(login.getUsername(), login.getRole());
|
||||
w.show();
|
||||
|
||||
return QApplication::exec();
|
||||
}
|
||||
84
mainwindow.cpp
Normal file
84
mainwindow.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
#include "mainwindow.h"
|
||||
#include "routeswidget.h"
|
||||
#include "ticketswidget.h"
|
||||
#include "printwidget.h"
|
||||
#include "userswidget.h"
|
||||
#include "database.h"
|
||||
#include <QMenuBar>
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include <QApplication>
|
||||
|
||||
MainWindow::MainWindow(const QString& username, const QString& role, QWidget* parent)
|
||||
: QMainWindow(parent), m_username(username), m_role(role)
|
||||
{
|
||||
setWindowTitle("Система учета вокзала");
|
||||
setMinimumSize(900, 600);
|
||||
|
||||
User user = Database::instance().getUser(username);
|
||||
m_userId = user.id;
|
||||
|
||||
QMenuBar* menuBar = this->menuBar();
|
||||
QMenu* menu = menuBar->addMenu("Меню");
|
||||
|
||||
QAction* routesAction = menu->addAction("Управление рейсами");
|
||||
QAction* ticketsAction = menu->addAction("Продажа билетов");
|
||||
QAction* printAction = menu->addAction("Печать билетов");
|
||||
menu->addSeparator();
|
||||
QAction* logoutAction = menu->addAction("Выйти");
|
||||
|
||||
connect(routesAction, &QAction::triggered, this, &MainWindow::showRoutes);
|
||||
connect(ticketsAction, &QAction::triggered, this, &MainWindow::showTickets);
|
||||
connect(printAction, &QAction::triggered, this, &MainWindow::showPrint);
|
||||
connect(logoutAction, &QAction::triggered, this, &MainWindow::logout);
|
||||
|
||||
m_stack = new QStackedWidget(this);
|
||||
setCentralWidget(m_stack);
|
||||
|
||||
m_routesWidget = new RoutesWidget(this);
|
||||
m_ticketsWidget = new TicketsWidget(this);
|
||||
m_printWidget = new PrintWidget(this);
|
||||
m_usersWidget = new UsersWidget(this);
|
||||
|
||||
m_stack->addWidget(m_routesWidget);
|
||||
m_stack->addWidget(m_ticketsWidget);
|
||||
m_stack->addWidget(m_printWidget);
|
||||
m_stack->addWidget(m_usersWidget);
|
||||
|
||||
m_statusLabel = new QLabel(QString("Пользователь: %1 | Роль: %2").arg(username, role));
|
||||
statusBar()->addWidget(m_statusLabel);
|
||||
|
||||
if (role == "admin") {
|
||||
QMenu* userMenu = new QMenu("Пользователи", menuBar);
|
||||
QAction* usersAction = menu->insertMenu(printAction, userMenu);
|
||||
QAction* manageUsersAction = userMenu->addAction("Управление пользователями");
|
||||
connect(manageUsersAction, &QAction::triggered, this, &MainWindow::showUsers);
|
||||
} else {
|
||||
m_usersWidget->setVisible(false);
|
||||
}
|
||||
|
||||
showRoutes();
|
||||
}
|
||||
|
||||
void MainWindow::showRoutes() {
|
||||
m_stack->setCurrentWidget(m_routesWidget);
|
||||
}
|
||||
|
||||
void MainWindow::showTickets() {
|
||||
m_ticketsWidget->refreshRoutes();
|
||||
m_stack->setCurrentWidget(m_ticketsWidget);
|
||||
}
|
||||
|
||||
void MainWindow::showPrint() {
|
||||
m_printWidget->refreshRoutes();
|
||||
m_stack->setCurrentWidget(m_printWidget);
|
||||
}
|
||||
|
||||
void MainWindow::showUsers() {
|
||||
m_usersWidget->refreshUsers();
|
||||
m_stack->setCurrentWidget(m_usersWidget);
|
||||
}
|
||||
|
||||
void MainWindow::logout() {
|
||||
QApplication::quit();
|
||||
}
|
||||
43
mainwindow.h
Normal file
43
mainwindow.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QStackedWidget>
|
||||
#include <QMenuBar>
|
||||
#include <QStatusBar>
|
||||
#include <QLabel>
|
||||
|
||||
class RoutesWidget;
|
||||
class TicketsWidget;
|
||||
class PrintWidget;
|
||||
class UsersWidget;
|
||||
|
||||
class MainWindow : public QMainWindow {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MainWindow(const QString& username, const QString& role, QWidget* parent = nullptr);
|
||||
QString currentUser() const { return m_username; }
|
||||
int currentUserId() const { return m_userId; }
|
||||
QString currentRole() const { return m_role; }
|
||||
|
||||
public slots:
|
||||
void showRoutes();
|
||||
void showTickets();
|
||||
void showPrint();
|
||||
void showUsers();
|
||||
void logout();
|
||||
|
||||
private:
|
||||
QStackedWidget* m_stack;
|
||||
RoutesWidget* m_routesWidget;
|
||||
TicketsWidget* m_ticketsWidget;
|
||||
PrintWidget* m_printWidget;
|
||||
UsersWidget* m_usersWidget;
|
||||
QLabel* m_statusLabel;
|
||||
QString m_username;
|
||||
QString m_role;
|
||||
int m_userId;
|
||||
};
|
||||
|
||||
#endif
|
||||
145
printwidget.cpp
Normal file
145
printwidget.cpp
Normal file
@@ -0,0 +1,145 @@
|
||||
#include "printwidget.h"
|
||||
#include "database.h"
|
||||
#include <QTableWidget>
|
||||
#include <QHeaderView>
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QTextStream>
|
||||
#include <QDateTime>
|
||||
|
||||
PrintWidget::PrintWidget(QWidget* parent) : QWidget(parent) {
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
|
||||
QLabel* title = new QLabel("Печать списка билетов", this);
|
||||
title->setStyleSheet("font-size: 20px; font-weight: bold;");
|
||||
mainLayout->addWidget(title);
|
||||
|
||||
QHBoxLayout* filterLayout = new QHBoxLayout();
|
||||
QLabel* routeLabel = new QLabel("Выберите рейс:", this);
|
||||
m_routeCombo = new QComboBox(this);
|
||||
filterLayout->addWidget(routeLabel);
|
||||
filterLayout->addWidget(m_routeCombo);
|
||||
filterLayout->addStretch();
|
||||
mainLayout->addLayout(filterLayout);
|
||||
|
||||
m_table = new QTableWidget(this);
|
||||
m_table->setColumnCount(8);
|
||||
m_table->setHorizontalHeaderLabels({"ID", "Маршрут", "Время", "Пассажир", "Документ", "Билетов", "Сумма", "Кассир"});
|
||||
m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
mainLayout->addWidget(m_table);
|
||||
|
||||
m_totalLabel = new QLabel("Итого: 0 билетов на сумму 0.00 руб.", this);
|
||||
m_totalLabel->setStyleSheet("font-weight: bold; font-size: 14px;");
|
||||
mainLayout->addWidget(m_totalLabel);
|
||||
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout();
|
||||
QPushButton* refreshBtn = new QPushButton("Обновить", this);
|
||||
QPushButton* printBtn = new QPushButton("Экспорт в файл", this);
|
||||
btnLayout->addWidget(refreshBtn);
|
||||
btnLayout->addWidget(printBtn);
|
||||
btnLayout->addStretch();
|
||||
mainLayout->addLayout(btnLayout);
|
||||
|
||||
connect(m_routeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &PrintWidget::onRouteChanged);
|
||||
connect(refreshBtn, &QPushButton::clicked, this, [this]() {
|
||||
refreshRoutes();
|
||||
onRouteChanged(m_routeCombo->currentIndex());
|
||||
});
|
||||
connect(printBtn, &QPushButton::clicked, this, &PrintWidget::onPrintClicked);
|
||||
}
|
||||
|
||||
void PrintWidget::refreshRoutes() {
|
||||
m_routeCombo->clear();
|
||||
QVector<Route> routes = Database::instance().getAllRoutes();
|
||||
for (const auto& route : routes) {
|
||||
m_routeCombo->addItem(QString("%1 - %2").arg(route.routeName).arg(route.departureTime), route.id);
|
||||
}
|
||||
}
|
||||
|
||||
void PrintWidget::onRouteChanged(int index) {
|
||||
if (index < 0) return;
|
||||
int routeId = m_routeCombo->currentData().toInt();
|
||||
loadTickets(routeId);
|
||||
}
|
||||
|
||||
void PrintWidget::loadTickets(int routeId) {
|
||||
QVector<Ticket> tickets = Database::instance().getTicketsByRoute(routeId);
|
||||
m_table->setRowCount(tickets.size());
|
||||
qDebug() << "TICKET COUNT:" + std::to_string(tickets.length()) + " " + std::to_string(routeId);
|
||||
|
||||
double total = 0;
|
||||
int totalSeats = 0;
|
||||
|
||||
for (int i = 0; i < tickets.size(); ++i) {
|
||||
const Ticket& ticket = tickets[i];
|
||||
m_table->setItem(i, 0, new QTableWidgetItem(QString::number(ticket.id)));
|
||||
m_table->setItem(i, 1, new QTableWidgetItem(ticket.routeName));
|
||||
m_table->setItem(i, 2, new QTableWidgetItem(ticket.saleDate));
|
||||
m_table->setItem(i, 3, new QTableWidgetItem(ticket.passengerName));
|
||||
m_table->setItem(i, 4, new QTableWidgetItem(ticket.documentNumber));
|
||||
m_table->setItem(i, 5, new QTableWidgetItem(QString::number(ticket.seatCount)));
|
||||
m_table->setItem(i, 6, new QTableWidgetItem(QString::number(ticket.totalPrice, 'f', 2)));
|
||||
m_table->setItem(i, 7, new QTableWidgetItem(ticket.sellerName));
|
||||
|
||||
total += ticket.totalPrice;
|
||||
totalSeats += ticket.seatCount;
|
||||
}
|
||||
|
||||
m_totalLabel->setText(QString("Итого: %1 билетов на сумму %2 руб.")
|
||||
.arg(totalSeats)
|
||||
.arg(total, 0, 'f', 2));
|
||||
}
|
||||
|
||||
void PrintWidget::onPrintClicked() {
|
||||
if (m_table->rowCount() == 0) {
|
||||
QMessageBox::warning(this, "Внимание", "Нет данных для печати!");
|
||||
return;
|
||||
}
|
||||
|
||||
QString fileName = QFileDialog::getSaveFileName(
|
||||
this, "Сохранить список билетов",
|
||||
QString("tickets_%1.txt").arg(QDateTime::currentDateTime().toString("yyyyMMdd_HHmmss")),
|
||||
"Text Files (*.txt)");
|
||||
|
||||
if (fileName.isEmpty()) return;
|
||||
|
||||
QFile file(fileName);
|
||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||
QMessageBox::critical(this, "Ошибка", "Не удалось создать файл!");
|
||||
return;
|
||||
}
|
||||
|
||||
QTextStream out(&file);
|
||||
out << "===========================================\n";
|
||||
out << " СПИСОК ПРОДАННЫХ БИЛЕТОВ\n";
|
||||
out << "===========================================\n";
|
||||
out << "Рейс: " << m_routeCombo->currentText() << "\n";
|
||||
out << "Дата формирования: " << QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss") << "\n";
|
||||
out << "===========================================\n\n";
|
||||
|
||||
int totalSeats = 0;
|
||||
double totalSum = 0;
|
||||
|
||||
for (int i = 0; i < m_table->rowCount(); ++i) {
|
||||
out << QString("Билет #%1\n").arg(m_table->item(i, 0)->text());
|
||||
out << QString(" Пассажир: %1\n").arg(m_table->item(i, 3)->text());
|
||||
out << QString(" Документ: %1\n").arg(m_table->item(i, 4)->text());
|
||||
out << QString(" Количество: %1 шт.\n").arg(m_table->item(i, 5)->text());
|
||||
out << QString(" Сумма: %1 руб.\n").arg(m_table->item(i, 6)->text());
|
||||
out << QString(" Продал: %1 (%2)\n").arg(m_table->item(i, 7)->text()).arg(m_table->item(i, 2)->text());
|
||||
out << "-----------------------------------------\n";
|
||||
|
||||
totalSeats += m_table->item(i, 5)->text().toInt();
|
||||
totalSum += m_table->item(i, 6)->text().toDouble();
|
||||
}
|
||||
|
||||
out << "\n===========================================\n";
|
||||
out << QString("ИТОГО: %1 билетов на сумму %2 руб.\n").arg(totalSeats).arg(totalSum, 0, 'f', 2);
|
||||
out << "===========================================\n";
|
||||
|
||||
file.close();
|
||||
QMessageBox::information(this, "Успех", QString("Файл сохранен:\n%1").arg(fileName));
|
||||
}
|
||||
31
printwidget.h
Normal file
31
printwidget.h
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef PRINTWIDGET_H
|
||||
#define PRINTWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QComboBox>
|
||||
#include <QTableWidget>
|
||||
#include <QPushButton>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
|
||||
class PrintWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit PrintWidget(QWidget* parent = nullptr);
|
||||
void refreshRoutes();
|
||||
|
||||
private slots:
|
||||
void onRouteChanged(int index);
|
||||
void onPrintClicked();
|
||||
|
||||
private:
|
||||
void loadTickets(int routeId);
|
||||
|
||||
QComboBox* m_routeCombo;
|
||||
QTableWidget* m_table;
|
||||
QLabel* m_totalLabel;
|
||||
};
|
||||
|
||||
#endif
|
||||
160
routeswidget.cpp
Normal file
160
routeswidget.cpp
Normal file
@@ -0,0 +1,160 @@
|
||||
#include "routeswidget.h"
|
||||
#include "database.h"
|
||||
#include <QTableWidget>
|
||||
#include <QHeaderView>
|
||||
#include <QMessageBox>
|
||||
#include <QInputDialog>
|
||||
|
||||
RoutesWidget::RoutesWidget(QWidget* parent) : QWidget(parent) {
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
|
||||
QLabel* title = new QLabel("Управление рейсами", this);
|
||||
title->setStyleSheet("font-size: 20px; font-weight: bold;");
|
||||
mainLayout->addWidget(title);
|
||||
|
||||
m_table = new QTableWidget(this);
|
||||
m_table->setColumnCount(6);
|
||||
m_table->setHorizontalHeaderLabels({"ID", "Маршрут", "Время отправления", "Цена", "Всего мест", "Свободно"});
|
||||
m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
m_table->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
mainLayout->addWidget(m_table);
|
||||
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout();
|
||||
m_addBtn = new QPushButton("Добавить", this);
|
||||
m_editBtn = new QPushButton("Редактировать", this);
|
||||
m_deleteBtn = new QPushButton("Удалить", this);
|
||||
btnLayout->addWidget(m_addBtn);
|
||||
btnLayout->addWidget(m_editBtn);
|
||||
btnLayout->addWidget(m_deleteBtn);
|
||||
btnLayout->addStretch();
|
||||
mainLayout->addLayout(btnLayout);
|
||||
|
||||
connect(m_addBtn, &QPushButton::clicked, this, &RoutesWidget::onAddClicked);
|
||||
connect(m_editBtn, &QPushButton::clicked, this, &RoutesWidget::onEditClicked);
|
||||
connect(m_deleteBtn, &QPushButton::clicked, this, &RoutesWidget::onDeleteClicked);
|
||||
|
||||
loadRoutes();
|
||||
}
|
||||
|
||||
void RoutesWidget::loadRoutes() {
|
||||
QVector<Route> routes = Database::instance().getAllRoutes();
|
||||
m_table->setRowCount(routes.size());
|
||||
|
||||
for (int i = 0; i < routes.size(); ++i) {
|
||||
const Route& route = routes[i];
|
||||
m_table->setItem(i, 0, new QTableWidgetItem(QString::number(route.id)));
|
||||
m_table->setItem(i, 1, new QTableWidgetItem(route.routeName));
|
||||
m_table->setItem(i, 2, new QTableWidgetItem(route.departureTime));
|
||||
m_table->setItem(i, 3, new QTableWidgetItem(QString::number(route.price, 'f', 2)));
|
||||
m_table->setItem(i, 4, new QTableWidgetItem(QString::number(route.totalSeats)));
|
||||
m_table->setItem(i, 5, new QTableWidgetItem(QString::number(route.availableSeats)));
|
||||
}
|
||||
}
|
||||
|
||||
void RoutesWidget::onAddClicked() {
|
||||
RouteDialog dialog;
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
if (Database::instance().addRoute(
|
||||
dialog.getRouteName(),
|
||||
dialog.getDepartureTime(),
|
||||
dialog.getPrice(),
|
||||
dialog.getTotalSeats())) {
|
||||
loadRoutes();
|
||||
QMessageBox::information(this, "Успех", "Рейс добавлен!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RoutesWidget::onEditClicked() {
|
||||
int row = m_table->currentRow();
|
||||
if (row < 0) {
|
||||
QMessageBox::warning(this, "Ошибка", "Выберите рейс для редактирования!");
|
||||
return;
|
||||
}
|
||||
|
||||
int id = m_table->item(row, 0)->text().toInt();
|
||||
Route route = Database::instance().getRoute(id);
|
||||
|
||||
RouteDialog dialog(&route, this);
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
route.routeName = dialog.getRouteName();
|
||||
route.departureTime = dialog.getDepartureTime();
|
||||
route.price = dialog.getPrice();
|
||||
|
||||
if (route.totalSeats != dialog.getTotalSeats()) {
|
||||
int diff = dialog.getTotalSeats() - route.totalSeats;
|
||||
route.totalSeats = dialog.getTotalSeats();
|
||||
route.availableSeats += diff;
|
||||
if (route.availableSeats < 0) route.availableSeats = 0;
|
||||
}
|
||||
|
||||
if (Database::instance().updateRoute(route)) {
|
||||
loadRoutes();
|
||||
QMessageBox::information(this, "Успех", "Рейс обновлен!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RoutesWidget::onDeleteClicked() {
|
||||
int row = m_table->currentRow();
|
||||
if (row < 0) {
|
||||
QMessageBox::warning(this, "Ошибка", "Выберите рейс для удаления!");
|
||||
return;
|
||||
}
|
||||
|
||||
int id = m_table->item(row, 0)->text().toInt();
|
||||
|
||||
QMessageBox::StandardButton reply = QMessageBox::question(
|
||||
this, "Подтверждение", "Удалить выбранный рейс?",
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
|
||||
if (reply == QMessageBox::Yes) {
|
||||
if (Database::instance().deleteRoute(id)) {
|
||||
loadRoutes();
|
||||
QMessageBox::information(this, "Успех", "Рейс удален!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RouteDialog::RouteDialog(Route* route, QWidget* parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
setWindowTitle(route ? "Редактирование рейса" : "Добавление рейса");
|
||||
setFixedSize(400, 250);
|
||||
|
||||
QFormLayout* form = new QFormLayout(this);
|
||||
|
||||
m_nameEdit = new QLineEdit(this);
|
||||
m_dateTimeEdit = new QDateTimeEdit(this);
|
||||
m_dateTimeEdit->setCalendarPopup(true);
|
||||
m_dateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(1));
|
||||
m_priceEdit = new QLineEdit(this);
|
||||
m_priceEdit->setPlaceholderText("0.00");
|
||||
m_seatsEdit = new QLineEdit(this);
|
||||
m_seatsEdit->setPlaceholderText("100");
|
||||
|
||||
if (route) {
|
||||
m_nameEdit->setText(route->routeName);
|
||||
m_dateTimeEdit->setDateTime(QDateTime::fromString(route->departureTime, "yyyy-MM-dd HH:mm:ss"));
|
||||
m_priceEdit->setText(QString::number(route->price, 'f', 2));
|
||||
m_seatsEdit->setText(QString::number(route->totalSeats));
|
||||
}
|
||||
|
||||
form->addRow("Маршрут:", m_nameEdit);
|
||||
form->addRow("Время отправления:", m_dateTimeEdit);
|
||||
form->addRow("Цена билета:", m_priceEdit);
|
||||
form->addRow("Всего мест:", m_seatsEdit);
|
||||
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout();
|
||||
QPushButton* okBtn = new QPushButton("ОК", this);
|
||||
QPushButton* cancelBtn = new QPushButton("Отмена", this);
|
||||
btnLayout->addStretch();
|
||||
btnLayout->addWidget(okBtn);
|
||||
btnLayout->addWidget(cancelBtn);
|
||||
form->addRow(btnLayout);
|
||||
|
||||
connect(okBtn, &QPushButton::clicked, this, &QDialog::accept);
|
||||
connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
|
||||
}
|
||||
54
routeswidget.h
Normal file
54
routeswidget.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef ROUTESWIDGET_H
|
||||
#define ROUTESWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTableWidget>
|
||||
#include <QPushButton>
|
||||
#include <QLineEdit>
|
||||
#include <QDateTimeEdit>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QFormLayout>
|
||||
#include <QDialog>
|
||||
|
||||
struct Route;
|
||||
|
||||
class RoutesWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RoutesWidget(QWidget* parent = nullptr);
|
||||
|
||||
private slots:
|
||||
void loadRoutes();
|
||||
void onAddClicked();
|
||||
void onEditClicked();
|
||||
void onDeleteClicked();
|
||||
|
||||
private:
|
||||
void showAddEditDialog(Route* route = nullptr);
|
||||
|
||||
QTableWidget* m_table;
|
||||
QPushButton* m_addBtn;
|
||||
QPushButton* m_editBtn;
|
||||
QPushButton* m_deleteBtn;
|
||||
};
|
||||
|
||||
class RouteDialog : public QDialog {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit RouteDialog(Route* route = nullptr, QWidget* parent = nullptr);
|
||||
QString getRouteName() const { return m_nameEdit->text(); }
|
||||
QString getDepartureTime() const { return m_dateTimeEdit->text(); }
|
||||
double getPrice() const { return m_priceEdit->text().toDouble(); }
|
||||
int getTotalSeats() const { return m_seatsEdit->text().toInt(); }
|
||||
|
||||
private:
|
||||
QLineEdit* m_nameEdit;
|
||||
QDateTimeEdit* m_dateTimeEdit;
|
||||
QLineEdit* m_priceEdit;
|
||||
QLineEdit* m_seatsEdit;
|
||||
};
|
||||
|
||||
#endif
|
||||
136
ticketswidget.cpp
Normal file
136
ticketswidget.cpp
Normal file
@@ -0,0 +1,136 @@
|
||||
#include "ticketswidget.h"
|
||||
#include "database.h"
|
||||
#include "mainwindow.h"
|
||||
#include <QTableWidget>
|
||||
#include <QHeaderView>
|
||||
#include <QMessageBox>
|
||||
#include <QGroupBox>
|
||||
|
||||
TicketsWidget::TicketsWidget(QWidget* parent) : QWidget(parent) {
|
||||
auto* mainLayout = new QVBoxLayout(this);
|
||||
|
||||
auto* title = new QLabel("Продажа билетов", this);
|
||||
title->setStyleSheet("font-size: 20px; font-weight: bold;");
|
||||
mainLayout->addWidget(title);
|
||||
|
||||
auto* sellGroup = new QGroupBox("Новый билет", this);
|
||||
auto* sellForm = new QFormLayout(sellGroup);
|
||||
|
||||
m_routeCombo = new QComboBox(this);
|
||||
m_routeInfo = new QLabel("Выберите рейс", this);
|
||||
m_passengerName = new QLineEdit(this);
|
||||
m_passengerName->setPlaceholderText("Иванов Иван Иванович");
|
||||
m_documentNumber = new QLineEdit(this);
|
||||
m_documentNumber->setPlaceholderText("Серия и номер паспорта");
|
||||
m_seatCount = new QSpinBox(this);
|
||||
m_seatCount->setMinimum(1);
|
||||
m_seatCount->setMaximum(10);
|
||||
m_totalPrice = new QLabel("0.00 руб.", this);
|
||||
m_sellBtn = new QPushButton("Продать билет", this);
|
||||
|
||||
sellForm->addRow("Рейс:", m_routeCombo);
|
||||
sellForm->addRow("", m_routeInfo);
|
||||
sellForm->addRow("ФИО пассажира:", m_passengerName);
|
||||
sellForm->addRow("Документ:", m_documentNumber);
|
||||
sellForm->addRow("Количество билетов:", m_seatCount);
|
||||
sellForm->addRow("Итого:", m_totalPrice);
|
||||
sellForm->addRow("", m_sellBtn);
|
||||
|
||||
mainLayout->addWidget(sellGroup);
|
||||
|
||||
connect(m_routeCombo, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &TicketsWidget::onRouteChanged);
|
||||
connect(m_seatCount, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, &TicketsWidget::onRouteChanged);
|
||||
connect(m_sellBtn, &QPushButton::clicked, this, &TicketsWidget::onSellClicked);
|
||||
|
||||
auto* ticketsLabel = new QLabel("Проданные билеты на выбранный рейс", this);
|
||||
ticketsLabel->setStyleSheet("font-weight: bold;");
|
||||
mainLayout->addWidget(ticketsLabel);
|
||||
|
||||
m_ticketsTable = new QTableWidget(this);
|
||||
m_ticketsTable->setColumnCount(6);
|
||||
m_ticketsTable->setHorizontalHeaderLabels({"ID", "Пассажир", "Документ", "Билетов", "Сумма", "Продано"});
|
||||
m_ticketsTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||
m_ticketsTable->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
m_ticketsTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
mainLayout->addWidget(m_ticketsTable);
|
||||
|
||||
refreshRoutes();
|
||||
}
|
||||
|
||||
void TicketsWidget::refreshRoutes() {
|
||||
m_routeCombo->clear();
|
||||
QVector<Route> routes = Database::instance().getAllRoutes();
|
||||
for (const auto& route : routes) {
|
||||
m_routeCombo->addItem(QString("%1 - %2").arg(route.routeName).arg(route.departureTime), route.id);
|
||||
}
|
||||
}
|
||||
|
||||
void TicketsWidget::onRouteChanged(int index) {
|
||||
if (index < 0) return;
|
||||
|
||||
int routeId = m_routeCombo->currentData().toInt();
|
||||
Route route = Database::instance().getRoute(routeId);
|
||||
|
||||
m_routeInfo->setText(QString("Цена: %1 руб. | Свободно: %2 мест")
|
||||
.arg(route.price, 0, 'f', 2)
|
||||
.arg(route.availableSeats));
|
||||
|
||||
m_seatCount->setMaximum(qMin(10, route.availableSeats));
|
||||
|
||||
double total = route.price * m_seatCount->value();
|
||||
m_totalPrice->setText(QString("%1 руб.").arg(total, 0, 'f', 2));
|
||||
|
||||
QVector<Ticket> tickets = Database::instance().getTicketsByRoute(routeId);
|
||||
m_ticketsTable->setRowCount(tickets.size());
|
||||
|
||||
for (int i = 0; i < tickets.size(); ++i) {
|
||||
const Ticket& ticket = tickets[i];
|
||||
m_ticketsTable->setItem(i, 0, new QTableWidgetItem(QString::number(ticket.id)));
|
||||
m_ticketsTable->setItem(i, 1, new QTableWidgetItem(ticket.passengerName));
|
||||
m_ticketsTable->setItem(i, 2, new QTableWidgetItem(ticket.documentNumber));
|
||||
m_ticketsTable->setItem(i, 3, new QTableWidgetItem(QString::number(ticket.seatCount)));
|
||||
m_ticketsTable->setItem(i, 4, new QTableWidgetItem(QString::number(ticket.totalPrice, 'f', 2)));
|
||||
m_ticketsTable->setItem(i, 5, new QTableWidgetItem(ticket.saleDate));
|
||||
}
|
||||
}
|
||||
|
||||
void TicketsWidget::onSellClicked() {
|
||||
int routeId = m_routeCombo->currentData().toInt();
|
||||
Route route = Database::instance().getRoute(routeId);
|
||||
|
||||
QString passengerName = m_passengerName->text().trimmed();
|
||||
QString documentNumber = m_documentNumber->text().trimmed();
|
||||
int seatCount = m_seatCount->value();
|
||||
|
||||
if (passengerName.isEmpty() || documentNumber.isEmpty()) {
|
||||
QMessageBox::warning(this, "Ошибка", "Заполните все поля!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (seatCount > route.availableSeats) {
|
||||
QMessageBox::warning(this, "Ошибка",
|
||||
QString("Недостаточно мест! Доступно: %1").arg(route.availableSeats));
|
||||
return;
|
||||
}
|
||||
|
||||
MainWindow* mainWin = qobject_cast<MainWindow*>(window());
|
||||
int sellerId = mainWin ? mainWin->currentUserId() : 1;
|
||||
|
||||
if (Database::instance().addTicket(routeId, passengerName, documentNumber, seatCount, sellerId)) {
|
||||
QMessageBox::information(this, "Успех",
|
||||
QString("Продано %1 билет(а) на сумму %2 руб.")
|
||||
.arg(seatCount)
|
||||
.arg(route.price * seatCount, 0, 'f', 2));
|
||||
|
||||
m_passengerName->clear();
|
||||
m_documentNumber->clear();
|
||||
m_seatCount->setValue(1);
|
||||
|
||||
refreshRoutes();
|
||||
onRouteChanged(m_routeCombo->currentIndex());
|
||||
} else {
|
||||
QMessageBox::critical(this, "Ошибка", "Не удалось продать билет!");
|
||||
}
|
||||
}
|
||||
37
ticketswidget.h
Normal file
37
ticketswidget.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef TICKETSWIDGET_H
|
||||
#define TICKETSWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTableWidget>
|
||||
#include <QComboBox>
|
||||
#include <QSpinBox>
|
||||
#include <QLineEdit>
|
||||
#include <QPushButton>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QFormLayout>
|
||||
|
||||
class TicketsWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TicketsWidget(QWidget* parent = nullptr);
|
||||
void refreshRoutes();
|
||||
|
||||
private slots:
|
||||
void onRouteChanged(int index);
|
||||
void onSellClicked();
|
||||
|
||||
private:
|
||||
QComboBox* m_routeCombo;
|
||||
QLabel* m_routeInfo;
|
||||
QLineEdit* m_passengerName;
|
||||
QLineEdit* m_documentNumber;
|
||||
QSpinBox* m_seatCount;
|
||||
QLabel* m_totalPrice;
|
||||
QPushButton* m_sellBtn;
|
||||
QTableWidget* m_ticketsTable;
|
||||
};
|
||||
|
||||
#endif
|
||||
98
userswidget.cpp
Normal file
98
userswidget.cpp
Normal file
@@ -0,0 +1,98 @@
|
||||
#include "userswidget.h"
|
||||
#include "database.h"
|
||||
#include <QTableWidget>
|
||||
#include <QHeaderView>
|
||||
#include <QMessageBox>
|
||||
#include <QInputDialog>
|
||||
#include <QLabel>
|
||||
|
||||
UsersWidget::UsersWidget(QWidget* parent) : QWidget(parent) {
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
|
||||
QLabel* title = new QLabel("Управление пользователями", this);
|
||||
title->setStyleSheet("font-size: 20px; font-weight: bold;");
|
||||
mainLayout->addWidget(title);
|
||||
|
||||
m_table = new QTableWidget(this);
|
||||
m_table->setColumnCount(3);
|
||||
m_table->setHorizontalHeaderLabels({"ID", "Логин", "Роль"});
|
||||
m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
m_table->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
mainLayout->addWidget(m_table);
|
||||
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout();
|
||||
m_addBtn = new QPushButton("Добавить пользователя", this);
|
||||
m_deleteBtn = new QPushButton("Удалить пользователя", this);
|
||||
btnLayout->addWidget(m_addBtn);
|
||||
btnLayout->addWidget(m_deleteBtn);
|
||||
btnLayout->addStretch();
|
||||
mainLayout->addLayout(btnLayout);
|
||||
|
||||
connect(m_addBtn, &QPushButton::clicked, this, &UsersWidget::onAddClicked);
|
||||
connect(m_deleteBtn, &QPushButton::clicked, this, &UsersWidget::onDeleteClicked);
|
||||
|
||||
refreshUsers();
|
||||
}
|
||||
|
||||
void UsersWidget::refreshUsers() {
|
||||
QVector<User> users = Database::instance().getAllUsers();
|
||||
m_table->setRowCount(users.size());
|
||||
|
||||
for (int i = 0; i < users.size(); ++i) {
|
||||
const User& user = users[i];
|
||||
m_table->setItem(i, 0, new QTableWidgetItem(QString::number(user.id)));
|
||||
m_table->setItem(i, 1, new QTableWidgetItem(user.username));
|
||||
m_table->setItem(i, 2, new QTableWidgetItem(user.role == "admin" ? "Администратор" : "Кассир"));
|
||||
}
|
||||
}
|
||||
|
||||
void UsersWidget::onAddClicked() {
|
||||
QString username = QInputDialog::getText(this, "Новый пользователь", "Логин:");
|
||||
if (username.isEmpty()) return;
|
||||
|
||||
QString password = QInputDialog::getText(this, "Новый пользователь", "Пароль:", QLineEdit::Password);
|
||||
if (password.isEmpty()) return;
|
||||
|
||||
QStringList roles = {"cashier", "admin"};
|
||||
QString role = QInputDialog::getItem(this, "Новый пользователь", "Роль:", roles, 0, false);
|
||||
if (role.isEmpty()) return;
|
||||
|
||||
if (Database::instance().addUser(username, password, role)) {
|
||||
QMessageBox::information(this, "Успех", "Пользователь добавлен!");
|
||||
refreshUsers();
|
||||
} else {
|
||||
QMessageBox::critical(this, "Ошибка", "Пользователь с таким логином уже существует!");
|
||||
}
|
||||
}
|
||||
|
||||
void UsersWidget::onDeleteClicked() {
|
||||
int row = m_table->currentRow();
|
||||
if (row < 0) {
|
||||
QMessageBox::warning(this, "Ошибка", "Выберите пользователя!");
|
||||
return;
|
||||
}
|
||||
|
||||
QString username = m_table->item(row, 1)->text();
|
||||
QString role = m_table->item(row, 2)->text();
|
||||
|
||||
if (role == "Администратор") {
|
||||
QMessageBox::warning(this, "Ошибка", "Нельзя удалить администратора!");
|
||||
return;
|
||||
}
|
||||
|
||||
int id = m_table->item(row, 0)->text().toInt();
|
||||
|
||||
QMessageBox::StandardButton reply = QMessageBox::question(
|
||||
this, "Подтверждение",
|
||||
QString("Удалить пользователя '%1'?").arg(username),
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
|
||||
if (reply == QMessageBox::Yes) {
|
||||
if (Database::instance().deleteUser(id)) {
|
||||
QMessageBox::information(this, "Успех", "Пользователь удален!");
|
||||
refreshUsers();
|
||||
}
|
||||
}
|
||||
}
|
||||
27
userswidget.h
Normal file
27
userswidget.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#ifndef USERSWIDGET_H
|
||||
#define USERSWIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QTableWidget>
|
||||
#include <QPushButton>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
|
||||
class UsersWidget : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit UsersWidget(QWidget* parent = nullptr);
|
||||
void refreshUsers();
|
||||
|
||||
private slots:
|
||||
void onAddClicked();
|
||||
void onDeleteClicked();
|
||||
|
||||
private:
|
||||
QTableWidget* m_table;
|
||||
QPushButton* m_addBtn;
|
||||
QPushButton* m_deleteBtn;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user