Sunday, April 8, 2012

Railway Reservation System

ts a railway reservation system's simulation. It takes 2 train Nos. 3143 & 3147

Code :

#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<dos.h>
#include<string.h>
#include<math.h>

/***************Global Variable Declarations****************/

union REGS i,o;
int xmax,ymax;
int gdriver = DETECT, gmode, errorcode,x,y;
int count=0,no_pass=0;
FILE *ptr1;
char d[8][3]={{"S1"},{"S2"},{"S3"},{"S4"},{"S5"},{"S6"},{"S7"},{"S8"}};
char x1[2];

/****************************Global Structures declared**********/

struct travel
{
    char tno[5];
    //char doj[10];
    int d1,m1,y1;
    char from[4];
    char to[4];
    char passen[6][20];
    char sex[6][2];
    char age[6][3];
    int seat_no[6];
    char coano[3];
   //    float pnr;
     long int pnr;
    float bill;
}passenger;
struct
{
//    float pnr;
long int pnr;
}pass;
struct
{
    int seat_no;
    char coano[3];
    char status[1];
}berth;

struct
{
    char tno[5];
    char tname[20];
}train;


/***********************User Defined Functions***********/

void firstscreen();
void mainmenu();
void reserv();
void clear();
void setgraph();
void clearline();
void drawbox();
void cancel();
void enquiry();
void color(int,int,int);
void printtic(struct travel);

/*****************Main Function*****************************/
void main()
{
    int i;
    FILE *ptr,*tr;
    /***********loop for writing train nos***************/
    if((tr=fopen("tra.dat","r"))==NULL)
    {
        tr=fopen("tra.dat","w");
        strcpy(train.tno,"3143");
        strcpy(train.tname,"Darjeeling Mail");
        fwrite(&train,sizeof(train),1,tr);
        strcpy(train.tno,"3147");
        strcpy(train.tname,"Uttarbanga Exp");
        fwrite(&train,sizeof(train),1,tr);
        fclose(tr);
    }

    /************loop for writing train berth nos*********/
    if((ptr=fopen("berths3.dat","r"))==NULL)
    {
        ptr=fopen("berths3.dat","wb");
        strcpy(berth.coano,d[0]);
        strcpy(berth.status,"V");
        for(i=1;i<=73;i++)
        {
           if(i>72)
           {
                count++;
                strcpy(berth.coano,d[count]);
                i=1;
           }
           if(count==8)
               break;
           berth.seat_no=i;
           fwrite(&berth,sizeof(berth),1,ptr);

        }
    }
    fclose(ptr);
    if((ptr=fopen("berths7.dat","r"))==NULL)
    {
        ptr=fopen("berths7.dat","wb");
        strcpy(berth.coano,d[0]);
        strcpy(berth.status,"V");
        for(i=1;i<=73;i++)
        {
           if(i>72)
           {
                count++;
                strcpy(berth.coano,d[count]);
                i=1;
           }
           if(count==8)
               break;
           berth.seat_no=i;
           fwrite(&berth,sizeof(berth),1,ptr);

        }
     }
     fclose(ptr);
    textcolor(WHITE);
    textbackground(BLACK);
    clrscr();
    firstscreen();
    mainmenu();
    reserv();
    cancel();

    getch();
}
void firstscreen()
{
    int r,c;
    for(r=4;r<=20;r++)
    {
         gotoxy(20,r);
         printf("*");
         gotoxy(60,r);
         printf("*");
    }
    for(c=20;c<60;c++)
    {
         gotoxy(c,4);
         printf("*");
         gotoxy(c,20);
         printf("*");
    }

    gotoxy(36,6);
    textattr(LIGHTRED);
    cprintf("PROJECT");

    gotoxy(39,8);
    textcolor(BLUE);
    cprintf("ON");

    gotoxy(32,10);
    textcolor(BROWN);
    cprintf("Railway Reservation");

    gotoxy(25,13);
    textcolor(YELLOW);
    putch(1);

    textcolor(CYAN);
    cprintf(" DEVELOPERS : ");
    cprintf("Dinesh Chachan");
    gotoxy(40,14);
    cprintf("Ashutosh Kumar");
    gotoxy(40,15);
    cprintf("Deepshikha Deb");

    gotoxy(25,17);
    textcolor(YELLOW);
    putch(2);

    textcolor(CYAN);
    cprintf(" GUIDE   : ");
    textcolor(CYAN);
    cprintf("Udit Chakraborty");
    gotoxy(28,23); textcolor(MAGENTA + BLINK);
    cprintf("Press a key to continue");
    getch();
}

void mainmenu()
{
    char choice;
    setgraph();
    settextjustify(CENTER_TEXT, CENTER_TEXT);
    settextstyle(TRIPLEX_FONT, HORIZ_DIR, 5);
    outtextxy(xmax,45,"Railway Reservation");
    /* draw a rectangle */
    rectangle(100,150,500,350);
    gotoxy(17,12);
    printf("1. For reservation press  1
");
    gotoxy(17,14);
    printf("2. For cancellation press 2
");
    gotoxy(17,16);
    printf("3. For enquiry press 3
");
    gotoxy(17,18);
    printf("4. For closing the program press 4
");
    gotoxy(48,25);
    printf("Created by SOFTECH SOLUTIONS Ltd.");
    gotoxy(20,20);
    printf("Choice : ");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:
            reserv();
            break;
        case 2:
            closegraph();
            clrscr();
            cancel();
            break;
        case 3:
            closegraph();
            enquiry();
            break;
        case 4:
            exit(1);
        default:
            gotoxy(29,20);
            printf("Not a valid choice");
            getch();
            main();
    }
}
int pass_name(int i,int x, int y)
{
    int flag,pos;
    do
    {
        flag=1;
        gotoxy(x,y);
        fflush(stdin);
        gets(passenger.passen[i]);
        fflush(stdin);
        strupr(passenger.passen[i]);
        if (strlen(passenger.passen[i]) == 0)
        {
            if(i>0)
            {
                return(7);
            }
            gotoxy(10,24);
            printf("aPassenger Name should not be left BLANK");
            flag=0;
            //i--;
            getch();
            clearline(24);
        }
        else if (strlen(passenger.passen[i]) >20)
        {
            //gotoxy(10,20);
            gotoxy(10,24);
            printf("aPassenger Name must be less than 20 characters");
            flag=0;
            getch();
            clearline(24);
        }
    }while(flag==0);
    gotoxy(x,y);
    puts(passenger.passen[i]);
    i++;
    return(i);
}
int pass_sex(int j,int x,int y)
{
    int flag,i;
    char ch[1][1];
    do
    {
        flag=1;
        gotoxy(x,y);
        fflush(stdin);
        gets(passenger.sex[j]);
        fflush(stdin);
        strupr(passenger.sex[j]);
        if (strlen(passenger.sex[j]) == 0)
        {
            gotoxy(10,24);
            printf("aSex should not be left BLANK");
            flag=0;
            getch();
            clearline(24);
        }
        else if(strlen(passenger.sex[j])!=1)
        {
            gotoxy(10,24);
            printf("aPassenger's Sex must be 1 characters long");
            flag=0;
            getch();
            clearline(24);
        }
    }while (flag==0);
    gotoxy(x,y);
    puts(passenger.sex[j]);
    j++;
    return(j);
}

int pass_age(int k,int x,int y)
{
    int flag,i,j;
    do
    {
        flag=1;
        gotoxy(x,y);
        if(flag==1)
            no_pass++;
        gets(passenger.age[k]);
        fflush(stdin);
        strupr(passenger.age[k]);
        if (strlen(passenger.age[k]) == 0)
        {
            gotoxy(10,24);
            printf("aPassenger's Age should not be left BLANK");
            flag=0;
            getch();
            clearline(24);
        }
        else if (strlen(passenger.age[k])!=2)
        {
            gotoxy(10,24);
            printf("aPassenger's Age must be equal to 2 characters");
            flag=0;
            //    k--;
            getch();
            clearline(24);
        }
        else if(strcmp(passenger.age[k],"00")==0)
        {
            gotoxy(10,24);
            printf("aPassenger's Age cannot be less than 1 year");
            flag=0;
            getch();
            clearline(24);
        }
        for(i=k;i<k+1;i++)
        {
            for(j=0;j<2;j++)
            {
                if(!isdigit(passenger.age[i][j]))
                {
                    gotoxy(10,24);
                    printf("aEnter a valid age");
                    flag=0;
                    getch();
                    clearline(24);
                }
            }
        }
    }while (flag==0);
    gotoxy(x,y);
    k++;
    puts(passenger.age[k]);
    return(k);
}

showmouseptr()
{
    i.x.ax=1;
    int86(0x33,&i,&o);
}
int restrictmouseptr(int x1,int y1,int x2,int y2)
    {
    i.x.ax=7;
    i.x.cx=x1;
    i.x.dx=x2;
    int86(0x33,&i,&o);

    i.x.ax=8;
    i.x.cx=y1;
    i.x.dx=y2;
    int86(0x33,&i,&o);
    }

void clear()
{
    int i,j;
    for(i=0;i<=80;i++)
    {
        for(j=0;j<=25;j++)
        {
            printf("%c",' ');
            gotoxy(i,j);
        }
    }
    gotoxy(1,1);
}
void setgraph()
{

    clrscr();

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "c:\tc\bgi");

    /* read result of initialization */
    errorcode = graphresult();
    /* an error occurred */
    if (errorcode != grOk)
    {
           printf("Graphics error: %s
", grapherrormsg(errorcode));
           printf("Press any key to halt:");
           getch();
           exit(1);
    }

    xmax = getmaxx()/2;
    ymax = getmaxy()/2;
}
void clearline(int yco)
{
    int i,j;
    gotoxy(5,yco);
    for(i=0;i<70;i++)
    {
        printf("%c",' ');
    }
}
void drawbox()
{
    int xr,xc;
    int la,ra;
    gotoxy(0,0);
    for(xr=1;xr<=80;xr++)
        printf("Ä");
    xc=2;
    for(la=1;la<=23;la++)
    {
        gotoxy(1,xc);
        printf("³");
        gotoxy(80,xc);
        printf("³");
        xc++;
    }
    gotoxy(0,25);
    for(xr=1;xr<80;xr++)
        printf("Ä");
    gotoxy(1,1);
    printf("Ú");
    gotoxy(80,24);
    printf("³");
}


void reserv()
{
    int i,flag,j,k,test,found,set_no,count1=0,year;
    struct date d;
    float pnrno;
    char tno[3],ans;
    char a[1],c,age[3],ch;
    char *p;
    FILE *ptr,*pno,*tr;
    closegraph();
    highvideo();
    //Design Part
    clear();
    drawbox();
    gotoxy(3,2);
    for(i=0;i<74;i++)
        printf("Ä");

    j=3;
    for(i=0;i<4;i++)
    {
        gotoxy(3,j);
        printf("³");

        gotoxy(77,j);
        printf("³");
        j++;
    }
    gotoxy(3,6);
    for(i=0;i<75;i++)
        printf("Ä");
    gotoxy(6,2);
    printf(" Journey Details ");
    color(15,18,3);
    gotoxy(5,3);
    printf("Train No : ");
    color(32,46,3);
    gotoxy(20,3);
    printf("Train Name :");
    color(67,68,3);
    color(71,72,3);
    color(75,76,3);
    gotoxy(49,3);
    printf("Date of Booking :");
    gotoxy(67,3);
    getdate(&d);
    printf("%d",d.da_day);
    gotoxy(69,3);
    putch('-');
    gotoxy(71,3);
    printf("%d",d.da_mon);
    putch(' -');
    printf("%d",d.da_year);
    color(12,14,5);
    gotoxy(5,5);
    printf("From :");
    color(27,29,5);
    gotoxy(20,5);
    printf("To :");
    color(67,68,5);
    color(71,72,5);
    color(75,76,5);
    gotoxy(49,5);
    printf("Date Of Journey :");
    gotoxy(3,8);
    for(i=0;i<=74;i++)
        printf("Ä");
    gotoxy(7,8);
    printf("Passenger Details");
    j=9;
    for(i=0;i<14;i++)
    {
        gotoxy(3,j);
        printf("³");

        gotoxy(77,j);
        printf("³");
        j++;
    }
    gotoxy(3,23);
    printf(" ");
    gotoxy(3,23);
    for(i=0;i<74;i++)
        printf("Ä");
    gotoxy(4,10);
    for(i=0;i<73;i++)
        printf("Ä");
    color(8,31,11);
    gotoxy(22,9);
    printf("NAME");

    gotoxy(46,9);
    printf("SEX");
    gotoxy(53,9);
    printf("AGE");
    gotoxy(65,9);
    printf("REMARKS");
    j=9;
    for(i=0;i<14;i++)
    {
        gotoxy(44,j);
        printf("³");

        gotoxy(51,j);
        printf("³");

        gotoxy(58,j);
        printf("³");
        j++;
    }

    for(i=0;i<6;i++)
    {
        color(5,38,(11+i));
        color(46,48,(11+i));
        color(53,56,(11+i));
        color(5,38,(16+i));
        color(46,48,(16+i));
        color(53,56,(16+i));
    }

    //User input part
    gotoxy(15,3);
    do
    {
        int len;
        fflush(stdin);
        //name input
        gets(passenger.tno);
        if(len=(strlen(passenger.tno))!=4)
        {
            gotoxy(10,24);
            printf("Train No Must be 4 digits long");
            getch();
            clearline(24); //clears the line
            gotoxy(15,3);
        }
        tr=fopen("tra.dat","r");
        fread(&train,sizeof(train),1,tr);
        while(!feof(tr))
        {
            if((strcmp(passenger.tno,train.tno))==0)
            {
                found=0;
                flag=0;
                break;
            }
            else
                found=2;
            fread(&train,sizeof(train),1,tr);
        }
        if(found==2)
        {
            gotoxy(8,24);
            printf("This Train No does not exist");
            getch();
            clearline(24);
            gotoxy(15,3);
            flag=1;
        }
    }while(strlen(passenger.tno)!=4||flag==1);
    if(found==0)
    {
        gotoxy(32,3);
        puts(train.tname);
        found=1;
    }

    fflush(stdin);
    do
    {
        flag=1;
        gotoxy(12,5);
        fflush(stdin);
        scanf("%[^
]",passenger.from);
        fflush(stdin);
        strupr(passenger.from);
        if (strlen(passenger.from) == 0)
        {
            gotoxy(10,24);
            printf("aFrom field should not be left BLANK");
            flag=0;
            getch();
            clearline(24);
        }
        else if (strlen(passenger.from) != 3)
        {
            gotoxy(10,24);
            printf("aFrom should be equal to 3 characters");
            flag=0;
            getch();
            clearline(24);
        }
        for(i=0;i<3;i++)
        {
            ch=passenger.from[i];
            if(isdigit(ch))
            {
                gotoxy(10,24);
                printf("aEnter a valid Boarding Place");
                flag=0;
                getch();
                clearline(24);
                break;
            }
        }
    }while (flag==0);
    gotoxy(12,5);
    puts(passenger.from);

    do
    {
        flag=1;
        gotoxy(27,5);
        fflush(stdin);
        scanf("%[^
]",passenger.to);
        fflush(stdin);
        strupr(passenger.to);
        if (strlen(passenger.to) == 0)
        {
            gotoxy(10,24);
            printf("aTo field should not be left BLANK");
            flag=0;
            getch();
            clearline(24);
        }
        else if (strlen(passenger.to) != 3)
        {
            gotoxy(10,24);
            printf("aTo should be equal to 3 characters");
            flag=0;
            getch();
            clearline(24);
        }
        for(i=0;i<3;i++)
        {
            ch=passenger.to[i];
            if(isdigit(ch))
            {
                gotoxy(10,24);
                printf("aEnter a valid Destination Place");
                flag=0;
                getch();
                clearline(24);
                break;
            }
        }
    }while (flag==0);
    gotoxy(27,5);
    puts(passenger.to);
    i=j=k=0;

    gotoxy(67,5);
    while(c!=13)
    {
        fflush(stdin);
        c=getch();
        if((c<'0'||c>'9')&&c!=13&&c!=8)
        {
            if(c==27)
                  return;
            gotoxy(5,24);
            printf("Please Enter Valid Date.");
            getch();
            gotoxy(67,5);
            printf("  ");
            gotoxy(5,24);
            clearline(24);
            gotoxy(67,5);
            count1=0;
            c='a';
        }
        else if(c==8)
        {
           if(wherex()>69)
           {
              gotoxy(wherex()-1,15);
              putch(' ');
              count1--;
              gotoxy(wherex()-1,15);
           }
        }
        else if(c!=13)
        {
           if(wherex()<69)
           {
              putch(c);
              age[count1]=c;
              count1++;
           }
           else
           {
              gotoxy(5,24);
              printf("Date Can Be Only 2 Digits.");
              getch();
              clearline(24);
              gotoxy(67,5);
           }
        }
        else
        {
            age[count1]='

No comments:

Post a Comment