C++ Project Programme for Hospital Database Queue array
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
// define maximum number of patients in a queue
#define MAXPATIENTS 100
// define structure for patient data
struct patient {
char FirstName[50];
char LastName[50];
char ID[20];
};
// define class for queue
class queue {
public:
queue (void);
int AddPatientAtEnd (patient p);
int AddPatientAtBeginning (patient p);
patient GetNextPatient (void);
int RemoveDeadPatient (patient * p);
void OutputList (void);
char DepartmentName[50];
private:
int NumberOfPatients;
patient List[MAXPATIENTS];
};
// declare member functions for queue
queue::queue () {
// constructor
NumberOfPatients = 0;}
int queue::AddPatientAtEnd (patient p) {
// adds a normal patient to the end of the queue.
// returns 1 if successful, 0 if queue is full.
if (NumberOfPatients >= MAXPATIENTS) {
// queue is full
return 0;}
// put in new patient
List[NumberOfPatients] = p; NumberOfPatients++;
return 1;}
int queue::AddPatientAtBeginning (patient p) {
// adds a critically ill patient to the beginning of the queue.
// returns 1 if successful, 0 if queue is full.
int i;
if (NumberOfPatients >= MAXPATIENTS) {
// queue is full
return 0;}
// move all patients one position back in queue
for (i = NumberOfPatients-1; i >= 0; i--) {
List[i+1] = List[i];}
// put in new patient
List[0] = p; NumberOfPatients++;
return 1;}
patient queue::GetNextPatient (void) {
// gets the patient that is first in the queue.
// returns patient with no ID if queue is empty
int i; patient p;
if (NumberOfPatients == 0) {
// queue is empty
strcpy(p.ID,"");
return p;}
// get first patient
p = List[0];
// move all remaining patients one position forward in queue
NumberOfPatients--;
for (i=0; i<NumberOfPatients; i++) {
List[i] = List[i+1];}
// return patient
return p;}
int queue::RemoveDeadPatient (patient * p) {
// removes a patient from queue.
// returns 1 if successful, 0 if patient not found
int i, j, found = 0;
// search for patient
for (i=0; i<NumberOfPatients; i++) {
if (stricmp(List[i].ID, p->ID) == 0) {
// patient found in queue
*p = List[i]; found = 1;
// move all following patients one position forward in queue
NumberOfPatients--;
for (j=i; j<NumberOfPatients; j++) {
List[j] = List[j+1];}}}
return found;}
void queue::OutputList (void) {
// lists entire queue on screen
int i;
if (NumberOfPatients == 0) {
cout << "\nQueue is empty";}
else {
for (i=0; i<NumberOfPatients; i++) {
cout << "\n" << List[i].FirstName;
cout << " " << List[i].LastName;
cout << " " << List[i].ID;}}}
// declare functions used by main:
patient InputPatient (void) {
// this function asks user for patient data.
patient p;
cout << "\n\nPlease enter data for new patient\nFirst name: ";
cin.getline(p.FirstName, sizeof(p.FirstName));
cout << "\nLast name: ";
cin.getline(p.LastName, sizeof(p.LastName));
cout << "\nSocial security number: ";
cin.getline(p.ID, sizeof(p.ID));
// check if data valid
if (p.FirstName[0]==0 || p.LastName[0]==0 || p.ID[0]==0) {
// rejected
strcpy(p.ID,"");
cout << "\n\nError: Data not valid. Operation cancelled.";
getch();}
return p;}
void OutputPatient (patient * p) {
// this function outputs patient data to the screen
if (p == NULL || p->ID[0]==0) {
cout << "\nNo patient";
return;}
cout << "\n\nPatient data:";
cout << "\n\nFirst name: " << p->FirstName;
cout << "\n\nLast name: " << p->LastName;
cout << "\n\nSocial security number: " << p->ID;}
int ReadNumber() {
// this function reads an integer number from the keyboard.
// it is used because input with cin >> doesn't work properly!
char buffer[20];
cin.getline(buffer, sizeof(buffer));
return atoi(buffer);}
void DepartmentMenu (queue * q) {
// this function defines the user interface with menu for one department
int choise = 0, success; patient p;
while (choise != 6) {
// clear screen
clrscr();
// print menu
cout << "\n\n\nWelcome to department: " << q->DepartmentName;
cout << "\n\nPlease enter your choise:";
cout << "\n\n1: Add normal patient";
cout << "\n2: Add critically ill patient";
cout << "\n3: Take out patient for operation";
cout << "\n4: Remove dead patient from queue";
cout << "\n5: List queue";
cout << "\n6: Change department or exit\n";
// get user choise
choise = ReadNumber();
// do indicated action
switch (choise) {
case 1: // Add normal patient
p = InputPatient();
if (p.ID[0]) {
success = q->AddPatientAtEnd(p);
clrscr();
if (success) {
cout << "\nPatient added:\n\n";}
else {
// error
cout << "\n\nError: The queue is full. Cannot add patient:";}
OutputPatient(&p);
cout << "\n\nPress any key";
getch();}
break;
case 2: // Add critically ill patient
p = InputPatient();
if (p.ID[0]) {
success = q->AddPatientAtBeginning(p);
clrscr();
if (success) {
cout << "\nPatient added:\n\n";}
else {
// error
cout << "\n\nError: The queue is full. Cannot add patient:";}
OutputPatient(&p);
cout << "\n\nPress any key";
getch();}
break;
case 3: // Take out patient for operation
p = q->GetNextPatient();
clrscr();
if (p.ID[0]) {
cout << "\nPatient to operate:\n\n";
OutputPatient(&p);}
else {
cout << "\nThere is no patient to operate.";}
cout << "\n\nPress any key";
getch();
break;
case 4: // Remove dead patient from queue
p = InputPatient();
if (p.ID[0]) {
success = q->RemoveDeadPatient(&p);
clrscr();
if (success) {
cout << "\nPatient removed:\n\n";}
else {
// error
cout << "\n\nError: Cannot find patient:\n\n";}
OutputPatient(&p);
cout << "\n\nPress any key";
getch();}
break;
case 5: // List queue
clrscr();
q->OutputList();
cout << "\n\nPress any key";
getch(); break;
}}}
// main function defining queues and main menu
void main () {
int i, MenuChoise = 0;
// define three queues
queue departments[3];
// set department names
strcpy (departments[0].DepartmentName, "Heart clinic");
strcpy (departments[1].DepartmentName, "Lung clinic");
strcpy (departments[2].DepartmentName, "Plastic surgery");
while (MenuChoise != 4) {
// clear screen
clrscr();
// print menu
cout << "\n\n\nWelcome to Software City Hospital";
cout << "\n\nPlease enter your choise:\n";
for (i = 0; i < 3; i++) {
// write menu item for department i
cout << "\n" << (i+1) << ": " << departments[i].DepartmentName;}
cout << "\n4: Exit\n";
// get user choise
MenuChoise = ReadNumber();
// is it a department name?
if (MenuChoise >= 1 && MenuChoise <= 3) {
// call submenu for department
// (using pointer arithmetics here:)
DepartmentMenu (departments + (MenuChoise-1));}}}
Related Posts : C++ Programs
0 comments:
Post a Comment