MOBILINK CUSTOMER DATABASE PROJECT
SOURCE CODE
/********MOBILINK CUSTOMER DATABASE PROJECT************/
/**************BY HITESH KUMAR ******************************/
/*HEADER FILES ARE INCLUDED*/
#include <dos.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include<graphics.h>
/*MACROS ARE DEFINED*/
#define NUM 5
#define PH 12
#define MIN 30
#define MAX 61
/*FUNCTION DECLARATION*/
void add(); // Ask user for input.
void view(); // Diplay all the record.
void search(); // Search for a record.
void c_name(); // Changes the name in a record.
void c_add(); // Changes the address in a record.
void c_ct(); // Changes the connection type in a record.
void c_ph(); // Changes the phone in a record.
void del(); // Deletes a record.
int date(void); // This fucntion is for displaying System Date.
/*VALIDATION FUNCTIONS*/
void check_id(char *,int); //Checks for the length and validity of SIM ID
void check_name(char *,int); //Checks for the length and validity of NAME
void check_add(char *,int); //Checks for the length and validity of ADDRESS
void check_phone(char *,int); //Checks for the length and validity of PHONE NUMBER
void check_ct(int *); //Checks for the CONNECTION TYPE
int duplicate(char idno[]); //Checks for the Duplication of the SIM ID
/*MISC FUNCTION*/
void empty();
/*STRUCTURE DECLARATION*/
struct customer
{
char id[NUM]; /* ID of Length 5*/
char name[MIN]; /* Name of Length 30*/
char address[MAX]; /* Address of Length 61*/
char phone[PH]; /* Phone Number of Length 12*/
int connection; /* Connection Type of length 2*/
int day; /* It is used to display the day of length 2*/
int month; /* It is used to display the month of length 2*/
int year; /* it is used to display the year*/
}rec;
/***************************MAIN FUNCTION STARTS*****************************/
main()
{
int c;
do{
int i;
window(1,1,80,25);
textbackground(LIGHTRED);
textcolor(LIGHTGRAY);
clrscr();
gotoxy(24,2);
printf("<< MOBILINK CUSTOMER DATABASE >>");
gotoxy(24,3);
cprintf("<< BY-HITESH KUMAR >>");
for(i=10;i<=70;i++) //This 'FOR' loop will print a combination of
{ //asteriks '*' and dash '-' horizontally till
gotoxy(i,4); //the 70th column is reached.
printf("Ü");
gotoxy(71,4); //the 70th column is reached.
printf("Ü");
gotoxy(i,7);
printf("-");
gotoxy(i,9);
printf("-");
gotoxy(i,11);
printf("-");
gotoxy(i,13);
printf("-");
gotoxy(69,16);
printf("ß");
gotoxy(71,16);
printf("ß");
gotoxy(i,16);
printf("ß");
}
for(i=5;i<=15;i++) //This 'FOR' loop will print asteriks '*'
{ //vertically till the 15th row is reached.
gotoxy(10,i);
printf("ÝÞ");
gotoxy(70,i);
printf("ÝÞ");
}
for(i=6;i<=12;i++) //This 'FOR' loop will print '|' sign
{ //vertically till the 12th row is reached.
gotoxy(40,i);
printf("|");
}
gotoxy(15,6);
printf("[1] ENTER A RECORD");
gotoxy(15,8);
printf("[2] VIEW RECORDS");
gotoxy(15,10);
printf("[3] SEARCH RECORD");
gotoxy(15,12);
printf("[4] DELETE RECORD");
gotoxy(43,6);
printf("[5] CHANGE NAME");
gotoxy(43,8);
printf("[6] CHANGE ADDRESS");
gotoxy(43,10);
printf("[7] CHANGE CONNECTION TYPE");
gotoxy(43,12);
printf("[8] CHANGE PHONE NUMBER");
gotoxy(37,14);
printf("[9] EXIT");
gotoxy(10,20);
textcolor(LIGHTGRAY);
cprintf("PLEASE SELECT A CHOICE: ");
c = (getche());
switch (c) //This 'SWITCH' structure will ask the user for input from [1] to [9] and will display error on Invalid Entry.
{
case '1': add(); break; //It will call the add() funtion to allow user to add and save record.
case '2': view(); break; //It will call the view() funtion to allow user to view the saved record.
case '3': search(); break; //It will call the search() funtion to allow user to search records.
case '4': del(); break; //It will call the delete() funtion to allow user to delete a saved record.
case '5': c_name(); break; //It will call the c_name() funtion to allow user to modify name of a saved record.
case '6': c_add(); break; //It will call the c_add() funtion to allow user to modify address of a saved record.
case '7': c_ct(); break; //It will call the c_ct() funtion to allow user to modify connection type & date of a saved record.
case '8': c_ph(); break; //It will call the c_ph() funtion to allow user to modify phone number of a saved record.
case '9': gotoxy(30,24);printf("<<<<--THANK YOU-->>>>");getch();exit(0); //It will terminate the program.
default:
sound(500);delay(200);nosound(); //sound turns the PC speaker on at the specified frequency, nosound turns the PC speaker off.
gotoxy(26,24);
puts("<<--ENTER FROM 1-9 PLEASE-->>"); //This message will only print on INVALID ENTRY and Will ask again for input.
getch();
}
}while(c != '9'); //This 'WHILE' loop will continue till the Exit option [9] is entered.
return 0;
}
/**************************END OF MAIN FUNCTION******************************/
void add()
{
FILE *fp;
char ch;
char temp[NUM];
if(fp!=NULL)
{
do{
fp=fopen("customer.rec","ab");
clrscr();
gotoxy(25,2);
printf("<<==--ADDING RECORD--==>>");
do{
gotoxy(1,4);
printf("Enter [UNIQUE] SIM ID: ");
check_id(temp, NUM);
}while(duplicate(temp)); //This Condition Will keep on executng till a non duplicate ID is entered.
strcpy(rec.id, temp); //After verifying, ID in 'temp' will copy to 'rec.id'
gotoxy(1,6);
printf("Enter NAME: ");
check_name(rec.name,MIN); //It will verify that no neumerical input is given & the name input should not exceed the length limit
gotoxy(1,8);
printf("Enter ADDRESS: ");
check_add(rec.address,MAX); //It will verify that only alpha neumeric input is entered & should not exceed the length limit
gotoxy(1,10);
printf("Enter PHONE Number: ");
check_phone(rec.phone, PH); //It will verify phone number of a particular length
gotoxy(1,12);
printf("Enter CONNECTION TYPE: ");
check_ct(&rec.connection); //It will allow user to select between 'STAR' & 'JAZZ' only
{
struct date d;
getdate(&d);
gotoxy(1,12);
printf("DATE OF PURCHASE: %d %d %d ",d.da_day,d.da_mon,d.da_year);
rec.day = d.da_day;
rec.month = d.da_mon;
rec.year = d.da_year;
}
window(1,1,80,25);
gotoxy(1,12);
fwrite(&rec, sizeof(rec), 1, fp); //Record will be written to file.
fclose(fp);
textbackground(LIGHTRED);
gotoxy(20,24);
printf("DO YOU WISH TO CONTINUE..[Y]/[N]: ");
ch=toupper(getche());
}while(ch =='Y'); //Repeat loop while user inputs 'Y'
}
else
{
gotoxy(20,24);
printf("Unable To Open File...");
}
}
/**************************************************************************
| Function: view() |
| |
| Purpose : To Display all the records in the file in a |
| formatted output. |
| |
| Local Variables: |
| |
| >FILE *fp: Decalres file pointer. |
***************************************************************************/
void view()
{
FILE *fp;
fp=fopen("customer.rec","rb");
if(fp!=NULL)
{
clrscr();
while( fread(&rec, sizeof(rec), 1, fp))
if(strcmp(rec.id," ")!=0)
{
clrscr();
gotoxy(28,2);
printf("<<==--VIEWING RECORDS--==>>");
gotoxy(3,5);
printf(" SIM ID: %s",rec.id);
gotoxy(3,7);
printf(" NAME: %s",rec.name);
gotoxy(3,9);
printf(" ADDRESS: %s",rec.address);
gotoxy(3,11);
printf(" PHONE Number: %s",rec.phone);
gotoxy(3,13);
printf(" CONNECTION TYPE: %s",rec.connection);
if(rec.connection==1)
{
gotoxy(21,13);
printf("STAR");
}
else
if(rec.connection==2)
{
gotoxy(21,13);
printf("JAZZ");
}
gotoxy(3,15);
printf(" DATE Of PURCHASE: %d-%d-%d",rec.day,rec.month,rec.year);
getch();
}
if(strcmp(rec.id," ")==NULL)
{
clrscr();
gotoxy(20,13);
sound(500);delay(200);nosound();
printf("<<==--THERE ARE NO RECORDS TO VIEW--==>>");
getch();
}
fclose(fp);
}
else
{
gotoxy(20,24);
printf("Unable To Open File...");
}
}
/*************************END OF VIEW FUNCTION*******************************/
void search()
{
int ch;
FILE *fp;
char sno[NUM];
clrscr();
fp=fopen("customer.rec","rb");
gotoxy(20,13);
printf("PLEASE ENTER SIM ID ==->>>> ");
check_id(sno,NUM);
while ( fread(&rec, sizeof(rec), 1, fp) && strcmp(sno,rec.id) );
ch=strcmp(sno,rec.id);
if(ch!=0)
{
clrscr();
sound(500);delay(200);nosound();
gotoxy(28,13);
printf("<<--RECORD NOT FOUND-->>");
getch();
}
else
{
clrscr();
gotoxy(28,2);
printf("<<==SEARCH SUCCESSFUL==>>");
gotoxy(3,5);
printf(" SIM ID: %s",rec.id);
gotoxy(3,7);
printf(" NAME: %s",rec.name);
gotoxy(3,9);
printf(" ADDRESS: %s",rec.address);
gotoxy(3,11);
printf(" PHONE Number: %s",rec.phone);
gotoxy(3,13);
printf(" CONNECTION TYPE: %s",rec.connection);
if(rec.connection==1)
{
gotoxy(21,13);
printf("STAR");
}
else
if(rec.connection==2)
{
gotoxy(21,13);
printf("JAZZ");
}
gotoxy(3,15);
printf(" DATE Of PURCHASE: %d-%d-%d",rec.day,rec.month,rec.year);
getch();
}
fclose(fp);
}
/*************************END OF SEARCH FUNCTION*****************************/
void c_name()
{
int ch;
FILE *fp;
char sno[NUM];
clrscr();
fp=fopen("customer.rec","rb+");
gotoxy(20,13);
printf("PLEASE ENTER SIM ID ==->>>> ");
check_id(sno,NUM);
while ( fread(&rec, sizeof(rec), 1, fp) && strcmp(sno,rec.id) );
ch=strcmp(sno,rec.id);
if(ch!=0)
{
clrscr();
sound(500);delay(200);nosound();
gotoxy(28,13);
printf("<<--RECORD NOT FOUND-->>");
getch();
}
else
{
clrscr();
gotoxy(28,4);
printf("<<<--==RECORD FOUND==-->>>");
gotoxy(3,8);
printf("OLD NAME: %s",rec.name); // This will print the old name already stored.
gotoxy(3,12);
printf("ENTER NAME: "); // This will allow the user to change the old name and input a new name.
check_name(rec.name,MIN); // The check will validate each character entered turn by turn.
fseek(fp, ftell(fp) - sizeof(rec),0);
fwrite(&rec, sizeof(rec), 1, fp); //The new name will be added to the record.
gotoxy(34,24);
printf("RECORD SAVED !!!");
getch();
}
fclose(fp);
}
/*************************END OF CHANGE NAME FUNCTION************************/
void c_add()
{
int ch;
FILE *fp;
char sno[NUM];
clrscr();
fp=fopen("customer.rec","rb+");
gotoxy(20,13);
printf("PLEASE ENTER SIM ID ==->>>> ");
check_id(sno,NUM);
while ( fread(&rec, sizeof(rec), 1, fp) && strcmp(sno,rec.id) );
ch=strcmp(sno,rec.id); // Here the result after comparing the values of the two strings by using the 'strcmp' function is assigned to 'ch'.
if(ch!=0) // This loop will execute if the SIM ID's dont compare.
{
clrscr();
sound(500);delay(200);nosound();
gotoxy(28,13);
printf("<<--RECORD NOT FOUND-->>");
getch();
}
else // If the ID's match, then this block will be executed.
{
clrscr();
gotoxy(28,4);
printf("<<<--==RECORD FOUND==-->>>");
gotoxy(3,8);
printf("OLD ADDRESS: %s",rec.address);
gotoxy(3,12);
printf("ENTER NEW ADDRESS: ");
check_add(rec.address,MAX);
fseek(fp, ftell(fp) - sizeof(rec),0); //fseek sets the file pointer associated with a stream to a new position.
fwrite(&rec, sizeof(rec), 1, fp); //fwrite appends a specified number of equal-sized data items to an output file.
gotoxy(34,24);
printf("RECORD SAVED !!!");
getch();
}
fclose(fp);
}
/*************************END OF CHANGE ADDRESS FUNCTION*********************/
void c_ct()
{
int ch;
FILE *fp;
char sno[NUM];
clrscr();
fp=fopen("customer.rec","rb+");
gotoxy(20,13);
printf("PLEASE ENTER SIM ID ==->>>> ");
check_id(sno,NUM);
while ( fread(&rec, sizeof(rec), 1, fp) && strcmp(sno,rec.id) );
ch=strcmp(sno,rec.id);
if(ch!=0)
{
clrscr();
sound(500);delay(200);nosound();
gotoxy(28,13);
printf("<<--RECORD NOT FOUND-->>");
getch();
}
else
{
clrscr();
gotoxy(28,2);
printf("<<<--==RECORD FOUND==-->>>");
gotoxy(3,6);
printf("OLD DATE OF PURCHASE: %d %d %d",rec.day,rec.month,rec.year); //Old Date Of purchase is displayed.
{
struct date d;
getdate(&d);
gotoxy(3,8);
printf("NEW DATE OF PURCHASE: %d %d %d ",d.da_day,d.da_mon,d.da_year); //New Date Of Purchase is stored.
rec.day = d.da_day;
rec.month = d.da_mon;
rec.year= d.da_year;
}
gotoxy(3,10);
printf("OLD CONNECTION TYPE: %s",rec.connection); //Old Connection type is displayed
if(rec.connection==1)
{
gotoxy(24,10);
printf("STAR"); //If option stored in record is '1' Then "STAR" will be displayed on screen.
}
else
if(rec.connection==2)
{
gotoxy(24,10);
printf("JAZZ"); //If option stored in record is '2' Then "JAZZ" will be displayed on screen.
}
gotoxy(3,12);
printf("NEW CONNECTION TYPE: "); //New Connection Type is asked for Input.
check_ct(&rec.connection); //This check provides choices to the user to select b/w "STAR" or "JAZZ".
fseek(fp, ftell(fp) - sizeof(rec),0);
fwrite(&rec, sizeof(rec), 1, fp);
window(1,1,80,25);
gotoxy(1,12);
gotoxy(35,24);
printf("RECORD SAVED !!!");
getch();
}
fclose(fp);
}
/*******************END OF CHANGE CONNECTION TYPE FUNCTION*******************/
void c_ph()
{
int ch;
FILE *fp;
char sno[NUM];
clrscr();
fp=fopen("customer.rec","rb+");
gotoxy(20,13);
printf("PLEASE ENTER SIM ID ==->>>> ");
check_id(sno,NUM);
while ( fread(&rec, sizeof(rec), 1, fp) && strcmp(sno,rec.id) );
ch=strcmp(sno,rec.id);
if(ch!=0)
{
clrscr();
sound(500);delay(200);nosound();
gotoxy(28,13);
printf("<<--RECORD NOT FOUND-->>");
getch();
}
else
{
clrscr();
gotoxy(28,4);
printf("<<<--==RECORD FOUND==-->>>");
gotoxy(3,8);
printf("OLD PHONE NUMBER: %s",rec.phone); //Old phone number is displayed.
gotoxy(3,12);
printf("ENTER NEW PHONE NUMBER: "); //New phone number is asked by the user.
check_phone(rec.phone,PH);
fseek(fp, ftell(fp) - sizeof(rec),0);
fwrite(&rec, sizeof(rec), 1, fp);
gotoxy(34,24);
printf("RECORD SAVED !!!");
getch();
}
fclose(fp);
}
/*********************END OF CHANGE PHONE NUMBER FUNCTION********************/
void del()
{
int ch;
FILE *fp;
char sno[NUM];
clrscr();
fp=fopen("customer.rec","rb+");
gotoxy(20,13);
printf("PLEASE ENTER SIM ID ==->>>> ");
check_id(sno,NUM);
while ( fread(&rec, sizeof(rec), 1, fp) && strcmp(sno,rec.id) );
ch=strcmp(sno,rec.id);
if(ch!=0)
{
clrscr();
sound(500);delay(200);nosound();
gotoxy(28,13);
printf("<<--RECORD NOT FOUND-->>");
getch();
}
else //Here the saved record is displayed.
{
clrscr();
gotoxy(28,2);
printf("<<==SEARCH SUCCESSFUL==>>");
gotoxy(3,5);
printf(" SIM ID: %s",rec.id);
gotoxy(3,7);
printf(" NAME: %s",rec.name);
gotoxy(3,9);
printf(" ADDRESS: %s",rec.address);
gotoxy(3,11);
printf(" PHONE Number: %s",rec.phone);
gotoxy(3,13);
printf(" CONNECTION TYPE: %s",rec.connection);
if(rec.connection==1)
{
gotoxy(21,13);
printf("STAR");
}
else
if(rec.connection==2)
{
gotoxy(21,13);
printf("JAZZ");
}
gotoxy(3,15);
printf(" DATE Of PURCHASE: %d-%d-%d",rec.day,rec.month,rec.year);
gotoxy(26,24);
printf("PRESS ANY KEY TO DELETE RECORD.....");
getch();
empty(); //this is a Function which will erase the record in memory & NOT physically.
fseek(fp, ftell(fp) - sizeof(rec), 0);
fwrite(&rec, sizeof(rec), 1, fp);
clrscr();
sound(500);delay(200);nosound();
gotoxy(33,13);
printf("RECORD DELETED !!!");
getch();
}
fclose(fp);
}
/***************************END OF DELETE FUNCTION***************************/
void check_id(char *p, int size)
{
int i=0;
char ch;
do
{
ch=getch();
if( (ch>='0' && ch<='9') && (i<size-1) )
{
*p=ch; //The value is assigned to the pointer.
p++; //Pointer is incremented.
i++; //Length counter is incremented.
printf("%c",ch); //Validated character is printed.
}
else //This block of commands controls backspace.
if(ch==8 && i>0)
{
printf("%c%c%c",8,32,8);
i--; //Length counter is decremented.
p--; //Pointer is decremented.
}
}while(ch!=13 || i<size-1); //this loop will continue till the total given length is reached or 'ENTER' is pressed.
*p='\0';
}
void check_phone(char *ph, int size)
{
int p=0;
char s[20],ch;
do
{
ch=getch();
if( ((ch>='0' && ch<='9')||(ch=='-')) && (p<size-1) )
{
*ph=ch;
ph++;
p++;
printf("%c",ch);
}
else
if( (ch==8)&&(p>0) )
{
printf("%c%c%c",8,32,8);
p--;
ph--;
}
}while(ch!=13 || p<size-1);
s[p]='\0';
*ph='\0';
}
void check_name(char *p, int size)
{
int j=0;
char x[40],cj;
do
{
cj=toupper(getch());
if(((cj>='a' && cj<='z')||(cj>='A' && cj<='Z')||(cj==' ')) && (j<size-1))
{
*p++=cj;
j++;
printf("%c",cj);
}
else
if(cj==8 && j>0)
{
printf("%c%c%c",8,32,8);
j--; p--;
}
}while(cj!=13);
x[j]='\0';
*p='\0';
}
void check_add(char *p, int size)
{
int l=0;
char a[50],ad;
do
{
ad=toupper(getch());
if(((ad>='a' && ad<='z')||(ad>='A' && ad<='Z')||(ad==' ')||(ad==',')||(ad=='.')||(ad>='0' && ad<='9')) && (l<size-1))
{
*p++=ad;
l++;
printf("%c",ad);
}
else
if( (ad==8)&&(l>0) )
{
printf("%c%c%c",8,32,8);
l--; p--;
}
}while(ad!=13);
a[l]='\0'; *p='\0';
}
void check_ct(int *p)
{
int ab=1;
char ch;
int aa;
window(24,18,51,24);
textbackground(BLACK);
clrscr();
window(25,19,50,23);
textbackground(WHITE);
textcolor(BLACK);
clrscr();
gotoxy(11,2);
printf("STAR");
gotoxy(11,4);
printf("JAZZ");
do{
ch = getch();
if(ch==0)
{
ch = getch();
if(ch==72)
{
ab=ab-1;
}
else
if(ch==80)
{
ab=ab+1;
}
}
if(ab<1)
{
ab=1;
}
else
if(ab==1)
{
window(1,1,80,25);
window(35,22,40,22);
textbackground(WHITE);
textcolor(BLACK);
clrscr();
printf("JAZZ");
window(1,1,80,25);
window(35,20,41,20);
textcolor(RED);
clrscr();
printf("STAR");
aa=1;
window(1,1,80,25);
}
else
if(ab==2)
{
window(1,1,80,25);
window(35,20,41,20);
textbackground(WHITE);
textcolor(BLACK);
clrscr();
printf("STAR");
window(1,1,80,25);
window(35,22,40,22);
textcolor(RED);
clrscr();
aa=2;
printf("JAZZ");
window(1,1,80,25);
}
if(ab>2)
{
ab=2;
}
}while(ch != 13);
if (aa==1)
{
gotoxy(24,12);
printf("STAR");
*p=1;
}
else
if (aa==2)
{
gotoxy(24,12);
printf("JAZZ");
*p=2;
}
getch();
window(24,18,51,24);
textbackground(LIGHTRED);
textcolor(LIGHTGRAY);
clrscr();
}
void empty()
{
strcpy(rec.id," ");
strcpy(rec.name," ");
strcpy(rec.address," ");
strcpy(rec.phone," ");
rec.connection=0;
rec.day=0;
rec.month=0;
rec.year=0;
}
int duplicate(char idno[])
{
FILE *fp;
fp=fopen("customer.rec","rb");
while(fread(&rec, sizeof(rec), 1, fp) && strcmp(rec.id, idno));
fclose(fp);
if(strcmp(rec.id, idno)==0)
return 1;
else
return 0;
}
/*²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
²****************************| |*****************************²
²****************************| END OF PROJECT |*****************************²
²****************************| |*****************************²
²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²*/
/* HITESH KUMAR */
No comments :
Post a Comment