Как удалить строчку из структуры - C (СИ)
Формулировка задачи:
Добрый день, получил задание(проект), за него получу оценку на экзамене. Вот что надо выполнить
Есть программа, которая регистрирует продавцов, которые ездят по стране и за каждый километр им выплачивается 0.5 евро, и за 1 обед им выделяют 7.5 евро. Но всё это не суть. Проблема в том, что я не знаю:
1. Как удалить строчку из структуры (это 5тый case. Для того, чтобы это выполнить я сначала регистрирую (допустим 5 продавцов) добавляю всем, или кому хочу еды и км, а после, выплачиваю.
Пятая
функция должна работать так. Просматривается структура, если находит продавца у которого есть км или еда, то ему выплачивают деньги, и строка удаляется, продавец удаляется. Я не знаю как это выполнить. 2. Как из файла, сканировать данные и разместить их в структуру в переменные. Это 9тый кейс. Данные надо считать в переменные, и потом также с ними взаимодействовать. Выкладываю мой код Он состоит из 2х файлов. Исходный код, и заголовочный файлЗаголовочный файл
int const MAX=100; struct sellers { char name[32]; int id; float meal; float km; }; void menu(sellers *sel); void Input_1(sellers *sel, int n); void Meal_2(sellers *sel, int n); void Add_km_3(sellers *sel, int n); void Calculate_4(sellers*sel, int n); //void Allow_5(sellers*sel, int n); void List_pay_6(sellers*sel, int n); void List_7(sellers *sel, int n); void File_8(sellers * sel, int n); void File_read(sellers *sel); int menu_choose(); int search_meal(sellers *sel, int n, int id_user);
Сам код
#include <stdio.h> #include "Header.h" #include <cstdlib> #include <string.h> int n = 0; int main() { sellers sel[MAX]; menu(sel); } void menu(sellers *sel) { int menu; menu = menu_choose(); switch (menu) { case 1: printf("Enter how many sellers you want to register? "); scanf("%d", &n); Input_1(sel, n); break; case 2: Meal_2(sel, n); break; case 3: Add_km_3(sel, n); break; case 4: Calculate_4(sel, n); break; /* case 5: Allow_5(sel, n); break;*/ case 6: List_pay_6(sel, n); break; case 7: List_7(sel, n); break; case 8: File_8(sel, n); break; case 9: File_read(sel); break; } } void Input_1(sellers *sel, int n) { for (int i = 1;i <= n;i++) { printf("Enter the name of a seller: "); scanf("%s", &sel[i].name); sel[i].id = i; sel[i].meal = 0.0; sel[i].km = 0.0; }; menu(sel); } void Meal_2(sellers *sel, int n) { int id_user, check; printf("Enter the id of a seller for whom you want to add 1 meal: "); //как-нибудь отредактировать сообщение) scanf("%d", &id_user); check = search_meal(sel, n, id_user); sel[check].meal++; printf("Id\tName \t Meal \t Km \n"); printf("%d\t%s \t %.2f \t %.2f \n", sel[check].id, sel[check].name, sel[check].meal, sel[check].km); menu(sel); } void Add_km_3(sellers *sel, int n) { int id_user, check, km; printf("Enter the id of a seller for whom you want to add km "); scanf("%d", &id_user); check = search_meal(sel, n, id_user); printf("How many km you want to add "); scanf("%d", &km); sel[check].km = sel[check].km + km; printf("Id\tName \t Meal \t Km \n"); printf("%d\t%s \t %.2f \t %.2f \n", sel[check].id, sel[check].name, sel[check].meal, sel[check].km); menu(sel); } void Calculate_4(sellers*sel, int n) { int id_user, check; float pay; printf("Enter the id of a seller for whom you want to calculate "); scanf("%d", &id_user); check = search_meal(sel, n, id_user); pay = (sel[check].meal * 7.5) + (sel[check].km * 0.5); printf("\nWe will pay for him: %.2f\n", pay); menu(sel); } //void Allow_5(sellers *sel, int n) { // int id_user, check; // float pay; // // printf("Enter the id of a seller for whom you want to pay\n"); // scanf("%d", &id_user); // // check = search_meal(sel, n, id_user); // // // // menu(sel); // //} void List_pay_6(sellers*sel, int n) { int check, i = 0; for (i = 0;i <= n;i++) { if ((sel[i].meal > 0.0) || (sel[i].km > 0)) { printf("%d\t%s \t %.2f \t %.2f \n", sel[i].id, sel[i].name, sel[i].meal, sel[i].km); } else { continue; } } menu(sel); } void List_7(sellers *sel, int n) { printf("Id\tName \t Meal \t Km \n"); for (int i = 1;i <= n;i++) { printf("%d\t%s \t %.2f \t %.2f \n", sel[i].id, sel[i].name, sel[i].meal, sel[i].km); }; menu(sel); } void File_8(sellers * sel, int n) { FILE *fPointer; fPointer = fopen("bacon.txt", "w"); for (int i = 1;i <= n;i++) { fprintf(fPointer, "%d\t%s \t %.2f \t %.2f \n", sel[i].id, sel[i].name, sel[i].meal, sel[i].km); } fclose(fPointer); menu(sel); } void File_read(sellers *sel) { char single[150]; FILE * fPointer; int i = 0; fPointer = fopen("bacon.txt", "r+"); while (!feof(fPointer)) { i++; fscanf(fPointer, "%d \t %s \t %f \t %f\n", &sel[i].name, &sel[i].id, &sel[i].meal, &sel[i].km); printf("%d \t %s \t %f \t %f\n", sel[i].name, sel[i].id, sel[i].meal, sel[i].km); }; fclose(fPointer); menu(sel); } int menu_choose() { int variant; printf("\nChoose what you want: \n\n"); printf("(1) Register a new seller;\n"); printf("(2) Account new meal;\n"); printf("(3) Add kilometers;\n"); printf("(4) Calculate the allowances of a seller;\n"); printf("(5) Pay allowances to a seller;\n"); printf("(6) List all the information of sellers with allowances to receive;\n"); printf("(7) List all the information of all sellers;\n"); printf("(8) Write to a data file all the information;\n"); printf("(9) Upload from the data file the collection of records;\n"); printf("(0) Exit;\n"); printf(">>> "); scanf("%d", &variant); return variant; } int search_meal(sellers *sel, int n, int id_user) { int x; for (int i = 0;i <= n;i++) { if (sel[i].id == id_user) { x = i; return x; } else { continue; } } }
Решение задачи: «Как удалить строчку из структуры»
textual
Листинг программы
sellers sel[MAX];
Объяснение кода листинга программы
В данном коде объявляется структура sellers
с именем sel
и макс. количеством элементов равным MAX
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д