Тема: Розробити програму яку забезпечує опрацювання структур даних
Розробити програму яку забезпечує опрацювання структур даних.
Забезпечити виконання таких операцій:
• додавання нового елементу;
• пошук елементу за значенням полів;
• послідовний перегляд елементів;
• модифікація значень полів елемену;
• видалення елементу;
• сортування за значеннями полів.
Структура: Книга (назва, автор, видавництво, рік, кількість сторінок).
ось що поки вийшло
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<fcntl.h>
#include <stdlib.h>
#define maxCountOfRecord 20
typedef struct library{
char surname[10];
char title[15];
char publish[15];
int pnum;
int year;
}lb;
int main(void) {
int count;
int i = 0;
int flag = 1;
while(flag){
lb lib[maxCountOfRecord];
info(2);
count = rDB(&lib);
lib[count].pnum=0;
lb selected[maxCountOfRecord];
int mod = getch()-48;
switch(mod){
case 1:
display(&lib, count, 1);
break;
case 2:
count = search(massage1(), &lib, &selected, count);
display(&selected, count, 1);
break;
case 3:
newRecord();
break;
case 9: system("@cls||clear"); break;
case 0: flag = 0; break;
}
}
}
void display(lb lib[], int count, int mod){
info(1);
int i = 0;
int flag= 1;
while(flag){
printf("\n %s %s %s %d %d", lib[i].surname, lib[i].title, lib[i].publish, lib[i].pnum, lib[i].year);
int next;
switch(mod){
case 1:{
next = getch()-48;
switch(next){
case 0: flag = 0;break;
case 1: if (i>0)i--;
else error(1);
break;
case 2: if((i+1)<count)
i++;
else
error(2);
break;
case 3: system("@cls||clear");
display(lib, count, 0);
flag = 0;break;
case 4: flag = 0;
changeRecord(&lib[i], lib);
break;
case 5: flag = 0;
deleteRecord(lib,i);
break;
case 9: info(1); i = 0; break;
default:error(0);break;
}
break;}
default: if((i+1)<count)i++;
else flag = 0;
break;
}
}
printf("\n");
}
int rDB(lb **p){
lb l[maxCountOfRecord];
int i = 0;
FILE *f2 = fopen("d1.txt","rb");
long count= filelength(fileno(f2));
count /=sizeof(lb);
while(i<count){
lb fp1;
fread(&*(p+8*i), sizeof(lb), 1, f2);
i++;
}
fclose(f2);
return count;
}
int search(int mod, lb lib[], lb result[],int size){
int count = 0;
int i =0;
char l[15] = "";
char *key= &l;
massage2(key);
switch(mod){
case 1:
while (i<size){
if (!strcmp(lib[i].surname, key)){
result[count] = lib[i];
count++;
}
i++;
}
break;
case 2:
while (i<size){
if (!strcmp(lib[i].title, key)){
result[count] = lib[i];
count++;
}
i++;
}
break;
case 3:
while (i<size){
char j[15];
char *pnum = &j;
itoa(lib[i].pnum, pnum, 10);
if (!strcmp(pnum, key)){
result[count] = lib[i];
count++;
}
i++;
}
break;
default: error(0); break;
}
return count;
}
void inputRecord(lb *library){
printf("\nEnter surname\n");
scanf("%s", &library->surname);
printf("Enter title\n");
scanf("%s", &library->title);
printf("Enter publish\n");
scanf("%d", &library->publish);
printf("Enter pnum\n");
scanf("%d", &library->pnum);
printf("Enter year\n");
scanf("%d", &library->year);
}
void newRecord(){
lb library;
inputRecord(&library);
writeRecord(&library,1);
}
void writeRecord(lb *library, int mod){
FILE *f2;
if(mod==0)f2 = fopen("d1.txt","wb");
else{
f2 = fopen("d1.txt","ab");
fwrite(library, sizeof(lb),1, f2);}
fflush(f2);
fclose(f2);
}
void changeRecord(lb *library, lb lib[]){
modify(library, lib, -1);
}
void deleteRecord(lb lib[], int deleted){
lb library;
modify(&library, lib, deleted);
}
void modify(lb *library, lb lib[], int deleted){
if(!(deleted+1))
inputRecord(library);
int size=0;
while(lib[size].pnum>0){
size++;
}
int i=0;
writeRecord(&lib[0],0);
while(i<size){
if(!(i==deleted))
writeRecord(&lib[i],1);
i++;
}
}
void error(int mod){
switch(mod){
case 0:printf("Input correct data\n");break;
case 1:printf("It's a first record\n"); break;
case 2:printf("It's a last record\n"); break;
}
}
int massage1(){
puts("\nChoose search mode");
int mod = getch()-48;
return mod;
}
void massage2(char *key){
puts("Input key");
char line;
scanf("%s", &line);
strcpy(key, &line);
}
void info(int mod){
switch(mod){
case 1: printf("\nPress 1 to previous record, 2 - next, 3 - get all, 0 - exit, 9 - info\n 4 - to modify, 5 - to delete\n"); break;
case 2: printf("Press 1 to get records, 2 to search, 3 - new record, 9 - clean, 0 - exit\n"); break;
}
}
проблема в тому, шо не можу толком зробити сортування і до того ж програма може видавати якісь неточності або помилки вже під час її запуску, тобто вже під час пошуку елементу чи його модифікації