algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

UPC-E - Implementacja w Java
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 29 sierpnia 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

UPCE.java:
//www.algorytm.org
//Konwersja pomiedzy UPC-A i UPC-E
//(c)2007 by Tomasz Lubinski

public class UPCE {

	//return 0 if check digit is correct, -1 otherwise
	private static boolean checkControlDigit(int upca[])
	{
	   int sum = 3 * upca[0] +
	             1 * upca[1] +
	             3 * upca[2] +
	             1 * upca[3] +
	             3 * upca[4] +
	             1 * upca[5] +
	             3 * upca[6] +
	             1 * upca[7] +
	             3 * upca[8] +
	             1 * upca[9] +
	             3 * upca[10];
	   sum %= 10;
	   sum = 10 - sum;
	   sum %= 10;
	   if (sum != upca[11])
	   {
	      return false;
	   }
	   return true;
	}
	
	//UPC-E => UPC-A
	public static String convertToUPCA(String upce_)
	{
	   int i;
	   int upce[] = new int[8];
	   int upca[] = new int[12];
	   String result = "";
	   
	   //check length of code
	   if (upce_.length() != 8)
	   {
	      return "Nieprawidlowa dlugosc kodu UPC-E (powinno byc 8 znakow)";
	   }
	   
	   //convert chars to digits
	   for (i=0; i<8; i++)
	   {
	      upce[i] = Integer.parseInt(""+upce_.charAt(i));
	   }   

	   //check system number
	   if ((upce[0] != 0) && (upce[0] != 1))
	   {
	      return "Numer systemu UPC-A musi wynosic 0 badz 1";
        
	   }

	   //convert UPC-E to UPC-A
	   if ((upce[6] >= 0) && (upce[6] <= 2))
	   {
		  upca[3] = upce[6];      
	      upca[4] = 0;
	      upca[5] = 0;
	      upca[6] = 0;
	      upca[7] = 0;
	      upca[8] = upce[3];
	      upca[9] = upce[4];
	      upca[10] = upce[5];
	   }
	   else if ((upce[6] == 3) && (upce[3] >= 3) && (upce[3] <= 9))
	   {
	      upca[3] = upce[3];      
	      upca[4] = 0;
	      upca[5] = 0;
	      upca[6] = 0;
	      upca[7] = 0;
	      upca[8] = 0;
	      upca[9] = upce[4];
	      upca[10] = upce[5];
	   }
	   else if (upce[6] == 4)
	   {
	      upca[3] = upce[3];      
	      upca[4] = upce[4];
	      upca[5] = 0;
	      upca[6] = 0;
	      upca[7] = 0;                  
	      upca[8] = 0;
	      upca[9] = 0;
	      upca[10] = upce[5];
	   }
	   else if ((upce[6] >= 5) && (upce[6] <= 9))
	   {
	      upca[3] = upce[3];      
	      upca[4] = upce[4];
	      upca[5] = upce[5];
	      upca[6] = 0;
	      upca[7] = 0;                  
	      upca[8] = 0;
	      upca[9] = 0;
	      upca[10] = upce[6];
	   }
	   else
	   {
		  return "Nieprawidlowy kod UPC-E";     
	   }
	   
	   //copy two first digits of producer code
	   upca[1] = upce[1];
	   upca[2] = upce[2];
	   
	   //copy system numer and chec digit
	   upca[0] = upce[0];
	   upca[11] = upce[7];   
	   
	   //control check digit
	   if (checkControlDigit(upca) != true)
	   {
		  return "Nieprawidlowa suma kontrolna";     
	   }   
	   
	   //convert digits to chars
	   for (i=0; i<12; i++)
	   {
	      result += upca[i];
	   }   
	   
	   return result;
	}
	
    //	UPC-A => UPC-E
	public static String convertToUPCE(String upca_)
	{
	   int i;
	   int upce[] = new int[8];
	   int upca[] = new int[12];	
	   String result = "";
	   
	   //check code length
	   if (upca_.length() != 12)
	   {
	      return "Nieprawidlowa dlugosc kodu UPC-A (powinno byc 12 znakow)";
	   }   
	   
      //convert chars to digits
	   for (i=0; i<12; i++)
	   {
	      upca[i] = Integer.parseInt(""+upca_.charAt(i));
	   }

	   //control check digit
	   if (checkControlDigit(upca) != true)
	   {
		  return "Nieprawidlowa suma kontrolna";     
	   }
	   
	   //check system number
	   if ((upca[0] != 0) && (upca[0] != 1))
	   {
		  return "Numer systemu UPC-A musi wynosic 0 badz 1";
	   }
	   
	   //convert UPC-A to UPC-E
	   if ((upca[3] >= 0) && (upca[3] <= 2) &&
	       (upca[4] == 0) && (upca[5] == 0) && (upca[6] == 0) && (upca[7] == 0))
	   {
	      upce[3] = upca[8];
	      upce[4] = upca[9];
	      upce[5] = upca[10];
	      upce[6] = upca[3];
	   }
	   else if ((upca[3] >= 3) && (upca[3] <= 9) &&
	       (upca[4] == 0) && (upca[5] == 0) && (upca[6] == 0) && (upca[7] == 0)  && (upca[8] == 0))
	   {
	      upce[3] = upca[3];
	      upce[4] = upca[9];
	      upce[5] = upca[10];
	      upce[6] = 3;
	   }   
	   else if ((upca[5] == 0) && (upca[6] == 0) && (upca[7] == 0) && (upca[8] == 0) && (upca[9] == 0))
	   {
	      upce[3] = upca[3];
	      upce[4] = upca[4];
	      upce[5] = upca[10];
	      upce[6] = 4;   
	   }   
	   else if ((upca[10] >= 5) && (upca[10] <= 9) &&
	       (upca[6] == 0) && (upca[7] == 0) && (upca[8] == 0) && (upca[9] == 0))
	   {
	      upce[3] = upca[3];
	      upce[4] = upca[4];
	      upce[5] = upca[5];
	      upce[6] = upca[10];   
	   }
	   else
	   {
		  return "Tego kodu UPC-A nie można przekonwertować do UPC-E";     
	   }   
	   
	   //copy two first digits of producer code
	   upce[1] = upca[1];
	   upce[2] = upca[2];
	   
	   //copy system numer and check digit
	   upce[0] = upca[0];
	   upce[7] = upca[11];

	   //convert digits to chars
	   for (i=0; i<8; i++)
	   {
	      result += upce[i];
	   }
	      
	   return result;
	}
	

	

	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		   String upca;
		   String upce;     
		   int i;
		   
		   System.out.println("1. UPC-A => UPCE-E");
		   System.out.println("2. UPC-E => UPC-A");
		   i = Console.readInt("");
		   
		   if (i==1)
		   {
			  System.out.println("Podaj kod UPC-A");
		      upca = Console.readString();
		      upce = convertToUPCE(upca);
		      System.out.println("Rownowazny kod UPC-E to:");
		      System.out.println(upce);
		   }
		   else
		   {
			  System.out.println("Podaj kod UPC-E");
		      upce = Console.readString();   
		      upca = convertToUPCA(upce);
		      System.out.println("Rownowazny kod UPC-A to:");
		      System.out.println(upca);
		   }
	}

}
Dodaj komentarz