Скачиваний:
19
Добавлен:
02.05.2014
Размер:
7.49 Кб
Скачать
// 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
  • #
    02.05.20141.34 Кб19dbfiles.h
  • #
    02.05.201482.94 Кб18dbfiles.ncb
  • #
    02.05.201448.64 Кб18dbfiles.opt
  • #
    02.05.2014250 б18dbfiles.plg
  • #
    02.05.20146.17 Кб18dbfiles.rc
  • #
    02.05.20147.49 Кб19dbfilesDlg.cpp
  • #
    02.05.20141.68 Кб19dbfilesDlg.h
  • #
    02.05.2014288 б19F1.tdb
  • #
    02.05.20141.76 Кб18F2.tdb
  • #
    02.05.20142.95 Кб18F3.tdb
  • #
    02.05.201425.09 Кб19Form.xls