В принципе разобрался, только не могу понять почему не компилится:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct scan_info
{
char model[25];
int price; // цена
double x_size;
double y_size;
int optr;
int grey;
};
int ShowMenu()
{
char ch = '\0';
// рисуем меню
puts("1 : Create a file");
puts("2 : View a file");
puts("3 : Search");
puts("4 : Exit");
// считываем выбор пользователя
ch = getch();
// возвращаем код выбранного меню
return atoi(&ch);
}
int main()
{
while (1) // выполняем в бесконечном цикле
{
switch( ShowMenu() ) // показываем меню и проверяем что выбрал пользователь
{
case 1: CreateFile(); break; // если 1 то создаём файл и заносим информацию
case 2: ViewFile(); break; // если 2 то показываем содержимое файла
case 3: Search(); break; // если три, то выполняем поиск
case 4: return 0; // если 4 то выходим из программы
default: // если другая кнопка, ничего не делаем
break;
}
}
}
void CreateFile()
{
scan_info scan;
int n = 0;
FILE *data = fopen( db, "wb" ); // открываем файл на запись
if( data == NULL )
{
// Если файл открыть/создать не удалось, то выводим соответствующую ошибку и выходим.
puts("Could not open file for write."); getch();
return;
}
// Запрашиваем количество записей
printf("Skolko zapisey budem delat? ");
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
printf("\n Scaner #%d\n", i);
ReadField("Model: ", &(scan.model)); // Считываем модель
ReadField("Price: ", &(scan.price)); // Считываем цену
ReadField("Gorizont: ", &(scan.x_size)); // Считываем горизонтальный размер области сканирования
ReadField("Vertical: ", &(scan.y_size)); // Считываем вертикальный размер области сканирования
ReadField("Optica: ", &(scan.optr)); // Считываем оптическое разрешение
ReadField("Gradaciya: ", &(scan.grey)); // Считываем число градаций серого
fwrite(&scan, sizeof(scan), 1, data);
}
fclose(data); // закрываем файл
printf("Data saved. Press any to continue...");
getch();
}
void ViewFile()
{
scan_info scan;
FILE *data = fopen( db, "rb" ); // открываем файл на чтение
if( data == NULL )
{
// Если файл открыть не удалось, то выводим соответствующую ошибку и выходим.
puts("Could not open file for read. Press any to continue..."); getch();
return;
}
// выводим шапку таблицы
printf(" Model Price Gorizont Vertical Optica Gradaciya");
while( 1 )
{
// Считываем все структуры, пока не конец файла
fread(&scan, sizeof(scan), 1, data);
// Выводим считанные данные
if( !feof(data))
{
printf("\n %3s %15s %32s %10s %8s", scan.model, scan.price, scan.x_size, scan.y_size, scan.optr, scan.grey);
}
else
{
break;
}
}
fclose(data); // закрываем файл
printf("\n\nPress any to continue...");
getch();
}
void Search()
{
scan_info scan;
char mod1[25];
FILE *data = fopen( db, "rb" ); // открываем файл на чтение
if( data == NULL )
{
// Если файл открыть не удалось, то выводим соответствующую ошибку и выходим.
puts("Could not open file for read. Press any to continue..."); getch();
return;
}
// Запрашиваем Название модели сканера. Для поиска всех его параметров.
printf("Input Model Scaner: "); scanf(mod1);
// выводим шапку таблицы
printf("\n Model Price Gorizont Vertical Optica Gradaciya");
while( 1 )
{
// Считываем все структуры, пока не конец файла
fread(&scan, sizeof(scan), 1, data);
if( !feof(data) )
{
if( !strcmp( scan.model, mod1 ))
{
printf("\n %3s %15s %32s %10s %8s", scan.model, scan.price, scan.x_size, scan.y_size, scan.optr, scan.grey);
}
}
else
{
break;
}
}
fclose(data);
printf("\n\nSearch completed. Press any to continue...");
getch();
}
Ошибки:
Код:
(57) : error C2065: db: необъявленный идентификатор
(71) : error C3861: ReadField: идентификатор не найден
(31) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
по строкам:
31 строка:
Код:
// считываем выбор пользователя
ch = getch();
57 строка:
Код:
FILE *data = fopen( db, "wb" ); // открываем файл на запись
71 строка:
Код:
ReadField("Model: ", &(scan.model)); // Считываем модель
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"