Описать тип записи Маршрут самолета - C (СИ)
Формулировка задачи:
Доброе время суток!
Помогите пожалуйста найти и исправить ошибку в семестровой работе. Дана задача:
Составить программу для работы с файлом простейшей БД. Она должна включать в себя меню и обеспечивать выполнение следующих функций:
открытие и закрытие файла;
создание и добавление записей в файл;
вывод содержимого файла на экран;
выбор и запись в новый файл данных с заданными характеристиками;
выбор и корректировка содержимого файла.
Содержание записей в файле:
N Маршрут самолета Расстояние Количество мест
Ошибка заключается в том, что переменная ved.n не объявлена.. точнее, объявлена, но не там где нужно, а где нужно - не пойму..
#include <stdio.h>
#include <stdlib.h>
FILE *fp;
void open(char filename[20], char dost[3]) //Открытие нового файла
{
int a;
printf("\n Vvedite imya faila:");
scanf("%s",filename);
fopen(filename,"r");
if(ftell(fp)==0) dost="w";
else {printf("\n File suchestvuyet \n Vvedite tip dostypa \n w - perezapisat file \
\n r - prochitat file \n w+ - chtenie i zapis \n");
scanf("%s",dost);
}
fopen(filename,dost);
}
void creation(char filename[20]) //Создание файла
{
char k;
do
{
printf("\n Vvedite nomer reisa:");
scanf("%3d",ved.n);
printf("\n Vvedite marshrut:");
scanf("%30s",ved.marshrut);
printf("\n Vvedite rasstoyanie:");
scanf ("%5d", ved.rasst);
printf ("\n Vvedite kolichestvo mest:");
scanf ("%3d", ved.mest);
void addrec(char filename[20]); //Добавление записей
void corr(char filename[20]); //Корректировка файла
struct lib
{
int n;
char marshrut[30];
int rasst[5];
int mest[11];
} ved;
char filename[20];
int main(int argc, char *argv[])
{
int a;
char str1[3];
printf("\n Otkroite ili sozdaite file");
open(filename,str1);
do
{
//Главное меню программы
printf("\n Viberite trebuyemuyu operaziyu:\n 1 - Otkryt file \n 2 - Vivesti soderzhimoye na ekran\
\n 3 - Redaktirovat file \n 4 - Dobavit zapis v file \n 0 - Vyhod");
scanf("%d",a);
switch(a)
{
case 0: return;
case 1: fcloseall();
open(filename,str1);break;
case 2: printf("\n filename", filename[20]);break;
case 3: corr(filename);break;
case 4: addrec(filename);break;
default: printf("\n Oshibka vvoda");
} //switch
} while(1);
fcloseall();
system("PAUSE");
return 0;
}Решение задачи: «Описать тип записи Маршрут самолета»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> /* для поддержки русского языка */
typedef enum { NO_FILE = 0, EMPTY_FILE = 1, VALID_FILE = 2 } FileInfo_t;
FileInfo_t testFile(const char *name){
FILE *f;
long pos;
if ( ( f = fopen(name, "rb") ) == NULL )
return NO_FILE;
fseek(f, 0, SEEK_END);
pos = ftell(f);
fclose(f);
return ( pos ) ? VALID_FILE : EMPTY_FILE;
}
int main(void){
char file_name[512];
FileInfo_t status;
/*
FILE *f;
ещё чего-нибудь...
*/
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Имя файла: ");
scanf("%s", file_name);
status = testFile(file_name);
switch ( status ){
case NO_FILE :
printf("Файл не существует или недоступен для чтения\n");
break;
case EMPTY_FILE :
printf("Пустой файл\n");
break;
case VALID_FILE :
printf("Файл с данными, доступными для чтения\n");
break;
default :
printf("ВСЁ ПОГИБЛО!!!\n");
}
exit(0);
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
stdio.hдля работы с файлами и вывода данных в консольstdlib.hдля работы с функциейrand()и приведением типовwindows.hдля поддержки русского языка
- Определяем тип записи enum для файловой системы:
FileInfo_tэто тип записи enum, который определяет статус файла- Варианты значения enum:
NO_FILE,EMPTY_FILE,VALID_FILE
- Функция
testFileдля проверки статуса файла:- Открывает файл с помощью функции
fopen() - Перемещает указатель чтения в конец файла с помощью
fseek()иftell() - Возвращает статус файла с помощью оператора
?
- Открывает файл с помощью функции
- Основная функция
main:- Устанавливает кодировку консоли на русскую с помощью
SetConsoleCP()иSetConsoleOutputCP() - Запрашивает имя файла с помощью
scanf() - Вызывает функцию
testFile()для проверки статуса файла - Использует оператор
switchдля вывода соответствующего сообщения в зависимости от статуса файла - Завершает программу с помощью
exit(0)
- Устанавливает кодировку консоли на русскую с помощью
- Проверка кода на ошибки и обработка исключений:
- Проверка на отсутствие файла или доступ к нему для чтения
- Обработка пустого файла
- Обработка файла с данными, доступными для чтения
- Обработка ошибки в случае несоответствия статуса файла значению enum