본문 바로가기

Programming

간단한 데이터 입력 및 텍스트 파일에 저장하기 : 쉽고 재미있는 C# Programming 의 기본

 

윈폼을 사용하여 간단한 입력 및 텍스트 파일에 저장하는 기본적인 프로그램을 만들어 보겠습니다.

윈폼 프로그래밍을 할 때 제공되는 여러 컨트롤들을 적절하게 사용할 수 있어야 합니다.

윈폼에서 제공하는 기본 컨트롤들 외에 다양한 외부 컨트롤들이 많이 나와 있지만, 표준 컨트롤들 제대로 익히는 게 중요합니다.

 

간단한 입력화면으로부터 데이터를 가져와서 지정된 위치의 텍스트파일에 한 줄씩 저장하는 프로그램을 작성하도록 하겠습니다. 이전 포스팅에서 소개한 텍스트파일에 적합한 StreamWriter / StreamReader를 이용하겠습니다.

Label, ComboBox, TextBox, DateTimePicker,Button 을 이용해서 간단하게 화면을 디자인합니다.

결과는 지정된 위치에 한줄씩 콤마로 구분하여 저장합니다.

 

Visual Studio 2022 를 실행해서 새 프로젝트 만들기를 클릭합니다.

 

Windows Forms 앱(.Net Framework)을 클릭합니다.

 

원하는 모양을 컨트롤들을 배치하고, 각 컨트롤의 속성창에 Name과 Text, Item 들을 입력합니다.

변수들 이름짓는게 가장 힘든 일이지요 ㅎㅎ 위 표는 간단한 C# 컨트롤 이름명명법입니다.

 

파일 쓰기

 

    public partial class Contact : Form
    {
        public Contact()
        {
            InitializeComponent();
        }
		
        //저장버튼
        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                string sort = GetSelectedSort();
                
                //combo박스가 선택되지 않으면 메시지 출력
                if (string.IsNullOrEmpty(sort))
                {
                    MessageBox.Show("목록을 구분해 주세요.");
                    return;
                }
				// 각 데이터값을 문자열에 저장
                string name = txtName.Text;
                string birth = dtBirth.Value.ToShortDateString();
                string phoneNumber = GetPhoneNumber();
                
                //combo박스가 선택되지 않으면 메시지 출력
                if (string.IsNullOrEmpty(phoneNumber))
                {
                    MessageBox.Show("올바른 휴대폰 번호를 입력하세요");
                    return;
                }

                string address = txtAddress.Text;
                
                // 각 필드를 콤마로 구분
                string data = $"{sort},{name},{birth},{phoneNumber},{address}";
				
                // StreamWriter를 이용해서 지정영역의 텍스트파일에 한줄씩 추가
                using (StreamWriter sw = new StreamWriter(@"D:\contact.txt", true))
                {
                    sw.WriteLine(data);
                }
                clearForm();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"데이터 저장 중 오류가 발생했습니다.({ex.Message})");
            }
        }
		
        //지우기버튼
        private void btnClear_Click(object sender, EventArgs e)
        {
            clearForm();
        }
		
        //종료버튼
        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private string GetSelectedSort()
        {
            if (cboSort.SelectedIndex >= 0)
            {
                return cboSort.Items[cboSort.SelectedIndex].ToString();
            }
            return null;
        }

        private string GetPhoneNumber()
        {
            if (cboPhone.SelectedIndex >= 0)
            {
                string phone1 = cboPhone.Items[cboPhone.SelectedIndex].ToString();
                string phone2 = txtPhone.Text;

                return phone1 + "-" + phone2;
            }
            return null;
        }
        
        private void clearForm()
        {
            cboSort.SelectedIndex = -1;
            txtName.Text = string.Empty;
            dtBirth.Value = DateTime.Now;
            cboPhone.SelectedIndex = -1;
            txtPhone.Text = string.Empty;
            txtAddress.Text = string.Empty;
        }
    }

 

DataGridView와 버튼을 추가하여 읽기 폼을 디자인합니다.

 

파일 읽기

 

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


	// DataGridView에 컬럼명을 지정
    private void ReadData_Load(object sender, EventArgs e)
    {
        dataGridView1.Columns.Add("Solt", "구분");
        dataGridView1.Columns.Add("Name","성명");
        dataGridView1.Columns.Add("Birth", "생년월일");
        dataGridView1.Columns.Add("Phone", "연락처");
        dataGridView1.Columns.Add("Addr", "주소");

    }
	
    //파일읽기버튼을 클릭했을 때 줄단위로 파일을 읽어서 표시
    private void btnRead_Click(object sender, EventArgs e)
    {
        try
        {
            using (StreamReader sr = new StreamReader(@"D:\contact.txt"))
            {
                while (!sr.EndOfStream)
                {
                    string line = sr.ReadLine();

                    string[] datas = line.Split(',');

                    dataGridView1.Rows.Add(datas[0], datas[1], datas[2], datas[3], datas[4]);
                }
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show($"파일읽기오류.({ex.Message})");
        }
    }

	//종료버튼
    private void btnExit_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }
}

 

이런 간단한 프로그램들을 직접 연습해 가면서 기능을 하나씩 추가해 보는 것도 실력향상에 도움이 됩니다.