Разработать программу учета покупок ювелирного магазина - C (СИ)
Формулировка задачи:
Помогите исправить программу!!!
Задание:
Разработать программу учета покупок ювелирного магазина. данные о покупках хранить в виде массива структур. Итоговая информация должна выводиться на экран в виде таблицы, отсортированной по стоимости ювелирного изделия.#include <iostream>
#include <stdio.h>
const int n = 10;
int size = 0;
typedef struct YuShop{
char name[n];// наименование изделия
double cena;// цена
char prod[n];// продавец
char pokup[n];// покупатель
int data[3];// дата покупки
}SHOP;
SHOP sh[100]; // Оглашение масива структур
void input(int size) {
for(int i = 0; i < size; i++) {
do {
printf("\n№%d Nazvanie tovara: ", i + 1);
scanf("%s", &sh[i].name);
}while(!strcmp(sh[i].name, ""));// выполняется пока строчка не пуста
printf("\nCena: ");
scanf("%lf", &sh[i].cena);
do {
printf("\nProdavec: ");
scanf("%s", &sh[i].prod);
}while(!strcmp(sh[i].prod, ""));
do {
printf("\nPokupatel: ");
scanf("%s", &sh[i].pokup);
}while(!strcmp(sh[i].pokup, ""));
printf("\nDen\' prodagu: ");
scanf("%d", &sh[i].data[0]);
printf("\nMуsac prodagu: ");
scanf("%d", &sh[i].data[1]);
printf("\nGod prodagu: ");
scanf("%d", &sh[i].data[2]);
}
}
void show(int size){
printf("+---------------+--------+---------------+---------------+----------+\n");
printf("+-----Tovar-----+--Cena--+---Prodavec----+---Pokupatel---+---Data---+\n");
printf("+ + + + + +\n");
for(int i = 0; i < size; i++) {
printf("+%-15s|%-8.2lf|%-15s|%-15s|%-2d.%-2d.%-2d +\n",
sh[i].name, sh[i].cena, sh[i].prod, sh[i].pokup, sh[i].data[0], sh[i].data[1], sh[i].data[2]);}
printf("+---------------+--------+---------------+---------------+----------+\n");
}
void sortByPrice(int size) { //Сортировка методом выбора
double tmp;
int i, j, pos;
for(i = 0; i < size; ++i)
{
pos = i;
tmp = sh[i].cena;
for(j = i + 1; j < size; ++j)
{
if (sh[j].cena < tmp)
{
pos = j;
tmp = sh[j].cena;
}
}
sh[pos].cena = sh[i].cena;
sh[i].cena = tmp;
}
}
int main (void){
printf("Skolko adresov budet v strukture? ");
scanf("%d", &size);
input(size);
show(size);
sortByPrice(size);
printf("\n\n Posle sortirovki:\n");
show(size);
getchar ();
getchar ();
return 0;
}Как модифицировать данную программу, чтобы данные могли загружаться и считываться с файла?
Решение задачи: «Разработать программу учета покупок ювелирного магазина»
textual
Листинг программы
void inputFromFile(int size)
{
FILE *ff;
ff=fopen("filename.txt","rt");
if(ff!=NULL)
{
for(int i = 0; i < size; i++)
{
fscanf(ff,"%s", &sh[i].name);
fscanf(ff,"%lf", &sh[i].cena);
fscanf(ff,"%s", &sh[i].prod);
fscanf(ff,"%s", &sh[i].pokup);
fscanf(ff,"%d", &sh[i].data[0]);
fscanf(ff,"%d", &sh[i].data[1]);
fscanf(ff,"%d", &sh[i].data[2]);
}
fclose(ff);
}
}
Объяснение кода листинга программы
- В функции объявлен массив объектов типа
shoppingс размеромsize. - Функция открывает файл
filename.txtдля чтения. - Если файл успешно открыт, то происходит цикл по всем элементам массива
sh. - В каждой итерации цикла происходит чтение данных из файла в соответствующие поля объекта
sh. - После окончания цикла, файл закрывается.
- Если файл не удалось открыть, то программа продолжает работу, как будто файл был успешно открыт.