الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[تنبيه - عنوان غير مناسب : ]ممكن تساعدوني في هذا البرنامج

بدأه sarah2010 في 17 يناير 2010 · 5 رد · 527 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ممكن تقبلوني كعضوة جديدة في هذا المنتدى الرائع.

في الواقع عندي مشكلة في انشاء و تنفيذ هذا البرنامج واريد المساعدة منكم لوسمحتم

المطلوب هو عمل برنامج لفحص ما اذا كان Credit card number صالح ام لا ويجب ان يكون هذا الرقم مكون من 13 الى 16 رقم.هذا الكرت بيكون فيزا كرت اذا بدأ برقم 4 , و ماستر كرت اذا بدأ برقم 5. وبالرقمين 37 اذا كان American Express cards, وبرقم 6 اذا كان Discover Cards.

طبعا بعد ما يدخل المستخدم رقم الكرت يقوم البرنامج بمضاعفة كل ثاني رقم من الكرت ابتداء من اليمين واذا كان حاصل الضرب مكون من رقمين يقوم البرنامج بجمع الرقمين مثلا اذا كان هذا رقم الكرت 4388576018402625 هذا الرنامج بيعمل الاتي

2*2=4

2*2=4

2*4=8

2*1=2

2*6=12(2+1)

2*5=10(0+1)

2*8=16(6+1)

2*4=8

ويقوم بجمع كل هذه الارقام التي حصلنا عليها من الخطوه السابقة 4+4+8+2+3+1+7+8=37

3)بعد ذلك يقوم بجمع كل الارقام من الاماكن الفردية ابتداءً من اليمين يعني 5+6+0+8+0+7+8+3 =37

4) اذا كان الرقمين الناتجين من الخطوتين الثانية والثالثة صحيح يعتبر هذا الكرت صالح واذا كان غير ذلك فهو غير صالح

انا حاولت في هذا البرنامج بس ما طلع معي ف ارجوا مساعدتكم

وعفواً على الاطاله

هذا هو الكود

/* 
 *Coder: SI
 *Date:Jan.16-2010
 *Purpose: Credit Card number Validation
 *PosudoCode: 1)Create a program to let the user enter the credit card number as a long ingeger
 * 2)The cardNumber length has to be between 13 and 16 digits 
 * 3)Return true if the card number is valid.
 * 4)Return the summition of the the even places
 * 5)Return the digit that we doubled it by multyplying the number with 2
 * 6)Return the summition of the odd numbers 
 */
package secondsemesterassignment1;

import java.io.*;
import java.io.InputStreamReader;
import java.util.Scanner;

public class CardNumber {
 public static void main(String[]args){
 // long number = 1246L;
 long number = 1246L;
 Scanner input= new Scanner(System.in);
 // String cardNumber = String.valueOf(number);

 System.out.println("Please enter your card number: " );
 String cardNumber = String.valueOf(number);

 InputStreamReader isr= new InputStreamReader(System.in);
 BufferedReader keyb= new BufferedReader(isr);

 cardNumber = keyb.readLine();//how to make the buffer read the nuber that I have entered?

 char[]c=cardNumber.toCharArray(); //to consider the numberes as a char not string 
 // int i=cardNumber.length()-2;
 int i = cardNumber.length()-1;
 while(i>2)
 { //make the program read the number that we have entered
 //int digit;
 //digit = cardNumber * 2;

 //i=i-2; //decrement i by 2 
 i = i-1;
 }//end while 

 if (cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
 ||cardNumber.length()==16 && cardNumber.startsWith("4")){

 System.out.println("Visa cards");}//end if1

 if( cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
 ||cardNumber.length()==16&& cardNumber.startsWith("5")){
 System.out.println("Master cards");}//end if2

 if(cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
 ||cardNumber.length()==16 && cardNumber.startsWith("37")){
 System.out.println("American Exprss cards");}//end if3

 if(cardNumber.length()==13||cardNumber.length()==14||cardNumber.length()==15
 ||cardNumber.length()==16 && cardNumber.startsWith("6")){
 System.out.print("Discover cards");}//end if4


 CardNumber.isValid(number);
 CardNumber.sumOfEvenPlace(number);
 CardNumber.getDigit(i);
 CardNumber.somOfOddPlace(number);


 }//end main

 public static int getDigit(int i) {
 int digit;
 int []number;
 number = new int[number.length];
 while(i>2)
 { 
 //make the program read the number that we entered

 digit = number.length-1 * 2;
 i = i-1;
 }//end while 
 return digit;
 }//end getDigit method
 public static int sumOfEvenPlace(long number) {
 int sum,a;
 sum=0;
 String digit;
 sum = sum+digit;
 if (digit >9){
 a=digit.substring(0)+ digit.substring(1);
 sum = sum+digit;
 }//end if
 return sum;
 }

 public static long somOfOddPlace(long cardNumber) {
 long[] cardNum;
 cardNum = new long[16];

 int oddPlace=0,sum=0;

 int i=cardNum.length;
 while(i%2!=0){

 oddPlace=i-1;
 i--;
 }//end while loop
 sum= sum+oddPlace;
 return sum;
 }//end somOfOddPlace method


 public static boolean isValid(long number) {

 /*To convert the cardNumber from string to boolean*/ 
 String cardNumber1;

 if (CardNumber.sumOfEvenPlace(sum)== CardNumber.somOfOddPlace(sum))
 return true; 
 else return false;
 }//end isValid method


}//end class

تم تعديل هذه المشاركة بواسطة herch في 17 يناير 2010 في 14:43 — السبب: الوسم [code]

#2

السلام عليكم

أهلا بك أختي سارة في المنتدى

أتمنى في المستقبل أن تختاري عناوين أوضح لمواضيعك

وأن تقومي بإدراج الكود ضمن علامتي code

لقد قمت بإعادة كتابة البرنامج ... لاحظي أن جافا لغة غرضية التوجه فلا تحاولي تجاهل ذلك باستخدام الطرق الصفية static

هذا هو الكود :

import java.util.Scanner;

public class CardNumber {

    String cardNumber;

    public CardNumber(String s) {
        cardNumber = s;
    }

    public String checkType() {
        String s = new String();
        if (cardNumber.length() >= 13 && cardNumber.length() <= 16) {
            if (cardNumber.startsWith("4")) {
                s = "Visa cards";
            } else if (cardNumber.startsWith("5")) {
                s = "Master cards";
            } else if (cardNumber.startsWith("6")) {
                s = "Discover cards";
            } else if (cardNumber.startsWith("37")) {
                s = "American Exprss cards";
            } else {
                s = "Unknowen card !";
            }
        }
        return s;
    }

    private int sumOfEvenPlace() {
        int sum = 0;
        for (int i = 0; i < cardNumber.length(); i += 2) {
            int tmp = Integer.parseInt(Character.toString(cardNumber.charAt(i)));
            tmp *= 2;
            if(tmp > 9){
                String s1 = Integer.toString(tmp).substring(0, 1);
                String s2 = Integer.toString(tmp).substring(1, 2);
                tmp = Integer.parseInt(s1) + Integer.parseInt(s2);
            }
            sum += tmp;
        }
        return sum;
    }



    private int sumOfOddPlace() {
        int sum = 0;
        for (int i = 1; i < cardNumber.length(); i += 2) {
            sum += Integer.parseInt(Character.toString(cardNumber.charAt(i)));;
        }
        return sum;
    }

    public boolean isValid() {
        if (sumOfEvenPlace() == sumOfOddPlace()) {
            return true;
        } else {
            return false;
        }
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your card number: ");
        String cn = input.nextLine();

        CardNumber cardNumber = new CardNumber(cn);

        System.out.println(cardNumber.checkType());

        if (cardNumber.isValid()) {
            System.out.println("Valid card number");
        } else {
            System.out.println("invalid card number");
        }
    }
}

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 17 يناير 2010 في 15:04

1
#3

الأخ الكريم/الأخت الكريمة

السلام عليكم ورحمة الله وبركاته

مرحباً بكم في منتدى الفريق العربي للبرمجة

نود تنبيهك أن العنوان غير مناسب.

الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

#4

قد يفيدك هذا الكود لتجنب التكرار

import javax.swing.JOptionPane;

public class CreditCardUtil {

	public static enum CardType {
		AMERICAN_EXPRESS		("american express", "37"),
		VISA					("visa","4"),
		MASTER					("master","5"),
		DISCOVER				("discover","6");

		private final String code;
		private final String name;

		CardType(String name, String code) {
			this.code = code;
			this.name = name;
		}

		public String getCode() {
			return code;
		}

		public String getName() {
			return name;
		}

		public static CardType getCardType(String code) {
			if(code!=null){
				if(!code.startsWith(CardType.AMERICAN_EXPRESS.getCode().substring(0, 1))){
					code=code.substring(0, 1);
				}
				for (CardType card : CardType.values()) {
					if (card.getCode().equalsIgnoreCase(code)) return card;
				}
			}
			return null;
		}
	}


	private static boolean isStartsWith(String cardNumber) {
		boolean result=false;
		for (CardType card : CardType.values()) {
			if(isBegin(cardNumber, card.getCode())){
				return true;
			}
		}
		return result;
	}

	public static boolean isBegin(String text, String c){
		if(text!=null){
			return text.startsWith(c);
		}
		return false;
	}

	public static boolean isNumeric(String text){
		if(text==null)return false;
		return text.matches("\\d{1,}");
	}

	public static boolean isLengthBetween(String text, int lengthMax, int lengthMin ){
		if(text!=null){
			if(lengthMax<lengthMin)return isLengthBetween(text, lengthMin, lengthMax);
			if(text.length()<=lengthMax && text.length()>=lengthMin)return true;
		}
		return false;
	}

	public static boolean verify(String cardNumber){
		char[] chars=cardNumber.toCharArray();
		int even=0;
		int odd=0;
		for (int i = chars.length-1; i >= 0; i--) {
			char c=chars;
			if((i%2)==1){
				odd+=Character.getNumericValue(c);
			}else{
				even+=getValue(c);
			}

		}
		System.out.println("odd=["+ odd+"]");
		System.out.println("even=["+ even+"]");
		return (even==odd);
	}

	private static int getValue(char c) {
		int num=2*Character.getNumericValue(c);
		if(num>9){
			String numString=String.valueOf(num);
			num=Integer.parseInt(numString.substring(0,1)) + Integer.parseInt(numString.substring(1,2));
		}
		return num;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String cardNumber=JOptionPane.showInputDialog("Please enter your card number: ", "4388576018402625");
		if(isNumeric(cardNumber) && isLengthBetween(cardNumber, 13, 16) && isStartsWith(cardNumber)){
			if(verify(cardNumber)){
				System.out.println("TYPE = ["+ CardType.getCardType(cardNumber.substring(0, 2)).getName()+"]");
				System.out.println(" success !");
			}else{
				System.out.println(" failure !");
			}
		}else{
			System.out.println(" failure !");
		}

	}


}
#5

جزيتم كل خير اخواني Speed-of -light و العيافي ع ردودكم لي ومساعدتي.

وعفواً من الادارة لاختيار عنوان غير مناسب بس كيف ممكن اعدل العنوان ؟!

#6

لا مشكلة مع الخطأ لأول مرة :)

لكن تأكدي في المرة القادمة من القيام بعملية التعديل بشكل جيد

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…