1 Replies - 658 Views - Last Post: 05 September 2013 - 12:55 PM Rate Topic: -----

#1 Ridham  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 31-August 13

Point Tracking system

Posted 03 September 2013 - 09:22 PM

In an advanced country, a point system is maintained to keep track of erring drivers, and vehicle owners. The objective for this lab is to comeup with a software to keep track of penalties incurred by the drivers, and help decide those drivers whose driving license should be revoked.
Each driver is assigned an initial score of ten. Every minor offense (parking ticket, overspeeding, underspeeding, etc.) will be awarded a penalty of -1. Every major offense (drunk driving, reckless driving, accidents) will be awarded a penalty of -5. If a driver's score becomes 0 or negative, his/her license will be revoked.
For this problem, it is assumed that the owner of the car is always going to be driving the car. The list of offenses is provided as a text file containing the vehicle number and the nature of offense(Minor, Major). The list of drivers along with their UID and license number is available as input in a file named drivers.txt. A file named owners.txt maps the vehicle number to the UID of the owner. For the sake of simplicity, license number is a 10-digit integer, and vehicle number contains 3 characters followed by 4 digits. UID is a unique identifier provided to every citizen in the country, and it contains 12 digits.
The data structures to be used, the file format for various files and the general step-by-step process for this lab’s task are being stated in the remainder of this document.
Data structures to be used:
1) Vehicle: This contains the list of all vehicles along with the vehicle number and UID of owners, with UID as the key. Vehicle is maintained as a dynamic list.
2) Drivers: This represents the dynamic list of the tuples (license number, UID, score).
3) RevokeList: This list contains the current list of revoked drivers in the form of tuple (license number, vehicle number, UID).
File Formats:
The file format for the input files is as follows:
drivers.txt:
<UID>,<License Number>
For ex:
182930101222,9929929921
The file format for owner.txt is as follows:
<UID,Vehicle Number>
Note: There is no space between number of items and item name. End Note.
For ex:
182930101222,KLA1512
The file format for offenses.txt is as follows
<Vehicle number> <Minor/Major>
For ex:
DNA1423 1
KAS1002 0
BEL1923 0
KAS1002 1
Note that 0 indicates Minor offense here, and 1 indicates a major offense.
Step 1:
Identify appropriate data structures relevant for the problem and write them in Offense.h
Step 2:
Design Offense ADT with the following operations (OffenseOps.h). The relevant operations are:
(a) populateVehicles – This function reads input from file and populates its content in the Vehicles list in lexicographic order of vehicle numbers. It then returns the populated list.
(B)/>/>/> populateDrivers – This function reads input from file and populates its content in the Drivers list in non-decreasing order of UIDs. It then returns the populated list.
© updateOffenses – This function reads the contents of the file containing offenses. It looks up the Vehicle list to find the UID of owner. Using the UID, it looks up the license number of the driver. It then updates the score in the corresponding tuple <license number, UID, updated score> in the drivers list.
(d) markRevokedDrivers – this function identifies all drivers whose license needs to be revoked, and puts them in the file named revoke.txt
(e) Add prototypes in OffensesOps.h
You may need the following support functions:
i) insertVehicle – this function inserts a row of vehicle details in order
ii) insertDriver – this function inserts a row of driver details in order
iii) lookupUID – search for a UID from the Vehicles list given the vehicle number, and return it.
iv) lookupVehicle – search for a vehicle number from the Vehicle List given the UID of the owner, and return it.
v) lookupDriverDetails - search the Drivers list based on UID, and return the index of the entry containing that UID.
Step 3: Implement the above operations in the corresponding c files
All relevant code must go to OffensesOps.c
All list creations must have filename as a parameter.
Step 4: driver file.
Create a simple driver file (revoke.c) that can read multiple input files corresponding to the various input files. The names of input files are passed as command line parameters. Note that if no input file is passed, the program should attempt to run with drivers.txt, owners.txt and offenses.txt for the relevant input set.
The executable revoke generates output files revoke.txt that will contain the list of drivers (license number, UID, vehicle number) whose license is to be revoked.
For the purposes of testing, you may implement some functions to print the data structures or other test data. But all such functions must be commented before submission to server.
Deliverables: All relevant header files, OffenseOps.c, revoke.c

Pls. find prepared code attached herewith. files. offense.h, offenseopc.c, revoke.c, offenaseopc.h

Offense.h
[/#include<stdio.h>
#include<stdlib.h>
#define BUFFER 100
#define MAXNUMEQ 50
struct string
{
    char stack[BUFFER];
}a;

int push(char op);//push character onto the stack
int pop();//pop the last element
int Getsize();//return stack size
int STACK_INITIALIZE();//set the numbers

int size;
int numOfeq;
int position;

int push(char op)
{
    if(Getsize() == BUFFER)
    {
        return 0;
    }
	position++;
    size++;
    a.stack[position] = op;
    return 1;
}

int pop()
{
    if(Getsize() == 0){return 0;}
    int temp = a.stack[position];
    a.stack[position] = '\0';
    position--;
    size--;
    return temp;
}

int Getsize()
{
    return size;
}

int STACK_INITIALIZE()
{
    size=0;
    position=-1;
	numOfeq=0;
}

void display ()
{
	int i;
	if (size == -1)
	{
		printf ("Stack is empty\n");
		return;
	}
	else
	{
		printf ("\nThe status of the stack is\n");
		for (i = size; i >= 0; i--)
		{
			printf ("%c\n", a.stack[i]);
		}
	}
	printf ("\n");
}


OffenseOpc.h
[/#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include "Offense.h"

#define DRIVER_INITIAL_SCORE 10

char driverUId[10];

char revokeDriverList[10][7];
     
void populateVehicles()
{
     // Initialize stack
     STACK_INITIALIZE();
      
     char ch;
     FILE *fp;
     
     // Open owner file for read
     fp = fopen("owner.txt","r");
     
     // Exit if error
     if( fp == NULL )
     {
      exit(EXIT_FAILURE);
     }
     
     // Fill data structure while EOF
     while( ( ch = fgetc(fp) ) != EOF )
     {
      push(ch);
     }      
     
     push('\n');
     //display();
}

void populateDrivers()
{
     char ch;
     FILE *fp;
     
     // Open drivers file for read
     fp = fopen("drivers.txt","r");
     
     // Exit if error
     if( fp == NULL )
     {
      exit(EXIT_FAILURE);
     }
     
     // Fill data structure while EOF
     while( ( ch = fgetc(fp) ) != EOF )
     {
      push(ch);
     }
     
     push('\n');
     //display();
}

void updateOffenses()
{
     char ch;
     FILE *fp;
     int counter = 0;
     int countOffense = 0;
     int bReadOffense = 0;
     
     // Open drivers file for read
     fp = fopen("offenses.txt","r");
     
     // Exit if error
     if( fp == NULL )
     {
      exit(EXIT_FAILURE);
     }
     
     // Fill data structure while EOF
     while( ( ch = fgetc(fp) ) != EOF )
     {

      push(ch);
      
      // Caculate offense score based on Major or Minor offense and add it the list
      if (counter < 7)
      {
          if (bReadOffense == 1)
          {
           if (ch == '0')                
            countOffense = DRIVER_INITIAL_SCORE - 1;
            
           if (ch == '1') 
            countOffense = DRIVER_INITIAL_SCORE - 5;
          }
       revokeDriverList[counter][countOffense] = ch;
       //printf("%c",ch);
       counter ++;
      }
      
      if (counter == 7)
      {
       countOffense ++;
       counter = 0;
      }
      
      if (ch == ' ')
      {
       bReadOffense = 1;
      }
      bReadOffense = 0;
     }
     
     //display();
}

void markRevokedDrivers()
{
     int countRevoke;
     int i, j, counter;
     int driverScore;
     int bRevoke = 0;
     int lncnt = 0;
     FILE *fp;
     
     countRevoke = strlen(revokeDriverList[0]);
     
     // Create revoke file for write
     fp = fopen("revoke.txt","w");
     
     // Check score for each driver, if found <=0 then add it to Revoke list
     for (i = 0; i <= size; i++)
     {
		for (j = 0; j <= countRevoke; j++)
		{
             driverScore = revokeDriverList[i][j];
             if (driverScore <= 0)
                bRevoke = 1;
        }
        
        //printf ("new line found %d and revoke %d \n", lncnt , bRevoke);
        if (bRevoke == 1 && lncnt == 4)
        {
         fprintf(fp, "%c", a.stack[i]);
        }
        
        if (a.stack[i] == '\n')
        {
           bRevoke = 0;
           lncnt ++;
        }
     }
}



OffenseOpc.c
[/#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include "OffenseOps.h"

void populateData()
{
  // Populate vehicles data
  populateVehicles();

  // Populate drivers data
  populateDrivers();
  
}

void updateOffenseScore()
{
 // Update offenses by reading offense file
 updateOffenses();
}

void createRevokeList()
{
 // Create Revoke file
 markRevokedDrivers();
}



revoke.c
[/#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include "OffenseOps.c"

int main()
{
 // Populate Vehicle, owner data
 populateData();     
 
 // Read Offense.txt and update score for each driver
 updateOffenseScore();
 
 // Based on revised score create revoke list
 createRevokeList();
 
}




Other txt files:

Driver.txt
(182930101322,9929929921
182930101324,9929929923
182930101325,9929929924
182930101323,9929929922)

Offense.txt
DNA1423 1
KAS1002 0
BEL1923 0
KAS1002 1

Owner.txt
182930101322,KLA1512
182930101324,DNA1423
182930101325,BEL1923
182930101323,KAS1002


Pls. help to improve the program.
I get revoke.txt file but not full required information.

This post has been edited by jimblumberg: 03 September 2013 - 10:05 PM
Reason for edit:: Fixed code tags.


Is This A Good Question/Topic? 0
  • +

Replies To: Point Tracking system

#2 UG Cyber  Icon User is offline

  • D.I.C Addict

Reputation: 32
  • View blog
  • Posts: 546
  • Joined: 24-July 08

Re: Point Tracking system

Posted 05 September 2013 - 12:55 PM

This project seems simple enough, just a really long back story to it. However you do not state what your problem is... Does your code compile? do you get weird output? errors?? With out knowing what exactly you need help with, im not going to waist my time reading through the code.

I would look into making a structure to read each file format or use stringstreams to seperate each value using the comma as a delim.
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1