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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2009, 19:04   #1
aurora_87
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 16
По умолчанию Файл

Нужно создать файл, содержащий инфу о сотрудниках: табельный номер, ФИО, должность, дата рожд:день, мес, год;пол. Нужно:
а) обеспечить ввод данных в файл, проверяя корректность вводимых значений:
- таб. номер. в диап. от 1 до 999;
- таб. номер не должен повторяться;
- дата рождения должна быть корректной.
Ошибочные данные записывать в другой файл - файл ошибок, при ошибке выводить сообщение-предупреждение.
б) Упорядочить файл по табельному номеру.

Я сделала задачу с использованием светового меню, упорядочиваение файла работает, но он не проверяет на корректность и не записывает некорректно введенные структуры в файл ошибок. Место которое не работает я взяла в комментарий. Помогите пожалуйста исправить

мой код:

Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define n 5
FILE *fl;
FILE *g;

struct data

{

int den;
int mes;
int god;

};


struct sotr

{

int nom;
char fio[30];
char dolg[30];
struct data dat;
char pol[5];

}sot,sot1,temp,temp1;

struct oshibka

{

int nom;
char text[20];
char fio[30];
char dolg[30];
struct data dat;
char pol[5];
} osh;

void sozdanie()
{
int f,otv;

g=fopen("oshibka.dat","w");
if(g==NULL)

{
printf("Oshibka");
exit(1);

}

fl=fopen("sotr.dat","w");
if(fl==NULL)

{
printf("Oshibka");
exit(1);

}


do
{
printf("\nVvedite tabelnyj nomer sotrydnika:  ");
scanf("%d",&sot.nom);
fflush(stdin);
printf("\nVvedite FIO sotrydnika:  ");
gets(sot.fio);
fflush(stdin);
printf("\nVvedite dolgnost  ");
gets(sot.dolg);
printf("\nVvedite den rogdenia sotrydnika:  ");
scanf("%d",&sot.dat.den);
printf("\nVvedite mesyac rogdenia sotrydnika:  ");
scanf("%d",&sot.dat.mes);
printf("\nVvedite god rogdenia sotrydnika:  ");
scanf("%d",&sot.dat.god);
fflush(stdin);
printf("\nVvedite pol sotrydnika  ");
gets(sot.pol);

if (sot.nom<1||sot.nom>999)
  {
  printf("\nNekorrektno vveden nomer sotrudnika");
  strcpy(osh.text,"nekorrektnii nomer");
  f=1;
  }
/*else
{
fseek(fl,0L,SEEK_SET);
while(fread(&sot1,sizeof(sotr),1,fl)>0)
  if (sot1.nom==sot.nom)
    {
    printf("\nNekorrektno vveden nomer sotrudnika");
    strcpy(osh.text,"povtoryaucshiisa nomer");
    f=1;
    }

switch (sot.dat.mes)

{

case 1:case 3:case 5:case 7:case 8:case 10:case 12:
  if (sot.dat.den>31||sot.dat.den<1)
    f=1;break;

case 4:case 6:case 9:case 11:
  if (sot.dat.den>30||sot.dat.den<1)
    f=1;break;

case 2:
 { if (sot.dat.god%4==0)
    if (sot.dat.den<1||sot.dat.den>29)
      f=1;
  if (sot.dat.god%4!=0)
    if (sot.dat.den<1||sot.dat.den>28)
      f=1;}break;
 }
default: f=1;

}

*/
if (f==1)
  fwrite(&osh,sizeof(oshibka),1,g);
else
  fwrite(&sot,sizeof(sotr),1,fl);

printf("\nProdolgenie - lubaya klavisha");
printf("\nKonec - ESC");
otv=getch();
}
while(otv!=27);
fclose(fl);
}

void vivod()
{
fl=fopen("sotr.dat","r");
printf("\nnomer   FIO          dolgnost           Data rogdenia      pol   ");
while(fread(&sot,sizeof(sotr),1,fl)>0)
printf("\n\n%-8d%-13s%-19s%-5d%-5d%-9d%-5s",sot.nom,sot.fio,sot.dolg,sot.dat.den,sot.dat.mes,sot.dat.god,sot.pol);
fclose(fl);
getch();
}

void vivod_1()
{
g=fopen("oshibka.dat","r");
printf("\nnomer   FIO          dolgnost           Data rogdenia      pol   ");
while(fread(&osh,sizeof(oshibka),1,g)>0)
printf("\n\n%-8d%-13s%-19s%-5d%-5d%-9d%-5s",osh.nom,osh.fio,osh.dolg,osh.dat.den,osh.dat.mes,osh.dat.god,osh.pol);
fclose(g);
getch();
}

void sort()
{
fl=fopen("sotr.dat","r+");
while (fread(&sot,sizeof(sotr),1,fl)>0)
{
while(fread(&temp,sizeof(sotr),1,fl)>0)
if(sot.nom<temp.nom)
{
fseek(fl,-(2*sizeof(sotr)),SEEK_CUR);
temp1=sot;
sot=temp;
temp=temp1;
fseek(fl,(-sizeof(sotr)),SEEK_CUR);
fwrite(&sot,sizeof(sotr),1,fl);

}
}
fclose(fl);
vivod();
getch();
}



int menu (int uk)

{

char *men[n]={"Sozdanie faila","Prosmotr","Prosmotr faila oshibok","Sortirovka","Vihod"};
int extended, otv, pred, i;

textcolor(RED);
textbackground(GREEN);
clrscr();
for(i=0;i<n;i++)
{
gotoxy(15,10+i);
puts(men[i]);
}
do
{
textcolor(WHITE);
gotoxy(15,10+uk);
clreol();
puts(men[uk]);
pred=uk;
otv=getch();
extended=0;
if(!otv)extended=getch();
if(extended)
{
switch(extended)
{
case 72:uk--;break;
case 80:uk++;break;
}
if (uk<0) uk=n-1;
if (uk>n-1)uk=0;
textcolor(RED);
gotoxy(15,10+pred);
clreol();
puts(men[pred]);

}
}
while(otv!=13);
return uk;
}


void main()
{
int otv,ukaz=0;
while (ukaz!=n-1)
{
ukaz=menu(ukaz);
switch(ukaz)
{
case 0:clrscr();sozdanie();getch();break;
case 1:clrscr();vivod();getch();break;
case 2:clrscr();vivod_1();getch();break;
case 3:clrscr();sort();getch();break;
case 4:break;
}
}
}

Последний раз редактировалось Sazary; 17.06.2009 в 21:49.
aurora_87 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43
Файл F n1ce > Kuzia Паскаль, Turbo Pascal, PascalABC.NET 5 15.06.2009 16:12
Дан файл, содержащий текст на русском языке.Составить в алфавитном порядке список слов в файл. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2008 12:05
Как записать файл в файл программы? Хамяг Общие вопросы Delphi 2 02.11.2008 16:01
Как с поиощью hiew вставить в файл строчку, "раздвинуть" файл и вставить туда строчку? barand Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.06.2008 10:58