From 2eded16b42ea870dee765a4a40fd32765143b9bf Mon Sep 17 00:00:00 2001 From: Techmonite <150219021+Starlaps-365@users.noreply.github.com> Date: Sat, 27 Jul 2024 08:31:57 +0200 Subject: [PATCH] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The store keeps a list of customers so that when something is purchased from the store, it is recorded against that customer’s name. Only the customer’s name is required. Only two items are currently sold in the store currently – books and magazines, and only the name of the item is required. Clearly, a list of such items is needed, and the user should be able to add items to the list. When an item is added, the application should automatically make a backup in memory in case something goes wrong when the application is being used. Provision should thus be made to restore this list when necessary --- Store/Store/CMakeLists.txt | 75 +++++ Store/Store/CMakeLists.txt.user | 420 +++++++++++++++++++++++++++ Store/Store/Images/Open_document.png | Bin 0 -> 1522 bytes Store/Store/Images/Open_file.png | Bin 0 -> 1498 bytes Store/Store/Images/add.png | Bin 0 -> 808 bytes Store/Store/Images/customers.ico | Bin 0 -> 4286 bytes Store/Store/Images/delete.png | Bin 0 -> 2292 bytes Store/Store/Images/exit.png | Bin 0 -> 1672 bytes Store/Store/Images/help.png | Bin 0 -> 2245 bytes Store/Store/Images/info.png | Bin 0 -> 2535 bytes Store/Store/Images/new.png | Bin 0 -> 852 bytes Store/Store/Images/open.png | Bin 0 -> 2073 bytes Store/Store/Images/save.png | Bin 0 -> 1187 bytes Store/Store/Images/saveas.png | Bin 0 -> 1984 bytes Store/Store/Images/undo.png | Bin 0 -> 2752 bytes Store/Store/Images/xml.png | Bin 0 -> 878 bytes Store/Store/UDP/UDPListen.pro | 19 ++ Store/Store/UDP/UDPListen.pro.user | 269 +++++++++++++++++ Store/Store/UDP/main.cpp | 11 + Store/Store/UDP/udplisten.cpp | 41 +++ Store/Store/UDP/udplisten.h | 26 ++ Store/Store/addcustomerdialog.cpp | 87 ++++++ Store/Store/addcustomerdialog.h | 45 +++ Store/Store/additemdialog.cpp | 79 +++++ Store/Store/additemdialog.h | 38 +++ Store/Store/customer.cpp | 10 + Store/Store/customer.h | 14 + Store/Store/item.cpp | 10 + Store/Store/item.h | 15 + Store/Store/main.cpp | 11 + Store/Store/mainwindow.cpp | 253 ++++++++++++++++ Store/Store/mainwindow.h | 56 ++++ Store/Store/mymodel.cpp | 50 ++++ Store/Store/mymodel.h | 24 ++ Store/Store/transaction.cpp | 33 +++ Store/Store/transaction.h | 32 ++ Store/UDP/UDPListen.pro | 19 ++ Store/UDP/UDPListen.pro.user | 269 +++++++++++++++++ Store/UDP/main.cpp | 11 + Store/UDP/udplisten.cpp | 41 +++ Store/UDP/udplisten.h | 26 ++ 41 files changed, 1984 insertions(+) create mode 100644 Store/Store/CMakeLists.txt create mode 100644 Store/Store/CMakeLists.txt.user create mode 100644 Store/Store/Images/Open_document.png create mode 100644 Store/Store/Images/Open_file.png create mode 100644 Store/Store/Images/add.png create mode 100644 Store/Store/Images/customers.ico create mode 100644 Store/Store/Images/delete.png create mode 100644 Store/Store/Images/exit.png create mode 100644 Store/Store/Images/help.png create mode 100644 Store/Store/Images/info.png create mode 100644 Store/Store/Images/new.png create mode 100644 Store/Store/Images/open.png create mode 100644 Store/Store/Images/save.png create mode 100644 Store/Store/Images/saveas.png create mode 100644 Store/Store/Images/undo.png create mode 100644 Store/Store/Images/xml.png create mode 100644 Store/Store/UDP/UDPListen.pro create mode 100644 Store/Store/UDP/UDPListen.pro.user create mode 100644 Store/Store/UDP/main.cpp create mode 100644 Store/Store/UDP/udplisten.cpp create mode 100644 Store/Store/UDP/udplisten.h create mode 100644 Store/Store/addcustomerdialog.cpp create mode 100644 Store/Store/addcustomerdialog.h create mode 100644 Store/Store/additemdialog.cpp create mode 100644 Store/Store/additemdialog.h create mode 100644 Store/Store/customer.cpp create mode 100644 Store/Store/customer.h create mode 100644 Store/Store/item.cpp create mode 100644 Store/Store/item.h create mode 100644 Store/Store/main.cpp create mode 100644 Store/Store/mainwindow.cpp create mode 100644 Store/Store/mainwindow.h create mode 100644 Store/Store/mymodel.cpp create mode 100644 Store/Store/mymodel.h create mode 100644 Store/Store/transaction.cpp create mode 100644 Store/Store/transaction.h create mode 100644 Store/UDP/UDPListen.pro create mode 100644 Store/UDP/UDPListen.pro.user create mode 100644 Store/UDP/main.cpp create mode 100644 Store/UDP/udplisten.cpp create mode 100644 Store/UDP/udplisten.h diff --git a/Store/Store/CMakeLists.txt b/Store/Store/CMakeLists.txt new file mode 100644 index 0000000..62b5d0f --- /dev/null +++ b/Store/Store/CMakeLists.txt @@ -0,0 +1,75 @@ +cmake_minimum_required(VERSION 3.5) + +project(COS3711 VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) + +set(PROJECT_SOURCES + main.cpp + mainwindow.cpp + mainwindow.h +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(COS3711 + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + customer.h customer.cpp + item.h item.cpp + transaction.h transaction.cpp + mymodel.h mymodel.cpp + addcustomerdialog.h addcustomerdialog.cpp + additemdialog.h additemdialog.cpp + ) +# Define target properties for Android with Qt 6 as: +# set_property(TARGET COS3711 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR +# ${CMAKE_CURRENT_SOURCE_DIR}/android) +# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation +else() + if(ANDROID) + add_library(COS3711 SHARED + ${PROJECT_SOURCES} + ) +# Define properties for Android with Qt 5 after find_package() calls as: +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") + else() + add_executable(COS3711 + ${PROJECT_SOURCES} + ) + endif() +endif() + +target_link_libraries(COS3711 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) + +# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. +# If you are developing for iOS or macOS you should consider setting an +# explicit, fixed bundle identifier manually though. +if(${QT_VERSION} VERSION_LESS 6.1.0) + set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.COS3711) +endif() +set_target_properties(COS3711 PROPERTIES + ${BUNDLE_ID_OPTION} + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + +include(GNUInstallDirs) +install(TARGETS COS3711 + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(COS3711) +endif() diff --git a/Store/Store/CMakeLists.txt.user b/Store/Store/CMakeLists.txt.user new file mode 100644 index 0000000..cd4b710 --- /dev/null +++ b/Store/Store/CMakeLists.txt.user @@ -0,0 +1,420 @@ + + + + + + EnvironmentId + {6fa689f0-d307-453e-aa89-3b1bf25a9d4e} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + + 0 + true + + + true + true + Builtin.DefaultTidyAndClazy + 4 + true + + + + true + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 6.5.2 MinGW 64-bit + Desktop Qt 6.5.2 MinGW 64-bit + qt.qt6.652.win64_mingw_kit + 0 + 0 + 0 + + Debug + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + 0 + C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + + + + + all + + false + + true + Build + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + Build + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + CMakeProjectManager.CMakeBuildConfiguration + + + Release + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Release + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + CMakeProjectManager.CMakeBuildConfiguration + + + RelWithDebInfo + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-RelWithDebInfo + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + + RelWithDebInfo + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + 0 + C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Profile + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + CMakeProjectManager.CMakeBuildConfiguration + + + MinSizeRel + 2 + false + + -DCMAKE_GENERATOR:STRING=Ninja +-DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} +-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG} + C:\Users\DELL\Desktop\MXAT\build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-MinSizeRel + + + + + all + + false + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + false + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Minimum Size Release + CMakeProjectManager.CMakeBuildConfiguration + + 5 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + false + COS3711 + CMakeProjectManager.CMakeRunConfiguration.COS3711 + COS3711 + true + true + true + C:/Users/DELL/Desktop/MXAT/build-COS3711-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/Store/Store/Images/Open_document.png b/Store/Store/Images/Open_document.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4f488cfae31e1f1b7c622ee72a4f8894c11988 GIT binary patch literal 1522 zcmV3kj$8e4Cb2?)mAL&TEaCt?gpUo#{-QE%E~IBstRm28*GXKMFc?<N)7tvV1uFc=JQ zjq@V`P#8swsb;)$@bFK?I~eCKC)%-kh8qq|<4*TrLzB7n!@Zz({Rm3sgyfmAu+MT!6(( zmo3}<;l@prTZKxwqmeK?9uFK&2QFT?0A1ISOe6@94Tr-?uM?ad(sL{27g^kdDlIL= zw$G}tbz4wBe+fId_AA2ysD5VglBUgDwnEcX%56hL0OaN}i5)G?&2s0eYGcA7R8k?U z#aLGCUf0vG2s>c3KfdO=O zUPD(XggLdfa1)~O-~oiY!?4>m45dGrFkQM+B<>%ti?vJ6( zeULISc~}29^pxy@u1@3vHn|h8*8?YgJ#+fBOjJVvmn#S7&Yh$GN%Z#h!eO@~&RP(& zP$L$NqPltpay_}yCINZla5W0DgL0Fu#|?@1ez_h`t$2jHjsl56;97)z-Ea!3(<=dl z^uob>%K3YHJDQrBuyEm%$oJ)=t*wm;q|o2rCwD4ZabTdIme?^EkFz_5kj>&ODJf+Q zX$bABMxnFW09Z@_Nm(D`zOhk70Pw*nTbNX3Gh4t>^A5p zHvnbxfvo8y$e9fGnsM|fX6f?HNHORe5{$l1475__+F#Jy+b2&#aoUMmkd;gS1&nG_ zC4kDha5|k5ApG4d_*E0&MZQ;4p#Sj|;A?n|1n=^Wa~Pe;ateQdYq52>+#W$V+zlIx zEkXZ9zlY5(h|>bG^Mb-cj2}Ni0z`J!q1e$P&3C^ED*!YCbgYD${q)EH^du1e z9O%Btgz3Klq-~kmYFa3qNs8b_Zxpd+9UT{dnHw_zZOfr%)r|~bv_p>(Vh=+5kHi0R z2H;9P0Rm$KV2(t`*Kp5nH32ToXU|uTDL}ISGF;P-ngD03p*o80b4vQ3ru;)8w)Ax* zpLaD zV*)@Wz!5Lc@$6CNOqodsjgZIY|Boa;=6WInus@5(rF~>cg}mv6@%Jc(1Xz>-_+I0= zt^BvN;yEpojV|FG0K$SL8Gv0@sLDTmJ2Rg|`aQ{crvlGq0KVZ#s@(meBL-L|o`yEo z>rOe3=|~6*RzMfJUpcWUtGwm`>zD$ZxthkD_5HsJfVJ}{WAhL1@e9##z6#uf5#{mF z@DXsd1#69eTYyiCeOU9-qp)(mucN&S*l`4D&Rcl-_N}EqoAE5;KAg$7jq8kEj8o#` YFaAwFo);SVRR91007*qoM6N<$g343V+yDRo literal 0 HcmV?d00001 diff --git a/Store/Store/Images/Open_file.png b/Store/Store/Images/Open_file.png new file mode 100644 index 0000000000000000000000000000000000000000..6e6180a432cd5ba3ce6ffb256d222f4a0d2a33d3 GIT binary patch literal 1498 zcmV<01tt24P)A3NnyucGAdGX{p5nzI?H=+z zf!BF#tX3eQk7Cssh~A-Q+pL9rn24EW*-fOaZC|LEz|jf#s%k?8dk|o~}$;M>BNkzp`uH1MW?&2Rko! zpD_SDBqlvlAd=6O!rZbsCoq|h=))NBVfSgnvDSkfoX0YbJvf$t?CfkPDJgl;<#KU# zb#+zM)zy7ktrom6nM{Az3tbuvGxx>SWAf5~*0Sr?Cv9fiP5ZcrA1FYh(J%!C1%sIM zL-1&=h%1OHolaMULari)o2@s%7~do6tu#7~=kExcH`^Zy^8-cm6PZN<8dPHuJ6wEy z@%QFBLQ~i%mI1MdhRr(<$(1T~OmuW~ghHYCiJ~aDhryv?Fj?#n7{Gvp5xP;#b+0J& zQdL7kLsd;pO_Rs`E4MZ8c0Ns!&yizH^1Fr$mES-vd=#ljPY{2M&X^^7rf3Eoz9!Qi53npdg8soF6zK>0J`0$wb`T0Ei~~FbNN`8UBp?zBEJAB}BV##|Hr};`3L1!| zEa4=kS9vp-C8vQ7N*Yy3-#0iyNE6~6If(rcBEd)*$8lgEc7kcp2E^F}QSNtu@Gf7L zz&T?6CcXvxj`RLWmsbEK9__j7EuEm0dY1wP9le7PHcbJIIz3ERDbOo6P|6q}+z`y< zwgBbn@M!^}liwr#r7_j$u~eW0pvZ3oLMX7gIVfu$f@krVb(@UP*QW=WOaXFf07Qlc zLTyt!w6?cEOk_MTR6oR$10Zr=^@-eTO|7mJVkn6^haOl$NvDHyCpt%rdDJwyi$fQtMA6le9B9Ou9P$f-dU=_yv1;s08{ z(D|Tz>C8x>v+D~0Ly^y&`e;AAysdXR={g+#6?$Ncf80_~EItIhvkP2}St!vxrR*#R zZ>tx#9U`rokR1Y=?2#tF3G%0Qg1d7cu!iGPJ$ks> za&nVAGd*5-F(mJ2;0=YqxqREp6EO_1>m#x{OKrnEki+X_Njb@)YazM&f$iD-e~cb3 z*EwUJ-(a}yO_O~qrD1Cp26U@3(}1;Ur=Fb$-KSq$;`S6xk$aGa}fP0!!n-+wQUJeeqjlb;0_;!(c??;Sx?MUGboD~|fzg59Q)i&y@6DvZo~ z@=QNSoh`!ip3pE^FXsCULoZv?=;SNwM&B3y0<92z*XW~5UjP6A07*qoM6N<$f@_k# A^8f$< literal 0 HcmV?d00001 diff --git a/Store/Store/Images/add.png b/Store/Store/Images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..070e4aab466de172221ffde140108a3732682077 GIT binary patch literal 808 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 literal 0 HcmV?d00001 diff --git a/Store/Store/Images/delete.png b/Store/Store/Images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..ce4eb1874f5ec025f6e3a9e9bbc17189868bd781 GIT binary patch literal 2292 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 TU9*>X00000NkvXXu0mjf0Zt`s literal 0 HcmV?d00001 diff --git a/Store/Store/Images/info.png b/Store/Store/Images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..73b49b0d8a0bf58318b7de03cd5782cfa8ef6ad4 GIT binary patch literal 2535 zcmVpQ>m zJHKbm$RZ|z?L-w0s&TV3m{@z#&B z=h;%y>@*sbA=Ze7rD+eLq2_x&81#-qiqi_uEO10`G1`igNQ)$^Y_z+^MNf0(iQ%S` zZ~7XJ4L=sZvh5uu*2ILfxw&yEvy*7h)0)?sQBgbIxaNj+OXJ{|FQ-8Fs0?TCN)RCg z)3_i4rD+uihc86%d^9LSYkN@Ysk{8yV13#4K-ZW4M*u9{-svzJ4PPvJ)=`*lXTXdx zrf3p#P`oEGmhrE(bqI1D6uk3lN)&jVM~3rFlDZfHp{>ejfO(t)2(+QLC(>Jc;`iQL z@9pJ7gM1Xgv%hGh^d`%D*$Za9u_#*)W=aN%QE6A=ieV7Y8xsGDYn^c9?Rk)u{D3_7 zunb45L}fXK)}(>f(Ff4sV}u+c)J~584VCpiPv!niqphcIL;)0(x(btK*=v^OTbXz> zfCDAU4S}oO2S0x)1)iHnM*-AyOK_$^Wq_H|C!;b!0O`>g9@hwQ6g0F< zfb06-FAdb}+ro}@j41#LOI>Ao1?fM2CJhyDA_`V%=Wq%LT}I0s0+B^E~a1Riprce3N~-Zf`v}Zb-eU(l>j7RiRXkx;<=KJj0!@B*YyUK zC3n9F^;iGxZ$G*2Wh#GL^Q~2DbC+e>DFvmddCQ@jgb4zGoOgBjU|9wYzuDq^q;g(u z72)VjK@lC9I!4U~1;8{AF<8(z6w_!3pz3Oq(0sITE46sry^-&IKPS;*1h8NT!sxw- zGlGU$4FvIC;AJHwJYL(7$G|H^x+s9-)dHMvP)ogzP)>|%BGl1?AVHriw(IAVH)3iX46EN6*!5kii4@zf80en`) z!@usR04M~YS7NRjHW(-{AR|OeeS;kI^#vhsi34gY5x|iJd#OcR8z(mYU}0=+Qy8pq z49vFc!D6PA^kG?0Kt!gz=T!#Ax_aP?KjcIKd{W87Kk9{O2_{917&Q>DQLK}!1Vh6d zjE;mr5+ukgbV7YaJ2ZT_XdkukwcD+0URsjdGr+@SSOk-q0jrsY_&6GARB0oIr?kLf zGWRyRpyJ@-D1c)X9GtBe)uMw8>S!%h@n0w;Krj%2NSIeL%wW{RoVhk=s;rY*J}LPf zmAmEInZoCbHxk_jg1n+|Qu7T428;&P3q~o+vQpC}1mbC$3E(WfXjE9dPr|0{{oVWTE^nuU1MjktG4eL-aztmPqx&mqn~(j?@GQk4K>GN}0F+ z`mUc)8S9VbJ91Xmty-PNxO+K#NYW6@+;5QI#5hT_QFrG|0GC;~P|qn?SB+Vg!^vrm0H}^s3l|9X4&1J7pj-s8q_^cPJi@&p?P>;0xhFQ#GS}C>Bb|Xzc z0T^nZ$-p6G;Cwx=gozkb`iBNWR{9E7PpoQIto0_74q9$pVf%0X_Qa&Gwp4L2ZEe}s z^rh?nR!kjw1Fm4_xt+2YxiDi(X3bcuvt(@8GpF#oyOu6bW5^xfuvXo)9k40T3!mOq{wA9xZS|4V z{1;zcQj|tpVrb~cts9HfkuEnS2}RcuXjAi8R25IMi1ZCo6%&%o3i!^(F6gWMbU5HX zeViL>+lNc^PS@3pVa?o-9Gkj&e{#-qoAZhno195{Y)~@z10wbVDf)&iPJIVR+D=K$ zfAT;K7MfVBs1p+$xbHN|Lk-6VCwecR;{5Fg@PUqph5g7dJB#DZj-uBSvevwrnpfh; zNVh>U0wLKk9+Du8d+o?15u2!pL#h1+8jMIa*?NunIq=>e#B8aE_+97jPkO743gLm{ z(>;G805WuDhu&l_D2bU>@{VOzL2**%;`n4o5?JF6V6*73oYMHsfNdLFw;#U=M*{)` zaI+E^^ulQGZ8qeo9-8!4-{JzUGD!$s!zKUcH{ugNPRTIDWhLlhXDv4*A0qaTa`*rM002ovPDHLkV1h|Vx`F@z literal 0 HcmV?d00001 diff --git a/Store/Store/Images/new.png b/Store/Store/Images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..12131b01008a3ec29ec69f8b3f65c4b3c15b60d6 GIT binary patch literal 852 zcmV-a1FQUrP)IE2xvpcKl890$E8eWxeF8o0mWjmIG{M&7eWO9CVRojsy7@;&dpQ!a9t0J7gPX(5I|>76wd9YM;~Wq>Ghkp6rY@= zsi|pt_x=M#qtRtve?bMn?-1>_C5DBX;{}vm&C%raD|#~il%B<2&`e?uix*V@+JPAL z6CgbQkZR2~6*sGtFK$zbV~w|k*M3m}@OjM5T^_Z^d)w}xJHF(IUAVpO;*`oW;C1B2 zbys585IO4RGepz@rv~8kI;}Y(n3!mCfS7AgQ=I?+DlNG&;!abH5Df(KZTl#;d_@48 zJKJjfX^uQ>h#Iar6M#C8w^So4*Tn<|1^_iEoENLSCA-QKz)fKe6)JLW%zjz|XlmW9 z@suY3Q`{VJZCgNKnyVajp6h`@6-N=kYKbun)^`LT3}hx^wrO>XsHzE2w#B^A1Ngov zV}~hV3>btQ09#E(0CWRWn5~q>9Op*n90161U8$i6fc^Yd5_2;F2sIc&=-PaaDX2~W zTL1&dm}fQw05ax<-uM>_{4Cgt02pUFPqb7NBbWjJ0t`O;#ZxHoL%3#1_iOo5hu6MT z0mxO4x=yW24v?>f-nYV%Jx`{y-lMT`>)O!u6_~SbsQ_#=q-z-e;1PdX7gN*|3t4aE z?!Drr!OKg0ZH#q?HK_Wx9NlHvJdYn4{+`bsH@(TacqVT~0BG|6fti$^=|8_20YcOC e{Jor>rG5iZY$c(Rl?rzN0000RP)CWtKz1rEEwa&Ubd$6s{da=&VIP1;2`BM0`Wb;D z{M-!)vd0-ix#k=pmKgFxQgYk(eOi$0QlJD2NbOI5d5567avIIj< zv@<}9dj`!tE;Q@xs8{wNhf{?zUNu9!u=J3D!C+h_ze{}K1V|htI6?j0>T@UYxhDij zhnKMl|M#(rT!AcZ}eF)wgP_d zAX10jekLr}U#(CrCA<(opAbNs2#S{v>vbjZBPMG2>Dlh2!oC#Mk@9m9Zc z2%^^3CBjkLC=!RpAFqNhVw6pZB#Q!^oqj*T-F(Vw$mLX*nO_ zNX-3DeeTpEomGUYnz~IsN92z9JUkMF)7=lf!HB}*Vw`?29z6pA^e+N~guKQ7E$%u) zC{dC3_66}y+`oN81yr%;K@{IH8|1O-3y*riL6}qGd@SEo}8X#Q_kq zZ|eG3QMpHgF(8Pc07FLLD$kpMaaUZZl&Qk=tr>Kq76&g@g}Kbh`}mD}bLg zSob6#9DIaI(-=7VVTPPm{Z+FbtPVT4Iv?2~9(pg}6TG@z0w%t}gOqRBIG>z~1AjdP zW3QR%ZYsA%*Mp?X$w>b?i;UGgQ?+sSsoXX8X`%zES@sOGBngFV;lVB@d3_10@@V;lg>dY2BN>v^RZ2^?j@k8NdQ$X;_ z_a$H}ZfeJ=gha#~If~qTHdcoJ4Lhqwh-3dbkKgY5JsSA}oWGEOlkpdDqpb%S#7{~T>2A7M zsP8QLl$cN`w?OF*Jo#7bDJpj@!Dj^fwz=d)jlRsXTKwbW85}(HH?VT^u<$rb~rBzaiB|lB=W)A?(%51dO$!?mU^ ze8O#IHd*n50bG}w!BKl4^90wps7K`#)>4RXJ_(`usyx1v$_9j`-;Pq{6K%jV&lNRO%>FPb&x$A5bBEmwG~ zsNAo;tlZJ!2;Bu-bsyf#uSL0b05WG_^}?r@soeJn(y81#_yhC8@e_i|9PXV^3ptdy z4Z_G4qZfz6FCzC2|JrSe-C>#48@AYMyIwNBFNyyFX1QPd5r93<00000NkvXXu0mjf DP*&js literal 0 HcmV?d00001 diff --git a/Store/Store/Images/save.png b/Store/Store/Images/save.png new file mode 100644 index 0000000000000000000000000000000000000000..daba865fafd22fa18e7c0488eb699b79d3554170 GIT binary patch literal 1187 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 Ef)$pHVE_OC literal 0 HcmV?d00001 diff --git a/Store/Store/UDP/UDPListen.pro b/Store/Store/UDP/UDPListen.pro new file mode 100644 index 0000000..8b62f78 --- /dev/null +++ b/Store/Store/UDP/UDPListen.pro @@ -0,0 +1,19 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2017-07-24T10:26:36 +# +#------------------------------------------------- + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = UDPListen +TEMPLATE = app + + +SOURCES += main.cpp \ + udplisten.cpp + +HEADERS += \ + udplisten.h diff --git a/Store/Store/UDP/UDPListen.pro.user b/Store/Store/UDP/UDPListen.pro.user new file mode 100644 index 0000000..92367b5 --- /dev/null +++ b/Store/Store/UDP/UDPListen.pro.user @@ -0,0 +1,269 @@ + + + + + + EnvironmentId + {6fa689f0-d307-453e-aa89-3b1bf25a9d4e} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + + 0 + true + + + true + true + Builtin.DefaultTidyAndClazy + 4 + true + + + + true + + + true + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 6.5.2 MinGW 64-bit + Desktop Qt 6.5.2 MinGW 64-bit + qt.qt6.652.win64_mingw_kit + 0 + 0 + 0 + + 0 + C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + false + UDPListen2 + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro + C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro + true + true + true + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/Store/Store/UDP/main.cpp b/Store/Store/UDP/main.cpp new file mode 100644 index 0000000..f69ede7 --- /dev/null +++ b/Store/Store/UDP/main.cpp @@ -0,0 +1,11 @@ +#include +#include "udplisten.h" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + UDPListen chat; + chat.setWindowTitle("UDP Listen"); + chat.show(); + return app.exec(); +} diff --git a/Store/Store/UDP/udplisten.cpp b/Store/Store/UDP/udplisten.cpp new file mode 100644 index 0000000..b264c70 --- /dev/null +++ b/Store/Store/UDP/udplisten.cpp @@ -0,0 +1,41 @@ +#include "udplisten.h" +#include +#include +#include +#include + +UDPListen::UDPListen(QWidget *parent) : QWidget(parent) +{ + socket = 0; + + QVBoxLayout* layout = new QVBoxLayout(this); + QPushButton* listen = new QPushButton("&Listen"); + display = new QTextEdit(); + display->setReadOnly(true); + layout->addWidget(listen); + layout->addWidget(display); + resize(300, 500); + + connect(listen, SIGNAL(clicked()), this, SLOT(startListening())); +} + +void UDPListen::startListening() +{ + display->setText("Started listening..."); + socket = new QUdpSocket(this); + socket->bind(34567); + connect(socket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams())); +} + +void UDPListen::processPendingDatagrams() +{ + QByteArray buffer; + buffer.resize(socket->pendingDatagramSize()); + socket->readDatagram(buffer.data(), buffer.size()); + + QDataStream stream(buffer); + stream.setVersion(QDataStream::Qt_4_0); + stream >> line; + display->append(""); + display->append(line); +} diff --git a/Store/Store/UDP/udplisten.h b/Store/Store/UDP/udplisten.h new file mode 100644 index 0000000..23e4ab7 --- /dev/null +++ b/Store/Store/UDP/udplisten.h @@ -0,0 +1,26 @@ +#ifndef UDP_H +#define UDP_H + +#include + +class QLineEdit; +class QTextEdit; +class QUdpSocket; + +class UDPListen : public QWidget +{ + Q_OBJECT +public: + explicit UDPListen(QWidget *parent = 0); +signals: + +public slots: + void startListening(); + void processPendingDatagrams(); +private: + QTextEdit* display; + QUdpSocket *socket; + QString line; +}; + +#endif // UDP_H diff --git a/Store/Store/addcustomerdialog.cpp b/Store/Store/addcustomerdialog.cpp new file mode 100644 index 0000000..1e34142 --- /dev/null +++ b/Store/Store/addcustomerdialog.cpp @@ -0,0 +1,87 @@ +#include "addcustomerdialog.h" +#include +#include +#include +#include +#include +#include +#include + +AddCustomerDialog::AddCustomerDialog(QWidget *parent):QDialog(parent) + ,edtCust(new QComboBox), + edtItem(new QComboBox),edtQuantity(new QSpinBox), + edtAddItem(new QPushButton("Add Item")) + ,txtEdt(new QTextEdit),edtDone(new QPushButton("Done")) +{ + setWindowTitle("Add Customer"); + + setupGUI(); + connect(edtAddItem, &QPushButton::clicked, this, &AddCustomerDialog::accept); + connect(edtAddItem, &QPushButton::clicked, this, &AddCustomerDialog::addCustomer); + + connect(edtDone, &QPushButton::clicked, this, &AddCustomerDialog::reject); +} +Customer AddCustomerDialog::getCustomer() const +{ + return Customer(edtAddItem->text()); +} + +void AddCustomerDialog::addCustomer() +{ + txtEdt->show(); + +} + +void AddCustomerDialog::setupGUI(){ + + // Declare widgets + QGridLayout *layout(new QGridLayout(this)); + + QLabel*lblTop{new QLabel("Complete the required data")}; + QLabel *lblCustomer(new QLabel("Select the Customer")); + QLabel *lblItem(new QLabel("Select the item")); + QLabel *lblType(new QLabel("Item Type")); + QLabel *lblQuantity(new QLabel("item quantity")); + + + + + // Setup layout + layout->addWidget(lblTop); + layout->addWidget(lblCustomer,1,0); + layout->addWidget(edtCust,1,1); + + layout->addWidget(lblItem,2,0); + layout->addWidget(edtItem,2,1); + + layout->addWidget(lblType,3,0); + + + layout->addWidget(lblQuantity,4,0); + layout->addWidget(edtQuantity,4,1); + layout->addWidget(edtAddItem,4,2); + + layout->addWidget(txtEdt,5,0,2,4); + layout->addWidget(edtDone,7,1,2,1); + + + + // Initialize widgets + QStringList listOne = QStringList() <<" " <<"Customer1" << "Customer2" << "Customer3" << "Customer4" ; + edtCust->addItems(listOne); + + QStringList listTwo = QStringList() <<" " << "Book1" << "Book2"<<"Book3"<< "Magazine1" << "Magazine2"<<"Magazine3" ; + edtItem->addItems(listTwo); + + + edtQuantity->setMaximum(9999); + edtQuantity->setMinimum(0); + + edtQuantity->setAlignment(Qt::AlignRight); + + + +} + + + diff --git a/Store/Store/addcustomerdialog.h b/Store/Store/addcustomerdialog.h new file mode 100644 index 0000000..bda8772 --- /dev/null +++ b/Store/Store/addcustomerdialog.h @@ -0,0 +1,45 @@ +#ifndef ADDCUSTOMERDIALOG_H +#define ADDCUSTOMERDIALOG_H +#include +#include +#include +#include +#include "Customer.h" +//#include"customerlist.h" +class QPushButton; +class QLineEdit; +class QTextEdit; +class QComboBox; +class QDoubleSpinBox; +class QSpinBox; +class CustomerList; + +class Customer; +class AddCustomerDialog : public QDialog +{ + Q_OBJECT +public: + AddCustomerDialog(QWidget *parent = nullptr); + + Customer getCustomer() const; + +private slots: + + void addCustomer(); +private: + + void setupGUI(); + + QComboBox *edtCust; + QComboBox *edtItem; + QSpinBox*edtQuantity; + + QPushButton*edtAddItem; + QTextEdit*txtEdt; + QPushButton*edtDone; + + // CustomerList list; + Customer*customer; + +}; +#endif // ADDCUSTOMERDIALOG_H diff --git a/Store/Store/additemdialog.cpp b/Store/Store/additemdialog.cpp new file mode 100644 index 0000000..e396fa0 --- /dev/null +++ b/Store/Store/additemdialog.cpp @@ -0,0 +1,79 @@ +#include "additemdialog.h" +#include"item.h" +#include +#include +#include +#include +#include +#include +#include + +AddItemDialog::AddItemDialog(QWidget *parent) + : QDialog(parent),edtType{new QComboBox},edtItemName{new QLineEdit} + ,edtAddItem{new QPushButton("Add item")} +{ + setWindowTitle("Add Item"); + setupGUI(); + connect(edtAddItem, &QPushButton::clicked, this, &AddItemDialog::accept); + // connect(edtDone, &QPushButton::clicked, this, &AddItemDialog::reject); + +} + +Item AddItemDialog::getItem() const +{ + return Item(edtItemName->text()); +} + +void AddItemDialog::addCustomer() +{ + + +} + +void AddItemDialog::readList() +{ + +} + +void AddItemDialog::writeList() +{ + +} + +void AddItemDialog::setupGUI() +{ + // Setup layout + + QGridLayout*layout(new QGridLayout(this)); + + QLabel*lblTop{new QLabel("Complete the required data")}; + + lblTop->setAlignment(Qt::AlignCenter); + QLabel*lblType{new QLabel("Item Type")}; + QLabel*lblItem{new QLabel("Name of Item")}; + + + + + layout->addWidget(lblTop); + + + layout->addWidget(lblType,1,0); + layout->addWidget(edtType,1,1); + + layout->addWidget(lblItem,2,0); + layout->addWidget(edtItemName,2,1); + + layout->addWidget(edtAddItem,3,1); + + this->setLayout(layout); + + // initialize widgets + + QStringList type =QStringList()<<" "<<"B"<<"M"; + edtType->addItems(type); + +} + + + diff --git a/Store/Store/additemdialog.h b/Store/Store/additemdialog.h new file mode 100644 index 0000000..ee5e148 --- /dev/null +++ b/Store/Store/additemdialog.h @@ -0,0 +1,38 @@ +#ifndef ADDITEMDIALOG_H +#define ADDITEMDIALOG_H +#include +#include +#include +#include +class Item; +class QPushButton; +class QLineEdit; +class QComboBox; +class shopInput; + +class AddItemDialog : public QDialog +{ + Q_OBJECT +public: + AddItemDialog(QWidget *parent = nullptr); + Item getItem() const; + +private slots: + void addCustomer(); + void readList(); + void writeList(); + +private: + + void setupGUI(); + //QLineEdit *m_nameLineEdit; + + QComboBox*edtType; + QLineEdit*edtItemName; + QPushButton*edtAddItem; + + +}; + + +#endif // ADDITEMDIALOG_H diff --git a/Store/Store/customer.cpp b/Store/Store/customer.cpp new file mode 100644 index 0000000..1fb8603 --- /dev/null +++ b/Store/Store/customer.cpp @@ -0,0 +1,10 @@ +#include "customer.h" + +Customer::Customer(const QString &name) + : m_name(name) +{ +} +QString Customer::getName() const +{ + return m_name; +} diff --git a/Store/Store/customer.h b/Store/Store/customer.h new file mode 100644 index 0000000..17026e0 --- /dev/null +++ b/Store/Store/customer.h @@ -0,0 +1,14 @@ +#ifndef CUSTOMER_H +#define CUSTOMER_H + +#include +class Customer +{ +public: + Customer(const QString &name); + QString getName() const; +private: + QString m_name; +}; + +#endif // CUSTOMER_H diff --git a/Store/Store/item.cpp b/Store/Store/item.cpp new file mode 100644 index 0000000..bb9dc76 --- /dev/null +++ b/Store/Store/item.cpp @@ -0,0 +1,10 @@ +#include "item.h" + +Item::Item(const QString &name) + : m_name(name) +{ +} +QString Item::getName() const +{ + return m_name; +} diff --git a/Store/Store/item.h b/Store/Store/item.h new file mode 100644 index 0000000..3dd3183 --- /dev/null +++ b/Store/Store/item.h @@ -0,0 +1,15 @@ +#ifndef ITEM_H +#define ITEM_H +#include + +class Item +{ +public: + Item(const QString &name); + QString getName() const; +private: + QString m_name; +}; + + +#endif // ITEM_H diff --git a/Store/Store/main.cpp b/Store/Store/main.cpp new file mode 100644 index 0000000..aff48df --- /dev/null +++ b/Store/Store/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/Store/Store/mainwindow.cpp b/Store/Store/mainwindow.cpp new file mode 100644 index 0000000..7fb1029 --- /dev/null +++ b/Store/Store/mainwindow.cpp @@ -0,0 +1,253 @@ +#include "mainwindow.h" +#include +#include"customer.h" +#include "item.h" +#include "addcustomerdialog.h" +#include "additemdialog.h" +#include +#include +#include +#include +#include +#include +#include + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent),m_transactionsTreeView{new QTreeView} +{ + setWindowTitle("Store Application"); + resize(800,600); + + + QMenu *fileMenu = menuBar()->addMenu(tr("&File")); + QMenu *editMenu = menuBar()->addMenu(tr("&Add")); + QMenu *restoreMenu=menuBar()->addMenu("&Restore"); + QMenu *helpMenu = menuBar()->addMenu(tr("&Help")); + // Create actions for the menus + QAction *newAction = new QAction(tr("&Add"), this); + QAction *openAction = new QAction(tr("&Open"), this); + QAction *saveAction = new QAction(tr("&Save"), this); + QAction *exitAction = new QAction(tr("&Exit"), this); + QAction *helpAction =new QAction(tr("Help"),this); + + // fileMenu->addAction(newAction); + + fileMenu->addAction(openAction); + fileMenu->addAction(saveAction); + fileMenu->addSeparator(); + fileMenu->addAction(exitAction); + helpMenu->addAction(helpAction); + + editMenu->addAction(newAction); + // Create toolbar + QToolBar *toolbar = addToolBar(tr("Main Toolbar")); + toolbar->addAction(newAction); + toolbar->addAction(openAction); + toolbar->addAction(saveAction); + // Create status bar + QStatusBar *statusBar = this->statusBar(); + statusBar->showMessage(tr("Ready")); + + + m_transactionsModel = new QStandardItemModel(this); + m_transactionsModel->setHorizontalHeaderLabels(QStringList() << tr("Transaction ") << tr("Type") << tr("Quality")); + m_transactionsTreeView->setModel(m_transactionsModel); + + setCentralWidget(m_transactionsTreeView); + + connect(newAction, &QAction::triggered, this, &MainWindow::addItem); + connect(helpAction, &QAction::triggered, this, &MainWindow::showAbout); + connect(newAction, &QAction::triggered, this, &MainWindow::recordTransaction); + connect(newAction, &QAction::triggered, this, &MainWindow::populateTransaction); + + + +} + +MainWindow::~MainWindow() +{ +} + +void MainWindow::recordTransaction() +{ + // Create a dialog to record a transaction + QDialog dialog(this); + dialog.setWindowTitle(tr("Shop")); + // Create input fields and buttons in the dialog + // QLabel *customerLabel = new QLabel(tr("Customer:")); + QLabel*lblTop{new QLabel(" \t \t \t Complete the required data")}; + + + + QLabel*custLable=new QLabel("Select the customer"); + custNameBox=new QComboBox; + + QLabel*selectItem=new QLabel("Select the Item"); + selectItemComboBox = new QComboBox; + + + QLabel *itemLabel = new QLabel(tr("Item Type")); + itemComboBox = new QComboBox; + + + QLabel *quantityLabel = new QLabel(tr("Quantity:")); + QSpinBox *quantitySpinBox = new QSpinBox; + + ItemAdd=new QPushButton("AddItem"); + txtEdit=new QPlainTextEdit; + + QPushButton *recordButton = new QPushButton(tr("Done")); + + + + QStringList cName=QStringList()<<" "<<"Customer1"<<"Customer2"<<"Customer3"<<"Customer 4"; + custNameBox->addItems(cName); + + + QStringList type=QStringList()<<" "<<"B"<<"M"; + itemComboBox->addItems(type); + + + QStringList cust=QStringList()<<" "<<"Book1"<<"Book2"<<"Book3"<<"Book4"<<"Magazine1"<<"Magazine2"<<"Magazine 3"; + selectItemComboBox->addItems(cust); + // edtCust->addItems(cust); + + for (const Customer *customer : m_customers) { + selectItemComboBox->addItem(customer->getName()); + // edtCust->addItem(customer->getName()); + } + + for (const Item *item : m_items) { + itemComboBox->addItem(item->getName()); + } + + QGridLayout *layout = new QGridLayout; + + layout->addWidget(lblTop); + + + layout->addWidget(custLable,1,0); + layout->addWidget(custNameBox,1,1); + + layout->addWidget(selectItem,2,0); + layout->addWidget(selectItemComboBox,2,1); + + + layout->addWidget(itemLabel,3,0); + layout->addWidget(itemComboBox,3,1); + + + layout->addWidget(quantityLabel,4,0); + layout->addWidget(quantitySpinBox,4,1); + layout->addWidget(ItemAdd,4,2); + layout->addWidget(txtEdit,5,0,2,4); + + + layout->addWidget(recordButton,7,1,2,1); + dialog.setLayout(layout); + + + + + + connect(recordButton, &QPushButton::clicked, [&]() { + QString custName=custNameBox->currentText(); + QString customerName = selectItemComboBox->currentText(); + QString itemType = itemComboBox->currentText(); + int quantity = quantitySpinBox->value(); + Transaction *transaction = new Transaction(custName,QDateTime::currentDateTime(), customerName, itemType, quantity); + m_transactions.append(transaction); + dialog.accept(); + }); + + dialog.exec(); + +} + +void MainWindow::populateTransaction() +{ + + m_transactionsModel->setHorizontalHeaderLabels(QStringList() << tr("Transaction ") << tr("Type") << tr("Quality")); + m_transactionsModel->clear(); + for (const Transaction *transaction : m_transactions) { + + QListcustomer; + customer.append(new QStandardItem(transaction->getCustomer())); + m_transactionsModel->appendRow(customer); + + QList items; + items.append(new QStandardItem(transaction->getDateTime().toString())); + customer.first()->appendRow(items); + m_transactionsModel->appendRow(customer); + + QListterms; + terms.append(new QStandardItem(transaction->getCustomerName())); + terms.append(new QStandardItem(transaction->getItemType())); + terms.append(new QStandardItem(QString::number(transaction->getQuantity()))); + + items.first()->appendRow(terms); + m_transactionsModel->appendRow(terms); + + + + +} + + +} +QListMainWindow::prepareRow(const QString &first,const QString &second + ,const QString &third ){ + +QListrowItems; +rowItems< +#include +#include +#include +#include +#include"transaction.h" + +class Customer; +class Item; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private slots: + + void recordTransaction(); + void populateTransaction(); + void addItem(); + void addCustomer(); + + void newFile(); + void open(); + void about(); + + void showHelp(); + void showAbout(); + +private: + QTreeView *m_transactionsTreeView; + + QListprepareRow(const QString &first,const QString&second,const QString&third); + QStandardItemModel *m_transactionsModel; + QList m_transactions; + QList m_customers; + QList m_items; + + QComboBox *custNameBox; + QComboBox *selectItemComboBox; + QLabel *itemLabel; + QComboBox *itemComboBox; + QSpinBox *quantitySpinBox; + + QPushButton*ItemAdd; + QPlainTextEdit*txtEdit; + + +}; +#endif // MAINWINDOW_H diff --git a/Store/Store/mymodel.cpp b/Store/Store/mymodel.cpp new file mode 100644 index 0000000..a3957f6 --- /dev/null +++ b/Store/Store/mymodel.cpp @@ -0,0 +1,50 @@ +#include "mymodel.h" + +MyModel::MyModel(QObject *parent) + : QAbstractItemModel{parent} +{ + +} +bool MyModel::setData(const QModelIndex & index, const QVariant & value, int role) +{ + if (role == Qt::EditRole) + { + //save value from editor to member m_gridData + m_gridData[index.row()][index.column()] = value.toString(); //for presentation purposes only: build and emit a joined string + QString result; + for(int row= 0; row < ROWS; row++) + { + for(int col= 0; col < COLS; col++) + + { + result += m_gridData[row][col] + " "; + } + } + //emit editCompleted( result ); + } + return true; +} + + +int MyModel::rowCount(const QModelIndex & /*parent*/) const +{ + return 2; +} + +Qt::ItemFlags MyModel::flags(const QModelIndex & /*index*/) const +{ + return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled ; +} + + +QVariant MyModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::DisplayRole) + { + return QString("Row%1, Column%2") + .arg(index.row() + 1) + .arg(index.column() +1); + } + return QVariant(); +} + diff --git a/Store/Store/mymodel.h b/Store/Store/mymodel.h new file mode 100644 index 0000000..55a4c7e --- /dev/null +++ b/Store/Store/mymodel.h @@ -0,0 +1,24 @@ +#ifndef MYMODEL_H +#define MYMODEL_H + +#include +#include + +const int COLS=3; +const int ROWS=2; + +class MyModel : public QAbstractItemModel +{ +public: + explicit MyModel(QObject *parent = nullptr); + int rowCount(const QModelIndex&parent=QModelIndex())const; + int columnCount(const QModelIndex&parent, int role=Qt::DisplayRole)const; + + QVariant data(const QModelIndex &iindex, int role=Qt::DisplayRole)const; + bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole); Qt::ItemFlags flags(const QModelIndex & index) const ; private: + QString m_gridData[ROWS][COLS]; //holds text entered into QTableView signals: + void editCompleted(const QString &); + +}; + +#endif // MYMODEL_H diff --git a/Store/Store/transaction.cpp b/Store/Store/transaction.cpp new file mode 100644 index 0000000..b0d8d6c --- /dev/null +++ b/Store/Store/transaction.cpp @@ -0,0 +1,33 @@ +#include "transaction.h" + +Transaction::Transaction( QString cust,const QDateTime &dateTime, const QString &customerName, const QString &itemType, int quantity) + : customer(cust),m_dateTime(dateTime), m_customerName(customerName), m_itemType(itemType), m_quantity(quantity) +{ +} +QDateTime Transaction::getDateTime() const +{ + return m_dateTime; +} +QString Transaction::getCustomerName() const +{ + return m_customerName; +} +QString Transaction::getItemType() const +{ + return m_itemType; +} + +int Transaction::getQuantity() const +{ + return m_quantity; +} + +QString Transaction::getCustomer() const +{ + return customer; +} + +void Transaction::setCustomer(const QString &newCustomer) +{ + customer = newCustomer; +} diff --git a/Store/Store/transaction.h b/Store/Store/transaction.h new file mode 100644 index 0000000..313e7a0 --- /dev/null +++ b/Store/Store/transaction.h @@ -0,0 +1,32 @@ +#ifndef TRANSACTION_H +#define TRANSACTION_H +#include +#include +#include "customer.h" +#include "item.h" + + +class Transaction +{ +public: + Transaction(QString cust,const QDateTime &dateTime, const QString &customerName, const QString &itemType, int quantity); + QDateTime getDateTime() const; + QString getCustomerName() const; + QString getItemType() const; + int getQuantity() const; + QString getCustomer() const; + + void setCustomer(const QString &newCustomer); + +private: + QDateTime m_dateTime; + QString m_customerName; + QString m_itemType; + int m_quantity; + QString customer; +}; + + + + +#endif // TRANSACTION_H diff --git a/Store/UDP/UDPListen.pro b/Store/UDP/UDPListen.pro new file mode 100644 index 0000000..8b62f78 --- /dev/null +++ b/Store/UDP/UDPListen.pro @@ -0,0 +1,19 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2017-07-24T10:26:36 +# +#------------------------------------------------- + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = UDPListen +TEMPLATE = app + + +SOURCES += main.cpp \ + udplisten.cpp + +HEADERS += \ + udplisten.h diff --git a/Store/UDP/UDPListen.pro.user b/Store/UDP/UDPListen.pro.user new file mode 100644 index 0000000..92367b5 --- /dev/null +++ b/Store/UDP/UDPListen.pro.user @@ -0,0 +1,269 @@ + + + + + + EnvironmentId + {6fa689f0-d307-453e-aa89-3b1bf25a9d4e} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + + 0 + true + + + true + true + Builtin.DefaultTidyAndClazy + 4 + true + + + + true + + + true + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 6.5.2 MinGW 64-bit + Desktop Qt 6.5.2 MinGW 64-bit + qt.qt6.652.win64_mingw_kit + 0 + 0 + 0 + + 0 + C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + C:\Users\DELL\Desktop\Cos3711\2018\S2\SolutionsToAssignment2\SolutionsToAssignment2\Question8\build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + false + UDPListen2 + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro + C:/Users/DELL/Desktop/ASSG3/UDP/UDPListen.pro + true + true + true + C:/Users/DELL/Desktop/Cos3711/2018/S2/SolutionsToAssignment2/SolutionsToAssignment2/Question8/build-UDPListen-Desktop_Qt_6_5_2_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/Store/UDP/main.cpp b/Store/UDP/main.cpp new file mode 100644 index 0000000..f69ede7 --- /dev/null +++ b/Store/UDP/main.cpp @@ -0,0 +1,11 @@ +#include +#include "udplisten.h" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + UDPListen chat; + chat.setWindowTitle("UDP Listen"); + chat.show(); + return app.exec(); +} diff --git a/Store/UDP/udplisten.cpp b/Store/UDP/udplisten.cpp new file mode 100644 index 0000000..b264c70 --- /dev/null +++ b/Store/UDP/udplisten.cpp @@ -0,0 +1,41 @@ +#include "udplisten.h" +#include +#include +#include +#include + +UDPListen::UDPListen(QWidget *parent) : QWidget(parent) +{ + socket = 0; + + QVBoxLayout* layout = new QVBoxLayout(this); + QPushButton* listen = new QPushButton("&Listen"); + display = new QTextEdit(); + display->setReadOnly(true); + layout->addWidget(listen); + layout->addWidget(display); + resize(300, 500); + + connect(listen, SIGNAL(clicked()), this, SLOT(startListening())); +} + +void UDPListen::startListening() +{ + display->setText("Started listening..."); + socket = new QUdpSocket(this); + socket->bind(34567); + connect(socket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams())); +} + +void UDPListen::processPendingDatagrams() +{ + QByteArray buffer; + buffer.resize(socket->pendingDatagramSize()); + socket->readDatagram(buffer.data(), buffer.size()); + + QDataStream stream(buffer); + stream.setVersion(QDataStream::Qt_4_0); + stream >> line; + display->append(""); + display->append(line); +} diff --git a/Store/UDP/udplisten.h b/Store/UDP/udplisten.h new file mode 100644 index 0000000..23e4ab7 --- /dev/null +++ b/Store/UDP/udplisten.h @@ -0,0 +1,26 @@ +#ifndef UDP_H +#define UDP_H + +#include + +class QLineEdit; +class QTextEdit; +class QUdpSocket; + +class UDPListen : public QWidget +{ + Q_OBJECT +public: + explicit UDPListen(QWidget *parent = 0); +signals: + +public slots: + void startListening(); + void processPendingDatagrams(); +private: + QTextEdit* display; + QUdpSocket *socket; + QString line; +}; + +#endif // UDP_H