Sunday, 3 June 2012

C++ Project Programme for Hospital Database Queue array

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));}}} 

0 comments:

Post a Comment

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More