Тема: Робота з структурою С++
Доброго дня! Підкажіть як зробити так, щоб можна було вводити дані(на початок/в кінець) і видаляти записи з структури декілька разів... ніяк це не получається
#include<locale.h>
#include<stdio.h>
#include<conio.h>
#include<fstream>
#include <memory.h>
#include<iostream>
#include<string.h>
#include<windows.h>
#define r 100
#define STUD struct Zodiak
#define SSTUD sizeof(struct Zodiak)
struct Zodiak
{
char lastname[15];
char firstname[15];
int date[3];
char znak[10];
char stat[8];
char adresa[30];
};
Zodiak rt[r];
//Function;
void print(int i);
void fprint(int i,FILE *fo);
void fscan(int i,FILE *fo);
void print1(int i);
int main(void){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
FILE *fo;
int i,j,start=0,end=0,basic=0,count=0,tmp;
char str[15];
setlocale(0,"");
char eoj;
for(eoj=0;!eoj;)
{
printf("1 – Створити БД 'New Base' і додати записи\n");
printf("2 – Відкрити існуючу БД\n");
printf("3 – Добавити записи(початок, кінець) \n");
printf("4 – Показати все\n");
printf("5 – Видалення\n");
printf("6 – Сортування по даті народження\n");
printf("7– Жінки водолії\n");
printf("8– Список знаків зодіаку стихії Земля(Telez,Diva,Kozerig)\n");
printf("9– Список адрес, де проживають чоловіки народжені у травні\n");
printf("0 – Вихiд\n");
int choose;
printf("Введiть > ");
scanf("%d",&choose);
switch(choose) {
case 1:system("cls");
printf("Скiльки записiв ви бажаєте добавити?->");
scanf("%d",&basic);
for(i=0;i<basic;i++)
{
print(i);system("cls");
}
fo=fopen("Database.txt","w");
for(i=0;i<basic;i++){
fprint(i,fo);
}
fclose(fo);
count=basic+start+end;
break;
case 2:system("cls");
number1:printf("Скільки записів ви хочете використати?->");
scanf("%d",&basic);
fo=fopen("Base.txt","r");
for(i=0;i<basic;i++)
{ fscan(i,fo); }
fclose(fo);
fo=fopen("Database.txt","w");
for(i=0;i<basic;i++)
{fprint(i,fo);}
fclose(fo);
if(basic>27){printf("\nПомилка! У базі даних тільки 27 записів.\n");
goto number1;}
else {printf("\nЗчитано %d записів\n",basic); count=basic+start+end;}
system("pause");
system("cls");
break;
case 3:system("cls");
for(;;)
{
printf("\n1.Початок \n2.Кiнець\n0.Exit\n");
int c;
scanf("%d",&c);
switch (c)
{
case 1:
printf("Скiльки записiв ви бажаєте добавити?->");
scanf("%d",&start);
fo=fopen("Add.txt","w");
for(i=0;i<start;i++){
print(i);
fprint(i,fo);}
fclose(fo);
fo=fopen("Database.txt","r");
for(i=0;i<basic+end;i++)
{
fscan(i,fo);
}
fclose(fo);
fo=fopen("Add.txt","a");
for(i=0;i<basic+end;i++){
fprint(i,fo);
}
fclose(fo);
count=basic+start+end;
remove("Database.txt"); rename("Add.txt","Database.txt");
system("cls");
break;
case 2:
printf("Скiльки записiв ви бажаєте добавити?->");
scanf("%d",&end);
for(int i=0;i<end;i++)
{
print(i);
}
fo=fopen("Database.txt","a");
for(i=0;i<end;i++){
fprint(i,fo);
}
fclose(fo);
count=basic+start+end;
break;
default:printf("!ooooooooog!");
break;
}
if(c==0) break;
}system("cls");
break;
case 4:
fo=fopen("Database.txt","r");
for(i=0;i<count;i++)
{
fscan(i,fo);
}
fclose(fo);
for(i=0;i<count;i++)
{
print1(i);
}
fo=fopen("Rezultat.txt","a");
fprintf(fo,"\nВсі записи\n");
for(i=0;i<count;i++)
{
fprint(i,fo);
}
fclose(fo);
system("pause");
system("cls");
break;
case 5:printf("Введiть прiзвище потрiбної людини: "); scanf("%s",&str);
fo=fopen("Database.txt","r");
for(i=0;i<count;i++)
{
fscan(i,fo);
if(_stricmp(str,rt[i].lastname)>0||_stricmp(str,rt[i].lastname)<0){
print1(i);}
}
fclose(fo);
fo=fopen("Delete.txt","w");
for(i=0;i<count;i++){
if(_stricmp(str,rt[i].lastname)>0||_stricmp(str,rt[i].lastname)<0){
fprint(i,fo);
}
}
count=count-1;
fclose(fo);
remove("Database.txt"); rename("Delete.txt","Database.txt");
fo=fopen("Rezultat.txt","a");
fprintf(fo,"\nЗаписи після видалення\n");
for(i=0;i<count;i++){
if(_stricmp(str,rt[i].lastname)>0||_stricmp(str,rt[i].lastname)<0){
fprint(i,fo);
}}
fclose(fo);
system("pause");
system("cls");
break;
case 6:system("cls");
fo=fopen("Database.txt","r");
for(i=0;i<count;i++)
{
fscan(i,fo);
}
fclose(fo);
for(tmp=0;tmp<count-1;tmp++)
for(i=0;i<count-1-tmp;i++)
{
if(rt[i].date[2]<rt[i+1].date[2])
{
rt[count]=rt[i];
rt[i]=rt[i+1];
rt[i+1]=rt[count];
}
if(rt[i].date[2]==rt[i+1].date[2])
{if(rt[i].date[1]<rt[i+1].date[1])
{
rt[count]=rt[i];
rt[i]=rt[i+1];
rt[i+1]=rt[count];
}
if(rt[i].date[1]==rt[i+1].date[1])
if(rt[i].date[0]<rt[i+1].date[0]){
rt[count]=rt[i];
rt[i]=rt[i+1];
rt[i+1]=rt[count];}
}
}
printf("\nСортування завершено успішно!\n");
fo=fopen("Rezultat.txt","a");
fprintf(fo,"\nЗаписи після сортування\n");
for(i=0;i<count;i++)
{
fprint(i,fo);
}
fclose(fo);
printf("\nЗаписи після сортування\n");
for(int i=0;i<count;i++)
{ print1(i);}
system("pause");
system("cls");
break;
case 7:system("cls");
fo=fopen("Database.txt","r");
for(i=0;i<count;i++)
{
fscan(i,fo);
}
fclose(fo);
printf("\nЖінки Водолії\n");
for(int i=0;i<count;i++)
{
if((_stricmp("Водолій",rt[i].znak)==0)&&(_stricmp("Ж",rt[i].stat)==0)){
print1(i);}
}
fo=fopen("Rezultat.txt","a");
fprintf(fo,"\nЖінки-водолії\n");
for(int i=0;i<count;i++)
{
if((_stricmp("Водолій",rt[i].znak)==0)&&(_stricmp("Ж",rt[i].stat)==0)){
fprint(i,fo);
}}
fclose(fo);
system("pause");
system("cls");
break;
case 8:system("cls");
fo=fopen("Database.txt","r");
for(i=0;i<count;i++)
{
fscan(i,fo);
}
fclose(fo);
printf("\nЗнаки зодіаку стихії Земля\n");
for(int i=0;i<count;i++){
if((_stricmp("Козеріг",rt[i].znak)==0)||(_stricmp("Телець",rt[i].znak)==0)||(_stricmp("Діва",rt[i].znak)==0)){
print1(i);}
}
fo=fopen("Rezultat.txt","a");
fprintf(fo,"\nЗнаки зодіаку стихії Земля\n");
for(int i=0;i<count;i++)
{
if((_stricmp("Козеріг",rt[i].znak)==0)||(_stricmp("Телець",rt[i].znak)==0)||(_stricmp("Діва",rt[i].znak)==0)){
fprint(i,fo);
}}
fclose(fo);
system("pause");
system("cls");
break;
case 9:system("cls");
fo=fopen("Database.txt","r");
for(i=0;i<count;i++)
{
fscan(i,fo);
}
fclose(fo);
printf("\nЧоловіки, народжені у травні\n");
for(int i=0;i<count;i++){
if((_stricmp("Ч",rt[i].stat)==0)&&(rt[i].date[1]==5)){
printf("|%10s |",rt[i].lastname);
printf("%10s |",rt[i].firstname);
printf("%10s |\n",rt[i].adresa);}
}
fo=fopen("Rezultat.txt","a");
fprintf(fo,"\nЧоловіки, народжені у травні\n");
for(int i=0;i<count;i++){
if((_stricmp("Ч",rt[i].stat)==0)&&(rt[i].date[1]==5)){
fprint(i,fo);
}}
fclose(fo);
system("pause");
system("cls");
break;
default: printf("\nПомилка!! Зробіть правильний вибір(1-9)\n");
break;
}
if (choose) {
getch();}
if(choose==0)break;
}
return 0; }
void print(int i)
{
printf("Прiзвище: "); scanf("%s",rt[i].lastname);
printf("Iм`я: ");scanf("%s",rt[i].firstname);
door:printf("Введiть дату народження(ДД ММ РРРР): ");
for(int j=0;j<3;j++){
scanf("%d",&(rt[i].date[j]));}
if((rt[i].date[0]>31)||(rt[i].date[0]<1)||(rt[i].date[1]>12)||(rt[i].date[1]<1)||(rt[i].date[2]>2016)||(rt[i].date[2]<1945)){
printf("Некоректно введена дата!!!\n");
goto door;}
printf("Знак зодiаку: "); scanf("%s",rt[i].znak);
printf("Стать(Ч,Ж): "); scanf("%s",rt[i].stat);
printf("Адреса: "); scanf("%s",rt[i].adresa);
}
void fprint(int i,FILE *fo)
{
fprintf(fo,"%s ",rt[i].lastname);
fprintf(fo,"%s ",rt[i].firstname);
for(int j=0;j<3;j++){
fprintf(fo,"%d ",rt[i].date[j]);}
fprintf(fo,"%s ",rt[i].znak);
fprintf(fo,"%s ",rt[i].stat);
fprintf(fo,"%s \n",rt[i].adresa);
}
void fscan(int i,FILE *fo)
{
fscanf(fo,"%s ",rt[i].lastname);
fscanf(fo,"%s ",rt[i].firstname);
for(int j=0;j<3;j++){
fscanf(fo,"%d ",&(rt[i].date[j]));}
fscanf(fo,"%s ",rt[i].znak);
fscanf(fo,"%s ",rt[i].stat);
fscanf(fo,"%s ",rt[i].adresa);
}
void print1(int i)
{
printf("|%10s |",rt[i].lastname);
printf("%10s |",rt[i].firstname);
for(int j=0;j<3;j++){
printf("%1d ",rt[i].date[j]);}
printf("|%9s |",rt[i].znak);
printf("%6s |",rt[i].stat);
printf("%10s |\n",rt[i].adresa);
}