कार्यक्रम का कार्यात्मक आरेख और कार्यात्मक संरचना। संरचित कार्यक्रम डिजाइन


विषय 1.3: सिस्टम सॉफ्टवेयर

विषय 1.4: सेवा सॉफ्टवेयर और एल्गोरिथम मूल बातें

आर्थिक सूचना विज्ञान का परिचय

1.3. पीसी सिस्टम सॉफ्टवेयर

1.3.1. पीसी सॉफ्टवेयर संरचना

पीसी पर समस्याओं को हल करने के लिए डिज़ाइन किए गए प्रोग्रामों के समूह को सॉफ्टवेयर कहा जाता है। पीसी सॉफ्टवेयर की संरचना को सॉफ्टवेयर कॉन्फ़िगरेशन कहा जाता है।

सॉफ्टवेयर को तीन श्रेणियों में विभाजित किया जा सकता है:

  1. सिस्टम सॉफ़्टवेयर (सामान्य उपयोग प्रोग्राम) जो विभिन्न सहायक कार्य करते हैं, जैसे उपयोग की गई जानकारी की प्रतियां बनाना, कंप्यूटर के बारे में सहायता जानकारी प्रदान करना, कंप्यूटर उपकरणों की कार्यक्षमता की जांच करना आदि।
  2. एप्लिकेशन सॉफ़्टवेयर जो पीसी पर आवश्यक कार्य प्रदान करता है: टेक्स्ट दस्तावेज़ों को संपादित करना, चित्र या चित्र बनाना, सूचना सारणियों को संसाधित करना आदि।
  3. टूल सॉफ़्टवेयर (प्रोग्रामिंग सिस्टम) जो प्रोग्रामिंग भाषा में नए कंप्यूटर प्रोग्राम के विकास को सुनिश्चित करता है।


चावल। 1.

सिस्टम सॉफ्ट्वेयर

ये सामान्य-उपयोग प्रोग्राम किसी विशिष्ट पीसी एप्लिकेशन से संबद्ध नहीं हैं और पारंपरिक कार्य करते हैं: शेड्यूलिंग और कार्य प्रबंधन, I/O प्रबंधन, आदि।

दूसरे शब्दों में, सिस्टम प्रोग्राम विभिन्न सहायक कार्य करते हैं, उदाहरण के लिए, उपयोग की गई जानकारी की प्रतियां बनाना, कंप्यूटर के बारे में सहायता जानकारी प्रदान करना, कंप्यूटर उपकरणों की कार्यक्षमता की जांच करना आदि।

सिस्टम सॉफ़्टवेयर में शामिल हैं:

  • ऑपरेटिंग सिस्टम (कंप्यूटर चालू होने पर यह प्रोग्राम रैम में लोड हो जाता है);
  • शेल प्रोग्राम (डॉस कमांड लाइन का उपयोग करने की तुलना में कंप्यूटर के साथ संचार करने का अधिक सुविधाजनक और दृश्य तरीका प्रदान करते हैं, उदाहरण के लिए, नॉर्टन कमांडर);
  • ऑपरेटिंग शैल - इंटरफ़ेस सिस्टम जिनका उपयोग ग्राफ़िकल इंटरफ़ेस, मल्टीप्रोग्रामिंग इत्यादि बनाने के लिए किया जाता है;
  • ड्राइवर (परिधीय डिवाइस पोर्ट को नियंत्रित करने के लिए डिज़ाइन किए गए प्रोग्राम, आमतौर पर कंप्यूटर शुरू होने पर रैम में लोड होते हैं);
  • उपयोगिताएँ (सहायक या उपयोगिता कार्यक्रम जो उपयोगकर्ता को कई अतिरिक्त सेवाएँ प्रदान करते हैं)।

उपयोगिताओं में शामिल हैं:

  • फ़ाइल प्रबंधक या फ़ाइल प्रबंधक;
  • गतिशील डेटा संपीड़न के साधन (आपको इसके गतिशील संपीड़न के कारण डिस्क पर जानकारी की मात्रा बढ़ाने की अनुमति देते हैं);
  • देखने और प्लेबैक उपकरण;
  • नैदानिक ​​उपकरण; नियंत्रण उपकरण आपको कंप्यूटर कॉन्फ़िगरेशन की जांच करने और कंप्यूटर उपकरणों, मुख्य रूप से हार्ड ड्राइव के प्रदर्शन की जांच करने की अनुमति देते हैं;
  • संचार उपकरण (संचार कार्यक्रम) कंप्यूटर के बीच सूचनाओं के आदान-प्रदान को व्यवस्थित करने के लिए डिज़ाइन किए गए हैं;
  • कंप्यूटर सुरक्षा उपकरण (बैकअप, एंटी-वायरस सॉफ़्टवेयर)।

यह ध्यान दिया जाना चाहिए कि कुछ उपयोगिताएँ ऑपरेटिंग सिस्टम में शामिल हैं, जबकि अन्य भाग स्वायत्त रूप से कार्य करता है। अधिकांश सामान्य (सिस्टम) सॉफ़्टवेयर OS में शामिल होते हैं। कुछ सामान्य सॉफ़्टवेयर कंप्यूटर में ही शामिल होते हैं (कुछ OS प्रोग्राम और नियंत्रण परीक्षण मदरबोर्ड पर स्थापित ROM या PROM में लिखे जाते हैं)। कुछ सामान्य सॉफ़्टवेयर स्टैंड-अलोन प्रोग्राम हैं और अलग से आपूर्ति किए जाते हैं।

अनुप्रयोग प्रक्रिया सामग्री

एप्लिकेशन प्रोग्राम का उपयोग स्वतंत्र रूप से या सॉफ़्टवेयर सिस्टम या पैकेज के भाग के रूप में किया जा सकता है।

एप्लिकेशन सॉफ़्टवेयर - प्रोग्राम जो सीधे पीसी पर आवश्यक कार्य करने में सक्षम बनाते हैं: टेक्स्ट दस्तावेज़ों को संपादित करना, चित्र या चित्र बनाना, स्प्रेडशीट बनाना आदि।

एप्लिकेशन सॉफ़्टवेयर पैकेज प्रोग्रामों की एक प्रणाली है, जो उनके अनुप्रयोग के दायरे के अनुसार, समस्या-उन्मुख, सामान्य-उद्देश्य पैकेज और एकीकृत पैकेज में विभाजित होते हैं। आधुनिक एकीकृत पैकेज में अधिकतम पांच कार्यात्मक घटक होते हैं: परीक्षण और स्प्रेडशीट प्रोसेसर, डीबीएमएस, ग्राफिक संपादक, दूरसंचार उपकरण।

उदाहरण के लिए, एप्लिकेशन सॉफ़्टवेयर में शामिल हैं:

  1. कार्यालय अनुप्रयोगों का एमएस ऑफिस सुइट।
  2. लेखांकन प्रणाली.
  3. वित्तीय विश्लेषणात्मक प्रणाली.
  4. एकीकृत कार्यालय प्रबंधन पैकेज।
  5. सीएडी - सिस्टम (कंप्यूटर एडेड डिजाइन सिस्टम)।
  6. HTML या वेब संपादक.
  7. ब्राउज़र वेब पेज देखने का साधन हैं।
  8. ग्राफ़िक संपादक.
  9. विशेषज्ञ प्रणालियां।

उपकरण सॉफ्टवेयर

टूल सॉफ़्टवेयर या प्रोग्रामिंग सिस्टम एक प्रोग्रामिंग भाषा में नए प्रोग्राम के विकास को स्वचालित करने के लिए सिस्टम हैं।

सबसे सामान्य स्थिति में, चयनित प्रोग्रामिंग भाषा (सिस्टम प्रोग्रामिंग भाषा) में एक प्रोग्राम बनाने के लिए, आपके पास निम्नलिखित घटकों की आवश्यकता होती है:

  1. प्रोग्राम के स्रोत टेक्स्ट के साथ फ़ाइल बनाने के लिए टेक्स्ट एडिटर।
  2. संकलक या दुभाषिया. कंपाइलर प्रोग्राम का उपयोग करके स्रोत पाठ को मध्यवर्ती ऑब्जेक्ट कोड में अनुवादित किया जाता है। एक बड़े प्रोग्राम के सोर्स कोड में कई शामिल होते हैं मॉड्यूल(स्रोत फ़ाइलें)। प्रत्येक मॉड्यूल को ऑब्जेक्ट कोड के साथ एक अलग फ़ाइल में संकलित किया जाता है, जिसे फिर एक में संयोजित किया जाना चाहिए।
  3. एक लिंक संपादक या असेंबलर जो ऑब्जेक्ट मॉड्यूल को लिंक करता है और आउटपुट - निष्पादन योग्य कोड के रूप में एक कार्यशील एप्लिकेशन उत्पन्न करता है। निष्पादन योग्य कोड एक संपूर्ण प्रोग्राम है जिसे किसी भी कंप्यूटर पर चलाया जा सकता है जिसमें वह ऑपरेटिंग सिस्टम है जिसके लिए प्रोग्राम बनाया गया था। एक नियम के रूप में, परिणामी फ़ाइल में एक्सटेंशन .EXE या .COM होता है।
  4. हाल ही में, विंडोज़ एप्लिकेशन बनाने के उद्देश्य से विज़ुअल प्रोग्रामिंग विधियां (स्क्रिप्टिंग भाषाओं का उपयोग करके) व्यापक हो गई हैं। यह प्रक्रिया तीव्र डिज़ाइन वातावरण में स्वचालित है। इस मामले में, तैयार दृश्य घटकों का उपयोग किया जाता है, जिन्हें विशेष संपादकों का उपयोग करके कॉन्फ़िगर किया जाता है।

विज़ुअल डिज़ाइन के लिए सबसे लोकप्रिय संपादक (विज़ुअल टूल का उपयोग करने वाले प्रोग्राम प्रोग्रामिंग सिस्टम):

  1. बोर्लैंड डेल्फ़ी - लगभग किसी भी एप्लिकेशन प्रोग्रामिंग समस्या को हल करने के लिए डिज़ाइन किया गया।
  2. बोरलैंड सी++ बिल्डर डॉस और विंडोज एप्लिकेशन विकसित करने के लिए एक उत्कृष्ट उपकरण है।
  3. माइक्रोसॉफ्ट विज़ुअल बेसिक विंडोज़ प्रोग्राम बनाने के लिए एक लोकप्रिय टूल है।
  4. Microsoft Visual C++ - यह टूल आपको Microsoft Windows जैसे OS वातावरण में चलने वाले किसी भी एप्लिकेशन को विकसित करने की अनुमति देता है।

पीसी पर समस्याओं को हल करने के लिए डिज़ाइन किए गए प्रोग्रामों के समूह को सॉफ्टवेयर कहा जाता है। पीसी सॉफ्टवेयर की संरचना को सॉफ्टवेयर कॉन्फ़िगरेशन कहा जाता है। सॉफ़्टवेयर को तीन श्रेणियों में विभाजित किया जा सकता है (चित्र 1):

चित्र 1. सॉफ्टवेयर वर्गीकरण

    सिस्टम सॉफ़्टवेयर (सामान्य उपयोग प्रोग्राम) जो विभिन्न सहायक कार्य करते हैं, जैसे उपयोग की गई जानकारी की प्रतियां बनाना, कंप्यूटर के बारे में सहायता जानकारी प्रदान करना, कंप्यूटर उपकरणों की कार्यक्षमता की जांच करना आदि।

    एप्लिकेशन सॉफ़्टवेयर जो पीसी पर आवश्यक कार्य प्रदान करता है: टेक्स्ट दस्तावेज़ों को संपादित करना, चित्र या चित्र बनाना, सूचना सारणियों को संसाधित करना आदि।

    टूल सॉफ़्टवेयर (प्रोग्रामिंग सिस्टम) जो प्रोग्रामिंग भाषा में नए कंप्यूटर प्रोग्राम के विकास को सुनिश्चित करता है।

सिस्टम सॉफ्ट्वेयरप्रोग्रामों का एक सेट है जो कंप्यूटर सिस्टम घटकों, जैसे प्रोसेसर, रैम, इनपुट/आउटपुट डिवाइस, नेटवर्क उपकरण का प्रभावी प्रबंधन प्रदान करता है, जो "इंटरलेयर इंटरफ़ेस" के रूप में कार्य करता है, जिसके एक तरफ हार्डवेयर है, और दूसरी तरफ, उपयोगकर्ता अनुप्रयोग. एप्लिकेशन सॉफ़्टवेयर के विपरीत, सिस्टम सॉफ़्टवेयर विशिष्ट एप्लिकेशन समस्याओं का समाधान नहीं करता है, बल्कि केवल अन्य प्रोग्रामों के संचालन को सुनिश्चित करता है, कंप्यूटर सिस्टम के हार्डवेयर संसाधनों का प्रबंधन करता है, आदि।

ये सामान्य-उपयोग प्रोग्राम किसी विशिष्ट पीसी एप्लिकेशन से संबद्ध नहीं हैं और पारंपरिक कार्य करते हैं: शेड्यूलिंग और कार्य प्रबंधन, I/O प्रबंधन, आदि। दूसरे शब्दों में, सिस्टम प्रोग्राम विभिन्न सहायक कार्य करते हैं, उदाहरण के लिए, उपयोग की गई जानकारी की प्रतियां बनाना, कंप्यूटर के बारे में सहायता जानकारी प्रदान करना, कंप्यूटर उपकरणों की कार्यक्षमता की जांच करना आदि। सिस्टम सॉफ़्टवेयर में शामिल हैं:

    ऑपरेटिंग सिस्टम (कंप्यूटर चालू होने पर यह प्रोग्राम रैम में लोड हो जाता है)

    शेल प्रोग्राम (डॉस कमांड लाइन का उपयोग करने की तुलना में कंप्यूटर के साथ संचार करने का अधिक सुविधाजनक और दृश्य तरीका प्रदान करते हैं, उदाहरण के लिए, नॉर्टन कमांडर)

    ऑपरेटिंग शेल इंटरफ़ेस सिस्टम हैं जिनका उपयोग ग्राफ़िकल इंटरफ़ेस, मल्टीप्रोग्रामिंग इत्यादि बनाने के लिए किया जाता है।

    ड्राइवर (परिधीय डिवाइस पोर्ट को नियंत्रित करने के लिए डिज़ाइन किए गए प्रोग्राम, आमतौर पर कंप्यूटर शुरू होने पर रैम में लोड होते हैं)

    उपयोगिताएँ (सहायक या उपयोगिता कार्यक्रम जो उपयोगकर्ता को कई अतिरिक्त सेवाएँ प्रदान करते हैं)

उपयोगिताओं में शामिल हैं:

    फ़ाइल प्रबंधक या फ़ाइल प्रबंधक

    गतिशील डेटा संपीड़न उपकरण (इसके गतिशील संपीड़न के कारण आपको डिस्क पर जानकारी की मात्रा बढ़ाने की अनुमति मिलती है)

    देखने और प्लेबैक उपकरण

    नैदानिक ​​उपकरण; नियंत्रण उपकरण आपको कंप्यूटर कॉन्फ़िगरेशन की जांच करने और कंप्यूटर उपकरणों, मुख्य रूप से हार्ड ड्राइव की कार्यक्षमता की जांच करने की अनुमति देते हैं

    संचार उपकरण (संचार कार्यक्रम) कंप्यूटरों के बीच सूचनाओं के आदान-प्रदान को व्यवस्थित करने के लिए डिज़ाइन किए गए हैं

    कंप्यूटर सुरक्षा उपकरण (बैकअप, एंटी-वायरस सॉफ़्टवेयर)।

उपयोगिताएँ सहायक कार्यों की एक संकीर्ण श्रृंखला को हल करने के लिए डिज़ाइन किए गए प्रोग्राम हैं।

कभी-कभी उपयोगिताओं को सेवा सॉफ़्टवेयर के रूप में वर्गीकृत किया जाता है

उपयोगिताओं का उपयोग इसके लिए किया जाता है:

    सेंसर संकेतक और उपकरण प्रदर्शन की निगरानी - प्रोसेसर और वीडियो एडाप्टर तापमान की निगरानी; S.M.A.R.T पढ़ना हार्ड ड्राइव्ज़;

    उपकरण मापदंडों का प्रबंधन - सीडी ड्राइव की अधिकतम रोटेशन गति को सीमित करना; पंखे की गति बदलना.

    संकेतकों की निगरानी - संदर्भात्मक अखंडता की जाँच करना; डेटा रिकॉर्डिंग की शुद्धता.

    विस्तारित क्षमताएं - डेटा को सहेजते समय डिस्क को फ़ॉर्मेट करना और/या पुनः विभाजित करना, पुनर्प्राप्ति की संभावना के बिना हटाना।

उपयोगिताओं के प्रकार:

डिस्क उपयोगिताएँ

      डीफ्रैग्मेंटर्स

      डिस्क स्कैनिंग - उन फ़ाइलों और डिस्क क्षेत्रों की खोज करना जो गलत तरीके से रिकॉर्ड किए गए थे या विभिन्न तरीकों से क्षतिग्रस्त थे और डिस्क स्थान के कुशल उपयोग के लिए उन्हें बाद में हटा दिया गया था।

      डिस्क क्लीनअप - अस्थायी फ़ाइलें, अनावश्यक फ़ाइलें हटाना, रीसायकल बिन खाली करना।

      डिस्क विभाजन एक डिस्क को तार्किक डिस्क में विभाजित करना है, जिसमें अलग-अलग फ़ाइल सिस्टम हो सकते हैं और ऑपरेटिंग सिस्टम द्वारा कई अलग-अलग डिस्क के रूप में माना जा सकता है।

      बैकअप - संपूर्ण डिस्क और व्यक्तिगत फ़ाइलों की बैकअप प्रतियां बनाना, साथ ही इन प्रतियों से पुनर्स्थापित करना।

      डिस्क संपीड़न - हार्ड ड्राइव की क्षमता बढ़ाने के लिए डिस्क पर जानकारी का संपीड़न।

      • रजिस्ट्री उपयोगिताएँ

        उपकरण निगरानी उपयोगिताएँ

        उपकरण परीक्षण

चित्र 2. कंप्यूटर की बहु-स्तरीय संरचना में ओपन सोर्स सॉफ़्टवेयर का स्थान

यह ध्यान दिया जाना चाहिए कि कुछ उपयोगिताएँ ऑपरेटिंग सिस्टम में शामिल हैं, जबकि अन्य भाग स्वायत्त रूप से कार्य करता है। अधिकांश सामान्य (सिस्टम) सॉफ़्टवेयर OS में शामिल है (चित्र 2)। कुछ सामान्य सॉफ़्टवेयर कंप्यूटर में ही शामिल होते हैं (कुछ OS प्रोग्राम और नियंत्रण परीक्षण मदरबोर्ड पर स्थापित ROM या PROM में लिखे जाते हैं)। कुछ सामान्य सॉफ़्टवेयर स्टैंड-अलोन प्रोग्राम हैं और अलग से आपूर्ति किए जाते हैं।

          अनुप्रयोग प्रक्रिया सामग्री। एप्लिकेशन प्रोग्राम का उपयोग स्वतंत्र रूप से या सॉफ़्टवेयर सिस्टम या पैकेज के भाग के रूप में किया जा सकता है। एप्लिकेशन सॉफ़्टवेयर - प्रोग्राम जो सीधे पीसी पर आवश्यक कार्य के प्रदर्शन का समर्थन करते हैं: टेक्स्ट दस्तावेज़ों को संपादित करना, चित्र या चित्र बनाना, स्प्रेडशीट बनाना आदि। एप्लिकेशन सॉफ़्टवेयर पैकेज प्रोग्रामों की एक प्रणाली है, जो उनके अनुप्रयोग के दायरे के अनुसार विभाजित होते हैं समस्या-उन्मुख, सामान्य पैकेज नियुक्तियाँ और एकीकृत पैकेज। आधुनिक एकीकृत पैकेज में अधिकतम पांच कार्यात्मक घटक होते हैं: परीक्षण और स्प्रेडशीट प्रोसेसर, डीबीएमएस, ग्राफिक संपादक, दूरसंचार उपकरण। उदाहरण के लिए, एप्लिकेशन सॉफ़्टवेयर में शामिल हैं:

    कार्यालय अनुप्रयोगों का एमएस ऑफिस सुइट

    लेखांकन प्रणाली

    वित्तीय विश्लेषणात्मक प्रणाली

    एकीकृत कार्यालय प्रबंधन पैकेज

    सीएडी - सिस्टम (कंप्यूटर एडेड डिजाइन सिस्टम)

    HTML या वेब संपादक

    ब्राउज़र - वेब पेज देखने का साधन

    ग्राफ़िक संपादक

    विशेषज्ञ प्रणालियां।

          उपकरण सॉफ्टवेयर. टूल सॉफ़्टवेयर या प्रोग्रामिंग सिस्टम एक प्रोग्रामिंग भाषा में नए प्रोग्राम के विकास को स्वचालित करने के लिए सिस्टम हैं। सबसे सामान्य स्थिति में, चयनित प्रोग्रामिंग भाषा (सिस्टम प्रोग्रामिंग भाषा) में एक प्रोग्राम बनाने के लिए, आपके पास निम्नलिखित घटकों की आवश्यकता होती है: 1. प्रोग्राम के स्रोत टेक्स्ट के साथ फ़ाइल बनाने के लिए टेक्स्ट एडिटर। 2. संकलनकर्ता या दुभाषिया। कंपाइलर प्रोग्राम का उपयोग करके स्रोत पाठ को मध्यवर्ती ऑब्जेक्ट कोड में अनुवादित किया जाता है। एक बड़े प्रोग्राम के सोर्स कोड में कई शामिल होते हैं मॉड्यूल(स्रोत फ़ाइलें)। प्रत्येक मॉड्यूल को ऑब्जेक्ट कोड के साथ एक अलग फ़ाइल में संकलित किया जाता है, जिसे फिर एक पूरे में जोड़ा जाना चाहिए।3. एक लिंक संपादक या असेंबलर जो ऑब्जेक्ट मॉड्यूल को लिंक करता है और आउटपुट - निष्पादन योग्य कोड के रूप में एक कार्यशील एप्लिकेशन उत्पन्न करता है। निष्पादन योग्य कोड एक संपूर्ण प्रोग्राम है जिसे किसी भी कंप्यूटर पर चलाया जा सकता है जिसमें वह ऑपरेटिंग सिस्टम है जिसके लिए प्रोग्राम बनाया गया था। एक नियम के रूप में, परिणामी फ़ाइल में एक्सटेंशन .EXE या .COM.4 होता है। हाल ही में, विंडोज़ एप्लिकेशन बनाने के उद्देश्य से विज़ुअल प्रोग्रामिंग विधियां (स्क्रिप्टिंग भाषाओं का उपयोग करके) व्यापक हो गई हैं। यह प्रक्रिया तीव्र डिज़ाइन वातावरण में स्वचालित है। इस मामले में, तैयार दृश्य घटकों का उपयोग किया जाता है, जिन्हें विशेष संपादकों का उपयोग करके कॉन्फ़िगर किया जाता है। विज़ुअल डिज़ाइन के लिए सबसे लोकप्रिय संपादक (विज़ुअल टूल का उपयोग करने वाले प्रोग्राम प्रोग्रामिंग सिस्टम):

    बोर्लैंड डेल्फ़ी - लगभग किसी भी एप्लिकेशन प्रोग्रामिंग समस्या को हल करने के लिए डिज़ाइन किया गया

    बोरलैंड सी++ बिल्डर डॉस और विंडोज एप्लिकेशन विकसित करने के लिए एक उत्कृष्ट उपकरण है

    माइक्रोसॉफ्ट विज़ुअल बेसिक विंडोज़ प्रोग्राम बनाने के लिए एक लोकप्रिय टूल है

    Microsoft Visual C++ - यह टूल आपको Microsoft Windows जैसे OS वातावरण में चलने वाले किसी भी एप्लिकेशन को विकसित करने की अनुमति देता है

नियंत्रण प्रश्न:

    ऑपरेटिंग सिस्टम को परिभाषित करें.

    किस सॉफ्टवेयर को सिस्टम सॉफ्टवेयर माना जाता है?

    यूटिलिटी सॉफ़्टवेयर का नाम बताइये।

    किस सॉफ्टवेयर को एप्लीकेशन सॉफ्टवेयर माना जाता है?

    सॉफ्टवेयर का उद्देश्य क्या है?

    कार्यक्रमों के मुख्य वर्ग क्या हैं? प्रत्येक कक्षा में उनके उद्देश्य के अनुसार कार्यक्रमों के उदाहरण दीजिए।

कार्यक्रम के संरचनात्मक और कार्यात्मक आरेख

एक संरचनात्मक आरेख किसी वस्तु के प्राथमिक लिंक और उनके बीच के कनेक्शन का एक सेट है, जो ग्राफिकल मॉडल के प्रकारों में से एक है। एक प्राथमिक लिंक को किसी वस्तु, नियंत्रण प्रणाली आदि के एक भाग के रूप में समझा जाता है, जो एक प्राथमिक कार्य को कार्यान्वित करता है। चित्र में. 2.1 विकसित कार्यक्रम का ब्लॉक आरेख दिखाता है।

चित्र 2.1 - प्रोग्राम ब्लॉक आरेख

एक कार्यात्मक आरेख एक दस्तावेज़ है जो किसी उत्पाद (इंस्टॉलेशन) या संपूर्ण उत्पाद के व्यक्तिगत कार्यात्मक सर्किट में होने वाली प्रक्रियाओं की व्याख्या करता है। एक कार्यात्मक आरेख एक उपकरण के अभिन्न कार्यात्मक ब्लॉक और सर्किट में होने वाली कुछ प्रकार की प्रक्रियाओं का स्पष्टीकरण है। चित्र 2.2 विकसित कार्यक्रम का कार्यात्मक आरेख दिखाता है।

चित्र 2.2 - कार्यक्रम का कार्यात्मक आरेख

प्रक्रियाओं, कार्यों और मॉड्यूल का विवरण

मॉड्यूल घोषणा:

प्रत्येक स्रोत फ़ाइल में एक मॉड्यूल घोषणा होनी चाहिए। यूनिट शब्द एक कीवर्ड है, इसलिए इसे लोअरकेस में लिखा जाना चाहिए। मॉड्यूल नाम में अपरकेस और लोअरकेस दोनों अक्षर हो सकते हैं और यह इस फ़ाइल के लिए ऑपरेटिंग सिस्टम द्वारा उपयोग किए गए नाम के समान होना चाहिए।

डेल्फ़ी भाषा के मानक मॉड्यूल। डेल्फ़ी वातावरण में मॉड्यूल का एक उत्कृष्ट सेट शामिल है, जिसकी क्षमताएं सबसे तेज़ प्रोग्रामर को भी संतुष्ट करेंगी। सभी मॉड्यूल को दो समूहों में विभाजित किया जा सकता है: सिस्टम मॉड्यूल और विज़ुअल घटक मॉड्यूल।

सिस्टम मॉड्यूल में सिस्टम, SysUtils, ShareMem, Math शामिल हैं। उनमें प्रोग्राम, स्थिरांक, चर, प्रक्रियाओं और कार्यों में सबसे अधिक उपयोग किए जाने वाले डेटा प्रकार होते हैं। सिस्टम मॉड्यूल डेल्फ़ी पर्यावरण का हृदय है; इसमें मौजूद सबरूटीन्स सिस्टम के अन्य सभी मॉड्यूल के संचालन को सुनिश्चित करते हैं। सिस्टम मॉड्यूल स्वचालित रूप से प्रत्येक प्रोग्राम में शामिल होता है और इसे उपयोग विवरण में निर्दिष्ट करने की आवश्यकता नहीं होती है।

विज़ुअल कंपोनेंट मॉड्यूल (वीसीएल - विज़ुअल कंपोनेंट लाइब्रेरी) का उपयोग पूर्ण-विशेषताओं वाले जीयूआई अनुप्रयोगों के दृश्य विकास के लिए किया जाता है - ग्राफिकल यूजर इंटरफेस (ग्राफिकल यूजर इंटरफेस) वाले एप्लिकेशन। ये मॉड्यूल सभी प्रकार के उपयोगकर्ता इंटरफ़ेस तत्वों के साथ एक उच्च स्तरीय ऑब्जेक्ट-ओरिएंटेड लाइब्रेरी का प्रतिनिधित्व करते हैं: बटन, लेबल, मेनू, पैनल इत्यादि। इसके अलावा, इस लाइब्रेरी के मॉड्यूल में डेटाबेस तक पहुंचने के सरल और कुशल साधन शामिल हैं। जब घटकों को प्रपत्र पर रखा जाता है तो ये मॉड्यूल स्वचालित रूप से कनेक्ट हो जाते हैं।

प्रक्रियाओं का विवरण:

यह प्रक्रिया शीर्षक पृष्ठ और पेज को बंद कर देती है और प्रोग्राम से बाहर निकल जाती है।

प्रक्रिया TForml.Button2Click (प्रेषक: TObject);

यह प्रक्रिया प्रोग्राम का मुख्य मेनू खोलती है और शीर्षक पृष्ठ को स्क्रीन से हटा देती है।

प्रक्रिया TForm2.Button1Click (प्रेषक: TObject);

यह प्रक्रिया परिवहन समस्या को हल करने के लिए विधि के विकल्प के साथ एक विंडो खोलती है और स्क्रीन से मेनू विंडो को हटा देती है।

यह प्रक्रिया विकसित प्रोग्राम के बारे में जानकारी वाली एक विंडो खोलती है और मेनू विंडो को स्क्रीन से हटा देती है।

यह प्रक्रिया प्रोग्राम के लिए सहायता जानकारी के साथ एक विंडो खोलती है, जिससे उपयोगकर्ता का काम आसान हो जाता है और मेनू विंडो हटा दी जाती है।

यह प्रक्रिया डेवलपर के बारे में एक विंडो खोलती है, और मेनू विंडो हटा देती है।

प्रक्रिया TForm2.Button5Click (प्रेषक: TObject);

यह प्रक्रिया मेनू विंडो को बंद कर देती है और प्रोग्राम से बाहर निकल जाती है।

प्रक्रिया TForm3.Button1Click (प्रेषक: TObject);

यह प्रक्रिया मुख्य मेनू से बाहर निकलती है और परिवहन समस्या को हल करने के लिए विधि के विकल्प के साथ विंडो बंद कर देती है:

प्रक्रिया TForm3.Button3Click (प्रेषक: TObject);

यह प्रक्रिया तीन तरीकों का उपयोग करके परिवहन समस्या के समाधान के साथ विंडो को बंद कर देती है और न्यूनतम लागत विधि का उपयोग करके समस्या के समाधान के साथ एक फॉर्म प्रदर्शित करती है:

यह प्रक्रिया तीन तरीकों का उपयोग करके परिवहन समस्या के समाधान के साथ विंडो को बंद कर देती है और दोहरी प्राथमिकता विधि का उपयोग करके समस्या के समाधान के साथ एक फॉर्म प्रदर्शित करती है:

प्रक्रिया TForm2.Button2Click (प्रेषक: TObject);

प्रक्रिया TForm2.Button3Click (प्रेषक: TObject);

प्रक्रिया TForm2.Button4Click (प्रेषक: TObject);

ये प्रक्रियाएं उपयोगकर्ता को मुख्य मेनू से प्रोग्राम के किसी भी आइटम पर जाने की अनुमति देती हैं: "समाधान फॉर्म", "उपयोगकर्ता गाइड", "डेवलपर जानकारी", "बाहर निकलें"।

प्रक्रिया चरण-दर-चरण;

यह प्रोग्राम में चरण-दर-चरण गणना करने की एक प्रक्रिया है, आप तालिका भरने के प्रत्येक चरण को ट्रैक कर सकते हैं। एक गणना करने के बाद, प्रक्रिया गणना को बाधित करती है और उपयोगकर्ता से आदेशों की प्रतीक्षा करती है।

प्रक्रिया TForm4.Label2Click(प्रेषक: TObject);

प्रक्रिया TForm4.Label3Click(प्रेषक: TObject);

प्रक्रिया TForm4.Label4Click(प्रेषक: TObject);

प्रक्रिया TForm4.Label5Click(प्रेषक: TObject);

ये प्रक्रियाएं चयनित मेनू आइटम के आधार पर मेमो टेक्स्ट फ़ील्ड को टेक्स्ट दस्तावेज़ की सामग्री के साथ लोड करती हैं। टेक्स्ट दस्तावेज़ों में एप्लिकेशन के उपयोग के बारे में जानकारी होती है।

प्रक्रिया TForm1.Button8Click(प्रेषक: TObject);

यह प्रक्रिया सूत्रों का उपयोग करके गणना करती है, दर्ज किए गए मानों को प्रतिस्थापित करती है, और अंत में परिणाम को एक चर में लिखती है।

प्रक्रिया TForm1.Button9Click(प्रेषक: TObject);

यह प्रक्रिया उत्तर को टेक्स्ट फ़ील्ड में प्रदर्शित करती है।

प्रक्रिया TForm1.Button2Click (प्रेषक: TObject);

यह प्रक्रिया पाठ्यक्रम प्रोजेक्ट के असाइनमेंट के अनुसार इनपुट फ़ील्ड को प्रारंभिक डेटा से भरती है।

प्रक्रिया TForm3.Button4Click (प्रेषक: TObject);

प्रक्रिया TForm4.Button1Click(प्रेषक: TObject);

ये प्रक्रियाएं विंडो बंद कर देती हैं और मेनू आइटम चयन के साथ एक फॉर्म प्रदर्शित करती हैं।

प्रक्रिया सफाई;

यह प्रक्रिया इनपुट और आउटपुट फ़ील्ड को साफ़ करती है और वेरिएबल्स को उनके द्वारा रखे गए मान से मुक्त करती है।


प्रोग्राम ब्लॉक डायग्राम (आर्किटेक्चर) का विकास निम्नलिखित कारणों से सॉफ्टवेयर विकास प्रक्रिया में सबसे महत्वपूर्ण चरणों में से एक है:

  • आर्किटेक्चर के गलत चुनाव से भविष्य में पूरे प्रोजेक्ट के विफल होने का खतरा होता है;

  • यह चरण संपूर्ण विकास प्रक्रिया के लिए बुनियादी है;

  • एक सुविचारित आर्किटेक्चर सॉफ़्टवेयर उत्पाद को संशोधित करना आसान बनाता है यदि उसके लिए आवश्यकताएँ बदलती हैं।
आर्किटेक्चर को प्रोग्राम घटकों के एक सेट के साथ-साथ उनके बीच सूचना विनिमय को व्यवस्थित करने के कनेक्शन और तरीकों के रूप में समझा जाता है। किसी सिस्टम का संरचनात्मक आरेख विकसित करते समय जिस पहले कार्य को हल करने की आवश्यकता होती है, वह इसके घटक घटकों की पहचान करने का कार्य है।

सिस्टम के लिए आवश्यकताओं के विश्लेषण के आधार पर, सभी कार्यों का एक सेट निर्धारित किया जाता है जिसका प्रोग्राम को समर्थन करना चाहिए। इसके बाद, प्राप्त कार्यों को तार्किक रूप से परस्पर जुड़े समूहों में जोड़ा जाता है। इनमें से प्रत्येक समूह सॉफ़्टवेयर सिस्टम के घटकों में से एक बन सकता है। आपको इस तथ्य के लिए तैयार रहना चाहिए कि घटकों के सेट का पहला संस्करण पूरा नहीं होगा। फीचर विश्लेषण प्रक्रिया के दौरान और वास्तुशिल्प डिजाइन के शुरुआती चरणों में, अतिरिक्त सुविधाओं की पहचान की जा सकती है जिन्हें विकसित किए जा रहे कार्यक्रम में शामिल करने की आवश्यकता है। अधिकांश भाग के लिए, सिस्टम को अक्षुण्ण और परिचालन स्थिति में बनाए रखने के लिए तकनीकी प्रक्रियाओं को पूरा करने के लिए ये कार्य आवश्यक होंगे। यह मान लेना बिल्कुल स्वाभाविक है कि इन कार्यात्मक विशेषताओं के बारे में सॉफ्टवेयर सिस्टम के ग्राहक और विकास के पहले चरण में डेवलपर्स को जानकारी नहीं हो सकती है।

सबसे पहले, प्रोग्राम आर्किटेक्चर में सिस्टम का सामान्य विवरण शामिल होना चाहिए। इस तरह के विवरण के बिना, कई छोटे विवरणों या कम से कम एक दर्जन अलग-अलग वर्गों से एक सुसंगत चित्र बनाना काफी कठिन है। वास्तुकला में इस बात का सबूत शामिल होना चाहिए कि इसके विकास के दौरान वैकल्पिक विकल्पों पर विचार किया गया था और अंतिम सिस्टम संगठन की पसंद को उचित ठहराया जाना चाहिए।

वास्तुकला को प्रत्येक घटक की जिम्मेदारियों को स्पष्ट रूप से परिभाषित करना चाहिए। एक घटक के पास जिम्मेदारी का एक क्षेत्र होना चाहिए और अन्य घटकों की जिम्मेदारी के क्षेत्रों के बारे में जितना संभव हो उतना कम जानना चाहिए। अन्य घटकों के बारे में जानकारी घटकों की मात्रा को कम करके, आप एप्लिकेशन डिज़ाइन जानकारी को अलग-अलग घटकों में आसानी से स्थानीयकृत कर सकते हैं।

आर्किटेक्चर को प्रोग्राम घटकों के बीच संचार के नियमों को स्पष्ट रूप से परिभाषित करना चाहिए और यह वर्णन करना चाहिए कि किसी दिए गए घटक में कौन से अन्य घटक सीधे उपयोग कर सकते हैं, कौन से अप्रत्यक्ष रूप से, और कौन से उसे बिल्कुल भी उपयोग नहीं करना चाहिए।

उपयोगकर्ता इंटरफ़ेस अक्सर आवश्यकताओं के चरण के दौरान डिज़ाइन किया जाता है। यदि यह मामला नहीं है, तो इसे आर्किटेक्चर डिज़ाइन चरण के दौरान निर्धारित किया जाना चाहिए। आर्किटेक्चर को वेब पेज प्रारूप, ग्राफिकल इंटरफ़ेस (जीयूआई) आदि के मुख्य तत्वों का वर्णन करना चाहिए। इंटरफ़ेस की उपयोगिता अंततः किसी प्रोग्राम की लोकप्रियता या विफलता को निर्धारित कर सकती है।

प्रोग्राम का आर्किटेक्चर मॉड्यूलर है ताकि प्रोग्राम के मूल तर्क को प्रभावित किए बिना ग्राफिकल इंटरफ़ेस को बदला जा सके।

छात्र सर्वेक्षण प्रश्नावली को संसाधित करने के कार्यक्रम को उपयोगकर्ताओं के लिए विभिन्न कार्यों और पहुंच स्तरों के साथ दो भागों में विभाजित किया जा सकता है:


  • छात्र सर्वेक्षण प्रणाली;

  • सर्वेक्षण परिणामों के प्रसंस्करण के लिए प्रणाली;

  • नियंत्रण प्रणाली।
सभी भाग एक सामान्य डेटाबेस द्वारा एक ही प्रोग्राम में जुड़े हुए हैं।



चित्र 2.1. - सिस्टम संरचना


सर्वेक्षण प्रणाली में निम्नलिखित कार्य शामिल हैं:

  • प्रश्नावली से एक प्रश्न जारी करना;

  • दर्ज किए गए डेटा के प्रकार और शुद्धता की स्वचालित जाँच;

  • डेटाबेस में डेटा सहेजना।
सर्वेक्षण परिणामों को संसाधित करने की प्रणाली आपको इसकी अनुमति देती है:

  • सर्वेक्षण रिपोर्ट प्रदर्शित या प्रिंट करें;

  • किसी विशिष्ट छात्र के सर्वेक्षण के बारे में जानकारी देखें;

  • वर्तमान और पिछले सर्वेक्षणों के परिणामों की समान प्रश्नों से तुलना करें।
नियंत्रण प्रणाली अनुमति देती है:

  • सर्वेक्षण के संचालन को नियंत्रित करें;

  • डेटा प्रबंधित करें - जोड़ें, हटाएं और बदलें;
बदले में, प्रत्येक सिस्टम को उस वातावरण के आधार पर दो उपप्रणालियों में विभाजित किया जा सकता है जिसमें वे चलते हैं:

  • सर्वर भाग, PHP प्रोग्रामिंग भाषा में लिखा गया है और सर्वर पर निष्पादित किया गया है;

  • क्लाइंट भाग, jQuery लाइब्रेरी का उपयोग करके HTML मार्कअप भाषा और जावास्क्रिप्ट प्रोग्रामिंग भाषा में लिखा गया है और उपयोगकर्ता के ब्राउज़र में निष्पादित किया गया है।
साथ
प्रोग्राम का सर्वर भाग इसकी संरचना में एमवीसी (मॉडल-व्यू-कंट्रोलर) या मॉडल-व्यू-कंट्रोलर आर्किटेक्चर से मेल खाता है। एमवीसी एक सॉफ्टवेयर आर्किटेक्चर है जिसमें एप्लिकेशन के डेटा मॉडल, यूजर इंटरफेस और कंट्रोल लॉजिक को तीन अलग-अलग घटकों में विभाजित किया जाता है ताकि एक घटक में संशोधन से अन्य घटकों पर कम से कम प्रभाव पड़े।
चित्र 2.2. - मॉडल-व्यू-कंट्रोलर आर्किटेक्चर
यह दृष्टिकोण आपको डेटा, प्रस्तुति और उपयोगकर्ता क्रियाओं के प्रसंस्करण को तीन अलग-अलग घटकों में अलग करने की अनुमति देता है।

  • नमूना(नमूना) -उपयोगकर्ता से प्राप्त डेटा के आधार पर किसी चीज़ की सीधे गणना करने के लिए जिम्मेदार एक मॉड्यूल। इस मॉड्यूल द्वारा प्राप्त परिणाम नियंत्रक को भेजा जाना चाहिए, और इसमें प्रत्यक्ष आउटपुट से संबंधित कुछ भी नहीं होना चाहिए (अर्थात, इसे सिस्टम के आंतरिक प्रारूप में प्रस्तुत किया जाना चाहिए)। मुख्य लक्ष्य मॉडल को अन्य हिस्सों से पूरी तरह से स्वतंत्र बनाना है और उनके अस्तित्व के बारे में लगभग कुछ भी नहीं जानना है, जो मॉडल को छूने के बिना नियंत्रक और मॉडल के दृश्य दोनों को बदलने की अनुमति देगा, और यहां तक ​​कि कई उदाहरणों के कामकाज की अनुमति भी देगा। एक ही समय में एक ही मॉडल के साथ दृश्य और नियंत्रक। परिणामस्वरूप, किसी भी परिस्थिति में किसी मॉडल में दृश्य या नियंत्रक वस्तुओं के संदर्भ नहीं हो सकते हैं।

  • देखना- सूचना आउटपुट मॉड्यूल। दृश्य की जिम्मेदारियों में मॉडल से प्राप्त डेटा को प्रदर्शित करना शामिल है। आम तौर पर, दृश्य के पास मॉडल तक निःशुल्क पहुंच होती है और वह उससे डेटा ले सकता है, लेकिन यह केवल-पढ़ने के लिए पहुंच है; दृश्य को मॉडल में कुछ भी बदलने या यहां तक ​​कि केवल उन तरीकों को कॉल करने से प्रतिबंधित किया जाता है जो इसकी आंतरिक स्थिति में परिवर्तन का कारण बनते हैं। नियंत्रक के साथ बातचीत करने के लिए, एक दृश्य आम तौर पर नियंत्रक को ज्ञात एक इंटरफ़ेस लागू करता है, जिससे दृश्यों को स्वतंत्र रूप से बदला जा सकता है और प्रति नियंत्रक कई दृश्य हो सकते हैं।

  • नियंत्रक- डेटा इनपुट और आउटपुट नियंत्रण मॉड्यूल। नियंत्रक के कार्यों में बाहरी घटनाओं पर प्रतिक्रिया देना और उसमें अंतर्निहित तर्क के अनुसार मॉडल और/या दृश्य को बदलना शामिल है। एक नियंत्रक स्थिति के आधार पर कई दृश्यों के साथ काम कर सकता है, एक निश्चित (पूर्व-ज्ञात) इंटरफ़ेस के माध्यम से उनके साथ बातचीत कर सकता है जिसे ये दृश्य लागू करते हैं। एक महत्वपूर्ण बारीकियां - एमवीसी के क्लासिक संस्करण में, नियंत्रक मॉडल से दृश्य में डेटा स्थानांतरित नहीं करता है।

    नियंत्रक उपयोगकर्ता से डेटा प्राप्त करता है और इसे मॉडल को भेजता है। इसके अलावा, यह मॉडल से संदेश प्राप्त करता है और उन्हें दृश्य में भेजता है। यह ध्यान रखना महत्वपूर्ण है कि दृश्य और नियंत्रक दोनों मॉडल पर निर्भर हैं। हालाँकि, मॉडल नियंत्रक या व्यवहार पर निर्भर नहीं करता है। यह ऐसे विभाजन के प्रमुख लाभों में से एक है। यह आपको दृश्य प्रतिनिधित्व से स्वतंत्र एक मॉडल बनाने की अनुमति देता है, साथ ही एक मॉडल के लिए कई अलग-अलग प्रतिनिधित्व भी बनाता है।
पारंपरिक मॉडल की तुलना में एमवीसी आर्किटेक्चर के फायदे:

  • सिस्टम पारदर्शिता;

  • सिस्टम में प्रवेश का एकल बिंदु;

  • कोड का पुन: उपयोग;;

  • तेजी से विकास;

  • तैयार समाधानों की उपलब्धता;

  • समर्थन में आसानी;

  • परिवर्तन करना आसान.
इस प्रकार, एमवीसी वास्तुकला का उपयोग विभाग के छात्रों के लिए सर्वेक्षण प्रश्नावली के प्रसंस्करण के लिए एक कार्यक्रम के डिजाइन और विकास में ठोस लाभ प्रदान करता है, जिसका विकास की गति और अंतिम परिणाम की गुणवत्ता दोनों पर सकारात्मक प्रभाव पड़ता है।

2. प्रोग्राम डेटाबेस संरचना का विकास

डेटाबेस संरचना का संगठन निम्नलिखित विचारों के आधार पर बनता है:

  • वर्णित वस्तु की पर्याप्तता - एक वैचारिक और तार्किक मॉडल के स्तर पर;

  • लेखांकन और डेटा विश्लेषण के लिए उपयोग में आसानी - तथाकथित भौतिक मॉडल के स्तर पर।
डेटा प्रस्तुति मॉडल के अनुसार, मुख्य हैं पदानुक्रमित, नेटवर्क और संबंधपरक मॉडल; तदनुसार, उपरोक्त प्रत्येक डेटाबेस के साथ काम करने के लिए, वे अपने स्वयं के डीबीएमएस का उपयोग करते हैं।

इस मामले में, रिलेशनल डेटा मॉडल सबसे उपयुक्त है, क्योंकि सभी जानकारी आसानी से तालिकाओं के रूप में प्रस्तुत की जा सकती है। रिलेशनल डेटा मॉडल एक तार्किक डेटा मॉडल है जो रिलेशनल डेटाबेस के संरचनात्मक पहलू, अखंडता पहलू और डेटा प्रोसेसिंग पहलू का वर्णन करता है।

संरचनात्मक पहलू- डेटाबेस में डेटा रिश्तों का एक समूह है।

सत्यनिष्ठा पहलू- रिश्ते कुछ अखंडता शर्तों को पूरा करते हैं।

प्रसंस्करण पहलू- संबंध हेरफेर ऑपरेटर समर्थित हैं।

डेटाबेस डिज़ाइन का एक महत्वपूर्ण पहलू सामान्यीकरण है - डेटाबेस को ऐसे रूप में परिवर्तित करने की प्रक्रिया जो सामान्य रूपों से मेल खाती है। सामान्यीकरण आपके डेटाबेस को डेटा विसंगतियों नामक तार्किक और संरचनात्मक समस्याओं से बचाने में मदद करता है। उदाहरण के लिए, जब किसी तालिका में कई समान रिकॉर्ड होते हैं, तो तालिका को अद्यतन करते समय डेटा अखंडता उल्लंघन का जोखिम होता है। एक तालिका जो सामान्यीकरण से गुजर चुकी है, ऐसी समस्याओं के प्रति कम संवेदनशील होती है, क्योंकि इसकी संरचना में डेटा के बीच संबंधों को परिभाषित करना शामिल है, जो डुप्लिकेट जानकारी वाले रिकॉर्ड की आवश्यकता को समाप्त करता है।

मुफ़्त डेटाबेस प्रबंधन प्रणाली MySQL को DBMS के रूप में चुना गया था। बड़ी संख्या में तालिका प्रकारों के समर्थन से MySQL DBMS का लचीलापन सुनिश्चित होता है: उपयोगकर्ता MyISAM तालिकाओं को चुन सकते हैं जो पूर्ण-पाठ खोज का समर्थन करती हैं और InnoDB तालिकाएँ जो व्यक्तिगत रिकॉर्ड स्तर पर लेनदेन का समर्थन करती हैं। ओपन आर्किटेक्चर और जीपीएल लाइसेंसिंग के लिए धन्यवाद (जीएनयू जनरल पब्लिक लाइसेंस - एक मुफ्त सॉफ्टवेयर लाइसेंस, जिसका उद्देश्य उपयोगकर्ता को कार्यक्रमों की प्रतिलिपि बनाने, संशोधित करने और वितरित करने के अधिकार प्रदान करना है, और यह भी सुनिश्चित करना है कि सभी व्युत्पन्न कार्यक्रमों के उपयोगकर्ताओं को प्राप्त हो उपरोक्त अधिकार), MySQL DBMS में लगातार नए प्रकार की तालिकाएँ दिखाई देती हैं।

MySQL DBMS का एक महत्वपूर्ण लाभ यह है कि इसे AIX, FreeBSD, HP-UX, GNU/Linux, Mac OS ध्यान दें कि MySQL AB न केवल DBMS स्रोत कोड को मुफ्त डाउनलोड प्रदान करता है, बल्कि विशिष्ट ऑपरेटिंग सिस्टम के लिए संकलित और अनुकूलित तैयार निष्पादन योग्य मॉड्यूल भी प्रदान करता है।

MySQL के पास डेल्फ़ी, C, C++, Java, Perl, PHP, Python और Ruby जैसी भाषाओं के लिए एक एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (API) है, .NET प्लेटफ़ॉर्म भाषाओं के लिए लाइब्रेरी है, और ODBC ड्राइवर (ओपन) के माध्यम से ODBC के लिए समर्थन भी प्रदान करता है। डेटाबेस कनेक्टिविटी डेटाबेस तक पहुँचने के लिए एक प्रोग्राम इंटरफ़ेस है) MyODBC।

MyISAM प्रकार को मुख्य तालिका प्रकार के रूप में चुना गया था। MyISAM तालिकाओं को उन वेब अनुप्रयोगों के संयोजन में उपयोग के लिए आदर्श रूप से अनुकूलित किया गया है जहां पढ़ी जाने वाली क्वेरीज़ प्रबल होती हैं। MyISAM जैसी तालिकाएँ SELECT क्वेरीज़ पर बहुत अच्छे प्रदर्शन परिणाम दिखाती हैं। इसका मुख्य कारण लेनदेन और विदेशी कुंजी के लिए समर्थन की कमी है। हालाँकि, रिकॉर्ड को संशोधित और जोड़ते समय, पूरी तालिका थोड़ी देर के लिए लॉक हो जाती है, जिससे भारी भार के तहत गंभीर देरी हो सकती है। लेकिन सर्वेक्षण प्रश्नावली का विश्लेषण करने के कार्यक्रम के मामले में, यह कोई गंभीर समस्या नहीं है, क्योंकि सिस्टम पर उच्च भार की योजना नहीं बनाई गई है।

MyISAM जैसी तालिकाओं का एक अन्य लाभ प्लेटफ़ॉर्म स्वतंत्रता है। टेबल फ़ाइलों को बिना किसी रूपांतरण के विभिन्न आर्किटेक्चर और विभिन्न ऑपरेटिंग सिस्टम के कंप्यूटरों के बीच ले जाया जा सकता है।

MyISAM तालिकाओं में स्थिर, गतिशील या संपीड़ित रिकॉर्ड हो सकते हैं। निश्चित और गतिशील प्रारूप के बीच का चुनाव कॉलम परिभाषाओं द्वारा निर्धारित होता है।

डेटाबेस की संरचना चित्र 2.4 में दिखाई गई है।

आर

चित्र 2.3. - डेटाबेस संरचना


डेटाबेस में व्यवस्थित तालिकाओं के बीच संबंध आपको डेटा को कैस्केड हटाने और अपडेट करने की अनुमति देते हैं। लिंक तालिकाओं के उपयोग से डेटा अतिरेक को न्यूनतम तक कम करना संभव हो गया।

आईटी_स्टूडेंट्स तालिका में सर्वेक्षण पूरा करने वाले छात्रों के बारे में डेटा शामिल है।

तालिका 2.1 - "it_students" डेटा तालिका


मैदान

प्रकार

लंबाई

विवरण

पहचान

न्यूमेरिकल

11

अनुक्रमणिका

संख्या

न्यूमेरिकल

11

विद्यार्थी आईडी नंबर

नाम

प्रतीकात्मक

100

नाम

दूसरा नाम

प्रतीकात्मक

100

उपनाम

उपनाम

प्रतीकात्मक

100

उपनाम

जन्म

तारीख

-

जन्म की तारीख

वर्ष_पोस्टअपl

वर्ष

-

प्रवेश का वर्ष

पता

प्रतीकात्मक

500

पता

फ़ोन_एच

प्रतीकात्मक

15

घर का फोन

फ़ोन_एम

प्रतीकात्मक

15

चल दूरभाष

मेल

प्रतीकात्मक

250

मेल पता

आईसीक्यू

न्यूमेरिकल

10

आईसीक्यू संख्या

it_answers_var तालिका में सर्वेक्षण प्रश्नों के उत्तर देने के लिए विकल्प हैं।

तालिका 2.2 - डेटा तालिका "it_answers_var"

it_questions तालिका में सर्वेक्षण प्रश्न हैं।

तालिका 2.3 - "it_questions" डेटा तालिका

it_tests_cfg तालिका सर्वेक्षण प्रश्नों को एक विशिष्ट प्रश्नावली से जोड़ती है।

तालिका 2.4 - डेटा तालिका "it_tests_cfg"

it_tests तालिका में सभी प्रश्नावलियों और सर्वेक्षणों की तारीखों के बारे में डेटा शामिल है।

तालिका 2.5 - "it_tests" डेटा तालिका

it_text_answers तालिका में मैन्युअल रूप से दर्ज किए गए छात्र उत्तरों के बारे में डेटा शामिल है।

तालिका 2.6 - डेटा तालिका "it_text_answers"

it_students_answers तालिका में छात्रों के उत्तरों के बारे में डेटा शामिल है।

तालिका 2.6 - डेटा तालिका "it_students_answers"

3.डेटाबेस सूचना प्रवाह मॉडल का विकास

चूंकि छात्र सर्वेक्षण प्रश्नावली का विश्लेषण करने का कार्यक्रम एमवीसी सिद्धांत पर बनाया गया है, सूचना प्रवाह को निम्नानुसार दर्शाया जा सकता है। जब ब्राउज़र को वेब सर्वर पर भेजने वाले उपयोगकर्ता से अनुरोध प्राप्त होता है, तो नियंत्रक, प्रोग्राम किए गए एल्गोरिदम का पालन करते हुए, प्राप्त अनुरोध को योग्य बनाता है, संशोधित करता है और इसे मॉडल पर प्रसारित करता है। मॉडल, जो नियंत्रक और DBMS के बीच की कड़ी है, अनुरोध की व्याख्या करता है और MySQL DBMS को उचित कॉल करता है, और परिणाम नियंत्रक को लौटाता है।

उल्लेखनीय है कि नियंत्रक के लिए यह छिपा रहता है कि वह किस प्रकार या डीबीएमएस के कार्यान्वयन के साथ काम करता है; डेटाबेस में सभी कॉल मॉडल के माध्यम से होती हैं, जिसका मुख्य कार्य डेटा के साथ काम को अमूर्त करना है। डेटाबेस के बजाय, आप टेक्स्ट या XML फ़ाइल का भी उपयोग कर सकते हैं; इससे नियंत्रक पर कोई फर्क नहीं पड़ेगा। समानांतर में, नियंत्रक दृश्य घटक को एक अनुरोध भेजता है, जो अंतिम टेम्पलेट बनाता है और इसे नियंत्रक को लौटाता है। यह भी संभव है कि डेटा का आदान-प्रदान सीधे मॉडल और दृश्य के बीच होता है। नियंत्रक डेटाबेस और दृश्य टेम्पलेट से चयन को जोड़ता है और इसे उपयोगकर्ता के ब्राउज़र में भेजता है।



चित्र 2.4. - एमवीसी आर्किटेक्चर की सूचना प्रवाह की योजना

4. एल्गोरिथम समर्थन का विकास

सभी प्रोग्राम घटकों के लिए एल्गोरिथम समर्थन में महत्वपूर्ण अंतर हैं, क्योंकि वे अलग-अलग कार्यक्षमता रखते हैं।

जब कोई छात्र पहली बार सर्वेक्षण प्रणाली में लॉग इन करता है, तो एक नया सत्र आईडी बनाया जाता है। एक सत्र, या सत्र, सर्वर को एक विशेष संख्या का उपयोग करके उपयोगकर्ता की पहचान करने की अनुमति देता है जो अद्वितीय होता है और जब उपयोगकर्ता सर्वर के साथ इंटरैक्ट करता है तो उसे असाइन किया जाता है। इसके अतिरिक्त, सत्र आपको उस उपयोगकर्ता के लिए वेरिएबल्स को बाइंड करने और उन वेरिएबल्स को सर्वर पर संग्रहीत करने की अनुमति देते हैं। दूसरे शब्दों में, सत्र आपको सभी प्रोग्राम घटकों के लिए वैरिएबल को वैश्विक बनाने की अनुमति देते हैं। इस प्रकार, सर्वेक्षण प्रणाली स्पष्ट रूप से यह निर्धारित कर सकती है कि प्रोग्राम के साथ काम करने वाले किस उपयोगकर्ता से कुछ डेटा आया था।

डी
इसके बाद, छात्र सर्वेक्षण प्रश्नों की एक श्रृंखला का उत्तर देता है और सर्वेक्षण पूरा करने के बाद ही, सारा डेटा डेटाबेस में सहेजा जाता है। सर्वेक्षण प्रणाली के संचालन के लिए एल्गोरिदम चित्र 2.5 में दिखाया गया है।

चित्र 2.5. - सर्वेक्षण प्रणाली के संचालन के लिए एल्गोरिदम

किसी वेब एप्लिकेशन के लिए सबसे महत्वपूर्ण सुरक्षा बिंदुओं में से एक आने वाले सभी डेटा की जांच करना है, इसलिए आपको "खतरनाक" डेटा की उपस्थिति के लिए हमेशा उपयोगकर्ता द्वारा खोज फ़ॉर्म में दर्ज किए गए डेटा, पंजीकरण फ़ील्ड भरने आदि की जांच करनी चाहिए। यह दुर्भावनापूर्ण जावास्क्रिप्ट कोड, PHP या PERL कमांड, या (सबसे खतरनाक रूप से) सर्वर पर कमांड हो सकता है।

आपको हमेशा याद रखना चाहिए कि कोई भी उपयोगकर्ता असुरक्षित वेब एप्लिकेशन के लिए खतरा है, इसलिए उपयोगकर्ता से आने वाले अनुरोधों और चर की जांच करना हमेशा उचित होता है।


  • POST और GET वेरिएबल्स और सुपरग्लोबल सरणियों का विश्लेषण;

  • चरों का पृथक्करण;

  • स्ट्रिंग चर फ़िल्टर करना।
प्रोग्राम की शुरुआत में ही आने वाले वेरिएबल्स की जांच करना अनिवार्य है, जिससे उपयोगकर्ताओं के असत्यापित, संभावित खतरनाक डेटा को डेटाबेस में फ़ंक्शंस और क्वेरीज़ के साथ काम करने से रोका जा सके। इस प्रकार, सुरक्षा के लिए आवश्यक सभी कार्य एक विशिष्ट स्थान या फ़ाइल में स्थित होंगे। छात्र सर्वेक्षण प्रश्नावली को संसाधित करने के कार्यक्रम के मामले में, डेटा फ़िल्टरिंग स्वचालित मोड में कोडइग्निटर ढांचे के स्तर पर की जाती है, क्योंकि लाइन $config["global_xss_filtering"] = सत्य।

किसी प्रोग्राम में प्रत्येक वेरिएबल का डिज़ाइन चरण में पहले से ही अपना प्रकार होना चाहिए, चाहे वह एक संख्या हो या एक स्ट्रिंग। यह समस्या कमजोर या अनुपस्थित टाइपिंग वाली प्रोग्रामिंग भाषाओं के लिए विशेष रूप से तीव्र है, जिसमें PHP और JavaScript शामिल हैं। इसलिए, कार्यक्रम के सबसे महत्वपूर्ण क्षेत्रों में, प्रकार के अनुपालन के लिए चर की जाँच की जाती है।

पाठ चर विशेष रूप से खतरनाक होते हैं, उदाहरण के लिए किसी सर्वेक्षण प्रश्न का उत्तर दर्ज करने के लिए फ़ील्ड। उन्हें बस दुर्भावनापूर्ण कोड के लिए जाँचने की आवश्यकता है। खतरे को खत्म करने के लिए, कुछ तत्वों को पाठ से हटा दिया जाता है या अन्य प्रतीकों से बदल दिया जाता है। CodeIgniter फ्रेमवर्क में आने वाले डेटा को संसाधित करने के लिए एल्गोरिदम चित्र 2.6 में दिखाया गया है।

आर
चित्र 2.6. - CodeIgniter ढांचे में आने वाले डेटा को संसाधित करने के लिए एल्गोरिदम

2.5 प्रोग्राम इंटरफ़ेस का विकास

किसी सॉफ़्टवेयर सिस्टम को विकसित करने में सबसे महत्वपूर्ण मुद्दों में से एक उपयोगकर्ता इंटरफ़ेस का विकास है। कोई भी प्रणाली जो अपने संचालन में तकनीकी साधनों का उपयोग करती है वह "मानव-मशीन" प्रणाली की श्रेणी से संबंधित है। परीक्षण प्रणालियों के इंटरफ़ेस के लिए निम्नलिखित आवश्यकताओं को सामने रखना सही होगा:


  • इंटरफ़ेस स्पष्ट, सरल और उपयोग में आसान होना चाहिए

  • उपयोगकर्ता को उन कार्यों से विचलित नहीं होना चाहिए जो किए जा रहे कार्य से संबंधित नहीं हैं।
उपयोगकर्ता इंटरफ़ेस जावास्क्रिप्ट और jQuery लाइब्रेरी का उपयोग करके HTML मार्कअप भाषा में बनाया गया है, जिससे प्रोग्राम के लिए एक इंटरैक्टिव उपयोगकर्ता इंटरफ़ेस बनाना संभव हो गया है।

को

उदाहरण के लिए, jQuery का उपयोग करके तारीख दर्ज करने के लिए एक टेक्स्ट फ़ील्ड को एक कॉम्पैक्ट कैलेंडर में परिवर्तित किया गया था जिसमें दर्ज की गई तारीख की शुद्धता को स्वचालित रूप से जांचने का कार्य है (चित्र 2.7 देखें)।

चित्र 2.7. - जन्मतिथि चुनने के लिए कैलेंडर इंटरफ़ेस
सर्वेक्षण में भाग लेने वाले छात्रों के लिए उपलब्ध उपयोगकर्ता इंटरफ़ेस कुछ हद तक न्यूनतम है। परिणामस्वरूप, छात्र सुंदर ग्राफिक्स से विचलित नहीं होते हैं और प्रश्न के उत्तर के बारे में सोचने पर ध्यान केंद्रित करते हैं। इनमें से किसी एक के साथ इंटरफ़ेस

सर्वेक्षण चित्र 2.8 में दिखाया गया है।

चित्र 2.8. - सर्वेक्षण प्रश्न का उत्तर देने के लिए इंटरफ़ेस


यदि किसी कारण से कोई छात्र किसी प्रश्न के उत्तर में से किसी का चयन नहीं करता है, लेकिन अगले प्रश्न पर जाने का प्रयास करता है, तो सर्वेक्षण प्रणाली स्वचालित रूप से एक त्रुटि संदेश प्रदर्शित करेगी और वर्तमान प्रश्न का फिर से उत्तर देने की पेशकश करेगी (चित्र 2.9 देखें)।

चित्र 2.9. - डेटा प्रविष्टि त्रुटि संदेश



सर्वेक्षण परिणामों को संसाधित करने की प्रणाली कई मोड में परिणाम प्रदर्शित कर सकती है - टेक्स्ट, ग्राफिक और प्रिंटिंग मोड। सर्वेक्षण परिणामों को ग्राफिकल रूप में प्रदर्शित करने का इंटरफ़ेस चित्र 2.10 में दिखाया गया है।

चित्र 2.10. - सर्वेक्षण परिणाम प्रदर्शित करने के लिए इंटरफ़ेस



एक ब्राउज़र, जो सर्वर के संबंध में एक क्लाइंट है और इसे एक वेब पेज को संसाधित करने के लिए अनुरोध भेजता है, तथाकथित पतले क्लाइंट का कार्यान्वयन हो सकता है। ब्राउज़र वेब पेज प्रदर्शित करने में सक्षम है और, एक नियम के रूप में, ऑपरेटिंग सिस्टम का हिस्सा है, और इसे अपडेट करने और बनाए रखने का कार्य ऑपरेटिंग सिस्टम आपूर्तिकर्ता के पास है। एप्लिकेशन तर्क सर्वर पर केंद्रित है, और ब्राउज़र का कार्य मुख्य रूप से सर्वर से नेटवर्क पर डाउनलोड की गई जानकारी प्रदर्शित करना और उपयोगकर्ता डेटा को वापस प्रसारित करना है। इस दृष्टिकोण का एक फायदा यह तथ्य है कि ग्राहक उपयोगकर्ता के विशिष्ट ऑपरेटिंग सिस्टम से स्वतंत्र होते हैं, और वेब एप्लिकेशन इस प्रकार क्रॉस-प्लेटफ़ॉर्म सेवाएँ हैं।

मानक ब्राउज़र कार्यक्षमता का समर्थन करने के लिए वेब एप्लिकेशन बनाने का एक महत्वपूर्ण लाभ यह है कि कार्यक्षमता को क्लाइंट के ऑपरेटिंग सिस्टम से स्वतंत्र रूप से चलना चाहिए। Microsoft Windows, Mac OS

3. तकनीकी अनुभाग

3.1 कार्यक्रम विकास प्रौद्योगिकी

3.1.1 वेब सर्वर मूल बातें

वेब सर्वर कैसे काम करता है: यह ज्ञात है कि वेब सर्वर टेक्स्ट फ़ाइलों के रूप में जानकारी संग्रहीत करते हैं, जिन्हें पेज भी कहा जाता है। पाठ के अलावा, ऐसे पृष्ठों में अन्य पृष्ठों के लिंक (एक ही या एक अलग सर्वर पर स्थित), ग्राफिक छवियों के लिंक, ऑडियो और वीडियो जानकारी, विभिन्न डेटा प्रविष्टि ऑब्जेक्ट (फ़ील्ड, बटन, फॉर्म इत्यादि) शामिल हो सकते हैं। साथ ही सर्वर पर निष्पादित अन्य ऑब्जेक्ट और प्रोग्राम। वास्तव में, पृष्ठ विभिन्न प्रकार की वस्तुओं के बीच किसी प्रकार की कनेक्टिंग लिंक का प्रतिनिधित्व करते हैं। वे एक विशेष हाइपरटेक्स्ट मार्कअप लैंग्वेज, हाइपरटेक्स्ट मार्कअप लैंग्वेज या संक्षेप में HTML का उपयोग करके डिज़ाइन किए गए हैं। वेब सर्वर पर स्थित जानकारी तक पहुँचने के लिए, उपयोगकर्ता विशेष क्लाइंट प्रोग्राम - ब्राउज़र का उपयोग करते हैं। वर्तमान में दर्जनों अलग-अलग ब्राउज़र हैं, लेकिन उनमें से केवल कुछ ही वर्तमान में सबसे लोकप्रिय हैं:


  • माइक्रोसॉफ्ट अंतर्जाल अन्वेषक;

  • ओपेरा;

  • मोज़िला फ़ायरफ़ॉक्स

  • गूगल क्रोम।
प्रत्येक वेब सर्वर पेज का अपना तथाकथित सार्वभौमिक संसाधन पता होता है - यूनिवर्सल रिसोर्स लोकेटर (यूआरएल)। किसी विशेष पृष्ठ तक पहुंचने के लिए, उपयोगकर्ता को ब्राउज़र को उसका यूआरएल प्रदान करना होगा। एक नियम के रूप में, किसी भी वेब सर्वर का एक मुख्य पृष्ठ होता है जिसमें इस सर्वर पर अन्य सभी पृष्ठों के लिंक होते हैं। इसलिए, किसी वेब सर्वर की सामग्री को देखना आमतौर पर उसके मुख्य (सूचकांक) पृष्ठ से शुरू होता है।

3.1.2 निष्क्रिय और सक्रिय वेब सर्वर

निष्क्रिय और सक्रिय वेब सर्वर हैं। यदि सर्वर पृष्ठों में केवल स्थिर पाठ और मल्टीमीडिया जानकारी, साथ ही अन्य पृष्ठों के हाइपरटेक्स्ट लिंक शामिल हैं, तो सर्वर को निष्क्रिय कहा जाता है। जब सर्वर पेज सामान्य इंटरैक्टिव एप्लिकेशन की विंडो के समान व्यवहार करते हैं, तो उपयोगकर्ता के साथ संवाद में प्रवेश करते हुए, हम एक सक्रिय सर्वर के साथ काम कर रहे हैं।


3.1.3 वस्तु-उन्मुख दृष्टिकोण

वर्तमान में, वेब एप्लिकेशन विकसित करते समय ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण का उपयोग तेजी से लोकप्रिय हो रहा है। और यद्यपि इस दृष्टिकोण के फायदे उतने स्पष्ट नहीं हैं, उदाहरण के लिए, C++ या Java जैसी प्रोग्रामिंग भाषाओं में, PHP प्रोग्रामिंग भाषा में लिखे गए स्वतंत्र रूप से वितरित पुस्तकालयों और कार्यक्रमों की बढ़ती संख्या एक ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस पर जा रही है . ऐसा करके, वे उन डेवलपर्स को बाध्य करते हैं जो उनका उपयोग PHP की ऑब्जेक्ट-ओरिएंटेड क्षमताओं की ओर करने के लिए करते हैं। PHP दुभाषिया के पांचवें संस्करण में ऑब्जेक्ट-ओरिएंटेड मॉडल के लिए पूर्ण समर्थन की शुरूआत से इस पद्धति में रुचि और बढ़ गई है।

अक्सर, स्थान और स्थान के लिए वस्तु-उन्मुख दृष्टिकोण का उपयोग करने से कोई परियोजना सफल हो जाएगी। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग शैली में एक नौसिखिया के रूप में प्रोग्रामिंग अक्सर एक माइनफील्ड को नेविगेट करने जैसा महसूस होता है - यदि आप नहीं जानते कि खदानें कहां हैं, तो परियोजना के अंत तक पहुंचना असंभव है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग अपने आप में रामबाण नहीं है - यह एक कार्यशील तकनीक है जो आपको इसकी अनुमति देती है:


  • पुन: उपयोग किए गए स्रोत कोड का प्रतिशत बढ़ाएँ;

  • प्रोग्रामिंग करते समय, निम्न-स्तरीय कंप्यूटर शब्दों (फ़ाइल, लाइन, आदि) के बजाय वास्तविक दुनिया की अवधारणाओं और वस्तुओं (छात्र, समूह, पाठ्यक्रम, आदि) के साथ काम करें, जो आपको कम त्रुटियों के साथ बड़े प्रोजेक्ट बनाने की अनुमति देता है और अधिक कुशल कम समय.
प्रोग्रामिंग तकनीकों का विकास, जैसा कि डिज्क्स्ट्रा ने उल्लेख किया है, "फूट डालो और जीतो" थीसिस द्वारा निर्धारित होता है। कोई भी सफल तकनीक यह मानती है कि किसी प्रोग्राम का स्रोत कोड जितना छोटा होगा, उसे बनाना, डिबग करना और रखरखाव करना उतना ही आसान होगा, और एक सरल प्रोग्राम एक जटिल प्रोग्राम की तुलना में बहुत कम त्रुटि-प्रवण होता है।

कंप्यूटर युग की शुरुआत में, एक प्रोग्राम एक एकल थ्रेड था जो डेटा की एक सरणी को संसाधित करता था। समय के साथ, कार्यक्रमों की जटिलता और उन पर लगाई गई आवश्यकताएँ बढ़ती गईं और डेटा को व्यवस्थित करने का यह तरीका अस्वीकार्य हो गया। एक संरचनात्मक दृष्टिकोण प्रस्तावित किया गया था, जिसमें डेटा सरणी प्रोग्राम में कहीं से भी पहुंच योग्य हो गई थी, लेकिन प्रोग्राम के मुख्य प्रवाह को कई प्रक्रियाओं में विभाजित किया गया था। एक अलग छोटी प्रक्रिया, भले ही वह सामान्य डेटा का उपयोग करती हो, बड़ी मात्रा में स्रोत कोड की तुलना में विकसित करना बहुत आसान है।

प्रत्येक प्रक्रिया में एक स्थानीय चर होता है, जिसका जीवनकाल प्रक्रिया की अवधि से निर्धारित होता है। कुछ प्रक्रियाएँ दूसरों को कॉल कर सकती हैं, लेकिन प्रोग्राम में डेटा सरणी सभी प्रक्रियाओं के लिए सामान्य और सुलभ रहती है। इस दृष्टिकोण का उपयोग PHP में प्रक्रियात्मक प्रोग्रामिंग में किया जाता है और आपको बड़े सॉफ़्टवेयर कॉम्प्लेक्स बनाने की अनुमति देता है। लेकिन बड़ी मात्रा में डेटा (जैसे विभागीय डेटाबेस) के साथ संचालित होने वाले कार्यक्रमों का विकास, डिबगिंग और समर्थन अभी भी जटिल बना हुआ है और इसके लिए महत्वपूर्ण कौशल और अनुभव की आवश्यकता होती है।

बढ़ती जटिलता की प्रतिक्रिया प्रोग्रामिंग के लिए एक ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण का उद्भव था: एक प्रोग्राम को कई डेटा सरणी में विभाजित किया गया है, जिनमें से प्रत्येक की अपनी प्रक्रियाएं हैं, साथ ही प्रक्रियाएं जो अन्य डेटा सरणी के साथ बातचीत करती हैं।

परिणामस्वरूप, एक जटिल कार्य कई सरल उप-कार्यों में टूट जाता है, और डेवलपर्स को परियोजना को प्रबंधित करने का अधिक लचीला तरीका मिलता है - कोड के एक विशाल अखंड ब्लॉक को संपादित करना छोटे, शिथिल रूप से जुड़े ब्लॉकों के संग्रह की तुलना में बहुत अधिक कठिन है।

प्रोग्रामिंग भाषा से संबंध के बावजूद, ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण में कई सामान्य सिद्धांत होते हैं, अर्थात्:


  • अमूर्त डेटा प्रकार बनाने की क्षमता, जो पूर्वनिर्धारित डेटा प्रकारों (जैसे पूर्णांक, स्ट्रिंग, आदि) के साथ, आपके स्वयं के डेटा प्रकारों (वर्गों) को पेश करने और ऐसे डेटा प्रकारों (ऑब्जेक्ट्स) के "चर" घोषित करने की अनुमति देती है। अपने स्वयं के डेटा प्रकार बनाकर, प्रोग्रामर मशीन शब्दों (चर, फ़ंक्शन) के साथ नहीं, बल्कि वास्तविक दुनिया की वस्तुओं के साथ काम करता है, जिससे अमूर्तता के एक नए स्तर तक बढ़ जाता है;

  • एनकैप्सुलेशन, जो अमूर्त डेटा प्रकारों के उपयोगकर्ता इंटरैक्शन को केवल उनके इंटरफ़ेस तक सीमित करता है और ऑब्जेक्ट के आंतरिक कार्यान्वयन को छुपाता है, इसकी आंतरिक स्थिति पर प्रभाव को रोकता है। मानव स्मृति सीमित है और इसमें एक विशाल परियोजना के सभी विवरण शामिल नहीं हो सकते हैं, जबकि इनकैप्सुलेशन का उपयोग आपको किसी ऑब्जेक्ट को डिज़ाइन करने और आंतरिक कार्यान्वयन के बारे में चिंता किए बिना और केवल कुछ इंटरफ़ेस विधियों का सहारा लेने के बिना इसका उपयोग करने की अनुमति देता है;

  • वंशानुक्रम, जो आपको मौजूदा अमूर्त डेटा प्रकार - एक वर्ग, के आधार पर एक नया वर्ग बनाकर विकसित करने की अनुमति देता है। इस मामले में, नया वर्ग स्वचालित रूप से मौजूदा अमूर्त डेटा प्रकार की क्षमताओं को प्राप्त कर लेता है। अक्सर, अमूर्त डेटा प्रकार बहुत जटिल होते हैं, इसलिए वे अपने अनुक्रमिक विकास का सहारा लेते हैं, सामान्य से विशिष्ट तक वर्गों का पदानुक्रम बनाते हैं;

  • बहुरूपता, संपूर्ण श्रृंखलाओं और शाखाओं वाले पेड़ों के निर्माण की अनुमति देता है जो एक दूसरे से अमूर्त डेटा प्रकार (वर्ग) प्राप्त करते हैं। इस मामले में, कक्षाओं के पूरे सेट में समान नाम वाली कई विधियाँ होंगी: इस पेड़ के किसी भी वर्ग में समान नाम वाली एक विधि होने की गारंटी है। यह सिद्धांत विभिन्न प्रकार के डेटा सेट को स्वचालित रूप से संसाधित करने में मदद करता है।

3.1.4 कोडइग्निटर ढांचे की विशेषताएं

उपयोग किया गया CodeIgniter फ्रेमवर्क ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण का उपयोग करके लिखा गया है। प्रोग्रामर द्वारा पेश किए गए नियंत्रकों, विचारों और मॉडलों की सभी कक्षाएं फ्रेमवर्क में पेश की गई मूल कक्षाओं को प्राप्त करती हैं। इससे छोटे स्रोत कोड लिखना संभव हो जाता है, क्योंकि सभी आवश्यक बुनियादी कार्य तुरंत उपलब्ध होते हैं।

प्रोग्रामर के लिए उपलब्ध नियंत्रक वर्गों, दृश्यों और मॉडलों के अलावा, कोडइग्निटर फ्रेमवर्क में प्रोग्रामर के लिए प्लगइन्स और हेल्पर्स फ़ंक्शन भी उपलब्ध हैं। हेल्पर्स, जैसा कि नाम से पता चलता है, कुछ छोटे कार्य करने में मदद करने के लिए डिज़ाइन किए गए हैं। उदाहरण के लिए, वेब फ़ॉर्म बनाने, फ़ाइलें डाउनलोड करने या सत्रों के साथ काम करने के लिए सहायक हैं। फ्रेमवर्क के अन्य सभी मुख्य तत्वों के विपरीत, सहायक प्राथमिक कार्यों के सेट होते हैं, जो ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण का उपयोग किए बिना भी लिखे जाते हैं। प्रत्येक फ़ंक्शन एक छोटा, सख्ती से सीमित कार्य करता है। हालाँकि, सेट काफी बड़ा है, और ऐसी "छोटी सी चीज़" काम में बहुत उपयोगी हो जाती है।

मुख्य अंतर को छोड़कर, प्लगइन्स लगभग हेल्पर्स के समान ही हैं: वे फ़ंक्शंस का एक सेट नहीं हैं, वे एक फ़ंक्शन हैं। इसके अलावा, आप इस तथ्य पर ध्यान दे सकते हैं कि हेल्पर्स सिस्टम के मूल का एक हिस्सा हैं, जबकि प्लगइन्स कुछ बाहरी हैं, जो तीसरे पक्ष के प्रोग्रामर द्वारा विकसित किए गए हैं। हकीकत में ऐसा ही होता है. यहां तक ​​कि मुख्य किट के साथ आने वाले प्लगइन्स भी समुदाय में CodeIgniter उपयोगकर्ताओं द्वारा लिखे गए हैं।


3.1.5 ग्रहण आईडीई

विभाग के छात्रों के लिए सर्वेक्षण प्रश्नावली के प्रसंस्करण के लिए एक कार्यक्रम विकसित करते समय, हमने एक एकीकृत विकास वातावरण (आईडीई - एकीकृत विकास पर्यावरण), अर्थात् एक्लिप्स जैसे एक महत्वपूर्ण और उपयोगी प्रोग्रामर टूल का भी उपयोग किया। एक्लिप्स मॉड्यूलर क्रॉस-प्लेटफॉर्म एप्लिकेशन विकसित करने के लिए एक निःशुल्क ढांचा है। एक्लिप्स फाउंडेशन द्वारा विकसित और अनुरक्षित।

एक्लिप्स प्लेटफ़ॉर्म पर आधारित सबसे प्रसिद्ध एप्लिकेशन विभिन्न भाषाओं में सॉफ़्टवेयर विकास के लिए विभिन्न "एक्लिप्स आईडीई" हैं (उदाहरण के लिए, सबसे लोकप्रिय "जावा आईडीई", जिसे शुरू में समर्थित किया गया था)। इस मामले में, प्रोग्रामिंग भाषाओं PHP (PDT मॉड्यूल) और जावास्क्रिप्ट (JSEclipse मॉड्यूल) में प्रोग्रामिंग के लिए एक्सटेंशन का उपयोग किया गया था, साथ ही HTML मार्कअप भाषा का उपयोग करके लेआउट भी किया गया था।

3.2 प्रोग्राम परीक्षण प्रौद्योगिकी

प्रोग्राम टेस्टिंग सॉफ्टवेयर में त्रुटियों की पहचान करने की प्रक्रिया है। फिलहाल, कार्यक्रमों के परीक्षण के लिए कई तरीके हैं, लेकिन वे सभी दोषों और त्रुटियों की पहचान करने और उन्हें खत्म करने, या विश्लेषण किए गए कार्यक्रम की सही कार्यप्रणाली स्थापित करने की गारंटी नहीं देते हैं। इसलिए, सभी मौजूदा परीक्षण विधियां शोध या विकसित किए जा रहे सॉफ़्टवेयर के लिए औपचारिक सत्यापन प्रक्रिया के ढांचे के भीतर काम करती हैं।

यह औपचारिक सत्यापन प्रक्रिया यह साबित कर सकती है कि केवल उपयोग की गई विधि के संदर्भ में कोई त्रुटि नहीं है, लेकिन उनकी पूर्ण अनुपस्थिति की गारंटी नहीं देती है।

एक परीक्षण वह जानकारी है जिसमें डिबग किए जा रहे प्रोग्राम के लिए विशेष रूप से चयनित प्रारंभिक डेटा और प्रोग्राम के सही संचालन की निगरानी के लिए उपयोग किए जाने वाले संबंधित संदर्भ परिणाम शामिल होते हैं।

प्रोग्राम नियंत्रण उन परीक्षणों का चयन करने के लिए आता है जिनके सही परिणाम प्राप्त होने से मूल्यों की संपूर्ण अनुमेय सीमा से बाकी इनपुट डेटा के लिए प्रोग्राम के सही संचालन की गारंटी होगी।

सिस्टम का परीक्षण कई विधियों का उपयोग करके किया गया था:


  • तनाव परीक्षण;

  • XDebug एक्सटेंशन का उपयोग करके मैन्युअल डिबगिंग और प्रोग्राम ट्रेसिंग;

  • PhpUnit के साथ इकाई परीक्षण।
PHP में लिखे गए प्रोग्रामों का परीक्षण करते समय, आपको यह जांचना चाहिए कि उपयोगकर्ता की स्क्रीन पर प्रदर्शित डेटा अपेक्षाओं को पूरा करता है या नहीं। निम्नलिखित मुख्य समस्याएँ संभव हैं:

  • स्क्रीन पर कुछ भी प्रदर्शित नहीं होता है, या संबंधित कोड के साथ कोई सिस्टम त्रुटि प्रदर्शित होती है (प्राधिकरण त्रुटि, वेब सर्वर विफलता, आदि);

  • डेटाबेस के साथ काम करते समय एक विफलता हुई, और एक त्रुटि रिपोर्ट उत्पन्न हुई;

  • एप्लिकेशन या डेटाबेस पर अधिक लोड के कारण सर्वर विफलता;

  • एक प्रोग्राम निष्पादन त्रुटि उत्पन्न हुई है, जिसके परिणामस्वरूप गलत डेटा या त्रुटि रिपोर्ट प्रदर्शित हो रही है।

3.2.1 प्रोग्राम का लोड परीक्षण

सबसे महत्वपूर्ण परीक्षणों में से एक लोड परीक्षण है, जो आपको स्रोत कोड या डेटाबेस कॉल में बाधाओं का पता लगाने की अनुमति देता है।

ऐसे कई उपकरण हैं जो सर्वर पर अनुरोधों की संख्या बढ़ाने और एकाधिक संचालन को कॉल करने के कार्य को सरल बनाते हैं। लोड सीमा परीक्षण को एप्लिकेशन के अपेक्षित कार्यभार को सटीक रूप से दोहराने के लिए डिज़ाइन किया जाना चाहिए।

विभाग के छात्रों के लिए सर्वेक्षण प्रश्नावली के प्रसंस्करण के लिए कार्यक्रम के लोड परीक्षण के लिए, कर्ल-लोडर कार्यक्रम का उपयोग किया गया था। कर्ल-लोडर सी प्रोग्रामिंग भाषा में लिखी गई एक स्वतंत्र रूप से वितरित वेब एप्लिकेशन प्रदर्शन परीक्षण उपयोगिता है। यह HTTP और HTTPS प्रोटोकॉल पर सैकड़ों और हजारों सर्वर कॉल का अनुकरण करने में सक्षम है और libcurl लाइब्रेरी का उपयोग करता है, जो आपको आसानी से अनुप्रयोगों का परीक्षण करने की अनुमति देता है प्राधिकरण की आवश्यकता है. और HTTPS प्रोटोकॉल के लिए समर्थन आपको एन्क्रिप्टेड ट्रांसपोर्ट तंत्र एसएसएल (सिक्योर सॉकेट्स लेयर) और टीएलएस (ट्रांसपोर्ट लेयर सिक्योरिटी) के माध्यम से काम करने वाले वेब अनुप्रयोगों के लोड परीक्षण के लिए कर्ल-लोडर उपयोगिता का उपयोग करने की अनुमति देता है।

3.2.2 अंतर्निहित PHP टूल का उपयोग करके डिबगिंग

जब कोड में कोई त्रुटि होती है तो PHP में लिखे गए एप्लिकेशन का मानक व्यवहार कॉन्फ़िगरेशन सेटिंग्स पर बहुत अधिक निर्भर करता है। एक नियम के रूप में, वे php.ini कॉन्फ़िगरेशन फ़ाइल में सेट हैं:

  • डिस्प्ले_एरर्स पैरामीटर, चालू या बंद पर सेट, निर्दिष्ट करता है कि क्या त्रुटि संदेश उपयोगकर्ता को दिखाया जाना चाहिए या छिपा हुआ छोड़ दिया जाना चाहिए;

  • log_errors पैरामीटर, चालू या बंद पर सेट, PHP दुभाषिया को इवेंट लॉग फ़ाइल में संदेश लिखने का कारण बनता है;

  • error_reporting निर्देश यह निर्धारित करता है कि किन मामलों में चेतावनी उत्पन्न की जानी चाहिए और किन मामलों में इसे अनदेखा किया जा सकता है।
किसी परीक्षण सर्वर पर प्रोग्राम विकसित और डिबग करते समय, आपको डिस्प्ले_एरर्स पैरामीटर को सक्षम करना होगा और लॉग_एरर्स पैरामीटर को अक्षम करना होगा। यह प्रोग्रामर को त्रुटि की स्थिति उत्पन्न होने पर यथाशीघ्र प्रतिक्रिया करने की अनुमति देता है, जिससे "विंडोज़ के बीच स्विच" की संख्या कम हो जाती है।

प्रोग्राम के कार्यशील संस्करण में, इसके विपरीत, आपको डिस्प्ले_एरर पैरामीटर को अक्षम करना चाहिए, लेकिन लॉग_एरर को सक्षम करना चाहिए। एक ओर, यह उन हमलावरों के लिए जीवन को और अधिक कठिन बना देगा जो अब डिबगिंग जानकारी नहीं देख पाएंगे। दूसरी ओर, एक गंभीर स्थिति में, यह आपको यह समझने में मदद करेगा कि वास्तव में क्या हुआ और त्रुटि को ठीक करेगा, भले ही यह परीक्षण वातावरण में प्रतिलिपि प्रस्तुत करने योग्य न हो।

दोनों ही मामलों में, error_reporting पैरामीटर को सबसे विस्तृत स्थिति - E_ALL पर सेट करना सुविधाजनक है, जो PHP को कोड में सबसे छोटी त्रुटियों की रिपोर्ट करने के लिए मजबूर करता है।

3.2.3 XDebug का उपयोग करके प्रोग्राम को डिबग करना

जबकि PHP प्रोग्रामिंग भाषा का उपयोग सिस्टम प्रशासन और पारंपरिक डेटा प्रोसेसिंग जैसे कार्यों के लिए कमांड-लाइन स्क्रिप्ट बनाने के लिए किया जा सकता है, भाषा की शक्ति विशेष रूप से वेब अनुप्रयोगों में स्पष्ट है।

वेब अनुप्रयोगों की छोटी अवधि और उनके स्तरित डिज़ाइन (क्लाइंट एप्लिकेशन, नेटवर्क, वेब सर्वर, एप्लिकेशन कोड और अंतर्निहित डेटाबेस) को देखते हुए, स्रोत कोड में त्रुटियों को पकड़ना मुश्किल हो सकता है। भले ही हम मान लें कि PHP कोड को छोड़कर सभी परतें त्रुटिपूर्ण रूप से काम करती हैं, प्रोग्राम त्रुटि का पता लगाना मुश्किल हो सकता है, खासकर यदि एप्लिकेशन बड़ी संख्या में कक्षाओं का उपयोग करता है।

PHP इको एक्सप्रेशन और फ़ंक्शंस जैसे var_dump(), debug_zval_dump() और print_r() सामान्य और बहुत लोकप्रिय डिबगिंग टूल हैं जो विभिन्न छोटी समस्याओं को हल करने में मदद कर सकते हैं। हालाँकि, परीक्षण और डिबगिंग उपकरण के रूप में, ये अभिव्यक्तियाँ (और इससे भी अधिक विश्वसनीय उपकरण, उदाहरण के लिए, PEAR लॉग पैकेज) बहुत कम मदद करती हैं और हमेशा नहीं।

इसके अतिरिक्त, इस प्रकार की डिबगिंग एक क्रूर बल दृष्टिकोण है। यदि आवश्यक जानकारी गायब है, तो आपको स्रोत कोड को फिर से करना होगा, पिछले चरणों को दोहराना होगा और फिर से त्रुटि की खोज शुरू करनी होगी। एक अधिक प्रभावी रणनीति एप्लिकेशन के चलने के दौरान उसका परीक्षण करना है। आप क्वेरी पैरामीटर्स को सूचीबद्ध कर सकते हैं, प्रक्रिया कॉल के स्टैक को देख सकते हैं और किसी भी वेरिएबल या ऑब्जेक्ट का मूल्य पता लगा सकते हैं। आप एप्लिकेशन के निष्पादन को अस्थायी रूप से बाधित कर सकते हैं और किसी चर के मान में परिवर्तन की सूचना प्राप्त कर सकते हैं

यह "लाइव" या इंटरैक्टिव अन्वेषण एक विशेष एप्लिकेशन द्वारा प्रदान किया जाता है जिसे डिबगर कहा जाता है। एक डिबगर किसी प्रक्रिया में हेरफेर करने और उसकी मेमोरी की जांच करने के लिए उसे चलाता या जोड़ता है। या, व्याख्या की गई भाषाओं के मामले में, डिबगर सीधे कोड की व्याख्या कर सकता है। एक विशिष्ट आधुनिक डिबगर स्रोत कोड को अनुक्रमित और देख सकता है, जटिल डेटा संरचनाओं को पढ़ने योग्य रूप में प्रदर्शित कर सकता है, और साथ ही प्रोग्राम स्थिति, कॉल स्टैक, प्रोग्राम आउटपुट और सभी चर के मान प्रदर्शित कर सकता है। उदाहरण के लिए, डिबगर के लिए किसी वर्ग के गुणों और विधियों को सूचीबद्ध करना और प्रदर्शित करना आम बात है।

विभिन्न डिबग आउटपुट फ़ंक्शंस को मैन्युअल रूप से जोड़ने के बजाय, आप ट्रेस लॉग बनाने के लिए XDebug का उपयोग कर सकते हैं। ट्रेस लॉग प्रोग्राम के निष्पादन के दौरान किसी वर्ग के कार्यों और विधियों के लिए कॉल की एक सूची है। इसका फायदा यह है कि हर कॉल लॉग में दिखाई देगी।

ट्रेस लॉग आमतौर पर रन दर रन भिन्न होता है क्योंकि यह आने वाले डेटा पर निर्भर करता है, जो अनुरोध से अनुरोध के अनुसार भिन्न होता है।

लॉग को ट्रैक करने से आपको यह समझने में मदद मिलती है कि प्रोग्राम कैसे निष्पादित होता है, लेकिन जब तक प्रोग्राम बहुत सरल न हो, सभी संभावित शाखाओं की कल्पना करना बहुत मुश्किल है। यह इस कारण से है कि बड़े कार्यक्रमों का परीक्षण करना काफी कठिन है: बहुत सारे अलग-अलग विकास पथ हैं और प्रत्येक का परीक्षण करने की आवश्यकता है।

XDebug एप्लिकेशन डिबगिंग टूल, जैसा कि इसके नाम से पता चलता है, प्रोग्राम स्थिति प्रदर्शित करने के लिए कई कार्यक्षमताएं प्रदान करता है और यह एक बहुत ही मूल्यवान शोध उपकरण है। एक बार स्थापित होने के बाद, XDebug अनंत पुनरावृत्तियों को रोकने के लिए हस्तक्षेप करता है, त्रुटि संदेशों में स्टैक और फ़ंक्शन ट्रेस जानकारी जोड़ता है, मेमोरी आवंटन की निगरानी करता है, और कई अन्य कार्य करता है। Xdebug में फ़ंक्शंस का एक सेट भी शामिल है जिसे रन-टाइम डायग्नोस्टिक डेटा प्राप्त करने के लिए स्रोत कोड में जोड़ा जा सकता है।

XDebug मॉड्यूल के परिणाम KCachegrind प्रोग्राम का उपयोग करके देखे जा सकते हैं, जो आपको स्रोत कोड में होने वाली प्रक्रियाओं की कल्पना करने की अनुमति देता है (चित्र 3.1 देखें)।

संक्षेप में, XDebug PHP डेवलपर के लिए एक छोटा लेकिन बहुत उपयोगी उपकरण है और इसे विकास के लिए उपयोग किए जाने वाले प्रत्येक PHP दुभाषिया पर स्थापित किया जाना चाहिए। लेकिन आपको उत्पादन सर्वर पर XDebug का उपयोग नहीं करना चाहिए, क्योंकि इससे प्रदर्शन बहुत कम हो जाएगा।
आर

चित्र 2.1. - KCachegrind प्रोग्राम इंटरफ़ेस

3.2.4 इकाई परीक्षण का उपयोग करना phpUnit

यूनिट परीक्षण प्रोग्रामिंग में एक प्रक्रिया है जो आपको शुद्धता के लिए प्रोग्राम के स्रोत कोड के व्यक्तिगत मॉड्यूल की जांच करने की अनुमति देती है। विचार प्रत्येक गैर-तुच्छ फ़ंक्शन या विधि के लिए सत्यापन परीक्षण लिखने का है। यह आपको तुरंत जांचने की अनुमति देता है कि क्या अगले कोड परिवर्तन के कारण प्रोग्राम के पहले से लिखे और परीक्षण किए गए हिस्सों में त्रुटियां सामने आई हैं, और ऐसी त्रुटियों का पता लगाना और उन्हें खत्म करना भी आसान हो जाता है। यूनिट परीक्षण का उद्देश्य किसी प्रोग्राम के अलग-अलग हिस्सों को अलग करना और यह दिखाना है कि ये हिस्से व्यक्तिगत रूप से काम करते हैं।

विभाग के छात्रों के लिए सर्वेक्षण प्रश्नावली के प्रसंस्करण के लिए प्रोग्राम की डिबगिंग और परीक्षण करते समय, phpUnit प्रणाली का उपयोग किया गया था, जो PHP प्रोग्रामिंग भाषा में लिखे गए वेब अनुप्रयोगों के यूनिट परीक्षण की अनुमति देता है।

PhpUnit का उपयोग करके परीक्षणों का न्यूनतम सेट लिखने के लिए, आपको यह करना होगा:


  • PHPUnit.php लाइब्रेरी शामिल करें;

  • TestCase बेस क्लास का एक उपवर्ग बनाएं;

  • इसमें परीक्षण विधियों की एक मनमानी संख्या जोड़ें जिनके नाम "परीक्षण" से शुरू होते हैं। पूर्व-ज्ञात पैरामीटर इनपुट के रूप में प्रदान किए जाएंगे, और परिणाम की तुलना टेस्टकेस बेस क्लास से परीक्षण वर्ग द्वारा विरासत में प्राप्त कार्यों के एसर्ट परिवार का उपयोग करके संदर्भ के साथ की जाएगी;

  • PHPUnit_TestSuite क्लास बनाएं, इसे एक पैरामीटर के रूप में परीक्षणों के सेट के साथ क्लास का नाम दें;

  • परीक्षणों का एक सेट चलाएँ और निष्पादन परिणाम की जाँच करें।

6 (?). ग्राफिक सामग्री की सूची

6.1 समस्या का विवरण

6.2 प्रोग्राम ब्लॉक आरेख


3. कार्यक्रम का संरचनात्मक आरेख

हमारे कार्यक्रम में जिन मुख्य कार्यों को लागू करने की आवश्यकता है वे समस्या के निर्माण और विश्लेषण से अनुसरण करते हैं:

1)उपयोगकर्ता डेटा को तालिका के रूप में प्रदर्शित करना और उसके साथ काम करना।

2) ऑब्जेक्ट प्रकार जोड़ना और हटाना।

3) स्केल करने की क्षमता के साथ योजना का चित्रमय प्रतिनिधित्व।

4)फ़ाइलों और मुद्रण परिणामों के साथ कार्य करना।

5) सुविधाजनक यूजर इंटरफेस।

नीचे प्रोग्राम का एक कार्यात्मक ब्लॉक आरेख है, जो मुख्य मॉड्यूल और उनके बीच कनेक्शन के रूप में दर्शाया गया है। यह कार्यक्रम में उपरोक्त आवश्यकताओं के कार्यान्वयन को स्पष्ट रूप से दर्शाता है।

चावल। 3.1. कार्यक्रम की कार्यात्मक संरचना.

कार्यक्रम का मुख्य भाग नियंत्रण और इंटरफ़ेस जनरेशन मॉड्यूल है। यह मुख्य रूप का प्रतिनिधित्व करता है जिस पर नियंत्रण होते हैं जो अन्य कार्यों को निष्पादित करने की अनुमति देते हैं और उपयोगकर्ता इंटरफ़ेस भी बनाते हैं।


4. बुनियादी एल्गोरिदम

मुख्य तालिका से डेटा के आधार पर एक छवि बनाने के लिए एल्गोरिदम है, जिसे प्लानड्रा () विधि के रूप में लागू किया गया है।

इसका ब्लॉक डायग्राम और विवरण नीचे दिया गया है।

4.1 एल्गोरिथम का विवरण

यदि हमारी योजना छवि वाला टैब सक्रिय नहीं है, तो हम इसे सक्रिय कर देंगे।

हम पिछली प्रविष्टियों को साफ़ करते हुए दूरियों की एक तालिका तैयार करते हैं।

हम पृष्ठभूमि पैरामीटर (रंग) सेट करते हैं और इसे बनाते हैं, फिर पेन पैरामीटर (लाइन मोटाई और शैली) सेट करते हैं, जो ड्राइंग में रूट लाइनों के प्रदर्शन को निर्धारित करेगा। शुरुआत में, लाइन की मोटाई एक के बराबर होती है - एक समन्वय ग्रिड खींचने के लिए।

रिकॉर्डकाउंट तालिका संपत्ति का उपयोग करके, हम मुख्य तालिका में पंक्तियों की संख्या ज्ञात करते हैं।

हम वर्तमान रिकॉर्ड पॉइंटर को पहले वाले पर सेट करते हैं, और सभी तालिका रिकॉर्ड से गुजरने का एक चक्र व्यवस्थित करते हैं, जिसमें हम मार्गों की संख्या की गणना करते हैं।

चक्र की शुरुआत में, हम स्केल प्रदर्शित करने के लिए तैयारी करते हैं - हम स्केल वैरिएबल के लिए एक आवर्धन कारक (पूरी इकाइयों में) निर्दिष्ट करते हैं, और दोनों स्क्रॉल बार के लिए हम अधिकतम मान निर्धारित करते हैं, जो आवर्धन की डिग्री और पर निर्भर करता है। चित्र का आकार.

यदि मार्ग संख्या शून्य है, तो एक समन्वय ग्रिड - मेरिडियन और समानताएं - खींचने की शर्त पूरी हो जाती है। सबसे पहले, मेरिडियन खींचने का एक चक्र किया जाता है - हम आवर्धन की डिग्री (15, 6, 3, या 1 डिग्री) के आधार पर चरणों में 0 से 360 डिग्री तक जाते हैं, और प्रत्येक मेरिडियन के पास देशांतर की संबंधित डिग्री पर हस्ताक्षर किए जाते हैं (पूर्वी) देशांतर - "+" चिन्ह के साथ), पश्चिमी - "-" चिन्ह के साथ)। प्रधान मध्याह्न रेखा को काले रंग में दर्शाया गया है। समानताएं खींचने के चक्र में भी इसी तरह की क्रियाएं की जाती हैं, अंतर केवल इतना है कि चक्र 0 से 180 डिग्री तक चलता है। "+" चिन्ह उत्तरी अक्षांश को इंगित करता है, और "-" चिन्ह दक्षिणी अक्षांश को इंगित करता है।

रूट लाइनें प्रदर्शित करने के लिए लाइन की मोटाई को 2 में बदलें।

हम तीन सरणियाँ बनाते हैं जिनमें हम वर्तमान मार्ग रिकॉर्ड और निर्देशांक के सूचकांक दर्ज करेंगे। इसके बाद, हम एक लूप व्यवस्थित करते हैं जिसमें हम तालिका प्रविष्टियों से गुजरते हैं और वर्तमान मार्ग के लिए इन सरणियों को भरते हैं। इसके अलावा, पहले से ही स्केल किए गए मान समन्वय सरणियों में दर्ज किए जाते हैं। उसी चक्र में हम मार्ग बिंदुओं की संख्या गिनते हैं।

अगले लूप में, हम इंडेक्स ऐरे की सामग्री को सॉर्ट करते हैं ताकि हम उस क्रम में वेपॉइंट्स बना सकें जिसमें वे तालिका में दिखाई देते हैं।

रूट नंबर के आधार पर लाइन का रंग सेट करें। और हम एक लूप व्यवस्थित करते हैं जो रेखाएँ खींचता है।

रेखा खींचने के चक्र में हम निम्नलिखित कार्य करते हैं: स्क्रॉल बार की स्थिति को ध्यान में रखते हुए, मानचित्र के संबंध में विंडो की स्थिति की गणना की जाती है, और विंडो में बिंदु के निर्देशांक की गणना इस स्थिति के सापेक्ष की जाती है। यदि यह हमारा पहला पास है, तो हम कर्सर को परिकलित निर्देशांक वाले बिंदु पर ले जाते हैं; यदि नहीं, और रेखा खींचने वाला ध्वज चालू है, तो हम पिछले बिंदु से इस बिंदु तक एक रेखा खींचते हैं। यदि चेकबॉक्स अक्षम है, तो मानचित्र पर केवल बिंदु रखे जाते हैं।

फिर ग्लोब पर स्थित बिंदुओं के बीच की दूरी की गणना की जाती है, जिसका अनुमान हमने अभी-अभी अपने मानचित्र पर दर्शाया है। दूरियों की गणना किलोमीटर में की जाती है, पृथ्वी की त्रिज्या 6371 किलोमीटर मानी जाती है। यदि i 0 के बराबर नहीं है तो दूरी की गणना की जाती है, और यह चक्र से होकर गुजरने वाली पहली यात्रा नहीं है। यह शर्त आवश्यक है क्योंकि हम वर्तमान बिंदु से दूरी ज्ञात करने के लिए पिछले बिंदु के निर्देशांक का उपयोग कर रहे हैं।

चूँकि पृथ्वी की सतह गोलाकार है, इसलिए हमें चाप की लंबाई की गणना करने की आवश्यकता है। यहां मुख्य समस्या उस कोण को ढूंढना है जिस पर चाप टिकी हुई है।

तीन मामलों पर विचार किया गया:

1) यदि बिंदु एक ही देशांतर पर हैं, तो कोण निर्धारित करना आसान है - यह बड़े और छोटे अक्षांश मानों के बीच अंतर के बराबर होगा।

2) यदि बिंदु एक ही अक्षांश पर हैं, तो इसका निर्धारण भी मुश्किल नहीं है - यह बड़े और छोटे देशांतर मानों के बीच अंतर के बराबर है, सुधार कॉस (एफ) से गुणा किया जाता है, जहां एफ वर्तमान अक्षांश है।

3) यदि बिंदु विभिन्न अक्षांशों और देशांतरों पर स्थित हैं, तो कोण खोजने का यह मामला अधिक जटिल है। आइए इसे विस्तार से देखें.

सबसे पहले, हम बिंदुओं के देशांतर में अंतर पाते हैं, जैसे कि वे एक ही अक्षांश पर थे, सुधार कॉस (एफ) से गुणा करते हैं, और कोसाइन प्रमेय का उपयोग करके उनके बीच रैखिक दूरी की गणना करते हैं (त्रिभुज के अन्य दो पक्ष हैं) पृथ्वी की त्रिज्या) उसी तरह, हम बिंदुओं के बीच की दूरी की गणना करते हैं, जैसे कि वे एक ही देशांतर पर हों। हम इन दूरियों को l1 और l2 के रूप में दर्शाते हैं।

अब हमारे पास पैरों l1, l2 वाला एक समकोण त्रिभुज है, जिसका कर्ण दूरी l3 है। हम इसकी गणना पाइथागोरस प्रमेय का उपयोग करके करते हैं। हमारा लक्ष्य कोण a ज्ञात करना है। कोज्या प्रमेय का उपयोग करके, हम इस कोण की कोज्या ज्ञात करते हैं। इससे चाप कोज्या की गणना करने पर, हमें कोण मिलता है! नीचे एक व्याख्यात्मक चित्र है।


चावल। 4.1. विभिन्न अक्षांशों और देशांतरों पर दूरी की गणना की व्याख्या।

कोण ज्ञात करने के बाद, हम चाप की लंबाई की गणना करते हैं और परिणामी दूरी को वर्तमान मार्ग की संख्या के साथ दूरी तालिका में दर्ज करते हैं।

ध्यान दें: चूंकि कोसाइन और आर्ककोसाइन फ़ंक्शन रेडियन में निर्दिष्ट कोणों के साथ संचालित होते हैं, प्रोग्राम रेडियन को डिग्री में परिवर्तित करता है और इसके विपरीत। इन सभी गणनाओं से त्रुटियों का संचय होता है।

उल्लिखित सभी सूत्र परिशिष्ट ई में दिए गए हैं।

दूरी की गणना करने के बाद, यदि संबंधित ध्वज चालू है, तो हम इसे वर्तमान बिंदु के बगल में योजना पर प्रदर्शित करते हैं। इसके अलावा, मार्ग की लंबाई का अनुमान लगाने की शर्त के कारण, यह आंकड़ा एक खंड की लंबाई नहीं, बल्कि इस बिंदु से पहले वाले खंडों की लंबाई का योग प्रदर्शित करता है। उपयोगकर्ता दूरी तालिका में अलग-अलग खंडों की लंबाई देख सकता है।

यदि "ऑब्जेक्ट प्रकार दिखाएं" चेकबॉक्स चेक किया गया है तो मानचित्र किसी दिए गए बिंदु के लिए ऑब्जेक्ट प्रकार भी प्रदर्शित करता है।

यदि "दूरी तालिका न दिखाएं" चेकबॉक्स अक्षम है, तो इसे दृश्यमान बनाएं।

सभी मार्ग तैयार होने के बाद, हम सूचकांक और समन्वय सरणियों के लिए आवंटित मेमोरी को मुक्त करते हैं।


4.2 एल्गोरिथम फ़्लोचार्ट

चावल। 4.2. योजना ड्राइंग एल्गोरिदम का फ़्लोचार्ट।


5. सॉफ्टवेयर कार्यान्वयन 5.1 एक कार्यक्रम विकास वातावरण का चयन करना

जैसा कि पहले ही "समस्या कथन" में उल्लेख किया गया है, इस कार्यक्रम को बनाने के लिए बोर्लैंड सी++बिल्डर 5 विकास वातावरण को चुना गया था। यह निर्णय इस तथ्य के कारण है कि इसमें एक इंटरफ़ेस बनाने की प्रक्रिया एक प्रोग्रामर के लिए भी मुश्किल नहीं है जो पहली बार बिल्डर का सामना हुआ है, और वे डेटाबेस और ग्राफिक्स के साथ अच्छी तरह से काम करते हैं, जो कि हमारे प्रोग्राम को विकसित करने के लिए बिल्कुल आवश्यक है।

नुकसान, मेरी राय में, प्रोग्राम का बड़ा निष्पादन योग्य कोड है - इसके लिए ऐसी मशीन पर काम करने के लिए जहां बिल्डर स्थापित नहीं है, इसमें उपयोग की जाने वाली सभी लाइब्रेरी को शामिल करना आवश्यक है, यही कारण है कि इसका आकार कार्यक्रम कई गुना बड़ा हो जाता है.

इसके अलावा, बिल्डर के बारे में अच्छी बात यह है कि घटकों में कई गुण होते हैं जिन्हें न केवल निर्माण के दौरान, बल्कि प्रोग्राम निष्पादन के दौरान भी बदला जा सकता है, जो उनके साथ काम करना अधिक लचीला बनाता है।

5.2 तालिकाओं के साथ कार्य करना

हम पैराडॉक्स का उपयोग डेटाबेस ड्राइवर के रूप में करते हैं। इस डेटाबेस प्रकार को सबसे पहले इसलिए चुना गया क्योंकि बिल्डर के पास पैराडॉक्स तालिकाओं के साथ काम करने के लिए अंतर्निहित उपकरण हैं, जैसे कि बोरलैंड डेटाबेस इंजन, और डेटाबेस डेस्कटॉप प्रोग्राम के साथ भी आता है। दूसरे, पैराडॉक्स का लाभ यह है कि डेटाबेस नाम को उस निर्देशिका के पथ के रूप में निर्दिष्ट किया जा सकता है जहां तालिका फ़ाइल स्थित है, और सभी तालिकाओं को अलग-अलग फ़ाइलों में संग्रहीत किया जाता है। तीसरा, वे कम जगह लेते हैं और स्थानीय तालिकाओं में सबसे सरल हैं। चौथा, विरोधाभास तालिकाएँ आपको मुख्य फ़ील्ड बनाने की अनुमति देती हैं।

तालिका के साथ कार्य सुनिश्चित करने के लिए, हमने प्रपत्र पर निम्नलिखित घटक स्थापित किए:

एक DBGrid जिसके साथ हम किसी तालिका में डेटा सम्मिलित कर सकते हैं, हटा सकते हैं या संपादित कर सकते हैं, या बस इसे प्रदर्शित कर सकते हैं।

एक DBComboBox सूची जिसके साथ हम ऑब्जेक्ट तालिका से डेटा को मुख्य तालिका के वर्तमान रिकॉर्ड में सम्मिलित कर सकते हैं। इस सूची का उपयोग करने से पहले, इसे ऑब्जेक्ट तालिका से मानों से भरा जाना चाहिए। ऐसा करने के लिए, प्रोग्राम शुरू करते समय, हम इसके सभी रिकॉर्ड देखते हैं और उनकी सामग्री को इस सूची के आइटम फ़ील्ड में दर्ज करते हैं।

नेविगेटर डीबीनेविगेटर - इसके साथ आप तालिका में रिकॉर्ड हटा सकते हैं, जोड़ सकते हैं, संपादित कर सकते हैं और उनके माध्यम से नेविगेट भी कर सकते हैं। हम इसे ग्रिड से जोड़ते हैं जिसमें हमारी तालिका प्रदर्शित होगी।

ये सभी घटक डेटासोर्स के माध्यम से तालिका से जुड़े हुए हैं, जिसके गुणों में हम इसका नाम दर्शाते हैं। इसके अलावा, तालिका को स्वयं एक घटक, तालिका के रूप में भी दर्शाया जाता है, जिसमें तीन गुणों पर सबसे अधिक ध्यान दिया जाना चाहिए:

1)सक्रिय - दिखाता है कि तालिका सक्रिय है या नहीं। यदि यह प्रॉपर्टी अक्षम होने पर आप इसे एक्सेस करने का प्रयास करते हैं, तो प्रोग्राम "बंद डेटासेट पर यह ऑपरेशन नहीं कर सकता" त्रुटि उत्पन्न करेगा। परीक्षण के दौरान, इस त्रुटि का कारण बनने वाली सभी संभावित स्थितियों को ट्रैक किया गया और नियंत्रित किया गया।

2) डेटाबेसनाम - डेटाबेस का नाम; जिस निर्देशिका से तालिका खोली या बनाई गई थी उसका पथ इसके रूप में लिया जाता है।

3) टेबलनाम - टेबल का नाम - .db एक्सटेंशन वाली एक फ़ाइल जिसमें टेबल संग्रहीत है।

प्रोग्राम निष्पादन के दौरान ये सभी गुण बदल जाते हैं।

विशिष्टता से छुटकारा पाने के लिए हमें तालिका घटक की आवश्यकता है। हम तालिका की आड़ में, किसी विशिष्ट तालिका को खोल सकते हैं और अन्य घटकों को प्रभावित किए बिना केवल तालिका के गुणों को बदल सकते हैं। उदाहरण के लिए, एक तालिका खोलते समय, हम पिछली तालिका को बंद और निष्क्रिय कर देते हैं, जबकि तालिका घटक के गुणों में डेटाबेस का नाम और तालिका का नाम हटा दिया जाता है, और हम एक नई तालिका को खोलते और सक्रिय करते हैं, डेटाबेसनाम में नई निर्देशिका और फ़ाइल नाम लिखते हैं। और खोलते समय टेबलनाम। (परिशिष्ट A में TBOpenFileClick और TBCloseFileClick विधियाँ देखें)।

डेटासोर्स और टेबल घटक प्रपत्र पर स्थित हैं, लेकिन वे केवल बिल्डर में प्रोग्राम के साथ काम करते समय दिखाई देते हैं।

5.3 ग्राफ़िक्स के साथ कार्य करना

योजना बनाने के लिए हम छवि घटक का उपयोग करते हैं। इस ऑब्जेक्ट में दो महत्वपूर्ण गुण हैं:

1)चित्र - टीपिक्चर वर्ग का एक ऑब्जेक्ट है, जो किसी भी प्रकार के ग्राफिक्स के लिए एक कंटेनर है। वे। यह घटक बिटमैप ग्राफिक्स, आइकन या अन्य उपयोगकर्ता-परिभाषित ग्राफिक्स को संग्रहीत कर सकता है। चित्र वह स्थान है जहाँ हमारा चित्र स्थित है। इसकी सहायता से हम परिणामी ड्राइंग को एक फाइल में सेव करते हैं। (परिशिष्ट A, TBSaveFileClick विधि देखें)। कृपया यह भी ध्यान रखें कि चित्र और छवि का आकार समान नहीं हो सकता है। इस समस्या पर नीचे अधिक विस्तार से चर्चा की जाएगी।

2) कैनवास - कैनवास। संपूर्ण ड्राइंग प्रक्रिया छवि घटक के कैनवास पर की जाती है। कैनवास आपको पेन, ब्रश, फ़ॉन्ट के पैरामीटर सेट करने, रेखाएं, आयत, दीर्घवृत्त जैसी वस्तुओं को खींचने और टेक्स्ट प्रदर्शित करने की अनुमति देता है।

हमारे कार्यक्रम में, हम MoveTo और LineTo आउटलाइन विधियों का उपयोग करके लाइन ड्राइंग का उपयोग करते हैं, Ellipse का उपयोग करके बिंदु बनाते हैं, और TextOut विधि का उपयोग करके टेक्स्ट आउटपुट का उपयोग करते हैं। (परिशिष्ट ए, प्लानड्रा देखें)।

वे। कैनवास हमें विंडोज़ जीडीआई फ़ंक्शंस को सीधे एक्सेस किए बिना उनके साथ काम करने की अनुमति देता है, जिससे ग्राफ़िक्स के साथ काम करना बहुत आसान हो जाता है।


5.4 इंटरफ़ेस विकास

इंटरफ़ेस के विकास पर भी विशेष ध्यान दिया जाना चाहिए, क्योंकि इसे उपयोगकर्ता के अनुकूल बनाना आवश्यक है। बिल्डर टूल विंडोज़ मानकों में इंटरफ़ेस को लागू करना आसान बनाते हैं।

मानक विंडोज़ प्रोग्राम इंटरफ़ेस के मुख्य तत्व:

1) मेनू - उपयोगकर्ताओं को तार्किक रूप से समूहीकृत कमांड निष्पादित करने का एक आसान तरीका प्रदान करता है।

मुख्य मेनू मेनमेनू घटक का उपयोग करके बनाया गया है, और प्रोग्राम बनाते समय इसे संपादित करना बहुत सुविधाजनक है, क्योंकि इसे जांचने के लिए आपको इसे चलाने की आवश्यकता नहीं है - इसकी सभी सामग्री पहले से ही फॉर्म पर प्रदर्शित होती है।

2) टूलबार - इसमें टूल बटन होते हैं जो प्रोग्राम के मेनू में आइटम के अनुरूप होते हैं और उपयोगकर्ता को इसके कमांड तक अधिक सीधी पहुंच प्रदान करते हैं।

टूलबार को टूलबार घटक का उपयोग करके कार्यान्वित किया जाता है, जो आपको बटनों को शीघ्रता से जोड़ने और रखने की अनुमति देता है। टूलबार पर सभी टूल बटन की चौड़ाई और ऊंचाई समान होती है।

प्रत्येक बटन के लिए, आप एक आइकन सेट कर सकते हैं जो इमेजलिस्ट घटक में संग्रहीत छवियों से आइकन संख्या का चयन करके उसके द्वारा लागू की गई क्रिया को प्रदर्शित करता है। यह सुविधाजनक है क्योंकि आप हर बार किसी फ़ाइल से आइकन लोड किए बिना आसानी से आइकन बदल सकते हैं।

विंडोज मानक के अनुसार, मैंने मेनू आइटम "न्यू", "ओपन", "सेव", "प्रिंट" के अनुरूप पैनल पर बटन बनाए।

3) बटन - उनकी मदद से उपयोगकर्ता इस बटन को सौंपी गई कार्रवाई का निष्पादन शुरू करता है।

आमतौर पर, विंडोज़ इंटरफ़ेस मानक के अनुसार, प्रोग्राम विंडो को अव्यवस्थित न करने के लिए बटनों का उपयोग लगभग कभी नहीं किया जाता है। इसके बजाय, टूलबार और मेनू का उपयोग किया जाता है।

लेकिन चूंकि हमारा प्रोग्राम बहुत बड़ी संख्या में क्रियाएं नहीं करता है, इसलिए हम बटनों का भी उपयोग कर सकते हैं। यह इस मायने में सुविधाजनक है कि, मेनू के विपरीत, वे उस तत्व के बगल में स्थित होते हैं जिसके संबंध में वे जिस क्रिया को कॉल करते हैं वह निष्पादित होती है (उदाहरण के लिए, ऑब्जेक्ट जोड़ने और हटाने के लिए बटन ऑब्जेक्ट की सूची के बगल में स्थित होते हैं, और ज़ूम बटन अगले होते हैं) चित्र के अनुसार), जो निश्चित रूप से उपयोगकर्ता के लिए सुविधाजनक होगा।

इसके अलावा, आप उन पर उनका उद्देश्य बताते हुए हस्ताक्षर भी कर सकते हैं, जो सुविधाजनक भी है।

फॉर्म पर एक बटन घटक रखकर एक बटन बनाया जाता है। प्रोग्राम विकसित करते समय, इसकी कैप्शन प्रॉपर्टी का उपयोग किया जाता है - बटन पर शिलालेख, और रनटाइम पर, सक्षम प्रॉपर्टी का उपयोग बटन को निष्क्रिय करने या इसके विपरीत, इसे सक्रिय करने के लिए किया जाता है। (परिशिष्ट A, HideButtons() और showButtons() देखें)। उदाहरण के लिए, एक तालिका खोलते समय, हम एक योजना बनाने के लिए बटन सक्रिय करते हैं, और इसे बंद करते समय, हम उन्हें निष्क्रिय कर देते हैं।

4) ड्रॉप-डाउन सूचियाँ - उपयोगकर्ता को किसी सूची से किसी आइटम का चयन करने की अनुमति देने के लिए उपयोग किया जाता है। इसे मैन्युअल रूप से दर्ज करने की तुलना में यह कहीं अधिक सुविधाजनक है।

इस प्रोग्राम में, किसी ऑब्जेक्ट प्रकार को तालिका में दर्ज करने के लिए (DBComboBox, ऊपर चर्चा की गई है) और ऑब्जेक्ट तालिका (कॉम्बोबॉक्स) से ऑब्जेक्ट प्रकार को हटाने के लिए एक कॉम्बो बॉक्स का उपयोग किया जाता है।

DBComboBox और ComboBox के बीच अंतर यह है कि पहला एक टेबल फ़ील्ड से जुड़ा है, और दूसरा एक साधारण सूची है। एक सरल कॉम्बोबॉक्स सूची का उपयोग करने से आप तालिका और DBComboBox के साथ बातचीत की समस्याओं को हल कर सकते हैं जो तालिका से किसी ऑब्जेक्ट को हटाते समय उत्पन्न होती हैं।

5) स्क्रॉल बार - स्क्रॉलबॉक्स घटक का उपयोग करके कार्यान्वित किया गया; हमारे मामले में, योजना छवि को बड़ा करने पर उसे स्क्रॉल करना आवश्यक है। प्रोग्राम मैक्स पैरामीटर को बदलता है, जो स्केल के आधार पर अधिकतम स्क्रॉलिंग मात्रा निर्धारित करता है।

6) चेकबॉक्स (स्विच) - निर्धारित करें कि वे जिस विकल्प का प्रतिनिधित्व करते हैं वह सक्षम या अक्षम है।

बिल्डर में यह चेकबॉक्स घटक है।

प्रोग्राम में, चेकबॉक्स यह निर्धारित करते हैं कि निम्नलिखित सुविधाएँ सक्षम या अक्षम हैं:

मार्ग रेखाएँ खींचना;

योजना पर दूरी प्रदर्शित करना;

योजना पर वस्तु का प्रकार प्रदर्शित करना;

दूरी तालिका दिखाएँ.

चेकबॉक्स आमतौर पर सेटिंग मेनू में पाए जाते हैं। लेकिन हमारे प्रोग्राम की सरलता के कारण, वे ड्राइंग फ़ील्ड के बगल वाले पैनल पर प्रदर्शित होते हैं, जो उपयोगकर्ता के लिए बहुत सुविधाजनक है।

7) टैब - इस प्रोग्राम में टेबल और प्लान ड्राइंग अलग-अलग टैब पर स्थित होते हैं। मेरा मानना ​​​​है कि यह उपयोगकर्ता के लिए अधिक सुविधाजनक होगा, क्योंकि पूरा कार्यक्रम एक विंडो में समाहित है, और साथ ही, टेबल क्षेत्र और ड्राइंग क्षेत्र दोनों एक दूसरे के नुकसान के लिए स्थित नहीं हैं।

बिल्डर में दो प्रकार के टैब होते हैं: टैबकंट्रोल और पेजकंट्रोल।

प्रोग्राम पेजकंट्रोल का उपयोग करता है, क्योंकि, पहले के विपरीत, इस घटक में टैब पर विषम नियंत्रण हो सकते हैं। TabControl में, सभी पृष्ठ समान हैं।

8) डायलॉग एक बहुत ही सुविधाजनक उपकरण है जो उपयोगकर्ता के साथ ऐसे संवादों को लागू करने में मदद करता है जैसे कि सहेजना, फ़ाइल खोलना, प्रिंट करना और इस प्रोग्राम में उपयोग किए गए रंग का चयन करना।

सभी आवश्यक संवाद प्रपत्र पर रखे गए हैं, लेकिन उपयोगकर्ता के लिए अदृश्य रहते हैं। उन्हें प्रोग्राम द्वारा कॉल किया जाता है और मानक एक्सप्लोरर इंटरफ़ेस लागू किया जाता है।

OpenDialog और SaveDialog संवादों का उपयोग करके, प्रोग्राम उस फ़ाइल और निर्देशिका का नाम प्राप्त करता है जिसे उपयोगकर्ता चुनता है। PrintDialog का उपयोग करके, मुद्रण सेटिंग्स को कॉल किया जाता है। और ColorDialog आपको रंग चुनने में मदद करता है (इसका उपयोग चित्र के पृष्ठभूमि रंग का चयन करने के लिए किया जाता है)।

प्रत्येक उपयोगकर्ता-दृश्य इंटरफ़ेस घटक का उद्देश्य उपयोगकर्ता मैनुअल में वर्णित है।

यह ध्यान देने योग्य है कि प्रत्येक इंटरफ़ेस ऑब्जेक्ट में Align नामक एक संपत्ति होती है। यह आपको फॉर्म और पैनल के दाएं, बाएं, ऊपर या नीचे नियंत्रण को संरेखित करने की अनुमति देता है, और फॉर्म का आकार बदलने पर भी नियंत्रण वहीं रहता है। उदाहरण के लिए, चित्र के पास बटन वाला पैनल दाईं ओर संरेखित है, दूरियों की तालिका बाईं ओर संरेखित है, और चित्र का फ़ील्ड alClient से संरेखित है, जो तालिका और पैनल के बीच सभी खाली स्थान लेता है . जैसे-जैसे आप फॉर्म को फैलाएंगे, ये नियंत्रण भी अपनी जगह पर बने रहते हुए खिंचेंगे।

संरेखण संपत्ति का उपयोग करना सुविधाजनक है क्योंकि डिज़ाइन चरण में आप आवश्यकतानुसार घटकों को व्यवस्थित कर सकते हैं, और फिर आपको हर बार आकार बदलने पर उनके आकार को मैन्युअल रूप से सेट करने की आवश्यकता नहीं होती है।

5.5 एल्गोरिदम की कुछ विशेषताएं

ड्राइंग एल्गोरिथ्म

चूंकि इसका पहले ही कुछ विस्तार से वर्णन किया जा चुका है, मैं इसके विकास के संबंध में केवल एक नोट जोड़ूंगा: यह एक अनुरूप प्रक्षेपण में एक नक्शा खींचता है। वे मानचित्र पर और प्रकृति में दिशाओं के बीच कोणों की समानता बनाए रखते हैं। इसी समय, प्रदेशों के आयाम विकृत हो गए हैं।

इस प्रकार का प्रक्षेपण इसलिए चुना गया क्योंकि इसके लिए एक समन्वय ग्रिड बनाना सबसे आसान है, क्योंकि इसमें सीधी रेखाएँ होती हैं। (मानचित्र प्रक्षेपण और ग्रिड निर्देशांक पर अधिक जानकारी के लिए परिशिष्ट ई देखें।)

दूरियों की गणना वास्तविक आकारों में की जाती है।

दूरी की गणना के लिए एल्गोरिदम.

इसका वर्णन "एल्गोरिदम का विवरण" में भी विस्तार से किया गया है। यह ड्राइंग एल्गोरिदम का हिस्सा है.

यह कार्यक्रम के लेखक द्वारा प्राप्त किया गया था, क्योंकि इसके अनुरूप कहीं भी नहीं पाए गए थे। इसकी ख़ासियत यह है कि पृथ्वी की सतह की वक्रता को ध्यान में रखना और चाप की लंबाई की गणना करना आवश्यक है। यह विशेष रूप से कठिन है यदि बिंदु समान अक्षांश और देशांतर पर स्थित हों।

पृथ्वी की सतह का आकार एक गोले के रूप में लिया जाता है। इससे त्रुटियाँ हो सकती हैं, क्योंकि पृथ्वी का आकार वास्तव में एक दीर्घवृत्ताकार है, लेकिन यह गणनाओं को बहुत सरल बनाता है। पृथ्वी की औसत त्रिज्या 6371 किमी मानी जाती है। इससे लगभग 0.3% की त्रुटि मिलती है।

यह भी ध्यान दिया जाना चाहिए कि दूरी की गणना करने के लिए, विशेष रूप से सबसे जटिल मामले में, कई अनुक्रमिक गणनाओं का उपयोग किया जाता है, जिसके परिणामस्वरूप त्रुटि जमा होती है। त्रुटि का परिमाण किसी कोण के डिग्री माप को रेडियन में बदलने और इसके विपरीत से भी प्रभावित होता है। लेकिन कंप्यूटर गणना की आधुनिक सटीकता के साथ, यह त्रुटि छोटी होगी, और इसके अलावा, कार्य ने यह संकेत नहीं दिया कि मार्ग का अनुमान सटीक होना चाहिए।

एक टेबल बनाना

यहां यह कहा जाना चाहिए कि मुझे अपनी किसी भी पुस्तक में प्रोग्रामेटिक रूप से तालिका बनाने के लिए कोई एल्गोरिदम नहीं मिला है। सभी साहित्य में डेटाबेसडेस्कटॉप में टेबल बनाने के बारे में बात की गई है, जिससे उपयोगकर्ता के लिए नई टेबल बनाने की समस्या को हल करने के लिए और भी बड़ा प्रोग्राम स्थापित करना असुविधाजनक होगा।

लेकिन फिर भी, यह एल्गोरिदम बिल्डर सहायता में पाया गया, हालांकि इसमें त्रुटियां थीं।

कार्यक्रम इसका एक कार्यशील उदाहरण भी प्रस्तुत करता है (परिशिष्ट A, TBNewFileClick देखें)।

इस एल्गोरिदम की एक विशेषता के रूप में, यह ध्यान दिया जाना चाहिए कि तालिका निर्माण प्रक्रिया CreateTable() को कॉल करने से पहले, आपको सभी फ़ील्ड प्रारंभ करने की आवश्यकता है, जिसमें उनका नाम, प्रकार, लंबाई (यदि आवश्यक हो), और आवश्यक मान (चाहे यह आवश्यक हो) इंगित करना होगा या नहीं) . फ़ील्ड प्रारंभ करने के बाद, हम एक कुंजी फ़ील्ड घोषित करते हैं, और उसके बाद ही तालिका निर्माण प्रक्रिया को कॉल करते हैं। इसके बाद, आपको नई तालिका को तालिका घटक से बांधना होगा ताकि आप ग्रिड और नेविगेटर का उपयोग करके इसके साथ काम कर सकें। SaveDialog का उपयोग करके नई तालिका का फ़ाइल नाम अनुरोध किया जाता है।

ग्राफ़िक्स आकार की समस्या

कार्यक्रम के विकास के दौरान, चित्र बनाने में एक गंभीर समस्या उत्पन्न हुई - प्रपत्र का आकार बदलते समय, चित्र का आकार बदलना चाहिए था, लेकिन ऐसा नहीं हुआ।

कारण यह था कि छवि घटक का आकार फिर भी बदल गया, लेकिन चित्र का आकार वही रहा। इस संबंध में, ResizeForm प्रक्रिया बनाई गई (परिशिष्ट A देखें), जिसने फॉर्म के आकार में परिवर्तन का जवाब दिया और छवि घटक के बदले हुए आकार के अनुसार छवि का आकार बदल दिया।

5.6 परीक्षण

प्रोग्राम के संपूर्ण डिज़ाइन के दौरान, इसका परीक्षण और डिबग किया गया। दो बिंदुओं पर विशेष ध्यान दिया गया - तालिकाओं के साथ काम करने की शुद्धता और योजना बनाने की शुद्धता।

तालिकाओं के साथ काम करते समय, पहला कदम खोलने, तालिकाएँ बनाने और ड्राइंग से जुड़ी किसी भी समस्या का पता लगाना था। उदाहरण के लिए, यदि आप ड्राइंग बटनों को निष्क्रिय नहीं करते हैं, तो तालिका खुली न होने पर उन पर क्लिक करने से त्रुटि हो सकती है। इस त्रुटि को खत्म करने के लिए, यदि कोई खुली तालिका नहीं है, तो बटन निष्क्रिय कर दिए जाते हैं।

एक अन्य महत्वपूर्ण बग जिसे ठीक कर दिया गया है वह है ग्राफ़िक्स आकार का मुद्दा (ऊपर देखें)।

यह सुनिश्चित करना भी आवश्यक था कि चेकबॉक्स को अक्षम/सक्षम करते समय और फॉर्म का आकार बदलते समय, यदि उपयोगकर्ता ने अभी तक "ड्रा" बटन पर क्लिक नहीं किया है तो कोई चित्र नहीं खींचा जाएगा। प्रोग्राम में यह ट्रैकिंग ड्रॉ फ़्लैग द्वारा की जाती है, जो तब सेट होती है जब उपयोगकर्ता ड्रॉ बटन पर क्लिक करता है और क्लियर बटन पर क्लिक करने पर साफ़ हो जाता है। परीक्षण प्रक्रिया के दौरान, उन सभी स्थितियों की निगरानी की गई और डीबग किया गया जिनमें इस ध्वज की जाँच करना आवश्यक था।

परीक्षण का सबसे महत्वपूर्ण पहलू उस कंप्यूटर पर प्रोग्राम की कार्यक्षमता की जाँच करना था जिसमें बिल्डर स्थापित नहीं है। इससे निम्नलिखित निर्धारित करने में मदद मिली:

1) किसी प्रोग्राम को संकलित करते समय, आपको उपयोग की गई सभी लाइब्रेरीज़ को शामिल करना होगा। यह कंपाइलर सेटिंग्स में दो विकल्पों को अक्षम करके प्राप्त किया जाता है। साथ ही प्रोग्राम का एक्जीक्यूटेबल कोड बड़ा हो जाता है, लेकिन यह बिना बिल्डर के मशीन पर भी काम कर सकता है।

2) प्रोग्राम को बोर्लैंड डेटाबेस इंजन की आवश्यकता है। यदि यह आपके कंप्यूटर पर नहीं है, तो आपको इसे इंस्टॉल करना होगा।


6. कार्यक्रम विवरण

कार्यक्रम का उद्देश्य साइट योजना बनाने के लिए सूचना समर्थन प्रदान करना है। यह आपको एक तालिका में योजना बिंदुओं के बारे में डेटा संग्रहीत करने, उन्हें ग्राफ़िक रूप से प्रदर्शित करने, एक नई तालिका बनाने, वस्तुओं के प्रकार जोड़ने और हटाने, दूरी की गणना करने और मार्ग की लंबाई का अनुमान लगाने, कई मार्ग बनाने, परिणामों को फ़ाइल में सहेजने या प्रिंट करें.

प्रोग्राम विंडोज़ ऑपरेटिंग सिस्टम के लिए बनाया गया था और इसमें एक मानकीकृत और उपयोगकर्ता के अनुकूल इंटरफ़ेस है। इसके साथ ट्रेन मार्गों के साथ एक तालिका के रूप में एक उदाहरण भी आता है।


7. स्थापना अनुदेश

प्रोग्राम को स्थापित करने के लिए, निम्नलिखित आवश्यकताओं को पूरा किया जाना चाहिए: प्रोसेसर 233 मेगाहर्ट्ज या उच्चतर, रैम 16 एमबी, ओएस विंडोज98 या उच्चतर।

प्रोग्राम को स्थापित करने के लिए, आपको निम्नलिखित कार्य करना होगा:

1) प्रोग्राम के लिए एक नया फ़ोल्डर बनाएं।

2) उस माध्यम से जिस पर प्रोग्राम संग्रह स्थित है (फ्लॉपी डिस्क या डिस्क), इसे इस फ़ोल्डर में कॉपी करें।

3) इस फ़ोल्डर में संग्रह को अनपैक करें।

4) सुनिश्चित करें कि object.db और rasst.db फ़ाइलें प्रोग्राम के समान फ़ोल्डर में हैं।

5) सुनिश्चित करें कि इन फ़ाइलों के लिए "केवल पढ़ने के लिए" विशेषता साफ़ हो गई है। यदि नहीं, तो इसे हटा दें.

6) पुस्तकालयों के साथ संग्रह को विंडोज फ़ोल्डर में अनपैक करें।

7) अब आप प्रोग्राम लॉन्च कर सकते हैं और इसका इस्तेमाल कर सकते हैं।


8. उपयोगकर्ता मैनुअल 8.1 मुख्य मेनू "फ़ाइल" मेनू

प्रोग्राम में काम करना शुरू करने के लिए, आपको एक तालिका के साथ एक फ़ाइल खोलनी होगी या एक नई फ़ाइल बनानी होगी। यह फ़ाइल, ओपन और न्यू मेनू आइटम का उपयोग करके किया जा सकता है।

"खोलें" - मौजूदा तालिका खोलें। एक संवाद को कॉल करता है जिसमें उपयोगकर्ता को .db एक्सटेंशन वाली फ़ाइल का चयन करना होगा।

"नया" - एक नई तालिका बनाना। एक डायलॉग कॉल किया जाता है जिसमें उपयोगकर्ता नई तालिका का नाम निर्दिष्ट करता है।

"प्रिंट" - खुले टैब के आधार पर, एक चित्र या तालिका प्रिंट करता है। जब आप इस आइटम का चयन करते हैं, तो प्रिंट सेटिंग्स संवाद बॉक्स खुलता है; "ओके" बटन पर क्लिक करने के बाद, कार्य मुद्रण के लिए भेजा जाता है।

टेबल मेनू

"योजना बनाएं" - यदि तालिका खुली है, तो "योजना" टैब सक्रिय करता है और एक योजना बनाता है।

"ऑब्जेक्ट प्रकार जोड़ें" - ऑब्जेक्ट प्रकार जोड़ने के लिए फॉर्म को कॉल करता है।

"ऑब्जेक्ट प्रकार हटाएं" - किसी ऑब्जेक्ट प्रकार को हटाने के लिए फॉर्म को कॉल करता है।

सहायता मेनू

"कार्यक्रम के बारे में" - कार्यक्रम का नाम और लेखक के बारे में जानकारी प्रदर्शित करता है।


8.2 त्वरित बटन पैनल

इन बटनों की क्रियाएँ "फ़ाइल" मेनू में समान नाम के आइटम के समान हैं।

- "नया" - एक नई तालिका बनाना।

- "खोलें" - मौजूदा तालिका खोलें।

- "प्रिंट" - एक चित्र या तालिका प्रिंट करें।

8.3 टेबल टैब

टेबल ग्रिड - टेबल को इसमें लोड किया जाता है। इस ग्रिड का उपयोग करके, उपयोगकर्ता तालिका प्रविष्टियों को संपादित और देख सकता है।

नेविगेटर - ग्रिड के नीचे स्थित, आपको तालिका को संपादित करने और देखने की अनुमति देता है।

नेविगेटर बटन

- "पहला रिकॉर्ड" - तालिका में पहले रिकॉर्ड पर ले जाता है।

- "पिछला रिकॉर्ड" - तालिका में पिछले रिकॉर्ड पर ले जाता है।

- "अगला रिकॉर्ड" - तालिका में अगले रिकॉर्ड पर ले जाता है।

- "अंतिम रिकॉर्ड" - तालिका में अंतिम रिकॉर्ड पर ले जाता है।

- "रिकॉर्ड जोड़ें" - तालिका को संपादन मोड में डाल दिया गया है, सक्रिय रिकॉर्ड से पहले एक नया खाली रिकॉर्ड डाला गया है।

- "प्रविष्टि हटाएं" - पहले से अनुरोधित पुष्टिकरण के बाद, वर्तमान प्रविष्टि को हटा देता है।

- "संपादित करें" - वर्तमान प्रविष्टि संपादित करें।

- "परिवर्तन रद्द करें" - वर्तमान रिकॉर्ड में परिवर्तन रद्द करता है, उसका पिछला मान लौटाता है।

- "अद्यतन"। ग्रिड में तालिका को अद्यतन करता है.

नेविगेटर के नीचे वस्तुओं की एक सूची और वस्तुओं को हटाने और जोड़ने के लिए बटन हैं।

वस्तुओं की सूची - इसमें वस्तु प्रकारों की एक सूची होती है। जब आप सूची से एक प्रकार का चयन करते हैं, तो इसे तालिका में वर्तमान रिकॉर्ड में दर्ज किया जाता है।

ऑब्जेक्ट प्रकार जोड़ें - ऐड प्रकार फॉर्म को कॉल करता है। जब आप इसे जोड़ते हैं, तो यह तुरंत सूची में जुड़ जाता है।

ऑब्जेक्ट प्रकार हटाएँ - किसी ऑब्जेक्ट प्रकार को हटाने के लिए फ़ॉर्म को कॉल करता है।

ऑब्जेक्ट प्रकार प्रपत्र जोड़ें

इसमें पाठ दर्ज करने के लिए एक संपादन फ़ील्ड शामिल है जिसमें नए प्रकार का नाम दर्ज किया गया है।

"जोड़ें" - प्रपत्र को बंद किए बिना सूची और तालिका में एक ऑब्जेक्ट प्रकार जोड़ता है।

"ठीक है" - यदि ऑब्जेक्ट नहीं जोड़ा गया है, तो उसे सूची और तालिका में दर्ज करें, और फॉर्म बंद कर दें।

"रद्द करें" - बिना जोड़े फॉर्म बंद कर देता है।

ऑब्जेक्ट प्रकार प्रपत्र हटाएँ

वस्तुओं की सूची - इसमें से उपयोगकर्ता चुनता है कि किस वस्तु को हटाना है।

"हटाएं" - तालिका और सूची से चयनित ऑब्जेक्ट प्रकार को हटा देता है।

"सभी हटाएं" - ऑब्जेक्ट तालिका और सूचियों को पूरी तरह साफ़ करता है।

"ठीक है" - फॉर्म बंद कर देता है।


8.4 "योजना" टैब

ड्राइंग फ़ील्ड वह क्षेत्र है जहां योजना ड्राइंग प्रदर्शित की जाती है।

स्क्रॉल बार - तब दिखाई देते हैं जब आप "बड़ा करें" बटन पर क्लिक करके किसी छवि को बड़ा करते हैं। आपको बढ़ी हुई छवि को स्क्रॉल करने की अनुमति देता है।

दूरी तालिका - प्रत्येक मार्ग के लिए उसकी संख्या और खंडों की लंबाई, किलोमीटर में दर्शाती है। यदि "दूरी तालिका छुपाएं" चेकबॉक्स साफ़ हो जाता है तो तालिका दिखाई देती है।

"मानचित्र साफ़ करें" - चित्र फ़ील्ड साफ़ करता है।

"ड्रा" - एक योजना बनाता है।

"पृष्ठभूमि रंग" - आपको चित्र की पृष्ठभूमि का रंग चुनने की अनुमति देता है। जब आप इस बटन पर क्लिक करते हैं, तो एक रंग चयन संवाद बॉक्स प्रकट होता है।

"+ बड़ा करें" - योजना पर छवि को बड़ा करता है।

"- ज़ूम आउट करें" - योजना पर छवि को कम करता है। जब आप वृद्धि बटन दबाते हैं तो यह बटन सक्रिय हो जाता है।

"डिफ़ॉल्ट" - प्रारंभिक छवि आकार सेट करता है।

"मार्ग रेखाएं बनाएं" - यदि इसकी जांच की जाती है, तो योजना पर मार्ग बनाए जाएंगे; यदि नहीं, तो केवल बिंदु दर्शाए जाएंगे।

"मानचित्र पर दूरियाँ दिखाएँ" - यदि चेकबॉक्स चेक किया गया है, तो प्रत्येक मार्ग बिंदु के आगे दूरी इस बिंदु से पहले वाले खंडों की लंबाई के योग के रूप में प्रदर्शित होती है। "0" को मार्ग के पहले बिंदु के पास रखा गया है।

"मानचित्र पर ऑब्जेक्ट प्रकार दिखाएँ" - यदि चेकबॉक्स चेक किया गया है, तो ऑब्जेक्ट प्रकार प्रत्येक बिंदु के आगे प्रदर्शित होता है।

"दूरी तालिका छुपाएं" - यदि चेकबॉक्स चेक किया गया है, तो दूरी तालिका अदृश्य है। यदि साफ़ कर दिया जाए, तो तालिका ड्राइंग फ़ील्ड के दाईं ओर दिखाई देगी।

सभी चेकबॉक्स डिफ़ॉल्ट रूप से चेक किए गए हैं।


9. परीक्षण मामला

एक परीक्षण उदाहरण के रूप में, हम गोर्की रेलवे की कई ट्रेनों के मार्गों का चित्रण करेंगे।

आइए निम्नलिखित ट्रेनें लें:

एन 497जी गोर्की-मॉस्क - एडलर

एन 471जी गोर्की-मॉस्क - नोवोरोस्सिएस्क

एन 431जी गोर्की-मॉस्क - एडलर

एन 367जी गोर्की-मॉस्क - समारा

एन 059ए गोर्की-मॉस्क - सेंट पीटर्सबर्ग-ग्लेवन

एन 039जी गोर्की-मॉस्क - मॉस्को कुर्स्क

आइए तालिका में प्रत्येक मार्ग पर बिंदुओं के रूप में सबसे बड़ी आबादी वाले क्षेत्रों के निर्देशांक दर्ज करें। हम शहर के नामों का उपयोग वस्तुओं के रूप में करेंगे।

चावल। 9.1. "तालिका" टैब पर प्रोग्राम का सामान्य दृश्य, एक सूची का उपयोग करके किसी ऑब्जेक्ट का नाम रिकॉर्ड में दर्ज करना।


पहले, हमने रेड नॉट स्टेशन को ऑब्जेक्ट तालिका में जोड़ा था, लेकिन चूंकि हमें इसकी आवश्यकता नहीं है, इसलिए हम इसे हटा देंगे।

चावल। 9.2. किसी ऑब्जेक्ट प्रकार को हटाएँ.

ट्रेन 431 का रूट डायल करते समय, हमें व्लादिमीर की आवश्यकता होती है। चूँकि यह सूची में नहीं है, इसलिए आपको इसे जोड़ना होगा।

चावल। 9.3. ऑब्जेक्ट प्रकार जोड़ना.


इसलिए, हमने वे सभी मार्ग एकत्र कर लिए जो हम चाहते थे। परिणामस्वरूप, हमें इस प्रकार की एक तालिका प्राप्त हुई।

चावल। 9.4. मेज़

अब, अपने टैबलेट का उपयोग करके, हम एक योजना बनाएंगे।

चावल। 9.5. सभी शिलालेखों के साथ योजना की छवि।


डिफ़ॉल्ट रूप से, हम रेखाएँ, दूरियाँ और शहर के नाम प्रदर्शित करते हैं।

आइए देखें कि हस्ताक्षर के बिना मार्ग कैसे दिखेंगे।

चावल। 9.6. सभी शिलालेखों के बिना योजना की छवि।

अब जरा दूरियों पर नजर डालते हैं।

चावल। 9.7. केवल दूरियों के साथ योजना की छवि।


वास्तव में, उनकी गणना बहुत सटीक रूप से नहीं की गई थी, लेकिन ऐसा इसलिए है क्योंकि हमने इन मार्गों के सभी बिंदुओं को ध्यान में नहीं रखा, और लिए गए निर्देशांक भी पूरी तरह से सही नहीं थे - वे मानचित्र पर "आंख से" निर्धारित किए गए थे।

आइए अब केवल शहरों के नाम के साथ अपनी योजना पर नजर डालते हैं।

चावल। 9.8. योजना की छवि केवल वस्तुओं के प्रकार दिखाती है।

चावल। 9.9. सभी हस्ताक्षरों के साथ बिंदुओं के रूप में योजना की छवि।


आप दूरियों की तालिका भी देख सकते हैं.

चावल। 9.11. दूरियों की दृश्य तालिका के साथ "योजना" टैब पर कार्यक्रम का सामान्य दृश्य।


निष्कर्ष

स्नातक कार्य के असाइनमेंट में रखा गया कार्य सफलतापूर्वक पूरा किया गया। विकसित कार्यक्रम समस्या विवरण में वर्णित प्रारंभिक शर्तों को पूरी तरह से संतुष्ट करता है। विशेष रूप से, प्रोग्राम ने तालिकाओं, ग्राफ़िक्स और फ़ाइलों के साथ कार्य को कार्यान्वित किया।

प्रोग्राम उपयोगकर्ता का कार्य विंडोज़ प्रोग्राम इंटरफ़ेस मानकों के अनुसार बनाए गए एक सरल इंटरफ़ेस का उपयोग करके किया जाता है।

इस परियोजना की क्षमताओं में और सुधार और विस्तार में सबसे छोटे मार्ग की गणना, वस्तुओं के आइकन, राहत छवियां और पृष्ठभूमि के रूप में मानचित्र छवि को लोड करने की क्षमता को शामिल करना शामिल है।


ग्रंथ सूची

1. पी. गुस्ताफसन, एम. कैशमैन, बी. स्वार्ट, जे. होलिंगवर्थ। बोर्लैंड सी++ बिल्डर 6. डेवलपर गाइड। - विलियम्स, 2004.

2. ए अर्खांगेल्स्की। C++ बिल्डर 6 में प्रोग्रामिंग - बिनोम, 2002।

3. टी.ए. पावलोव्स्काया। सी/सी++. उच्च स्तरीय भाषा में प्रोग्रामिंग. - पीटर, 2001.


परिशिष्ट परिशिष्ट ई. मानचित्र प्रक्षेपण और ग्रिड मानचित्र

बिना टूट-फूट और सिलवटों के एक गोलाकार सतह को समतल पर प्रकट करना असंभव है, अर्थात, किसी समतल पर इसकी योजना छवि को इसकी सभी रूपरेखाओं की पूर्ण ज्यामितीय समानता के साथ विकृतियों के बिना प्रस्तुत नहीं किया जा सकता है। द्वीपों, महाद्वीपों और समतल सतह पर प्रक्षेपित विभिन्न वस्तुओं की रूपरेखा की पूर्ण समानता केवल एक गेंद (ग्लोब) पर ही प्राप्त की जा सकती है। एक गेंद (ग्लोब) पर पृथ्वी की सतह की छवि पैमाने में समान, कोण में समान और आकार में समान होती है।

मानचित्र पर इन ज्यामितीय गुणों को एक साथ और पूरी तरह से संरक्षित करना असंभव है। एक विमान पर निर्मित भौगोलिक ग्रिड, जो मेरिडियन और समानताएं दर्शाती है, में कुछ विकृतियां होंगी, इसलिए पृथ्वी की सतह पर सभी वस्तुओं की छवियां विकृत हो जाएंगी। विकृतियों की प्रकृति और सीमा कार्टोग्राफिक ग्रिड के निर्माण की विधि पर निर्भर करती है जिसके आधार पर मानचित्र संकलित किया जाता है।

किसी समतल पर दीर्घवृत्ताकार या गोले की सतह का प्रदर्शन मानचित्र प्रक्षेपण कहलाता है। मानचित्र प्रक्षेपण विभिन्न प्रकार के होते हैं। उनमें से प्रत्येक एक विशिष्ट कार्टोग्राफिक ग्रिड और उसमें निहित विकृतियों से मेल खाता है। एक प्रकार के प्रक्षेपण में, क्षेत्रों के आयाम विकृत होते हैं, दूसरे में - कोण, तीसरे में - क्षेत्र और कोण। साथ ही, बिना किसी अपवाद के सभी अनुमानों में, रेखाओं की लंबाई विकृत हो जाती है।

कार्टोग्राफिक अनुमानों को विरूपण की प्रकृति, मेरिडियन और समानांतरों की छवि के प्रकार (भौगोलिक ग्रिड) और कुछ अन्य विशेषताओं के अनुसार वर्गीकृत किया जाता है। विकृतियों की प्रकृति के आधार पर, निम्नलिखित मानचित्र प्रक्षेपणों को प्रतिष्ठित किया जाता है:

समकोणीय, मानचित्र पर और प्रकृति में दिशाओं के बीच कोणों की समानता बनाए रखना। चित्र E.1 एक विश्व मानचित्र दिखाता है जिस पर कार्टोग्राफिक ग्रिड समकोणीयता की संपत्ति को बरकरार रखता है। मानचित्र कोनों की समानता बरकरार रखता है, लेकिन क्षेत्रों के आकार विकृत हो जाते हैं। उदाहरण के लिए, मानचित्र पर ग्रीनलैंड और अफ्रीका का क्षेत्रफल लगभग समान है, लेकिन वास्तव में अफ्रीका का क्षेत्रफल ग्रीनलैंड के क्षेत्रफल से लगभग 15 गुना है।

चित्र.ई.1 अनुरूप प्रक्षेपण में विश्व मानचित्र।

आकार में समान, मानचित्र पर क्षेत्रों की पृथ्वी के दीर्घवृत्त पर संबंधित क्षेत्रों की आनुपातिकता को संरक्षित करते हुए। चित्र E.2 एक समान क्षेत्र प्रक्षेपण में तैयार किया गया विश्व का मानचित्र दिखाता है। यह सभी क्षेत्रों की आनुपातिकता को बरकरार रखता है, लेकिन आंकड़ों की समानता विकृत हो जाती है, यानी कोई समकोणीयता नहीं होती है। ऐसे मानचित्र पर मध्याह्न रेखाओं और समानताओं की पारस्परिक लंबवतता केवल मध्य मध्याह्न रेखा के साथ ही संरक्षित रहती है।

समदूरस्थ, किसी भी दिशा में एक स्थिर पैमाना बनाए रखना;

मनमाना, कोणों की समानता, क्षेत्रों की आनुपातिकता, या पैमाने की स्थिरता को संरक्षित नहीं करना। मनमाने अनुमानों का उपयोग करने का उद्देश्य मानचित्र पर विकृतियों का अधिक समान वितरण और कुछ व्यावहारिक समस्याओं को हल करने की सुविधा है।


चावल। ई. 2 समान क्षेत्र प्रक्षेपण में विश्व मानचित्र।

छवि के प्रकार के आधार पर, मानचित्र प्रक्षेपण के मेरिडियन और समानांतरों के ग्रिड को शंक्वाकार, बेलनाकार, अज़ीमुथल आदि में विभाजित किया जाता है। इसके अलावा, इनमें से प्रत्येक समूह के भीतर विरूपण की विभिन्न प्रकृति (अनुरूप, समान क्षेत्र) के प्रक्षेपण हो सकते हैं , वगैरह।)। शंक्वाकार और बेलनाकार प्रक्षेपणों का ज्यामितीय सार इस तथ्य में निहित है कि मेरिडियन और समानताएं का एक ग्रिड शंकु या सिलेंडर की पार्श्व सतह पर प्रक्षेपित किया जाता है और इसके बाद इन सतहों को एक विमान में तैनात किया जाता है। अज़ीमुथल प्रक्षेपणों का ज्यामितीय सार इस तथ्य में निहित है कि मेरिडियन और समानताएं का एक ग्रिड किसी ध्रुव या सेकेंट पर गेंद के स्पर्शरेखा वाले विमान पर कुछ समानांतर के साथ प्रक्षेपित किया जाता है। किसी विशेष मानचित्र के लिए विकृतियों की प्रकृति, परिमाण और वितरण के संदर्भ में सबसे उपयुक्त कार्टोग्राफिक प्रक्षेपण का चयन मानचित्र के उद्देश्य, सामग्री के साथ-साथ मैप किए गए क्षेत्र के आकार, विन्यास और भौगोलिक स्थिति के आधार पर किया जाता है। कार्टोग्राफिक ग्रिड के लिए धन्यवाद, सभी विकृतियाँ, चाहे वे कितनी भी बड़ी क्यों न हों, अपने आप में मानचित्र पर चित्रित वस्तुओं की भौगोलिक स्थिति (निर्देशांक) निर्धारित करने की सटीकता को प्रभावित नहीं करती हैं। साथ ही, कार्टोग्राफिक ग्रिड, प्रक्षेपण की एक ग्राफिक अभिव्यक्ति होने के नाते, मानचित्र पर माप करते समय विकृतियों की प्रकृति, परिमाण और वितरण को ध्यान में रखने की अनुमति देता है। इसलिए, कोई भी भौगोलिक मानचित्र पृथ्वी की सतह की गणितीय रूप से निर्धारित छवि है।

2005 - 2010 के लिए एगिंस्की ब्यूरैट ऑटोनॉमस ऑक्रग के व्यक्तिगत सहायक भूखंड, जो एक मसौदा संस्करण में तैयार किया गया था। 4. एगिन्स्की ब्यूरैट ऑटोनॉमस ऑक्रग में ग्रामीण आबादी के व्यक्तिगत सहायक भूखंडों के समर्थन में सरकारी निकायों की गतिविधियों में सुधार के लिए मुख्य दिशाएँ 4.1 एगिन्स्की में व्यक्तिगत सहायक भूखंडों के विकास के लिए समस्याएं और प्राथमिकताएँ...

परिवारों के अध्ययन से मनोवैज्ञानिक, शैक्षणिक और समाजशास्त्रीय तरीकों का विकास हुआ है जो आधुनिक परिवार के बारे में विचारों को गहरा और विस्तारित करते हैं। अध्याय 3. वोरोनोव्का गांव में युवा परिवारों के साथ सामाजिक कार्य के लिए सामाजिक समस्याएं और संभावनाएं 3.1 सामान्य विशेषताएं पी। वोरोनोव्का, शेगार्स्की जिला, टॉम्स्क क्षेत्र, शेगार्स्की जिला टॉम्स्क के दक्षिणी भाग में स्थित है...




बच्चों के लिए प्रावधान और सहायता; - वर्तमान में रूस में मातृत्व और बचपन का समर्थन करने के लिए लक्षित कार्यक्रमों के वित्तपोषण के लिए एक तंत्र विकसित और कार्यान्वित किया गया है। 2. मातृत्व और बचपन का समर्थन करने के लिए राज्य की नीति के कार्यान्वयन के लिए वित्तीय तंत्र 2.1 सामाजिक लाभों के भुगतान के लिए प्रक्रिया और शर्तें आज तक, रूस ने लाभों की एक काफी विकसित प्रणाली विकसित की है, ...