4. 구 현
(1) UI(User Interface) 구현
파 일 명 |
설 명 |
trafficrobot_main.h |
프로그램이 시작되는 첫 화면을 구현한 것으로 로그인 화면으로 이동하는 “Enter"버튼과 프로그램을 종료하는 "Exit"버튼을 구현해 놓은 파일 |
trafficrobot_main.cpp | |
trafficrobot_check.h |
로그인 화면을 구현한 것으로 숫자가 적힌 버튼을 클릭해서 Password를 입력하게 하였고, 로봇을 작동시키기 위한 메뉴화면으로 가는 "Login"버튼과 Password 변경을 위한 "P.W Change"버튼과 이전화면으로 가기 위한 “GoBack"버튼을 구현해 놓은 파일 |
trafficrobot_check.cpp | |
trafficrobot_pwchange.h |
Password를 변경하는 화면으로 숫자가 적힌 버튼을 클릭해서 Password를 입력하게 하였고, NEW P.W에서 새로운 비밀번호를 입력받고, CHECK P.W에서는 새로운 비밀번호를 한 번 더 확인하도록 구현해 놓은 파일 |
trafficrobot_pwchange.cpp | |
trafficrobot_menu.h |
로봇을 Automatic Control(자동제어) 할 것인지, Passivity Control(수동제어) 할 것인지를 선택할 수 있도록 구현해 놓은 파일 |
trafficrobot_menu.cpp | |
trafficrobot_autocontrol.h |
로봇을 자동제어 할 때의 화면으로 로봇의 제어를 시작하기 위한 “START"버튼과 로봇의 제어를 종료하기 위한 ”END"버튼의 구현과 현재의 상태를 보여주는 Label을 구현한 파일 |
trafficrobot_autocontrol.cpp | |
trafficrobot_passivitycontrol.h |
로봇을 수동제어 할 때의 화면으로 로봇을 작동할 모드를 선태 할 수 있도록 하기 위해 “Mode1"버튼과 ”Mode2"버튼을 구현한 파일 |
trafficrobot_passivitycontrol.cpp | |
serial.h |
AVR과 통신을 하기 위한 터미널 속성을 정의 해 놓은 파일 |
serial.cpp |
main.cpp |
#include <qapplication.h> #include "trafficrobot_main.h"
int main( int argc, char ** argv ) { QApplication app( argc, argv ); TrafficRobot_Main TR; TR.show(); app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) ); return app.exec(); }
|
trafficrobot_main.h |
#ifndef TRAFFICROBOT_MAIN_H #define TRAFFICROBOT_MAIN_H
#include <qvariant.h> #include <qdialog.h>
class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QSpacerItem; class QPushButton;
class TrafficRobot_Main : public QDialog { Q_OBJECT // 시그널 또는 슬롯을 갖는 모든 클래스는 자신의 클래스 안에 비공개로 Q_OBJECT를 기술해야 함. 만약 이것을 기술하지 않으면 시그널과 슬롯 처리가 제대로 되지 않음.
public: TrafficRobot_Main( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = Qt::WStyle_Customize | Qt::WStyle_NoBorder ); // 실행창을 전체화면으로 보여주도록 설정 ~TrafficRobot_Main();
QPushButton* button_Exit; // 종료버튼 QPushButton* button_Enter; // 시작버튼
protected:
protected slots: virtual void languageChange(); // Form의 caption 및 버튼의 이름을 변경하는 함수
private slots: virtual void ShowCheckForm(); // CheckForm 으로 이동하는 함수. 즉, Enter버튼을 클릭 했을 때 다음화면을 보여주는 함수
};
#endif // TRAFFICROBOT_MAIN_H |
trafficrobot_main.cpp |
#include "trafficrobot_main.h" #include "trafficrobot_check.h"
#include <qvariant.h> #include <qpushbutton.h> #include <qlayout.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h>
TrafficRobot_Main::TrafficRobot_Main( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "TrafficRobot_Main" ); // Form의 이름 설정 setPaletteBackgroundPixmap( QPixmap::fromMimeSource( "LOGO_.png" ) ); // Form의 배경 이미지 설정
button_Exit = new QPushButton( this, "button_Exit" ); // Exit 버튼의 생성 및 이름 설정 button_Exit->setGeometry( QRect( 130, 120, 80, 30 ) ); // Exit 버튼의 크기 및 위치 설정 button_Exit->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); // Exit 버튼 배경색 설정 QFont button_Exit_font( button_Exit->font() ); button_Exit_font.setFamily( "DejaVu LGC Sans Mono" ); // Exit 버튼의 글꼴 설정 button_Exit_font.setPointSize( 12 ); // Exit 버튼의 글씨 크기 설정 button_Exit_font.setBold( TRUE ); // Exit 버튼의 글꼴 효과(굵게) 설정 button_Exit->setFont( button_Exit_font ); // Exit 버튼의 글꼴을 button_Exit_font로 설정
button_Enter = new QPushButton( this, "button_Enter" ); // Enter 버튼의 생성 및 이름 설정 button_Enter->setGeometry( QRect( 30, 120, 81, 31 ) ); // Enter 버튼의 크기 및 위치 설정 button_Enter->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); // Enter 버튼의 배경색 설정 QFont button_Enter_font( button_Enter->font() ); button_Enter_font.setFamily( "DejaVu LGC Sans Mono" ); // Enter 버튼의 글꼴 설정 button_Enter_font.setPointSize( 12 ); // Enter 버튼의 글씨 크기 설정 button_Enter_font.setBold( TRUE ); // Enter 버튼의 글꼴 효과(굵게) 설정 button_Enter->setFont( button_Enter_font ); // Enter 버튼의 글꼴을 button_Enter_font로 설정
|
trafficrobot_main.cpp |
languageChange(); resize( QSize(240, 320).expandedTo(minimumSizeHint()) ); // 실행창의 크기 설정 clearWState( WState_Polished );
connect( button_Exit, SIGNAL( clicked() ), this, SLOT( close() ) ); // Exit 버튼을 클릭(이벤트 발생)하면 현재창이 닫히도록 설정
connect( button_Enter, SIGNAL( clicked() ), this, SLOT( ShowCheckForm() ) ); // Enter 버튼을 클릭(이벤트 발생)하면 다음 화면(Check Form), 즉 로그인 화면이 나오도록 설정 } TrafficRobot_Main::~TrafficRobot_Main() { }
void TrafficRobot_Main::languageChange() { setCaption( tr( "TrafficRobot_Main" ) ); // 실행 Form의 Caption 설정 button_Exit->setText( tr( "Exit" ) ); // Exit 버튼의 text(표시되는 내용) 설정 button_Enter->setText( tr( "Enter" ) ); // Enter 버튼의 text(표시되는 내용) 설정 }
void TrafficRobot_Main::ShowCheckForm() // 다음 화면(Check Form으로 로그인 화면)으로 이동하는 함수 { TrafficRobot_Check check(this);
check.exec(); }
|
trafficrobot_check.h |
#ifndef TRAFFICROBOT_CHECK_H #define TRAFFICROBOT_CHECK_H
#include <qvariant.h> #include <qdialog.h>
class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QSpacerItem; class QLabel; class QPushButton; class QLineEdit;
class TrafficRobot_Check : public QDialog { Q_OBJECT
public: TrafficRobot_Check( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = Qt::WStyle_Customize | Qt::WStyle_NoBorder ); ~TrafficRobot_Check();
QLabel* Label_PW; // 'PASSWORD :'를 표시하는 Label QLineEdit* input_pw; // Password를 입력받을 LineEdit QPushButton* button_num0; // Password를 입력할 때 LineEdit에‘0’을 입력할 버튼 QPushButton* button_num1; // Password를 입력할 때 LineEdit에‘1’을 입력할 버튼 QPushButton* button_num2; // Password를 입력할 때 LineEdit에‘2’를 입력할 버튼 QPushButton* button_num3; // Password를 입력할 때 LineEdit에‘3’을 입력할 버튼 QPushButton* button_num4; // Password를 입력할 때 LineEdit에‘4’를 입력할 버튼 QPushButton* button_num5; // Password를 입력할 때 LineEdit에‘5’를 입력할 버튼 QPushButton* button_num6; // Password를 입력할 때 LineEdit에‘6’을 입력할 버튼 QPushButton* button_num7; // Password를 입력할 때 LineEdit에‘7’을 입력할 버튼 QPushButton* button_num8; // Password를 입력할 때 LineEdit에‘8’을 입력할 버튼 QPushButton* button_num9; // Password를 입력할 때 LineEdit에‘9’를 입력할 버튼 QPushButton* button_Login; // Login을 하기 위한 버튼 QPushButton* button_goback1; // 이전 화면으로 이동하기 위한 버튼 QPushButton* button_numback; // 입력한 Password를 한 글자 지울 때 사용하는 버튼 QPushButton* button_pwchange; // Password를 수정하고자 할 때 사용할 버튼
|
trafficrobot_check.h |
public slots: virtual void PW_num1(); // Password를 입력할 때 LineEdit에‘1’을 입력하기 위한 함수 virtual void PW_num2(); // Password를 입력할 때 LineEdit에‘2’를 입력하기 위한 함수 virtual void PW_num3(); // Password를 입력할 때 LineEdit에‘3’을 입력하기 위한 함수 virtual void PW_num4(); // Password를 입력할 때 LineEdit에‘4’를 입력하기 위한 함수 virtual void PW_num5(); // Password를 입력할 때 LineEdit에‘5’를 입력하기 위한 함수 virtual void PW_num6(); // Password를 입력할 때 LineEdit에‘6’을 입력하기 위한 함수 virtual void PW_num7(); // Password를 입력할 때 LineEdit에‘7’을 입력하기 위한 함수 virtual void PW_num8(); // Password를 입력할 때 LineEdit에‘8’을 입력하기 위한 함수 virtual void PW_num9(); // Password를 입력할 때 LineEdit에‘9’를 입력하기 위한 함수 virtual void PW_num0(); // Password를 입력할 때 LineEdit에‘0’을 입력하기 위한 함수 virtual void PW_backspace(); // 입력한 Password를 한 글자 지우는 함수 virtual void PW_Login(); // Login을 위해 파일의 암호와 입력한 암호를 비교하는 함수 virtual void PW_change(); // Login 후에 Password를 바꿔주는 함수
protected:
protected slots: virtual void languageChange();
};
#endif // TRAFFICROBOT_CHECK_H
|
trafficrobot_check.cpp |
#include "trafficrobot_check.h" #include "trafficrobot_menu.h" #include "trafficrobot_pwchange.h"
#include <qvariant.h> #include <qlabel.h> #include <qpushbutton.h> #include <qlineedit.h> #include <qlayout.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> #include <stdio.h> #include <string.h>
char password_input[5] = {0,}; // 사용자로부터 입력받은 Password를 저장할 배열
TrafficRobot_Check::TrafficRobot_Check( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "TrafficRobot_Check" ); // Form의 이름 설정 setPaletteBackgroundPixmap( QPixmap::fromMimeSource( "LOGO3_.png" ) ); // Form의 배경 이미지 설정
Label_PW = new QLabel( this, "Label_PW" ); // Label 생성 및 이름 설정 Label_PW->setGeometry( QRect( 10, 80, 110, 20 ) ); // Label의 크기 및 위치 설정 Label_PW->setPaletteBackgroundColor( QColor( 137, 255, 239 ) ); // Label의 배경색 설정 QFont Label_PW_font( Label_PW->font() ); Label_PW_font.setFamily( "DejaVu LGC Sans Mono" ); // Label에 표시될 내용의 글꼴 설정 Label_PW_font.setPointSize( 12 ); // Label에 표시될 내용의 글꼴 크기 설정 Label_PW_font.setBold( TRUE ); // Label에 표시될 내용의 글꼴 효과(굵게) 설정 Label_PW->setFont( Label_PW_font ); // Label에 표시될 내용의 글꼴을 Label_PW_font로 설정
button_num7 = new QPushButton( this, "button_num7" ); // PushButton 생성 및 이름 설정 button_num7->setGeometry( QRect( 51, 153, 30, 30 ) ); // 버튼의 위치 및 크기 설정 button_num7->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); // 버튼의 배경색 설정 QFont button_num7_font( button_num7->font() ); button_num7_font.setFamily( "DejaVu LGC Sans Mono" ); // 버튼의 글꼴 설정 button_num7_font.setPointSize( 12 ); // 버튼의 글꼴 크기 설정 button_num7_font.setBold( TRUE ); // 버튼의 글꼴 효과(굵게) 설정 button_num7->setFont( button_num7_font ); // 버튼의 글꼴을 button_num7_font로 설정
|
trafficrobot_check.cpp |
button_num9 = new QPushButton( this, "button_num9" ); button_num9->setGeometry( QRect( 123, 153, 30, 30 ) ); button_num9->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num9_font( button_num9->font() ); button_num9_font.setFamily( "DejaVu LGC Sans Mono" ); button_num9_font.setPointSize( 12 ); button_num9_font.setBold( TRUE ); button_num9->setFont( button_num9_font );
button_num6 = new QPushButton( this, "button_num6" ); button_num6->setGeometry( QRect( 15, 153, 30, 30 ) ); button_num6->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num6_font( button_num6->font() ); button_num6_font.setFamily( "DejaVu LGC Sans Mono" ); button_num6_font.setPointSize( 12 ); button_num6_font.setBold( TRUE ); button_num6->setFont( button_num6_font );
button_num8 = new QPushButton( this, "button_num8" ); button_num8->setGeometry( QRect( 87, 153, 30, 30 ) ); button_num8->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num8_font( button_num8->font() ); button_num8_font.setFamily( "DejaVu LGC Sans Mono" ); button_num8_font.setPointSize( 12 ); button_num8_font.setBold( TRUE ); button_num8->setFont( button_num8_font );
button_goback1 = new QPushButton( this, "button_goback1" ); button_goback1->setGeometry( QRect( 68, 260, 100, 30 ) ); button_goback1->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QPalette pal; QColorGroup cg; cg.setColor( QColorGroup::Foreground, black ); cg.setColor( QColorGroup::Button, QColor( 234, 255, 250) ); cg.setColor( QColorGroup::Light, white ); cg.setColor( QColorGroup::Midlight, QColor( 244, 255, 252) ); cg.setColor( QColorGroup::Dark, QColor( 117, 127, 125) ); cg.setColor( QColorGroup::Mid, QColor( 156, 170, 167) ); cg.setColor( QColorGroup::Text, black ); cg.setColor( QColorGroup::BrightText, white ); cg.setColor( QColorGroup::ButtonText, black ); |
trafficrobot_check.cpp |
cg.setColor( QColorGroup::Base, white ); cg.setColor( QColorGroup::Background, QColor( 179, 249, 249) ); cg.setColor( QColorGroup::Shadow, black ); cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); cg.setColor( QColorGroup::HighlightedText, white ); cg.setColor( QColorGroup::Link, black ); cg.setColor( QColorGroup::LinkVisited, black ); pal.setActive( cg ); cg.setColor( QColorGroup::Foreground, black ); cg.setColor( QColorGroup::Button, QColor( 234, 255, 250) ); cg.setColor( QColorGroup::Light, white ); cg.setColor( QColorGroup::Midlight, white ); cg.setColor( QColorGroup::Dark, QColor( 117, 127, 125) ); cg.setColor( QColorGroup::Mid, QColor( 156, 170, 167) ); cg.setColor( QColorGroup::Text, black ); cg.setColor( QColorGroup::BrightText, white ); cg.setColor( QColorGroup::ButtonText, black ); cg.setColor( QColorGroup::Base, white ); cg.setColor( QColorGroup::Background, QColor( 179, 249, 249) ); cg.setColor( QColorGroup::Shadow, black ); cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); cg.setColor( QColorGroup::HighlightedText, white ); cg.setColor( QColorGroup::Link, QColor( 0, 0, 255) ); cg.setColor( QColorGroup::LinkVisited, QColor( 255, 0, 255) ); pal.setInactive( cg ); cg.setColor( QColorGroup::Foreground, QColor( 128, 128, 128) ); cg.setColor( QColorGroup::Button, QColor( 234, 255, 250) ); cg.setColor( QColorGroup::Light, white ); cg.setColor( QColorGroup::Midlight, white ); cg.setColor( QColorGroup::Dark, QColor( 117, 127, 125) ); cg.setColor( QColorGroup::Mid, QColor( 156, 170, 167) ); cg.setColor( QColorGroup::Text, QColor( 128, 128, 128) ); cg.setColor( QColorGroup::BrightText, white ); cg.setColor( QColorGroup::ButtonText, QColor( 128, 128, 128) ); cg.setColor( QColorGroup::Base, white ); cg.setColor( QColorGroup::Background, QColor( 179, 249, 249) ); cg.setColor( QColorGroup::Shadow, black ); cg.setColor( QColorGroup::Highlight, QColor( 0, 0, 128) ); cg.setColor( QColorGroup::HighlightedText, white ); cg.setColor( QColorGroup::Link, QColor( 0, 0, 255) ); cg.setColor( QColorGroup::LinkVisited, QColor( 255, 0, 255) ); pal.setDisabled( cg ); button_goback1->setPalette( pal ); QFont button_goback1_font( button_goback1->font() ); |
trafficrobot_check.cpp |
button_goback1_font.setFamily( "DejaVu LGC Sans Mono" ); button_goback1_font.setPointSize( 12 ); button_goback1_font.setBold( TRUE ); button_goback1->setFont( button_goback1_font );
button_num0 = new QPushButton( this, "button_num0" ); button_num0->setGeometry( QRect( 159, 153, 30, 30 ) ); button_num0->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num0_font( button_num0->font() ); button_num0_font.setFamily( "DejaVu LGC Sans Mono" ); button_num0_font.setPointSize( 12 ); button_num0_font.setBold( TRUE ); button_num0->setFont( button_num0_font );
button_numback = new QPushButton( this, "button_numback" ); button_numback->setGeometry( QRect( 195, 115, 30, 68 ) ); button_numback->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); button_numback->setPaletteBackgroundPixmap( QPixmap::fromMimeSource( "back1.png" ) ); QFont button_numback_font( button_numback->font() ); button_numback_font.setFamily( "DejaVu LGC Sans Mono" ); button_numback_font.setPointSize( 18 ); button_numback_font.setBold( TRUE ); button_numback->setFont( button_numback_font );
button_num1 = new QPushButton( this, "button_num1" ); button_num1->setGeometry( QRect( 15, 115, 30, 30 ) ); button_num1->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num1_font( button_num1->font() ); button_num1_font.setFamily( "DejaVu LGC Sans Mono" ); button_num1_font.setPointSize( 12 ); button_num1_font.setBold( TRUE ); button_num1->setFont( button_num1_font );
button_num2 = new QPushButton( this, "button_num2" ); button_num2->setGeometry( QRect( 51, 115, 30, 30 ) ); button_num2->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num2_font( button_num2->font() ); button_num2_font.setFamily( "DejaVu LGC Sans Mono" ); button_num2_font.setPointSize( 12 ); button_num2_font.setBold( TRUE ); button_num2->setFont( button_num2_font );
button_num3 = new QPushButton( this, "button_num3" ); button_num3->setGeometry( QRect( 87, 115, 30, 30 ) ); |
trafficrobot_check.cpp |
button_num3->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num3_font( button_num3->font() ); button_num3_font.setFamily( "DejaVu LGC Sans Mono" ); button_num3_font.setPointSize( 12 ); button_num3_font.setBold( TRUE ); button_num3->setFont( button_num3_font );
button_num4 = new QPushButton( this, "button_num4" ); button_num4->setGeometry( QRect( 123, 115, 30, 30 ) ); button_num4->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num4_font( button_num4->font() ); button_num4_font.setFamily( "DejaVu LGC Sans Mono" ); button_num4_font.setPointSize( 12 ); button_num4_font.setBold( TRUE ); button_num4->setFont( button_num4_font );
button_num5 = new QPushButton( this, "button_num5" ); button_num5->setGeometry( QRect( 159, 115, 30, 30 ) ); button_num5->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_num5_font( button_num5->font() ); button_num5_font.setFamily( "DejaVu LGC Sans Mono" ); button_num5_font.setPointSize( 12 ); button_num5_font.setBold( TRUE ); button_num5->setFont( button_num5_font );
button_pwchange = new QPushButton( this, "button_pwchange" ); button_pwchange->setGeometry( QRect( 130, 200, 100, 30 ) ); button_pwchange->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_pwchange_font( button_pwchange->font() ); button_pwchange_font.setFamily( "DejaVu LGC Sans Mono" ); button_pwchange_font.setPointSize( 11 ); button_pwchange_font.setBold( TRUE ); button_pwchange->setFont( button_pwchange_font );
input_pw = new QLineEdit( this, "input_pw" ); input_pw->setGeometry( QRect( 120, 80, 110, 23 ) ); QFont input_pw_font( input_pw->font() ); input_pw_font.setFamily( "DejaVu LGC Sans Mono" ); input_pw_font.setPointSize( 11 ); input_pw_font.setBold( TRUE ); input_pw->setFont( input_pw_font ); input_pw->setEchoMode( QLineEdit::Normal ); input_pw->setAlignment( int( QLineEdit::AlignLeft ) );
|
trafficrobot_check.cpp |
button_Login = new QPushButton( this, "button_Login" ); button_Login->setGeometry( QRect( 10, 200, 100, 30 ) ); button_Login->setPaletteBackgroundColor( QColor( 234, 255, 250 ) ); QFont button_Login_font( button_Login->font() ); button_Login_font.setFamily( "DejaVu LGC Sans Mono" ); button_Login_font.setPointSize( 12 ); button_Login_font.setBold( TRUE ); button_Login->setFont( button_Login_font ); languageChange(); resize( QSize(240, 320).expandedTo(minimumSizeHint()) ); // 실행 Form의 크기 설정 clearWState( WState_Polished );
connect( button_goback1, SIGNAL( clicked() ), this, SLOT( close() ) ); // GoBack 버튼을 클릭(이벤트 발생)하면 현재창이 닫히도록 설정 connect( button_num1, SIGNAL( clicked() ), this, SLOT( PW_num1() ) ); // ‘1’버튼을 클릭(이벤트 발생)하면 LineEdit에 ‘1’이 입력되도록 설정 connect( button_num2, SIGNAL( clicked() ), this, SLOT( PW_num2() ) ); connect( button_num3, SIGNAL( clicked() ), this, SLOT( PW_num3() ) ); connect( button_num4, SIGNAL( clicked() ), this, SLOT( PW_num4() ) ); connect( button_num5, SIGNAL( clicked() ), this, SLOT( PW_num5() ) ); connect( button_num6, SIGNAL( clicked() ), this, SLOT( PW_num6() ) ); connect( button_num7, SIGNAL( clicked() ), this, SLOT( PW_num7() ) ); connect( button_num8, SIGNAL( clicked() ), this, SLOT( PW_num8() ) ); connect( button_num9, SIGNAL( clicked() ), this, SLOT( PW_num9() ) ); connect( button_num0, SIGNAL( clicked() ), this, SLOT( PW_num0() ) ); connect( button_numback, SIGNAL( clicked() ), this, SLOT( PW_backspace() ) ); // ‘←’버튼을 클릭하면 LineEdit에 입력된 Password를 한 글자 지우도록 설정 connect( button_Login, SIGNAL( clicked() ), this, SLOT( PW_Login() ) ); // Login 버튼을 클릭하면 파일에 저장된 암호와 사용자 입력 암호를 비교하도록 설정 connect( button_pwchange, SIGNAL( clicked() ), this, SLOT( PW_change() ) ); // P.W Change 버튼을 클릭하면 암호를 수정할 수 있도록 설정 }
TrafficRobot_Check::~TrafficRobot_Check() { }
void TrafficRobot_Check::languageChange() { setCaption( tr( "TrafficRobot_Check" ) ); // 현재 Form의 Caption 설정 Label_PW->setText( tr( "PASSWORD :" ) ); // Label에 표시될 내용 설정
button_num0->setText( tr( "0" ) ); // 버튼에 표시될 내용 설정 button_num1->setText( tr( "1" ) ); |
trafficrobot_check.cpp |
button_num2->setText( tr( "2" ) ); button_num3->setText( tr( "3" ) ); button_num4->setText( tr( "4" ) ); button_num5->setText( tr( "5" ) ); button_num6->setText( tr( "6" ) ); button_num7->setText( tr( "7" ) ); button_num8->setText( tr( "8" ) ); button_num9->setText( tr( "9" ) ); button_Login->setText( tr( "Login" ) ); button_goback1->setText( tr( "Go Back" ) ); button_pwchange->setText( tr( "P.W Change" ) ); }
void TrafficRobot_Check::PW_num1() { int str_pw; // 사용자로부터 입력받은 암호의 길이
input_pw->setEchoMode(QLineEdit::Password); // LineEdit의 속성 설정(암호이기 때문에 ‘*’로 표시되도록 설정)
str_pw = strlen(password_input); // 사용자가 입력한 암호의 길이를 str_pw에 저장
if(str_pw < 5) // 만약 사용자가 입력한 암호가 5자리 미만이라면(5자리만 입력되도록 제한) { password_input[str_pw] = '1'; // 암호를 저장할 배열에 ‘1’을 저장 } input_pw->setText(tr(password_input)); // LineEdit에 password_input에 저장된 배열 표시 }
void TrafficRobot_Check::PW_num2() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '2'; }
input_pw->setText(tr(password_input)); } |
trafficrobot_check.cpp |
void TrafficRobot_Check::PW_num3() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '3'; } input_pw->setText(tr(password_input));
}
void TrafficRobot_Check::PW_num4() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '4'; } input_pw->setText(tr(password_input)); }
void TrafficRobot_Check::PW_num5() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '5'; } input_pw->setText(tr(password_input));
} |
trafficrobot_check.cpp |
void TrafficRobot_Check::PW_num6() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '6'; } input_pw->setText(tr(password_input)); }
void TrafficRobot_Check::PW_num7() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '7'; } input_pw->setText(tr(password_input)); }
void TrafficRobot_Check::PW_num8() { int str_pw; input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '8'; } input_pw->setText(tr(password_input)); }
void TrafficRobot_Check::PW_num9() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '9'; } input_pw->setText(tr(password_input)); } |
trafficrobot_check.cpp |
void TrafficRobot_Check::PW_num0() { int str_pw;
input_pw->setEchoMode(QLineEdit::Password);
str_pw = strlen(password_input);
if(str_pw < 5) { password_input[str_pw] = '0'; } input_pw->setText(tr(password_input)); }
void TrafficRobot_Check::PW_backspace() { int str_pw; // 사용자로부터 입력받은 암호의 길이
str_pw = strlen(password_input); // 사용자가 입력한 암호의 길이를 str_pw에 저장
if(str_pw > 0 && str_pw < 6 ) // 사용자가 입력한 암호의 길이가 0~6이라면 { password_input[str_pw-1] = '\0'; // password_input배열의 str_pw-1번째(str_pw번째는 Null문자이기 때문)에 ‘\0’문자 입력 }
input_pw->setText(tr(password_input)); // LineEdit에 password_input에 저장된 배열 표시 }
void TrafficRobot_Check::PW_Login() // 로그인을 위한 함수 { FILE *file1; // File open을 위한 변수
char password[5] = {0, }; // 파일에 저장된(읽어 올) 암호(비밀번호) int len=0, pass_cmp_login=0; // len : 파일에서 읽어온 문자열의 길이를 저장하기 위한 변수 // pass_cmp_login : 파일에서 읽어온 암호와 사용자가 입력한 암호를 비교하고 그 결과를 저장할 변수
file1 = fopen("file.bin", "rb"); // 암호가 적힌 파일 열기
if(file1 != NULL) // 파일이 정상적으로 열어졌다면 { fseek(file1, 0L, SEEK_END); // 파일에서 커서를 제일 끝으로 이동 len = ftell(file1); // 파일의 길이를 len에 저장(ftell()은 파일의 길이를 구하는 함수)
fseek(file1, 0L, SEEK_SET); // 파일에서 커서를 제일 처음(앞)으로 이동 fread(password, 1, len, file1); // 파일에서 읽어온 문자열을 password에 저장
fclose(file1); // 파일 닫기 }
|
trafficrobot_check.cpp |
pass_cmp_login = strcmp(password_input, password); // 사용자가 입력한 암호와 파일에서 읽어온 암호 비교
if(pass_cmp_login == 0) // 만약 비교한 결과가 ‘0’이라면(일치한다면) { TrafficRobot_Menu menu(this); // 다음(메뉴)화면으로 이동
for(int i = 0; i < 5; i++) // 사용자가 입력한 암호를 저장하는 배열을 초기화 { password_input[i] = '\0'; } menu.exec();
close(); // 현재화면(CheckForm) 닫기 }
else // 사용자가 입력한 암호와 파일에서 읽어온 암호가 일치하지 않는다면 { input_pw->setEchoMode(QLineEdit::Normal); // LineEdit에 글자로 보이도록 설정 input_pw->setText("Login error"); // LineEdit에 “Login error" 출력
for(int i = 0; i < 5; i++) // 사용자가 입력한 암호를 저장하는 배열 초기화 { password_input[i] = '\0'; } } } void TrafficRobot_Check::PW_change() // 암호 변경을 위한 함수 { FILE *file1;
char password[5] = {0, }; // 파일에서 읽어올 암호를 저장할 배열 int len=0, pass_cmp_login=0; // len : 파일에서 읽어온 문자열의 길이를 저장하기 위한 변수 // pass_cmp_login : 파일에서 읽어온 암호와 사용자가 입력한 암호를 비교하고 그 결과를 저장할 변수
file1 = fopen("file.bin", "rb"); // 암호가 저장된 파일 열기
|
trafficrobot_check.cpp |
if(file1 != NULL) // 파일이 정상적으로 열어졌다면 { fseek(file1, 0L, SEEK_END); // 파일에서 커서를 제일 끝으로 이동 len = ftell(file1); // 파일의 길이를 len에 저장
fseek(file1, 0L, SEEK_SET); // 파일의 커서를 제일 처음으로 디오 fread(password, 1, len, file1); // 파일에서 읽어온 문자열을 password에 저장
fclose(file1); // 파일 닫기 }
pass_cmp_login = strcmp(password_input, password); // 사용자가 입력한 암호와 파일에서 읽어온 암호를 비교
if(pass_cmp_login == 0) // 비교한 결과가 ‘0’이라면(일치한다면) { TrafficRobot_PWchange pwchange(this); // 다음(암호변경)으로 이동
for(int i = 0; i < 5; i++) // 사용자가 입력한 암호를 저장한 배열 초기화 { password_input[i] = '\0'; } pwchange.exec(); close(); // 현재창(PWchange)닫기 }
else // 사용자가 입력한 암호와 파일에서 읽어온 암호가 일치하지 않는다면 { input_pw->setEchoMode(QLineEdit::Normal); // LineEdit에 글자로 보이도록 설정 input_pw->setText("Login error"); // LineEdit에 “Login error" 출력
for(int i = 0; i < 5; i++) // 사용자가 입력한 암호가 저장된 배열 초기화 { password_input[i] = '\0'; } } }
|
'My Project > 교통정리로봇' 카테고리의 다른 글
[교통정리로봇] 프로젝트 문서 3. 설계(두번째) (0) | 2009.04.29 |
---|---|
[교통정리로봇] 프로젝트 문서 3. 설계(세번째) (0) | 2009.04.29 |
[교통정리로봇] 프로젝트 문서 4. 구현(두번째) (0) | 2009.04.29 |
[교통정리로봇] 프로젝트 문서 4. 구현(세번째) (0) | 2009.04.29 |
[교통정리로봇] 프로젝트 문서 5. 실행 & 8. 참고문헌 (0) | 2009.04.29 |