Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2016, 20:31   #1
Desking
Новичок
Джуниор
 
Регистрация: 23.03.2016
Сообщений: 1
По умолчанию создать функции добавления записи в список после указанного пациента и перед указанным пациента

Код:
#include <iostream>
#include <fstream>
#include <cstring>
#include <windows.h>
 
 
using namespace std;
struct element{
    int id;
    char lastname[30];
    char name [30];
    char secondname [30];
    char adres [30];
    char phone [30];
    int numberOfCard;
    char diagnos[30];};
 
 
struct Patient{
    int b;
    element tmp;
    Patient *next;
    Patient *prev;
};
Patient *head = NULL;
    Patient *tail = NULL;
 
 
 
Patient *find();
 
void remove();
void structFileWrite(Patient *head);
void structFile(Patient *head);
void addOnePatient(Patient **head, Patient **tail);
void addSeveralPatient(Patient **head, Patient **tail);
void PrintPatient();
void balance();
void interval();
void addPatients(Patient **head, Patient **tail);
 
void printPatient(const element &pat);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
 
    int menu =0;
    do {
        cout<<endl;
        cout<<"Меню:"<<endl;
        cout<<"1. Добавить нового пациента."<<endl;
        cout<<"2. Добавить определенное количество пациентов."<<endl;
        cout<<"3. Вывести на экран всех пациентов."<<endl;
        cout<<"4. Найти пациента по диагнозу."<<endl;
        cout<<"5. Найти пациента по остачи от деления номера карты на 7."<<endl;
        cout<<"6. Найти пациента по интервалу."<<endl;
        cout<<"7. Удалить пациента."<<endl;
        cout<<"0. Выход."<<endl;
 
        cin>>menu;
        switch (menu) {
            case 1:
               addOnePatient(&head, &tail);
                break;
            case 2:
                addSeveralPatient(&head,&tail);
                break;
            case 3:
                PrintPatient();
                break;
            case 4:
                find();
                break;
            case 5:
                balance();
                break;
            case 6:
                interval();
                break;
            case 7:
                remove();
                break;
                case 8:
                structFile(head);
                break;
        }
    }while (menu!=0);
 
 
    return 0;
}
 
 
void interval() {
 
    ifstream f("Patient.txt", ios_base::binary);
    element pat;
    bool n=0;
    int in1, in2;
    cout << "Введите интервал:" << endl;
    cout << "от:" << "\t";
    cin>>in1;
    cout << "до:" <<"\t";
    cin>>in2;
    cout<<endl;
    while (f.read((char *) &pat, sizeof(element))) {
        Patient *temp = new Patient;
        temp->tmp = pat;
        if(in1<pat.numberOfCard && pat.numberOfCard<in2){
            printPatient(pat);
            n=1;
        }
    }
    f.close();
    if(n!=1)
        cout<<"Пациента с такой остачей от деления не найдено!"<<endl;
 
}
 
 
void balance() {
 
    ifstream f("Patient.txt", ios_base::binary);
    element pat;
    bool n=0;
    double ost;
    cout << "Введи остачу:" << endl;
    cin>>ost;
    while (f.read((char *) &pat, sizeof(element))) {
        Patient *temp = new Patient;
        temp->tmp = pat;
        if(pat.numberOfCard%7==ost){
            printPatient(pat);
            n=1;
        }
    }
    f.close();
    if(n!=1)
        cout<<"Пациента с такой остачей от деления не найдено!"<<endl;
 
}
 
 
 
Patient *find() {
 
    ifstream f("Patient.txt", ios_base::binary);
    element pat;
    bool n=0;
    cout << "Введите диагноз" << endl;
    char diag[50];
    cin >> diag;
    while (f.read((char *) &pat, sizeof(element))) {
        Patient *temp = new Patient;
        temp->tmp = pat;
        if (strcmp(pat.diagnos, diag) == 0) {
            printPatient(pat);
            n=1;
        }
    }
    f.close();
    if(n!=1)
        cout<<"Пациента с таким диагнозом не найдено!"<<endl;
 
}
 
 
void remove() {
    ifstream f("Patient.txt", ios_base::binary);
 
    element pat;
    cout << "Введите номер пациента:" << endl;
    int id;
    cin >> id;
    while (f.read((char *) &pat, sizeof(element))) {
        Patient *temp = new Patient;
        temp->tmp = pat;
 
        if (pat.id == id) {
            continue;
        }
        ofstream file("Patient1.txt", ios_base::app | ios_base::binary);
        file.write((char *)&pat, sizeof (element));
        file.close();
    }
    f.close();
    remove("Patient.txt");
rename("Patient1.txt","Patient.txt");
}
 
 
void addSeveralPatient(Patient **head, Patient **tail){
    int kol;
    cout << "Введите количество пациентов:" << endl;
    cin >> kol;
    element pat;
    for (int i = 0; i < kol; ++i) {
        addPatients(head, tail);
    }
}
 
void addOnePatient(Patient ** head, Patient **tail){
    addPatients(head, tail);
}
 
 
void addPatients(Patient **head, Patient **tail) {
    Patient *temp = new Patient;
 
    cout<<"Введите номер пациента: ";
    cin>>temp->tmp.id;
    cout<<"Введите фамилию пациента: ";
    cin>>temp->tmp.lastname;
    cout<<"Введите имя пациента: ";
    cin>>temp->tmp.name;
    cout<<"Введите отчество пациента: ";
    cin>>temp->tmp.secondname;
    cout<<"Введите адрес пациента: ";
    cin>>temp->tmp.adres;
    cout<<"Введите телефон пациента: ";
    cin>>temp->tmp.phone;
    cout<<"Введите номер карты пациента: ";
    cin>>temp->tmp.numberOfCard;
    cout<<"Введите диагноз пациента: ";
    cin>>temp->tmp.diagnos;
    temp->next=NULL;
 
    if (*head){ (*tail)->next = temp;} else {  *head = temp; }
    *tail = temp;
    structFileWrite(*tail);
}
 
 
 
void structFile(Patient *head){
 
//тут нужно написать код для добавления пациента после заданого
    
 
    }
 
void structFileWrite(Patient *head){
 
    Patient *temp =head;
    ofstream file("Patient.txt", ios_base::app | ios_base::binary);
    while (temp!= NULL) {
        element pat=temp->tmp;
        file.write((char *)&pat, sizeof (element));
        temp = temp->next;
    }file.close();}
void PrintPatient() {
 
    ifstream f("Patient.txt", ios_base::binary);
 
    element pat;
    while (f.read((char *)&pat, sizeof (element))) {
        Patient *temp = new Patient;
        temp->tmp=pat;
        printPatient(pat);
        }f.close();
}
 
void printPatient(const element &pat) {
    cout << pat.id << ", "
    << " " << pat.lastname << " "
    << " " << pat.name << " "
    << " " << pat.secondname << ", "
    << " " << pat.adres << ", "
    << " " << pat.phone << ", "
    << " " << pat.numberOfCard << ", "
    << " " << pat.diagnos << endl;
}
нужно создать функции добавления записи в список после указанного пациента и перед указанным пациента, но я не знаю как((( Помогите пожалуйста!
Desking вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не сохраняются записи после добавления через IBTable artemavd БД в Delphi 6 27.08.2012 14:36
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Триггер , который после добавления записи в одну таблицу редактирует запись другой таблицы Rin БД в Delphi 7 18.12.2010 03:50
добавить элемент после элемента с указанным номером SOUR47 Помощь студентам 0 20.05.2010 21:09