# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > ارزیابی نرم افزار >  من هم قیمت میخوام

## FastCode

یه نرم افزار پخش دارم که :
1.تمام عملیات خرید و فروش و تمام عملیات وجوه نقد و چک و ... رو انجام میده
2.چارت اداری, سیستم حقوق و دست مزد پیشرفته داره.
3.سرعت یسیار بالا داره.(جدیداً با چند تا برنامه مقایسه کردم.//شامل هلو هم میشه)
4.تعداد نامحدودی گزارش داره.
5.تحت شبکست
6.سرور میتونه یه کامپیوتر p2 باشه
7.تمام دیتابیس بدون حتی یک استثنا normalize شده. و از این بابت کاربر رو اذیت نمیکنه
8.UI بهتری داره
9.تنظیمات کاربران تا حدی است که اگر بخواند میتونن همه چیز رو تغییر بدن.
10.قابلیت اضافه کردن ستون به جداول فرم ها و ایجاد و تغییر گزارشات.
11.سطح دسترسی در چهار لایهBLL, DAL, Server, Server Network Control(من یه Server-Side DAL دارم.)
12.realtime بودن همه چیز.(realtime بودن با سرعت فرق داره.)
۱۳.حذف شد/فعلاً به اندازه کافی تعدادشون بالا نیست.
14.عدم استفاده از هرگونه روش spaghetti و hacky 
15.قابلیت چاپ کردن همه چیز(با تنظیمات بسیار زیاد) رو داره
16.لطفا" هر سوالی دارید بپرسید.

من حدود 5 سال چند تا برنامه مشابه نوشتم که همه شکست خوردند.(تجربه++;)
این برنامه به تنهایی حدود  30 ماه طول کشیده 

مشخصات جدید برنامه:
معرفی های 
مشتری 
کالا+شناسنامه کالا+بسته مادر
 نوع بسته کالا 
گروه کالا
 سری کالا 
شرکت تولید کننده

مشتری
منطقه (یه نفر بگه nested به فارسی چی میشه؟)
فعالیت
پرسنل
ویزیتور
راننده
تحصیلدار
توزیع کننده
کارپرداز
حساب بانکی
بانکهای مبدا(که از آنها چک میگیریم)
دسته چک
انبار
هزینه
درآمد
فرمول جایزه 
تگ کالا
مالکیت
صندوق
تخفیفات
درآمد ها
گروه
کل
معین 
تفصیل

چکهای پرداختی
چکهای دریافتی

ثبت سفارش فروش با حالتهای مختلف
سیستم جایزه خودکار و دستی(حالت خودکارش یه سیستم ه Rule RuleSet ,,,,, ی داره که خودش یه برنامست/+۳۰ حداقل تعداد پارمتریه که میگیره)

فاکتور خرید
سفارش خرید
 چاپ سفارش با بارکد(optional)

ثبت خروجی با حداکثر امکانات موجود(یک فرم با ۷ تا گرید , +۱۵۰ تا ستون و حدود ده تا گزارش دیگه که برای باز شدنشون بازد از context menu استفاده کنید. که سیر تا پیاز زندگی سفارش رو نشونتون میده)
امکان ثبت سفارش تکی به شکل خروجی با shortcut
چاپ حواله خروج از انبار
چاپ صورت حمل خروجی
فرم تصویه خروجی(فرمی که دقیقاً مشابه صورت حمل هست و به کاربر کمک میکنه که ۲۰ تا وجه دریافتی و برگشتی و چک رو در کمتر از ۷ ۸ دقیقه ثبت و بررسی کنه کنه.)
گزارش همین فرم بالا که میتونه چند سفارش چند وجه دریافتی و فاکتور برگشتی و ... که مطعلق به یک شخص هستند رو در یک سطر نمایش بده و اختلافات رو نمایش بده.

گزارشات:
لیست فاکتور های خرید و فروش به ترتیب با (+۱۰ و +۲۰ فیلتر) و تعداد بسیار زیادی ستون که شامل مبلغ و تخفیف و همین چیزایی میشه که حسابدارها دوست دارن.
جمع فاکتر های خرید و فروش که هر کدوم فقط یک فرم(System.Windows.Forms.Form) هستند ولی 
ستونهای همه گزارشات یکسان هستند و شامل کد نام تعداد و مبلغ ه سفارش بین راه  برگشتی قطعی و کل و تعداد بسته هستند
جمع فاکتورهای فروش دارای گزارش بر مبنای ویزیتور شرکت فعالیت راننده توزیع کننده خروجی منطقه مسیر گروه کالا نوع بسته کالا سری کالا کالا گروه کل معین تفصیلی سال ماه روز هست.
جمع فاکتور های فروش + ۱۰ تا فیلتر داره که دو تا شون لیست هستند(کالا و تگ کالا)(بقیه هم قرار ه لیست بشن ولی هنوز نشدن)
جمع فاکتور های خرید بر اساس چند تا از موارد مربوط به کالا چون موارد دیگه عملاً نمیتونن گزارشهای موئثری باشن
گزارش لیست کالاها:
که دارای +۱۰ فیلتر شامل ه موجود بودن فعال بودن میشه.
با ستونهای 
سفارش خرید
سفارش فروش
بین راه فورش
موجودی پایه انبار
موجودی عینی انبار
موجودی با کم شدن سفارش های فروش
موجودی با کم شدن سفارش های خرید 
.....موجودی ها کلاً ۳۰+ تا ستونه
و گردش در N روز قبل
گزارش ریالی عین همین بالایی
گزارش شرکتها دوباره عین همین بالایی ها(با تعداد بسته)
چند مدل چاپ با سورتهای مختلف (به علاوه هر سورتی که کاربر میتونه با گرید ایجاد کنه) و ستونهای مختلف به انتخاب کاربر

گزارش کارتکس کالا
این یکی هم زیادی خفنه
امکان فیلتر بر اساس نوع سطر(فروش خرید انتقال بین انبارها و تغییر دستی موجودی)(تغییر دستی موجودی یک تیبله(توی گزارش موجودی رو تغییر نمیدیم!))

گزارش لیست مسیر
گزارش عملیات روزانه
گزارش توان پرداخت چک(امکانات:تعطیلات غیر رسمی و جمعه و بدهی غیر رسمی و گزینش دستی ه مواردی که باید در گزارش موثر باشند شامل موجودی حسابهای بانکی و بدهی تصویه نشده شرکتها)

گزارش صورت حساب
یه صورت حساب معمولی با +۲۰ ستون که ۴ تاش برای راس گرفتنه.(سعی کردم پیچیده نشه ولی این هم ۲۰ تا فیلتر داره)

عملیات چک به صورت کامل:
تاریخچه چک شامل همه عملیات قبلی چک
گزارشات کامل برای چک(عین بقیه گزارشها این ها هم خفنن/لازم نیست بنویسم)

رنج فروش ویزیتورها
لیست مسیر

کارهای خاص:
قابلیت جابجایی ترتیب همه عملیات با هم(همه یعنی همه)(برای بررسی گزارش گردش حساب بانک و قانع کردن مشتری های نفهم خیلی عالیه.)
دفتر چه تلفن
ابزار مخصوص محاسبه قیمت
ماشین حساب ندارم چون حسابدارها همشون یه بزرگترشو رو میزشون دارن. :قهقهه: 
قابلیت جست و جو اطلاعات در همه برنامه از یک جا
قابلیت کار کردن آفلاین همه کلاینت ها با هم(کاملاً seamless)
قابلیت تغییر کد همه چیز به صورت دستی(کالا مشتری پرسنل بانک صندوق گروه کالا فاکتور .... (من الان باید مینوشتم 'همه یعنی همه')) با ارسال فقط هیچ کیلوبایت اطلاعات در شبکه بدون تداخل کلید و بدون مصرف پردازنده بدونه توجه به حجم اطلاعات O(1)
قابلیت ویرایش فاکتور از انتها(یعنی از روی لیست کالاهای یک سری فاکتور(توضیحش سخته ولی باحاله/کاربردی هم هست))
قابلیت چاپ از همه جا
قابلیت ارجاع اطلاعات به بقیه کاربران
کنترل کلاینت ها از سرور
پشتیبانی از IPv6 و چند پروتوکل دیگه
قابلیت تغییر تمام مشخصات گرید ها
ویرایش گروهی منطقه مشتریان
و هزاران امکانات دیگه که الان یادم نیست
سطح دسترسی درخور این امکانات
ترافیک فوق العاده پایین در شبکه
قابلیت اصلاح drift در لایه Network
خورده ریز خیلی داره ها:
مثلاً نگهداری GMP کالا که نیاز ندیدم بنویسم.(اگر میخواهید بگید)

پ.ن.
من خیلی از کلمات شامل و ... استفاده کردم, شامل x به معنی محدود شدن به x نیست.یعنی x را هم دارد.چیزهای دیگه رو هم که انتظار دارید دارد.

----------


## soheril.server

> یه نرم افزار پخش دارم که :
> 1.تمام عملیات خرید و فروش و تمام عملیات وجوه نقد و چک و ... رو انجام میده
> 2.چارت اداری, سیستم حقوق و دست مزد پیشرفته داره.
> 3.سرعت بالا داره.
> 4.تعداد نامحدودی گزارش داره.
> 5.تحت شبکست
> 6.سرور میتونه یه کامپیوتر p1 باشه
> 7.تمام دیتابیس بدون حتی یک استثنا normalize شده. و از این بابت کاربر رو اذیت نمیکنه
> 8.UI زشتی داره(من coder هستم و متاسفانه هیچی از UI نیمفهمم)
> ...


برای بررسی نیاز به لا اقل چند تا عکس از برنامتون هست...

----------


## alinaghiha

تو ارزيابي بالا 1000 هزار تومان يعني يك ميليون تومان :گیج:

----------


## FastCode

> تو ارزيابي بالا 1000 هزار تومان يعني يك ميليون تومان


متاسفانه آره.

----------


## soheril.server

این طوری که پیداست برنامه تان از لحاظ کد و الگوریتم محاسبات و اجرا قوی است...هر چند که ظاهر دل چسبی ندارد...نظر من روی 4 میلیون تا 5 میلیون :متفکر:

----------


## mf_007

دوست عزیز من تجربه ای تو قیمت گزاری ندارم ولی اگه میشه به هر قیمتی که فروختی قیمت رو اینجا بزار تا بقیه هم از قیمت این نوع  نرم افزارها آگاه بشن

----------


## FastCode

هیچکس نظری نداره؟

----------


## soheril.server

> هیچکس نظری نداره؟


از چهDatabase ی استفاده کردید؟ سفارشی یا SQL و AcCessو...
در ضمن آیا برنامه تان کامپوننت ارسال SMS را دارد؟

خوشحال میشدم اگه اینجا کمکم می کردید :گریه:  :ناراحت:  :چشمک:

----------


## FastCode

> سفارشی یا SQL و AcCessو...


cross-database نوشتم :چشمک: 
اینها رو ساپورت میکنه:
MSSQLServer
Oracle
SqLite
MySql
و یه دیتابیس generic که دارم از روی SqLite و یه برنامه دیگه و با ابتکار و امکانات خودم با C++‎ می نویسم.(هنوز 30 40% کار داره, ولی خیلی خوب طراحی کردم.)

----------


## FastCode

cross-platform هم شد. :کف کرده!: 
۱.
در ضمن سرور رو طوری تغییر دادم که امکانات transaction فوق العاده قوی ایجاد میکنه.
۲.
lock ها رو هم طوری طراحی کردم که امکان قفل کردن تکی یا range یا چندگانه روی هر تیبل رو داره.(تقریبا" شبیه اوراکل)
۳.
و قابلیت اجرای sql روی کش های لوکال هم اضافه شد که با اون میشه با یک پیغام حجم زیادی عملیات انجام داد.(ترافیک کمتر در شبکه)

موارد بالا تغییر کردند:
مورد اول خیلی بهتر شده.
مورد دو هنوز نیمه کارس ولی تا یه جاهایی کار میکنه
مورد سه به خاطر شلوغی که داشت حذف شد.

الان فقط برنامه سرور cross-platform ه و کلاینت فقط توی ویندوز کار میکنه.

----------


## MahmoudiNik

سلام
تو قیمت دادن نکته ای که مهمه اینه که چقدر به سیستم کاری کاربران نزدیک باشه
هرچه نزدیک تر باشه قیمتی رو که بدی بیشتر قبول میکنن و نرم افزارت سرطانی میره جلو
یه بنده خدایی میگفت یه برنامه تحت داس با بانک فاکس پرو فروخته بودن 6 میلیون !! شاخ در آوردم مربوط به حسابداری طلا میشد! گفتم شیش میلیون!! :خیلی عصبانی:  دمش گرم حالا من که نمیدونم چی بوده ولی 6 میلیون!! 

راستی رو گرافیکش خیلی کار کن البته یکم سرعتتو کم میکنه من یه برنامه مثل همون نوشتم اما خیلی کوچیکتره  بیبن چطوره :
قیمتشو نمیگم چون خجالت میکشم

----------


## ricky22

سلام اقا بهروز 
اگه میشه در باره اینا توضیح بده:



> 11.سطح دسترسی در چهار لایهBLL, DAL, Server, Server Network Control(من یه  Server-Side DAL دارم.)





> 12.realtime بودن همه چیز.





> 14.عدم استفاده از هرگونه روش spaghetti و hacky که باعث میشه تقریبا" روزی  2 تا فرم جدید به درخواست مشتری به برنامه اضافه کنم.





> cross-database نوشتم

----------


## ASKaffash

سلام
براساس گفته های خودتان :
قیمت گذاری روی این نرم افزار خیلی معنی دار نیست و ظاهرا برای سازمانهای بزرگ مناسب است و برای فروش بصورت Package مناسب نیست و قیمت باید براساس درخواستهای کارفرما و توافق صورت گیرد مگر اینکه توضیح دیگری ارائه دهید

----------


## FastCode

> نقل قول:
>                                                  11.سطح دسترسی در چهار لایهBLL, DAL, Server, Server Network  Control(من یه  Server-Side DAL دارم.)                                 
>      نقل قول:
>  12.realtime بودن همه چیز.
>  
>      نقل قول:
>                                                   14.عدم استفاده از هرگونه روش spaghetti و hacky که باعث میشه تقریبا"  روزی  2 تا فرم جدید به درخواست مشتری به برنامه اضافه کنم.                                 
>      نقل قول:
>                                                  cross-database نوشتم


11.یعنی توی UI توی BLL (auto generated part) توی DAL (auto generated) و توی بخش سرور(مغز برنامه که مقداری از real-time بودن رو به ارمغان میاره و شاهراهه تمام اطلاعاته) و توی خود SQL Server یا MySql یا هر بانکی قابلیت تعریف سطح دسترسی وجود داره.
12.خوب یعنی اگر کاربر برای دیدن آخرین تغییرات مجبور بشه فرم رو ببنده یا یه دکمه رفرش رو بزنه حتماً یه جایی اشتباه کردم.
14. خوب یعنی Microsoft Visual Studio نمره 90% به کدم میده که در واقع باید 95%  بده چون نمره DAL و  BLL که اولی کاملاً و دومی نصفه auto generate شدن روی هم 85٪ میگیرن که its not my fault.

cross database رو هم که توضیح دادم ولی تا حالا با MSSQL  و MySql و SqLite تست کردم خیلی خوب جواب داده.



> قیمت گذاری روی این نرم افزار خیلی معنی دار نیست و ظاهرا برای سازمانهای  بزرگ مناسب است


درسته ولی سازمانهای بزرگ هم پول میدن دیگه.باید یه چیزی بشهون بگم؟
در ضمن تا حالا به ۲ ۳ نفر دادم(خیلی هم Beta نیست)Build No = +1500

ویرایش

پشتیبانی همه database ها به جز MSSQL رو drop کردم.(یعنی چند وقته تست نکردم)
دیگه رسماً بتا نیست.(آخرین نسخه stable چهار ماهه که داره کار میکنه)
BuildNo = +5000

----------


## ASKaffash

سلام
سازمانهای بزرگ هر کاری کنید خورده فرمایش خیلی زیاد دارند بنابراین برآوردی بیش از 15 میلیون تومان بدون تغییرات و مابقی براساس توافق تغییرات خواسته شده باشد متاسفانه قیمت عادلانه را ملاک پائین بودن کیفیت می دانند درضمن 3 برابر قیمت برای ارائه سورس نیز منطقی است (17 ساله شاهد این موضوع هستم)

----------


## Rejnev

> cross database رو هم که توضیح دادم ولی تا حالا با MSSQL  و MySql و SqLite تست کردم خیلی خوب جواب داده.


سلام
يعني براي اين مهم، كار خاصي انجام دادي؟(كدوم بخشها تغيير كردن؟)
لينك تو اس كيو ال كه دست و پاي آدم رو ميبنده.
ميشه بطور كلي معماري كارت رو به ما بگي

----------


## FastCode

> سلام
> يعني براي اين مهم، كار خاصي انجام دادي؟(كدوم بخشها تغيير كردن؟)
> لينك تو اس كيو ال كه دست و پاي آدم رو ميبنده.
> ميشه بطور كلي معماري كارت رو به ما بگي


معماری فعلی:
تمام اطلاعات در هر کلاینت cache میشه.
client ها به سرور متصل میشوند.
سرور نقش پراکسی بین برنامه و دیتابیس رو داره.
تمام اطلاعات بر اساس تمام کلیدها سورت میشن.
تمام اطلاعات به هم map میشن.
هر گزارشی که بخوام میگریرم.
در تمام DataGridView ها از VirtualMode استفاده کردم و رنگ و آب اساسی بهش دادم.
بعضی گزارشات به شکل temporary هستند.




> يعني براي اين مهم، كار خاصي انجام دادي؟


از IDbConnection استفاده کردم.
در ضمن حجم زیادی از برنامه AutoGenerate شده.

از اون موقع تا حالا برنامه خیلی تغییر کرده.

----------


## Rejnev

> تمام اطلاعات در هر کلاینت cache میشه.


تغيير در اطلاعات هر كلاينت چطوري به گوش بقيه ميرسه؟

----------


## FastCode

> تغيير در اطلاعات هر كلاينت چطوري به گوش بقيه ميرسه؟


تغییرات توسط سرور به بقیه ارسال میشه.

----------


## Rejnev

> تغییرات توسط سرور به بقیه ارسال میشه.


پس کلاینتها هر چند وقت یک بار از سرور سوال میکنن که آیا تغییری هست یا نه. اگه هست تغییرات رو بده به ما تا کش مون رو تغییر بدیم.
یا طور دیگه ایه(با توجه به اینکه گفتی real time)

----------


## FastCode

> پس کلاینتها هر چند وقت یک بار از سرور سوال میکنن که آیا تغییری هست یا نه. اگه هست تغییرات رو بده به ما تا کش مون رو تغییر بدیم.
> یا طور دیگه ایه(با توجه به اینکه گفتی real time)


نه.
یعنی هر کلاینت وقتی میخواد تغییری ایجاد بکنه که نباید interrupt بشه,یه lock توسط سرور روی کلاینت ها ایجاد میکنه.در غیر این صورت یک message حاوی تغییرات یک سطر رو به سرور میفرسته.
سرور هم بلافاصله بعد از  parse و verify میفرسته به بقیه کلاینتها تا روی cache شون اعمال بکنند.
وقتی یه پیغام به یه client میرسه.اول روی cache اعمال میشه(فقط یک لایه از لایه ای که سطح دسترسی کاربر توش مدیریت میشه پایین تره.)بعد به تمام query های که اون قسمت از جدول یا کل جدول رو monitor میکنند اطلاع میده که سطر فلان اطلاعاتش از x به y تغییر کرده.
ولی یه چیزی میگی یه چیزی میشنوی.برای این کار مجبور شدم تمام مقاله های network و concurrency و CRUD و ... و تمام لینکهای اضافه wikipedia رو بخونم. :گریه:

----------


## ali_autumnal

سلام.

نرم افزاري كه نوشتيد بنظرم* بيش از 3.5ميليون ارزش داره.*  اما آيا واقعا اين پول را پرداخت خواهند كرد!!!!!!!!!!

در نتيجه شما بايستي نرم افزار رو به چندين نفر بفروشيد و *حداقل قيمت هم 1.5 ميليون* تومان فوقالعاده است.

موفق و سربلند باشيد
علي پاييزي

----------


## FastCode

پست ها آپدیت شد.
معماری برنامه هم کاملاً زیر و رو شده.

----------


## سوداگر

به نظر من مبتدی نباید ارزش کارمون رو پایین بیاریم ولی مجبوریم مراعات حال اهالی کپی رایت را هم بکنیم.

----------

