Сведения о клиенте, программа не работает - C (СИ)
Формулировка задачи:
Это моя зачетная работа по "Технологии Программирования", которая не работает!
Вы спросите: "Что должна делать эта программа?"
А я вам отвечу:
1.Ввод Сведений о новом клиенте
2.Удаление сведений о клиенте
3.Печать содержимого базы данных
4.Сохранение базы данных в файле
5.Загрузка базы данных из файла
6.Инициализация базы данных
7.Окончание работы
#include <stdio.h> #include <string.h> struct person { char name[20]; int zavtrak[3]; int nomer[5]; int datazaezda[20]; int dataviezda[20]; struct person *prior; struct person *next; } st[100]; const int M=100; struct control { int nb; int nf; struct person *bbeg; struct person *bend; struct person *fbeg; struct person *fend; struct person *ptf; } ctrl; int init(void); int input(void); int delete(void); struct person *find(char *nam); int fr(struct person *ptr); int print(void); int save(void); int load(void); void main(void) { char numb[10]; //? while (1) { printf("1.Ввод Сведений о новом клиенте \n"); printf("2.Удаление сведений о клиенте \n"); printf("3.Печать содержимого базы данных \n"); printf("4.Сохранение базы данных в файле \n"); printf("5.Загрузка базы данных из файла \n"); printf("6.Инициализация базы данных \n"); printf("7.Окончание работы \n"); printf("\n\n Введите номер пункта меню\n"); scanf("%s", numb ); switch( numb[0] ) { case '1': input( ); break; case '2': delete( ); break; case '3': print( ); break; case '4': save( ); break; case '5': load( ); break; case '6': init( ); break; case '7': return; default: printf("Неверно указан номер пункта меню\n"); } } } int init(void) { struct person *point=st; int i; ctrl.nb=0; ctrl.nf=0; ctrl.bbeg=NULL; ctrl.bend=NULL; ctrl.fbeg=st; ctrl.fend=st; point=st; printf("\n\n Инициализация массива. \n"); for (i=0; i<M-1; i++) { if (ctrl.nf!=0) { point->prior=point-1; point->next=point+1; } else { point->prior=NULL; point->next=point+1; } point++; ctrl.nf++; ctrl.fend++; } ctrl.nf++; point->prior=point-1; point->next=NULL; return 0; } int delete(void) { char nam[20]; int i; struct person *ptr; printf("\n\n Функция удаления элемента \n"); if(ctrl.nb==0) { printf("Список занятых элементов пуст \n"); return -1; } printf("Введите: Ф.И.О \n"); scanf("%s", nam); if ((ptr=find(nam))==0) { printf("Фамилия не найдена \n"); return -1; } if (ptr==ctrl.bbeg) { if (ctrl.nb==1) { ctrl.bend=NULL; fr(ptr); return 0; } else { ctrl.bbeg=ptr->next; ctrl.bbeg->prior=NULL; fr(ptr); return 0; } } else { if (ptr==ctrl.bend) { ptr->prior->next=NULL; ctrl.bend=ptr->prior; fr(ptr); return 0; } else { ptr->prior->next=ptr->next; ptr->next->prior=ptr->prior; fr(ptr); return 0; } } } struct person *find(char *nam) { int i; struct person *ptf; ctrl.ptf=bbeg;//ptf for (i=0; i<ctrl.nb; i++) { if ((strcmp(nam, ptf->name))==0)//ptf return ptf;//ptf ptf=ptf->next;//ptf } return NULL; } int fr(struct person *ptr) { if(ctrl.nb==M) { ptr->prior=NULL; ptr->next=NULL; ctrl.fbeg->prior=ptr; ctrl.fbeg=ptr; } else { ptr->prior=NULL; ptr->next=ctrl.fbeg; ctrl.fbeg->prior=ptr; ctrl.fbeg=ptr; } ctrl.nb--; ctrl.nf++; return 0; } int input(void) { struct person *ptr; printf("\n\n Функция вставки элемента \n"); if (ctrl.nf==0) { printf("\n\n Свободных элементов нет\n"); return -1; } printf("Введите: Ф.И.О. \n"); scanf("%s", &ptr->name); printf("Завтрак? \n"); printf("1-да\n 2-нет\n"); scanf("%d", ptr->zavtrak); printf("Введите дату заселения\n"); printf("по формату ЧЧ/ММ/ДД/ММ/ГГ без<</>>"); scanf("%d", &ptr->datazaezda); printf("Введите дату выселения\n"); printf("по формату ЧЧ/ММ/ДД/ММ/ГГ без<</>>"); scanf("%d", ptr->dataviezda); printf("Введите номер комнаты\n"); scanf("%d", &ptr->nomer); if (ctrl.nf==1) { ctrl.fbeg=NULL; ptr->next=NULL; ptr->prior=ctrl.bend; ctrl.bend->next=ptr; ctrl.bend=ptr; ctrl.fend=NULL; } else { if(ctrl.nb==0) ctrl.bbeg=ptr; ctrl.fbeg=ptr->next; ptr->next=NULL; ptr->prior=ctrl.bend; ctrl.bend->next=ptr; ctrl.bend=ptr; ctrl.fbeg->prior=NULL; } } int save(void) { int i,k; struct person *ptr; char *c; int *pti; FILE *fp; if((fp=fopen("bd.dat","w"))==NULL) { perror("bd.dat"); return -1; } if(ctrl.nb==0) { puts("База данных пуста \n"); puts("Запись на диск не производиться \n"); return -1; } else { puts("Производиться запись базы данных в файл\n"); ptr=st; pti=&ctrl.nb; c=(char *)pti; for (i=0; i<sizeof(ctrl); i++) putc(*c++, fp); c=(char *)ptr; for(k=0; k<sizeof(st); k++) putc(*c++, fp); fclose(fp); return 0; } } int load(void) { int i; struct person *ptr; int *pti; char *c, d; FILE *fp; if ((fp=fopen("bd.dat","r"))==NULL) { perror("bd.dat"); return -1; } if(ctrl.nb==0) puts("База данных пуста\n"); if(ctrl.nb!=0) { puts("База в основной памяти не пуста\n"); puts("Произвести загрузку [y,n]"); d=getchar(); if(d=='N'||d=='n') { puts("Запрос на загрузку базы данных отменен\n"); return 1; } } puts("Производиться загрузка базы данных\n"); pti=&ctrl.nb; c=(char *)pti; for(i=0; i<sizeof(ctrl); i++) *c++=getc(fp); ptr=st; c=(char *)ptr; for(i=0; i<sizeof(st); i++) { if((*c=getc(fp)) !=EOF) c++; else { fclose(fp); return 0; } } return 0; } int print(void) { int i; struct person *ptr; ptr=ctrl.bbeg; printf("База данных \"Клиенты\" \n\n\n"); if (ctrl.nb==0) { printf("База данных пуста \n"); return -1; } for(i=0; i<ctrl.nb; i++) { printf("%d Фамилия: %s\n", i, ptr->name); printf("Завтрак: %d\n", ptr->zavtrak); printf("Дата заселения: %d\n", ptr->datazaezda); printf("Дата выселения: %d\n", ptr->dataviezda); printf("Комната: %d\n", ptr->nomer); ptr=ptr->next; } printf("\n\n Общее число записей =%d\n",i); return 0; }
Решение задачи: «Сведения о клиенте, программа не работает»
textual
Листинг программы
#include "stdafx.h" #include <stdio.h> #include <string.h> struct person { char name[20]; int zavtrak[3]; int nomer[5]; int datazaezda[20]; int dataviezda[20]; struct person* prior; struct person* next; } st[100]; const int M = 100; struct control { int nb; int nf; struct person* bbeg; struct person* bend; struct person* fbeg; struct person* fend; struct person* ptf; } ctrl; int init() { struct person* point = st; int i = 0; ctrl.nb = 0; ctrl.nf = 0; ctrl.bbeg = NULL; ctrl.bend = NULL; ctrl.fbeg = st; ctrl.fend = st; point = st; printf("\n\n Инициализация массива. \n"); for (i = 0; i < M - 1; i++) { if (ctrl.nf) { point->prior = point - 1; point->next = point + 1; } else { point->prior = NULL; point->next = point + 1; } point++; ctrl.nf++; ctrl.fend++; } ctrl.nf++; point->prior = point - 1; point->next = NULL; return 0; } struct person* find(char* nam) { int i = 0; struct person* ptf = NULL; ctrl.ptf = ctrl.bbeg; // ptf for (i = 0; i < ctrl.nb; i++) { if (!strcmp(nam,ptf->name)) // ptf { return ptf; }//ptf ptf = ptf->next; // ptf } return NULL; } int fr(struct person* ptr) { if (ctrl.nb == M) { ptr->prior = NULL; ptr->next = NULL; ctrl.fbeg->prior = ptr; ctrl.fbeg = ptr; } else { ptr->prior = NULL; ptr->next = ctrl.fbeg; ctrl.fbeg->prior = ptr; ctrl.fbeg = ptr; } ctrl.nb--; ctrl.nf++; return 0; } int Delete() { char nam[20]; // int i = 0; struct person* ptr; printf("\n\nФункция удаления элемента\n"); if (!ctrl.nb) { printf("Список занятых элементов пуст\n"); return -1; } printf("Введите: Ф.И.О\n"); scanf("%s",nam); ptr = find(nam); if (!ptr) { printf("Фамилия не найдена\n"); return -1; } if (ptr == ctrl.bbeg) { if (ctrl.nb == 1) { ctrl.bend = NULL; fr(ptr); return 0; } else { ctrl.bbeg = ptr->next; ctrl.bbeg->prior = NULL; fr(ptr); return 0; } } else { if (ptr == ctrl.bend) { ptr->prior->next = NULL; ctrl.bend = ptr->prior; fr(ptr); return 0; } else { ptr->prior->next = ptr->next; ptr->next->prior = ptr->prior; fr(ptr); return 0; } } } int input() { struct person* ptr = NULL; printf("\n\nФункция вставки элемента\n"); if (!ctrl.nf) { printf("\n\nСвободных элементов нет\n"); return -1; } printf("Введите: Ф.И.О. \n"); scanf("%s",&ptr->name); printf("Завтрак?\n"); printf("1-да\n 2-нет\n"); scanf("%d",ptr->zavtrak); printf("Введите дату заселения\n"); printf("по формату ЧЧ/ММ/ДД/ММ/ГГ без<</>>"); scanf("%d",&ptr->datazaezda); printf("Введите дату выселения\n"); printf("по формату ЧЧ/ММ/ДД/ММ/ГГ без<</>>"); scanf("%d",ptr->dataviezda); printf("Введите номер комнаты\n"); scanf("%d",&ptr->nomer); if (ctrl.nf == 1) { ctrl.fbeg = NULL; ptr->next = NULL; ptr->prior = ctrl.bend; ctrl.bend->next = ptr; ctrl.bend = ptr; ctrl.fend = NULL; } else { if (!ctrl.nb) { ctrl.bbeg = ptr; } ctrl.fbeg = ptr->next; ptr->next = NULL; ptr->prior = ctrl.bend; ctrl.bend->next = ptr; ctrl.bend = ptr; ctrl.fbeg->prior = NULL; } return 0; } int save() { int i, k; struct person* ptr; char* c; int* pti; FILE* fp = fopen("bd.dat","w"); if (!fp) { perror("bd.dat"); return -1; } if (!ctrl.nb) { puts("База данных пуста\n"); puts("Запись на диск не производится\n"); return -1; } else { puts("Производиться запись базы данных в файл\n"); ptr = st; pti = &ctrl.nb; c = (char*)pti; for (i = 0; i < sizeof(ctrl); i++) { putc(*c++,fp); } c = (char*)ptr; for (k = 0; k < sizeof(st); k++) { putc(*c++,fp); } fclose(fp); return 0; } } int load() { int i; struct person* ptr; int* pti; char* c, d; FILE* fp = fopen("bd.dat","r"); if (!fp) { perror("bd.dat"); return -1; } if (!ctrl.nb) { puts("База данных пуста\n"); } if (ctrl.nb) { puts("База в основной памяти не пуста\n"); puts("Произвести загрузку [y,n]"); d = (char)getchar(); if (d == 'N' || d == 'n') { puts("Запрос на загрузку базы данных отменен\n"); return 1; } } puts("Производится загрузка базы данных\n"); pti = &ctrl.nb; c = (char*) pti; for (i = 0; i < sizeof(ctrl); i++) { *c++ = (char)getc(fp); } ptr = st; c = (char*)ptr; for (i = 0; i < sizeof(st); i++) { *c = (char)getc(fp); if (*c != EOF) { c++; } else { fclose(fp); return 0; } } return 0; } int print() { int i = 0; struct person* ptr; ptr = ctrl.bbeg; printf("База данных \"Клиенты\"\n\n\n"); if (!ctrl.nb) { printf("База данных пуста\n"); return -1; } for (i = 0; i < ctrl.nb; i++) { printf("%d Фамилия: %s\n",i,ptr->name); printf("Завтрак: %d\n",ptr->zavtrak); printf("Дата заселения: %d\n",ptr->datazaezda); printf("Дата выселения: %d\n",ptr->dataviezda); printf("Комната: %d\n",ptr->nomer); ptr = ptr->next; } printf("\n\nОбщее число записей =%d\n",i); return 0; } int main(int argc,char** argv) { char numb[10]; //? while (true) { printf("1.Ввод сведений о новом клиенте\n"); printf("2.Удаление сведений о клиенте\n"); printf("3.Печать содержимого базы данных\n"); printf("4.Сохранение базы данных в файле\n"); printf("5.Загрузка базы данных из файла\n"); printf("6.Инициализация базы данных\n"); printf("7.Окончание работы\n"); printf("\n\n Введите номер пункта меню\n"); scanf("%s",numb); switch (numb[0]) { case '1': { input(); break; } case '2': { Delete(); break; } case '3': { print(); break; } case '4': { save(); break; } case '5': { load(); break; } case '6': { init(); break; } case '7': { return 0; } default: { printf("Неверно указан номер пункта меню\n"); } } } return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д