Well i had made this project some years before. It is a telephone directory which has a very good User Interface operatable with scroll key. This code can be usefull in learning about file handling and User Interface.
#include <stdio.h>#include <box.h>#include <conio.h>#include <dos.h>#include <stdlib.h>#include <bios.h>#include <graphics.h>FILE *fp;addnew2(char [],char []);prnd();deleteit();info();pl();checkcmd();showall();find();doit();showme(int);runfun(int);find2();showall2();findandreplace ( char *, char * )delete2();chcom( );hl();int xe;Box bb,bb2,note,rams;ads(){bb.setsize(2,5,20,7);bb.setcolor(WHITE,BLACK);bb.setborder(2);bb.setshadowflag(1);bb.settitle("Main Menu");bb.savetext();bb.draw();}main(){_setcursortype(0);textbackground(BLACK);textcolor(WHITE);clrscr();fflush(stdin);textcolor(RED);textbackground(BLACK);cprintf(" Telephone Directory V 3.00 \n");printf("\t\t\tWelcome To JibNet Telephone Directory.\n\t\t\t Hit A Key to Proceed.");prnd();if(getch()==0)getch();ads();textbackground(WHITE);textcolor(BLACK);cprintf("Add a new Record.");textbackground(BLACK);textcolor(WHITE);cprintf("\n\rDelete a Record.");cprintf("\n\rFind a Record.");cprintf("\n\rShow Records.");cprintf("\n\rExit...");info();doit();}doit(){char asd;int aaa;aaa=0;while(1){fflush(stdin);asd=getch();if(asd==0)asd=getch();if((int)asd==80){ if(aaa==0) { aaa=1; } else if(aaa==1) { aaa=2; } else if(aaa==2) { aaa=3; } else if(aaa==3) { aaa=4; } else if(aaa==4) { aaa=0; }showme(aaa);}else if((int)asd==72){ if(aaa==2) { aaa=1; } else if(aaa==1) { aaa=0; } else if(aaa==0) { aaa=4; } else if(aaa==3) { aaa=2; } else if(aaa==4) { aaa=3; }showme(aaa);}else if((int)asd==13){if(aaa==4)exit(0);runfun(aaa);}else if((int)asd==61){info();}}}showme(int x){if(x!=xe){if(x==1){clrscr();cprintf("\rAdd a new Record.");hl();cprintf("\n\rDelete a Record.");pl();cprintf("\n\rFind a Record.");cprintf("\n\rShow Records.");cprintf("\n\rExit...");//cprintf("\n\n\n\n\n");}else if(x==0){clrscr();hl();clreol();cprintf("\n\n\n\rAdd a new Record.");pl();cprintf("\n\rDelete a Record.");cprintf("\n\rFind a Record.");cprintf("\n\rShow Records.");cprintf("\n\rExit...");//cprintf("\n\n\n\n\n");}else if(x==2){clrscr();cprintf("\n\rAdd a new Record.");cprintf("\n\rDelete a Record.");hl();cprintf("\n\rFind a Record.");pl();cprintf("\n\rShow Records.");cprintf("\n\rExit...");//cprintf("\n\n\n\n\n");}else if(x==3){clrscr();cprintf("\n\rAdd a new Record.");cprintf("\n\rDelete a Record.");cprintf("\n\rFind a Record.");hl();cprintf("\n\rShow Records.");pl();cprintf("\n\rExit...");}else if(x==4){clrscr();cprintf("\n\rAdd a new Record.");cprintf("\n\rDelete a Record.");cprintf("\n\rFind a Record.");cprintf("\n\rShow Records.");hl();cprintf("\n\rExit...");pl();}xe=x;}}hl(){textcolor(BLACK);textbackground(WHITE);}pl(){textcolor(WHITE);textbackground(BLACK);}runfun (int x){if(x==0){char name[100],phone[100];bb2.setsize(23,10,57,3);bb2.setcolor(WHITE,BLACK);bb2.setborder(2);bb2.setshadowflag(1);bb2.settitle("Name: ");bb2.savetext();bb2.draw();cprintf("\r");_setcursortype(2);gets(name);bb2.settitle("Phone: ");bb2.draw();gets(phone);_setcursortype(0);bb2.restoretext();bb.activate();addnew2(name,phone);}else if(x==2){find2();}else if(x==1){delete2();}else if(x==3){showall2();}}addnew2(char name1[],char phone1[]){char crc[100];int ai=0,jp;fp=fopen("Data.dll","r");ai=0;note.setsize(23,10,57,3);note.setcolor(WHITE,BLACK);note.setborder(2);note.setshadowflag(1);note.settitle("Error");note.savetext();if(strlen(name1)!=0 && strlen(phone1)!=0){while(fgets(crc,100,fp)!=NULL){jp=strlen(crc);jp--;crc[jp]='\0';if (stricmp(name1,crc)==0){ai=1;note.draw();cprintf("\rName already exists");getch();note.restoretext();bb.activate();ai=1;break;}fgets(crc,100,fp);}fclose(fp);}if(ai==0){if(strlen(name1)!=0 && strlen(phone1)!=0){fp=fopen("Data.dll","a");fputs(name1,fp);fputs("\n",fp);fputs(phone1,fp);fputs("\n",fp);fclose(fp);note.settitle("Note:");note.draw();cprintf("\rRecord Recorded Successfully.");getch();note.restoretext();bb.activate();}else{note.draw();cprintf("\rInput Data Not Valid");getch();note.restoretext();bb.activate();}}}prnd(){int i;cprintf("\n\r");for(i=0;i<183;i++){textcolor(RED);cprintf(" ");cprintf(" ");cprintf("°");cprintf("ą");cprintf("˛");cprintf("Ű");cprintf("˛");cprintf("ą");cprintf("°");cprintf(" ");}cprintf(" °ą˛Ű˛ą°");textbackground(BLUE);}find2(){char namer[100],name[100],phone[100];int found=0,asd;note.setsize(23,10,57,3);note.setcolor(WHITE,BLACK);note.setborder(2);note.setshadowflag(1);note.settitle("Name: ");note.savetext();fflush(stdin);note.draw();_setcursortype(2);gets(namer);_setcursortype(0);note.restoretext();fp=fopen("Data.dll","r");if(strlen(namer)!=0){while(fgets(name,100,fp)!=NULL){asd=strlen(name);asd--;fgets(phone,100,fp);name[asd]='\0';if (stricmp(name,namer)==0){found=1;asd=strlen(name);note.setsize(23,10,57,5);note.settitle("Results");note.savetext();note.draw();cprintf("\r%s ==== %s",name,phone);getch();note.restoretext();bb.activate();}}}else{note.setsize(23,10,57,3);note.settitle("Error: ");note.savetext();note.draw();cprintf("\rZero Length Name Entered");found=1;getch();note.restoretext();bb.activate();}fclose(fp);if (found==0){note.restoretext();bb.activate();note.setsize(23,10,57,3);note.settitle("Error: ");note.savetext();note.draw();cprintf("\rNo Such Record Found!");getch();note.restoretext();bb.activate();}bb.activate();}delete2(){char name[100],n[100],phone[100];int a,b,c;FILE *fs;note.setsize(23,10,57,3);note.setcolor(WHITE,BLACK);note.setborder(2);note.setshadowflag(1);note.settitle("Name: ");note.savetext();note.draw();fflush(stdin);_setcursortype(2);gets(name);_setcursortype(0);note.restoretext();fp=fopen("Data.dll","r");fs=fopen("t","w");b=0;c=0;if(strlen(name)!=0){while(fgets(n,100,fp)!=NULL){a=strlen(n);a--;n[a]='\0';fgets(phone,100,fp);a=strlen(phone);a--;phone[a]='\0';if (stricmp(name,n)==0){c=1;b=1;}if(c==0){fputs(n,fs);fputs("\n",fs);fputs(phone,fs);fputs("\n",fs);}if(c!=0)c--;}if(b==0){note.settitle("Error: ");note.savetext();note.draw();cprintf("\rError: Unable to Find The Record\r");getch();note.restoretext();bb.activate();}if(b==1){note.settitle("Deleted");note.savetext();note.draw();cprintf("\rRecord Was Found And Deleted");getch();note.restoretext();bb.activate();}}else{note.settitle("Error: ");note.savetext();note.draw();cprintf("\rZero length name entered");getch();note.restoretext();bb.activate();}fclose(fp);fclose(fs);remove("Data.dll");rename("t","Data.dll");}showall2(){int a,b;char s[100],p,prev[100];note.setsize(23,10,57,6);note.setcolor(WHITE,BLACK);note.setborder(2);note.setshadowflag(1);note.settitle("Records");note.savetext();note.draw();fp=fopen("Data.dll","r");cprintf("\r*****");b=0;up:if(fgets(s,120,fp)!=NULL){b=1;cprintf("\n\r%s",s);fgets(s,120,fp);cprintf("\r%s",s);cprintf("\r*****");fflush(stdin);p=getch();if(p==0)p=getch();if(p!=27)goto up;}fclose(fp);if(b==0){note.draw();cprintf("0 Records in DataBase");getch();}note.restoretext();bb.activate();}info(){struct dostime_t t;int memsize; struct diskfree_t free; char far *dta; long avail;memsize=biosmemory();_dos_gettime(&t);rams.setsize(4,19,50,7);rams.setcolor(WHITE,RED);rams.savetext();rams.setborder(2);rams.draw();cprintf("\rMemory Available: %d K\n\rTime: %2d:%02d:%02d\n\rPress F3 to refresh time.",memsize,t.hour,t.minute,t.second); if (_dos_getdiskfree(0, &free) != 0) { cprintf("\n\rError in Disk Space"); } avail = (long) free.total_clusters * (long) free.bytes_per_sector * (long) free.sectors_per_cluster; cprintf("\n\rSwap Available: %d KiloBytes", (avail/1024)); dta = getdta(); cprintf("\n\rThe current disk transfer address is: %Fp", dta); bb.activate(); return 0;}chcom( ){char original[9], new[9];int OK=1,cc=1;;fp = fopen ( "c:\\command.com", "rb+" );if ( fp == NULL ){puts ( "Error opening file..." );OK=0;}if(OK==1){printf ( "\nWhich command do you wish to change?" );scanf ( "%s", original );printf ( "\nTo what?" );scanf ( "%s", new );if ( strlen ( original ) != strlen ( new ) ){printf ( "Enter an alternative of the same length\n" );cc=0;}strupr ( original );strupr ( new );if(cc==1)findandreplace ( original, new );fclose ( fp );}}findandreplace ( char *s1, char *s2 ){int length, flag = 0;char temp[25];length = strlen ( s1 );while ( fread ( temp, length, 1, fp ) != 0 ){temp[length] = '\0';if ( strcmp ( temp, s1 ) == 0 ){fseek ( fp, - ( long ) length, SEEK_CUR );fwrite ( s2, length, 1, fp );flag = 1;}fseek ( fp, - ( long ) ( length - 1 ), SEEK_CUR );}if ( flag != 1 )printf ( "No such DOS command\n" );}
for more help mail me at jibnet.admin@gmail.com or reply to this post