PDA

View Full Version : دریافت سریال های مختلف؟!



حمید محمودی
یک شنبه 04 مهر 1389, 11:40 صبح
سلام،

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

tdkhakpur
یک شنبه 04 مهر 1389, 12:30 عصر
به عبارت دیگه میخام کاری کنم که برنامه فقط سریال های تعریف شده رو بگیره(و این سریال ها از بیرون از برنامه تعریف میشن، یعنی در فایل) و اگه کاربر سریال الکی وارد کرد پیغام بده.(اگر هم بتونه که به کاربر فقط اجازه وارد کردن سریال های تعریف شده رو بده که خیلی بهتره)
میتوانید فقط طول سریال و همچنین بازه داده های ورودی را متغییر تعریف کنید یعنی در این تعریف شما مثلا
پارامتری به برنامه ارسال کنید که مشخص کند آیا سریال شما میتواند حرف a را داشته باشد یا خیر در ضمن در این پارامتر طول را هم میتوانید ارسال کنید.

alinikaein
یک شنبه 04 مهر 1389, 13:25 عصر
از ابزار DevExpress، كامپوننت cxMaskEdit، اين امكان را به شما مي‌ده كه فرمت‌هاي مختلفي براي ماسك كردن ورودي به صورت Regular Expression تعريف كنيد.

ضمن اين كه شما هر فرمتي هم كه براي ماسك بخوايد تعريف كنيد، مي‌تونيد در هنگام اجرا، از يك فايل متني اون فرمت را بخونيد و به نوع ماسك، انتساب بديد.


يا علي... موفق باشيد...

حمید محمودی
یک شنبه 04 مهر 1389, 14:47 عصر
میتوانید فقط طول سریال و همچنین بازه داده های ورودی را متغییر تعریف کنید یعنی در این تعریف شما مثلا
پارامتری به برنامه ارسال کنید که مشخص کند آیا سریال شما میتواند حرف a را داشته باشد یا خیر در ضمن در این پارامتر طول را هم میتوانید ارسال کنید.


میشه یکم بیشتر توضیح بدید؟ (آیا این روش امر زیر رو محقق میکنه؟

من نمیدونم که چند وقت دیگه فرمت و طول سریال ها چطوری خواهد شد.مثلا اصلا نمیدونم کدوم حرف سریال میتونه فلان بازه رو داشته باشه و.... . فقط باید طوری برنامه رو تنظیم کنم تا هرطوری سریال ها تغییر کرد نیاز به تغییر کد برنامه نباشه. )




از ابزار DevExpress، كامپوننت cxMaskEdit، اين امكان را به شما مي‌ده كه فرمت‌هاي مختلفي براي ماسك كردن ورودي به صورت Regular Expression تعريف كنيد.

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

ممنون از پاسخ دوستان

hossein_h62
یک شنبه 04 مهر 1389, 15:48 عصر
بازم تاکیید میکنم که من اصلا نمیدونم که بعدا فرمت و طول سریال ها چطور تغییر میکنه.

سلام
با توجه به اینکه امکان تغییر فرمت و طول سریال ها در آینده هست و نمیشه اون رو الان پیش بینی کنید میتونید در بانکتون جدولی رو به این امر اختصاص بدین.بطوریکه محدودیت طولی و فرمت سریالها از اون طریق کنترل بشه و اگر هم فرمت جدیدی اومد بتونن بدون نیاز به تغییر در سورس اون رو اضافه کنن.

SAASTN
یک شنبه 04 مهر 1389, 16:32 عصر
منظور از این سریال یه کد امنیتی برای برنامه است یا مثلا سریال یه سری کالا که کاربر برنامه باید وارد کنه؟
با اجازتون می خوام کل صورت مسئله رو پاک کنم.
در حالت اول: اولا شما می تونید همین الان یه استاندارد تعریف کنید بعدها هم اگه الگوریتم سریال سازتون تغییر کرد خروجی رو با یه تابع دیگه به همون استاندارد قبلی ببرید. دوما چه لزومی داره که کاربر رو به یه فرمت خاص هدایت کنید؟ این که خودش یه جور راهنمایی به هکر برای شکوندن اون هست. در مورد نرم افزارهای دیگه هم که همچین چیزی خیلی عرف نیست. فقط وقتی سریال بزرگ میشه چندحرف-چند حرف جدا می کنن که قابل خوندن باشه.
اگر هم حالت دومه که باز هم نیازی به محدود کردن وجود نداه، احتمالا لیست این سریال ها از قبل توی سیستم موجوده. یه سیستمی شبیه به این ComboBox های AutoComplete باید باشه کاربر همینطور که داره وارد می کنه لیست خودش Update بشه و هرجا کاراکتری وارد شد که با هیچ کدوم از سریالهای موجود همخوانی نداشت ...

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

hossein_h62
یک شنبه 04 مهر 1389, 16:38 عصر
تا جایی که من فهمیدم مسئله فهموندن وجود ترکیبات مختلف به برنامه نیست، بلکه محدود کردن کاربر به یکی از این ترکیباته.

منم از جهت همین محدود کردن کاربر عرض کردم. بشرطیکه امکان تعریف و تغییر این فرمتها در دسترس همه نباشه!

tdkhakpur
یک شنبه 04 مهر 1389, 17:05 عصر
من نمیدونم که چند وقت دیگه فرمت و طول سریال ها چطوری خواهد شد.مثلا اصلا نمیدونم کدوم حرف سریال میتونه فلان بازه رو داشته باشه و.... . فقط باید طوری برنامه رو تنظیم کنم تا هرطوری سریال ها تغییر کرد نیاز به تغییر کد برنامه نباشه. )


جواب این سوال فقط به خودتان که میخواهید الگوریتم این سریال را پیاده سازی کنید بستگی دارد در صورتی که مطلبی که ما ارسال کنیم با نوع خواسته شما متفاوت هست!
مثلا اگر نظر شخصی باشه میتونید رمز گشایی سریال را با فرمولی که بهش ارسال میکنید مشخص کنید.
ولی در کل استفاده از بانک اطلاعاتی میتونه راحتتر از همه باشه.


این که خودش یه جور راهنمایی به هکر برای شکوندن اون هست

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

حمید محمودی
یک شنبه 04 مهر 1389, 17:32 عصر
با توجه به اینکه امکان تغییر فرمت و طول سریال ها در آینده هست و نمیشه اون رو الان پیش بینی کنید میتونید در بانکتون جدولی رو به این امر اختصاص بدین.بطوریکه محدودیت طولی و فرمت سریالها از اون

طریق کنترل بشه و اگر هم فرمت جدیدی اومد بتونن بدون نیاز به تغییر در سورس اون رو اضافه کنن.

عملاً نمیدونم چطوری پیاده سازیش کنم. (لطفا" بیشتر توضیح بدید.)




منظور از این سریال یه کد امنیتی برای برنامه است یا مثلا سریال یه سری کالا که کاربر برنامه باید وارد کنه؟

نه سربال کالا هست، نه کد امنیتی. سریال مربوط به پروفایل اشخاص در سازمان هست و از قبل وجود نداره. یعنی یه جای دیگه ساخته شده و توی برنامه باید وارد بشه. فرض کنید یک ماه شد و فرمت سریال

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

نتونه کاربر وارد کنه.




تا جایی که من فهمیدم مسئله فهموندن وجود ترکیبات مختلف به برنامه نیست، بلکه محدود کردن کاربر به یکی از این ترکیباته.

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

وارد بکنه (یعنی محدودش کنه).



منم از جهت همین محدود کردن کاربر عرض کردم. بشرطیکه امکان تعریف و تغییر این فرمتها در دسترس همه نباشه!

فرض کنید فرمت سریال ها تغییر کرد. حالا به کاربرایی که نرم افزار رو دارن، باید یه فایل یا یه برنامه ای دیگه بدم تا با استفاده از اون بتونه سریال های جدیدرو هم وارد کنه. حال با توجه به این مورد، چطور باید

امکان تعریف و تغییر این فرمت ها رو از کاربر گرفت؟(تا به نوعی امنیت برنامه هم حفظ بشه؟!)

SAASTN
یک شنبه 04 مهر 1389, 18:15 عصر
خوب با توجه به این توضیحات دیگه فکر می کنم باید خودتون تابعی برای کنترل فرمتهای مختلف بنویسید، یه چیزی شبیه به این:
function GetFormat(const Serial: ShortString): ShortString;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(Serial) do
if Serial[I] in ['0' .. '9'] then
Result := Result + '0'
else
Result := Result + 'a';
end;

function IsSerialValid(const Serial: ShortString; const ChackLength: Boolean): Boolean;
const
ValidFormats : array [0..4] of ShortString =
('00000', 'aaa', '000aa00', 'a0aaaa', 'aa0000');
var
I, J, SerialLength: Integer;
SerialFormat: ShortString;
begin
Result := False;
SerialLength := Length(Serial);
for I := 0 to Length(ValidFormats) -1 do
if
((not ChackLength) and (SerialLength <= Length(ValidFormats[I]))) or
(SerialLength = Length(ValidFormats[I]))
then
begin
SerialFormat := GetFormat(Serial);
Result := True;
for J := 1 to SerialLength do
if SerialFormat[J] <> ValidFormats[I][J] then
begin
Result := False;
Break;
end;
if Result = True then
Break;
end;
end;

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

shpegah
سه شنبه 13 مهر 1389, 11:50 صبح
من يك سيستم پرسنلي دارم مشخصه هر فردرابايك id كه AutoNumberاست را براي كليه ارتباطات با بانكهاي ديگر در نظر گرفتم كه مطمئنا هيچ وقت تغييرش نميدهم ويك فيلد تحت عنوان شماره پرسنلي دارم كه كاربران آن را اساس تمام جستجوهايشان قرار ميدهند طبق فرمايش شما هر چند وقت يكبار كدينگ را تغيير ميدهند.به نظر من يك بانك براي انواع فرمتها در نظربگيريم كه بايك مختصر راهنمايي كه در فرم نمايش داده ميشود كاربر اصلي ميتواند فرمت جديد ايجاد كند وبه عنوان پيش فرض فرمت در نظر گرفته شود
اگر بخواهيد مانند ماسك عمل كند(حرف به حرف) بهتر است در ابتداي باز شدن فرم ورود اطلاعات فيلد پيش فرض بانك فوق را در داخل متغيير ماسك خود قرار دهيد منتها اگر بخواهيد از فرمت ديگري استفاده كنيد بايد تيك ان را علامت بزنيد سپس فرم را باز كنيد حسن اين روش اين است كه تغييري در سرعت ورود اطلاعات احساس نميشود
روش جنابSAASTN براي سيستم پرسنلي كه به نسبت استخدام ركورد اضافه ميشود اشكالي ندارد ولي براي كالاي ورودي كه تعداد ركوردها واحتمالا تعداد فرمتها زياد است سرعت ورود اطلاعات را كم ميكند واين درحالي است كه در آن واحد فقط به يك فرمت احتياج است