Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2022, 15:21   #1
MaxBrat
Пользователь
 
Регистрация: 27.09.2022
Сообщений: 32
Восклицание Нужно очень срочно добавить исключение в код на C++

У меня есть код на С++, и в него нужно добавить обработку исключений. Буду очень благодарен)) нужно для курсовой работы через 3 дня нужно здать.


Код:
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <ctime>
#include <errno.h>
using namespace std;
//Объявление типа employee
struct employee
{
	char surname[20];
	char name[20];
	char patronymic[20];
	char position[20];
	char start_date[11];
	float salary;
};
//Добавление одной записи в бинарный файл. Параметры – указатель на файл и имя файла
void add_record(char* name)
{
	employee z; FILE* f;
	//Открыть файл и проверить успешность открытия
	errno_t err;
	if ((err = fopen_s(&f, name, "ab")) != 0)
		printf("File not open.\n");
	//Считать запись с клавиатуры (данные вводятся в строку через табуляцию)
	scanf_s("%s\t%s\t%s\t%s\t%s\t%f", z.surname, 20, z.name, 20, z.patronymic, 20,
		z.position, 20,
		z.start_date, 11, &z.salary);
	//Записать запись в файл
	fwrite(&z, sizeof(employee), 1, f);
	//закрыть файл
	fclose(f);
}
//Просмотр файла. Параметры – указатель на файл и имя файла
void view_file(char* name)
{
	employee z; FILE* f;
	errno_t err;
	if ((err = fopen_s(&f, name, "rb")) != 0)
		printf("File not open.\n");
	cout << "\nView file" << endl;
		cout << "Surname\tName\tPatronymic\tPosition\tStart date\tSalary\n" << endl;
	//Считывать последовательно записи из файла, пока они не закончатся
	while (fread(&z, sizeof(employee), 1, f))
	{
		//Вывести запись на экран в строку через табуляцию
		printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n", z.surname, z.name, z.patronymic,
			z.position, z.start_date, z.salary);
	}
	fclose(f);
}

//Второй способ определения количества записей в файле.
//Параметры – указатель на файл и имя файла. Результат – целое число (количество записей)
int number_of_records2(char* name)
{
	int n = 0; employee z; FILE* f;
	errno_t err;
	if ((err = fopen_s(&f, name, "rb")) != 0)
		printf("File not open.\n");
	//Считывать по очереди все записи и увеличивать счётчик на 1
	while (fread(&z, sizeof(z), 1, f))
		n++;
	fclose(f);
	return n;
}
//Заполнение (создание) массива из бинарного файла.
//Параметры – массив, указатель на файл, имя файла.
void create_array(employee* a, int kol, char* name)
{
	FILE* f;
	errno_t err;
	if ((err = fopen_s(&f, name, "rb")) != 0)
		printf("File not open.\n");
	//Считать kol записей из файла в массив а одной командой
	fread(a, sizeof(employee), kol, f);
	fclose(f);
}
//Сортировка массива
void sort_array(employee* a, int kol)
{
	int i; employee x; bool f;
	//Цикл пока массив не отсортирован. Признаком того, что массив уже отсортирован будет
	//значение переменной f, равное 0, после очередного прохода по массиву
	for (int i = 0; i < kol; ++i) {
		int f = i;
		for (int j = i + 1l; j < kol; ++j)
			if (a[f].salary > a[j].salary) // или (a[f].salary < a[j].salary) для сортировки по убыванию.
				f = j;
		if (f != i) {
			x = a[i]; a[i] = a[f]; a[f] = x;
		}
	}
}
//Вывод динамического массива на экран
void view_array(employee* a, int kol)
{
	cout << "Surname\tName\tPatronymic\tPosition\tStart date\tSalary\n" << endl;
	for (int i = 0; i < kol; i++)
		printf("%s\t%s\t%s\t%s\t%s\t%10.2f\n", a[i].surname, a[i].name, a[i].patronymic,
			a[i].position, a[i].start_date, a[i].salary);
}
//Создание бинарного файла из динамического массива (возвращение данных в файл)
void array_to_file(employee* a, int kol, char* name)
{
	FILE* f;
	errno_t err;
	if ((err = fopen_s(&f, name, "wb")) != 0)
		printf("File not open.\n");
	fwrite(a, sizeof(employee), kol, f);
	fclose(f);
}
//Вывод данных по условию
void select_data(char* name)
{
	employee z; FILE* f;
	
	errno_t err;
	if ((err = fopen_s(&f, name, "rb")) != 0)
		printf("File not open.\n");
	cout << "\nSelect records" << endl;
	cout << "Surname\tName\tPatronymic\tPosition\tStart date\tSalary\n" << endl;
	while (fread(&z, sizeof(employee), 1, f))
	{
		
		//Если  должность - «инженер»
		if ( strcmp(z.position, "gogogogo") == 0)
			//Выводим запись на экран
			printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n", z.surname, z.name, z.patronymic,
				z.position,
				z.start_date, z.salary);
	}
	fclose(f);
}
//Создание текстового файла

void create_text_file(char* bname, char* tname)
{
	employee z; float sum = 0, avg; FILE* fb; FILE* ft;
	int k = number_of_records2(bname);
	//Открываем бинарный файл для чтения
	errno_t err;
	if ((err = fopen_s(&fb, bname, "rb")) != 0)
		printf("File not open.\n");
	//Проходим по бинарному файлу и считаем суммарную зарплату
	
	fseek(fb, 0, 0);
	//Открываем текстовый файл для записи
	if ((err = fopen_s(&ft, tname, "wt")) != 0)
		printf("File not open.\n");
	//Идём по бинарному файлу и считываем записи
	while (fread(&z, sizeof(employee), 1, fb))
	{
		//Если запплата ниже средней, то вставляем запись в текстовый файл
		if (strcmp(z.position, "gogogogo") == 0)
			fprintf(ft, "%s\t%s\t%s\t%s\t%s\t%g\n", z.surname, z.name, z.patronymic,
				z.position, z.start_date, z.salary);
	}
	fclose(ft); fclose(fb);
}
//Просмотр текстового файла
void view_text_file(char* name)
{
	employee z; FILE* f;
	errno_t err;
	if ((err = fopen_s(&f, name, "rt")) != 0)
		printf("File not open.\n");
	cout << "\nView text file" << endl;
	cout << "Surname\tName\tPatronymic\tPosition\tStart date\tSalary\n" << endl;
	while (!feof(f))
	{
		fscanf_s(f, "%s\t%s\t%s\t%s\t%s\t%f\n", z.surname, 20, z.name, 20, z.patronymic, 20,
			z.position, 20,
			z.start_date, 11, &z.salary);
		printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n", z.surname, z.name, z.patronymic,
			z.position, z.start_date, z.salary);
	}
	fclose(f);
}
//Главная функция
int main()
{
	char name[] = "kursfile.txt";
	char tname[] = "textfile.txt"; //имена файлов
	//Ввод данных в бинарный файл
	cout << "Input information about employee:" << endl;
	cout << "Surname\tName\tPatronymic\tPosition\tStart date\tSalary\n" << endl;
	for (int i = 0; i < 3; i++)
		add_record(name);
	//Вывод файла на экран
	view_file(name);
	//Определение количества записей в файле
	int kol = number_of_records2(name);
	cout << "Number of records in the file: " << kol << endl;
	//cout<<"Number of records in the file: "<<number_of_records2(name)<<endl;

		//Объявление динамического массива
		employee * a = new employee[kol];
	//Заполнение динамического массива значениями
	create_array(a, kol, name);
	//Вывод динамического массива на экран
	cout <<

		"Array:" << endl;
	view_array (a, kol);
	//Сортировка массива
	sort_array(a, kol);
	//Вывод динамического массива на экран
	cout <<"\nSorted array:"<<endl;

	view_array (a, kol);

	//Возвращение отсортированных данных в бинарный файл
	array_to_file(a, kol, name);
	//Очистка памяти из-под массива

		delete[]a;
	//Вывод файла на экран
	view_file(name);
	//Вывод данных из фала на экран по условию
	select_data(name);
	//Создание текстового файла из бинарного
	create_text_file(name, tname);
	//Вывод содержимого теекстового
	view_text_file(tname);
	system("pause");
	return 0;
}

Последний раз редактировалось MaxBrat; 18.11.2022 в 17:41.
MaxBrat вне форума Ответить с цитированием
Старый 19.11.2022, 08:32   #2
AWPoint
 
Регистрация: 17.11.2022
Сообщений: 9
По умолчанию

Так добавьте проверку на существование файла или на его пустоту и бросьте исключение throw new exception ("your msg")и обработайте это исключение как try{}catch (exception &e){cout << e.what<<endl;}
Кажется так это выглядит на плюсах. В вашем случае вместо printf("File not open.\n"); throw new exceļption("*"); и в Мейн функции try-catch

Последний раз редактировалось AWPoint; 19.11.2022 в 10:01.
AWPoint вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужно срочно написать программу Zamaka2016MAKC Общие вопросы C/C++ 5 15.11.2016 19:54
СРОЧНО!!!лаба по строкам в СИ!!!!!ОЧЕНЬ НУЖНО!! vimars Помощь студентам 10 08.12.2009 08:52