C#/C#, mysql POS 만들기

C# WinForms / mysql으로 포스기 만들기 (7)

펭킹 2020. 11. 17. 21:28

이번 시간에는 로그인 폼을 만들고 로그인한 권한에 따라 버튼에 접근하는 권한을 제어해보겠습니다.

이번 내용부터는 추가적인 사항이라 간단하게 정리만 넘어가겠습니다.

 

로그인 폼

 

계정 생성 폼

다음과 같이 로그인폼을 제작합니다.

직책은 manager와 employee로 구분하여 권한을 다르게 주겠습니다.

그리고 회원 테이블을 생성합니다.

 

 

로그인은 아이디, 비밀번호를 입력하고, 직책을 선택하여 정보가 DB에 존재할 때 로그인하도록 하였습니다. 

    public partial class Login : Form
    {

        //구분 값을 Form1으로 전송을 위한 chk
        public static string chk;

        public Login()
        {
            InitializeComponent();
           
        }


        private void Login_Load(object sender, EventArgs e)
        {
             
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string myConnection = "Server=localhost;Port=3306;Database=pos_data;Uid=root;Pwd=****";
                MySqlConnection myConn = new MySqlConnection(myConnection);
                //각각의 항목을 db와 대조
                MySqlCommand selectCommand = new MySqlCommand("select * from pos_data.pos_login_tb where id='" + this.textBox1.Text + "' and password='" + this.textBox2.Text + "' and position='" + this.comboBox1.Text + "'", myConn);
                MySqlDataReader myReader;

                myConn.Open();
                myReader = selectCommand.ExecuteReader();

                int count = 0;

                while (myReader.Read())
                {
                    count = count + 1;
                }
	
                if (count == 1)
                {
                    //포지션 값을 0,1 로 나타내어 매니져 여부 판단
                    if (comboBox1.Text == "manager")
                    {
                        chk = "0";
                    }
                    else
                    {
                        chk = "1";
                    }

                    MessageBox.Show("로그인 되었습니다.");
                    this.Visible = false;           
                    Form1 showForm1 = new Form1();
                    showForm1.ShowDialog();

                }

                else if (count > 1)
                {
                    MessageBox.Show("중복된 유저가 존재합니다.");
                }
                else
                {
                    MessageBox.Show("아이디, 비밀번호나 직책이 일치하지 않습니다.");
                }
                myConn.Close();
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            //textBox3.Text = chk;

        }
		
        //프로그램 종료
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
            Application.Exit();
        }

        //계정 생성
        private void button3_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            Account dlg = new Account();
            dlg.ShowDialog();
        }
    }

 

다음과 같이 로그인 폼을 구성하고, 계정 생성의 경우 다음과 같이 구성합니다.

 

    public partial class Account : Form
    {
        public Account()
        {
            InitializeComponent();
        }

        private void Account_Load(object sender, EventArgs e)
        {

        }

        //계정생성
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" || comboBox1.Text == "")
            {
                MessageBox.Show("항목을 정확히 입력해주세요");
                textBox1.Clear();
                textBox2.Clear();
            }
            else
            {
                string constring = "Server=localhost;Port=3306;Database=pos_data;Uid=root;Pwd=*****";
                string Query = "INSERT INTO pos_data.pos_login_tb (id,password,name,position) value ('" + this.textBox1.Text + "','" + this.textBox2.Text + "','" + this.textBox3.Text + "','" + this.comboBox1.Text + "')";
                MySqlConnection conDataBase = new MySqlConnection(constring);
                MySqlCommand cmdDatabase = new MySqlCommand(Query, conDataBase);
                MySqlDataReader myReader;

                try
                {
                    conDataBase.Open();
                    myReader = cmdDatabase.ExecuteReader();
                    MessageBox.Show("계정 생성 완료");

                    while (myReader.Read())
                    {

                    }
                    this.Visible = false;
                    Login showForm1 = new Login();
                    showForm1.ShowDialog();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("항목을 정확히 입력해주세요");
                    MessageBox.Show(ex.Message);
                }
            }
        }
        //취소
        private void button2_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            Login showForm1 = new Login();
            showForm1.ShowDialog();
        }
    }

 

물품 추가와 유사합니다. 

이제 상품 판매(Form1)로 로그인 정보를 전송하고, 전송한 데이터 중 매니저만

재고현황과 직원목록 버튼이 보이게 하겠습니다.

 

 

그리드 뷰 위에 빈칸을 두어 매니저와 사원을 구분해보겠습니다.

 

        public Form1()
        {
            InitializeComponent();
            
            .
            .
            .

            //Login 폼에서 public static string chk을 설정하였고,
            //0을 메니저로 설정함
            if(Login.chk == "0")
            {
                textBox4.Text = "매니저님 반갑습니다.";
            }
            else 
            {
                textBox4.Text = "사원님 반갑습니다.";
            }
           

        }

 

다음으로 매니저만 버튼이 보이게 만들겠습니다.

 

        public Form1()
        {
            InitializeComponent();
            
            .
            .
            .

            //Login 폼에서 public static string chk을 설정하였고,
            //0을 메니져로 설정함
            if(Login.chk == "0")
            {
                textBox4.Text = "매니저님 반갑습니다.";
                button5.Visible = true;
                button6.Visible = true;
            }
            else 
            {
                textBox4.Text = "사원님 반갑습니다.";
                button5.Visible = false;
                button6.Visible = false;
            }
           

        }

 

로그인 계정에 따라 버튼 유무를 확인할 수 있습니다.