Разработка списка рабочих, имеющих брак при изготовлении деталей

Автор работы: Пользователь скрыл имя, 03 Сентября 2014 в 19:41, курсовая работа

Краткое описание

Целью курсового проекта является закрепление и обобщение знаний, полученных при изучении теоретического курса, приобретение практических навыков по программированию задач на объектно - ориентированном языке Visual C++ в среде разработки Visual Studio 2005 по дисциплине «Технологии и методы программирования».

Прикрепленные файлы: 1 файл

MINOBRNAUKI_ROSSII.docx

— 79.74 Кб (Скачать документ)

}

catch (CFileException *e)

{

char pMsg[255];

if(e->GetErrorMessage(pMsg,255))

AfxMessageBox(pMsg);

}

file.Close();

return;

}

void CDetail::Sozdanie()

{

int nom;

nom = dob_ind(num);

ZapisZap(nom);

return;

}

void CDetail::Init()

{

int pr = 0;

int i = 0;

CFile file(DetailFile, CFile::modeRead|CFile::modeCreate|

CFile::modeNoTruncate);

DWORD nom;

nom = file.GetLength();

nom = nom / 40;

file.Close();

for(i=0;i<int(nom);i++)

{

ChtenieZap(i);

init_ind(i,num);

if (num != "")

{

fact_kol++;

pr = 1;

}

}

init_kol(nom);

return;

}

void CDetail::Zamena(int nomer)

{

ZapisZap(nomer);

cor_ind(nomer,num);

}

void CDetail::Udalenie(int nomer)

{

num = "";

ZapisZap(nomer);

cor_ind(nomer,num);

}

 

Файл кодов Detail.h

#ifndef detail_hpp

#define detail_hpp

#include "Index.h"

class CDetail : public CIndex

{

public:

CString fio;

CString num;

CString code;

CString count;

public:

void Udalenie(int nomer);

void Zamena(int nomer);

void Init();

void Sozdanie();

void ChtenieZap(int nomer);

void ZapisZap(int nomer);

CDetail();

virtual ~CDetail();

};

#endif

 

Файл кодов DetailAddDlg.cpp

// DetailAddDlg.cpp: файл реализации

//

#include "stdafx.h"

#include "1.h"

#include "DetailAddDlg.h"

#include "afxdialogex.h"

// диалоговое окно CDetailAddDlg

IMPLEMENT_DYNAMIC(CDetailAddDlg, CDialog)

CDetailAddDlg::CDetailAddDlg(CWnd* pParent /*=NULL*/)

: CDialog(CDetailAddDlg::IDD, pParent)

, m_strCode(_T(""))

, m_strCount(_T(""))

, m_strFio(_T(""))

, m_strTabnum(_T(""))

{

}

CDetailAddDlg::~CDetailAddDlg()

{

}

void CDetailAddDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX, IDC_CODE, m_strCode);

DDX_Text(pDX, IDC_COUNT, m_strCount);

DDX_Text(pDX, IDC_FIO, m_strFio);

DDX_Text(pDX, IDC_TABNUM, m_strTabnum);

}

BEGIN_MESSAGE_MAP(CDetailAddDlg, CDialog)

ON_BN_CLICKED(IDOK, &CDetailAddDlg::OnBnClickedOk)

END_MESSAGE_MAP()

// обработчики сообщений CDetailAddDlg

void CDetailAddDlg::OnBnClickedOk()

{

if (CheckInput())

{

Input(base);//ввод  с клавиатуры в текст. поля  диалог. окна

base.Sozdanie();//запись  в файл и коррект. инд. массива

ClearForm();//очистка  формы документа

}

}

void CDetailAddDlg::Input(CDetail &base)//ввод  с клавиатуры

{

UpdateData(TRUE);//заносит  в перем. знач. текст. полей

base.num = m_strTabnum;

base.code = m_strCode;

base.count = m_strCount;

base.fio = m_strFio;

}

void CDetailAddDlg::ClearForm()//очистка формы документа

{

m_strTabnum = "";

m_strCode = "";

m_strCount = "";

m_strFio = "";

UpdateData(FALSE);

}

BOOL CDetailAddDlg::CheckInput()//проверка ввода

{

UpdateData(TRUE);

if(m_strTabnum=="")

{

MessageBox("Введите Таб. номер", "Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

if(m_strFio=="")

{

MessageBox("Введите ФИО", "Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

if (m_strCode=="")

{

MessageBox("Введите код детали","Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

if (m_strCount=="")

{

MessageBox("Введите количество деталей","Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

return TRUE;

}

BOOL CDetailAddDlg::OnInitDialog()

{

CDialog::OnInitDialog();

 

// TODO:  Добавить  дополнительную инициализацию

 

return TRUE;  // return TRUE unless you set the focus to a control

// Исключение: страница свойств OCX должна возвращать  значение FALSE

}

 

Файл кодов DetailAddDlg.h

#pragma once

#include "Detail.h"

// диалоговое окно CDetailAddDlg

class CDetailAddDlg : public CDialog

{

DECLARE_DYNAMIC(CDetailAddDlg)

 

public:

CDetailAddDlg(CWnd* pParent = NULL);   // стандартный конструктор

virtual ~CDetailAddDlg();

CDetail base;

BOOL CheckInput();//проверка ввода

void ClearForm();//очистка формы документа

void Input(CDetail &base);//ввод данных с клавиатуры

// Данные диалогового окна

enum { IDD = IDD_DETAILADDDLG };

protected:

virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV

DECLARE_MESSAGE_MAP()

public:

CString m_strCode;

CString m_strCount;

CString m_strFio;

CString m_strTabnum;

afx_msg void OnBnClickedOk();

virtual BOOL OnInitDialog();

};

 

Файл кодов DetailSearchDlg.cpp

// DetailSearchDlg.cpp: файл реализации

//

#include "stdafx.h"

#include "1.h"

#include "DetailSearchDlg.h"

#include "afxdialogex.h"

extern int ActMode;

//диалоговое окно CDetailSearchDlg

IMPLEMENT_DYNAMIC(CDetailSearchDlg, CDialog)

CDetailSearchDlg::CDetailSearchDlg(CWnd* pParent /*=NULL*/)

: CDialog(CDetailSearchDlg::IDD, pParent)

, m_strCode(_T(""))

, m_strCount(_T(""))

, m_strFio(_T(""))

, m_strTabnum(_T(""))

, m_strTabnsearch(_T(""))

{

}

CDetailSearchDlg::~CDetailSearchDlg()

{

}

 

void CDetailSearchDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX, IDC_CODE, m_strCode);

DDX_Text(pDX, IDC_COUNT, m_strCount);

DDX_Text(pDX, IDC_FIO, m_strFio);

DDX_Text(pDX, IDC_TABNUM, m_strTabnum);

DDX_Text(pDX, IDC_TABNSEARCH, m_strTabnsearch);

DDX_Control(pDX, IDC_SEARCH, m_ctrlSearch);

}

BEGIN_MESSAGE_MAP(CDetailSearchDlg, CDialog)

ON_BN_CLICKED(IDC_SEARCH, &CDetailSearchDlg::OnBnClickedSearch)

ON_BN_CLICKED(IDC_EDITDELETE, &CDetailSearchDlg::OnBnClickedEditdelete)

END_MESSAGE_MAP()

// обработчики сообщений CDetailSearchDlg

BOOL CDetailSearchDlg::OnInitDialog()

{

CDialog::OnInitDialog();

GetDlgItem(IDC_TABNUM)->EnableWindow(FALSE);

GetDlgItem(IDC_CODE)->EnableWindow(FALSE);

GetDlgItem(IDC_COUNT)->EnableWindow(FALSE);

GetDlgItem(IDC_FIO)->EnableWindow(FALSE);

if (ActMode==3)

m_ctrlSearch.SetWindowText("Удаление");//присваив. кнопке

if (ActMode==1) //строковую константу

GetDlgItem(IDC_EDITDELETE)->ShowWindow(FALSE);

if ((ActMode==2)||(ActMode==3))//Show-отображ. окна

GetDlgItem(IDC_EDITDELETE)->EnableWindow(FALSE);

return TRUE; // return TRUE unless you set the focus to a control

}

void CDetailSearchDlg::OnBnClickedSearch()

{

ind = 0;

nomer = 0;

UpdateData(TRUE);

if(m_strTabnsearch == "")

{

MessageBox("Введите Таб. номер-поиск","Ошибка ввода",MB_ICONEXCLAMATION);

return;

}

nomer = base.poisk_ind(m_strTabnsearch, ind, nomer);

if (nomer != -1)

{

base.ChtenieZap(nomer);

m_strTabnum = base.num;

m_strCode = base.code;

m_strCount = base.count;

m_strFio = base.fio;

UpdateData(FALSE);

GetDlgItem(IDC_TABNUM)->EnableWindow(TRUE);

GetDlgItem(IDC_CODE)->EnableWindow(TRUE);

GetDlgItem(IDC_COUNT)->EnableWindow(TRUE);

GetDlgItem(IDC_FIO)->EnableWindow(TRUE);

GetDlgItem(IDC_EDITDELETE)->EnableWindow(TRUE);

}

else

{

MessageBox("Запись не найдена","Ошибка",MB_ICONEXCLAMATION);

ind = 0;

nomer = 0;

ClearForm();

return;

}

}

void CDetailSearchDlg::OnBnClickedEditdelete()

{

if (ActMode == 2)

{

int rez;

rez=MessageBox("Корректировать запись?","Корректировка",MB_OKCANCEL | MB_ICONQUESTION);

if (rez==IDCANCEL)

return;

Input(base);

if (!CheckInput())

return;

base.Zamena(nomer);

ClearForm();

GetDlgItem(IDC_EDITDELETE)->EnableWindow(FALSE);

ind=0;

nomer=0;

}

if (ActMode==3)

{

int rez;

rez=MessageBox("Удалить запись?","Удаление",MB_OKCANCEL | MB_ICONQUESTION);

if (rez==IDCANCEL)

return;

base.Udalenie(nomer);

ClearForm();

GetDlgItem(IDC_EDITDELETE)->EnableWindow(FALSE);

ind=0;

nomer=0;

}

}

void CDetailSearchDlg::Input(CDetail &base)

{

UpdateData(TRUE);

base.num = m_strTabnum;

base.code = m_strCode;

base.count = m_strCount;

base.fio = m_strFio;

}

void CDetailSearchDlg::ClearForm()

{

m_strTabnsearch = "";

m_strTabnum = "";

m_strCode = "";

m_strCount = "";

m_strFio = "";

UpdateData(FALSE);

}

BOOL CDetailSearchDlg::CheckInput()

{

UpdateData(TRUE);

if(m_strTabnum == "")

{

MessageBox("Введите Таб. номер", "Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

if (m_strFio == "")

{

MessageBox("Введите ФИО","Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

if (m_strCode == "")

{

MessageBox("Введите код детали","Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

if (m_strCount == "")

{

MessageBox("Введите количество деталей","Ошибка ввода",MB_ICONEXCLAMATION);

return FALSE;

}

return TRUE;

}

 

Файл кодов DetailSearchDlg.h

#pragma once

#include "Detail.h"

#include "afxwin.h"

// диалоговое окно CDetailSearchDlg

class CDetailSearchDlg : public CDialog

{

DECLARE_DYNAMIC(CDetailSearchDlg)

public:

CDetailSearchDlg(CWnd* pParent = NULL);   // стандартный конструктор

virtual ~CDetailSearchDlg();

CDetail base;

int ind;

int nomer;

void Output(CDetail &base);

void Input(CDetail &base);

void ClearForm();

BOOL CheckInput();

// Данные диалогового окна

enum { IDD = IDD_DETAILSEARCHDLG };

protected:

virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV

DECLARE_MESSAGE_MAP()

public:

CString m_strCode;

CString m_strCount;

CString m_strFio;

CString m_strTabnum;

CString m_strTabnsearch;

virtual BOOL OnInitDialog();

afx_msg void OnBnClickedSearch();

afx_msg void OnBnClickedEditdelete();

CButton m_ctrlSearch;

};

 

Файл кодов DetailViewDlg.cpp

// DetailViewDlg.cpp: файл реализации

//

#include "stdafx.h"

#include "1.h"

#include "DetailViewDlg.h"

#include "afxdialogex.h"

// диалоговое окно CDetailViewDlg

IMPLEMENT_DYNAMIC(CDetailViewDlg, CDialog)

CDetailViewDlg::CDetailViewDlg(CWnd* pParent /*=NULL*/)

: CDialog(CDetailViewDlg::IDD, pParent)

, m_strCode(_T(""))

, m_strCount(_T(""))

, m_strFio(_T(""))

, m_strTabnum(_T(""))

{

}

CDetailViewDlg::~CDetailViewDlg()

{

}

void CDetailViewDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX, IDC_CODE, m_strCode);

DDX_Text(pDX, IDC_COUNT, m_strCount);

DDX_Text(pDX, IDC_FIO, m_strFio);

DDX_Text(pDX, IDC_TABNUM, m_strTabnum);

}

BEGIN_MESSAGE_MAP(CDetailViewDlg, CDialog)

ON_BN_CLICKED(IDC_KONEC, &CDetailViewDlg::OnBnClickedKonec)

ON_BN_CLICKED(IDC_NACH, &CDetailViewDlg::OnBnClickedNach)

ON_BN_CLICKED(IDC_NEXT, &CDetailViewDlg::OnBnClickedNext)

ON_BN_CLICKED(IDC_PREV, &CDetailViewDlg::OnBnClickedPrev)

END_MESSAGE_MAP()

// обработчики сообщений CDetailViewDlg

BOOL CDetailViewDlg::OnInitDialog()

{

base.Init();

curr_rec_number=0;

fact_number=-1;

 

CDialog::OnInitDialog();

if (base.fact_kol==0)

{

MessageBox("Файл пуст", "Ошибка", MB_ICONEXCLAMATION);

EndDialog(1);

}

else

{

fact_number=1;

int i=0;

do

{

base.ChtenieZap(i);

curr_rec_number=i;

i++;

}

while (base.num=="");

Output(base);

UpdateData(FALSE);

}

return TRUE;

}

void CDetailViewDlg::OnBnClickedKonec()

{

int last_rec_number=-1;

for (int i=0;i<base.kol;i++)

{

base.ChtenieZap(i);

if (base.num!="")

last_rec_number=i;

}

base.ChtenieZap(last_rec_number);

Output(base);

curr_rec_number=base.kol-1;

fact_number=base.fact_kol;

UpdateData(FALSE);

}

void CDetailViewDlg::OnBnClickedNach()

{

int i=0;

fact_number=1;

do

{

base.ChtenieZap(i);

curr_rec_number=i;

i++;

}

while (base.num=="");

Output(base);

UpdateData(FALSE);

}

void CDetailViewDlg::OnBnClickedNext()

{

int prev=curr_rec_number;

int prev_fact=fact_number;

int i=curr_rec_number+1;

do

{

base.ChtenieZap(i);

if (base.num!="")

fact_number++;

curr_rec_number=i;

i++;

}

while (base.num=="");

if (curr_rec_number>=base.kol)

{

MessageBox("Конец файла","Ошибка",MB_ICONEXCLAMATION);

curr_rec_number=prev;

fact_number=prev_fact;

}

else

{

base.ChtenieZap(curr_rec_number);

Output(base);

UpdateData(FALSE);

}

}

void CDetailViewDlg::OnBnClickedPrev()

{

int prev=curr_rec_number;

int prev_fact=fact_number;

int i=curr_rec_number-1;

do

{

if (i==-1)

{

curr_rec_number=-1;

break;

}

base.ChtenieZap(i);

if (base.num!="")

fact_number--;

curr_rec_number=i;

i--;

}

while (base.num=="");

if ((curr_rec_number==-1) || (fact_number<1))

{

MessageBox("Начало файла", "Ошибка",

MB_ICONEXCLAMATION);

curr_rec_number=prev;

fact_number=prev_fact;

}

else

{

base.ChtenieZap(curr_rec_number);

Output(base);

UpdateData(FALSE);

}

}

void CDetailViewDlg::Output(CDetail &base)//вывод данных

{

m_strTabnum = base.num; //присваивание знач. полей записи

m_strCode = base.code;

m_strCount = base.count;

m_strFio = base.fio;

UpdateData(FALSE);//вывод в текст. поля знач. перем.

}

 

Файл кодов DetailViewDlg.h

#pragma once

#include "Detail.h"

// диалоговое окно CDetailViewDlg

class CDetailViewDlg : public CDialog

{

DECLARE_DYNAMIC(CDetailViewDlg)

public:

CDetailViewDlg(CWnd* pParent = NULL);   // стандартный конструктор

virtual ~CDetailViewDlg();

CDetail base;

int ind;

int nomer;

void Input(CDetail &base);

void ClearForm();

BOOL CheckInput();

int curr_rec_number;

int fact_number;

void Output(CDetail &base);

// Данные диалогового окна

enum { IDD = IDD_DETAILVIEWDLG };

protected:

virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV

DECLARE_MESSAGE_MAP()

public:

CString m_strCode;

CString m_strCount;

CString m_strFio;

CString m_strTabnum;

virtual BOOL OnInitDialog();

afx_msg void OnBnClickedKonec();

afx_msg void OnBnClickedNach();

afx_msg void OnBnClickedNext();

afx_msg void OnBnClickedPrev();

};

 

Файл кодов FilesDlg.cpp

// FilesDlg.cpp : implementation file

//

#include "stdafx.h"

#include "1.h"

#include "FilesDlg.h"

#include "afxdialogex.h"

extern CString ActFile;

extern CString DetailFile;

// CFilesDlg dialog

IMPLEMENT_DYNAMIC(CFilesDlg, CDialog)

CFilesDlg::CFilesDlg(CWnd* pParent /*=NULL*/)

: CDialog(CFilesDlg::IDD, pParent)

, m_strFileact(_T(""))

, m_strFiledetail(_T(""))

{

}

 

CFilesDlg::~CFilesDlg()

{

}

void CFilesDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Text(pDX, IDC_FILEACT, m_strFileact);

DDX_Text(pDX, IDC_FILEDETAIL, m_strFiledetail);

}

BEGIN_MESSAGE_MAP(CFilesDlg, CDialog)

ON_BN_CLICKED(IDC_BUTTONACT, &CFilesDlg::OnBnClickedButtonact)

ON_BN_CLICKED(IDC_BUTTONDETAIL, &CFilesDlg::OnBnClickedButtondetail)

ON_BN_CLICKED(IDOK, &CFilesDlg::OnBnClickedOk)

ON_BN_CLICKED(IDCANCEL, &CFilesDlg::OnBnClickedCancel)

END_MESSAGE_MAP()

// CFilesDlg message handlers

void CFilesDlg::OnBnClickedButtonact()

{

CString strAct;

static char Filter[] = "Act Files(*.dat)|*.dat||";//фильтр имен ф.

CFileDialog dialog(TRUE, "*.dat", strAct, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, Filter);//откр. диал. окна

if (dialog.DoModal()==IDOK)//вывод диалог. окна

{

strAct=dialog.GetPathName();//возвр. имя файла с указ. пути

m_strFileact = strAct;

UpdateData(FALSE);//заносит в текст. поле знач. перем.m_str

}

}

void CFilesDlg::OnBnClickedButtondetail()

{

CString strDetail;

static char Filter[]="Detail Files (*.dat)|*.dat||";

CFileDialog dialog (TRUE,"*.dat",strDetail,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,Filter);

if (dialog.DoModal()==IDOK)

{

strDetail = dialog.GetPathName();

m_strFiledetail = strDetail;

UpdateData(FALSE);

}

}

void CFilesDlg::OnBnClickedOk()

{

// TODO: Add your control notification handler code here

//CDialog::OnOK();

UpdateData(TRUE);//заносит в перем. m_str…знач. текст. поля

ActFile = m_strFileact;

DetailFile = m_strFiledetail;

EndDialog(1);

}

void CFilesDlg::OnBnClickedCancel()

{

// TODO: Add your control notification handler code here

//CDialog::OnCancel();

OnOK();

}

BOOL CFilesDlg::OnInitDialog()

{

CDialog::OnInitDialog();

m_strFileact = ActFile;

m_strFiledetail = DetailFile;

UpdateData(FALSE); //заносит в текст. поле значения перем.

return TRUE;

}

 

Файл кодов FilesDlg.h

#pragma once

// CFilesDlg dialog

class CFilesDlg : public CDialog

{

DECLARE_DYNAMIC(CFilesDlg)

public:

CFilesDlg(CWnd* pParent = NULL);   // standard constructor

virtual ~CFilesDlg();

// Dialog Data

enum { IDD = IDD_FILESDLG };

protected:

virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

DECLARE_MESSAGE_MAP()

public:

afx_msg void OnBnClickedButtonact();

afx_msg void OnBnClickedButtondetail();

afx_msg void OnBnClickedOk();

afx_msg void OnBnClickedCancel();

CString m_strFileact;

CString m_strFiledetail;

virtual BOOL OnInitDialog();

};

 

Класс CIndex

Класс CIndex предназначен для создания базы данных с индексной организацией, позволяющей использовать прямой доступ к записям базы данных. Класс CIndex имеет файл заголовков Index.h и файл кодов Index.cpp

 

Файл кодов Index.cpp

#include "stdafx.h"

#include "1.h"

#include "Index.h"

#include "Act.h"

#include "Detail.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

CIndex::CIndex()

{

kol = 0;

}

CIndex::~CIndex()

{}

void CIndex::init_ind(int i,CString kl)

{

index[i].kluch=kl;

index[i].nomer=i;

return;

}

void CIndex::init_kol(int k)

{

kol=k;

}

int CIndex::dob_ind(CString kl)

{

int nom;

for (int i=0;i<kol;i++)

if (index[i].kluch=="")

{

index[i].kluch=kl;

return(index[i].nomer);

}

index[kol].kluch=kl;

index[kol].nomer=kol;

nom=kol;

kol++;

return(nom);

}

 

int CIndex::poisk_ind(CString kl,int i,int& nomer)

{

CAct base;

Информация о работе Разработка списка рабочих, имеющих брак при изготовлении деталей