Friday 2 June 2017

A Pascal database that uses a coloured window

program records1(input, output);
uses crt;
{const maxsize = 99;}
type
address = record
name : string[40];
street : string[40];
area : string[40];
town : string[40];
county : string[40];
postcode : string[40];
telephone : string[40];
email : string[40];
end;

var
book : array[1..50] of address;
diskfile : file of address;
counter : integer;
choice : integer;
output : text;

procedure save;
var
loop : integer;
begin
assign(diskfile,'address.data');
rewrite(diskfile);
for loop := 1 to counter  do
write(diskfile,book[loop]);
close(diskfile);
end;

procedure load;
begin
assign(diskfile,'address.data');
reset(diskfile);
while not eof(diskfile) do
begin
counter:= counter + 1;
read(diskfile, book[counter]);
end;
close(diskfile);
end;

procedure newaddress;
begin
counter := counter +1;
textbackground (cyan);
window(1, 1, 40, 40);
writeln('Enter name: ');
readln(book[counter].name);
writeln('Enter street: ');
readln(book[counter].street);
writeln('Area / district: ');
readln(book[counter].area);
writeln('Enter town / city: ');
readln(book[counter].town);
writeln('Enter county: ');
readln(book[counter].county);
writeln('Enter postcode: ');
readln(book[counter].postcode);
writeln('Enter telephone number: ');
readln(book[counter].telephone);
writeln('Enter email address: ');
readln(book[counter].email);
end;


procedure display;
var
loop : integer;
begin
textbackground (green);
window(1, 1, 40, 40);
for loop := 1 to counter  do
begin
writeln('RECORD NO. ',loop);
writeln(book[loop].name);
writeln(book[loop].street);
writeln(book[loop].area);
writeln(book[loop].town);
writeln(book[loop].county);
writeln(book[loop].postcode);
writeln(book[loop].telephone);
writeln(book[loop].email);
writeln('');
end;
end;

procedure search;
var
loop : integer;
target : string[40];
begin
window(1, 1, 40, 40);
textbackground(magenta);
writeln('Enter name to search for: ');
readln(target);
for loop := 1 to counter do
if book[loop].name = target
then begin
writeln(book[loop].name);
writeln(book[loop].street);
writeln(book[loop].area);
writeln(book[loop].town);
writeln(book[loop].county);
writeln(book[loop].postcode);
writeln(book[loop].telephone);
writeln(book[loop].email);
writeln('');
end;
end;

procedure delete;
var
target : integer;
loop : integer;
begin
window(1, 1, 40, 40);
textbackground(red);
writeln('Record number? ');
readln(target);
if(target>0) and (target<=counter)
then begin
for loop := target to counter-1  do
book[loop] := book[loop+1];
counter := counter -1;
end;
end;

procedure sort;
var
noswaps : boolean;
current : address;
x : integer;
begin
repeat
noswaps := true;
for x := 1 to counter -1 do
begin
if book[x].name > book[x + 1].name then
begin
current := book[x];
book[x] := book[x+1];
book[x+1] := current;
noswaps := false;
end;
end;
until noswaps;
end;

procedure print;
var
loop : integer;
begin
assign(output,'printout.prn');
rewrite(output);

for loop := 1 to counter do
with book[loop] do
begin
writeln(output,book[loop].name);
writeln(output,book[loop].street);
writeln(output,book[loop].town);
writeln(output,book[loop].county);
writeln(output,book[loop].postcode);
writeln(output,book[loop].telephone);
writeln(output,book[loop].email);
writeln(output);
writeln(output);
end;
close(output);
end;


begin
counter:= 0;
repeat
window(1, 1, 40, 30);
textbackground(blink);
writeln('');
writeln('Address book');
writeln('Load file 1');
writeln('New address 2');
writeln('Display addresses 3');
writeln('Select by name 4');
writeln('Delete record 5');
writeln('Sort records 6');
writeln('Save 7');
writeln('Print file 8');
writeln('Exit 9');
writeln('Choose ...');
readln(choice);

if choice = 1 then load;
if choice = 2 then newaddress;
if choice = 3 then display;
if choice = 4 then search;
if choice = 5 then delete;
if choice = 6 then sort;
if choice = 7 then save;
if choice= 8 then print;
until choice = 9;
end.

Tuesday 28 October 2014

A sorted single linked list database written in C

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
struct addr{
char name[40];
char street[40];
char district[40];
char town[40];
char county[40];
char country[40];
char postcode[40];
char telno[40];
char email[40];
struct addr *next;
};
typedef struct addr address;
address *temp, *start, *pointer,  *i= NULL;

void list(),  add(void),  deletion(void), search(void);
void save(), load(void), txtoutput(void), sort(void);
void readLine(char buffer[]);
int main(void)
{
int choice;
for(;;){
printf("\n");
printf("1.  Insert a record\n");
printf("2.  List the file\n");
printf("3.  Delete a record\n");
printf("4.  Save the file\n");
printf("5.  Save to a text file for output to a wp\n");
printf("6.  Search for a record\n");
printf("7.  Load the file\n");
printf("8.  Quit\n");
do{
printf("\nEnter your choice: ");
scanf("%i",&choice);
getchar();
if(choice==1) add();
if(choice==2) list();
if(choice==3) deletion();
if(choice==4) save();
if(choice==5) txtoutput();
if(choice==6) search();
if(choice==7) load();
if(choice== 8) exit(0);
}while(choice < 1 && choice >8);
}
return 0;
}



void add()
{
address *q;
pointer = (address*) malloc(sizeof(address));
q = (address*) malloc(sizeof(address));
printf("Enter information on new customer\n");

printf("Enter name: ");
readLine(pointer->name);

printf("Enter street: ");
readLine(pointer->street);

printf("Enter district / parish: ");
readLine(pointer->district);

printf("Enter town / city: ");
readLine(pointer->town);

printf("Enter county: ");
readLine(pointer->county);

printf("Enter country: ");
readLine(pointer->country);

printf("Enter postcode: ");
readLine(pointer->postcode);

printf("Enter telephone number: ");
readLine(pointer->telno);

printf("Enter email address: ");
readLine(pointer->email);
if (start == NULL || strcmp(pointer->name, start->name)<0)
{
pointer->next=start;
start=pointer;
}
else
{
q = start;
while(q->next!=NULL && strcmp(q->next->name , pointer->name) < 0)
q=q->next;
pointer->next=q->next;
q->next=pointer;
}
}



void list()
{

if(start==NULL)
printf("No records to view");
/*for (temp=start;temp!=NULL;temp=temp->next)*/
temp = start;
while(temp!=NULL)
{
printf("\n");
printf("%s\n",temp->name);
printf("%s\n",temp->street);
printf("%s\n",temp->district);
printf("%s\n",temp->town);
printf("%s\n",temp->county);
printf("%s\n",temp->country);
printf("%s\n",temp->postcode);
printf("%s\n",temp->telno);
printf("%s\n",temp->email);
printf("\n");
temp=temp->next;
}
}

void readLine(char buffer[])
{
char character;
int i=0;
do
{
character=getchar();
buffer[i]=character;
++i;
}
while(character !='\n');
buffer[i-1]='\0';
}


void save()
{
FILE *fp;
if((fp=fopen("maillist", "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}
temp=start;
while(temp){
fwrite(temp,
sizeof(struct addr), 1, fp);
temp = temp->next;
}
fclose(fp);
}

void load()
{
FILE *fp;
if((fp=fopen("maillist", "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}
start = ( address*) malloc(sizeof(address));
/*while(start){
temp=start->next;
free(temp);
start=temp;
}*/

free(start);
start=NULL;
while(!feof(fp)){

i = ( address*) malloc(sizeof(address));
temp = ( address*) malloc(sizeof(address));
if(!i){
printf("Out of memory.\n");
return;
}
if(1!=fread(i,sizeof(struct addr),1,fp))break;

if(start!=NULL)
{
temp = start;
while(temp->next!=NULL)
temp=temp->next;
i->next=NULL;
temp->next=i;
}
else
{
start=i;
i->next=NULL;
}
}
fclose(fp);
}

void txtoutput(void)
{
int t;
int count;
FILE *stream;
char filename[30];
count = 0;
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
stream = fopen(filename, "w+");
temp = start;
while(temp) {
count = count +1;
fprintf(stream,"%i\n",count); 
fprintf(stream,"%s\n", temp->name);
fprintf(stream,"%s\n", temp->street);
fprintf(stream,"%s\n", temp->district);
fprintf(stream,"%s\n", temp->town);
fprintf(stream,"%s\n", temp->county);
fprintf(stream,"%s\n", temp->country);
fprintf(stream,"%s\n", temp->postcode);
fprintf(stream,"%s\n", temp->telno);
fprintf(stream,"%s\n", temp->email);
fprintf(stream,"\n");
temp=temp->next;
}
fclose(stream);
return;
}

void search()
{
int flag=0;
char name[40]; 
printf("Enter name of person to search for\n");
readLine(name);
temp=start;
while(temp)
{
if(strcmp(name, temp->name)==0)
{
printf("%s\n",temp->name);
printf("%s\n",temp->street);
printf("%s\n",temp->district);
printf("%s\n",temp->town);
printf("%s\n",temp->county);
printf("%s\n",temp->country);
printf("%s\n",temp->postcode);
printf("%s\n",temp->telno);
printf("%s\n",temp->email);
flag= 1;
}
temp=temp->next;
}
if(flag==0) 
printf("Not found in list\n");
}

void deletion()
{
 address *t, *pt;
t = ( address*) malloc(sizeof(address));
pt = ( address*) malloc(sizeof(address));
char name[40];
if(start == NULL)
{
printf("List is empty\n");
return;
}
printf("Enter name of person to be deleted\n");
readLine(name);
if(strcmp(name,start->name)==0)
{
temp=start;
start = start->next;
free(temp);
printf("Record is deleted\n");
return;
}
pt=start;
t=start->next;
while(t!=NULL&& strcmp(t->name,name)!=0)
{
pt =t;
t=t->next;
}
if(t==NULL)
{
printf("Record does not exist\n");
return;
}
if(strcmp(t->name,name)==0)
{
pt->next=t->next;
printf("Record is deleted\n");
free(t);
return;
}
}


Wednesday 25 June 2014

A database in C using a single linked list.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#define MAX 10000
struct addr{
char name[40];
char street[40];
char district[40];
char town[40];
char county[40];
char country[40];
char postcode[40];
char telno[40];
char email[40];
struct addr *next;
};
typedef struct addr address;
address *temp, *start, *pointer,  *i= NULL;

void list(), createlist(void), add(void), addafter(void), deletion(void), search(void);
void save(), load(void), txtoutput(void);
void store();
void readLine(char buffer[]);
int main(void)
{
int choice;
for(;;){
printf("\n");
printf("1.  Create a list\n");
printf("2.  Add a record to the beginning of the list\n");
printf("3.  Add a record to the end of the list\n");
printf("4.  List the file\n");
printf("5.  Delete a record\n");
printf("6.  Save the file\n");
printf("7.  Save to a text file for output to a wp\n");
printf("8.  Search for a record\n");
printf("9.  Load the file\n");
printf("10. Quit\n");
do{
printf("\nEnter your choice: ");
scanf("%i",&choice);
getchar();
if(choice== 1) createlist();
if(choice==2) add();
if(choice==3) addafter();
if(choice==4) list();
if(choice==5) deletion();
if(choice==6) save();
if(choice==7) txtoutput();
if(choice==8) search();
if(choice==9) load();
if(choice== 10) exit(0);
}while(choice < 1 && choice >10);
}
return 0;
}



void add()
{
pointer = (address*) malloc(sizeof(address));

printf("Enter information on new customer\n");

printf("Enter name: ");
readLine(pointer->name);

printf("Enter street: ");
readLine(pointer->street);

printf("Enter district / parish: ");
readLine(pointer->district);

printf("Enter town / city: ");
readLine(pointer->town);

printf("Enter county: ");
readLine(pointer->county);

printf("Enter country: ");
readLine(pointer->country);

printf("Enter postcode: ");
readLine(pointer->postcode);

printf("Enter telephone number: ");
readLine(pointer->telno);

printf("Enter email pointer: ");
readLine(pointer->email);
pointer->next=start;
start=pointer;

}

void addafter()
{
pointer = (address*) malloc(sizeof(address));


printf("Enter information on new customer\n");

printf("Enter name: ");
readLine(pointer->name);

printf("Enter street: ");
readLine(pointer->street);

printf("Enter district / parish: ");
readLine(pointer->district);

printf("Enter town / city: ");
readLine(pointer->town);

printf("Enter county: ");
readLine(pointer->county);

printf("Enter country: ");
readLine(pointer->country);

printf("Enter postcode: ");
readLine(pointer->postcode);

printf("Enter telephone number: ");
readLine(pointer->telno);

printf("Enter email pointer: ");
readLine(pointer->email);
temp=start;
while(temp->next !=NULL)
temp=temp->next;
temp->next=pointer;
}

void list()
{

if(start==NULL)
printf("No records to view");
/*for (temp=start;temp!=NULL;temp=temp->next)*/
temp = start;
while(temp!=NULL)
{
printf("%s\n",temp->name);
printf("%s\n",temp->street);
printf("%s\n",temp->district);
printf("%s\n",temp->town);
printf("%s\n",temp->county);
printf("%s\n",temp->country);
printf("%s\n",temp->postcode);
printf("%s\n",temp->telno);
printf("%s\n",temp->email);
temp=temp->next;
}
}

void readLine(char buffer[])
{
char character;
int i=0;
do
{
character=getchar();
buffer[i]=character;
++i;
}
while(character !='\n');
buffer[i-1]='\0';
}

void createlist()
{
pointer = (address*) malloc(sizeof(address));


printf("Enter information on new customer\n");

printf("Enter name: ");
readLine(pointer->name);

printf("Enter street: ");
readLine(pointer->street);

printf("Enter district / parish: ");
readLine(pointer->district);

printf("Enter town / city: ");
readLine(pointer->town);

printf("Enter county: ");
readLine(pointer->county);

printf("Enter country: ");
readLine(pointer->country);

printf("Enter postcode: ");
readLine(pointer->postcode);

printf("Enter telephone number: ");
readLine(pointer->telno);

printf("Enter email pointer: ");
readLine(pointer->email);
pointer->next=NULL;
if(start==NULL)/*if list is empty*/
start=pointer;
else
{
/*add element to end of list*/
temp=start;
while(temp->next !=NULL)
temp=temp->next;
temp->next =pointer;
}
}
void save()
{
FILE *fp;
if((fp=fopen("maillist", "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}
temp=start;
while(temp){
fwrite(temp,
sizeof(struct addr), 1, fp);
temp = temp->next;
}
fclose(fp);
}

void load()
{
FILE *fp;
if((fp=fopen("maillist", "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}
start = ( address*) malloc(sizeof(address));
/*while(start){
temp=start->next;
free(temp);
start=temp;
}*/

free(start);
start=NULL;
while(!feof(fp)){

i = ( address*) malloc(sizeof(address));
temp = ( address*) malloc(sizeof(address));
if(!i){
printf("Out of memory.\n");
return;
}
if(1!=fread(i,sizeof(struct addr),1,fp))break;

if(start!=NULL)
{
temp = start;
while(temp->next!=NULL)
temp=temp->next;
i->next=NULL;
temp->next=i;
}
else
{
start=i;
i->next=NULL;
}
}
fclose(fp);
}

void txtoutput(void)
{
int t;
int count;
FILE *stream;
char filename[30];
count = 0;
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
stream = fopen(filename, "w+");
temp = start;
while(temp) {
count = count +1;
fprintf(stream,"%i\n",count);
fprintf(stream,"%s\n", temp->name);
fprintf(stream,"%s\n", temp->street);
fprintf(stream,"%s\n", temp->district);
fprintf(stream,"%s\n", temp->town);
fprintf(stream,"%s\n", temp->county);
fprintf(stream,"%s\n", temp->country);
fprintf(stream,"%s\n", temp->postcode);
fprintf(stream,"%s\n", temp->telno);
fprintf(stream,"%s\n", temp->email);
fprintf(stream,"\n");
temp=temp->next;
}
fclose(stream);
return;
}

void search()
{
int flag=0;
char name[40];
printf("Enter name of person to search for\n");
readLine(name);
temp=start;
while(temp)
{
if(strcmp(name, temp->name)==0)
{
printf("%s\n",temp->name);
printf("%s\n",temp->street);
printf("%s\n",temp->district);
printf("%s\n",temp->town);
printf("%s\n",temp->county);
printf("%s\n",temp->country);
printf("%s\n",temp->postcode);
printf("%s\n",temp->telno);
printf("%s\n",temp->email);
flag= 1;
}
temp=temp->next;
}
if(flag==0)
printf("Not found in list\n");
}

void deletion()
{
 address *t, *pt;
t = ( address*) malloc(sizeof(address));
pt = ( address*) malloc(sizeof(address));
char name[40];
if(start == NULL)
{
printf("List is empty\n");
return;
}
printf("Enter name of person to be deleted\n");
readLine(name);
if(strcmp(name,start->name)==0)
{
temp=start;
start = start->next;
free(temp);
return;
}
pt=start;
t=start->next;
while(t!=NULL&& strcmp(t->name,name)!=0)
{
pt =t;
t=t->next;
}
if(t==NULL)
{
printf("Record does not exist\n");
return;
}
if(strcmp(t->name,name)==0)
{
pt->next=t->next;
printf("Record is deleted\n");
free(t);
return;
}
}


Wednesday 30 October 2013

A database written in C that implements a quick sort and a binary chop search.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 10000
struct addr {
char name[40];
char street[40];
char district[40];
char town[40];
char county[40];
char country[40];
char postcode[40];
char telno[40];
char email[40];
}addr_list[MAX];

struct addr temp;
struct addr comp;
int counter;
int lend=1;
void init_list(void), enter(void);
void delete(void), list(void);
void load(void), save(void), sort(int left, int right);
void txtoutput(void);
void search(void);
void readLine(char buffer[]);
void swap(int i, int j);
int main(void)
{
int choice;
char s[3];
counter = 0;
init_list();
for(;;){
printf("\n");
printf("1.  Create a record\n");
printf("2.  Delete a record\n");
printf("3.  List the file\n");
printf("4.  Save the file\n");
printf("5.  Load the file\n");
printf("6.  Sort the file\n");
printf("7.  Search\n");
printf("8.  Output to a text file for printing or import into wp\n");
printf("9.  Quit\n");
do{
printf("\nEnter your choice: ");
readLine(s);
choice=atoi(s);
if(choice== 1) enter();
if(choice==2) delete();
if(choice==3) list();
if(choice==4) save();
if(choice==5) load();
if(choice==6) sort(1, counter);
if(choice==7) search();
if(choice== 8) txtoutput();
if(choice== 9) exit(0);
}while(choice < 1 && choice >9);
}
return 0;
}

void init_list(void)
{
register int t;

for(t=0; t<MAX; ++t) addr_list[t].name[0] ='\0';
}

void enter(void)
{
char s[40];
int i;
for(i=1; i<MAX; i++)
if(!*addr_list[i].name)
break;
if(i==MAX)
{
printf("Subscriber array full\n");
return;
}
printf("Enter information on new customer\n");

printf("Enter name: ");
readLine(addr_list[i].name);

printf("Enter street: ");
readLine(addr_list[i].street);

printf("Enter district / parish: ");
readLine(addr_list[i].district);

printf("Enter town / city: ");
readLine(addr_list[i].town);

printf("Enter county: ");
readLine(addr_list[i].county);

printf("Enter country: ");
readLine(addr_list[i].country);

printf("Enter postcode: ");
readLine(addr_list[i].postcode);

printf("Enter telephone number: ");
readLine(addr_list[i].telno);

printf("Enter email address: ");
readLine(addr_list[i].email);
counter=counter+1;
}



void delete(void)
{
int t;
int u;
printf("enter a record number #: ");
scanf("%i", &t);
getchar();
for(u=t; u<=counter; u++){
addr_list[u] = addr_list[u+1];
}
addr_list[counter].name[0] = '\0';
addr_list[counter].street[0] = '\0';
addr_list[counter].district[0] = '\0';
addr_list[counter].town[0] = '\0';
addr_list[counter].county[0] = '\0';
addr_list[counter].country[0] = '\0';
addr_list[counter].postcode[0] = '\0';
addr_list[counter].telno[0] = '\0';
addr_list[counter].email[0] = '\0';
counter = counter -1;
}

void list(void)
{
register int t;
int count;
count=0;
for(t=1; t<=counter; t++) {
count = count +1;
printf("Record number: %i\n",count);
printf("%s\n", addr_list[t].name);
printf("%s\n", addr_list[t].street);
printf("%s\n", addr_list[t].district);
printf("%s\n", addr_list[t].town);
printf("%s\n", addr_list[t].county);
printf("%s\n", addr_list[t].country);
printf("%s\n", addr_list[t].postcode);
printf("%s\n", addr_list[t].telno);
printf("%s\n", addr_list[t].email);
printf("\n");
}
}

void sort(int left, int right)
{
int i, last;
i=left;
if(left>=right) /*do nothing if array contains less than*/
return;        /*two elements*/

swap(left, (left+right)/2); /*move partition element to*/
last = left;               /*addr_list[0]*/
for(i=left; i<=right; i++) /*partition*/
if(strcmp(addr_list[i].name,addr_list[left].name)<0)
swap(++last, i);
swap(left, last);         /*restore partition element*/
sort(left, last - 1);
sort(last+1, right);
}
void swap(int i, int j)
{
temp = addr_list[i];
addr_list[i]=addr_list[j];
addr_list[j]=temp;
i++; j--;
}


void save(void)
{
FILE *fp;
register int i;

if((fp=fopen("maillist", "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}

for(i=1; i<MAX; i++)
if(*addr_list[i].name)
if(fwrite(&addr_list[i],
sizeof(struct addr), 1, fp)!=1)
printf("File write error.\n");

fclose(fp);
}

void loadbackup(void)
{
FILE *fp;
register int i;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");

if((fp=fopen(filename, "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}

init_list();
for(i=1;  i<MAX; i++){
if(fread(&addr_list[i],
sizeof(struct addr), 1, fp)!=1) {
if(feof(fp)) break;
printf("File read error.\n");
}
counter=counter+1;
}
fclose(fp);
}



void load(void)
{
FILE *fp;
register int i;

if((fp=fopen("maillist", "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}

init_list();
for(i=1;  i<MAX; i++){
if(fread(&addr_list[i],
sizeof(struct addr), 1, fp)!=1) {
if(feof(fp)) break;
printf("File read error.\n");
}
counter=counter +1;
}
fclose(fp);
}


void txtoutput(void)
{
int t;
int count;
FILE *stream;
char filename[30];
count = 0;
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
stream = fopen(filename, "w+");
for(t=1; t<MAX; t++) {
if(addr_list[t].name[0]) {
count = count +1;
fprintf(stream,"%i\n",count);
fprintf(stream,"%s\n", addr_list[t].name);
fprintf(stream,"%s\n", addr_list[t].street);
fprintf(stream,"%s\n", addr_list[t].district);
fprintf(stream,"%s\n", addr_list[t].town);
fprintf(stream,"%s\n", addr_list[t].county);
fprintf(stream,"%s\n", addr_list[t].country);
fprintf(stream,"%s\n", addr_list[t].postcode);
fprintf(stream,"%s\n", addr_list[t].telno);
fprintf(stream,"%s\n", addr_list[t].email);
fprintf(stream,"\n");
}
}
fclose(stream);
return;
}



void outputtwo(void)
{
FILE *fp;
register int i;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
if((fp=fopen(filename, "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}

for(i=1; i<MAX; i++)
if(*addr_list[i].name)
if(fwrite(&addr_list[i],
sizeof(struct addr), 1, fp)!=1)
printf("File write error.\n");

fclose(fp);
}

void search(void)
{

int low, mid, top, found,count,countdown;
char s[40];
printf("\nEnter a name.\n");
readLine(s);
low = 1;
top = counter;
do
{
found = 0;
mid = (low + top)/2;


if (strcmp(s, addr_list[mid].name)==0)
{
printf("\nRecord number: %i\n", mid);
printf("\nName: %s\n",addr_list[mid].name);
printf("\nStreet: %s\n",addr_list[mid].street);
printf("\nDistrict: %s\n",addr_list[mid].district);
printf("\nTown: %s\n",addr_list[mid].town);
printf("\nCounty: %s\n",addr_list[mid].county);
printf("\nCountry: %s\n",addr_list[mid].country);
printf("\nPostcode:%s\n",addr_list[mid].postcode);
printf("\nTelephone number: %s\n",addr_list[mid].telno);
printf("\nEmail address: %s\n",addr_list[mid].email);
printf("\n");
/*break;*/
count = mid;
countdown = mid;

do
{
countdown=countdown-1;
if(strcmp(s, addr_list[countdown].name)==0)
{
printf("\nRecord number: %i\n", countdown);
printf("\nName: %s\n",addr_list[countdown].name);
printf("\nStreet: %s\n",addr_list[countdown].street);
printf("\nDistrict: %s\n",addr_list[countdown].district);
printf("\nTown: %s\n",addr_list[countdown].town);
printf("\nCounty: %s\n",addr_list[countdown].county);
printf("\nCountry: %s\n",addr_list[countdown].country);
printf("\nPostcode:%s\n",addr_list[countdown].postcode);
printf("\nTelephone number: %s\n",addr_list[countdown].telno);
printf("\nEmail address: %s\n",addr_list[countdown].email);
printf("\n");
}
}while(strcmp(s,addr_list[countdown].name)==0);

do{
count=count +1;
if(strcmp(s, addr_list[count].name)==0)
{
printf("\nRecord number: %i\n", count);
printf("\nName: %s\n",addr_list[count].name);
printf("\nStreet: %s\n",addr_list[count].street);
printf("\nDistrict: %s\n",addr_list[count].district);
printf("\nTown: %s\n",addr_list[count].town);
printf("\nCounty: %s\n",addr_list[count].county);
printf("\nCountry: %s\n",addr_list[count].country);
printf("\nPostcode:%s\n",addr_list[count].postcode);
printf("\nTelephone number: %s\n",addr_list[count].telno);
printf("\nEmail address: %s\n",addr_list[count].email);
printf("\n");
}
}while(strcmp(s,addr_list[count].name)==0);

return;
}
else
if(strcmp(s, addr_list[mid].name)<0)
top = mid -1;
else
if(strcmp(s, addr_list[mid].name)>0)
low = mid + 1;
}while(low<=top);
}
void readLine(char buffer[])
{
char character;
int i=0;
do
{
character=getchar();
buffer[i]=character;
++i;
}
while(character !='\n');
buffer[i-1]='\0';
}

Tuesday 6 August 2013

A simpler C database to organise your contacts.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 10000

struct addr {
char name[40];
char street[40];
char district[40];
char town[40];
char county[40];
char country[40];
char postcode[40];
char telno[40];
char email[40];
}addr_list[MAX];

struct addr temp;
int counter;
void init_list(void), enter(void);
void delete(void), list(void);
void load(void), save(void), sort(void);
void txtoutput(void);
void search(void);
void readLine(char buffer[]);
void swap(int u, int v);
int main(void)
{
int choice;
char s[3];
counter = 0;
init_list();
for(;;){
printf("\n");
printf("1.  Create a record\n");
printf("2.  Delete a record\n");
printf("3.  List the file\n");
printf("4.  Save the file\n");
printf("5.  Load the file\n");
printf("6.  Sort the file\n");
printf("7.  Search\n");
printf("8.  Output to a text file for printing or import into wp\n");
printf("9.  Quit\n");
do{
printf("\nEnter your choice: ");
readLine(s);
choice=atoi(s);
if(choice== 1) enter();
if(choice==2) delete();
if(choice==3) list();
if(choice==4) save();
if(choice==5) load();
if(choice==6) sort();
if(choice==7) search();
if(choice== 8) txtoutput();
if(choice== 9) exit(0);
}while(choice < 1 && choice >9);
}
return 0;
}

void init_list(void)
{
register int t;

for(t=0; t<MAX; ++t) addr_list[t].name[0] ='\0';
}

void enter(void)
{
char s[40];
int i;
for(i=1; i<MAX; i++)
if(!*addr_list[i].name)
break;
if(i==MAX)
{
printf("Subscriber array full\n");
return;
}
printf("Enter information on new customer\n");

printf("Enter name: ");
readLine(addr_list[i].name);

printf("Enter street: ");
readLine(addr_list[i].street);

printf("Enter district / parish: ");
readLine(addr_list[i].district);

printf("Enter town / city: ");
readLine(addr_list[i].town);

printf("Enter county: ");
readLine(addr_list[i].county);

printf("Enter country: ");
readLine(addr_list[i].country);

printf("Enter postcode: ");
readLine(addr_list[i].postcode);

printf("Enter telephone number: ");
readLine(addr_list[i].telno);

printf("Enter email address: ");
readLine(addr_list[i].email);
counter=counter+1;
}



void delete(void)
{
int t;
int u;
printf("enter a record number #: ");
scanf("%i", &t);
getchar();
for(u=t; u<=counter; u++){
addr_list[u] = addr_list[u+1];
}
addr_list[counter].name[0] = '\0';
addr_list[counter].street[0] = '\0';
addr_list[counter].district[0] = '\0';
addr_list[counter].town[0] = '\0';
addr_list[counter].county[0] = '\0';
addr_list[counter].country[0] = '\0';
addr_list[counter].postcode[0] = '\0';
addr_list[counter].telno[0] = '\0';
addr_list[counter].email[0] = '\0';
counter = counter -1;
}

void list(void)
{
register int t;
int count;
count=0;
for(t=1; t<=counter; t++) {
count = count +1;
printf("Record number: %i\n",count);
printf("%s\n", addr_list[t].name);
printf("%s\n", addr_list[t].street);
printf("%s\n", addr_list[t].district);
printf("%s\n", addr_list[t].town);
printf("%s\n", addr_list[t].county);
printf("%s\n", addr_list[t].country);
printf("%s\n", addr_list[t].postcode);
printf("%s\n", addr_list[t].telno);
printf("%s\n", addr_list[t].email);
printf("\n");
}
}

void sort(void)
{
register int u;
register int v;
for(u=1; u<counter; u++)
for (v=u+1; v<=counter; v++){
if( strcmp(addr_list[u].name, addr_list[v].name) >0){
swap(u, v);
}
}
}
void swap(int u, int v)
{
temp = addr_list[u];
addr_list[u]=addr_list[v];
addr_list[v]=temp;
}

void save(void)
{
FILE *fp;
register int i;

if((fp=fopen("maillist", "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}

for(i=1; i<MAX; i++)
if(*addr_list[i].name)
if(fwrite(&addr_list[i],
sizeof(struct addr), 1, fp)!=1)
printf("File write error.\n");

fclose(fp);
}

void loadbackup(void)
{
FILE *fp;
register int i;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");

if((fp=fopen(filename, "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}

init_list();
for(i=1;  i<MAX; i++){
if(fread(&addr_list[i],
sizeof(struct addr), 1, fp)!=1) {
if(feof(fp)) break;
printf("File read error.\n");
}
counter=counter+1;
}
fclose(fp);
}



void load(void)
{
FILE *fp;
register int i;

if((fp=fopen("maillist", "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}

init_list();
for(i=1;  i<MAX; i++){
if(fread(&addr_list[i],
sizeof(struct addr), 1, fp)!=1) {
if(feof(fp)) break;
printf("File read error.\n");
}
counter=counter +1;
}
fclose(fp);
}


void txtoutput(void)
{
int t;
int count;
FILE *stream;
char filename[30];
count = 0;
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
stream = fopen(filename, "w+");
for(t=1; t<MAX; t++) {
if(addr_list[t].name[0]) {
count = count +1;
fprintf(stream,"%i\n",count);
fprintf(stream,"%s\n", addr_list[t].name);
fprintf(stream,"%s\n", addr_list[t].street);
fprintf(stream,"%s\n", addr_list[t].district);
fprintf(stream,"%s\n", addr_list[t].town);
fprintf(stream,"%s\n", addr_list[t].county);
fprintf(stream,"%s\n", addr_list[t].country);
fprintf(stream,"%s\n", addr_list[t].postcode);
fprintf(stream,"%s\n", addr_list[t].telno);
fprintf(stream,"%s\n", addr_list[t].email);
fprintf(stream,"\n");
}
}
fclose(stream);
return;
}



void outputtwo(void)
{
FILE *fp;
register int i;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
if((fp=fopen(filename, "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}

for(i=1; i<MAX; i++)
if(*addr_list[i].name)
if(fwrite(&addr_list[i],
sizeof(struct addr), 1, fp)!=1)
printf("File write error.\n");

fclose(fp);
}

void search(void)
{
int i;
int count;
count=0;
char s[40];
printf("\nEnter a name.\n");
readLine(s);
for(i=1;i<MAX;i++)
{
if(addr_list[i].name[0]) {
count = count +1;
}

if (strcmp(s, addr_list[i].name)==0)
{
printf("\nRecord number: %i\n", count);
printf("\nName: %s\n",addr_list[i].name);
printf("\nStreet: %s\n",addr_list[i].street);
printf("\nDistrict: %s\n",addr_list[i].district);
printf("\nTown: %s\n",addr_list[i].town);
printf("\nCounty: %s\n",addr_list[i].county);
printf("\nCountry: %s\n",addr_list[i].country);
printf("\nPostcode:%s\n",addr_list[i].postcode);
printf("\nTelephone number: %s\n",addr_list[i].telno);
printf("\nEmail address: %s\n",addr_list[i].email);
printf("\n");
}
}
}

void readLine(char buffer[])
{
char character;
int i=0;
do
{
character=getchar();
buffer[i]=character;
++i;
}
while(character !='\n');
buffer[i-1]='\0';
}

Monday 5 August 2013

Pascal database with output for printer

const maxsize = 99;
type
address = record
name : string[40];
street : string[40];
town : string[40];
county : string[40];
postcode : string[40];
telephone : string[40];
email : string[40];
end;
type personinfo = array[1..maxsize] of address;
var
details : personinfo;
diskfile : file of address;
txtfile : file of string;
output : text;
counter : integer;
choice : integer;
 
procedure save;
var
loop : integer;
begin
assign(diskfile,'address.data');
rewrite(diskfile);
for loop := 1 to counter do
write(diskfile,details[loop]);
close(diskfile);
end;
procedure printrecords;
var
loop : integer;
begin
assign(output,'printout.prn');
rewrite(output);
for loop := 1 to counter do
with details[loop] do
begin
writeln(output,details[loop].name);
writeln(output,details[loop].street);
writeln(output,details[loop].town);
writeln(output,details[loop].county);
writeln(output,details[loop].postcode);
writeln(output,details[loop].telephone);
writeln(output,details[loop].email);
writeln(output);
writeln(output);
end;
close(output);
end;
 
 
procedure load;
begin
assign(diskfile,'address.data');
reset(diskfile);
while not eof(diskfile) do
begin
counter := counter + 1;
read(diskfile, details[counter]);
end;
close(diskfile);
end;
procedure newaddress;
begin
counter :=counter + 1;
with details[counter] do
begin
write('Enter name: ');
readln(name);
write('Enter street: ');
readln(street);
write('Enter town / city: ');
readln(town);
write('Enter county: ');
readln(county);
write('Enter postcode: ');
readln(postcode);
write('Enter telephone number: ');
readln(telephone);
write('Enter email address: ');
readln(email);
end;
end;
 
 
procedure display;
var
loop : integer;
begin
for loop := 1 to counter do
begin
with details[loop] do
begin
writeln('RECORD NO. ',loop);
writeln(name);
writeln(street);
writeln(town);
writeln(county);
writeln(postcode);
writeln(telephone);
writeln(email);
writeln('');
end;
end;
end;
procedure search;
var
loop : integer;
target : string[40];
begin
writeln('Enter name to search for: ');
readln(target);
for loop := 1 to counter do
if details[loop].name = target then
with details[loop] do
begin
writeln('RECORD NO. ',loop);
writeln(name);
writeln(street);
writeln(town);
writeln(county);
writeln(postcode);
writeln(telephone);
writeln(email);
writeln('');
end;
end;
procedure delete;
var
target : integer;
loop : integer;
begin
write('Record number? ');
readln(target);
if(target>0) and (target<counter)
then begin
for loop := target to counter - 1 do
details[loop] := details[loop+1];
counter := counter -1;
end;
end;
procedure sort;
var
noswaps : boolean;
current : address;
x : integer;
begin
repeat
noswaps := true;
for x := 1 to counter -1 do
begin
if details[x].name > details[x + 1].name then
begin
current := details[x];
details[x] := details[x+1];
details[x+1] := current;
noswaps := false;
end;
end;
until noswaps;
end;
 
begin
counter:= 0;
{load;}
writeln('Address details');
repeat
{while choice <> '6' do
begin}
writeln('Load file 1');
writeln('New address 2');
writeln('Display addresses 3');
writeln('Select by name 4');
writeln('Delete record 5');
writeln('Sort records 6');
writeln('Save 7');
writeln('Save records to file for printing 8');
writeln('Exit 9');
writeln('Choose ...');
readln(choice);
{case choice of
'1' : load;
'2' : newcd;
'3' : display;
'4' : search;
'5' : delete;
'6' : sort;
'7' : save;
end;}
if choice = 1 then load;
if choice = 2 then newaddress;
if choice = 3 then display;
if choice = 4 then search;
if choice = 5 then delete;
if choice = 6 then sort;
if choice = 7 then save;
if choice = 8 then printrecords;
until choice = 9;
{end;}
end.
 

Tuesday 16 August 2011

C database to keep track of and organise your contact details.


A website of mine which includes downloads for a C and Pascal is http://tarkastatistics.webs.com/

This is a database which will run on Linux to organise your contact details. It can be compiled from a terminal using the GNU compiler. The command is gcc filename. This creates an output file called a.out. It can be renamed using the command mv a.out newfilename. The command to run the program is ./newfilename.
 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100

struct addr {
char name[40];
char street[40];
char district[40];
char town[40];
char county[40];
char country[40];
char postcode[40];
char telno[40];
char email[40];
}addr_list[MAX];

struct addr temp;
int counter;
void init_list(void), enter(void);
void delete(void), list(void);
void load(void), save(void), sort(void);
void loadbackup(void), outputthree(void);
void outputtwo(void), search(void);
void readLine(char buffer[]);
void swap(int u, int v);
int main(void)
{
int choice;
char s[80];
counter = 0;
init_list();
for(;;) {
printf("\n");
printf("1.  Create a record\n");
printf("2.  Delete a record\n");
printf("3.  List the file\n");
printf("4.  Save the file\n");
printf("5.  Load the file\n");
printf("6.  Sort the file\n");
printf("7.  Search\n");
printf("8.  Save to a back up file\n");
printf("9.  Load from a backup file\n");
printf("10. Output to a text file for printing or import into wp\n");
printf("11. Quit\n");
do {
printf("\nEnter your choice: ");
readLine(s);
choice=atoi(s);
}while(choice < 0 && choice > 11);
switch(choice) {
case 1: enter();
break;
case 2: delete();
break;
case 3: list();
break;
case 4: save();
break;
case 5: load();
break;
case 6: sort();
break;
case 7: search();
break;
case 8: outputtwo();
break;
case 9: loadbackup();
break;
case 10: outputthree();
break;
case 11: exit(0);
}
}
return 0;
}

void init_list(void)
{
register int t;

for(t=0; t<MAX; ++t) addr_list[t].name[0] ='\0';
}

void enter(void)
{
char s[40];
int i;
for(i=1; i<MAX; i++)
if(!*addr_list[i].name)
break;
if(i==MAX)
{
printf("Subscriber array full\n");
return;
}
printf("Enter information on new customer\n");

printf("Enter name: ");
readLine(addr_list[i].name);

printf("Enter street: ");
readLine(addr_list[i].street);

printf("Enter district / parish: ");
readLine(addr_list[i].district);

printf("Enter town / city: ");
readLine(addr_list[i].town);

printf("Enter county: ");
readLine(addr_list[i].county);

printf("Enter country: ");
readLine(addr_list[i].country);

printf("Enter postcode: ");
readLine(addr_list[i].postcode);

printf("Enter telephone number: ");
readLine(addr_list[i].telno);

printf("Enter email address: ");
readLine(addr_list[i].email);
counter=counter+1;
}



void delete(void)
{
int t;
int u;
printf("enter a record number #: ");
scanf("%i", &t);
for(u=t; u<=counter; u++){
strncpy(addr_list[u].name, addr_list[u+1].name, 40);
strncpy(addr_list[u].street, addr_list[u+1].street, 40);
strncpy(addr_list[u].district, addr_list[u+1].district, 40);
strncpy(addr_list[u].town, addr_list[u+1].town, 40);
strncpy(addr_list[u].county, addr_list[u+1].county, 40);
strncpy(addr_list[u].country, addr_list[u+1].country, 40);
strncpy(addr_list[u].postcode, addr_list[u+1].postcode, 40);
strncpy(addr_list[u].telno, addr_list[u+1].telno, 40);
strncpy(addr_list[u].email, addr_list[u+1].email, 40);
}
addr_list[counter].name[0] = '\0';
addr_list[counter].street[0] = '\0';
addr_list[counter].district[0] = '\0';
addr_list[counter].town[0] = '\0';
addr_list[counter].county[0] = '\0';
addr_list[counter].country[0] = '\0';
addr_list[counter].postcode[0] = '\0';
addr_list[counter].telno[0] = '\0';
addr_list[counter].email[0] = '\0';
counter = counter -1;
}

void list(void)
{
register int t;
int count;
count=0;
for(t=1; t<=counter; t++) {
count = count +1;
printf("Record number: %i\n",count);
printf("%s\n", addr_list[t].name);
printf("%s\n", addr_list[t].street);
printf("%s\n", addr_list[t].district);
printf("%s\n", addr_list[t].town);
printf("%s\n", addr_list[t].county);
printf("%s\n", addr_list[t].country);
printf("%s\n", addr_list[t].postcode);
printf("%s\n", addr_list[t].telno);
printf("%s\n", addr_list[t].email);
printf("\n");
}
}

void sort(void)
{
register int u;
register int v;
for(u=1; u<counter; u++)
for (v=u+1; v<=counter; v++){
if( strcmp(addr_list[u].name, addr_list[v].name) >0){
swap(u, v);
}
}
}

void swap(int u, int v)
{
strncpy(temp.name, addr_list[u].name, 40);
strncpy(temp.street, addr_list[u].street, 40);
strncpy(temp.district, addr_list[u].district, 40);
strncpy(temp.town, addr_list[u].town, 40);
strncpy(temp.county, addr_list[u].county, 40);
strncpy(temp.country, addr_list[u].country, 40);
strncpy(temp.postcode,addr_list[u].postcode, 40);
strncpy(temp.telno, addr_list[u].telno, 40);
strncpy(temp.email, addr_list[u].email, 40);
strncpy(addr_list[u].name, addr_list[v].name, 40);
strncpy(addr_list[u].street, addr_list[v].street, 40);
strncpy(addr_list[u].district, addr_list[v].district, 40);
strncpy(addr_list[u].town, addr_list[v].town, 40);
strncpy(addr_list[u].county, addr_list[v].county, 40);
strncpy(addr_list[u].country, addr_list[v].country, 40);
strncpy(addr_list[u].postcode, addr_list[v].postcode, 40);
strncpy(addr_list[u].telno, addr_list[v].telno, 40);
strncpy(addr_list[u].email, addr_list[v].email, 40);
strncpy(addr_list[v].name, temp.name, 40);
strncpy(addr_list[v].street, temp.street, 40);
strncpy(addr_list[v].district, temp.district, 40);
strncpy(addr_list[v].town, temp.town, 40);
strncpy(addr_list[v].county, temp.county, 40);
strncpy(addr_list[v].country, temp.country, 40);
strncpy(addr_list[v].postcode, temp.postcode, 40);
strncpy(addr_list[v].telno, temp.telno, 40);
strncpy(addr_list[v].email, temp.email, 40);

}
void save(void)
{
FILE *fp;
register int i;

if((fp=fopen("maillist", "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}

for(i=1; i<MAX; i++)
if(*addr_list[i].name)
if(fwrite(&addr_list[i],
sizeof(struct addr), 1, fp)!=1)
printf("File write error.\n");

fclose(fp);
}

void loadbackup(void)
{
FILE *fp;
register int i;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");

if((fp=fopen(filename, "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}

init_list();
for(i=1;  i<MAX; i++){
if(fread(&addr_list[i],
sizeof(struct addr), 1, fp)!=1) {
if(feof(fp)) break;
printf("File read error.\n");
}
counter=counter+1;
}
fclose(fp);
}



void load(void)
{
FILE *fp;
register int i;

if((fp=fopen("maillist", "rb"))==NULL) {
printf("Cannot open file,\n");
return;
}

init_list();
for(i=1;  i<MAX; i++){
if(fread(&addr_list[i],
sizeof(struct addr), 1, fp)!=1) {
if(feof(fp)) break;
printf("File read error.\n");
}
counter=counter +1;
}
fclose(fp);
}


void outputthree(void)
{
int t;
int count;
FILE *stream;
char filename[30];
count = 0;
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
stream = fopen(filename, "w+");
for(t=1; t<MAX; t++) {
if(addr_list[t].name[0]) {
count = count +1;
fprintf(stream,"%i\n",count);
fprintf(stream,"%s\n", addr_list[t].name);
fprintf(stream,"%s\n", addr_list[t].street);
fprintf(stream,"%s\n", addr_list[t].district);
fprintf(stream,"%s\n", addr_list[t].town);
fprintf(stream,"%s\n", addr_list[t].county);
fprintf(stream,"%s\n", addr_list[t].country);
fprintf(stream,"%s\n", addr_list[t].postcode);
fprintf(stream,"%s\n", addr_list[t].telno);
fprintf(stream,"%s\n", addr_list[t].email);
fprintf(stream,"\n");
}
}
fclose(stream);
return;
}



void outputtwo(void)
{
FILE *fp;
register int i;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
if((fp=fopen(filename, "wb"))==NULL) {
printf("Cannot open file.\n");
return;
}

for(i=1; i<MAX; i++)
if(*addr_list[i].name)
if(fwrite(&addr_list[i],
sizeof(struct addr), 1, fp)!=1)
printf("File write error.\n");

fclose(fp);
}

void search(void)
{
int i;
int count;
char s[40];
count=0;
printf("\nEnter a name.\n");
readLine(s);
for(i=1;i<MAX;i++)
{
if(addr_list[i].name[0]) {
count = count +1;
}

if (strcmp(s, addr_list[i].name)==0)
{
printf("\nRecord number: %i\n", count);
printf("\nName: %s\n",addr_list[i].name);
printf("\nStreet: %s\n",addr_list[i].street);
printf("\nDistrict: %s\n",addr_list[i].district);
printf("\nTown: %s\n",addr_list[i].town);
printf("\nCounty: %s\n",addr_list[i].county);
printf("\nCountry: %s\n",addr_list[i].country);
printf("\nPostcode:%s\n",addr_list[i].postcode);
printf("\nTelephone number: %s\n",addr_list[i].telno);
printf("\nEmail address: %s\n",addr_list[i].email);
printf("\n");
}
}
}

void readLine(char buffer[])
{
char character;
int i=0;
do
{
character=getchar();
buffer[i]=character;
++i;
}
while(character !='\n');
buffer[i-1]='\0';
}