Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h> //#include <windows.h>
const int l name = 30;
char name[l_name + 1];
int birth year;
float pay;
Man read data();
int append2binfilet (const Man &man, const char* filename);
int print from bin(const char * filename);
int main()
{
bool contin;
char y n[2];
char filename[] = "dbase.bin";
do
{
contin = false;
if (append2binfile(read data(), filename)!= 0)
{
puts(" Ошибка при записи в файл ");
return 0;
}
puts(" Продолжить (у/n)?”);
gets(y i);
if ((y n[0] == 'у')||(у n[0] == 'Y'))contin = true;
}
while (contin); print from bin(fi1ename);
return 0;
}
int append2binfile(const Man &man, const char* filename)
{
FILE *fout;
if ((fout-fopen(filename, "ab"))NULL) return 1;
int success = fwrite(&man, sizeof(man), 1, fout), fclose(fout);
if (success == 1) return 0;
else return 2;
}
int print from_bin(const char * filename)
{
int num; Man man; FILE *f;
if ((f = fopenCfilename, "rb")) == NULL) return 1;
fseef((f. 0. SEEKEND);
int n record - ftell(f) / sizeof (man);
while (true)
{
puts("Введите номер записи или -1; ");
scanf("&i", &num);
if (num < 0 || num >= n record) break;
fseek(f. num * sizeof(man). SEEK SET);
fread(&man, sizeof(man), 1, f);
// CharToOem(man,name, man,name);
printf("%30s%5i%10,2f\n, man.name, man.birth year. man.pay);
return 0;
}
Man read_data()
{
Man man;
char buf[80];
char name[l_name + 1];
puts("Введите фамилию И.О. ");
gets(name);
if (strlen(name) < 1_name)
for (int i = strlen(name); i < l name; i++)
name[l_name] = 0;
// OemToChar(name. name);
strncpy(man.name. name. l_ name + 1);
do
{
puts("Введите год рождения “);
gets(buf)
while ((man.birth_year = atoi(buf)) ==0);
do
{
puts(“Bвeдитe оклад ");
gets(buf);
}
while (!(man.pay =atof(buf)));
return man;
}
}
}
В функции ввода read data предусмотрено заполнение пробелами оставшейся части строковой переменной паше, чтобы формат имени был идентичен формату ввода в текстовом файле.
Следует обратить внимание на то, как в этой функции выполняется проверка правильности ввода числовой информации. Чтение выполняется в буферную строку, которая затем преобразуется с помощью функций atoi () и atof () в числа. Если функции возвращают 0, преобразование выполнить не удалось (например, вместо цифр были введены буквы), и информация запрашивается повторно. Условие повторения циклов 3 и 4 записано в двух разных вариантах, чтобы вы сами могли оценить, какой из них вам более понятен (профессионалы предпочли бы второй, более лаконичный вариант).
Структура, в отличие от массива, может быть возвращаемым значением функции. В этой программе структура передавалась в функцию по константной ссылке; можно передавать ее и по значению, что несколько хуже, потому что в этом случае затрачивается время на копирование и требуется дополнительное место в стеке параметров.
Дата публикования: 2015-10-09; Прочитано: 272 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!