Всем привет! Делаю курсовую работу по теме "База Данных" на двусвязном списке.По условию требуется создать функцию которая выводит все товары с одинаковой датой поступления в магазин.Как реализовать эту функцию?
Код программы прилагаю
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <malloc.h>
#define charlenght 100
struct dllist
{
char jewname[charlenght];
char stonetype[charlenght];
float stoneweight;
int stonecount;
float weightkarat;
float cost;
char arive[charlenght];
struct dllist *sled;
struct dllist *pred;
};
struct dllist *head;
void addtolist();
void delinlist(int pos);
void printlist();
void sortList();
void searchInList();
void NameSumm();
void ArrivalDate();
int numb = 0;
void addtolist()
{
struct dllist *node = (struct dllist *)malloc(sizeof(struct dllist));
printf("Наименованние ювелирного изделия: ");
scanf("%s", &node->jewname);
printf("Тип камня: ");
scanf("%s", &node->stonetype);
printf("Дата поступления в магазин: ");
scanf("%s", &node->arive);
printf("Вес камня(в граммах): ");
scanf("%f", &node->stoneweight);
printf("Кол-во камней на изделии: ");
scanf("%d", &node->stonecount);
printf("Вес в карат: ");
scanf("%f", &node->weightkarat);
printf("Cтоимость(в гривнах): ");
scanf("%f", &node->cost);
numb++;
if (head == NULL)
{
node->sled = node;
node->pred = node;
head = node;
}
else
{
struct dllist *p = head;
for(int i = numb; i > 1; i--) p = p->sled;
p->pred->sled = node;
node->pred = p->pred;
node->sled = p;
p->pred = node;
}
printf("Позиция добавлена \n\n");
}
void delinlist(int pos)
{
if (head == NULL)
{
printf("Список пуст \n\n");
}
if (head == head->sled)
{
free(head);
head = NULL;
}
else
{
struct dllist *a = head;
for (int i = pos; i > 1; i--) a = a->sled;
if (a == head) head = a->sled;
a->pred->sled = a->sled;
a->sled->pred = a->pred;
free(a);
}
printf("Позиция удалена\n");
}
void printlist()
{
if (head==NULL) printf("Список пуст\n");
else
{
struct dllist *a = head;
printf("Позиции :\n ");
do
{
printf("Название юв. изделия: %s\n", a->jewname);
printf("Тип камня: %s\n", a->stonetype);
printf("Дата поступления в магазинн: %s\n", a->arive);
printf("Вес камня: %f грамм\n", a->stoneweight);
printf("Кол-во камней: %d\n", a->stonecount);
printf("Вес в карат: %f\n", a->weightkarat);
printf("Стоимость: %f гривен\n", a->cost);
a = a->sled;
}while(a != head);
}
}
void sortList()
{
struct dllist *a = head;
if(head == NULL)
{
printf("Список пуст\n");
}
else
{
float min,max;
int i;
printf("\nВведите ваш диапазон \n");
printf("Минимальная желаемая цена: ");
scanf("%f",&min);
printf("Максимальная желаемая цена: ");
scanf("%f",&max);
for (i = 0;i < numb;i++)
{
if( a->cost >= min && a->cost <=max )
{
printf("Имя позиции : %s Цена данной позиции : %f \n",a->jewname,a->cost);
}
else
{
printf("Предметов с ценной в данном диапазоне не обнаруженно \n");
}
}
}printf("\n\n");
}
void searchInList()
{
struct dllist *a = head;
char opt[charlenght];
if (head == NULL)
{
printf("Список пуст\n");
}
else
{
int i;
printf("\nВведите ваш критерий поиска: ");
scanf("%s",&opt);
printf("По вашему критерию найдены такие позиции: \n");
for (i = 0;i < numb; i++)
{
if(strcmp(a->jewname, opt)|| strcmp(a->stonetype,opt))
{
printf("Наименованние ювелирного изделия : %s || Тип камня ювелирного изделия %s \n",a->jewname,a->stonetype);
}
else
{
printf("Позиций с вашими критериями отсутствуют \n");
}
}
}
}
void NameSumm()
{
struct dllist *a = head;
char name[charlenght];
int summ=0;
int i;
if(head == NULL)
{
printf("Cписок пуст!\n");
}
else
{
printf("Введите название ювелирного изделия \n");
scanf("%s",name);
for(i = 0;i<numb;i++)
{
if(strcmp(a->jewname,name ) == 0)
{
summ+=a->cost;
}
else
{
printf("Изделий по данному имени не найдено\n");
}
}
printf("Стоимость всех изделий по введеному имени составляет: %d \n",summ);
}
}
void ArrivalDate()
{
int i;
char date = [charlenght];
struct dllist *a = head;
if(head == NULL)
{
printf("Список пуст!\n");
}
do
{
for(i = 0;i<numb;i++)
{
date[i]=a->arive;
}
}while(a != head);
printf("\n\n");
}
int main()
{
system("chcp 1251");
system("cls");
int pos, n;
do
{
printf("1. Добавить позицию\n");
printf("2. Удалить позицию\n");
printf("3. Вывести список всех позиций\n");
printf("4. Сортировка цен в заданном диапазоне\n");
printf("5. Поиск позиций по заданному описаннию\n");
printf("6. Сумма стоимости изделий по имени\n");
printf("7. Вывод изделий с одинаковой датой поступления\n");
printf("0. Завершить\n");
printf("Введите номер действия --> ");
scanf("%d", &n);
switch (n)
{
case 1:
addtolist();
break;
case 2:
printf("Введите порядковый номер данной позиции");
scanf("%s",&pos);
delinlist(pos);
break;
case 3:
printlist();
break;
case 4:
sortList();
break;
case 5:
searchInList();
break;
case 6:
NameSumm();
break;
case 7:
ArrivalDate();
break;
}
}while(n != 0);
}