PDA

View Full Version : ساخت یک صندوق مالی کوچک



rasoul babadi
جمعه 07 آذر 1393, 12:46 عصر
درود به همه دوستان.
من قصد دارم یک برنامه صندوق مالی کوچک درست کنم البته توی قسمت بانک های اطلاعاتی این رو مطرح کردم اما ...
شرح برنامه :
من جایی که کار میکنم یه فایل اکسل داره که این کارو انجام میده امام گزارش گیری و بایگانی و کاربراش نا مشخص یعنی هر کسی بخواد پول اضافه می کنه پول بر میداره خلاصه بگم سر و سامون نداره من توی یه داروخانه کار می کنم البته داروخانه توی یه مرکزی است که عمومی نیست فقط مختص کارمندان همون مرکز. ما چهار نفریم که توی این دارو خانه کار می کنیم و کارهایی که انجام می دیم شامل زیر است.
1- با فروش دارو در هر ماه باید گزارش کارکرد دارو خانه رو به مسئول بدیم یعنی جمع درآمد در یک روز ، یک ماه توسط کاربران
2- برای مخارج داروخانه و جاهای دیگر از صندوق دارو خانه پول برداشت می شود که موجودی صندوق رو بهم میریزه و آخر ماه به مشکل بر می خوریم همین دوکار انجام می ده امام چون خیلی بی نظمی داره به مشکل خوردم یه خورده تحقیق کردم توی اینترنت و این سایت و به نتیجه زیر رسیدم.

یه بانک به نام صندوق درست کنم که دو جدول داشته باشه
1- جدول سند
2- جدول کاربر

طرح آیندهبرنامه باید بتونه تاریخ، ساعت، مبلغ، نوع سند (برداشت یا واریز) شرح و کاربر و نام برداشت کننده یا واریز کننده رو در خودش ذخیره کنه البته باید با ایجاد هر سند جدید مبلغ بسته به نوع سند موجودی تغییر کند یعنی اگر برداشت کند از موجودی کم و اگر پرداخت کند به موجودی اضافه کند. البته این کار باید طوری باشد که بتوان گزارش گیری را به صورت روزانه ماهانه و سالیانه کالا برحسب تاریخ انجام بگیره. درضمن زمانی که برنامه اجرا میشه ساعت و تاریخ به صورت خودکار در فرم نمایش بده البته نام کاربری رو هم نشون بده. در فرم اصلی. سپس با استفاده از دکمه بتوان کاربر جدید را ثبت کنه البته سطح دسترسی هم داشته باشه یعنی یه مدیر داشته باشه.


خروجی :
1- گزارش بر حسب کارکرد کاربر
2- گزارش بر حسب تاریخ
3- گزارش برحسب شماره سند
4- لیست سند های واریزی
5- لیست سند های برداشتی
6- لیست کاربران

نظر شما:
لطفا نظرتون رو بگین مشکلات من رو برطرف کنین و پیشنهاد بدین چکار کنم با کدوم یک ازبرنامه های زیر کار کنم.
1- اکسس
2- اس کیو ال
3- ویژوال بیسیک 6
4- ویژوال استادیو 2010
5- دلفی 7
6- و...

لطفا کمک...

SlowCode
سه شنبه 11 آذر 1393, 23:23 عصر
طرح کارت رو درکل درست تنظیم کردی.
اینکه با کدوم زبان بنویسی بستگی داره به توانایی خودت! رو هر کدوم تسلط بیشتری داری با اون بنویس.
اگه تو قسمت خاصی مشکلی داری بپرس.
شاید به خاطر اینکه درخواستت دقیقا مشخص نیست کسی بهت پاسخی نداده!

rasoul babadi
چهارشنبه 12 آذر 1393, 22:07 عصر
لطفا به بانک و تصویر زیر نگاه کن و در موارد زیر راهنمایم کن.
1- اشکالات بانکم چیه
2- می خوام با وارد شدن کاربر به سیستم ، با باز شدن فرم سند شماره کاربر جاری به صورت اتوماتیک در جدول سند ثبت بشه
3- در فرم اصلی برنامه فقط سند های مربوط به ماه جاری در دیتا گرید نشون داده بشن.
4- توی فرم سند فقط سند های کاربر جاری آن هم در تاریخ جاری نمایش داده شود.
5- جمع واریز و جمع برداشت و همچنین موجودی واقعی رو نمایش بده.
126269126270

SlowCode
چهارشنبه 12 آذر 1393, 23:11 عصر
2- توی برنامه ات یه متغیر سراسری تعریف میکنی و موقعی که کاربر لاگین کرد مقدار این متغیر رو برابر userID میکنی. وقتی هم که کاربر خواست چیزی ثبت کنه مقدار متغیر رو میخونی میریزی توی فیلد.
3- یه کوئری میزنی شبیه کد زیر:
select * from Sanad where DateSanad between month_min and month_max
که مقدار متغیر month_min برابر:

Y = Year(Date$)
M = Month(Date$)
month_min = DateSerial(Y, M, 1)
month_max = DateSerial(Y, M, 31)

4- موقع کوئری زدن یه شرط میزاری شبیه این:
select * from Sanad where UserID=user_id DateSanad between month_min and month_max
5- چند راه وجود داره که یکیش رو میگم.
واسه بدست آوردن میزان برداشت:
select sum(MablaghSanad) as sum from Sanad where TypeSanad='برداشت'
واسه دریافت هم:
select sum(MablaghSanad) as sum from Sanad where TypeSanad='دریافت'
موجودی واقعی هم تفاضل این دو مقدار خواهد بود.
برای مثال:

txtCash.text = income - payments


فقط یه نکته:
اگر از adodc استفاده میکنی تا جایی که یادم میاد دستوراتی رو که تو شماره 5 نوشتم رو پشتیبانی نمیکنه! ولی adodb پشتیبانی میکرد.
در هر صورت اگر مجبور بودی که از adodc یا data استفاده کنی کد زیر رو بنویس و بعد رکوردهای بدست اومده رو تو یه حلقه بخون و مقادیر فیلد MablaghSanad رو با هم جمع کن.


کدهایی که من نوشتم صرفا برای توضیح مسئله هستن، چون 2 ساله با vb کار نمیکنم کدهاش یادم رفتن.
از این کدها الهام بگیر و کد نهایی رو خودت بنویس.

rasoul babadi
پنج شنبه 13 آذر 1393, 16:46 عصر
دوست عزیز نگفتی این کدا رو کجا ها استفاده کنم کدفرم اصلی به صورت زیر است.

Private Sub Form_Load()
'------------------------------------------------------------------------------------------
'Load Date Perstioan
Dim intYear As Integer, intMonth As Integer, intDay As Integer
Dim strDayName As String, strShamsi As String
GetJalaliDate Year(Date), Month(Date), Day(Date), intYear, intMonth, intDay, strDayName
strShamsi = intYear & "/" & intMonth & "/" & intDay & " " & strDayName
lblDate.Caption = strShamsi
'----------------------------------------------------------------------------------------------
'Load Time System
Call DataKlok
lblTime.Caption = "00:00:00"
Teller = 0
'-----------------------------------------------------------------------------------------------------------------
'Load Data Base With Adodc
AdoMain.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:\Project\Sandoogh\DBSandoogh.mdb"
AdoMain.CommandType = adCmdText
AdoMain.RecordSource = "SELECT * FROM Sanad"
AdoMain.Refresh
'-----------------------------------------------------------------------------------------------------------------
End Sub



در ضمن در قسمتی کد مربوط میشه به مسیر بانک چه کدی بنویسم که اگر برنانه رو روی کامپیوتر دیگه ای بردم نیاز نباشه دو باره مسیر بانک رو عوض کنم.

rasoul babadi
پنج شنبه 13 آذر 1393, 17:10 عصر
به کد زیر دقت کن من توی بخش General البته مربوط به فرم لاگین تعریف کردم به صورت زیر
Dim user_id As Integer
حالا به صورت زیر اونو پر کردم .
user_id = AdoLogin.Recordset.Fields("UserID").Value
حلا زمانی که توی فرم سند می خوام کد ریخته شده توی متغیر رو بریزم توی فیلد مربوطه با مشکل بر می خورم. اینم کد ثبت اطلاعات سند جدید.
Private Sub CmdSave_Click()
AdodcNSanad.Recordset.AddNew
txttype.text = CmbType(1).text
AdodcNSanad.Recordset.Fields("DateSanad") = Trim(txt(2).text)
AdodcNSanad.Recordset.Fields("TimeSanad") = Trim(txt(3).text)
AdodcNSanad.Recordset.Fields("TypeSanad") = Trim(txttype.text)
AdodcNSanad.Recordset.Fields("MablaghSanad") = Trim(txt(4).text)
AdodcNSanad.Recordset.Fields("NoteSanad") = Trim(txt(5).text)
AdodcNSanad.Recordset.Fields("UserID") = user_id
AdodcNSanad.Recordset.Update
Dim msg As Integer
msg = MsgBox("سند مورد نظر با موفقيت در بانک ثبت شد", vbOKOnly, "پيغام")
Call emptytext
CmdEdit.Enabled = False
CmdDel.Enabled = False
CmdSave.Enabled = True
End Sub

rasoul babadi
شنبه 15 آذر 1393, 17:00 عصر
کجایی Show code جان...

SlowCode
شنبه 15 آذر 1393, 18:55 عصر
دوست عزیز نگفتی این کدا رو کجا ها استفاده کنم کدفرم اصلی به صورت زیر است.
مثال:

AdoMain.RecordSource = "select * from Sanad where UserID="&user_id&" and DateSanad between '"&month_min&"' and '"&month_max&"'"


در ضمن در قسمتی کد مربوط میشه به مسیر بانک چه کدی بنویسم که اگر برنانه رو روی کامپیوتر دیگه ای بردم نیاز نباشه دو باره مسیر بانک رو عوض کنم.
AdoMain.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&app.path&"\DBSandoogh.mdb"

به کد زیر دقت کن من توی بخش General البته مربوط به فرم لاگین تعریف کردم به صورت زیر
Dim user_id As Integer
حالا به صورت زیر اونو پر کردم .
user_id = AdoLogin.Recordset.Fields("UserID").Value
حلا زمانی که توی فرم سند می خوام کد ریخته شده توی متغیر رو بریزم توی فیلد مربوطه با مشکل بر می خورم. اینم کد ثبت اطلاعات سند جدید.
Private Sub CmdSave_Click()
AdodcNSanad.Recordset.AddNew
txttype.text = CmbType(1).text
AdodcNSanad.Recordset.Fields("DateSanad") = Trim(txt(2).text)
AdodcNSanad.Recordset.Fields("TimeSanad") = Trim(txt(3).text)
AdodcNSanad.Recordset.Fields("TypeSanad") = Trim(txttype.text)
AdodcNSanad.Recordset.Fields("MablaghSanad") = Trim(txt(4).text)
AdodcNSanad.Recordset.Fields("NoteSanad") = Trim(txt(5).text)
AdodcNSanad.Recordset.Fields("UserID") = user_id
AdodcNSanad.Recordset.Update
Dim msg As Integer
msg = MsgBox("سند مورد نظر با موفقيت در بانک ثبت شد", vbOKOnly, "پيغام")
Call emptytext
CmdEdit.Enabled = False
CmdDel.Enabled = False
CmdSave.Enabled = True
End Sub



خب شما متغیر رو تو فرم لاگین تعریف کردی! پس فقط تو فرم لاگین قابل دسترس هست!
بهتره یه module ایجاد کنی و این متغیر رو توش تعریف کنی. اینطوری تو همه فرم ها قابل دسترس خواهد بود.

SlowCode
شنبه 15 آذر 1393, 19:37 عصر
برای بدست آوردن مجموع برداشت و پرداخت و موجودی واقعی این کد رو ببین.
البته از حفظ نوشتم شاید مشکلی داشته باشه.

With AdoMain
.RecordSource = "SELECT * FROM Sanad WHERE TypeSanad='برداشت'"
For i=1 to .Recordset.RecordCount
payments = payments + .Recordset.Fields('MablaghSanad')
Next
.Refresh
.RecordSource = "SELECT * FROM Sanad WHERE TypeSanad='پرداخت'"
For i=1 to .Recordset.RecordCount
income = income + .Recordset.Fields('MablaghSanad')
Next

msgbox "Payments= " & payments & " & income= " & income & VBCRLF & _
"Cash= " income - payments

هرچند این روش اصلا خوب نیست که بیاییم کلی رکورد رو بخونیم و تو حلقه با هم جمع کنیم، تو رکوردهای تعداد بالا سرعت بدجور پایین میاد. ولی ما نوشتیم دیگه:لبخندساده:

rasoul babadi
چهارشنبه 19 آذر 1393, 20:46 عصر
من یه ماژول ساختم و متغیر زیر رو ساختم
Dim user_id as integer
برای پر کردنش کد زیر رو توی فرم لاگین نوشتم البته توی دکمه ورود به نظرتون درست نوشتم درضمن چطور بفهم که متغیرم پر شده.
Private Sub CmdInsert_Click()
Dim strName As String
Dim strPass As String
Dim pesan As String
AdoLogin.Refresh
strName = CmbUser.text
strPass = txtPassword.text
Do Until AdoLogin.Recordset.EOF
If AdoLogin.Recordset.Fields("UserName").Value = strName And AdoLogin.Recordset.Fields("Password").Value = strPass Then
Me.Hide
FrmMain.Show
FrmMain.DBImage1.PhotoField = AdoLogin.Recordset.Fields("UserPic").Value
FrmMain.lblTypeUser.Caption = AdoLogin.Recordset.Fields("UserType").Value
FrmMain.lblFName.Caption = AdoLogin.Recordset.Fields("FName").Value
FrmMain.lblLName.Caption = AdoLogin.Recordset.Fields("LName").Value
user_id = AdoLogin.Recordset.Fields("UserID").Value

Exit Sub
Else
AdoLogin.Recordset.MoveNext
End If
Loop
pesan = MsgBox("نام کاربري يا کلمه عبور اشتباده است! لطفا دوباره تلاش کنيد", vbOKCancel, "پيغام")
If (pesan = 1) Then
FrmLogin.Show
CmbUser.SetFocus
txtPassword = ""
Else
End
End If
End Sub

rasoul babadi
چهارشنبه 19 آذر 1393, 21:24 عصر
سلام این خطا مربوط به سین تاکس هست اما هر کار کردم درست نشده من همان کد شما رو وارد کردم جناب showCode
126465
در فرم لود کد زیر را نوشتم که داده ها رو توی گرید ویو نمایش میده اما با خطای بالا مواجه می شم بنظر شما مربوط به month_minیا month_max نیست.
Private Sub Form_Load()
'------------------------------------------------------------------------------------------
'Load Date Perstioan
Dim intYear As Integer, intMonth As Integer, intDay As Integer
Dim strDayName As String, strShamsi As String
GetJalaliDate Year(Date), Month(Date), Day(Date), intYear, intMonth, intDay, strDayName
strShamsi = intYear & "/" & intMonth & "/" & intDay & " " & strDayName
lblDate.Caption = strShamsi
'----------------------------------------------------------------------------------------------
'Load Time System
Call DataKlok
lblTime.Caption = "00:00:00"
Teller = 0
'-----------------------------------------------------------------------------------------------------------------
'Load Data Base With Adodc
AdoMain.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DBSandoogh.mdb"
AdoMain.CommandType = adCmdText
AdoMain.RecordSource = "select * from Sanad where UserID = " & user_id & " and DateSanad between '" & month_min & "' and '" & month_max & "'"
' AdoMain.RecordSource = "SELECT * FROM Sanad"
AdoMain.Refresh
'-----------------------------------------------------------------------------------------------------------------
End Sub

rasoul babadi
چهارشنبه 19 آذر 1393, 22:41 عصر
راستی یادم رفت کدی که مربوط به جمع دریافت و برداشت بود رو وارد کردم اما درست کار نمی کنه یعنی توی گرید ویو فقط برداشت ها رو نشون می ده و محاسبات هم مشکل داره کد رو همراه تصویر خروجی گذاشتم یه نظر بدید.
'Load Data Base With Adodc
AdoMain.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DBSandoogh.mdb"
AdoMain.CommandType = adCmdText
AdoMain.RecordSource = "SELECT * FROM Sanad"
AdoMain.Refresh
'-----------------------------------------------------------------------------------------------------------------
With AdoMain
.RecordSource = "select * from sanad where typeSanad='برداشت'"
For i = 1 To .Recordset.RecordCount
TextB.text = Val(TextB.text) + .Recordset.Fields("MablaghSanad")
Next
.Refresh

.RecordSource = "select * from Sanad where typeSanad='دریافت'"
For i = 1 To .Recordset.RecordCount
TextD.text = Val(TextD.text) + .Recordset.Fields("MablaghSanad")
Next

TextM.text = Val(TextD.text) - Val(TextB.text)
End With
126467
:متفکر: