Monday 23 May 2016

A barchart plotter for integers written in C. Data saved to file and barchart written to txt file for import into word processor

This program is compiled in Linux with the gcc command
gcc programname.c -lm
The -lm means that the maths funtions are included during compilation.
From the terminal using the directory containg the file / compiler output the program can b run using ./a.out

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
#define max 100
int number, ymax;
int ploty[max];
void createbar(void), updatebar(void), savedata(void), loadbar(void), plot(void), savebartxt(void);
int main(void)
{
int choice;
for(;;) {
printf("\n");
printf("1. Create a barchart.\n");
printf("2. Save barchart to a .txt file for printing.\n");
printf("3. Save data to to a data file to plot again later\n");
printf("4. Append data to a barchart.\n");
printf("5. Load a bar chart from data file.\n");
printf("6. Quit\n");
do {
printf("\nEnter your choice: ");
scanf("%i", &choice);
}while(choice < 0 && choice > 5);
switch(choice) {
case 1: createbar();
break;
case 2: savebartxt();
break;
case 3: savedata();
break;
case 4: updatebar();
break;
case 5: loadbar();
break;
case 6: exit(0);
}
}
return 0;
}
void createbar(void)
{
  int  y_data;
  int i, j, k;
for(k=1; k<=max; k++)
ploty[k] = '\0';
printf("Enter the number of y points to plot.\n");
printf("Maximum number of points is 100 or type 111 to exit.\n");
scanf("%i", &number);
if(number == 111) exit(0);
printf("Enter the maximum / largest yvalue.\n");
scanf("%i", &ymax);
for(j=1; j<=number; j++)
{
 printf("Enter y datum %i\n", j);
 scanf("%i", &y_data);
 ploty[j]=y_data;
}
plot();

}

void plot(void)
{
int xdatum, ydatum;
int i;
int yvalue;
float yscale, ybar, maxsize = 60.0;
printf( "y_data---------->\n");
  for(i=1; i<=number; i++)
    {
  yscale = maxsize/ymax;
ybar = yscale* ploty[i];
yvalue = round(ybar);  
for(xdatum =1; xdatum<=3; xdatum++){
for(ydatum=1; ydatum<=yvalue; ydatum++)
      printf("*");
 printf("\n");
}
printf("\n");
}
}


void updatebar(void)
{
  int xdatum, ydatum;
  int  y_data;
  int  i, j, l;
   FILE *prnt;
for(l=1; l<=max; l++)
ploty[l] = '\0';
 printf("Enter the number of y points to plot.\n");
     scanf("%i", &number);
for(j=1; j<=number; j++)
{
 printf("Enter y datum %i\n", j);
 scanf("%i", &y_data);
 ploty[j]=y_data;
}
printf( "y_data---------->\n");
  for(i=1; i<=number; i++)
    {
 
for(xdatum =1; xdatum<=3; xdatum++){
   for(ydatum=1; ydatum<=ploty[i]; ydatum++)
      printf("*");
 printf("\n");
}
printf("\n");
}

FILE *fp;
char filename[30];
printf("Enter a file name .txt to add bars to an already existing chart.\n");
scanf("%s",filename);
printf("\n");
fp = fopen(filename, "a+");
if((fp=fopen(filename, "a+"))==NULL) {
printf("Cannot open file.\n");
return;
}

time_t lt;
struct tm *ptr;
lt = time(NULL);
ptr = localtime(&lt);
fprintf(fp,"%s\n",asctime(ptr));

for(i=1; i<=number; i++)
    {
for(xdatum =1; xdatum<=3; xdatum++){
   for(ydatum=1; ydatum<=ploty[i]; ydatum++)
      fprintf(fp,"*");
 fprintf(fp,"\n");
}
fprintf(fp,"\n");
}
fclose(fp);

FILE *fp2;
char filename2[30];
int k;
printf("Enter a file name .dat to add data to plot at a later date.\n");
scanf("%s",filename2);
printf("\n");
fp2 = fopen(filename2, "a+");
if((fp2=fopen(filename2, "a+"))==NULL) {
printf("Cannot open file.\n");
return;
}
for(k = 1; k<= number; k++)
{
fprintf(fp2,"%i", ploty[k]);
fprintf(fp2,"\n");
}
fclose(fp2);
return;

}

void savedata(void)
{
FILE *fp;
char filename[30];
int i;
printf("Enter a file name .dat to contain data to plot at a later.\n");
printf("This can be printed using a text editor.\n");
scanf("%s",filename);
printf("\n");
if((fp=fopen(filename, "w"))==NULL) {
printf("Cannot open file.\n");
return;
}
fprintf(fp,"%i\n", ymax);
for(i = 1; i<= number; i++)
{
fprintf(fp,"%i", ploty[i]);
fprintf(fp,"\n");
}
fclose(fp);
return;
}

void loadbar(void)
{
int i;
char filename[30];
FILE *fp;
number = 0;
for(i=1; i<=max; i++)
ploty[i] ='\0';
printf("Enter a file name .dat containing data to plot.\n");
scanf("%s",filename);
printf("\n");
if((fp=fopen(filename, "r"))==NULL) {
printf("Cannot open file.\n");
return;
}
fscanf(fp,"%i", &ymax);
while(!feof(fp))
{
number = number + 1;
fscanf(fp, "%i", &ploty[number]);
}
fclose(fp);
plot();
}

void savebartxt(void)
{
FILE *fp;
char filename[30];
int i;
int xdatum, ydatum;
int yvalue;
float yscale, ybar, maxsize = 60.0;
printf("Enter a file .txt name to contain the bar chart.\n");
printf("This can be printed using a text editor. \n");
scanf("%s",filename);
printf("\n");
if((fp=fopen(filename, "w"))==NULL) {
printf("Cannot open file.\n");
return;
}
time_t lt;
struct tm *ptr;
lt = time(NULL);
ptr = localtime(&lt);
fprintf(fp,"%s\n",asctime(ptr));

fprintf(fp, "y_data---------->\n");
  for(i=1; i<=number; i++)
    {
 yscale = maxsize/ymax;
ybar = yscale* ploty[i];
yvalue = round(ybar);  

for(xdatum =1; xdatum<=3; xdatum++){
   for(ydatum=1; ydatum<=yvalue; ydatum++)
      fprintf(fp,"*");
 fprintf(fp,"\n");
}
fprintf(fp,"\n");
}
fclose(fp);
return;
}

No comments:

Post a Comment