Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовой - Специфицирование и тестирование программ2 / dbfilesDlg
.cpp// dbfilesDlg.cpp : implementation file
//
#include "stdafx.h"
#include "dbfiles.h"
#include "dbfilesDlg.h"
#include "algo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDbfilesDlg dialog
CDbfilesDlg::CDbfilesDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDbfilesDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDbfilesDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CDbfilesDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDbfilesDlg)
DDX_Control(pDX, IDC_AUTO_REPLACE, m_auto_replace);
DDX_Control(pDX, IDC_SELECT_SB, m_select_sb);
DDX_Control(pDX, IDC_SB, m_sb);
DDX_Control(pDX, IDC_SB_CALC, m_sb_calc);
DDX_Control(pDX, IDC_F3, m_f3);
DDX_Control(pDX, IDC_F2, m_f2);
DDX_Control(pDX, IDC_F1, m_f1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDbfilesDlg, CDialog)
//{{AFX_MSG_MAP(CDbfilesDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_MAKE, OnMake)
ON_BN_CLICKED(IDC_SELECT_F1, OnSelectF1)
ON_BN_CLICKED(IDC_SELECT_F2, OnSelectF2)
ON_BN_CLICKED(IDC_SELECT_F3, OnSelectF3)
ON_BN_CLICKED(IDC_SB_CALC, OnSbCalc)
ON_BN_CLICKED(IDC_SELECT_SB, OnSelectSb)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDbfilesDlg message handlers
BOOL CDbfilesDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CDbfilesDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CDbfilesDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CDbfilesDlg::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
}
int CDbfilesDlg::TestFileNames()
{
const CString ERROR_NO_NAME = "Не введено имя файла ";
CString f1_name, f2_name, f3_name, sb_name;
m_f1.GetWindowText(f1_name);
if (f1_name == "")
{
MessageBox(ERROR_NO_NAME + "F1");
m_f1.SetFocus();
return 1;
}
m_f2.GetWindowText(f2_name);
if (f2_name == "")
{
MessageBox(ERROR_NO_NAME + "F2");
m_f2.SetFocus();
return 2;
}
m_f3.GetWindowText(f3_name);
if (f3_name == "")
{
MessageBox(ERROR_NO_NAME + "F3");
m_f3.SetFocus();
return 3;
}
if (m_sb_calc.GetCheck())
{
m_sb.GetWindowText(sb_name);
if (sb_name == "")
{
MessageBox(ERROR_NO_NAME + "для сохранения среднего балла");
m_sb.SetFocus();
return 4;
}
}
return 0;
}
void CDbfilesDlg::GetFileName(CEdit &Cnt, BOOL Mode, BOOL Txt = FALSE)
{
CString Ext, Ext_, Filter;
if (!Txt)
{
Ext = "tdb";
Ext_ = "*.tdb";
Filter = "Файл базы данных (*.tdb)|*.tdb|Все файлы (*.*)|*.*|";
}
else
{
Ext = "txt";
Ext_ = "*.txt";
Filter = "Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*|";
}
CFileDialog file_dialog(Mode, Ext, Ext_, OFN_HIDEREADONLY,
Filter);
int result = file_dialog.DoModal();
if (result == IDOK)
{
Cnt.SetWindowText(file_dialog.GetPathName());
}
}
int CDbfilesDlg::TestFileExists(CString &filename)
{
FILE *f;
int DlgResult;
f = fopen(filename, "rb");
// Если файл существует
if (f != NULL)
{
DlgResult = MessageBox("Файл с именем " + filename + " уже существует. " +
"Вы действительно хотите заменить его?",
NULL, MB_YESNO | MB_ICONEXCLAMATION);
fclose(f);
if (DlgResult == IDYES)
return 1;
else
if (DlgResult == IDNO)
return 2;
else
return 3; // Такого быть не должно в данном случае
}
return 0;
}
void CDbfilesDlg::OnMake()
{
CString ErrorStr;
CString F1, F2, F3, SB;
db_algo db;
// Проверяем, введены ли имена файлов
if (TestFileNames() != 0)
return;
// Сохраняем имена файлов в строки
m_f1.GetWindowText(F1);
m_f2.GetWindowText(F2);
m_f3.GetWindowText(F3);
m_sb.GetWindowText(SB);
// Если не выбрана галочка "автоматически заменять файлы"
if (m_auto_replace.GetCheck() == FALSE)
{
// Если файл уже существут и пользователь не разрешил заменить его
if (TestFileExists(F3) == 2)
return;
// Если требуется подсчет среднего балла
if (m_sb_calc.GetCheck())
{
// Если файл существует, но разрешение на замену не получено,
// то отметняем выполнение
if (TestFileExists(SB) == 2)
return;
}
}
// Передать имена файлов в калсс обработки
db.SetFileNames(F1, F2, F3, SB);
// Проверка правильности содержания первой таблицы.
// Номер предмета должен быть уникален
if (db.TestUniqID(ErrorStr) == 0)
{
#ifdef _DEBUG
MessageBox("Успешно шаг 1");
#endif
}
else
{
MessageBox(ErrorStr, NULL, MB_ICONSTOP);
return;
}
// Результат соедниения таблиц помещается во временный двоичный файл,
// содержащий всю необходимую информацию
if (db.MakeBinResTable(ErrorStr) == 0)
{
#ifdef _DEBUG
MessageBox("Успешно шаг 2");
#endif
}
else
{
MessageBox(ErrorStr, NULL, MB_ICONSTOP);
return;
}
// Создание текстового файла с результирующей таблицей
if (db.GenF3(ErrorStr) == 0)
{
#ifdef _DEBUG
MessageBox("Успешно шаг 3");
#endif
}
else
{
MessageBox(ErrorStr, NULL, MB_ICONSTOP);
return;
}
if (m_sb_calc.GetCheck())
{
if (db.CalculeSredBall(ErrorStr) == 0)
{
#ifdef _DEBUG
MessageBox("Средний балл подсчитан успешно");
#endif
}
else
{
MessageBox(ErrorStr, NULL, MB_ICONSTOP);
return;
}
}
MessageBox("Обработка данных выполнена успешно", NULL, MB_ICONINFORMATION);
}
void CDbfilesDlg::OnSelectF1()
{
GetFileName(m_f1, TRUE);
}
void CDbfilesDlg::OnSelectF2()
{
GetFileName(m_f2, TRUE);
}
void CDbfilesDlg::OnSelectF3()
{
GetFileName(m_f3, FALSE);
}
void CDbfilesDlg::OnSbCalc()
{
char x;
x = m_sb_calc.GetCheck();
if (x == 0)
{
m_sb.SetReadOnly(1);
m_select_sb.EnableWindow(0);
}
else
{
m_sb.SetReadOnly(0);
m_select_sb.EnableWindow(1);
}
}
void CDbfilesDlg::OnSelectSb()
{
GetFileName(m_sb, FALSE, TRUE);
}
Соседние файлы в папке Курсовой - Специфицирование и тестирование программ2