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

انشاء برنامج فواتير ل معرض سيارات

بدأه Eng.C# في 3 سبتمبر 2008 · 13 رد · 6,143 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اخوني كيفية انشاء برنامج استخراج فواتير لمعرض سيارات ...!؟

يعني كيفية بناء مثل هذه البرامج بالـ c#

واستخدام اي اداوات .. وهل نستخدم اداوات التقرير ؟؟!

اتمنى من اهل الخبرة .. المساعدة وتقديم ارائهم ومقترحاتهم ...

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

تحياتي

1
52gv0m.gif
#2

باعتقادي ان الفكرة بسيطة

مثلا ً انشاء قاعدة بيانات بها البيانات التي نريدها بالفاتورة وغالبا ً لن تزيد عن جدولين واحد للعملاء وبياناتهم ( الاسم , العنوان , التليفون , ,,,, الخ ) والاخر لعملية الشراء ( تاريخ الشراء , نوع السيارة , الثمن , ..... الخ )

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

ولاستخراج الفواتير يتم التعامل مع التقارير

دي فكرة

وانا اول المنضمين لفريق العمل ان كان سيفتح للمشاركة

#3

اهلا بك اخي العزيز

انا ابتدأت بالبرنامج فعلا

وسارفق قاعدة البيانات

والسورس كود

وشوفه وقلي .. شو ممكن نعدل .. او نضيف ..

وان شاء الله نخرج ببرنامج احترافي ...

وممكن الاستفادة منه .. ليس فقط بفواتير السيارات ... هي مجرد فكرة ...

الاستفادة من الجوهر

تحياتي الحارة لك

ونرحب بالمنضمين لعمل البرنامج

واضافة الافكار

وتنقيح الكود

CAR_S.rar

52gv0m.gif
#4

اخي مندل بروف ...

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

ويتم الربط بينهم ...

Chaos is rejecting all you have learned, chaos is being YOURSELF
 

#5

اخي العزيز

shadi-ib

يعني نريد جدول خاص بالسيارات الموجودة بالمعرض ..

وجدول خاص بالفواتير

وجدول خاص للعملاء ..

اهذا ما تقصده؟؟

19 تحميل للملف ؟؟؟ :blush:

52gv0m.gif
#6

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

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

على كل حال لنجعل هذه الفكرة مشروع نعمل عليه هنا

وانا اعتذر للاخ نوري فانا لم افتح الملف المرفق حتى الان لانشغالي قليلا ولكن سأعمل عليه ان شاء الله ونتشاور فيه ونبدأ مع بعض فيه ان شاء الله

وانا باقترح على الاخ شادي الانضمام لنا في هذا المشروع

#7

هل انت مستخدم 2008 في عمل هذا البرنامج

لأنه لم يفتح معي ويعطي رسالة انه مكتوب باصدار احدث ( انا عندي 2005)

#8

نعم اخي استخدم الـ 2008 :lol:

لكن لما الاغلبية تستخدم 2005 الى الان ؟؟

مع انه الـ 2008 اقوى وبه تطويرات كتيرة عن الـ 2005

اضف الى ذلك WPF

اخي لنبدأ بالـ تصميم قاعدة البيانات ..

حتى اقوم بعدها بشرح الكود اللي كتبته ..

ونكون متواصلين ..

تحياتي

52gv0m.gif
#9

قبل ان ابدأ بشرح الكود ..

المكتوب .. اود ان اقول .. اني ومن خلال عملي بمشروع تخرجي ..

تعرفت على طريقة رائعة واحترافية في بناء التطبيقات .. التي تتعامل مع الـ DATA BASE

وتدعى هذه الطريقة العلمية الـ Data Access Layer

وأصبحت ابني بها تطبيقاتي ..

وأعتقد هناك مواضيع تتحدث عن DAL

هي كـ فاصل بين الـ User Interface ..وبين الـ Data Base

فـ علاقة لمن يبني الـ Interface بما يدور بالداتا بيز ..

وتستطيع من خلالها تصليح الخطأ وبسرعة .. والتطوير .. واكتشاف الاخطاء ...

هي لمحة بسيطة .. لا اكثر ..

هنا class Connection

ليس عليك في كل مرة تريد ان تفتح طريق بينك وبين الـ Data Base ان تكتب نفس الاسطر ..

ما عليك التعامل مع هذا الـ class

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace DAL
{
	public class DBConnection
	{
		private static SqlConnection  conn = null;
		public static SqlConnection GetConnection()
		{
			if (conn == null)
			{
				conn = new SqlConnection();
				conn.ConnectionString = @"server=.;database=rsa;UID=sa;PWD=123";
				conn.Open();
			}
			return conn;
		}
	}
}

اما هذا الـ class فهو للتعامل مع الداتا بيز .. وكل ما احتجنا الى امر في الداتا بيز خاص في هذا الجدول نقوم باضافته هنا ..

ونستخدمه بالبرنامج .. فقط

من يريد ان اشرح اي جزئ من هذا الكود البسيط فانا جاهز ...

using System;
using System.Data;
using System.Data.SqlClient;

namespace DAL
{
	public class Purchase
	{
		#region Constructor
		public Purchase()
		{
		}
		public Purchase(int intID)
		{
			ID = intID;
		}
		#endregion

		#region Properties
		#region PrimaryKey
		private Int32 _ID;
		public Int32 ID
		{
			get { return _ID; }
			set
			{

				_ID = value;
				SqlConnection conn = DBConnection.GetConnection();
				SqlCommand cmd = new SqlCommand();
				cmd.Connection = conn;
				cmd.Parameters.AddWithValue("@ID", ID);
				cmd.CommandText = "select * from Purchase where ID = @ID";
				SqlDataAdapter da = new SqlDataAdapter(cmd);
				DataSet ds = new DataSet();
				cmd.ExecuteNonQuery();
				da.Fill(ds);
				DataRow dr = ds.Tables[0].Rows[0];
				Date = DateTime.Parse(dr["Date"].ToString());
				Cname = dr["Cname"].ToString();
				CarType = dr["CarType"].ToString();
				CarModel = dr["CarModel"].ToString();
				Rate = Int32.Parse(dr["Rate"].ToString());
				Discount = float.Parse(dr["Discount"].ToString());
				Descryption = dr["Descryption"].ToString();
				Solved = bool.Parse(dr["Solved"].ToString());
			}
		}
		#endregion

		#region Normal Properties

		private DateTime _Date;
		public DateTime Date
		{
			get { return _Date; }
			set { _Date = value; }
		}

		private String _Descryption;
		public String Descryption
		{
			get { return _Descryption; }
			set { _Descryption = value; }
		}


		private String _CarModel;
		public String CarModel
		{
			get { return _CarModel; }
			set { _CarModel = value; }
		}


		private String _Cname;
		public String Cname
		{
			get { return _Cname; }
			set { _Cname = value; }
		}


		private String _CarType;
		public String CarType
		{
			get { return _CarType; }
			set { _CarType = value; }
		}

		private Int32 _Rate;
		public Int32 Rate
		{
			get { return _Rate; }
			set { _Rate = value; }
		}

		private Int32 _BillID;
		public Int32 BillID
		{
			get { return _BillID; }
			set { _BillID = value; }
		}

		private float _Discount;
		public float Discount
		{
			get { return _Discount; }
			set { _Discount = value; }
		}

			  private float _Total;
			  public float Total
		{
			get { return _Total; }
			set { _Total = value; }
		}




		private bool _Solved = false;

		public bool Solved
		{
			get { return _Solved; }
			set { _Solved = value; }
		}

		#endregion

		#endregion

		#region Methods



		public void SaveSolved()
		{

			SqlConnection conn = DBConnection.GetConnection();
			SqlCommand cmd = new SqlCommand();
			cmd.Connection = conn;


			cmd.Parameters.AddWithValue("BillID", BillID);
			cmd.CommandText = "update Purchase set Solved = 'True' where BillID=@BillID";

			cmd.ExecuteNonQuery();
		}


		public void Save()
		{

			SqlConnection conn = DBConnection.GetConnection();
			SqlCommand cmd = new SqlCommand();
			cmd.Connection = conn;

			cmd.Parameters.AddWithValue("@Date", Date);
			cmd.Parameters.AddWithValue("BillID", BillID);
			cmd.Parameters.AddWithValue("@Cname", Cname);
			cmd.Parameters.AddWithValue("@CarType", CarType);
			cmd.Parameters.AddWithValue("@CarModel", CarModel);
			cmd.Parameters.AddWithValue("@Rate", Rate);
			cmd.Parameters.AddWithValue("@Discount", (Discount/100)*Rate);
			cmd.Parameters.AddWithValue("@Descryption",Descryption);
			cmd.Parameters.AddWithValue("@Solved", Solved);
			cmd.Parameters.AddWithValue("@Total",(Rate - (Discount/100)*Rate));

			if (ID == 0)
			{
				cmd.CommandText = "insert into Purchase values ( @BillID, @Date, @Cname, @CarType, @CarModel, @Rate, @Discount, @Descryption, @Solved ,@Total)";
			}
			else
			{
				cmd.Parameters.AddWithValue("@ID", ID);
				cmd.CommandText = "update Purchase set  BillID =@BillID, Date = @Date, Cname = @Cname, CarType = @CarType, CarModel = @CarModel, Rate= @Rate, Discount = @Discount, Descryption = @Descryption, Solved = @Solved, Total = @Total where ID = @ID";
			}
			cmd.ExecuteNonQuery();
		}

		public void Delete()
		{
			SqlConnection conn = DBConnection.GetConnection();
			SqlCommand cmd = new SqlCommand();
			cmd.Connection = conn;
			cmd.Parameters.AddWithValue("@ID", ID);
			cmd.CommandText = "delete from Purchase where ID = @ID";
			cmd.ExecuteNonQuery();
		}

		public static DataTable SelectAll()
		{
			SqlConnection conn = DBConnection.GetConnection();
			SqlCommand cmd = new SqlCommand();
			cmd.Connection = conn;
			cmd.CommandText = "select * from Purchase";
			SqlDataAdapter da = new SqlDataAdapter(cmd);
			DataSet ds = new DataSet();
			cmd.ExecuteNonQuery();
			da.Fill(ds);
			return ds.Tables[0];
		}

		public static DataTable Select()
		{
			SqlConnection conn = DBConnection.GetConnection();
			SqlCommand cmd = new SqlCommand();
			cmd.Connection = conn;
			cmd.CommandText = "select * from Purchase where Solved = 'False'";
			SqlDataAdapter da = new SqlDataAdapter(cmd);
			DataSet ds = new DataSet();
			cmd.ExecuteNonQuery();
			da.Fill(ds);
			return ds.Tables[0];
		}


		public void totale()
		{
			SqlConnection conn = DBConnection.GetConnection();
			SqlCommand cmd = new SqlCommand();
			cmd.Connection = conn;
			cmd.Parameters.AddWithValue("@BillID", BillID);
			cmd.CommandText = "update Purchase set Total = (select sum(Total) from Purchase where BillID = @BillID)WHERE BillID = @BillID";
			SqlDataAdapter da = new SqlDataAdapter(cmd);
			DataSet ds = new DataSet();
			cmd.ExecuteNonQuery();

		}

		public void totale1()
		{
			SqlConnection conn = DBConnection.GetConnection();
			SqlCommand cmd = new SqlCommand();
			cmd.Connection = conn;
			cmd.Parameters.AddWithValue("@BillID", BillID);
			cmd.CommandText = "select Total from Purchase where BillID = @BillID ";
			SqlDataAdapter da = new SqlDataAdapter(cmd);
			DataSet ds = new DataSet();
			cmd.ExecuteNonQuery();

		}



		#endregion
	}
}

اعيد من يريد ان اشرح اي جزئ من هذا الكود البسيط ..فأنا جاهز .. ومن يريد المشاركة معنا في عمل هذا المشروع ...

فنرحب بالجميع

تحياتي

52gv0m.gif
#10

الله عليك كود جميل جدا ً وسهل ومشروح في ذاته

بس عندي تعقيب صغير انا ااسمع كتير ان هناك ملف اسمه appliction configuration file طبعا معروف بالنسبة لك انا اسمع ان وضع جملة الاتصال في هذا الملف افضل بكتير من كتابتها في الكود وذلك لحرية انتقال قاعدة البيانات من مكان الى اخر او حتى تغيير السيرفر وعندها لا نحتاج الى تغيير في الكود وانما نغير في ملف الاعدادات هذا

ارجو التصحيح ان في كلامي اي خطأ وان كان صحيحا ً فكيف نفعل هذا ؟؟؟

#11

اخي حان الان موعد الافطار ...

ان شاء الله بعد الافطار سأعطيك الطريقة ..

طريقة عمل application configuration file

وحتى في الـ connection string

وكلامك صحيح اخي وانا استخدمتها في برامج عديدة ...

وسأعود بعد الافطار ...

وتقبل الله صيامنا ...

تحياتي لكـ

52gv0m.gif
#12

دعونا الان نتفرغ لهذا المشروع .. وننجزه من الالف الى الياء ..

حتى يستطيع الكل الاستفادة منه ..

وهي اهم جزئ دائما في البرنامج .. وهي البداية التي يجب ان ينتبه اليها كل مبرمج ..

بعدها نستطيع بناء الـ DAL والتي تطرقنا اليها من قبل ..

وهكذا نكون قد بينا قاعدة البرنامج .. لم يعد لدينا سوا ان نبني الـ Interface

بالبداية دعونا نصمم قاعدة البيانات ..

اولا : يجب علينا انشاء جدول يحتوي على جميع انواع السيارات الموجودة في المعرض ..

post-42626-1220577023_thumb.gif

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

post-42626-1220577798_thumb.gif

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

post-42626-1220578213_thumb.gif

نكمل غداً ان شاء الله تعالى

52gv0m.gif
#13
Prof.Mendl كتب:
انا كنت اعطي مثال سريع اما اذا كنا نريد تصميم فعلي لقاعدة البيانات فله جلسة خاصة

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

على كل حال لنجعل هذه الفكرة مشروع نعمل عليه هنا

وانا اعتذر للاخ نوري فانا لم افتح الملف المرفق حتى الان لانشغالي قليلا ولكن سأعمل عليه ان شاء الله ونتشاور فيه ونبدأ مع بعض فيه ان شاء الله

وانا باقترح على الاخ شادي الانضمام لنا في هذا المشروع

لا مش بالضبط لادارة المكان ... هيك يعني عالخفيف ....

مدامكو صرتوا مبلشين على بركة الله

تم تعديل هذه المشاركة بواسطة shadi-ib في 5 سبتمبر 2008 في 10:11

Chaos is rejecting all you have learned, chaos is being YOURSELF
 

#14

طيب يا اخ شادي خلينا نستفيد من الاخ eng C# ونعمل المشروع على طريقته انه يكون مشروع كامل من كله ومش حاجة على السريع

انا متابعك يا باشمهندس وفي انتظار البقية

بس انا عندي سؤال ( لوتسمح ؟؟ )

ايه علاقة الربط بين الجدوال دي

مش لو عملنا مفتاح ثانوي للربط بينهم هايكون احسن بمعنى انه ممكن يكون فاتورة البيع او الشراء بها اكثر من سيارة

كما يمكن ان نضيف جدول خاص بــ suppliers وهي الشركة التي تورد لهذا المعرض السيارات وعندها لابد ايضا من ربط هذا الجدول بجدول السيارات

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

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