본문 바로가기

C#/C#, mysql POS 만들기

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

이번 시간에는 재고현황 창에서 DB의 내용을 불러와서 그리드 뷰에 나타내어 DB기능들을 구현하고,

물품이 판매될 때, 재고에서 수량이 감소되는 것을 반영하는 방법을 배워보겠습니다.

새 폼을 만들고 재고 현황 창 목업을 참고해서 윈폼 창을 디자인합니다. 

 

 

상품 판매 재고 현황 버튼 기능을 구현합니다.

 

        //재고 현황 창 열기
        private void button5_Click(object sender, EventArgs e)
        {
            Form3 dlg = new Form3();
            dlg.ShowDialog();
        }

 

이제 재고 현황을 확인할 수 있습니다.

재고 현황창에서도 뒤로 가기 버튼 기능을 구현합니다.

 

        //뒤로가기
        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

 

기본적인 기능을 구현했으니 재고 DB를 만들겠습니다.

재고는 물건 각각의 개수와 가격 등의 정보를 가져 판매내역과 별개로 테이블이 필요합니다.

MySQL을 실행시켜 pos_dataset에 item_tb 테이블을 추가합니다.

 

 

물건의 고유번호를 기본키로 설정합니다.

나머지 항목들은 판매내역 DB와 혼선을 줄이기 위해 item의 i를 접두어로 하겠습니다.

판매 내역에서 있지 않았던 재고 추가 버튼을 구현하겠습니다.

나머지 기본적인 구성이 저번 시간의 판매 내역과 비슷하니 여러분이 직접 기능을 구현해보시면 됩니다.

(단, 저와 사용하는 DB를 설정한 이름이 다르니 이전 시간 코드를 그대로 사용하면 오류가 발생할 수 있어 꼭 수정하여 실행하셔야 됩니다.)

 

        //재고추가
        private void button3_Click(object sender, EventArgs e)
        {
            string constring = "Server=localhost;Port=3306;Database=pos_dataset;Uid=root;Pwd=*****";
            string Query = "INSERT INTO pos_dataset.item_tb (i_name,i_price,i_count) value ('" + this.textBox3.Text + "','" + this.textBox4.Text + "','" + this.textBox5.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())
                {

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("항목을 정확히 입력해주세요");
                MessageBox.Show(ex.Message);
            }

            LoadData();
        }

 

각각의 텍스트 박스 안의 값을 테이블에서 해당되는 곳에 정보를 삽입합니다.

 

 

 

 

물품이 추가 된 것을 확인할 수 있습니다.

이제 물품이 판매 될 때마다 DB에 반영 되게 만들어 보겠습니다.

판매 내역 코드창에서 계산하기 기능을 다음과 같이 수정합니다.

 

        //계산하기 기능
        private void button2_Click(object sender, EventArgs e)
        {

            //DB연결 후 데이터 전송
            using (MySqlConnection conn = new MySqlConnection("Server=localhost;Port=3306;Database=pos_dataset;Uid=root;Pwd=****"))
            {
                conn.Open();
                //각 행의 정보를 반복문으로 불러온다
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    String Name = dataGridView1.Rows[i].Cells[0].Value.ToString();
                    String Price = dataGridView1.Rows[i].Cells[1].Value.ToString();
                    String Count = dataGridView1.Rows[i].Cells[2].Value.ToString();
                    String Total = dataGridView1.Rows[i].Cells[3].Value.ToString();

                    //INSERT INTO 쿼리문으로 받아온 정보를 DB에 전송한다. 
                    string sql = string.Format("INSERT INTO sales_tb(name,price,count,total,c_num) VALUES  ('{0}',{1},{2},{3},{4})", @Name, @Price, @Count, @Total, @i);


                    //INSERT INTO 쿼리문으로 이름으로 찾고 i_count의 수량에서 판매된 개수만큼 빼준다
                    string sql_count = string.Format("update item_tb set i_count = i_count - {0} where s_name = '{1}'", @Count, @Name);

                    //DB전송을 진행하고 실패시 에러메세지 출력
                    try
                    {
                        MySqlCommand command = new MySqlCommand(sql, conn);
                        command.ExecuteNonQuery();

                        MySqlCommand c_command = new MySqlCommand(sql_count, conn);
                        c_command.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }

 

실행결과입니다.

 

 

 

 

 

MySQL 테이블에도 정상적으로 반영된 것을 확인할 수 있습니다.

이번 시간에는 재고현황 창에서 DB의 내용을 불러와서 그리드 뷰에 나타내어 DB기능들을 구현하고,

물품이 판매될 때, 재고에서 수량이 감소되는 것을 반영하는 방법을 배워보았습니다.

추가적으로 코드를 다듬거나 개선한 사항이 있으면 내용을 추가하겠습니다.