Код:
#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;
}
нужно создать функции добавления записи в список после указанного пациента и перед указанным пациента, но я не знаю как((( Помогите пожалуйста!