Некорректно работает база данных фонотеки - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д