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

بروجكت جافا...طلب مساعدة ضروري

بدأه wahjed3wa في 22 ديسمبر 2008 · 6 رد · 1,103 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أرجو منكم المساعدة في business cards project

قمت بكتابة 2 classes كالتالي:

هذا هو ال main class

public class MainCard
{


 public static void main(String[] args)
 {

		 CardOrder a = new CardOrder("Asma Khalid mohamed", 200);
				System.out.println("Here is your card: ");
				a.getTopLine();
				a.getBlankLine();
				a.getLineWithName();
				a.getBlankLine();
				a.getTopLine();
				a.getFinalCost();
				a.hasDiscount();


		}

}

الكلاس الثاني cardOrder:

public class CardOrder
{
		 private String name;	 
  private int numCards;	 
		 private String initials;
		 private char border ='*';
		 private char space =' ';
		 private static final int CARD_LEN = 32;


 public CardOrder(String fullName, int numberOfCards)
		{
  name = fullName;
		 numCards = numberOfCards;
		 if(!nameIsValid())
				 {
					System.out.println("Please enter a valid name. A valid name is at least one word and not more than three.");
					System.exit(1);
				 }
		 }


	   public String getInitials() {
		String initials2="";
		String nameToUpper = name.toUpperCase();
		String[] splitName = nameToUpper.split(" ");
		for (int i = 0; i < splitName.length; i++) {
			initials = splitName.substring(0, 1);
			initials2+=initials;
		}
		return initials2;
	}


	   public String getFormattedName()
 {  String name2="";
		   String nameToUpper = name.toUpperCase();
		   String nameToLower = name.toLowerCase();
		   String[] splitName = name.split(" ");
		   String[] splitNameToUpper = nameToUpper.split(" ");
		   String[] splitNameToLower = nameToLower.split(" ");

		   if (splitName.length <=2) 
		   {
			   for(int i =0; i <splitName.length; i++)
				{
				 String init  = splitNameToUpper.substring(0,1);
				 String remainder  = splitNameToLower.substring(1);
				 name = init + remainder + space;
				}
				 name2+=name;
		   }

		   if (splitName.length == 3)
		   {
				 String init1  = splitNameToUpper[0].substring(0,1);
				 String remainder1  = splitNameToLower[0].substring(1);
				 String init2  = splitNameToUpper[1].substring(0,1);
				 String init3  = splitNameToUpper[2].substring(0,1);
				 String remainder3  = splitNameToLower[2].substring(1);

				 name = init1 + remainder1 + space + init2 + space + init3 + remainder3;
				 name2+=name;


		   }

		   return name2;
 }

	   public boolean nameIsValid()
 {

			String[] splitName = name.split(" ");
			int noOfWords = splitName.length;
			if ((noOfWords >= 1) && (noOfWords <= 3))
			{
			 return true;		   
			}

			else {

			 return false;
			}

 }

	   public void setNumCards(int n)
 {
		   numCards=n;
 }

	   public int getNumCards()
 {


			return numCards;

 }

	   public String getTopLine()
 {

			   String dotstr="";			 
			   for(int i =0; i <CARD_LEN-2*getInitials().length(); i++)
				{
				   dotstr=dotstr + border;
				}
				String line = getInitials() + dotstr + getInitials();
				System.out.println(line);
				return line;
		 }

		public String getBlankLine()
 { 

			   String spacestr="";			 
			   for(int i =0; i <CARD_LEN-2 ; i++)
				{
				   spacestr+= space;
				}
				String line = border + spacestr + border;
				System.out.println(line);
				return line; 
		}

		public String getLineWithName()
 {
   String line2 = ""; 
		  double whiteSpaceAvailable = (30 - getFormattedName().length())/2;
		  String spacestr=""; 

		  if(getFormattedName().length() % 2 == 0)
		  {
		  for(int i =0; i < whiteSpaceAvailable; i++)
				{
				 spacestr+=space;

				}
				 String line = border + spacestr + getFormattedName() +spacestr+ border;
				 line2+= line;
		  }

		  if(getFormattedName().length() % 2 != 0)
		  {
		  for(int i =0; i < whiteSpaceAvailable; i++)
				{
				 spacestr+=space;

		  }
				String line = border + spacestr + space + getFormattedName() +spacestr+ border;
				line2+= line; 
		  }

		   System.out.println(line2);
		   return line2;
 }
		public double getCardPrice()
 {
		double cost;
			if (name.length() <= 12)
			{
				 cost =  0.20;
			}

			else
			{
				 cost = 0.25;
			}

			return cost;
 }

		public boolean hasDiscount()
 {
			if (numCards >= 100)
			{

				return true;
			}
			else
			{

				return false;
			}
 }

		public double getFinalCost()
 {
		   double finalCost;

		   if(!hasDiscount())
		   {
				finalCost = (getNumCards() * getCardPrice());
				System.out.println("The price of " + getNumCards() + " cards is AED " + finalCost);
				System.out.println("No discount given");

		   }
		   else
		   {

			   finalCost = (getNumCards() * getCardPrice()) - (getNumCards() * getCardPrice() * 0.1);
			   System.out.println("The price of " + getNumCards() + " cards is AED " + finalCost);
			   System.out.println("10% discount applied");

		   }

		   return finalCost;
		}



}

الحمدلله البرنامح يعمل بشكل ممتاز و لكن لدي مشكلتين فقط ..الأولى انه اذا تم ادخل اسم اليوزر ك كلمتين يظهر في البطاقة الاسم الثاني فقط

يعني اذا ادخلت:

asma khalide

احصل على :

Here is your card:

AK****************************AK

* *

* Khalid *

* *

K******************************K

The price of 200 cards is AED 36.0

10% discount applied

و المشكلة الثانية ان سعر البطاقة finalCost يجب ان يكون with 2 decimal places

يعني في المثال السابق يجب ان يكون السعر 36.00

بانتظار مساعدتكم

#2

قمت بالتعديل على دالتي getFormattedName و getFinalCost :

  1. public double getFinalCost()
  2. {
  3. double finalCost;
  4.  
  5. if(!hasDiscount())
  6. {
  7. finalCost = (getNumCards() * getCardPrice());
  8. System.out.printf("The price of %d cards is AED %.2fn" ,getNumCards(),finalCost);
  9. System.out.println("No discount given");
  10.  
  11. }
  12. else
  13. {
  14.  
  15. finalCost = (getNumCards() * getCardPrice()) - (getNumCards() * getCardPrice() * 0.1);
  16. System.out.printf("The price of %d cards is AED %.2fn" ,getNumCards(),finalCost);
  17. System.out.println("10% discount applied");
  18.  
  19. }
  20.  
  21. return finalCost;
  22. }
  23.  

  1. public String getFormattedName()
  2. { String name2="";
  3. String nameToUpper = name.toUpperCase();
  4. String nameToLower = name.toLowerCase();
  5. String[] splitName = name.split(" ");
  6. String[] splitNameToUpper = nameToUpper.split(" ");
  7. String[] splitNameToLower = nameToLower.split(" ");
  8.  
  9. if (splitName.length <=2)
  10. {
  11. for(int i =0; i <splitName.length; i++)
  12. {
  13. String init = splitNameToUpper[i].substring(0,1);
  14. String remainder = splitNameToLower[i].substring(1);
  15. name2 += init + remainder + space;
  16. }
  17.  
  18.  
  19. }
  20.  
  21. else if (splitName.length == 3)
  22. {
  23. String init1 = splitNameToUpper[0].substring(0,1);
  24. String remainder1 = splitNameToLower[0].substring(1);
  25. String init2 = splitNameToUpper[1].substring(0,1);
  26. String init3 = splitNameToUpper[2].substring(0,1);
  27. String remainder3 = splitNameToLower[2].substring(1);
  28.  
  29. name2 += init1 + remainder1 + space + init2 + space + init3 + remainder3;
  30.  
  31. }
  32.  
  33. return name2;
  34. }
  35.  

سبحان الله وبحمده ... سبحان الله العظيم

#3

جزيت خيرا أخي الكريم على المساعدة

آخر طلب هو استخدام كلاس java.util.scanner حتى يستطيع المستخدم ادخال اسمه و عدد البطاقات

حاولت كالتالي:

import java.util.Scanner;

public class CardInteraction {


		private Scanner scanner;
 private CardOrder card;


		public CardInteraction()
 {
  scanner = new Scanner(System.in);
 }



		public void run()
 {
		 CardOrder order = new CardOrder(getNameFromUser());
				order.setNumCards(getNumberFromUser());
				System.out.print(order.getSampleCard());

 }

		private String getNameFromUser()
 {
			System.out.println("Enter Name: ");
			String username = scanner.next();
			return username;
 }



 private int getNumberFromUser()
 {
			System.out.println("How many cards do you want ? ");
			int numOfCards = scanner.nextInt();
			return numOfCards;
 }

}

و قمت بتغيير الكلاسات الأخرى ايضا:

public class MainCard
{


 public static void main(String[] args)
 {

		 CardInteraction cf = new CardInteraction();
  cf.run();

		}

}

public class CardOrder
{
		 private String name;	 
  private int numCards;	 
		 private String initials;
		 private char border ='*';
		 private char space =' ';
		 private static final int CARD_LEN = 32;


 public CardOrder(String fullName)
		{
  name = fullName;
		 if(!nameIsValid())
				 {
					System.out.println("Please enter a valid name. A valid name is at least one word and not more than three.");
					System.exit(1);
				 }
		 }


	   public String getInitials() {
		String initials2="";
		String nameToUpper = name.toUpperCase();
		String[] splitName = nameToUpper.split(" ");
		for (int i = 0; i < splitName.length; i++) {
			initials = splitName.substring(0, 1);
			initials2+=initials;
		}
		return initials2;
	}


	   public String getFormattedName()
 {   
		   String name2="";		   
		   String nameToUpper = name.toUpperCase();		   
		   String nameToLower = name.toLowerCase();		   
		   String[] splitName = name.split(" ");		   
		   String[] splitNameToUpper = nameToUpper.split(" ");		   
		   String[] splitNameToLower = nameToLower.split(" ");			
		   if (splitName.length <=2)		   
		   {			   
			   for(int i =0; i <splitName.length; i++)				
			   {				 
				   String init  = splitNameToUpper.substring(0,1);				 
				   String remainder  = splitNameToLower.substring(1);				 
				   name2 += init + remainder + space;				
			   }			 
		   }			
		   else if (splitName.length == 3)		   
		   {				 
			   String init1  = splitNameToUpper[0].substring(0,1);				 
			   String remainder1  = splitNameToLower[0].substring(1);				 
			   String init2  = splitNameToUpper[1].substring(0,1);				 
			   String init3  = splitNameToUpper[2].substring(0,1);				 
			   String remainder3  = splitNameToLower[2].substring(1);				  
			   name2 += init1 + remainder1 + space + init2 + space + init3 + remainder3;			
		   }			
		   return name2;
 }

	   public boolean nameIsValid()
 {

			String[] splitName = name.split(" ");
			int noOfWords = splitName.length;
			if ((noOfWords >= 1) && (noOfWords <= 3))
			{
			 return true;		   
			}

			else {

			 return false;
			}

 }

	   public void setNumCards(int n)
 {
		   numCards=n;
 }

	   public int getNumCards()
 {


			return numCards;

 }

	   private String getTopLine()
 {

			   String dotstr="";			 
			   for(int i =0; i <CARD_LEN-2*getInitials().length(); i++)
				{
				   dotstr=dotstr + border;
				}
				String line = getInitials() + dotstr + getInitials();
				System.out.println(line);
				return line;
		 }

		private String getBlankLine()
 { 

			   String spacestr="";			 
			   for(int i =0; i <CARD_LEN-2 ; i++)
				{
				   spacestr+= space;
				}
				String line = border + spacestr + border;
				System.out.println(line);
				return line; 
		}

		private String getLineWithName()
 {
   String line2 = ""; 
		  double whiteSpaceAvailable = (30 - getFormattedName().length())/2;
		  String spacestr=""; 

		  if(getFormattedName().length() % 2 == 0)
		  {
		  for(int i =0; i < whiteSpaceAvailable; i++)
				{
				 spacestr+=space;

				}
				 String line = border + spacestr + getFormattedName() +spacestr+ border;
				 line2+= line;
		  }

		  if(getFormattedName().length() % 2 != 0)
		  {
		  for(int i =0; i < whiteSpaceAvailable; i++)
				{
				 spacestr+=space;

		  }
				String line = border + spacestr + space + getFormattedName() +spacestr+ border;
				line2+= line; 
		  }

		   System.out.println(line2);
		   return line2;
 }

		public double getCardPrice()
 {
		double cost;
			if (name.length() <= 12)
			{
				 cost =  0.20;
			}

			else
			{
				 cost = 0.25;
			}

			return cost;
 }

		public boolean hasDiscount()
 {
			if (numCards >= 100)
			{

				return true;
			}
			else
			{

				return false;
			}
 }

		public double getFinalCost()
 {
			double finalCost;			
			if(!hasDiscount())		   
			{				
				finalCost = (getNumCards() * getCardPrice());				
				System.out.printf("The price of %d cards is AED %.2f\n" ,getNumCards(),finalCost);				
				System.out.println("No discount given");			
			}		   
			else		   
			{				
				finalCost = (getNumCards() * getCardPrice()) - (getNumCards() * getCardPrice() * 0.1);			   
				System.out.printf("The price of %d cards is AED %.2f\n" ,getNumCards(),finalCost);			   
				System.out.println("10% discount applied");			
			}			
			return finalCost;
		}

		public String getSampleCard()
 {
  return  getTopLine() +
	getBlankLine() +
	getLineWithName() +
	getBlankLine() +
	getTopLine();
 }


}

و لكني احصل على رسالة الخطأ التالية:

Enter Name:

Asma khalid mohamed

How many cards do you want ?

Exception in thread "main" java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:840)

at java.util.Scanner.next(Scanner.java:1461)

at java.util.Scanner.nextInt(Scanner.java:2091)

at java.util.Scanner.nextInt(Scanner.java:2050)

at CardInteraction.getNumberFromUser(CardInteraction.java:41)

at CardInteraction.run(CardInteraction.java:23)

at MainCard.main(MainCard.java:10)

Java Result: 1

BUILD SUCCESSFUL (total time: 8 seconds)

هل من مساعدة أخيرة؟ :blush:

#4

استخدم الدالة nextLine بدل next

  1. private String getNameFromUser()
  2. {
  3. System.out.println("Enter Name: ");
  4. String username = scanner.nextLine();
  5. return username;
  6. }
  7.  

سبحان الله وبحمده ... سبحان الله العظيم

#5

جزيت خيرا..

#6

السلام عليكم

احتاج مساعدة في هذه المثود:

	public boolean nameIsValid()
{

			String[] splitName = name.split(" ");
			int noOfWords = splitName.length;
			if ((noOfWords >= 1) && (noOfWords <= 3))
			{
			 return true;		   
			}

			else {

			 return false;
			}

}

وظيفة هذه المثود هي عمل validation for user input و هي مرتبطة بال constructor التالي:

public CardOrder(String fullName)
		{
  name = fullName;
		 if(!nameIsValid())
				 {
					System.out.println("Please enter a valid name. A valid name is at least one word and not more than three.");
					System.exit(1);
				 }
		 }

لمشكلة فيها انه لا يتم ظهور رسالة خطأ اذا لم يقم المستخدم بادخال أي شيء

..كيف استطيع اظهاررسالة الخطأ نفسها اذا لم يتم ادخل اي شيء؟

ا

#7
wahjed3wa كتب:
السلام عليكم

احتاج مساعدة في هذه المثود:

	public boolean nameIsValid()
{

			String[] splitName = name.split(" ");
			int noOfWords = splitName.length;
			if ((noOfWords >= 1) && (noOfWords <= 3))
			{
			 return true;		   
			}

			else {

			 return false;
			}

}

وظيفة هذه المثود هي عمل validation for user input و هي مرتبطة بال constructor التالي:

public CardOrder(String fullName)
		{
  name = fullName;
		 if(!nameIsValid())
				 {
					System.out.println("Please enter a valid name. A valid name is at least one word and not more than three.");
					System.exit(1);
				 }
		 }

لمشكلة فيها انه لا يتم ظهور رسالة خطأ اذا لم يقم المستخدم بادخال أي شيء

..كيف استطيع اظهاررسالة الخطأ نفسها اذا لم يتم ادخل اي شيء؟

ا

إذا قمنا بعمل

String name = "";

System.out.print(name.split[" "].length)

فسيعطينا 1 و ليس 0. و في برنامجك nameIsValid() ستصبح true.

في أول سطر في nameIsValid() ضعي :

if ( name.isEmpty()) {
return false;
}

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