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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2011, 16:10   #1
sunf
 
Регистрация: 07.12.2010
Сообщений: 4
По умолчанию Файлы С++

Задание: В программе предусмотреть сохранение вводимых данных в файл и возможность чтения из ранее сохраненного файла.Результаты выводить на экран и в текстовый документ.

Ведомость абитуриентов содержит ФИО , город проживания, суммарный балл. Вывести информацию об абитуриентах, проживащих в городе Минске и имеющих балл выше 220.


Код:
#include <iostream.h>  
#include <stdio.h>  
#include <conio.h> 
#include <stdlib.h> 
#include <string.h> 
 
FILE *fl; 
typedef struct  
{ 
	char fio[30]; 
	char city[30];
    int ball; 
} abiturient; 
 
abiturient ved[30]; 
char name[20];      
int n=0;     
int menu();       
void nnf();       
void newf();  
void spisok();
void opf();   
void resc();  
void resf();
 
int main()  
{  
	while (true)  
	{ 
		switch (menu()) 
		{ 
			case 1: nnf();    break; 
			case 2: newf();   break; 
			case 3: spisok(); break; 
			case 4: opf();    break; 
			case 5: resc();   break; 
			case 6: resf();   break; 
			case 7: return 0; 
			default: "Viberite pravilno!"; 
		} 
		puts("Press any key to continue");  
		getch();      
		system("cls");  
	}  
}  
 
int menu() 
{ 
	cout << "VIBERITE:" << endl; 
	cout << "1. Vvod file name" << endl; 
	cout << "2. New file" << endl; 
	cout << "3. Vvesti spisok" << endl; 
	cout << "4. Open file" << endl; 
	cout << "5. Vivesti result" << endl; 
	cout << "6. Vivesti v fail" << endl; 
	cout << "7. Exit" << endl; 
	int i; 
	cin >> i; 
	return i; 
} 
 
void nnf() 
{ 
	cout << "Vvedite file name" << endl; 
	cin >> name; 
} 
 
void newf()
{ 
	if ((fl = fopen(name,"wb"))==NULL) 
	{ 
		cout << "Oshibka pri sozdanii"<<endl; 
		exit(1); 
	} 
	cout << "OK" << endl; 
	fclose(fl); 
} 
 
void spisok()
{ 
	if ((fl = fopen(name,"rb+"))==NULL) 
	{ 
		cout << "Oshibka pri sozdanii"<<endl; 
		exit(1); 
	} 
 
	cout << "Vvedite chislo abiturientov " << endl; 
	cin >> n; 
 
	for (int i=0; i<n; i++) 
	{ 
		cout << "Vvedite fio: "; 
		cin >> ved[i].fio; 
		cout << "Vvedite summarni ball: "; 
		cin >> ved[i].ball; 
		cout << "Vvedite gorod: "; 
		cin >> ved[i].city;
		fwrite( &ved[i], sizeof(abiturient), 1, fl ); 
	} 
	fclose(fl); 
} 
 
void opf()
{ 
	if ((fl = fopen(name,"rb"))==NULL) 
	{
		cout << "Oshibka pri otkritii"<<endl; 
		exit(1); 
	} 
 
	n=0; abiturient t; 
	while(true) 
	{ 
		int  nwrt = fread( &t, sizeof(abiturient), 1, fl ); 
		if (nwrt!=1) break; 
		ved[n]=t; 
		cout << ved[n].fio << "  " << ved[n].ball  << "  " << ved[n].city<<endl;
		n++; 
	} 
	fclose(fl); 
} 
 
void resc()
{ 
	for (int i=0; i<n; i++) 
	if (ved[i].ball>220)
		
	{		
		cout << ved[i].fio <<" "<<ved[i].ball<<" "<<ved[i].city << endl;  
	}
} 
 
void resf()
{ 
	char namet[30]; 
	FILE *ft; 
	cout << "Vvedite imya faila" << endl; 
	cin >> namet; 
	if ((ft = fopen(namet,"w"))==NULL) 
	{ 
		cout << "Oshibka pri sozdanii "<<endl; 
		exit(1); 
	} 
	char s[80]; 
	
	for (int i=0; i<n; i++) 
	if (ved[i].ball>220)
	{
		strcpy(s, ved[i].fio);
		strcat(s, "\n");
		fputs(s, ft); 

    } 
	fclose(ft); 
}

Помогите пожалуйста с выводом результата абитуриента с нужным баллом и с г.Минска , а то у меня что-то не получается ...
sunf вне форума Ответить с цитированием
Старый 16.04.2011, 17:04   #2
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Глобальные переменные - не очень хорошее решение, передавайте параметры в функции. У Вас функция, если не смогла открыть файл по введенному пути завершает работу программы - разве это нормально? Выводите ошибку, отслеживайте ее, запрашивайте изменение введенного пути.

Вывод:
Код:
void out_if (const int mark)
bool f = 0;
cout << "Искомые абитуриенты: \n";
for (int i=0;i<n;i++) //n- количество записей
{
   if (ved[i].ball == mark)
   {
      cout << ved[i].fio << endl;
      f = 1;
   }
   if (!f) cout << "студенты не найдены.";
}
С Минском аналогично.
И кстати, почему бы не использовать тип string вместо массива char,а вместо типа FILE использовать потоки?
Если помог - кликни на значок весов под аватаром.

Последний раз редактировалось malinoff; 16.04.2011 в 17:09.
malinoff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сохраняет файлы (Создает файлы пустышки) Rock231 Помощь студентам 2 25.12.2010 12:31
C#Файлы Vegas Общие вопросы C/C++ 0 02.06.2010 22:40
Файлы данных.Типизированные файлы. вылка Помощь студентам 6 17.05.2010 15:42
Файлы в С focus888 Общие вопросы C/C++ 1 19.06.2009 03:02
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53