Wednesday 27 July 2016

DATA FLOW DIAGRAM (DFD)

എങ്ങനെ ആണ് ഒരു സോഫ്റ്റ്‌വെയർ വികസിപ്പിക്കുവാനായി അതിന്റെ DFD ചിത്രം വരക്കുന്നതെന്നു നമുക്ക് നോക്കാം. ആദ്യമായി DFD (DATA FLOW DIAGRAM ) എന്താണെന്നു  മനസ്സിലാക്കാം. ഒരു സോഫ്റ്റ്‌വെയർ നു അതിന്റെ ഉപയോക്താവ് (USER ) നൽകുന്ന ഇൻപുട് ഡാറ്റ എങ്ങനെ യൂസെറിന് വേണ്ട ഔട്ട്പുട്ട് ഡാറ്റ ആയി രൂപാന്തര പെടുന്നു എന്നതിന്റെ ചിത്ര രൂപം ആണ് DFD.  അതായത് ഡാറ്റ യുടെ രൂപാന്തരം ആണ് DFD യിൽ നമ്മൾ കാണുന്നത്.
DFD represents the transformation of data that takes inside a software system. Simply a DFD shows, how an input user data is transformed into the required output data.

ഉദാഹരണമായി രണ്ടു സംഘ്യകൾ കൂട്ടാനുള്ള കമ്പ്യൂട്ടർ പ്രോഗ്രാം എടുക്കുക. ഇവിടെ യൂസർ നൽകുന്ന ഇൻപുട് ഡാറ്റ രണ്ടു സംഖ്യകൾ ആയിരിക്കും. ഈ രണ്ടു സംഖ്യകൾ കൂട്ടി, അതിന്റെ ഉത്തരം ആയ ഒരു സംഖ്യാ ആണ് യൂസെറിന് അവസാനം ലഭിക്കുക. ഈ രണ്ടു സംഖ്യകളെ  , എങ്ങനെ പ്രോഗ്രാം അവസാനം കിട്ടിയ ഒറ്റ സംഖ്യാ ആയി മാറ്റി  എന്നത് DFD യിലൂടെ നമുക്ക് മനസ്സിലാക്കാൻ ആകും.

ഒരു DFD  വരക്കാനായി നമ്മൾ ഉപയോഗിക്കേണ്ട symbols  എന്തെല്ലാം ആണെന്ന് ചുവടെ ചേർക്കുന്നു. DFD യിൽ ആകെ നാല് symbols  ആണ്  ഉപയോഗിക്കുന്നത്.
 Image result for data flow diagram symbols

 

1. Entity or input/output: സോഫ്റ്റ്‌വെയർ ഉപയോഗിക്കുന്ന വ്യക്തികൾ , മറ്റു സിസ്റ്റം തുടങ്ങിയവയെ നമ്മൾ entity ആയി DFD  യിൽ രേഖപ്പെടുത്തും. ഒരു ചതുരം (Rectangle) ആണ് entity  യെ രേഖപെടുത്താനായി നാം ഉപയോഗിക്കുന്നത്.
An object or person, who is producing or consuming data. Those physical entities external to the software system such as people, departments, other companies, other systems or even a logical entity like bank account.

2. Process : ഒരു DFD യുടെ കാതൽ എന്നത് process  ആണ്. ഒരു സോഫ്റ്റ്‌വെയർ ചെയുന്ന ഏതു പ്രവർത്തിയെയും നമുക്ക്  process  ആയി രേഖപെടുത്താം. ഒരു സോഫ്റ്റ്‌വെയർ ഒന്നിലധികം പ്രവർത്തികൾ ചെയ്യുന്നുണ്ടാകും. ചിലപ്പോൾ ഒരു പ്രവർത്തിക്കുള്ളിൽ, മറ്റു ചെറിയ പ്രവർത്തികൾ ചെയ്യുന്നുണ്ടാകും. ഇതിനെ നമ്മൾ nested process എന്ന് വിളിക്കും. process ഇല്ലാതെ ഒരു DFD യും വരക്കാൻ സാധിക്കില്ല. അഥവാ ഏതൊരു DFD യിലും ചുരുങ്ങിയത് ഒരു process എങ്കിലും ഉണ്ടാകണം.  Process രേഖപെടുത്താനായി നമ്മൾ ഒരു വൃത്തം (circle or bubble)  ആണ് ഉപയോഗിക്കേണ്ടത്. അതുകൊണ്ടു തന്നെ DFD ചിത്രങ്ങളെ  BUBBLE CHART എന്നും പറയും.
Any activity or function performed by the software system. 


3. Data store: ഏതൊരു സോഫ്റ്റ്‌വെയർ നും  ഡാറ്റ സൂക്ഷിക്കേണ്ടതായി വരാം. ഡാറ്റ സ്റ്റോർ ചെയ്യാൻ ഉപയോഗിക്കുന്ന ഏതൊരു വസ്തുവിനെയും നമ്മൾ ഒരു ഡാറ്റ സ്റ്റോർ (data  store ) ആയി DFD യിൽ രേഖപ്പെടുത്തും. രണ്ടു സമാന്തര രേഖകൾ (parallel lines )ആണ് data  store  ആയി രേഖപ്പെടുത്തുന്നത്. ഡാറ്റ സൂക്ഷിക്കാനായി മിക്ക സോഫ്റ്റ്‌വെയർ ഉം ഉപയോഗിക്കുന്നത് ഡാറ്റബേസ് (data base ) ആണെന്ന് ഓർക്കുക. ചില സോഫ്റ്റ്‌വെയർ ഹാർഡ് ഡിസ്ക്, സെർവർ , external  storage  മാധ്യമങ്ങൾ ആയ സി ഡി , ഡി.വി.ഡി , ഫ്ലോപ്പി , മെമ്മറി സ്റ്റിക് തുടങ്ങിയവ ഡാറ്റ സ്റ്റോർ ആയി ഉപയോഗിക്കും.

Data store represents a logical file or a data base or any media which stores data. It can be online or 'hard copy' 

4. Data flow: ഡാറ്റയുടെ  നീക്കങ്ങൾ (FLOW ) രേഖപെടുത്തുന്നതിനായി ആണ് നമ്മൾ ARROW ചിഹ്നം ഉപയോഗിക്കുന്നത്. ഉപയോക്താവ് (USER) കൊടുക്കുന്ന ഇന്പുട് ഡാറ്റ പല പ്രക്രിയകളിലൂടെ (process) കടന്നു പോകേണ്ടി വരും. ആ കടന്നു പോക്കിന്റെ സഞ്ചാര ദിശ രേഖപ്പെടുത്താനായി നമ്മൾ DATAFLOW  ഉപയോഗിക്കുന്നു. 
Represents the flow of data between entities, processes and data stores.



DFD  notations  നാല് വിധം ഉണ്ട്.
1. YOURDON - DEMARCO  NOTATION

2. GANE & SARSON NOTATION
3. SSADM
4. UML / UNIFIED NOTATION

ഈ പറഞ്ഞ നാല് NOTATION കളിലും ഉപയോഗിക്കുന്ന ചിഹ്നങ്ങൾ മാത്രമേ മാറുന്നുള്ളു. പ്രാഥമിക നിയമങ്ങൾ  (BASIC  RULES ) എല്ലാം ഒന്ന് തന്നെയാണ്. ഇതിൽ YOURDON & DEMARCO NOTATION ആണ് നമ്മൾ കൂടുതലായും ഉപയോഗിക്കുന്നത്. ഈ ബ്ലോഗിൽ ഉള്ള എല്ലാ DFD യും YOURDON NOTATION  വെച്ച് വരച്ചിട്ടുള്ളവയാണ്. നിങ്ങള്ക്ക് ഇതിൽ ഏതു notation ഉപയോഗിച്ചും DFD വരക്കാം. പക്ഷെ വ്യത്യസ്ത notation കളിലെ ചിഹ്നങ്ങൾ mix  ചെയ്തു വരക്കാൻ പാടില്ല. അതായത് നിങ്ങൾ YOURDON  notation  ആണ് ഉപയോഗിക്കുന്നതെങ്കിൽ, Entity, Process, Data store, Data flow തുടങ്ങിയവയുടെ YOURDON notation വേണം ഉപയോഗിക്കാൻ. അല്ലാതെ അതിനുള്ളിൽ GANE & SARSON notations ഉപയോഗിക്കാൻ പാടുള്ളതല്ല.




ഇനി ഒരു സോഫ്റ്റ്‌വെയർ ന്റെ DFD  എങ്ങനെ വരാക്കാമെന്നു നമുക്ക് മനസ്സിലാക്കാം. DFD യുടെ തത്വം (principle) top -down  approach ആണ്. TOP - DOWN APPROACH മുഴുവൻ സിസ്റ്റത്തെ ആദ്യം ഒരു ഒറ്റ പ്രക്രിയ (single  process) ആയി കാണുന്നു. ഈ process നെ പിന്നീട് ചെറിയ ചെറിയ sub process കളായി മാറ്റുന്നു. 

It refers to a style of programming where an application is constructed starting with a high-level description of what it is supposed to do, and breaking the specification down into simpler and simpler pieces, until a level has been reached that corresponds to the primitives of the programming language to be used. 

ഉദാഹരണമായി നമുക്ക് ഒരു CALCULATOR സോഫ്റ്റ്‌വെയർ ആണ് നിർമിക്കേണ്ടതെന്നു കരുതുക. TOP -DOWN  APPROACH ൽ നാം ആദ്യം calculator എന്നൊരു main function define ചെയ്യുക. ഈ മെയിൻ function ഉള്ളിൽ ആവും CALCULATOR എന്ന സോഫ്റ്റ്‌വെയർ ചെയ്യേണ്ട അടിസ്ഥാന functions ആയ add(), subtract(), multiply(), divide() തുടങ്ങിയവ നമ്മൾ നിർവചിക്കുക (defining). 
ചുവടെ കൊടുത്തിരിക്കുന്ന C പ്രോഗ്രാം നോക്കുക.
void calculator()
{
add();
subtract();
multiply();
divide();
}

ഈ പ്രോഗ്രാമിൽ നമ്മൾ calculator എന്നൊരു മെയിൻ function നിർവചിച്ചിരിക്കുന്നു. ആ function ഉള്ളിൽ, calculator ചെയ്യേണ്ട മറ്റു ചെറിയ sub functions (add,subtract,multiply,divide) നിർവചിച്ചിരിക്കുന്നു. ഇതാണ് TOP - DOWN programming approach. 
അപ്പോൾ ഏതൊരു സോഫ്റ്റ്‌വെയർ സിസ്റ്റത്തിന്റെയും DFD വരക്കാനായി നമ്മൾ ആദ്യം ആ സിസ്റ്റത്തിന്റെ ഒരു single process ആയി രേഖപ്പെടുത്തുക. ഇതാണ് DFD യുടെ പ്രാഥമിക നില (basic  level ). ഒരു സോഫ്ട്‍വെയറിനു പല levels ൽ ഉള്ള DFD   ഉണ്ടാകും. ഏറ്റവും basic level നു നാം Level 0 DFD എന്ന് വിളിക്കും. തുടർന്ന് വരുന്നതിനെ Level 1, Level 2, Level 3.......... Level n എന്നിങ്ങനെ ആകും.

ഒരു സോഫ്ട്‍വെയറും , അത് ഉപയോഗിക്കുന്ന ENTITIES ഉം തമ്മിൽ കൈ മാറുന്ന ഡാറ്റകളെ ആണ്  LEVEL 0 DFD യിൽ രേഖപ്പെടുത്തുന്നതു. ചുരുക്കത്തിൽ ഏതു CONTEXT ൽ ആണ് ഈ സോഫ്റ്റ്‌വെയർ ഉപയോഗിക്കുക. ആരൊക്കെയാണ് ഈ സോഫ്ട്‍വെയറുമായി ബന്ധപ്പെടുക തുടങ്ങിയവ ലെവൽ 0 DFD യിൽ നിന്ന് നമുക്ക് മനസ്സിലാക്കാൻ സാധിക്കും.  അതിനാലാണ് ലെവൽ 0 DFD യെ CONTEXT DIAGRAM എന്നും വിളിക്കുന്നത്.

Level 0 DFD വരക്കാനുള്ള നിർദ്ദേശങ്ങൾ ചുവടെ ചേർക്കുന്നു. 
1. Represent the entire software system as a single process and name that process with a name as same as that of the software system.
ആദ്യമായി മുഴുവൻ സിസ്റ്റത്തെ ഒരു single process ആയി ഒരു വൃത്തത്തിനുള്ളിൽ (circle) രേഖപ്പെടുത്തുക. DFD വരയ്ക്കുമ്പോൾ എല്ലാ പ്രോസസ്സിനും അതിനു യോജിക്കുന്ന രീതിയിൽ ഉള്ള ഒരു പേര് കൊടുത്തിരിക്കണം. ലെവൽ 0 DFD യിൽ ഒരേയൊരു പ്രോസസ്സ്  മാത്രമേ ഉണ്ടാകുള്ളൂ. ആ പ്രോസസ്സിന്റെ പേര് , ആ സോഫ്റ്റ്‌വെയർ സിസ്റ്റത്തിന്റെ പേര് തന്നെ ആകുന്നത് അഭികാമ്യം.

ഉദാഹരണമായി calculator സോഫ്ട്‍വെയറിന്റെ ലെവൽ 0 DFD യിലെ പ്രോസസ്സിന്റെ പേര് calculator എന്നായിരിക്കണം.  
Library management software ന്റെ DFD ആണെങ്കിൽ, അതിലെ ലെവൽ 0 പ്രോസസ്സിന്റെ പേര്  Library management system (LMS) എന്നായിരിക്കണം. 
ഒരു compiler സോഫ്റ്റ്‌വെയർ ആണെങ്കിൽ ലെവൽ 0 പ്രോസസ്സിന്റെ പേര് compiler എന്നാകണം. 
ചുരുക്കത്തിൽ ലെവൽ 0 DFD യിൽ ഉള്ള ഒരേയൊരു പ്രോസസ്സ് , ആ പ്രോസസ്സിന്റെ പേര് എപ്പോഴും ആ സോഫ്റ്റ്‌വെയർ സിസ്റ്റത്തിന്റെ പേര് തന്നെ ആയിരിക്കും. അതിനാൽ തന്നെ ലെവൽ 0 DFD process name എപ്പോഴും noun (നാമം) ആയിരിക്കണം.  
പ്രത്യേകം ശ്രദ്ധിക്കുക: ലെവൽ 0 DFD പ്രോസസ്സിനു ഒഴികെ മറ്റു ഏതു ലെവലിൽ ഉള്ള DFD പ്രോസസ്സിന്റെയും പേര് verb (ക്രിയ) ആയിരിക്കണം. കാരണം പ്രോസസ്സ് (process) എന്നാൽ പ്രക്രിയ  എന്നാണല്ലോ .


2. Identify the actors or entities interacting with the software system.  

ഈ സോഫ്റ്റ്‌വെയർ സിസ്റ്റവുമായി ബന്ധപ്പെടുന്ന entites (വ്യക്തികൾ, മറ്റു സോഫ്ട്‍വെയറുകൾ) തിരിച്ചറിയുകയാണ് ഡിസൈനറുടെ അടുത്ത കർത്തവ്യം. സോഫ്റ്റ്‌വെയർ നു ഏതെങ്കിലും ഇന്പുട് ഡാറ്റ കൊടുക്കുകയോ, അല്ലെങ്കിൽ സോഫ്ട്‍വെയറിൽ നിന്ന് എന്തെങ്കിലും ഔട്ട്പുട്ട് ഡാറ്റ സ്വീകരിക്കുകയോ ചെയ്യുന്ന entities നെയാണ് ലെവൽ 0 DFD യിൽ rectangle  ബോക്സിസിൽ രേഖപ്പെടുത്തേണ്ടത്. 

ഉദാഹരണമായി CALCULATOR സോഫ്റ്റ്‌വെയർ ഉപയോഗിക്കുന്നത് ഒരു സാധാരണ വ്യക്തി ആകാം. ആ വ്യക്തിയാണ് ഇന്പുട് ആയി സംഖ്യകൾ കൊടുക്കുകയും, എന്ത് ഓപ്പറേഷൻ ചെയ്യണമെന്ന് തീരുമാനിക്കുകയും ചെയ്യുന്നത്. അത് കൊണ്ട് CALCULATOR സോഫ്ട്‍വെയറിൽ ഒരേയൊരു എന്റിറ്റിയെ (entity)ഉള്ളു. അത് user  (യൂസർ) ആണ്.  യൂസർ എന്ന എന്റിറ്റിയെ CALCULATOR എന്ന പ്രോസസ്സിന്റെ വശത്തായി  വരക്കുക.
CALCULATOR സോഫ്ട്‍വെയറിൽ ആകെ ഒരു എന്റിറ്റിയെ ഉള്ളു. ചില സോഫ്ട്‍വെയറുകളിൽ ഒന്നിലധികം എന്റിറ്റീസ് ഉണ്ടാകും. LIBRARY MANAGEMENT SOFTWARE (LMS) നമുക്ക്  ഉദാഹരണമായി എടുക്കാം. LMS ഉപയോഗിക്കുന്നത് വ്യത്യസ്ത വ്യക്തികൾ ആണ്. ഒരു കോളേജ്  LMS ആണെങ്കിൽ , അതിന്റെ ഉപഭോക്ക്താക്കൾ ആ കോളേജിലെ ലൈബ്രേറിയൻ, സ്റ്റുഡൻറ്, അധ്യാപകർ(staff) തുടങ്ങിയവർ ആകും. ഇവർ ഓരോരുത്തരും ആ സോഫ്റ്റ്‌വെയർ ഉപയോഗിച്ച് ചെയുന്ന പ്രവർത്തികൾ വ്യത്യസ്തം ആയിരിക്കും. 

ലൈബ്രേറിയൻ ചെയ്യുന്ന ചില പ്രവർത്തികൾ:
1. പുതിയ മെമ്പറെ ചേർക്കുക.    Add new member
2. പുതിയ ബുക്ക് ലൈബ്രറി ഡാറ്റാബേസിൽ ചേർക്കുക. Update a book in library database
3. ബുക്ക് ഇഷ്യൂ ചെയ്യാൻ അനുവദിക്കുക. Permit to issue a book
4. ഓരോ ബുക്കുകളുടെയും എണ്ണവും, വിശദശാംശങ്ങളും നോക്കുക. തുടങ്ങിയവ  Check book count and book details etc.


സ്റ്റാഫ്  ചെയ്യുന്ന ചില പ്രവർത്തികൾ:
1. ബുക്ക് എടുക്കുക . Lend books
2. ബുക്ക് റിസേർവ് ചെയ്യുക.  Reserve books
3. ബുക്ക് എടുത്തതിന്റെ കാലാവധി പുതുക്കുക  Renew book
4. പുതിയ ബുക്കുകൾ  ലൈബ്രറിയിൽ ചേർക്കാൻ അപേക്ഷ നൽകുക. Request for ordering new books to library


സ്റ്റുഡൻറ്   ചെയ്യുന്ന ചില പ്രവർത്തികൾ:
1. ബുക്ക് എടുക്കുക . Lend books
2. ബുക്ക് റിസേർവ് ചെയ്യുക.  Reserve books
3. ബുക്ക് എടുത്തതിന്റെ കാലാവധി പുതുക്കുക  Renew book
4. ഫൈൻ അടക്കുക  Pay fine



LMS ൽ ഉള്ള ഈ പറഞ്ഞ മൂന്നു എന്റിറ്റിസിനെയും ലെവൽ 0 പ്രോസസ്സിനു ചുറ്റുമായി രേഖപ്പെടുത്തുക.

ഇനി ഒരു Compiler ആണെങ്കിൽ അതിന്റെ ഉപയോക്താവ് തീർച്ചയായും ഒരു പ്രോഗ്രാമർ(Programmer) ആയിരിക്കും.  Programmer എന്ന എന്റിറ്റിയെ compiler എന്ന പ്രോസസ്സിന്റെ സൈഡിൽ ആയി വരയ്ക്കുക.
സിസ്റ്റവുമായി നേരിട്ട് ബന്ധപ്പെടാത്ത എന്റിറ്റിസിനെ DFD യിൽ വരക്കേണ്ടതില്ല. ഉദാഹരണമായി ഒരു ATM സോഫ്റ്റ്‌വെയർ എടുക്കുക. ATM മെഷീനിൽ ഉപയോഗിക്കുന്ന ഈ സോഫ്ട്‍വെയറിന്റെ ഉപയോക്താക്കൾ ഒരു ATM കാർഡ് ഉള്ള ഏതൊരു വ്യക്തിയുമാണ്. ഒരു ATM സോഫ്ട്‍വെയറിന്റെ എന്റിറ്റിയെ നമുക്ക് card holder ആയി രേഖപ്പെടുത്താം. ATM സോഫ്ട്‍വെയർ ഉപയോഗിച്ച് നമ്മൾ ഒരു ട്രാൻസാക്ഷൻ നടത്തുമ്പോൾ അവിടെ ബാങ്ക് മാനേജരോ, മറ്റു ബാങ്ക് ഉദ്യോഗസ്ഥരോ ഒരു തരത്തിലും നേരിട്ട് ഇടപെടുന്നില്ല. അത് കൊണ്ട് തന്നെ ATM സോഫ്ട്‍വെയറിന്റെ DFD യിൽ ബാങ്ക് മാനേജർക്കോ, ഉദ്യോഗസ്ഥർക്കോ പ്രാധാന്യം നൽകേണ്ടതില്ല.

3. Represent the data flow between entities and process.
എന്റിറ്റീസും പ്രോസസും(entities and process) തമ്മിൽ കൈമാറുന്ന ഡാറ്റയും (data) അതിന്റെ ദിശയും (flow) രേഖപ്പെടുത്തുക. അതായത് ഓരോ എന്റിറ്റിയും സിസ്റ്റത്തിന് എന്ത് ഇന്പുട് ഡാറ്റ കൊടുക്കുന്നു, പ്രോസസ്സിങ്ങിനു ശേഷം സിസ്റ്റം എന്ത് ഔട്ട്പുട്ട് ഡാറ്റ എന്റിറ്റികൾക്കു തിരികെ നൽകുന്നു എന്നത് രേഖപ്പെടുത്തുക. എന്ത് ഡാറ്റ ആണ് കൈമാറുന്നതെന്നു നിർബന്ധമായും ഡാറ്റ ഫ്ലോ arrow ക്കു മുകളിലായോ , താഴെയായോ എഴുതിയിരിക്കണം. കൈമാറുന്ന ഡാറ്റ എന്താണെന്ന് എഴുതാതെ വെറുതെ സഞ്ചാര ദിശ മാത്രം രേഖപ്പെടുത്തിയാൽ അത് ഫ്ലോ ചാർട്ടിന് (Flow chart) തുല്യമായി മാറും എന്നോർക്കുക. 
DFD - represents flow of data
Flow chart - represents flow of control

DATA FLOW REPRESENTATION IN CALCULATOR


DATA FLOW REPRESENTATION IN COMPILER
DATA FLOW REPRESENTATION IN LIBRARY MANAGEMENT SOFTWARE


4. In DFD every process should be numbered. So number the only process in level 0 as process 0. This can be done by putting a zero inside the process bubble. 

DFD യിൽ എല്ലാ പ്രോസസ്സിനെയും നമ്പർ ചെയ്തിരിക്കണം. ഓരോ പ്രോസസ്സിനെയും വേർതിരിച്ചു അറിയുവാൻ വേണ്ടിയാണ് ഈ നമ്പർ സിസ്റ്റം ഉപയോഗിക്കുന്നത്. അതിനാൽ തന്നെ ഒരു സോഫ്ട്‍വെയറിന്റെ DFD യിൽ ഒരേ നമ്പർ ഉള്ള ഒന്നിലധികം പ്രോസസ്സ് വരാൻ പാടില്ല. അതായത് ഓരോ പ്രോസസ്സിനും വ്യത്യസ്ത നമ്പറുകൾ ആകണം നാം നൽകേണ്ടത്. ലെവൽ 0 DFD യിൽ ഒരേയൊരു പ്രോസസ്സ് മാത്രം ഉള്ളത് കൊണ്ട്, നാം ആ പ്രോസസ്സിനു 0 എന്ന് നമ്പർ നൽകുക. (0th പ്രോസസ്സ് എന്നാണു അതിന്റെ അർഥം). ഏതൊരു സോഫ്ട്‍വെയറിന്റെയും ലെവൽ 0 യിൽ ഒരേയൊരു പ്രോസസ്സ് മാത്രമേ ഉള്ളു..അതിനാൽ തന്നെ ഏതൊരു ലെവൽ 0 DFD വരക്കുമ്പോഴും നമുക്ക് ഒരു വൃത്തം വരച്ചു, ആ പ്രോസസ്സിനു 0 എന്ന് നേരിട്ട് നമ്പർ ചെയ്യാവുന്നതാണ്. 

LEVEL 0 DFD : CALCULATOR

 





LEVEL 0 DFD LIBRARY MANAGEMENT SOFTWARE