Presentation is loading. Please wait.

Presentation is loading. Please wait.

프로젝트 보고서 학과 : 임학과 학번 : 9541916 성명 : 조성환 Windows 프로그래밍.

Similar presentations


Presentation on theme: "프로젝트 보고서 학과 : 임학과 학번 : 9541916 성명 : 조성환 Windows 프로그래밍."— Presentation transcript:

1 프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍

2 프로그램 개요 개 요 SDI를 이용한 데이터 베이스 프로그램으로 우리 생활에 쉽게 접할수 있는 주소록을 데이터 베이스화하는 프로그램이다. 주소록을 데이터베이스화 함으로써 손쉽게 연락처나 개인정보등을 쉽게 열람할 수 있다. 특징 및 강조점 일반적인 주소 및 전화번호, 생일, 기타 정보를 입력하는 프로그램이다. 그리고 데이터를 입력하면 리스트박스에 이름이 추가되어 손쉽게 데이터를 검색할수 있다. 기법적인 면에서는 이번 강의에서 배운 것인Serialize를 사용하였다. 개발자 소개 현재 전산과 복수전공을 하고 있으며 임학과 4학년에 재학하고 있다. Windows 프로그래밍

3 프로그램 사용법 프로그램 사용법 #1 데이터추가시 이름이 리스트 박스에 추가된다. 데이터를 입력하는 버튼
데이터를 삭제하는 버튼 데이터를 수정하는 버튼 Windows 프로그래밍

4 프로그램 사용법 프로그램 사용법 #2 이름에 해당하는 변수가 없을 경우 메시지를 보낸다. 입력변수들을 모두 초기화 시킨다.
Windows 프로그래밍

5 프로그램 구성 프로그램 클래스 구조 Address 클래스 CAboutDlg CAddressApp CAddressDoc
구조체를 배열로 저장 CAddressView Cdata 파일 입출력 관련과 구조체를 배열로 정의 CMainFrame ADD 각 변수들을 구조체로 저장 Windows 프로그래밍

6 프로그램 구성 프로그램 코딩 CAdressView 부분 Windows 프로그래밍 셀의 위치가 바뀌면 dialog의 변수 바꾸기
void CAddressView::OnInitialUpdate() { CFormView::OnInitialUpdate(); CAddressDoc* ptrDoc = (CAddressDoc*)GetDocument(); int Index = ptrDoc->GetDataNumber(); int i; if(Index > 0) //data있으면 { //list box에 화일에서 불러온 이름넣기 for(i=0;i<Index;i++) address = ptrDoc->GetData(i)->GetAddress(); m_ListName.AddString(address.strName); }; //셀의 위치를 첫번째로 m_ListName.SetCurSel(0); OnSelchangeListName(); } } 셀의 위치가 바뀌면 dialog의 변수 바꾸기 void CAddressView::OnSelchangeListName() { CAddressDoc* ptrDoc = (CAddressDoc *)GetDocument(); //데이타 얻기 address = ptrDoc->GetData(m_ListName.GetCurSel())->GetAddress(); //dailog의 변수들을 얻은 데이타의 값으로 바꾼다. Updateaddress(FALSE); UpdateData(FALSE); } Windows 프로그래밍

7 프로그램 구성 Windows 프로그래밍 추가 버튼
void CAddressView::Updateaddress(BOOL bool) { if(bool==TRUE) { // address의 값을 dialog의 값으로 바꾼다. address.strBirthday=m_strBirthday; address.str =m_str ; address.strEtc=m_strEtc; address.strHomeAddress=m_strHomeAddress; address.strHomePhone=m_strHomePhone; address.strHomeZip=m_strHomeZip; address.strName=m_strName; address.strPager=m_strPager; } else { //dialog의 값을 address의 값으로 바꾼다. m_strBirthday=address.strBirthday; m_str =address.str ; m_strEtc=address.strEtc; m_strHomeAddress=address.strHomeAddress; m_strHomePhone=address.strHomePhone; m_strHomeZip=address.strHomeZip; m_strName=address.strName; m_strPager=address.strPager; }; 추가 버튼 //데이타를 배열에 추가하고 list box 에도 추가 void CAddressView::OnButtonAdd() { CAddressDoc* ptrDoc = (CAddressDoc *)GetDocument(); int position; //address 구조체의 값을 dialog의 변수값으로 바꾼다. UpdateData(TRUE); Updateaddress(TRUE); if (m_strName == _T("")) MessageBox("성명란에 입력하시오!!"); else { m_ListName.AddString(m_strName); //listbox에 이름 추가 position = m_ListName.SelectString(-1,m_strName); //방금 추가된것의 위치 리턴 ptrDoc->AddData(position, address); // 배열에 삽입 } Windows 프로그래밍

8 프로그램 구성 Windows 프로그래밍 수정 버튼 삭제 버튼 //데이타 수정하고 list box도 수정
void CAddressView::OnButtonModify() { CAddressDoc* ptrDoc = (CAddressDoc *)GetDocument(); int CurSel = m_ListName.GetCurSel(); //데이타가 없거나 셀이 지정되지 않았으면 실행 안함 if(m_ListName.GetCount() <= 0 || CurSel < 0) return; //address 구조체의 값을 dialog의 변수값으로 바꾼다. UpdateData(TRUE); Updateaddress(TRUE); //원래의 값을 지운다. m_ListName.DeleteString(CurSel); ptrDoc->DeleteData(CurSel); //현재의 값으로 바꾼다. m_ListName.AddString(m_strName); //listbox에 이름 추가 CurSel = m_ListName.SelectString(-1,m_strName); //방금 추가된것의 위치 리턴 ptrDoc->AddData(CurSel, address); //배열에 삽입 } 삭제 버튼 //데이타를 지운다. void CAddressView::OnButtonDelete() { CAddressDoc* ptrDoc = (CAddressDoc *)GetDocument(); int CurSel = m_ListName.GetCurSel(); // 데이타 없으면 실행 안함 if(m_ListName.GetCount() <= 0 || CurSel < 0) return; //지운다. ptrDoc->DeleteData(CurSel); m_ListName.DeleteString(CurSel); if(m_ListName.GetCount() > 0) { // (지워 졌으니까)셀의 위치 새로 지정 if(CurSel < m_ListName.GetCount()) m_ListName.SetCurSel(CurSel); else m_ListName.SetCurSel(CurSel-1); } { // 데이타 없으면 dialog의 변수 초기화 m_strBirthday = _T(""); m_str = _T(""); ….. UpdateData(FALSE); } Windows 프로그래밍

9 프로그램 구성 AddressDoc 부분 ADD 부분 Cdata 부분 Windows 프로그래밍
class CAddressDoc : public CDocument { protected: // 배열 만드는 것 CTypedPtrArray <CObArray , CData*>m_DataArray; public: void AddData(int position, ADD address); CData* GetData(int Index); void DeleteData(int Index); void ModifyData(int Index, ADD address); int GetDataNumber(); ADD 부분 // 자료 구조체 struct ADD{ CString strName; …… }; Cdata 부분 //데이타 관리 클래스 class CData : public CObject { protected: //배열에 저장될 구조체 변수 ADD Address; //화일 입출력 관련 CData() {} DECLARE_SERIAL(CData); public: //Address값 변경 CData(ADD address) Address = address; }; ADD GetAddress(); // 화일 입출력 관련 virtual void Serialize(CArchive &ar); Windows 프로그래밍

10 프로그램 구성 Windows 프로그래밍 Serialize
파일을 저장하거나 오픈할 경우 최후에 데이터가 저장되는 부분은 serialize 함수에 의해서 설정된다. Seralize 함수는 인자로 Carchive 클래스의 변수인 ar가 넘오온다. 함수내부에서는 Cfile 클래스를 이용하여 파일을 오픈합니다. 이렇게 파일을 오픈한 다음 파일과 메모리간에 데이터 전송통로를 만들어 준다. 이 전송통로가 Carchive 이다. //(프로그램 시작할 때) 화일을 열어서 배열에 저장 CAddressDoc::CAddressDoc() { CFile f; if(f.Open("FriendAds.dat", CFile::modeRead) ==FALSE) return; CArchive ar(&f, CArchive::load); Serialize(ar); ar.Close(); f.Close(); } //(프로그램 끝날 때) 배열의 데이타를 화일로 저장 CAddressDoc::~CAddressDoc() f.Open("FriendAds.dat", CFile::modeCreate | CFile::modeWrite); CArchive ar(&f, CArchive::store); //화일 처리 관련 void CAddressDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) m_DataArray.Serialize(ar); } else // 배열에 데이타 추가하는 함수 void CAddressDoc::AddData(int position, ADD address) CData* PData = new CData(address); m_DataArray.InsertAt(position, PData); Windows 프로그래밍

11 프로그램 구성 Windows 프로그래밍 // 배열에서 주어진 Index 위치의 값을 가진 클래스의 포인터를 리턴하는 함수
CData* CAddressDoc::GetData(int Index) { if(Index<0 || Index > m_DataArray.GetUpperBound()) return 0; return m_DataArray.GetAt(Index); } // 배열에서 주어진 Index 위치의 값을 지우는 함수 void CAddressDoc::DeleteData(int Index) m_DataArray.RemoveAt(Index); // 배열의 Index 위치의 값을 수정하는 함수(현재 사용 안함) void CAddressDoc::ModifyData(int Index, ADD address) CData* PData = new CData(address); m_DataArray.SetAt(Index,PData); // 배열의 갯수 리턴 int CAddressDoc::GetDataNumber() return m_DataArray.GetSize(); //화일 처리 관련 IMPLEMENT_SERIAL(CData, CObject,1); //Address 구조체를 리턴 ADD CData::GetAddress() return Address;} //화일처리 관련 void CData::Serialize(CArchive& ar) { if(ar.IsStoring()) { //저장 ar << Address.strName ……... } else { //로드 >> Address.strName ………. }; Windows 프로그래밍


Download ppt "프로젝트 보고서 학과 : 임학과 학번 : 9541916 성명 : 조성환 Windows 프로그래밍."

Similar presentations


Ads by Google