Некорректно работает база данных фонотеки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

у меня не работает почему то эта база данных?кто знает? может прогу можно как то улучшить?буду премного благодарен!
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<graphics.h>
#include<stdlib.h>
#include<dos.h>
#include"graph.cpp"
 
void mainmenu();
void newbase();
void openbase();
void open();
void view();
void edit();
void add();
void del(int i, int j);
void find(int i, int j);
void sort(int i, int j);
void replace(int);
 
char namefile[30];
 
struct COLLECTION{char name[20],T[3],nzv[20],aut[20], sin[20];}
list[500], tmp;
 
char name[30],key, k;
int i, j, t, p, g;
FILE *f;

int main()
    {
    clrscr();
    graph();
    textmode(3);
    printf("Press any key...");getch();
    mainmenu();
    return 0;
    }

void mainmenu()
    {
    for(;;)
        {
        clrscr();
        printf("Welcome to Data Base \"Home CD Collection\"\n");
        printf("1. Open Base\n2. New Base\n3. Exit\n");
        key=getch();
        if (key=='1') {clrscr(); openbase();}
        if (key=='2') {clrscr(); newbase();}
        if (key=='3') break;
        }
    }

void newbase()
    {
    printf("New file: ");
    scanf("%s",namefile);
    clrscr();
    f=fopen(namefile,"w");
    if (f==NULL)
        {
        printf("Error!");
        getch();
        }
    else
        {
        printf("Ok! New file: %s",namefile);
        fclose(f);
        strcpy(name,namefile);
        getch();
        open();
        }
    }

void openbase()
    {
    printf("Enter name file: ");
    scanf("%s",namefile);
    clrscr();
    f=fopen(namefile,"r");
    if (f==NULL)
        {
        printf("Error!");
        getch();
        }
    else
        {
        printf("Ok! Open: %s",namefile);
        fclose(f);
        strcpy(name,namefile);
        getch();
        open();
        }
    }

void open()
    {
    for(;;)
        {
        clrscr();
        printf("Data Base: %s\n", name);
        printf("1. View\n2. Edit\n3. Add\n4. Delete\n5. Find\n6. Sort\n7. Exit\n");
        key=getch();
        if (key=='1') {clrscr(); view();}
        if (key=='2') {clrscr(); edit();}
        if (key=='3') {clrscr(); add();}        
        if (key=='4') {clrscr(); del(i,j);}
        if (key=='5') {clrscr(); find(i,j);}
        if (key=='6') {clrscr(); sort(i,j);}
        if (key=='7') break;
        }
    }

void view()
    {
    f=fopen(name,"r");
        j=0;
        printf("%2s %18s %5s %23s %12s %13s\n\n", "ID", "CD Name","Track", "Song","Author","Singer");
        while(!feof(f))
            {
            fscanf(f,"%s %s %s %s %s",list[j].name,list[j].T,list[j].nzv,list[j].aut,list[j].sin);
            j++;
            }
        j--;
        p=0;
        for (i=0; i<j; i++)
            {
            printf("%2u %18s %3s %25s %12s %13s\n",i+1,list[i].name,list[i].T,list[i].nzv,list[i].aut,list[i].sin);
            p++;
            if (p==10)
                {
                p=0; getch();
                }
            }
        getch();
        fclose(f);
    }

void edit()
    {
    f=fopen(name,"r");
    j=0;
    while(!feof(f))
        {
        fscanf(f,"%s %s %s %s %s",list[j].name,list[j].T,list[j].nzv,list[j].aut,list[j].sin);
        j++;
        }
    j--;
    fclose(f);
    printf("ID record: ");scanf("%u",&t);t--;
    printf("OLD:\n");
    printf("CD Name : \t\t\t%s\n", list[t].name);
    printf("Track : \t%s\n", list[t].T);
    printf("Song : \t%s\n", list[t].nzv);
    printf("Author : \t%s\n", list[t].aut);
    printf("Singer : \t\t%s\n", list[t].sin);
    printf("\nNEW:\n");
    printf("CD Name : \t\t\t");scanf("%s",list[t].name);
    printf("Track : \t");scanf("%s",list[t].T);
    printf("Song : \t");scanf("%s",list[t].nzv);
    printf("Author : \t");scanf("%s",list[t].aut);
    printf("Singer : \t\t");scanf("%s",list[t].sin);
    f=fopen(name,"w");
    for (i=0; i<j; i++)
    fprintf(f,"%s %s %s %s %s\n\n",list[i].name,list[i].T,list[i].nzv,list[i].aut,list[i].sin);
    fclose(f);
    }

void add()
    {
    printf("CD Name: \t\t");scanf("%s",tmp.name);
    printf("Track: \t");scanf("%s",tmp.T);
    printf("Song: \t\t");scanf("%s",tmp.nzv);
    printf("Author: \t\t");scanf("%s",tmp.aut);
    printf("Singer: \t\t");scanf("%s",tmp.sin);
    f=fopen(name,"a");
    fprintf(f,"%s %s %s %s %s\n",tmp.name,tmp.T,tmp.nzv,tmp.aut,tmp.sin);
    fclose(f);
    }

void del(int i, int j)
    {
    f=fopen(name,"r");
        j=0;
        while(!feof(f))
            {
            fscanf(f,"%s %s %s %s %s",list[j].name,list[j].T,list[j].nzv,list[j].aut,list[j].sin);
            j++;
            }
        j--;
        fclose(f);
        printf("ID record: ");scanf("%u",&t);t--;
        f=fopen(name,"w");
        for (i=0; i<t; i++)
        fprintf(f,"%s %s %s %s %s\n",list[i].name,list[i].T,list[i].nzv,list[i].aut,list[i].sin);
        for (i=(t+1); i<j; i++)
        fprintf(f,"%s %s %s %s %s\n",list[i].name,list[i].T,list[i].nzv,list[i].aut,list[i].sin);
        fclose(f);
        printf("Delete... Ok!");
        getch();
    }

void find(int i, int j)
    {
    printf("Enter find record:\n");
    printf("CD Name : \t\t");scanf("%s",tmp.name);
    printf("Track : \t");scanf("%s",tmp.T);
    printf("Song : \t\t");scanf("%s",tmp.nzv);
    printf("Author : \t\t");scanf("%s",tmp.aut);
    printf("Singer : \t\t");scanf("%s",tmp.sin);
    f=fopen(name,"r");
    j=0;
    while(!feof(f))
        {
        fscanf(f,"%s %s %s %s %s",list[j].name,list[j].T,list[j].nzv,list[j].aut,list[j].sin);
        j++;
        }
    j--;
    fclose(f);
    clrscr();
    for (i=0; i<j; i++)
    if ((strcmp(list[i].name,tmp.name)==0)||(strcmp(list[i].T,tmp.T)==0)||(strcmp(list[i].nzv,
              tmp.nzv)==0)||(strcmp(list[i].aut,tmp.aut)==0)||(strcmp(list[i].sin,tmp.sin)==0))
    printf("%3u %15s %15s %20s %9s %5s\n",i+1,list[i].name,list[i].T,list[i].nzv,list[i].aut,list[i].sin);
    getch();
    }

void sort(int i, int j)
    {
    printf("Vibereti pole:\n");
    printf("1.CD Name  2.Track  3.Song  4.Author 5.Singer\n");
    k=getch();
    if ((k!='1')&&(k!='2')&&(k!='3')&&(k!='4')&&(k!='5'))
        {
        printf("Takogo polya net!");
        getch();
        }
    else
        {
        f=fopen(name,"r");
        j=0;
        while(!feof(f))
            {
            fscanf(f,"%s %s %s %s %s",list[j].name,list[j].T,list[j].nzv,list[j].aut,list[j].sin);
            j++;
            }
        j--;
        fclose(f);
        switch (k)
            {
            case '1': for(g=0; g<j; g++)
                for(i=0; i<(j-1); i++)
                    if (strcmp(list[i].name,list[i+1].name)<0) replace(i);
                        break;
            case '2': for(g=0; g<j; g++)
                for(i=0; i<(j-1); i++)
                    if (strcmp(list[i].T,list[i+1].T)<0) replace(i);
                        break;
            case '3': for(g=0; g<j; g++)
                for(i=0; i<(j-1); i++)
                    if (strcmp(list[i].nzv,list[i+1].nzv)<0) replace(i);
                        break;
            case '4': for(g=0; g<j; g++)
                for(i=0; i<(j-1); i++)
                    if (strcmp(list[i].aut,list[i+1].aut)<0) replace(i);
                        break;
            case '5': for(g=0; g<j; g++)
                for(i=0; i<(j-1); i++)
                    if (strcmp(list[i].sin,list[i+1].sin)<0) replace(i);
                        break;
            }
        f=fopen(name,"w");
        for (i=0; i<j; i++)
            fprintf(f,"%s %s %s %s %s\n",list[i].name,list[i].T,list[i].nzv,list[i].aut,list[i].sin);
        fclose(f);
        }
    }

void replace(int x)
    {
    strcpy(tmp.name,list[x].name);
    strcpy(tmp.T,list[x].T);
    strcpy(tmp.nzv,list[x].nzv);
    strcpy(tmp.aut,list[x].aut);
    strcpy(tmp.sin,list[x].sin);
    strcpy(list[x].name,list[x+1].name);
    strcpy(list[x].T,list[x+1].T);
    strcpy(list[x].nzv,list[x+1].nzv);
    strcpy(list[x].aut,list[x+1].aut);
    strcpy(list[x].sin,list[x+1].sin);
    strcpy(list[x+1].name,tmp.name);
    strcpy(list[x+1].T,tmp.T);
    strcpy(list[x+1].nzv,tmp.nzv);
    strcpy(list[x+1].aut,tmp.aut);
    strcpy(list[x+1].sin,tmp.sin);
    }
 
Файл графики – “GRAPH.CPP”
#include <iostream.h>
#include <graphics.h>
#include <dos.h>
#include <conio.h>
#include <stdio.h>
void graph()
    {
    int x,y,a,b,c;
    x=100; y=400; a=1; b=150; c=400;
 
            /* request auto detection */
    int gdriver = DETECT, gmode, errorcode;
 
    /* initialize graphics mode */
    initgraph(&gdriver, &gmode, "");
 
    /* read result of initialization */
    errorcode = graphresult();
 
    if (errorcode != grOk)  /* an error occurred */
        {
         printf("Graphics error: %s\n", grapherrormsg(errorcode));
         printf("Press any key to halt:");
         getch();
             /* return with error code */
        }
    setcolor(RED);
    settextstyle(3,0,3);
    outtextxy(50,50,"HOME CD COLLECTION");
    outtextxy(10,460,"VIPOLNIL: Tselischev O.V.");
    while (x<700 && y>-70 && a<2000 && b<700 && c>-70)
    {
         setbkcolor(0);
         setfillstyle(SOLID_FILL,9);
         fillellipse(x,y,40,40);
         setfillstyle(SOLID_FILL,0);
         fillellipse(x,y,8,8);
         setfillstyle(SOLID_FILL,2);
         sector(x,y,(88+a)%360,(92+a)%360,40,40);
         sector(x,y,(223+a)%360,(227+a)%360,40,40);
         sector(x,y,(313+a)%360,(317+a)%360,40,40);
         sector(x,y,(268+a)%360,(272+a)%360,40,40);
         sector(x,y,(43+a)%360,(47+a)%360,40,40);
         sector(x,y,(133+a)%360,(137+a)%360,40,40);
         setfillstyle(SOLID_FILL,5);
         sector(x,y,(28+a)%360,(32+a)%360,40,40);
         sector(x,y,(58+a)%360,(62+a)%360,40,40);
         sector(x,y,(118+a)%360,(122+a)%360,40,40);
         sector(x,y,(148+a)%360,(152+a)%360,40,40);
         sector(x,y,(208+a)%360,(212+a)%360,40,40);
         sector(x,y,(238+a)%360,(242+a)%360,40,40);
         sector(x,y,(298+a)%360,(302+a)%360,40,40);
         sector(x,y,(328+a)%360,(332+a)%360,40,40);
         setfillstyle(SOLID_FILL,0);
         fillellipse(x,y,8,8);
         setcolor(RED);
         settextstyle(3, 0, 10);
         outtextxy(b,c,"<= MY CD");
 
         delay (1);
 
         setcolor(0);
         fillellipse(x,y,40,40);
         sector(x,y,(88+a)%360,(92+a)%360,40,40);
         sector(x,y,(223+a)%360,(227+a)%360,40,40);
         sector(x,y,(313+a)%360,(317+a)%360,40,40);
         sector(x,y,(268+a)%360,(272+a)%360,40,40);
         sector(x,y,(43+a)%360,(47+a)%360,40,40);
         sector(x,y,(133+a)%360,(137+a)%360,40,40);
         sector(x,y,(28+a)%360,(32+a)%360,40,40);
         sector(x,y,(58+a)%360,(62+a)%360,40,40);
         sector(x,y,(118+a)%360,(122+a)%360,40,40);
         sector(x,y,(148+a)%360,(152+a)%360,40,40);
         sector(x,y,(208+a)%360,(212+a)%360,40,40);
         sector(x,y,(238+a)%360,(242+a)%360,40,40);
         sector(x,y,(298+a)%360,(302+a)%360,40,40);
         sector(x,y,(328+a)%360,(332+a)%360,40,40);
         outtextxy(b,c,"<= MY CD");
         x++;y--;a=a+2;b++; c--;
         }
    closegraph();
    }
ИЛИ ПРЕДЛОЖИТЕ СВОЙ ВАРИАНТ!
ИЛИ ПРЕДЛОЖИТЕ СВОЙ ВАРИАНТ!

Решение задачи: «Некорректно работает база данных фонотеки»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
 
int getch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
 
typedef struct tagITEM
{
       char Surname[20], Name[20];
       int Age;
}      ITEM;
 
       ITEM Men[20];
       int Number;
       void Print( void )
{
       int i;
 
       printf(" N  Фамилия              Имя                                               Возраст\n");
       for (i = 0; i < Number; i ++)
       printf("%2i. %-20s %-20s %3i\n", i + 1, Men[i].Surname,
       Men[i].Name, Men[i].Age);
} 
       void Add( void )
{
       if (Number == 19)
  {
       fprintf(stderr, "Невозможно добавить еще один                 элемент\n");
       return;
  }
       printf("Введите фамилию > ");
       scanf("%s", Men[Number].Surname);
       printf("Введите имя > ");
       scanf("%s", Men[Number].Name);
       printf("Введите возраст > ");
       scanf("%i", &Men[Number].Age);
 
       Number ++;
} 
      void Del( void )
{
       int i;
 
      Print();
      printf("Введите номер удаляемого элемента > ");
      scanf("%i", &i);
      if (i < 1 || i > Number)
  {
      fprintf(stderr, "Элемент с номером %i не                              существует\n", i);
      return;
  }
 
     for (i --; i < Number - 1; i ++){
     Men[i] = Men[i + 1];
}
     Number --;
} 
    void Save( void )
{
     FILE *F;
     int i;
 
     if ((F = fopen("r.txt", "wt")) == NULL)
  {
     fprintf(stderr, "Невозможно открыть для записи              файл 'r.txt'\n");
    return;
  }
     fprintf(F, "%i\n", Number);
     for (i = 0; i < Number; i ++)
     fprintf(F, "%s\n%s\n%i\n", Men[i].Surname, Men[i].Name,      Men[i].Age);
 
     fclose(F);
} 
     void Load( void )
{
     FILE *F;
     int i;
 
     if ((F = fopen("r.txt", "rt")) == NULL)
  {
     fprintf(stderr, "Невозможно открыть для чтения               файл 'r.txt'\n");
     return;
  }
 
    fscanf(F, "%i", &Number);
    for (i = 0; i < Number; i ++)
    fscanf(F, "%s%s%i", Men[i].Surname, Men[i].Name,                 &Men[i].Age);
 
    fclose(F);
}
    void Sort( void )
{
    int i, j;
    ITEM Temp;
 
    for (j = Number - 1; j > 0; j --)
    for (i = 0; i < j; i ++)
    if (strcmp(Men[i].Surname, Men[i + 1].Surname) > 0)
      {
    Temp = Men[i];
    Men[i] = Men[i + 1];
    Men[i + 1] = Temp;
      }
} 
 
      int Menu( void )
{
      int c = 0;
 
      while ((c < '0' || c > '7') && c != 27)
  {
      printf("0 : выход\n"
           "1 : добавить\n"
           "2 : сохранить\n"
           "3 : загрузить\n"
           "4 : вывести\n"
           "5 : упорядочить\n"
           "6 : удалить\n"
           "7 : удалить файл\n"
           ">");
       c = getch();
       printf("%c\n", c);
  }
       return c;
} 
 
void DelFile(void){
if(remove("r.txt")) {
printf("Не удалось удалить файл\n");
}
}
      int main( void )
{
      int Selection;
 
      Number = 0;
      while ((Selection = Menu()) != '0' && Selection != 27)
      switch (Selection)
    {
    case '1':
      Add();
      break;
    case '2':
      Save();
      break;
    case '3':
      Load();
      break;
    case '4':
      Print();
      break;
    case '5':
      Sort();
      break;
    case '6':
      Del();
      break;
    case '7':
      DelFile();
      break;
    }
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5