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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2022, 02:17   #1
Maxim24
Новичок
Джуниор
 
Регистрация: 19.11.2022
Сообщений: 2
Восклицание Пожалуйста нужно подправить немного код на C++

У меня есть код на С++,
Код:
#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;
}
_______________и в эту функцию нужно добавить простенькую обработку исключений з применением try, catch или throw _____________________

Код:
//Добавление одной записи в бинарный файл. Параметры – указатель на файл и имя файла
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);
}
Например если я ввожу z.surname нулевое значение то срабатывало исключение з применением try, catch или throw.

Или при попытки открыть файл чтобы срабатывало исключение з применением try, catch или throw.

Буду очень благодарен)) нужно для курсовой работы прям очень нужно.

Последний раз редактировалось Maxim24; 19.11.2022 в 04:09.
Maxim24 вне форума Ответить с цитированием
Старый 19.11.2022, 17:32   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Гляньте в этой теме
https://programmersforum.ru/showthread.php?t=344181
waleri вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужно немного подправить код !Таблица Пифагора, Javascript. OlgaRostov JavaScript, Ajax 1 25.11.2015 16:10
Решение СЛАУ методом Гауса ( немного подправить программу) pe3a4ok Помощь студентам 1 05.11.2013 06:18
Одномерный массив. есть код, нужно объяснить и немного подправить mikeel Общие вопросы C/C++ 8 10.06.2013 22:10
Нужно немного подправить программу на работу с двумерной матрицей(C++ Builder6)) Kroleg Помощь студентам 1 09.10.2011 04:49
Нужно подправить код zeppelin58 Общие вопросы C/C++ 1 28.05.2010 12:11