Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
WaRLoCK_UA
 Аватар для WaRLoCK_UA
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
#1

Помогите с экзаменационной работой - C++

08.11.2008, 04:53. Просмотров 684. Ответов 2
Метки нет (Все метки)

Доброго времени суток...))
Пишу экзаменационную работу на Visual C++, работаю в среде Visual Studio 2008.
Задание:
Создать программу для учета больных в ПОЛИКЛИНИКЕ.
О больных необходимо хранить:
a. ФИО больного

b. Возраст

c. Диагноз

d. Лекарство

e. Общее состояние

Реализовать следующие возможности:
Добавление записи

Удаление записи

Поиск по:
1. ФИО
2.Поиск по диагнозу
(дополнительно реализовать поиск по шаблону * и ?)

Изменение диагноза, лекарства и общего состояния

Показ всех записей

Сортировка записей

Сохранение в файл

Из всего этого я уже зделал Добавление, Изменение, Показ, Сохранение, Сортировку и Удаление... Но вот функция удаление работает неправильно! Кто сможет разобратся в чем проблема? Пожалуйста!

/*main.cpp*/
Код
#include <conio.h>
#include "header.h"
#include <iostream>
using namespace std;

void main()
{
    unsigned int size=0;
    Patient* List=new Patient[size];
    LoadData(List,size);
    while(true)
    {
        system("CLS");
		SortList(List,size);
        for(int i=0;i<size;i++)
            PrintPatient(List,i);
		print("1. Добавить запись"); cout<<'\n';
		print("2. Удалить запись");	cout<<'\n';
		print("3. Редактировать запись"); cout<<'\n';
		print("4. Сохранить"); cout<<'\n';
        unsigned int key=_getch();
        unsigned int num;
        switch(key)
        {
        case ONE:   AddPatient(List,size); break;
        case TWO:   print("Введите номер пациента для удаления");
					do{cin>>num;}while(num>size); num--;
                    DeletePatient(List,size,num); break;
        case THREE: print("Введите номер пациента для редактирования: ");
                    do{cin>>num;}while(num>size); num--;
                    EditPatient(List,num);break;
        case FOUR:	SaveData(List,size); break;
        }
    }
}
/*functions.cpp*/
Код
#include <conio.h>
#include "header.h"
#include <string.h>
#include <iostream>
#include <windows.h>
using namespace std;

/*Реализация функций*/
void print(char* src)
{
    char dst[256];
    CharToOem(src,dst);
    cout<<dst;
}
void AddPatient(Patient*& List,unsigned int& size)
{
    system("CLS");
    Patient* TmpList=new Patient[size+1];
    for(int i=0;i<size;i++)
        TmpList[i]=List[i];
    print("Фамилия Имя Отчество (через пробел): ");
    cin>>TmpList[size].PatientLNF.LastName
       >>TmpList[size].PatientLNF.Name
       >>TmpList[size].PatientLNF.FirstName;
    print("Возраст: "); cin>>TmpList[size].Age;
    print("Диагноз (максимум 200 символов): "); cin.ignore(); 
    cin.getline(TmpList[size].Diagnosis,200);
    print("Лекарства (максимум 200 символов): ");
    cin.getline(TmpList[size].Medicine,200);
    print("Общее состояние (максимум 200 символов): ");
    cin.getline(TmpList[size].GeneralCondition,200);
    delete[]List;
    List=TmpList;
    size++;
}
void PrintPatient(Patient* List,unsigned int number)
{
	cout<<'#'<<number+1<<'\t';
    cout<<List[number].PatientLNF.LastName<<' '
        <<List[number].PatientLNF.Name<<' '
        <<List[number].PatientLNF.FirstName<<'\n';
    print("Возраст: ");         cout<<'\t'<<'\t'<<List[number].Age<<'\n';
    print("Диагноз: ");         cout<<'\t'<<'\t'<<List[number].Diagnosis<<'\n';
    print("Лекарства: ");       cout<<'\t'<<'\t'<<List[number].Medicine<<'\n';
    print("Общее состояние: "); cout<<'\t'<<List[number].GeneralCondition<<'\n';
    cout<<'\n';
}
void SaveData(Patient* List,unsigned int size)
{
    FILE* DataBase=fopen("data.bin","wb");
    fwrite(&size,sizeof(int),1,DataBase);
    fwrite(List,sizeof(Patient),size,DataBase);
    fclose(DataBase);
}
void LoadData(Patient*& List,unsigned int& size)
{
    FILE* DataBase=fopen("data.bin","rb");
    if(DataBase==0)
    {
        print("Не возможно найти файл с данными \"data.bin\""); cout<<'\n';
        return;
    }
    fread(&size,sizeof(int),1,DataBase);
    Patient* tmp=new Patient[size];
    fread(tmp,sizeof(Patient),size,DataBase);
    fclose(DataBase);
    delete[]List;
    List=tmp;
}
void DeletePatient(Patient*& List,unsigned int& size,unsigned int number)
{
	if(size==0)
	{
		print("Список пуст! "); cout<<'\n';
		return;
	}
    Patient* TmpList=new Patient[size-1];
	for(int i=0,j=0;j<size;i++,j++)
	{
		if(j==number)
			j++;
		TmpList[i]=List[i];
	}
	delete[]List;
	List=TmpList;
	size--;
}
void EditPatient(Patient* List,unsigned int number)
{
    int key=5;
    while(key!='0')
    {
        system("CLS");
        PrintPatient(List,number);
		print("1. Изменить ФИО");				cout<<'\n';
		print("2. Изменить возраст");			cout<<'\n';
        print("3. Изменить диагноз");           cout<<'\n';
        print("4. Изменить лекарства");         cout<<'\n';
        print("5. Изменить общее состояние");   cout<<'\n';
        print("0. Прекратить редактирование");  cout<<'\n';
        key=_getch();
        switch(key)
        {
		case ONE:		print("Введите Фамилию Имя Отчество (через пробел): ");
						cin>>List[number].PatientLNF.LastName
						   >>List[number].PatientLNF.Name
						   >>List[number].PatientLNF.FirstName;
						cin.ignore(); break;
		case TWO:		print("Введите новый возраст: ");
						cin>>List[number].Age;
						cin.ignore(); break;
        case THREE:		print("Введите новый диагноз: ");
						cin.getline(List[number].Diagnosis,200); break;
        case FOUR:		print("Введите новые лекарства: ");
						cin.getline(List[number].Medicine,200); break;
        case FIVE:		print("Новое основное состояние: ");
						cin.getline(List[number].GeneralCondition,200); break; 
        }   
    }
}
void SortList(Patient* List,unsigned int size)
{
	for(int i=0;i<size-1;i++)
		for(int j=size-1;j>=1;j--)
			if(strcmp(List[j].PatientLNF.LastName,List[j-1].PatientLNF.LastName)<0)
			{
				Patient tmp=List[j];
				List[j]=List[j-1];
				List[j-1]=tmp;
			}
}
/*header.h*/
Код
/* Структуры*/
struct LNF
{
    char LastName[50];
    char Name[50];
    char FirstName[50];
};
struct Patient
{
    LNF PatientLNF;
    unsigned int Age;
    char Diagnosis[200];
    char Medicine[200];
    char GeneralCondition[200]; 
};

/*#define*/
#define ONE 49
#define TWO 50
#define THREE 51
#define FOUR 52
#define FIVE 53
#define SIX 54
#define SEVEN 55

/*Прототипы функций*/
void print(char* src);
void AddPatient(Patient*& List,unsigned int& size);
void DeletePatient(Patient*& List,unsigned int& size,unsigned int number);
void EditPatient(Patient* List,unsigned int number);
void PrintPatient(Patient* List,unsigned int number);
void LoadData(Patient*& List,unsigned int& size);
void SaveData(Patient* List,unsigned int size);
void SortList(Patient* List,unsigned int size);
Зарание спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2008, 04:53     Помогите с экзаменационной работой
Посмотрите здесь:

Помогите разобраться с работой с указателями.... C++
C++ Problema с работой с фаилами и параметрами
Ввести сведения о результатах экзаменационной сессии группы C++
C++ схема Горнера (помогите с курс. работой)
Проблема с работой в Visual Studio, я новичок, подскажите) C++
C++ Сводная ведомость результатов экзаменационной сессии студенческой группы
C++ Помогиете с работой в графичеком режиме в C++
C++ Шифр Виженера, непонятки с работой формулы
программа с работой над словом C++
C++ Замена рекурсии работой с собственным стеком
C++ Не могу разобраться с работой программы
Задача со структурами и работой с файлами C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
 Аватар для Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
08.11.2008, 10:57     Помогите с экзаменационной работой #2
В код не вникал, но есть замечание. Любой НОРМАЛЬНЫЙ компилятор, кажет, что main() должно возвращать int.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2220 / 735 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
08.11.2008, 11:23     Помогите с экзаменационной работой #3
в этом коде
Код
void DeletePatient(Patient*& List,unsigned int& size,unsigned int number)
{
    if(size==0)
    {
        print("Список пуст! "); cout<<'\n';
        return;
    }
    Patient* TmpList=new Patient[size-1];
    for(int i=0,j=0;j<size;i++,j++)
    {
        if(j==number)
            j++;
        TmpList[i]=List[i];
    }
    delete[]List;
    List=TmpList;
    size--;
}
в цикле for есть i,j; в операторе присваивания используется только i.
Думаю,здесь что-то не так.
P.S такие проблемы решаются с помощью отладчика а не форума.
Yandex
Объявления
08.11.2008, 11:23     Помогите с экзаменационной работой
Ответ Создать тему
Опции темы

Текущее время: 01:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru