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

Slides:



Advertisements
Similar presentations
CH5 디버그를 해보자 디버그 디버거 : 실행중인 응용 프로그램을 지정한 장소에서 정지하고, 그 시 점에서 변수, 메모리, 콜 스택의 내용을 참조하는것이 가능 Build -> Start Debug -> Go.
Advertisements

Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.
Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
아름다운 이들의 행복한 길음안나의 집.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
C++ Espresso 제1장 기초 사항.
Lecture 2 MFC and Application Frameworks
Visual C++ Programming Dialog Box
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Visual C++ Programming Document/View Architecture 3
Network Socket Programming
제 1 장 영상처리 기초.
다이얼로그 박스와 컨트롤 컴퓨터 계측 및 실습.
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
윤 홍 란 MFC 기초 윤 홍 란
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
8. 객체와 클래스 (기본).
Internet Computing KUT Youn-Hee Han
범용 소켓 클래스 만들기.
Traceroute 기능 분석 및 프로그래밍
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
Microsoft Visual C++ 제 1편 입문편 5장. 샘플 프로그램의 사용자화
MFC Application Frameworks (AFX)
제 14 장 파티클 시스템.
Visual C++ Programming Output and File
Data structures 01.2: C++ classes 동의대학교 멀티미디어공학과 이광의교수.
Visual C++ Programming Output and File
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
DataScience Lab. 박사과정 김희찬 (월)
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수.
스택(Stack) 김진수
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
12 검색.
제 3 장 영역 기반 처리.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Chapter 3 클래스. 최호성.
목차 INDEX 1. 회원가입 및 로그인 2. 업체정보 3. 제조검사 신청 4. 인보이스 5. 검사진행현황(현장검사 신청)
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
[CPA340] Algorithms and Practice Youn-Hee Han
ODBC &DAO 안명상.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
Lua script cpp서 사용하기 Lua 버전
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
3장,4장 발표 서정우.
제 7장 이벤트.
C# 10장. 참조형.
6장 클래스(상속).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
2015년 2학년 1반.
04장 ㅎㅎ 화소점 처리 화소 점 처리의 개념 디지털 영상의 산술연산과 논리연산 디지털 영상의 다양한 화소 점 처리 기법
6월 1주 주간메뉴표 NEW 엄마손 조식 쉐프 삼촌 중식 참새 방앗간 석식 ◎원산지 안내 : 쌀(국내산)
제안 제도 운영방안.
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
컨트롤, 프로퍼티, 이벤트.
책을 읽읍시다  탈향 진지하게 설명해드림 1303 김소희 1309박지호 1315이지수.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
C++ 언어의 특징
2016년 제1차 운영위원회 평택시건강가정 ∙다문화가족지원센터
제 4장 Visual C++ COM 컴파일러.
Presentation transcript:

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

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

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

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

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

프로그램 구성 프로그램 코딩 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 프로그래밍

프로그램 구성 Windows 프로그래밍 추가 버튼 void CAddressView::Updateaddress(BOOL bool) { if(bool==TRUE) { // address의 값을 dialog의 값으로 바꾼다. address.strBirthday=m_strBirthday; address.strEmail=m_strEmail; 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_strEmail=address.strEmail; 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 프로그래밍

프로그램 구성 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_strEmail = _T(""); ….. UpdateData(FALSE); } Windows 프로그래밍

프로그램 구성 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 프로그래밍

프로그램 구성 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 프로그래밍

프로그램 구성 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 프로그래밍