hello ppl
this is my 2nd post and as i said earlier, im writing a cpp program for an exam project.
the project is designing a school database system
neways the problem is that the the compiler hangs and terminates whenever a wrong type of data is entered i mean if (ch is an integer and text is entered)
chk out the code below for example. its a snippet of the whole prog but ive edited it so tht it can run independently for testing.
i have tried many things to stop this from happening like clearing the values of the variables every time a wrong input is given but... it dosent work
and also if there are places where something simpler could have been done please tell me
PLEASE HELP
thanx in advance
#include<iostream.h>
#include<conio.h>
#include <dos.h>
#include <stdio.h>
#include <graphics.h>
#include <process.h>
#include <string.h>
#include <ctype.h>
struct ddate //structure to store the date. with the built in 1 it is
{ //difficult to check for a valid date
int month; //if there is an easy way please tell me
int year;
int day;
};
void border () // function that makes the page border
{
setbkcolor (1);
setcolor (15);
rectangle (0, 0, 639, 479);
rectangle (5, 5, 634, 474);
struct time t; struct date d;
rectangle (535, 5, 634, 55);
rectangle (530, 5, 634, 60);
gotoxy (72, 2);
gettime (&t);
printf("%2d:%02d\n",t.ti_hour, t.ti_min);
gotoxy (70, 3);
getdate(&d);
printf("%d/%d/%d", d.da_day, d.da_mon, d.da_year);
// x1 y1 x2 y2
line ( 5, 370, 634, 370);
line ( 5, 375, 634, 375);
settextstyle (1,0,0);
setusercharsize (1,2,2,5);
outtextxy (50, 450, "Press 0 To Exit");
outtextxy (400,450, "Press F1 for help");
}
void clear (int col, int row, int end = 65) //clears the line for a specific
{ //area
for (int i=col; i<=end; i++)
{
gotoxy (i, row);
cout << " ";
}
}
void clear_box () //clears the textbox at the bottom
{ // of the page border
for (int i=5; i<=76; i++)
{
for (int j=25; j<=28; j++)
{
gotoxy (i,j);
cout << " ";
}
}
}
void add_disp () // generates the display for the addition of students
{
clrscr ();
cleardevice ();
border ();
settextstyle (1,0,3),
outtextxy (200, 20, "Add Student Details");
rectangle (85, 105, 554, 330);
gotoxy (15, 9);
cout << "Name: ";
gotoxy (15, 10);
cout << "Father's Name: ";
gotoxy (15, 11);
cout << "Mother's Name: ";
gotoxy (15, 12);
cout << "Date of Birth: ";
gotoxy (43, 12);
cout << "Place of Birth: ";
gotoxy (15, 13);
cout << "Sex: ";
gotoxy (43, 13);
cout << "Admission no: ";
gotoxy (15, 14);
cout << "Class: ";
gotoxy (32, 14);
cout << "Section: ";
gotoxy (50, 14);
cout << "Roll No: ";
gotoxy (15, 15);
cout << "Bus No: ";
gotoxy (30, 15);
cout << "Boarding Point: ";
gotoxy (15, 16);
cout << "Phone Nos: (R) ";
gotoxy (26, 17);
cout << "(O) ";
gotoxy (26, 18);
cout << "(M)";
gotoxy (15, 19);
cout << "Email: ";
bar (50,450, 540, 470);
}
struct general
{
char name[25];
char fath_name[25];
char moth_name[25];
ddate DOB;
char POB[15];
char sex;
long admno;
int cls;
char section;
int rollno;
int busno;
char board_point[20];
char no_res[10];
char no_off[10];
char no_mob[10];
char email[25];
};
void main()
{
clrscr();
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
cleardevice ();
border ();
// declaration of variables
char ch;
general temp;
int valid = 0;
add_disp();
do //loop to accept name until a valid entry is inputed
{
clear_box ();
clear (27,9);
gotoxy (5,25);
cout << "Enter Full Name Of The Student";
gotoxy (21,9);
gets (temp.name);
valid = 1;
if (temp.name[0] == 27)
return;
if ( strlen(temp.name) > 25 || strlen(temp.name) == 0 )
{
clear_box ();
gotoxy (5,25);
cout << "Name Cannot Be Blank Or Longer Than 25";
getch ();
valid = 0;
}
} while (!valid);
do
{
clear_box ();
clear (30,10);
gotoxy (5,25);
cout << "Enter Father's Name";
gotoxy (30,10);
gets (temp.fath_name);
valid = 1;
if ( strlen(temp.fath_name) > 25 || strlen(temp.fath_name) == 0 )
{
clear_box ();
gotoxy (5,25);
cout << "Name Must Not Be Blank Or Longer Than 25";
getch ();
valid = 0;
}
} while (!valid);
do
{
clear_box ();
clear (30,11);
gotoxy (5,25);
cout << "Enter Mother's Name";
gotoxy (30,11);
gets (temp.moth_name);
valid = 1;
if ( strlen(temp.moth_name) > 25 || strlen(temp.moth_name) == 0 )
{
clear_box ();
gotoxy (5,25);
cout << "Name Must Not Be Blank Or Longer Than 25";
getch ();
valid = 0;
}
} while (!valid);
do //this is where the problem occurs try entering a char for the date
{
clear_box ();
clear (30,12,42);
gotoxy (5,25);
cout << "Enter the Date Of Birth In The Format dd mm yyyy";
gotoxy (30,12);
cin >> temp.DOB.day;
gotoxy (33,12);
cin >> temp.DOB.month;
gotoxy (36,12);
cin >> temp.DOB.year;
valid = 1;
if ( temp.DOB.day > 31 || temp.DOB.day <=0 || temp.DOB.month > 12 || temp.DOB.month <=0 || temp.DOB.year > 2005 || temp.DOB.year < 1980)
{
temp.DOB.day=0;
temp.DOB.month=0;
temp.DOB.year=0;
clear_box ();
gotoxy (5,25);
cout << "dd Must Be Between 1-31";
gotoxy (5,26);
cout << "mm Must Be Between 1-12";
gotoxy (5,27);
cout << "yyyy Must Be Between 1980-2005";
getch ();
valid = 0;
}
} while (!valid);
do
{
clear_box ();
clear (59,12);
gotoxy (5,25);
cout << "Enter The Place Of Birth";
gotoxy (59,12);
gets (temp.POB);
valid = 1;
toupper (temp.section);
if ( strlen (temp.POB) > 15 || strlen (temp.POB) <=0 )
{
clear_box ();
gotoxy (5,25);
cout << "Place Of Birth Cannot Be Blank Or More Than 15";
getch ();
valid = 0;
}
} while (!valid);
do
{
clear_box ();
clear (20,13,42);
gotoxy (5,25);
cout << "Enter M for Male or F for Female";
gotoxy (20,13);
cin >> temp.sex;
temp.sex = toupper (temp.sex);
valid = 1;
if ( temp.sex != 'M' && temp.sex != 'F' )
{
clear_box ();
gotoxy (5,25);
cout << "Enter Only M or F";
getch ();
valid = 0;
}
} while (!valid);
do //here agn entering a char causes it to hang
{
temp.admno=0;
clear_box ();
clear (57,13);
gotoxy (5,25);
cout << "Enter Admission Number";
gotoxy (57,13);
cin >> temp.admno;
valid = 1;
if ( temp.admno > 1000000 )
{
clear_box ();
gotoxy (5,25);
cout << "Admission Number Too Long";
getch ();
valid = 0;
}
} while (!valid);
do //here too
{
temp.cls=0;
clear_box ();
clear (22,14,31);
gotoxy (5,25);
cout << "Enter Class";
gotoxy (22,14);
cin >> temp.cls;
valid = 1;
if ( temp.cls > 13 || temp.cls <= 0 )
{
clear_box ();
gotoxy (5,25);
cout << "Class Must Be Between 1-12";
getch ();
valid = 0;
}
} while (!valid);
do
{
temp.section = ' ';
char tem[1];
clear_box ();
clear (41,14,49);
gotoxy (5,25);
cout << "Enter section";
gotoxy (41,14);
cin >> tem; //this is done
//because section
temp.section = toupper (tem[0]); // must contain only 1
// character
valid = 1; // but if the user enters
// more than 1 it wud be
// a prob
if ( tem[0] < 65 || tem[0] < 91 || strlen (tem) > 1 )
{
clear_box ();
gotoxy (5,25);
cout << "Section Must Be Between A-Z";
getch ();
valid = 0;
}
} while (!valid);
do
{
temp.rollno = 0;
clear_box ();
clear (59,14);
gotoxy (5,25);
cout << "Enter Roll No";
gotoxy (59,14);
cin >> temp.rollno;
valid = 1;
if ( temp.rollno <= 0 )
{
clear_box ();
gotoxy (5,25);
cout << "Roll Number Cannot Be Blank";
getch ();
valid = 0;
}
} while (!valid);
do
{
temp.busno = 0;
clear_box ();
clear (23,15,29);
gotoxy (5,25);
cout << "Enter The Bus Number or 0 For Own Transport";
gotoxy (23,15);
cin >> temp.busno;
valid = 1;
if ( temp.busno < 0 || temp.busno > 15 )
{
clear_box ();
gotoxy (5,25);
cout << "Bus Nuumber Must Be Between 0-15";
getch ();
valid = 0;
}
} while (!valid);
do
{
clear_box ();
clear (46,15);
gotoxy (5,25);
cout << "Enter Boarding Point";
gotoxy (46,15);
gets (temp.board_point);
valid = 1;
if ( strlen ( temp.board_point) > 15 )
{
clear_box ();
gotoxy (5,25);
cout << "Boarding Point Cannot Be Longer Than 15";
getch ();
valid = 0;
}
} while (!valid);
do // even though this is a char, this too gives the same error
{
//temp.no_res = {" "}; //WHATS WRONG
//WITH THE SYNTAX
clear_box ();
clear (30,16);
gotoxy (5,25);
cout << "Enter Residence Phone Number";
gotoxy (30,16);
gets (temp.no_res);
valid = 1;
if ( strlen (temp.no_res) > 10 || strlen (temp.no_res) <=0 )
{
clear_box ();
gotoxy (5,25);
cout << "Number Cannot Be Blank Or Longer Than 10";
getch ();
valid = 0;
}
} while (!valid);
do // even though this is a char, this too gives the same error
{
clear_box ();
clear (30,17);
gotoxy (5,25);
cout << "Enter Office Phone Number";
gotoxy (30,17);
gets (temp.no_res);
valid = 1;
if ( strlen (temp.no_off) > 10 )
{
clear_box ();
gotoxy (5,25);
cout << "Number Cannot Be Longer Than 10";
getch ();
valid = 0;
}
} while (!valid);
do // even though this is a char, this too gives the same error
{
clear_box ();
clear (30,18);
gotoxy (5,25);
cout << "Enter Mobile Phone Number";
gotoxy (30,18);
gets (temp.no_mob);
valid = 1;
if ( strlen (temp.no_mob) > 10 )
{
clear_box ();
gotoxy (5,25);
cout << "Number Cannot Be Longer Than 10";
getch ();
valid = 0;
}
} while (!valid);
do
{
clear_box ();
clear (26,19);
gotoxy (5,25);
cout << "Enter Email Address";
gotoxy (26,19);
gets (temp.email);
valid = 1;
if ( strlen (temp.email) > 25 )
{
clear_box ();
gotoxy (5,25);
cout << "Email Address Cannot Be Longer Than 25";
getch ();
valid = 0;
}
} while (!valid);
gotoxy (5,25);
cout << "Are You Sure You Want To Save This Record (Y / N): ";
gotoxy (56,25);
cin >> ch;
toupper (ch);
if (ch == 'N')
return;
//f.add (temp);
clear_box ();
gotoxy (5,25);
cout << "Record Saved";
setfillstyle (0,1);
//bar (50,450, 540, 470);
clear_box ();
getch ();
}