Автор работы: Пользователь скрыл имя, 03 Сентября 2014 в 19:41, курсовая работа
Целью курсового проекта является закрепление и обобщение знаний, полученных при изучении теоретического курса, приобретение практических навыков по программированию задач на объектно - ориентированном языке Visual C++ в среде разработки Visual Studio 2005 по дисциплине «Технологии и методы программирования».
}
catch (CFileException *e)
{
char pMsg[255];
if(e->GetErrorMessage(pMsg,
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::
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::CDetailAddDlg(
: CDialog(CDetailAddDlg::IDD, pParent)
, m_strCode(_T(""))
, m_strCount(_T(""))
, m_strFio(_T(""))
, m_strTabnum(_T(""))
{
}
CDetailAddDlg::~CDetailAddDlg(
{
}
void CDetailAddDlg::DoDataExchange(
{
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(
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::IDD, pParent)
, m_strCode(_T(""))
, m_strCount(_T(""))
, m_strFio(_T(""))
, m_strTabnum(_T(""))
, m_strTabnsearch(_T(""))
{
}
CDetailSearchDlg::~
{
}
void CDetailSearchDlg::
{
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(
ON_BN_CLICKED(IDC_SEARCH,
&CDetailSearchDlg::
ON_BN_CLICKED(IDC_EDITDELETE,
&CDetailSearchDlg::
END_MESSAGE_MAP()
// обработчики сообщений CDetailSearchDlg
BOOL CDetailSearchDlg::
{
CDialog::OnInitDialog();
GetDlgItem(IDC_TABNUM)->
GetDlgItem(IDC_CODE)->
GetDlgItem(IDC_COUNT)->
GetDlgItem(IDC_FIO)->
if (ActMode==3)
m_ctrlSearch.SetWindowText("
if (ActMode==1) //строковую константу
GetDlgItem(IDC_EDITDELETE)->
if ((ActMode==2)||(ActMode==3))//
GetDlgItem(IDC_EDITDELETE)->
return TRUE; // return TRUE unless you set the focus to a control
}
void CDetailSearchDlg::
{
ind = 0;
nomer = 0;
UpdateData(TRUE);
if(m_strTabnsearch == "")
{
MessageBox("Введите Таб. номер-поиск","Ошибка ввода",MB_ICONEXCLAMATION);
return;
}
nomer = base.poisk_ind(m_
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)->
GetDlgItem(IDC_CODE)->
GetDlgItem(IDC_COUNT)->
GetDlgItem(IDC_FIO)->
GetDlgItem(IDC_EDITDELETE)->
}
else
{
MessageBox("Запись
не найдена","Ошибка",MB_
ind = 0;
nomer = 0;
ClearForm();
return;
}
}
void CDetailSearchDlg::
{
if (ActMode == 2)
{
int rez;
rez=MessageBox("Корректировать
запись?","Корректировка",MB_
if (rez==IDCANCEL)
return;
Input(base);
if (!CheckInput())
return;
base.Zamena(nomer);
ClearForm();
GetDlgItem(IDC_EDITDELETE)->
ind=0;
nomer=0;
}
if (ActMode==3)
{
int rez;
rez=MessageBox("Удалить
запись?","Удаление",MB_
if (rez==IDCANCEL)
return;
base.Udalenie(nomer);
ClearForm();
GetDlgItem(IDC_EDITDELETE)->
ind=0;
nomer=0;
}
}
void CDetailSearchDlg::Input(
{
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(
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::IDD, pParent)
, m_strCode(_T(""))
, m_strCount(_T(""))
, m_strFio(_T(""))
, m_strTabnum(_T(""))
{
}
CDetailViewDlg::~
{
}
void CDetailViewDlg::
{
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(
ON_BN_CLICKED(IDC_KONEC,
&CDetailViewDlg::
ON_BN_CLICKED(IDC_NACH,
&CDetailViewDlg::
ON_BN_CLICKED(IDC_NEXT,
&CDetailViewDlg::
ON_BN_CLICKED(IDC_PREV,
&CDetailViewDlg::
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::
{
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_
Output(base);
curr_rec_number=base.kol-1;
fact_number=base.fact_kol;
UpdateData(FALSE);
}
void CDetailViewDlg::
{
int i=0;
fact_number=1;
do
{
base.ChtenieZap(i);
curr_rec_number=i;
i++;
}
while (base.num=="");
Output(base);
UpdateData(FALSE);
}
void CDetailViewDlg::
{
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_
curr_rec_number=prev;
fact_number=prev_fact;
}
else
{
base.ChtenieZap(curr_rec_
Output(base);
UpdateData(FALSE);
}
}
void CDetailViewDlg::
{
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_
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(
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(
{
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::
ON_BN_CLICKED(IDC_
ON_BN_CLICKED(IDOK, &CFilesDlg::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CFilesDlg::OnBnClickedCancel)
END_MESSAGE_MAP()
// CFilesDlg message handlers
void CFilesDlg::
{
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::
{
CString strDetail;
static char Filter[]="Detail Files (*.dat)|*.dat||";
CFileDialog dialog (TRUE,"*.dat",strDetail,OFN_
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 имеет файл заголовков 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;
Информация о работе Разработка списка рабочих, имеющих брак при изготовлении деталей