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

كود تفقيط يدعم المنازل العشرية

بدأه TopSec في 5 نوفمبر 2007 · 8 رد · 7,259 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لاحظت ان هناك بعض الطلبات القديمة على كود يقوم بعملية تحويل المبالغ لكلمات - تفقيط

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

ملاحظات عامة

اولا : يقوم بتحويل المبالغ حتى 999999999.99 ( تسعمائة وتسعة وتسعون مليون وتسعمائة وتسعة وتسعون ألف و تسعمائة وتسعة وتسعون ريال و تسعة وتسعون هلله ) وبعد ذلك يرمي اكسبشن واللي عندة أكتر من كدة فلوس يديني حبة وأنا اعدله الكو :P د

ثانيا : يراعي المفرد والمثنى والجمع لكنه لايراعي قواعد النحو في الأرقام لأني ضعيف فيها شوي :( ة

ثالثا :عند إرسالك لمبلغ بالهلل فقط تأكد انه على الصورة 0.10 وليس .10 ويمكنك مراعاه ذالك الخطأ برمجيا قبل إرسال المبلغ :P

رابعا : لتغييير العملة الى الجنيه مثلا غير المسميات في المصفوفات بالمسميات المقابله لها

أرجو من الجميع إختبار الكود وإخباري بملاحظكم مشكورييييييين وأرحب بإقتراحات التحسينات

والسلام

using System;
  using System.Collections.Generic;
  using System.Text;

  namespace GlApp
  {
	  class MonyToString
	  {
		  //مصفوفات الكلمات
		  string[] ahad	= { "", "واحد", "إثنين", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", " ثمانية", " تسعة", " عشرة", " أحد", " اثنى" };
		  string[] ahad2   = { "", "واحد", "إثنين", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة", " عشر", " أحد", " اثنى" };
		  string[] asharat = { "", "واحد", "عشرون", "ثلاثون", "أربعون", "خمسون", "ستون", "سبعون", "ثمانون", "تسعون" };
		  string[] meat	= { "", "مائة", "مائتين", "ثلاثمائة", "أربعمائة", "خمسمائة", "ستمائة", "سبعمائة", "ثمانمائة", "تسعمائة" };
		  string[] melion  = { "", " مليون", " مليونان", " ملايين" };
		  string[] alf	 = { "", " ألف", " ألفين", " آلاف" };
		  string[] bcur	= { " ريال", " ريالان", " ريالات"};

		  public string NumToStr(double P_Num)
		  {
			  double rv;
			  string accum="";
  //الملايين
			  rv = (int)(P_Num / 1000000);

			  if (rv > 2)
				  accum = NumToStr1(rv, accum);

			  if (rv >= 3 && rv < 10)
				  accum = accum + melion[3];
			  else if (rv == 2)
				  accum = accum + melion[2];
			  else if ((rv == 1)||(rv >= 10 && rv <= 999))
				  accum = accum + melion[1];
  //الآلاف
			  rv = P_Num - (int)(P_Num / 1000000) * 1000000;
			  rv = (int)(rv / 1000);
			  if ((P_Num != ((int)(P_Num / 1000000)) * 1000000) && (P_Num > 1000000))
				  accum = accum + " و";
			  if (rv > 2)
				  accum = NumToStr1(rv, accum);
			  if (rv >= 3 && rv < 10)
				  accum = accum + alf[3];
			  else if (rv == 2)
				  accum = accum + alf[2];
			  else if ((rv == 1) || (rv >= 10 && rv <= 999))
				  accum = accum + alf[1];
  //الباقي
			  rv = P_Num - ((int)(P_Num / 1000)) * 1000;
			  rv = (int)(rv + 0.0001);

			  if ((P_Num != ((int)(P_Num / 1000)) * 1000) && (P_Num > 1000) && (rv != 0)) 
				  accum = accum + " و ";

			  if ((rv >= 2) && (P_Num != 2))
				  accum = NumToStr1(rv, accum);

			  if (P_Num > 0.999 )
			  {
				  if ((P_Num < 11) && (rv > 2))
					  accum = accum + bcur[2];
				  else if (P_Num == 2)
					  accum = accum + bcur[1];
				  else
					  accum = accum + bcur[0];
			  }

  //الهللات		
			  rv = P_Num - ((int)(P_Num + 0.0001)) + 0.0001;
			  rv = (int)(rv * 1000);
			  rv =rv/10;

			  if ((rv >= 1) && (P_Num > 0.99))
				  accum = accum + " و";

			  if (rv > 2.9)
				  accum = NumToStr1(rv, accum);

			  if (rv >= 1) 
			  {
				  if ((rv == 2))
					  accum = accum + " هللتين";
				  else if ((rv < 11) && (rv > 2.9))
					  accum = accum + " هللات";
				  else
					  accum = accum + " هلله";
			  }
			  return accum;
		  }

		  //******************* NumToStr1 *************************
		  // used by NmToStr
		  public string NumToStr1(double rv, string accum)
		  {
			  int b, c;
			  if (rv >= 100)
			  {
				 b = (int)(rv / 100);
				  accum = accum + meat;
			  }

			  b = (int)(rv - ((int)(rv / 100) * 100));
			  if ((b != 0) && (rv > 99))
				 accum = accum + " و";

			  c = b - ((int)(b / 10) * 10);
			  if ((b < 13) && (b != 0))
				  accum = accum + ahad;

			  if ((b > 12) && (c != 0))
				  accum = accum + ahad2[c];
			  if ((b > 10) && (b < 20))
			  accum = accum + ahad2[10];

			  if (b > 19)
			  {
				  if (c != 0)
					  accum = accum + " و";
				  accum = accum + asharat[b / 10];
			  }
			  return accum;
		  }
	  }
  }

تم تعديل هذه المشاركة بواسطة TopSec في 6 نوفمبر 2007 في 10:28

#2

السلام عليكم مرة أخرى

عند رفع الكود على الموقع لاحظت إنقلاب كافة المصفوفات من اليمين لليسار والعكس ............. لماذا؟؟؟؟؟؟؟؟!!!!!!!!!!!!! :blink: :blink: :blink: :blink:

وهذا هو كود البرنامج للتجربة

ProTafqeet.rar

والسلام

#3

9 حملوا الملف مافي حد قال حتى مساااااااااااااااااااااااا الخيييييييييير

ياجماعة خليكو إيجابيين شوية وعلقوا سواء عجبكم ام لم يعجبكم عشان

الواحد يتحمس شوية .... ايه المنتدى النايم دة .... إصحوااا

#4

السلام عليكم

محاولة جيدة, حاول منع كتابة الرموز والأحرف مكان الأرقام

قمت بتنظيم الواجهة :)

post-91400-1194373564_thumb.jpg

ProTafqeet1.zip

#6

السلام عليكم

أشكركم ben_Laiid و y85.fox على تعقيبكم المفيد

بالنسبة للواجهه الذي حدث أني نسخت الكود من مشروع لي وعندما وضعته على الموقع إنقلبت كافة المصفوفات ولتلافي الموضوع أنشأت مشروع جديد في خمس دقائق حتى لايستعمل أحد الكود الخطأ ويدعو علي :rolleyes: ثم قمت برفع مباشرة دون العناية بالواجهه... او بكود منع كتابة الأحرف

أشكرك على التعديل المفيد ben_Laiid ولكن ما أريده فعلا هو التعليق على الكود وهل يمكن إختصار الفكرة أكثر من ذلك لأني لازلت أكتب في السي شارب بطريقة الدلفي :lol: مع أن الكود الأصلي في الدلفي أصغر قليلا بسبب عدم قدرتي على استعمال ال case بدلا من if لأن الcase في السي شارب لاتعمل الا على int بينما هناك تعمل على Variant وهو نوع عملي يحمل كل أنواع البيانات هل هناك نوع مشابه لم أنتبه له في السي شارب؟؟

كذلك عانيت من موضوع case sensitive عند تحويل الكود من الدلفي لأني لم أكن أهتم لذلك من قبل ... وكذلك الأقواس الإجبارية.

ولكن بعد أن إنتهيت وجدت أن هذه النقاط جعلت الكود أكثر وضوحا وترتيبا حتى بالنسبة لي :lol:

آسف على الإطالة

هذا وبالله التوفيق

#7

السلام عليكم

راجعت بسرعة القسم MonyToString.cs , والمهم هو الصبر على كتابة خوارزميات طويلة.

سأعودله بالمراجعة والتعديل لاحقا لأن هناك أسئلة تحتاج الإجابة :)

#8

شاكر جدا جدا جدا على المجهود الرائع والله أفدتنا

بارك الله فيك يا أخى العزيز

:clapping: :clapping: :clapping: :clapping: :clapping: :clapping: :clapping: :clapping: :clapping: :excl: :excl: :excl: :excl: :excl:

#9

رائع من جد

مشكور و بارك الله في

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