Программа должна расчитывать излишний или недостающий вес человека относительно его роста. Расчет происходит по формуле Вес (кг) / рост (м) х рост (м).
необходимо написать диалоговую программу, которая будет работать с данными в памяти компьютера. Данные должны сохраняться в компьютере как динамический массив, разработать функции обработки массива. Данные сохраняются в виде бинарного файла. Необходимо создать в программе выпадающее меню, предусматривающие возможности:
-просмотреть массив
-отредактировать
-удалить
- сохранить массив данных в файле
для каждого пункта меню разработать отдельную функцию. прототипы функций в отдельный файл h, значения функций тоже в файл h. Основная программа должна содержать только main-функцию.
Язык программирования Си, среда разработки программы Borland C.
Работа должна быть выполнена как библиотека функций, имеющих общий программный интерфейс и как работающая программа позволяющая продемонстрировать работу всех функций в любой последовательности через систему меню.
В общем программа создает базу данных, но почему то не работает! Помогите найти ошибки, вопрос жизни и смерти!
вот что уже есть:
Main
Код:
#include <stdio.h>
#include "patient.h"
#include <conio.h>
#define MENU_LOAD 0
#define MENU_LIST 1
#define MENU_ADD 2
#define MENU_DELETE 3
#define MENU_INFO 4
#define MENU_SAVE 5
#define MENU_QUIT 6
void DisplayMenu() {
printf("%d. to load file",MENU_LOAD);
printf("\n%d. to list patients",MENU_LIST);
printf("\n%d. to add patient ",MENU_ADD);
printf("\n%d. to delete patient",MENU_DELETE);
printf("\n%d. to get info about patient",MENU_INFO);
printf("\n%d. save file",MENU_SAVE);
printf("\n%d. quit program\n",MENU_QUIT);
};
int main () {
PatientList * patientList=NULL;
PatientList * temp;
int n=0;
int numberOfPatients = 0;
Patient patient;
patient.name = new char[80];
DisplayMenu();
char c;
while(c=getch()) {
switch(c-'0') {
case MENU_LOAD :
break;
case MENU_LIST :
printf("Patients : \n");
DisplayNames(patientList,n);
//DisplayMenu();
break;
case MENU_ADD :
InputPatient(&patient);
temp=AddPatient(patientList,&patient,&n);
if(temp!=NULL) patientList=temp;
DisplayMenu();
break;
case MENU_DELETE :
printf("input patient's name : ");
scanf("%s",patient.name);
DeletePatient(patientList,patient.name,&n);
break;
case MENU_INFO :
printf("input patient's name : ");
scanf("%s",patient.name);
DisplayPatient(FindPatient(patientList,patient.name,&n));
// DisplayMenu();
break;
case MENU_SAVE :
SaveList(patientList,&n);
DisplayMenu();
break;
case MENU_QUIT :
return 0;
break;
};
};
return 0;
};
Файл с функциями h:
Код:
#include <stdio.h>
#include <string.h>
struct Patient {
float height; // height of patient in meters;
float weight; // width in kilogramms
char * name; // name of patient
};
struct PatientList {
Patient patient;
PatientList* next;
};
void DeleteList(PatientList* list) {
PatientList * t;
while(list !=NULL) {
t=list->next;
delete []list->patient.name;
delete list;
list = t;
};
};
PatientList* AddPatient(PatientList* list,Patient * patient,int * n) {
if(list==NULL) {
list= new PatientList;
list->patient.height=patient->height;
list->patient.weight=patient->weight;
list->patient.name = new char[strlen(patient->name)];
for(int i=0;i<strlen(patient->name);i++) list->patient.name[i]=patient->name[i];
list->patient.name[strlen(patient->name)]=0;
list->next=NULL;
*n++;
return list;
};
if(list->next!=NULL)AddPatient(list->next,patient,n);
else {
list->next=new PatientList;
list=list->next;
list->patient.height=patient->height;
list->patient.weight=patient->weight;
list->patient.name = new char[strlen(patient->name)];
for(int i=0;i<strlen(patient->name);i++) list->patient.name[i]=patient->name[i];
list->patient.name[strlen(patient->name)]=0;
list->next=NULL;
*n++;
return NULL;
};
return NULL;
};
void DeletePatient(PatientList * list,char * name,int * n ) {
if(list==NULL) return;
if(list->next==NULL) return;
if ( strcmp(list->next->patient.name,name) ) {
list=list->next;
DeletePatient(list,name,n);
return;
};
PatientList* t = list->next->next;
delete [] list->next->patient.name;
delete list->next;
list->next=t;
*n--;
};
/*void DeletePatient(PatientList * list,int index,int * n ) {
if(index>=*n) return;
if ( n>0 ) {
list=list->next;
DeletePatient(list,index,n);
return;
};
PatientList* t = list->next->next;
delete [] list->next->patient.name;
delete list->next;
list->next=t;
*n--;
};*/
Patient* FindPatient(PatientList* list,int index,int*n) {
if(index>=*n) return NULL;
if ( index>0 )
return FindPatient(list->next,index-1,n);
return &list->patient;
};
Patient* FindPatient(PatientList* list,char* name,int * n) {
if(list==NULL) return NULL;
if ( strcmp(name,list->patient.name) )
return FindPatient(list->next,name,n);
return &list->patient;
};
void DisplayNames(PatientList * list,int n,int i=1) {
if(list==NULL)return;
printf(" %d. %s\n",i,list->patient.name);
DisplayNames(list->next,n,i+1);
};
void InputPatient(Patient * patient ) {
printf("enter patient's name(80 symbols max) :" );
scanf("%80s",patient->name);
printf("enter patient's height : ");
scanf("%f",&patient->height);
printf("enter patient's weight : ");
scanf("%f",&patient->weight);
};
void DisplayPatient(Patient * patient) {
if(patient==NULL) return;
float k = patient->weight/(patient->height*patient->height);
printf("Patient's name : %s\n",patient->name);
printf("Patient's height : %f meters\n",patient->height);
printf("Patient's weight : %f kilogramms\n",patient->weight);
if(k<18.5 ) {
printf("Patient has low weight (k=%f)\n",k);
return;
}
if(k<25 ) {
printf("Patient has normal weight (k=%f)\n",k);
return;
}
if(k<30 ) {
printf("Patient has extra weight (k=%f)\n",k);
return;
}
if(k<35 ) {
printf("Patient has first class adiposity (k=%f)\n",k);
return;
}
if(k<40 ) {
printf("Patient has second class adiposity (k=%f)\n",k);
return;
}
printf("Patient has second class adiposity (k=%f)\n",k);
return;
};
void SaveList(PatientList * list,int *n) {
char filename[80];
int t;
printf("input filename : " );
scanf("%s",filename);
FILE * f = fopen(filename,"wb");
fwrite(n,1,sizeof(int),f);
while(list !=NULL ) {
fwrite(&list->patient.height,1,sizeof(float),f);
fwrite(&list->patient.weight,1,sizeof(float),f);
t=strlen(list->patient.name);
fwrite(&t,1,sizeof(int),f);
for(int i=0;i<t;i++) fwrite(&list->patient.name[i],0,sizeof(char),f);
list=list->next;
};
};
void LoadList(PatientList**list,int * n) {
/* DeleteList(*list);
char filename[80];
int t;
printf("input filename : " );
scanf("%s",filename);
FILE * f = fopen(filename,"rb");
fread(n,1,sizeof(int),f);
for(int i=0;i<*n;i++) {
fread(&list->patient.height,1,sizeof(float),f);
fread(&list->patient.weight,1,sizeof(float),f);
};
*/
};