Завдання: Сформувати файл “ЕХ”, що містить відомості про експорт товарів такого зразка: порядковий номер запису, найменування,
Завдання: Сформувати файл “А”, що містить інформацію про номери телефонів такого зразка: порядковий номер запису, прізвище власника, його ініціали, номер телефону, адреса. Вивести на екран прізвище та ініціали тих, які проживають по вул. Шевченка і їхній номер телефону містить цифру “3”. При вимозі користувача записати таблицю із цією інформацією у файл “В”. Забезпечити можливість поповнення файлу “А” з клавіатури, а також вилучення обраних по порядковому номеру записів. Після модифікації файлу “А” таблиця, яка виводиться на екран і файл “В” повинні оновлюватись автоматично. Забезпечити можливість відновлення попередньої версії модифікованого файлу.
#include <conio.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
struct stAbonent
{
char sPrizv[15];
char cInic1,cInic2;
char sPhone[14];
char sAddr[20];
stAbonent *next;
};
struct stAbonent *first,*rob;
int records;
void addrecord()
{
char string[100];
int i;
char q;
clrscr();
printf("\nПрiзвище: ");
scanf("%s",string);
strncpy(rob->sPrizv,string,14);
printf("Iнiцiали: ");
rob->cInic1=getch();
printf("%c.",rob->cInic1);
rob->cInic2=getch();
printf("%c.\n",rob->cInic2);
printf("Телефон: ");
scanf("%s",string);
strncpy(rob->sPhone,string,13);
printf("Адреса: ");
scanf("%s",string);
strncpy(rob->sAddr,string,19);
rob->next=new stAbonent;
rob=rob->next;
rob->next=NULL;
records++;
}
void deleterecord(void)
{
int del,i=0;
clrscr();
printf("Введiть номер запису для вилучення:");
scanf("%i",&del);
if ((del<1)||(del>records)) return;
if (del==1) {
first=first->next;
} else {
rob=first;
while(rob->next!=NULL)
{
i++;
if (i==(del-1)) {
rob->next=(rob->next)->next;
break;
}
rob=rob->next;
}
}
records--;
return;
}
void showrecords(void)
{
int i=0;
clrscr();
rob=first;
printf("%-4s %-16s %-4s %-15s %-21s\n","N",
"Прiзвище","Iнiц","Телефон","Адреса");
printf("-----------------------------------------------------");
while(rob->next!=NULL)
{
printf("\n%-4i %-16s %c.%c. %-15s %-21s", ++i,
rob->sPrizv,rob->cInic1,rob->cInic2,
rob->sPhone,rob->sAddr);
rob=rob->next;
}
records=i;
printf("\nНатиснiть будь-яку клавiшу для продовження...");
getch();
};
void showmatch(void)
{
int i=0,flag;
char *c;
FILE *out;
if ((out = fopen("B", "w+"))
== NULL)
{
printf("Cannot create file 'B'.\n");
return;
}
rob=first;
printf("%-4s %-16s %-4s %-15s %-21s\n","N","Прiзвище",
"Iнiц","Телефон","Aдреса");
printf("-----------------------------------------------------");
while(rob->next!=NULL)
{
i++;
flag=0;
c=rob->sPhone;
while (*c++)
if (*c=='3')
{
flag=1;
break;
}
if (flag==1) {
if (strcmp(rob->sAddr,"Шевченка")<0) {
flag=0;
}
}
if (flag==1) {
printf("\n%-4i %-16s %c.%c. %-15s %-21s",i,rob->sPrizv,
rob->cInic1, rob->cInic2,rob->sPhone,rob->sAddr);
fprintf(out,"%-3i %-15s %c %c %-14s %-20s\n",++i,
rob->sPrizv,rob->cInic1,rob->cInic2,
rob->sPhone,rob->sAddr);
};
rob=rob->next;
}
fclose(out);
};
int save_to_file(char *filename)
{
FILE *out;
int i=0;
if ((out = fopen(filename, "w+"))
== NULL)
{
printf("Cannot create file '%s'.\n",filename);
return 1;
}
rob=first;
while(rob->next!=NULL)
{
fprintf(out,"%-3i %-15s %c %c %-14s %-20s\n",++i,
rob->sPrizv,rob->cInic1,rob->cInic2,
rob->sPhone,rob->sAddr);
rob=rob->next;
}
fclose(out);
return 0;
}
int read_from_file(char *filename)
{
FILE *in;
int i;
if ((in = fopen(filename, "r"))
== NULL)
{
printf("Cannot open file '%s'.\n",filename);
return 1;
}
records=0;
rob=first;
while(!feof(in))
{
fscanf(in,"%i %15s %c %c %14s %20s\n",&i,rob->sPrizv,
&rob->cInic1,&rob->cInic2,rob->sPhone,rob->sAddr);
records++;
if (rob->next==NULL) {
rob->next= new stAbonent;
rob=rob->next;
rob->next=NULL;
} else {
rob=rob->next;
}
}
rob->next=NULL;
fclose(in);
return 0;
}
void main (void)
{
char c;
//create an empty list
records=0;
first = new stAbonent;
rob=first;
rob->next=NULL;
//read saved database
read_from_file("A");
//create backup copy
save_to_file("A.BAK");
do{
//show menu
clrscr();
printf("[ESC] - Вихiд\n");
printf("[ 1 ] - Додaти запис\n");
printf("[ 2 ] - Вилучити запис\n");
printf("[ 3 ] - Показати записи\n");
printf("[ 4 ] - Вiдмiнити останню дiю\n");
printf("------------------------\n");
printf("В базi записiв: %i\n\n",records);
showmatch();
c=getch();
switch (c)
{
case '1': {
save_to_file("A.BAK"); //create a backup copy
addrecord();
save_to_file("A");
break;
}
case '2': {
save_to_file("A.BAK"); //create a backup copy
deleterecord();
save_to_file("A");
break;
}
case '3': {
showrecords();
break;
}
case '4': {
//restore from backup
read_from_file("A.BAK");
save_to_file("A");
break;
}
}
}while(c!=0x1B);
}
Вміст файлу “А”
1 Мельничук Р В 203178 Шевченка,21
2 Будуркевич А О 435345 Чорновoла,12
3 Мельниченкo А А 453455 Вовчинецька,225
4 Ющенко Е T 566545 Тичини,11
5 Рондиль С Р 645645 Донцова,12
6 Iваночко Й П 648781 Симоненка,5
7 Козлюк I А 564564 Коновальця,45
8 Чорнописький Н М 264644 Бандери,1
9 Пiдпiльний Г М 541111 Прутська,11
10 Босий I А 232323 Шевченка,12
11 Мартинов Е Н 321331 Мазепи,243a
12 Падалкiн Й К 132323 Франка,11,кв.12
13 Козлодоев С Г 564565 Шевченка,123
Вміст файлу “В”
1 Мельничук Р В 203178 Шевченка,21
10 Босий I А 232323 Шевченка,12