Planificarea activității [308930]
Cuprins
Listă de figuri
Figura 1. Connection schema between ASP.NET and SQL Server ………………………………………….5
Figura 2a. IIS aplication in Windows small pictures 6
Figura 2b. Options IIS 6
Figura 3. Personal Data (Physical Person) 7
Figura 4. Choice an type of person and insurance 8
Figura 5. Error message from webpage display 8
Figura 6. Error message from calendar 8
Figura 7. Diagram of the database 9
Figura 8. Aplicație online de verificare a RCA-ului în Bulgaria 12
Figura 9. Cartelă perforată și cititorul acesteia 15
Figura 10. Schemă de legături între baza de date cu diferite tipuri de utilizatori 16
Figura 11. Exemplu de arhitectură 1-tier 18
Figura 12. Exemplu de arhitectură 2-tier 19
Figura 13. Exemplu de arhitectură 3-tier 20
Figura 14. Arhitectură ADO.NET 23
Figura 15. Ierarhie aplicație web 24
Figura 16. Crearea unui proiect nou în SQL Server Management Studio 2008 25
Figura 17. Crearea unui query 26
Figura 18. Creare unui proiect nou în Visual Studio 2015 29
Figura 19. Alegerea tipului de site 30
Figura 20. Selectarea bazei de date 31
Figura 21. Meniul cu instrumente și fereastra design 31
Figura 22. Pagina main 32
Figura 23. Pagina asigurareauto 33
Figura 24. Pagina CASCO Fizica 33
Figura 25. Pagina CASCO Juridica 34
Figura 26. Pagina Date personale fizica 34
Figura 27. Pagina Date personale juridica 35
Figura 28. Pagina factura 35
Figura 29. Pagina inregistrare 36
Figura 30. Pagina login 36
Figura 31. Pagina plata 37
Figura 32. Pagina RCA Fizica 37
Figura 33. Pagina RCA Juridica 38
Figura 34. Alertă necompletarea oricărui TextBox 42
Figura 35. Alertă neselectarea unei date calendaristice 42
Figura 36. Alertă diferență dintre anul obținerii permisului și anul nașterii < 18 43
Figura 37. Alertă diferență an curent și an fabricație mai mare de 10 ani 43
Figura 38. Eroare mesaj pentru tastarea unui număr de telefon invalid 43
[anonimizat] a lot of information in the world of different forms. [anonimizat], and then stored by some more complex procedures and why not secured to be accessed later by who will have access to it.
A method for translating information into a digital environment I use in this project is the database.
I [anonimizat], making it much easier and easier to extract them from the database.
In the first chapter of this paper I will present a brief introduction to the database concept and the benefits it offers to insurance companies.
Communication between databases and computer programs has developed a lot lately and it is supported by every programming language. This is accomplished through a database management system called DBMS. The latter represents a set of software programs that accept data requests from the application program and instruct the operating system how to handle the requested information. This is done through a variety of control operations that a [anonimizat], storing, deleting or retrieving the data in a database.
[anonimizat] a [anonimizat] (auto) accident that involves us directly or indirectly. A [anonimizat] 2 types of RCA (mandatory), according to the law no. 132/2017 or CASCO (optional), the latter with more facilities.
Theoretical Fundamentals
This chapter provides a brief overview of the database concept and insurance companies in this area. The most common type of database is the relational database management system (RDBMS), in which data is stored in tables. These tables contain rows (records) and columns (fields), respectively. The data is stored in which each column containing a specific attribute and each row has a specific value for the corresponding attribute. In addition to tables, a relational database may also contain: indexes, stored procedures, triggers, users and user groups, data types, security mechanisms, and transaction management. This type of database works with the structural query language (SQL).
Advantages of Relational Data Base Management System:
Structural flexibility (applications written for those databases are easier to maintain than hierarchical or network databases)
Data is only stored once
Better security
Avoids data duplicatios
Do not allow inconsistent records
Disadvantages of Relational Data Base Management System:
Isolated Databases (Records cannot be shared with other systems)
Stuctured Limits (limits on field lengths)
Storage Record
Some of the most important features of SQL language:
Very common language in English (insert, delete, update, select)
Very common data types with the C / C ++, C# programming language (float, char, date, time)
SQL can be used in two ways: interactively by typing instructions at a terminal and through the integration of SQL statements in a procedural language
In this paper I used Microsoft SQL Server (software that stores and interacts with other applications either on the same PC or on the Internet of PCs) to create a database. In order to make a connection between the framework that I used to build this work ASP.NET (Active Server Pages) and the database I created, I used the ADO.NET (Access Data Object) framework, both the latter and the latter being developed by Microsoft. ADO.NET is a framework that allows access to data sources provided by Microsoft SQL Server or others such as OLE DB and XML. To make this connection, use the namespace System.Data.dll (dynamic link library).
A first step in creating an insurance company is to develop a database that will store existing clients as well as future customers. Each company has its own database of each client's history, along with other customer information. Creating such a database requires some knowledge, time and money, but in the meantime this investment will be mitigated, even after some time the company will go on profit. This data transfer solution in a digital format will make it easier to manage data entered in the database, as well as a statistical comparison.
In the following we describe the communication process between ASP.NET technology and SQL Server.
Figure 1: Connection schema between ASP.NET and SQL Server
The first step in the connection process between ASP.NET and SQL Server is when the user is running the application. An HTTP request is sent by the user. When this request is issued, then it is taken over by Internet Information Server (IIS), which runs under SYSTEM rights, as well as admin rights. IIS authentication also works according to which users are created, if authentication is anonymous, then they have IUSR_MACHINE rights. IIS passes the Windows request of the caller to aspnet_isapi.dll, which is an ISAPI extension with a task to handle .aspx addresses. Aspnet_isapi.dll is a technology that combines IIS and ASP.NET. The Aspnet_isapi forwards the request through named pipes to a worker process. The worker process is aspnet_wp.exe which hosts the CLR (Common Language Runtime), it takes over the compiled code and turns it into machine instructions, which only the processors can execute. Normally, the worker process is run under an ASPNET account. This local account is created when the ASP.NET framework is installed. Unlike the SYSTEM account, which is very powerful, the ASPNET account has very limited privileges. ASP.NET authenticates the caller based on its own authentication configuration. Authentication is configured in an XML format in the project's web.config file. If ASP.NET is configured for Windows authentication, ASP.NET accepts any form of authentification it receives from IIS and no additional authentication occurs. In addition, the ASP.NET authorizes access to the requested resources and/or files.
Automatically, when starting the web application, IIS starts (figure 2a), solving the request received from the client. In Figure 2b, it can be seen that this application displays all the sites running at that time on that station, with 2 options one opens a new tab in your favorite web browser and shows us the directory of files of the open web application in progress or the second option to stop the application.
Figure 2a: IIS aplication in Windows small pictures
Figure 2b: Options IIS
Implementation
The objective of this paper is to develop a web application in the interest of a car insurance company in order to relieve current clients or prospective clients of the most common "unfortunate" cases such as going to the insurance company's headquarters, the state at the row tail or even finding the moment they want to pay the insurance they do not have a sufficient balance. In order to accomplish this, we used software developed by Microsoft, namely (SQL Server Management Studio Express 2008 R2), used to create the RDBMS database and a graphical interface using the ASP.NET technology combined with the Web form in the software, Visual Studio 2015, developed by the same company. To achieve the technical (practical) part, I used the Structured Query Language (SQL) for building the database, or C #, JavaScript for creating the web interface. This work is structured in two parts for a better definition and to maintain an order in this work. First part we will define it simply and clearly "Auto Database", which will contain the database of an auto insurance company, and the second one will be called "Web Interface", where the clients will be able to enter the data both Identification and machine parts as well as other details. The auto database will contain 9 tables that were created and modeled using the SQL programming language. In the second part of the application, it is intended for customers where they can do any type of auto insurance, compare prices between insurers, pay with a bank card, create an online account, and view insurance already in their account.
The following figure is an ASP Web form in which clients can insert their personal data.
Figure 3: Personal Data (Physical Person)
This paper contains a 16-page Web form that has been developed in C#, HTML and JavaScript. Through these languages and with the help of System.Web.UI, which allows us to create an ASP.NET server, we have created a friendly interface behind which System.Web.UI.WebControl, which helps to create methods, properties and events.
Experimental Results
Through this application, we have tried to offer our clients a different perspective by comparing the prices between insurers and choosing the most favorable and appropriate one. Due to the fact that all insurance companies offer insurance prices after completing the data of both the car and the owner, we shortened this method by creating a page containing a calculation algorithm behind it using only the data of the car.
The first impact of the user with this site is the home page that gives him the choice of what kind of person (physical / legal) and what kind of insurance he wants to do for his car (RCA / CASCO).
Figure 4: Choice an type of person and insurance
If the client does not fill in all mandatory fields, an error will appear on the screen as a dialog box, as in Figure 5. This error will persist each time the button is actuated, until the minimum of the back will be accomplished.
Figure 5: Error message from webpage display
Another possible error encountered by customers would be the calendar related if they do not select a start date for insurance.
Figure 6: Error message from calendar
Conclusions
In this world almost everything can be assured. For this diploma I have limited myself to car insurance of all types (RCA / CASCO), in case
Of the RCA, which is mandatory and covers only standard cases of compensation (eg does not compensate for its own vehicle). In the case of CASCO, this can be done alongside the RCA and this time can compensate the owner in case of damage, theft. Besides these indemnifications, some insurance companies also offer other benefits besides those provided at any CASCO, eg. In the event of a fault in the car, they can provide 100 km for free to the nearest authorized service partner and in partnership with them.
A web form page is made up of two parts. One is the design side (.aspx) that we built from 3 programming languages (C#, JavaScript and HTML) and what the client (interface) looks like. The second one represents the code behind the application (.aspx.cs), where the connection to the database is made (it could be done in Web.config) or even simpler (Server Explorer / Database Explorer). The latter was done in the programming language C#. This project is developed in Visual Studio 2015 (interface, connection and control side) and database in SQL Server Management Studio Express version 2008 R2, both developed by Microsoft.
The database contains 9 tables and is described as follows (Figure 7). Through the graphical interface, customers can choose from the beginning what type of person (legal / physical) and what type of insurance they want to complete (RCA / CASCO). The calculation of the insurance policy is based on each client (paid, year of permits, type of person), car (engine capacity, year of manufacture, power) and insurance (RCA / CASCO). These data are stored later in the database, and some of them can be viewed by each client (only their own).
Figure 7: Diagram of the database
Planificarea activității
Stadiul actual
După cum putem observa in jurul nostru se schimba foarte multe lucruri, timpul trece tot mai repede, iar tehnologia avansează odată cu el. Ca și în alte domenii, tehnologia a avut întotdeauna un rol important in dezvoltarea, perfecționare și ușurarea muncii omului. Un exemplu concret ar fi informația, care poate fi de mai multe feluri. Încă din cele mai vechi timpuri s-a încercat salvarea acesteia și conservarea ei pe diverse materiale, cum ar fi tăblițe de piatra, fier și mai târziu hârtie (care se folosește și in zilele noastre), dar de departe cea mai avansata stocare este cea digitală. O astfel de stocare se poate face pe hard-disk-uri, cd/dvd, carduri de memorie și altele.
Această lucrare are la rădăcină o bază de date în care se vor salva date de identificare legate de clienți și cu caracter tehnic, respectiv mașină. Pe lângă baza de date aceasta mai conține si o interfață prietenoasa si ușoară pentru toți clienții înregistrați sau posibili viitori clienți. Prima parte a acestei lucrări după cum este specificat și în planificarea lucrării o reprezintă construirea bazei de date. Pentru determinarea acestui prim pas am utilizat software-ul SQL Server Management Studio Express 2008 R2 dezvoltat de către compania Microsoft. In continuarea acestui proiect si realizarea aplicației web am folosit software-ul Visual Studio 2015 dezvoltat tot de către cei de la Microsoft, pentru a crea interfața grafica adresata clienților.
O bază de date SQL Server este compusă din trei tipuri de fișiere: un fișier cu extensia mdf zero sau mai multe fișiere cu extensia ndf și unul cu extensia ldf
În fișierul cu extensia mdf sunt stocate obiectele bazei de date precum tabelele, indecșii, vederile etc. împreună cu definițiile lor, fișierele cu extensia ndf sunt fișiere secundare ce conțin numai date, iar fișierul cu extensia ldf conține jurnalul de tranzacții. Orice bază de date are asociat un jurnal de tranzacții. Actualizarea unei înregistrări a bazei de date presupune memorarea în jurnalul de tranzacții a conținutului înregistrării dinainte și după actualizare. Jurnalul de tranzacții este folosit pentru restaurarea bazei de date în situația în care apare o eroare ce necesită anularea sau reluarea unor operații înregistrate.[1]
Limbajul pe care îl folosește acest software (SQL Server Management Studio) este SQL (Structured Interrogation Language). Acest software folosește structura sistemului de gestionare a bazelor de date (DBMS). Un sistem de gestionare a bazelor de date (DBMS) este un set de programe software utilizate pentru a defini, gestiona și procesa bazele de date și aplicațiile asociate acestora. Baza de date care urmează sa fie folosita este, o structură pe care o s-o populam cu datele de care avem nevoie.
În aceasta lucrarea am utilizat bazele de date relaționale, deoarece acestea oferă o flexibilitate structurală mai bună, o întreținere mai ușoara și o modificare a acestora foarte facilă în comparație cu alte tipuri de baze de date. Aplicațiile scrise pentru acest tip de bază de date sunt mai ușor de întreținut decât aplicațiile similare scrise pentru cele ierarhice sau bazele de date de rețea.
Acest limbaj (SQL) a fost proiectat pentru a permite oamenilor să creeze baze de date, să adauge date noi, să mențină datele și să recupereze anumite părți ale datelor. Există diverse tipuri de baze de date, fiecare aderând la o concepție de model diferită. SQL a fost inițial dezvoltat pentru a opera pe date în baze de date care sunt de tipul modelului relațional (RDBMS), folosit și în această lucrare.
Asigurarea de Răspundere Civilă Auto este un contract între societatea de asigurare și asigurat, prin care asiguratorul preia răspunderea de a despăgubi un terț accidentat din vina asiguratului, pentru pagube materiale, vătămări corporale sau deces precum și cheltuieli de judecată ale persoanei sau persoanelor vătămate. În baza acestui contract de asigurare, asiguratul este de acord sa plătească o anumită sumă de bani, numită prima de asigurare, societății de asigurări, iar in schimbul acestei sume, asiguratorul își asumă riscul de a plăti despăgubirile necesare conform condițiilor din contract.
Un alt tip de asigurare este CASCO, acesta este opțională, deci nu e obligatorie achiziționarea acesteia. O primă observație este faptul că asigurarea de tip obligatoriu (RCA), nu oferă decât o asigurare de bază. CASCO, pe de altă parte asigură riscuri care nu sunt incluse in RCA, spre exemplu: furtul, despăgubirea in caz de avarie a propriului autovehicul (în limita legii), accidentului, precum și multe alte beneficii. Un defect al acestei asigurări ar fi prețul comparativ cu cel al RCA-ului, problema că acesta asigură autovehicule cu vârsta nu mai mare de 10 ani (unele companii de asigurări 12 ani).
O autoritate administrativă autonomă care se ocupă cu atribuții în preluarea și reorganizarea atribuțiilor prerogativelor Comisiei de Supraveghere a Asigurărilor (C.S.A.), printre altele și Comisiei Naționale a Valorilor Mobiliare (C.N.V.M.), Comisiei de Supraveghere a Sistemului de Pensii Private (C.S.S.P.P.) este Autoritatea de Supraveghere Financiară (ASF) care s-a înființat în 2013. Aceasta are ca scop introducerea datelor legate de aceste domenii de activitate într-o bază de date (3 pentru fiecare administrație) și oferindu-le posibilitatea cetățenilor să verifice date legate de asigurările acestora.
Baza de date care se ocupa cu stocarea datelor asigurărilor obligatorii (RCA) în România se numește CEDAM aceasta este în subordinea ASF. În această bază de date se poate verifica existenta unei polițe RCA la o anumită dată pentru un autovehicul, poate fi vizualizată societatea de asigurare care a emis polița și pot fi identificate prejudiciile asociate polițelor valabile începând cu anul 2008. În această bază de date toți asiguratorii au obligația să adauge noii asigurați și să actualizeze situația fiecăruia când ori de câte ori este nevoie. Tot în această bază de date se mai salvează și situația de Bonus-Malus (B/M) a fiecărui asigurat.
Asemănător bazei noastre de date pentru asigurări au și vecini noștri din Bulgaria, numită (Guarantee fund) [2]. În aceasta se fac înregistrările referitoare la toate mașinile asigurate în Bulgaria. Aplicația este disponibilă în mediul online și este folosită atât de serviciile polițienești cât și de cetățeni. Pentru a afla până când este valabilă polița făcută în curs sau dacă autovehiculul e asigurat v-or trebui introdu-se câteva date cum ar fi : numărul de înmatriculare, seria de șasiu, o dată folosită ca punct de reper și o serie de pe un abțibild securizat obținut in baza ultimei inspecții tehnice periodice (I.T.P.).
Figura 8: Aplicație online de verificare a RCA-ului în Bulgaria
Pe lângă această aplicație de verificare a polițelor RCA, mai există o aplicație unde se pot verifica inspecțiile tehnice periodice (I.T.P.) [3].
O altă bază de date asemănătoare celor deținută de bulgari este cea din Olanda. Aceasta se numește RDW – Rijksdienst voor Wegverkeer (tradus trafic rutier național). De fiecare dată când este cumpărat, vândut sau importat un automobil, va trebui adăugat în baza de date RDW.
În baza de date RDW[9] sunt înregistrate informații privind vehiculele și menține calitatea tuturor vehiculelor din Olanda. Acesta se realizează prin acordarea de certificate de calitate și autenticitate (certificatul de înmatriculare), inspecție și supraveghere. În momentul de față această societate RDW a fost una guvernamentală, dar acum este independentă și deține, de asemenea, registre cu date dinaintea înființării ei. Ea furnizează informații și este responsabilă de eliberarea scutirilor de drept de circulație pentru transporturi speciale (foarte mari). RDW oferă o imagine a ceea ce se întâmplă pe drumurile olandeze, precum și informații legate de vehicule, proprietari și șoferi de la început până la sfârșit.
Serviciile furnizate de RDW se bazează pe legislația olandeză, iar acestea vizează industria auto, companiile de transport, organizațiile de orice fel (chiar și guvernamentale), precum și persoanele juridice. Cele mai importante puncte ale bazei de date RDW, pentru care oferă date sunt: vehiculul, siguranța, considerații de mediu, sisteme de înregistrare fiabile și furnizarea de informații. La nivel internațional, RDW este un exemplu foarte bun pentru restul țărilor din U.E. (Uniunea Europeană), jucând un rol major combaterea infracționalității, dar în același timp e și o sursă bună de informații și sfaturi.
Sediul RDW este în Zoetermeer, Olanda, dar mai există și alte 18 posturi de inspecție în diferite locații din Olanda și trei birouri regionale. În Lelystad, Olanda RDW are propriul centru de testare cu circuit de testare pentru orice tip de vehicul. Aceasta menține un număr mare de registre la sediul său din Veendam, Olanda având un personal de aproximativ 1300 de angajați.
Unul dintre cele mai mari si independente grupuri din regiune, EIG își propune pe piața de asigurări din Romania, prin Euroins Romania, sa se poziționeze in top 5 cei mai buni asiguratori si sa devina unul dintre cele mai respectate brand-uri.
O tradiție ce-și are începuturile în 1994, SC Euroins România Asigurare Reasigurare SA reprezintă acum, pe piața asigurărilor din România, o prezență notabilă ce combină dimensiunea socială a actului de vânzare de asigurări, cu dimensiunea umană, ce are la bază o abordare personalizată pentru fiecare client. Compania a crescut și s-a dezvoltat de-a lungul timpului, adăugând constanta si valoare produselor oferite abordării strategiei de vânzare, conceptului de service-are a clienților, reușind să creeze și să livreze sprijin în preluarea riscului și oferirea unor produse de asigurare cât mai complete. Cei peste 1.000.000 de clienți, peste 500 de angajați si peste 4.500 agenți colaboratori, oferă imaginea a ceea ce înseamnă acum Euroins România. [4]
OMNIASIG Vienna Insurance Group este prezentă pe piața asigurărilor din România încă din 1995. Cota de piață, portofoliul de clienți și produse, garanția serviciilor de despăgubire confirma poziția de top pe care OMNIASIG Vienna Insurance Group o ocupă astăzi în România. Traducem caracteristicile tehnice ale produselor de asigurare în beneficii pentru clienți. Ne asigurăm că cele mai importante lucruri din viața lor, sănătatea, familia, proprietățile și afacerile lor beneficiază de cea mai bună și mai completă acoperire prin asigurare care exista. [5]
De peste 25 de ani, Asirom este compania de asigurări tradiționala a românilor, oferindu-le siguranța, confortul și protecția de care au nevoie, prin produse și servicii de calitate, și consultanță pentru o viață liniștită. Anul 2007 s-a dovedit a fi un an de schimbări majore, care au adus beneficii de imagine notabile pentru ASIROM, rămânând în istorie drept anul în care compania de asigurări s-a alăturat marii familii a grupului VIENNA INSURANCE GROUP, lider pe piața de asigurări din Europa Centrală și de Est. ASIROM face parte din grupul celor 50 de companii din regiune care consolidează echipa VIG (Viena Insurance Group). [6]
Societatea de Asigurare – Reasigurare City Insurance S.A. este o companie de asigurări generale, 100% românească. Cu o experiență de 15 ani în domeniu, City Insurance pune astăzi la dispoziția clienților o gamă completă de asigurări flexibile și performante. Produsele companiei sunt create și adaptate pentru a satisface nevoile de asigurare ale clienților actuali și potențiali. Astfel, societatea propune asigurări specifice atât persoanelor fizice, cât și celor juridice. City Insurance este o companie ce stabilește cu partenerii și clienții săi relații pe termen lung. Cuvintele cheie sunt încredere și performanță. În acest sens, compania dovedește transparență, stabilitate, coerență și atenție exclusivă îndreptată către asigurat. [7]
Groupama este astăzi unul dintre liderii pieței de asigurări din România, cu prime brute subscrise în valoare de 932,3 milioane lei în 2016. Compania deservește pe plan local 1.100.000 de clienți individuali și 67.000 de companii, dispune de o rețea comercială de aproximativ 122 de agenții și puncte de lucru aflate pe întreg teritoriul țării și operează prin canale de distribuție multiple: retail (vânzări directe și agenți), non-retail (brokeri, bancassurance) și corporații. Canalul bancassurance este susținut prin parteneriate strategice încheiate cu principalii actori bancari și de leasing din Romania. Le oferim clienților noștri PF, IMM si corporații produse și servicii care adresează toate nevoile de asigurare (asigurări generale, proprietăți si auto, asigurări de răspundere civilă, asigurări de persoane, asigurări agricole, asigurări de viață și asigurări de sănătate), pentru continuitate. [8]
Fundamentare teoretică
Caracteristici ale bazelor de date
Bazele de date au apărut în anul 1832, datele au fost înregistrate prin metoda cartelelor perforate. La început aceste date au putut fi doar înregistrate, urmând ca mai apoi peste câțiva ani să fie reinventată o mașină care scrie și citește aceste plăcuțe. Această tehnologie a fost folosită până la începutul anilor 1950, când au apărut bazele de date ce folosesc casete cu benzi magnetice. Până în anii 1960 bazele de date cu cartele perforate au fost înlocuite complet de către cele cu banda magnetică. O dată cu evoluția bazelor de date au evoluat și calculatoarele, iar pentru memoria de stocare s-au creat hard disk-urile care la fel ca și bazele de date de la acea dată foloseau tehnologia benzii magnetice. La începutul anilor 1970, după mai bine de 10 ani de cercetare, cum să se facă aranjarea unei baze de date și să fie folosit ca tip de bază de date de către toate marile bănci din întreaga lume. Aceasta nu a fost posibilă datorită faptului că era lentă în comparație cu tipurile de baze de date propuse la acea vreme. În anii 1980 aceasta devine populară și este folosită din ce in ce mai mult.
Forma unei baze de date relațională este următoarea: câmpuri, unde sunt stocate informațiile. Mai multe câmpuri grupate formează o înregistrare, iar mai multe înregistrări strânse într-un grup formează un tabel.
Figura 9: Cartelă perforată și cititorul acesteia
Pentru ca utilizatorul să aibă acces la această bază de date de pe calculator, s-a creat un sistem care permite crearea, manipularea, definirea și partajarea bazelor de date cu alte aplicații, precum și cu alți utilizatori. Acesta poartă numele de sistem de gestiune a bazelor de date (DBMS).
Definirea unei baze de date presupune specificarea tipurilor de date, structurile și constrângerile datelor care trebuie stocate în baza de date. Definiția bazei de date sau informațiile descriptive sunt de asemenea stocate de DBMS sub forma unui catalog de baze de date sau a unui dicționar și se numesc meta-date. Manipularea unei baze de date include funcții precum interogarea bazei de date pentru a prelua date specifice, actualizarea bazei de date pentru a reflecta modificările în programul ce este în corelație cu această bază de date și generarea de rapoarte din datele din baza de date. Partajarea unei baze de date permite mai multor utilizatori și programe accesul simultan la baza de date create. Un program de aplicație accesează baza de date prin trimiterea de interogări sau cereri de date către DBMS. În mod normal, o interogare generează recuperarea unor date, dar această tranzacție poate cauza citirea unor date și introducerea unor alte date în baza de date. Alte funcții importante furnizate de DBMS sunt: protejarea bazei de date și menținând pe o perioadă lungă de timp această stare de protecție. Protecția include protecția sistemului împotriva defecțiunilor (sau a avariilor) hardware și software și a securității împotriva accesului neautorizat sau rău intenționat al celorlalți utilizatori. O bază de date normală poate avea o lungă durată, numai dacă este securizată, iar această stare se menține pe tot parcursul duratei acesteia.
Figura 10: Schemă de legături între baza de date cu diferite tipuri de utilizatori
De obicei, o bază de date are mulți utilizatori, aceștia pot avea privilegii diferite în funcție de ce necesitate are la baza de date. Cu cât gradul de permisie e mai mare pentru un anumit utilizator, acesta nu va mai fi avertizat atunci când datele vor fi stocate sau alte alerte de permisie. Utilizatorii DBMS trebuie să aibă o varietate mare de aplicații distincte și trebuie să ofere facilități pentru definirea permisiunilor de vizualizare a informațiilor din baza de date.
Un multiuser DBMS, trebuie să permită accesul mai multor utilizatori accesul la baza de date în același timp. Acest lucru este esențial pentru înregistrarea datelor pentru mai multe aplicații, care sunt menținute într-o singură bază de date, comună. DBMS are în componență o ordine de permisie a actualizărilor a se asigura că mai mulți utilizatori care încearcă să actualizeze aceleași date, o să fie actualizate în mod controlat, astfel încât rezultatul actualizărilor să fie corect. Aceste tipuri de aplicații sunt denumite OLTP (procesarea tranzacțiilor online). Un rol fundamental al software-ului DBMS multiuser este de a se asigura că tranzacțiile concurente funcționează corect și eficient. Conceptul de tranzacție a devenit foarte folosit în multe aplicații de baze de date. Tranzacția este un program sau un proces de execuție care include una sau mai multe accesări a bazei de date, precum și citirea sau actualizarea înregistrărilor în aceasta. Fiecare tranzacție se presupune că este executată corect, dar când două tranzacții sunt executate în același timp există posibilitatea de a introduce datele eronat. Pentru a rezolva această problemă DBMS trebuie să impună câteva proprietăți tranzacționale. Proprietatea izolării asigură executarea fiecărei tranzacții în mod izolat față de alte tranzacții, indiferent de numărul acestora, acestea vor fi executate concomitent. Aceste caracteristici sunt foarte importante, deoarece acestea fac distincția dintre un DBMS și un altul tradițional în procesarea fișierelor.
În orice organizație în care mulți angajați folosesc aceleași resurse, este necesar ca un administrator să supravegheze și să gestioneze aceste resurse. Pentru baza de date, resursa principală este ea însăși, iar resursa secundară este DBMS și software-ul de conexiune. Administrarea acestor resurse este responsabilitatea administratorului bazei de date (DBA). DBA este responsabil pentru autorizarea accesului la baza de date, coordonarea și monitorizarea utilizării acesteia, precum și achiziționarea de resurse software și hardware. DBA este responsabil pentru probleme cum ar fi încălcări ale securității și timp de răspuns scăzut al sistemului. În organizațiile mari, DBA este asistat de un personal care îndeplinește aceste funcții.
Proiectanții de baze de date sunt responsabili pentru identificarea datelor care trebuie stocate în baza de date și pentru alegerea structurilor adecvate pentru reprezentarea și stocarea acestor date. Aceste sarcini sunt în mare parte întreprinse înainte ca baza de date să fie efectiv implementată și să fie populată cu date. Este responsabilitatea proiectanților de baze de date să comunice cu toți utilizatorii potențiali de baze de date pentru a înțelege cerințele lor și pentru a le crea un design care îndeplinește toate cerințele acestora. În multe cazuri, proiectanții sunt repartizați să lucreze cu DBA, dar după terminarea bazei de date, aceștia vor primi alte responsabilități, pentru alte proiecte.
Arhitectura bazelor de date
Arhitectura DBMS au evoluat foarte mult în ultimii ani, unde software-ul DBMS a fost un sistem bine integrat în DBMS-ul modern, pachete care sunt modulare în proiectare, cu o arhitectură de sistem client / server. Această evoluție reflectă noile tendințele în materie de calculatoare, unde calculatoarele mari sunt înlocuite de către sute de stații de lucru și calculatoare personale conectate prin intermediul rețelelor de internet la diferite tipuri de server: servere Web, servere de baze de date, servere de fișiere, servere de aplicații și așa mai departe.
Într-o arhitectură DBMS de tipul client / server, funcționalitatea sistemului este distribuită
între două tipuri de module: un modul fiind „client” care este proiectat în mod obișnuit astfel încât să ruleze pe o stație de lucru pentru utilizatori sau pe un computer personal. De obicei, aplicațiile și interfețele utilizatorilor care accesează baza de date rulează în modulul „client”. Prin urmare, modulul „client” ajută la interacțiunea cu utilizatorul și oferă interfețele ușor de utilizat, cum ar fi diferite forme, precum și meniuri GUI (interfață grafică pentru utilizator). Alt doilea tip de modul, este numit un „server”. Acesta se ocupă de stocarea datelor, accesul, căutarea, precum și alte funcții.
Numeroase modele de baze de date, pot fi clasificate în funcție de tipurile de concepte care se utilizează în structura bazei de date. Modelele de date conceptuale sau de nivel înalt oferă concepte care sunt aproape de modul în care mulți utilizatori percep date, în timp ce modelele de date de nivel inferior sau fizic oferă concepte care descriu detaliile privind modul în care datele sunt stocate pe hard disk-ul calculatorului.
Conceptele furnizate de modelele cu nivel scăzut de date sunt în general destinate pentru developeri, nu pentru utilizatorii normali. Între aceste două extreme există o clasă de modele de reprezentare (sau implementare). Acestea sunt 4 la număr, care oferă concepte și pot fi ușor înțelese de utilizatorii finali. Modelele de reprezentare reprezintă multe detalii legate de stocarea datelor pe hard disk. Modelele de date conceptuale utilizează concepte precum entități, atribute și relații.
O entitate reprezintă un obiect sau un concept. Un atribut reprezintă o proprietatea care descrie o entitate. O relație între două sau mai multe entități reprezintă o asociere între ele Entitățile, de exemplu, o relație de lucru între un angajat și un proiect.
Modelele de reprezentare sau de implementare sunt utilizate cel mai frecvent în sistemele DBMS. Acestea includ și modelul relațional utilizat pe scară largă ca model de date, precum și așa-numitele modele de date vechi – rețea și modele ierarhice – care au fost utilizate pe scară largă în trecut.
Un alt model ar fi modelul de date orientat pe obiect, făcând parte din nivel superior. Acesta aduce bazelor de date un plus de deschidere, flexibilitate si oferă rezultate bune pentru problemele complexe. În structură sunt acceptate toate tipurile de date cunoscute, putându-se aplica în toate domeniile de activitate. Comunicarea între obiecte se face prin mesaje, actualizarea metodelor, actualizarea proprietăților, actualizarea claselor, realizarea legăturilor între clase, actualizarea instanțelor.
Modelele de date fizice descriu modul în care datele sunt stocate ca fișiere în computer prin reprezentarea acestora ca informații sub formă de înregistrări și căi de acces. O cale de acces este o structură care face căutarea unor înregistrări în baza de date mai eficientă. Un index este un exemplu al unei căi de acces care permite accesul direct la date utilizând un cuvânt cheie.
Cele 3 modele de arhitecturi pentru DBMS sunt:
1-tier
2-tier
3-tier
Arhitectura client / server a fost dezvoltată pentru a face față numărului mare de calculatoare, stații de lucru, servere de fișiere, imprimante, servere Web și altele. Ideea este de a defini servere specializate cu diferite funcționalități. De exemplu, este posibil să conectăm mai multe calculatoare sau stații de lucru la un server de fișiere. Datele furnizate de serverele specializate (printări, mail, servere web) pot fi accesate de mai multe calculatoare cu rol de client. Aceste calculatoare oferă utilizatorului interfețele corespunzătoare pentru a utiliza aceste servere, precum și acces la diverse acțiuni.
Aceste arhitecturi folosesc 3 tipuri de straturi:
Stratul prezentare
Stratul business
Stratul de date
Stratul prezentare este cel mai înalt strat al aplicației. Prin utilizarea acestui strat putem accesa diferite pagini web, iar funcția lui principală este aceea de a comunica cu stratul aplicație. Acest strat trimite informațiile primite de la tastatură și mouse, apoi le trimite stratului aplicație.
Stratul aplicație, numit și stratul business, care este cunoscut ca și strat logic interacționează cu stratul bazei de date și trimite informațiile acumulate stratului prezentare. Acest strat controlează buna funcționare a aplicației software printr-un proces mai amănunțit.
Stratul de date este locul unde se stochează întreaga cantitate de informație. Stratul aplicație comunică împreună cu stratul bazei de date acestui strat când au nevoie de date.
Primul model de arhitectură este 1-tier (Single tier). Acesta model de arhitectură conține toate cele 3 straturi prezentate de mai sus: stratul prezentare, stratul aplicație, stratul bazei de date. Pentru această arhitectură, datele sunt stocate în sistemul local sau într-o unitate partajată. Modelul acesta este forte implementat în aplicațiile standard.
Figura 11: Exemplu de arhitectură 1-tier
Al doilea model de arhitectură este 2-tier (Dual tier). Această arhitectură este împărțită în două părți:
1. Aplicație client (Client Tier)
2. Baza de date (Data Tier)
Sistemul client gestionează atât straturile de prezentare, cât și cele de aplicație, iar sistemul de server gestionează stratul bazei de date. De asemenea, această structură este cunoscută sub numele de aplicație client-server. Comunicarea are loc între Client și Server. Sistemul client trimite cererea către sistemul server, iar serverul procesează cererea și apoi trimite datele înapoi la sistemul client. Această arhitectură este folosită în aplicațiile de tip Client-Server.
Figura 12: Exemplu de arhitectură 2-tier
Al treilea tip de arhitectură se numește 3-tier (Three tier). La fel ca și arhitectura cu 2 straturi, aceasta este împărțită în 3 părți:
Nivelul de prezentare (Client Tier)
Nivel de aplicație (Business Tier)
Nivelul bazei de date (Data Tier)
Sistemul client gestionează stratul de prezentare, apoi serverul de aplicație se ocupă de stratul de aplicație și server-ul de sistem se ocupă de stratul de bază de date. Această arhitectură este des întâlnită în aplicațiile de tip Web.
Figura 13: Exemplu de arhitectură 3-tier
Avantaje și dezavantaje utilizării arhitecturilor
Single tier
Avantaje:
Simplu
Eficient
Ușor de înțeles
Dezavantaje:
Costisitor
Dual tier
Avantaje:
Mai ieftin decât Mainframe
Dezavantaje:
Conexiunea la serverul bazei de date e foarte scumpă
Numărul utilizatorilor care se pot conecta la ea este limitat
Three tier
Avantaje:
Scalabilitate (Aplicația server se poate desfășura pe mai multe calculatoare, nu se cere o conexiune de la fiecare client)
Integritatea datelor (al doilea strat are grijă ca doar datele ce respectă condițiile impuse sa fie inserate)
Securitate crescută
Dezavantaje:
Foarte complexă
Limbajul SQL
Limbajul SQL (Structured Query Language), a fost inițial, numit SEQUEL și a fost proiectat și implementat de către IBM Research ca interfață pentru un sistem de baze de date relaționale experimentale numit SYSTEM R. SQL este acum un limbaj standard pentru sisteme DBMS relaționale. Un efort comun al Institutului Național de Standardizare american
(ANSI) și Organizația Internațională pentru Standarde (ISO) a condus la o versiune standard a SQL (ANSI 1986), numită SQL-86 sau SQL1. Acesta a fost dezvoltat ulterior ca un standard revizuit și extins numit SQL-92, denumit SQL2. În 1999 aceștia reinventează SQL ca SQL3. Mai târziu apar două actualizări ulterioare ale standardului și anume SQL: 2003 și SQL: 2006, care au adăugat funcții XML printre alte actualizări ale limbajului. O altă actualizare apare în 2008 și a inclus mai multe caracteristici ale bazei de date obiect în SQL.
Limbajul SQL este unul dintre cele mai folosite limbaje de programare în cadrul bazelor de date, motivul acesta datorându-se succesului comercial ce îl are baza de date relațională. Datorită succesului de care a dat dovadă baza de date rațională, foarte mulți utilizatori au migrat la acest sistem de baze de date. Conversia într-un alt sistem DBMS relațional nu era așteptată să fie prea costisitoare, deoarece această conversie era între sisteme care respectau aceleași standarde de limbaj.
SQL este un limbaj cuprinzător al bazei de date: are instrucțiuni pentru definirea datelor, interogări și actualizări. Prin urmare, este atât un DDL (Dynamic link library), cât și un DML (Data manipulating language). În plus, dispune de facilități pentru definirea datelor, specificarea securității și autorizării, definirea constrângerilor de integritate și pentru specificarea comenzilor tranzacțiilor. De asemenea are reguli pentru incorporarea instrucțiunilor SQL într-un limbaj de programare generală, cum ar fi Java, COBOL sau C / C ++.
SQL utilizează tabele, rândurile și coloanele. Principala comandă SQL pentru definirea datelor este instrucțiunea CREATE, cu ajutorul căreia pot fi create scheme, tabele (relații) și domenii. Comanda CREATE TABLE este utilizată pentru a specifica un nou tabel, oferindu-i un nume și specificându-i rândurile și coloanele, precum și constrângerile inițiale. Coloanele sunt specificate mai întâi, apoi fiecărui coloane îi este dat câte un nume pentru a fi distins, un tip de date pentru a specifica domeniul său de valori, și orice constrângeri, cum ar fi NOT NULL. Cheia și constrângerile pot fi specificate în instrucțiunea CREATE TABLE după ce coloanele sunt declarate sau pot fi adăugate mai târziu folosind comanda ALTER TABLE.
Tabelele declarate prin instrucțiunile CREATE TABLE sunt numite tabele de bază, aceasta înseamnă că tabelele și rândurile ei sunt create și stocate ca fișier de către DBMS. În SQL, coloanele dintr-un sunt considerate a fi ordonate în ordinea în care sunt specificate în CREATE cu instrucțiunea TABLE. Cu toate acestea, rândurile (tupluri) nu sunt considerate a fi ordonate într-un tabel.
Tipuri de date suportate de limbajul SQL:
Numerice (INT, FLOAT, DOUBLE PRECISION)
Șiruri de caractere (CHAR(n), VARCHAR(n) – n numărul maxim de caractere)
Șiruri de biți (BIT(n))
Dată (SMALLDATETIME)
Boolean (True, False)
Deoarece cheile și constrângerile sunt foarte importante, sunt clauze speciale în cadrul instrucțiunii CREATE TABLE pentru a le specifica. Clauza PRIMARY KEY specifică unul sau mai multe coloane care alcătuiesc elementul principal al unei chei. Dacă o cheie primară are o singură coloană, clauza poate urma acea coloană direct, considerând automat că e o cheie primară. Clauza UNIQUE specifică cheile alternative (secundare) și poate fi specificată direct ca o cheie secundară dacă cheia secundară este una singură. Aceasta poate fi folosită asupra unei coloanele pentru a nu permite introducerea unor date identice. Clauza FOREIGN KEY este folosită pentru a pointa către o cheie primară din alt tabel.
Pentru a crea o constrângere vom folosi cuvântul rezervat CONSTRAINTS. Numele tuturor constrângerilor dintr-un tabel trebuie să fie unice. Un nume de constrângere este utilizat pentru a identifica o anumită constrângere în cazul în care aceasta trebuie abandonată mai târziu și înlocuită cu o altă constrângere.
Tehnologia ADO.NET
Introducere
ADO.NET este o tehnologie de acces la date și comunicare între sistemele relaționale și cele non-relaționale. Aceasta este un set de componente de software de calculator pe care programatorii le pot utiliza pentru a accesa datele și serviciile de date dintr-o baza de date. Este o parte a bibliotecii de clasă de bază inclusă în Microsoft .NET Framework. ADO.NET este uneori considerat o evoluție a tehnologiei ActiveX Data Objects (ADO), dar a fost modificat atât de mult încât poate fi considerat un produs complet nou.
ADO.NET are tendința de a deveni o componentă centrală a oricărei aplicații .NET sau a unui serviciu Web bazat pe date, datorită foarte multor caracteristici, dar și din cauză multor utilizatori care îl folosesc.
Platforma .NET a fost construită folosind limbajul CLR (Common Language Runtime). CLR este limbajul în care este transformat codul executat de noi pentru a-l înțelege programul. Acest limbaj este comparabil cu JVM (Java Virtual Machine) sau cu Visual Basic. Microsoft oferă compilator (traducător de limbaj scris în cod mașină), pentru următoarele limbaje de programare: C#, Visual Basic, JavaScript și J#.
La început, accesul la bazele de date a fost realizat de bibliotecile native, cum ar fi DBLib pentru SQL Server și OCI (Oracle Call Interface) pentru Oracle. Acest lucru a permis accesul la baza de date rapidă, deoarece nu a fost implicat niciun strat suplimentar.
Popularitatea sa se datorează faptului că aceasta e folosit de un număr mare de dezvoltatori care utilizează limbaje precum: Visual Basic, ASP și Visual J ++, acestea permițând un acces facil la date în mai multe feluri.
Componente ale furnizorului de date
Furnizorii principali de date ai platformei .NET sunt: SQL Server, OLE DB și ODBC. Fiecare dintre acești furnizori se află în spațiul definit de System.Data, iar acesta conține mai multe clase.
Connection – utilizată pentru conectarea cu baza de date
Command – utilizată pentru comenzi asupra bazei de date, cum ar fi INSERT, UPDATE, DELETE
DataReader – utilizată pentru citirea datelor din baza de date
DataAdapter – utilizată pentru popularea și updatarea datelor pentru DataSet (tabel) cu baza de date
DataSet conține două aspecte importante. Primul dintre acestea este că DataSet este întotdeauna deconectat, deci nu îl interesează de unde provin datele, fie o bază de date sau un document XML. Pentru a conecta DataSet la o bază de date, trebuie să folosim DataAdapter ca intermediar între DataSet și furnizorul de date NET. DataAdapter face conexiunea între baza de date și DataSet, atunci când cel din urmă este deconectat.
DataReader este folosit doar pentru transmitere și citire. Aceasta prin urmare, permite accesul extrem de rapid la datele pe care dorim să le accesăm din baza de date, de aceea este recomandat să folosim DataReader ori de câte ori este posibil, el fiind mult mai rapid decât DataSet. Comanda ExecuteReader face posibilă utilizarea DataReader.
Spațiul System.Data.SqlClient din biblioteca ADO.NET este utilizat pentru accesarea bazelor de date SQL Server.
Figura 14: Arhitectură ADO.NET
Tehnologia ASP.NET
În ziua de astăzi aproape orice putem găsi și face pe internet, de la jocuri, citit ziare până la cumpărături. Aplicația care permite navigarea pe internet a fost denumită simplu browser și a fost dezvoltată de mai multe companii, fiecare aducându-i mai multe caracteristici, precum și diferite opțiuni pentru o navigare cât mai plăcută. Acest browser are rolul de accesa documente care se numesc site-uri sau pagini web, iar acestea au rolul de a afișa informația de pe pagina respectivă. Aceste pagini web pot fi dezvoltate în diferite programe de specialitate și diferite limbaje de programare. O tehnologie de care are ca scop acest lucru este ASP.NET și este dezvoltată de Microsoft. Această tehnologie pe lângă faptul ajută la crearea paginilor web, mai poate crea și aplicații web, precum și servicii web. ASP.NET a fost introdus pentru prima dată pe piață în Ianuarie 2002 cu versiunea 1.0 și integrat în versiunea Visual Studio de la vremea respectivă. Acesta este succesorul tehnologiei Microsoft Active Server Pages (ASP). La fel ca și ADO.NET aceasta a fost creată utilizând limbajul de programare (CLR), acesta permițându-i să interacționeze cu alte limbaje de programare precum C#, VB.NET și altele.
Paginile web create cu tehnologia ASP.NET sunt forme Web, acestea fiind depistate pe Internet datorită extensiei „.aspx”.
ASP.NET este o platformă în cadrul căreia, pentru crearea unor site-uri web, aplicații web și servicii web, acestea vor fi scrise cu ajutorul limbajelor de programare HTML (HyperText Markup Language), CSS (Cascading Style Sheets) și JavaScript.
Tipuri de site-uri web în tehnologia ASP.NET
Web Pages utilizate pentru a crea o pagină web utilizând mai multe limbaje de programare (acceptate de ASP.NET).
SPA (Single Page Application) se utilizează pentru crearea de aplicații de tip client cu ajutorul HTML 5, CSS 3 și JavaScript
Web Forms se utilizează pentru crearea unor pagini web la care putem crea control, modele și evenimente
Model View Controller (MVC) acest tip este structurat în 3 părți pentru o mai bună testare și definirea a propietăților
În paginile Web ASP.NET se introduce codul serverului direct în sintaxa HTML, similar cu acestea se utilizează Singe Page Model (codul din partea „cs” este folosit împreună cu HTML), utilizând caracteristica Razor (fișiere .cshtml). Această caracteristică face codul paginii să fie mai ușor și mai eficient.
Web Form este alcătuit din 2 părți și anume GUI (Graphic user interface), fișierul cu extensia (.aspx) și codul propriu zis, fișier cu extensia (.aspx.cs).
Tehnologia folosită în crearea unui server
Această tehnologie se numește Internet Information Services (IIS) și este folosită în crearea unui server web. Aceasta este la rândul ei dezvoltată de Microsoft. Serverul web poate fi de 2 tipuri: hardware sau software (aplicație propriu zisă), acestea ajută la livrarea conținutului web care poate fi accesat prin intermediul internetului. Serverele web sunt folosite cel mai des pentru a găzdui site-uri web, dar există și alte utilizări, cum ar fi jocuri, stocare a datelor sau diferite aplicații.
Servicii web
Serviciile web sunt folosite pentru partajarea de date între diverse dispozitive (tablete, telefoane) și internet. O ierarhie completă a unei aplicații web care permite conectarea dispozitivelor este prezentată în figura următoare.
Figura 15: Ierarhie aplicație web
Implementarea soluției adoptate
Definirea bazei de date
Acest proiect de diplomă a fost realizat cu scopul de a concepe o aplicație web cu tehnologia ASP.NET versiunea 4.5.2, pentru o firmă de asigurări. În realizarea acesteia am folosit Visual Studio 2015, utilizând limbajele de programare C#, JavaScript, HTML, pentru implementarea design-ului și controlului, iar pentru construirea bazei de date am folosit software-ul SQL Server Management Studio 2008, cu limbajul de programare aferent SQL. După cum se observă și mai sus această aplicație este împărțită în două părți: una este realizarea bazei de date, iar cealaltă realizare pagini web.
Scopul final al acestui proiect este ușurarea achiziției unei asigurări din partea unui client și simplificarea gestiunii datelor din partea asiguratorului.
Crearea bazei de date
Pentru crearea bazei de date s-a folosit software-ul SQL Server Management Studio 2008, utilizând limbajul de programare SQL. Aici vor fi salvate datele persoanei asigurate și cele legate de autovehicul. Această bază de date conține 9 tabele cu date, toate corelate între ele, pentru o mai bună relație între client și asigurator.
Un prim pas în realizarea acesteia este: crea un proiect nou File→New→Project, apoi selectăm SQL Server Scripts, unde vom putea denumi acest proiect, precum și alegerea locației unde dorim să îl salvăm.
Figura 16: Crearea unui proiect nou în SQL Server Management Studio 2008
În următoarea fereastră (Solution Explorer, partea dreaptă) se va apăsa click dreapta pe denumirea scriptului creat anterior apoi Add→New Query, asemenea figurii următoare.
Figura 17: Crearea unui query
Definirea tabelelor
În query-ul definit mai sus se va crea baza de date cu numele dorit, apoi se vor crea tabelele aferente. Pentru crearea bazei de date se folosește comanda CREATE DATABASE, urmată de numele alocat pentru aceasta. Definirea tabelelor se va realiza cu comanda CREATE TABLE, urmată de numele atribuit tabelului.
În continuare sunt enumerate tabelele din baza de date:
Firma_Asiguratoare
[Auto]
[Tip Juridica]
[Tip Persoana]
Asigurare
Activare
Inregistrare
Client
[Tabel principal]
Fiecare tabel conține coloane pentru o mai bună sortare a datelor. Pentru definirea unei coloane se utilizează modelul: mai întâi se scrie denumirea coloanei, apoi se declară tipul de date ce urmează să fie înscris în ea, se alege tipul de cheie (dacă este coloană principală), apoi proprietăți opționale: cum ar fi NOT NULL, dacă se dorește ca în coloana, celulele nu fi rămână goale sau IDENTITY(1,1), dacă se dorește numerotare automată a acestora rândurilor (folosită dacă se șterge un rând să continua numărătoarea de unde a rămas), precum și altele. Aceste proprietăți se pot realiza ulterior, dacă s-a uitat declararea lor în cod, cu ajutorul unui meniu.
Creare legături între tabele
Aceste tabele au câte o coloană de tip ID, care este definită ca și PRIMARY KEY, dacă este coloana principală. Într-un tabel doar o singură coloană poate fi definită ca PRIMARY KEY. Acest ID este de ajutor atunci când se căută date în acel tabel sau aceasta mai are și rol de numerotare. Unele tabele conțin și coloana de tip ID a altor tabele, dar aici definite ca și FOREIGN KEY. Aceasta înseamnă că între ele s-a realizat o conexiune și din ele or să se extragă date. O astfel de legătură este reprezentată în figura 7.
Codul sursă folosit pentru crearea bazei
CREATE DATABASE test;
create table Firma_Asiguratoare (
ID_Firma int not null identity (1,1) primary key,
Denumire char(20),
Adresa char(100),
Telefon char(14),
Adresa_email char (30),
Website char(40)
);
create table [Auto] (
ID_Auto int not null identity(1,1) primary key,
Marca char(20),
Model char(20),
Putere char(4),
Capacitate_cilindrica char(10),
Serie_sasiu char(17),
An_fabricatie char(4),
Combustibil char(10),
Numar_locuri char(3),
Masa char(6),
Numar_inmatriculare char(10),
An_obtinere_permis int,
Tip_Autovehicul char(10)
);
create table [Tip Juridica](
ID_Tip_Juridica int not null identity (1,1) primary key,
Denumire char (40),
CIF char(12)
);
create table [Tip Persoana] (
ID_Tip_Persoana int not null identity (1,1) primary key,
Persoana char(20),
ID_Tip_Juridica int foreign key references [TipJuridica](ID_Tip_Juridica)
);
create table Asigurare (
ID_Asigurare int not null identity (1,1) primary key,
Tip_asigurare char(20),
ID_Auto int foreign key references [Auto](ID_Auto)
);
create table activare (
Id_activare int not null primary key,
cod_activare uniqueidentifier not null
);
create table inregistrare (
Id_inregistrare int identity(1,1) primary key not null,
Username nvarchar(20) not null,
Email nvarchar(20) not null,
Password nvarchar(20) not null,
Createddate smalldatetime not null,
Lastlogindate smalldatetime null,
Id_activare int foreign key references activare (Id_activare)
);
create table Client (
ID_Client int not null IDENTITY (1,1) primary key,
Data_asigurare date not null,
Nume char(20),
Prenume char(50),
CNP char(13),
Serie_CI char(2),
Numar_CI char(6),
Strada char(40),
Numar_strada char(5),
Scara char (5),
Numar_apartament char (5),
Localitate char(30),
Judet char(15),
Numar_de_telefon char(15),
ID_Tip_Persoana int foreign key references [Tip Persoana](ID_Tip_Persoana),
Id_inregistrare int foreign key references inregistrare(Id_inregistrare)
);
create table [Tabel principal](
ID_Tabel int not null identity (1,1) primary key,
ID_Client int FOREIGN KEY REFERENCES Client(ID_Client),
ID_Firma int foreign key references Firma_Asiguratoare(ID_Firma),
ID_Asigurare int foreign key references Asigurare (ID_Asigurare),
Pret char(8)
);
GO
CREATE PROCEDURE [dbo].[Insert_User]
@Username NVARCHAR(20),
@Password NVARCHAR(20),
@Email NVARCHAR(20)
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS(SELECT Id_inregistrare FROM inregistrare WHERE Username = @Username)
BEGIN
SELECT -1
END
ELSE IF EXISTS(SELECT Id_inregistrare FROM inregistrare WHERE Email = @Email)
BEGIN
SELECT -2
END
ELSE
BEGIN
INSERT INTO [inregistrare]
([Username]
,[Password]
,[Email]
,[Createddate])
VALUES
(@Username
,@Password
,GETDATE())
SELECT SCOPE_IDENTITY()
END
END
GO
CREATE PROCEDURE [dbo].[Validate_User]
@Username NVARCHAR(20),
@Password NVARCHAR(20)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id INT, @Lastlogindate DATETIME
SELECT @Id = Id_inregistrare, @Lastlogindate = Lastlogindate
FROM inregistrare WHERE Username = @Username AND [Password] = @Password
IF @Id IS NOT NULL
BEGIN
IF NOT EXISTS(SELECT Id_activare FROM activare WHERE Id_activare = @Id)
BEGIN
UPDATE inregistrare
SET Lastlogindate = GETDATE()
WHERE Id_inregistrare = @Id
SELECT @Id [Id_inregistrare]
END
ELSE
BEGIN
SELECT -2
END
END
ELSE
BEGIN
SELECT -1
END
END
Crearea aplicației
Pentru realizarea acesteia am utilizat 3 limbaje de programare C#, JavaScript, HTML. În realizarea interfeței am utilizat software-ul Visual Studio 2015, unde pentru a crea o astfel de aplicație am selectat File→New→Project, aici se va denumi proiectul după bunul plac și se poate selecta locația unde să fie salvat. În noua fereastră apărută se va selecta ASP.NET Web Application (.NET Framework), unde din nou se va putea alege orice denumire, apoi software-ul va crea soluția configurată anterior.
Figura 18: Creare unui proiect nou în Visual Studio 2015
În următoarea fereastră se va alege tipul de site pe care se dorește, în acest proiect fiind vorba de Web forms.
Figura 19: Alegerea tipului de site
Web Form este alcătuit din 2 părți și anume GUI (Graphic user interface), fișierul cu extensia (.aspx) și codul propriu zis, fișier cu extensia (.aspx.cs). În extensia (.aspx.cs) se va scrie codul în C#. Aici se va scrie și codul pentru conectare bazei de date cu proiectul (tehnologia ADO.NET), acesta fiind:
SqlConnection con = new SqlConnection(@"Data Source=(local);Initial Catalog=baza;Integrated Security=True");
Aceasta nu va funcționa fără directiva: System.Data.
O altă soluție pentru evitarea scrierii codului pentru conectarea bazei de date este selectarea acesteia cu ajutorul opțiunii Server Explorer, ca în figura de mai jos. Tot aici se poate crea chiar o bază de date similară cu cea realizată în SQL Server Management Studio 2008. Pașii pentru folosirea acestei opțiuni sunt: selectarea Server Explorer→Connect to Database, apoi se vor insera datele necesare cu care a fost configurată baza de date (nume), precum și datele de autentificare dacă este cazul.
Figura 20: Selectarea bazei de date
Design-ul aplicației
În extensia (.aspx) s-a realizat design-ul aplicației (interfața), cu ajutorul limbajelor C#, HTML și JavaScript. Tehnologia ASP.NET care are integrat tipul de site Web form și dispune de instrumente specializate de proiectare a acestora, ușurând munca dezvoltatorilor în crearea aplicațiilor în acest domeniu.
Figura 21: Meniul cu instrumente și fereastra design
Realizarea interfeței
Această parte din lucrare conține 15 pagini de tipul Web form toate destinate atât clienților deja existenți, cât și potențialilor clienți. Aceste pagini au ca scop introducerea datelor de către client, afișarea prețurilor, printarea asigurării pe loc, alegerea asigurării necesare, precum și plata acesteia cu cardul.
Pentru realizarea acestui design a fost nevoie de următoarele controale din instrumente oferite de această tehnologie: Button, Calendar, CheckBox, DropDownList, GridView, HyperLink, Image, ImageButton Label, LinkButton, Login, RadioButton, TextBox.
Cele 15 pagini se numesc:
Acasa
Activare
Asigurareauto
CASCO Fizica
CASCO Juridica
Date personale fizica
Date personale juridica
Factura
Inregistrare
Login
main
plata
politaasigurare
RCA Fizica
RCA Juridica
În pagina main, utilizatorii pot alege între două opțiuni una pentru asigurări mașini, iar alta pentru asigurări telefoane (pagină în construcție). Acestea opțiuni au fost reprezentate sub formă de controale ImageButton. Imaginile au fost încărcate în folderul Images care se află în Solution Explorer.
Figura 22: Pagina main
În pagina asigurareauto se va alege tipul de asigurare și tipul de persoană prin intermediul controalelor RadioButton, grupate în două grupuri, apoi se va apăsa butonul alege pentru a continua pe pagina următoare.
Figura 23: Pagina asigurareauto
Pagina CASCO Fizica oferă următoarele controale: 9 TextBox-uri, 5 DropDownList-uri, un Calendar și un Gridview. Această pagină este dedicată clienților ce doresc să încheie o asigurare de tip CASCO, specificând datele mașinii, data când să intre in vigoare asigurarea, anul nașterii, anul de fabricație al mașinii, anul obținerii permisului auto, valoarea automobilului de nou, precum și franșiza pe care proprietarul dorește să o ofere.
Figura 24: Pagina CASCO Fizica
În pagina CASCO Juridica au fost create următoarele controale: 9 TextBox-uri, 5 DropDownList-uri, un Calendar și un Gridview. Această pagină este dedicată clienților ce doresc să încheie o asigurare de tip CASCO, specificând datele mașinii, data când să intre in vigoare asigurarea, anul nașterii, anul de fabricație al mașinii, anul obținerii permisului auto, valoarea automobilului de nou, precum și franșiza pe care proprietarul dorește să o ofere.
Figura 25: Pagina CASCO Juridica
În pagina Date personale fizica, clienții își pot insera datele cu caracter personal în TextBox-urile: nume, prenume, zinastere, nr_cnp , nr_serie, nr, strada, numar, scara, apartament, telefon și se pot alege: luna de naștere, județul și orașul din controalele DropDownList Ddluna, Ddjudet, Ddoras.
Figura 26: Pagina Date personale fizica
În pagina Date personale juridica, clienții își pot insera datele cu caracter personal în TextBox-urile: nume, prenume, zinastere, C.U.I , denumire firmă, nr, strada, numar, scara, apartament, telefon și se pot alege: luna de naștere, județul și orașul din controalele DropDownList Ddluna, Ddjudet, Ddoras.
Figura 27: Pagina Date personale juridica
În pagina factura, este factura propriu zisă, pe care clientul o va primi după executarea plății, acesta având obligația de a o printa.
Figura 28: Pagina factura
Pentru pagina inregistrare, clientul trebuie să își insereze numele de utilizator dorit, o adresă de mail validă și o parolă în controale de tip TextBox. Dacă există deja un cont creat, atunci se va face direct logarea apăsând pe controlul LinkButton. După apăsarea butonului înregistrare, utilizatorul va fi redirecționat către pagina de login. În momentul când contul este creat, acesta va trebui activat cu un cod primit pe mail.
Figura 29: Pagina inregistrare
În pagina login se vor insera numele și parola în controalele de tip login iar apoi dacă se dorește se pot salva datele pentru următoarea sesiune de login acționând un control de tip CheckBox.
Figura 30: Pagina login
În pagina plata, clientul trebuie să introducă datele cardului în controalele de tip TextBox, să selecteze luna și anul expirării cardului din controalele de tip DropDownList, apoi se apasă butonul De acord, dacă au fost introduse toate datele și dacă sunt gata pentru validare.
Figura 31: Pagina plata
Pentru pagina RCA Fizica, clientul trebuie să introducă câteva date tehnice legate de autovehicul, pentru a calcula pe baza acestora ofertele de la asiguratori. În această pagină avem 7 controale de tip TextBox, 5 controale de tip DropDownList, un Calendar unde se poate alege data de începere a valabilității poliței și un GridView unde sunt afișate firmele asiguratoare, precum și prețurile oferite.
Figura 32: Pagina RCA Fizica
La fel ca și pagina RCA Fizica, aceasta are la rândul ei aceleași controale, doar că pentru persoane juridice.
Figura 33: Pagina RCA Juridica
Corelarea ferestrei de design cu codul din spatele acesteia
Pentru o mai bună funcționare a controalelor s-au realizat câteva funcții având ca scop verificarea acestora. Pentru controlul de tip TextBox „nr_cnp” din pagina Date personale fizica s-a creat o funcție de verificare a codului numeric personal. Acest CNP este de forma: CNP-ul conține 13 cifre dintre care prima reprezintă sexul, următoarele 2 reprezintă ultimele 2 cifre din anul de naștere, următoarele 2 reprezintă numărul lunii (exemplu: 01), următoarele 2 reprezintă ziua nașterii (exemplu: 01), următoarele 2 reprezintă un număr unic alocat fiecărui județ, apoi următoarele 3 reprezintă 3 cifre alocate la întâmplare, iar ultima cifră reprezintă cifra de control. Pentru această cifră de control am creat funcția următoare în JavaScript:
function validareCNP(nr_cnp)
{
var nrcifre = document.getElementById('nr_cnp').value;
var suma=0;
if (nrcifre.length == 13)
{
suma = parseInt(nrcifre[0]) * 2 + parseInt(nrcifre[1]) * 7 + parseInt(nrcifre[2]) * 9 + parseInt(nrcifre[3]) * 1 + parseInt(nrcifre[4]) * 4 + parseInt(nrcifre[5]) * 6 + parseInt(nrcifre[6]) * 3 + parseInt(nrcifre[7]) * 5 + parseInt(nrcifre[8]) * 8 + parseInt(nrcifre[9]) * 2 + parseInt(nrcifre[10]) * 7 + parseInt(nrcifre[11]) * 9;
suma = suma % 11;
if(suma==10)
suma = 1;
if (suma == parseInt(nrcifre[12])) {
return true;
}
else {
alert("CNP invalid !!!");
document.getElementById('nr_cnp').value = "";
return false;
}
}
else{
alert("CNP de lungime necorespunzatoare 13!");
return false;
}
}
Cifra de control este calculată după cum urmează: fiecare cifră din C.N.P. este înmulțită cu cifra de pe aceeași poziție din numărul 279146358279; rezultatele sunt însumate, iar rezultatul final este împărțit cu rest la 11. Dacă restul este 10, atunci cifra de control este 1, altfel cifra de control este egală cu restul. [10]
Pentru a verifica ziua, județul și luna s-au realizat funcții asemănătoare celei precedente în același limbaj de programare. Definirea valorii din controlul DropDownList s-a făcut în ListItem, numerele fiecărui județ s-au luat de pe [10].
function eroarezi() {
var nrcifre = document.getElementById('nr_cnp').value;
var zi = document.getElementById('zinastere').value;
if (nrcifre[5] != parseInt(zi[0]) && nrcifre[6] != parseInt(zi[1])) {
alert("CNP gresit");
document.getElementById('nr_cnp').value = "";
}
}
function eroarejudet() {
var nrcifre = document.getElementById('nr_cnp').value;
var nrjudet = document.getElementById('Ddjudet');
var nrcifrejud = nrjudet.options[nrjudet.selectedIndex].value;
if (((nrcifre.substr(7, 1)) == (nrjudet.value.substr(0, 1))) && ((nrcifre.substr(8, 1)) == (nrjudet.value.substr(1, 1)))) {
}
else {
alert("CNP eronat la luna!");
document.getElementById('nr_cnp').value = "";
}
}
function eroareluna() {
var luna= document.getElementById("Ddluna");
var nrcifrele = luna.options[luna.selectedIndex].value;
var nrcifre = document.getElementById('nr_cnp').value;
if (((nrcifre.substr(3, 1)) == (luna.value.substr(0, 1))) && ((nrcifre.substr(4, 1)) == (luna.value.substr(1, 1)))) {
}
else {
alert("CNP eronat!");
document.getElementById('nr_cnp').value = "";
}
}
În pagina Date personale juridica am creat o funcție pentru validarea datelor înscrise în controlul de tip TextBox „cui”. Pentru crearea acesteia am folosit formula de calcul de pe [11]. Acest C.U.I. conține între 7 și 10 cifre, ultima cifră fiind cifra de control.
Pas preliminar: Se testează dacă codul respectă formatul unui cod de identificare fiscală (CIF). Adică lungimea maximă să fie de 10 cifre și să conțină doar caractere numerice.
Pas 1: Se folosește cheia de testare "753217532". Se inversează ordinea cifrelor codului precum și a cheii de testare.
Pas 2: Se ignoră prima cifra din codul inversat (aceasta este cifra de control) și se înmulțește fiecare cifră cu cifra corespunzătoare din cheia de testare inversată.
Pas 3: Se adună toate produsele obținute. Suma rezultată se înmulțește cu 10 și produsul este împărțit la 11. Cifra obținută, în urma operației MODULO 11, reprezintă cifra de verificare. Dacă în urma împărțirii s-a obținut restul 10 atunci cifra de verificare va fi 0.
Pas 4: Pentru un CIF valid cifra de verificare va trebui să corespundă cu cifra de control a CIF inițial. [11]
function validateCIF(cui) {
var cifu = document.getElementById('cui').value;
var control = cifu.substr(cifu.length, – 1);
var suma = 0;
var d1 = 0;
var d2 = 0;
if (cifu.length >= 7){
suma = parseInt(cifu[0]) * 7 + parseInt(cifu[1]) * 5 + parseInt(cifu[2]) * 3 + parseInt(cifu[3]) * 2 + parseInt(cifu[4]) * 1 + parseInt(cifu[5]) * 7 + ((parseInt(cifu[6]) * 5) || 0) + ((parseInt(cifu[7]) * 3) || 0) + ((parseInt(cifu[8]) * 2) || 0);
suma = suma * 10;
d1 = suma % 11;
d2 = d1 % 10;
if (d2 == control) {
return true;
}
else {
alert("CUI invalid");
document.getElementById('cui').value = "";
return false;
}
}
else {
alert("Va rugam inserati un CUI valid!");
document.getElementById('cui').value = "";
}
}
Pentru că acest C.U.I. conține doar cifre am creat o funcție pentru a nu se putea tasta decât cifre.
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
Această funcție a fost implementată la fiecare control de tip TextBox prin următoarea metodă:
onkeypress=" return isNumberKey(event)"
Metoda aceasta verifică funcția de câte ori o tastă este apăsată. O altă metodă implementată pentru evitarea copierii unui text în controlul de tip TextBox, am folosit o altă metodă, care nu permite lipirea în acest control.
onpaste="return false"
Implementarea unei pagini ce trimite mail-uri
În realizarea acestei pagini am folosit clasa StmpClient din spațiul System.Net.Mail.
private void SendActivationEmail(int Id)
{
string cod_activare = Guid.NewGuid().ToString();
using (SqlCommand com = new SqlCommand("Insert into activare values(@Id, @cod_activare)"))
{
com.CommandType = CommandType.Text;
com.Parameters.AddWithValue("@Id", Id);
com.Parameters.AddWithValue("@cod_activare", cod_activare);
com.Connection = con;
con.Open();
com.ExecuteNonQuery();
con.Close();
}
using (MailMessage mail = new MailMessage("subredurobert@gmail.com", emailtxt.Text))
{
mail.Subject = "Activare cont";
string body = "Salut " + numetxt.Text.Trim() + ",";
body += "<br /><br />Va rugam apasa-ti pe link-ul de mai jos pentru a finaliza activarea contului dumneavoastra";
body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("inregistrare.aspx", "activare.aspx?cod_activare=" + cod_activare) + "'>Click here to activate your account.</a>";
body += "<br /><br />Multumim";
mail.Body = body;
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
NetworkCredential NetworkCred = new NetworkCredential("subredurobert@gmail.com", "0742292225ex");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mail);
ClientScript.RegisterStartupScript(GetType(), "alert", "alert('V-am trimis un mail de confirmare.');", true);
}
}
Rezultate experimentale
În acest proiect de diplomă am realizat o aplicație web, care are ca scop oferire clienților noi sau deja existenți, o perspectivă diferită prin compararea prețurilor dintre asigurători și alegerea celor mai favorabile și mai potrivite oferte. Datorită faptului că toate companiile de asigurări oferă prețuri de asigurare după completarea datelor atât ale autovehiculului, cât și a proprietarului, am scurtat această metodă creând o pagină pentru fiecare tip de asigurare și fiecare tip de persoana. Aceasta conține un algoritm de calcul al asigurării în spatele căreia am folosind doar datele autovehiculului.
Prima interacțiune a clientului cu acest site este pagina de pornire care îi dă posibilitatea de a alege ce fel de persoană este (fizică / juridică) și ce fel de asigurare vrea să facă pentru autovehiculul său (RCA / CASCO), la fel ca în figura 23. După apăsarea butonului alege, clientul va fi redirecționat către pagina de asigurare aleasă. În aceasta, va trebui să își introducă datele autovehiculului și câteva date personale, după care prețurile la fiecare firmă asiguratoare vor fi afișate într-un control de tip GridView. În cazul necompletării unui control de tip TextBox, va apărea următoarea alertă:
Figura 34: Alertă necompletarea oricărui TextBox
Alertă afișată pe ecran în cazul neselectării unei date calendaristice din controlul Calendar
Figura 35: Alertă neselectarea unei date calendaristice
În cazul neselectării unui Item din controlul de tip DropDownList „Ddanobtinerepermis”, pe ecran va apărea următoarea alertă. În cazul necompletării controlului de tip TextBox „annastere”, alerta va fi aceeași sau dacă diferența dintre anul obținerii permisului și anul nașterii este mai mică de 18 ani.
Figura 36: Alertă diferență dintre anul obținerii permisului și anul nașterii < 18
În cazul optării pentru o asigurare CASCO, multe dintre firmele asiguratoare nu asigură autovehicule, mai vechi de 10 ani, iar clientul va insera un an din care rezultă că autovehiculul este mai vechi de 10 ani, pe ecran va apărea următoarea alertă:
Figura 37: Alertă diferență an curent și an fabricație mai mare de 10 ani
În cazul paginii Date personale fizica, controlul de tip TextBox „telefon” are asignat în spatele ferestrei de design un validator de expresie, care conține următoarea expresie:
<asp:RegularExpressionValidator ID="telefonvalidate" runat="server" style="z-index: 1; left: 337px; top: 321px; position: absolute"
ErrorMessage="Introduce-ti un numar valid!(ex: 07xxxxxxxx)." ForeColor="Red"
ControlToValidate="telefon"
ValidationExpression="^07[2-8][0-9]{7}$"/>
Această expresie validează doar numerele de telefon care încep cu prefixul „07”, a treia cifră este o cifră între 2 și 8, iar restul de 7 cifre vor putea fi între 0 și 9. În cazul nerespectării acestei reguli pe ecran va apărea mesajul de eroare: „Introduce-ti un numar valid! (ex:07xxxxxxxx).” , iar pe fundal va apărea mesajul exact ca în figura următoare:
Figura 38: Eroare mesaj pentru tastarea unui număr de telefon invalid
Concluzii
În această lucrare de diplomă s-a realizat o aplicație web, pentru o firmă intermediară de asigurări auto. Aceasta are un scop bine definit și anume scutirii deplasării clientului la sediul firmei, precum și scutirea asiguratorului de salvare a datelor necesare încheierii poliței de asigurare în registre. Pentru această aplicație am folosit cele două soft-uri dezvoltate de Microsoft și anume Visual Studio 2015 și SQL Server Management Studio 2008. Cele două medii de programare compilează limbajele C#, JavaScript, HTML, respectiv SQL. Pentru crearea acestei aplicații am creat o bază de date pentru salvarea datelor inserate de client cu ajutorul limbajului SQL și o interfață care să permită inserarea datelor și salvarea lor in baza de date utilizând limbajele C#, JavaScript și HTML. În realizarea acestei aplicații m-am documentat pentru a oferi clienților o varietate cât mai mare de firme asiguratoare și o ofertă cât mai apropiată de cea oferită de acestea la momentul acela.
Calculul asigurărilor se face în funcție de fiecare firmă asiguratoare pe baza datelor inserate de către client.
Această aplicație se recomandă intermediarilor de asigurări auto (brokeri), pentru clienți acestora. Aceștia funcționând atât la birou cât și în mediul online prin intermediul aplicației create în acest proiect.
O dezvoltare a acestei aplicații web este extinderea domeniului de activitate cum ar fi: asigurarea de răspundere a transportatorului rutier pentru marfa transportată, asigurarea de răspundere a operatorilor de transport rutier, asigurarea de răspundere față de călători și bagaje, asigurarea de malpraxis medical, asigurarea obligatorie a locuinței, asigurarea de călătorie.
Bibliografie
[1] CREAREA BAZELOR DE DATE – SQL SERVER – document, 2017 [online]
https://biblioteca.regielive.ro/cursuri/calculatoare/crearea-bazelor-de-date-sql-server-limbaje-de-programare-172441.html
[2] Guarantee Fund, 2017, [online]. Disponibil la:
http://eisoukr.guaranteefund.org/searchpolicy?pc=null&l=en
[3] Inspection check, 2017, [online]. Disponibil la:
https://rta.government.bgimages/Image/check-inspection/index.html
[4] Euroins, 2017, [online]. Disponibil la:
https://www.euroins.ro/
[5] Omniasig Vienna Insurance Group, 2017, [online]. Disponibil la:
https://www.omniasig.ro/
[6] Asirom, 2017, [online]. Disponibil la:
https://www.asirom.ro/
[7] CityInsurance, 2017, [online]. Disponibil la:
https://cityinsurance.ro/
[8] Groupama, 2017, [online]. Disponibil la:
https://www.groupama.ro/
[9] RDW, 2017, [online]. Disponibil la:
https://www.rdw.nl/particulier/Paginas/default.aspx
[10] Wikipedia, 2017, [online]. Disponibil la:
https://ro.wikipedia.org/wiki/Cod_numeric_personal
[11] Wikipedia, 2017, [online]. Disponibil la:
https://ro.wikipedia.org/wiki/Cod_de_Identificare_Fiscal%C4%83
[12] Julian Skinner, Bipin Joshi, Professional ADO.NET Programming, Ed. WROX PRESS 2001
[13] Doug Lowe, ASP.NET 2.0 Everyday Apps for Dummies, Ed. For Dummies, February 27 2006
[14] Horea Oros, Curs baze de date, Suport de curs
[15] Allen G. Taylor, SQL All-in-One For Dummies, Ed.For Dummies, 2008
[16] ASP.NET Session State Overview, 2017, [online]. Disponibil la:
https://msdn.microsoft.com/en-us/library/ms178581.aspx
[17] Modele si tipuri de baze de date – document 2017 [online]
http://www.scritub.com/stiinta/informatica/baze-de-date/MODELE-SI-TIPURI-DE-BAZE-DE-DA81161.php
Anexe
//directive folosite
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Web.SessionState;
namespace asplicenta
{
public partial class WebForm1 : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(@"Data Source=(local);Initial Catalog=test;Integrated Security=True");
public void varstaminima()
{
int obtinerepermis;
int nastere;
bool conditie;
if (Int32.TryParse(Ddanobtinerepermis.SelectedValue, out obtinerepermis)) {
obtinerepermis = int.Parse(Ddanobtinerepermis.SelectedValue);
}
if (Int32.TryParse(annastere.Text, out nastere)) {
nastere = int.Parse(annastere.Text);
}
conditie = obtinerepermis < nastere;
if (conditie)
{
Response.Write("<script>alert('Eroare anul permisului este mai mic decat anul nasterii!')</script>");
}
}
public void datacalendar()
{
if (Calendar1.SelectedDate.Date == DateTime.MinValue.Date)
{
Response.Write("<script>alert('Nu ati ales o data!')</script>");
}
else
{
Response.Write("<script>alert('Ati selectat o data!')</script>");
}
}
public void nasterepermis()
{
int diferenta;
int obtinerepermis;
int nastere;
if (Int32.TryParse(annastere.Text, out nastere))
{
nastere = int.Parse(annastere.Text);
}
if (Int32.TryParse(Ddanobtinerepermis.SelectedValue, out obtinerepermis))
{
obtinerepermis = int.Parse(Ddanobtinerepermis.SelectedValue);
}
diferenta = obtinerepermis – nastere;
if (diferenta < 18)
{
Response.Write("<script>alert('Eroare diferenta dintre anul nasterii si anul obtinerii permisului nu rezulta varsta legala!')</script>");
}
}
public void varstalegala(){
int ancurent = DateTime.Now.Year;
int nastere;
if (Int32.TryParse(annastere.Text, out nastere))
{
nastere = int.Parse(annastere.Text);
}
int varsta= ancurent – nastere;
if (varsta < 18)
{
Response.Write("<script>alert('Eroare nu aveti 18 ani!')</script>");
}
}
public void completare()
{
if (Ddanobtinerepermis.SelectedItem.Value == String.Empty || capacitate.Text == String.Empty || putere.Text == String.Empty || annastere.Text==String.Empty )
{
Response.Write("<script>alert('Eroare completeaza toate campurile!')</script>");
}
}
protected void Button3_Click(object sender, EventArgs e)
{
Session["Tip auto"] = Ddltipauto.SelectedValue;
Session["Marca"] = Ddmarca.SelectedValue;
Session["Model"] = Ddmodel.SelectedValue;
Session["Capacitate"] = capacitate.Text;
Session["Putere"] = putere.Text;
Session["Serie sasiu"] = sasiu.Text;
Session["An fabricatie"] = anfabricatie.Text;
Session["Combustibil"] = Ddcombustibil.SelectedValue;
Session["Numar locuri"] = Ddlocuri.SelectedValue;
Session["Masa"] = masa.Text;
Session["An obtinere permis"] = Ddanobtinerepermis.SelectedValue;
Session["Numar inmatriculare"] = nrinmatriculare.Text;
Session["An nastere"] = annastere.Text;
Session["calendar"] = Calendar1.SelectedDate.ToString("MM/dd/yyyy");
int ancurent = DateTime.Now.Year;
float pret = 0;
float cheltuieli = 0;
int nastere;
if (Int32.TryParse(annastere.Text, out nastere))
{
nastere = int.Parse(annastere.Text);
}
int capacitatenr;
if (Int32.TryParse(capacitate.Text, out capacitatenr))
{
capacitatenr = int.Parse(capacitate.Text);
}
int obtinere;
if (Int32.TryParse(Ddanobtinerepermis.Text, out obtinere))
{
obtinere = int.Parse(Ddanobtinerepermis.Text);
}
int varsta = ancurent – nastere;
if (varsta <= 25 & capacitatenr <= 1200)
{
pret = 292 + cheltuieli;
}
else if (26 <= varsta && varsta <= 30 & capacitatenr <= 1200)
{
pret = 286 + cheltuieli;
}
else if (31 <= varsta && varsta <= 40 & capacitatenr <= 1200)
{
pret = 177 + cheltuieli;
}
else if (41 <= varsta && varsta <= 50 & capacitatenr <= 1200)
{
pret = 182 + cheltuieli;
}
else if (51 <= varsta && varsta <= 60 & capacitatenr <= 1200)
{
pret = 178 + cheltuieli;
}
else if (varsta > 60 & capacitatenr <= 1200)
{
pret = 138 + cheltuieli;
}
else if (varsta <= 25 & 1201 < capacitatenr && capacitatenr <= 1400)
{
pret = 385 + cheltuieli;
}
else if (26 <= varsta && varsta <= 30 & 1201 < capacitatenr && capacitatenr <= 1400)
{
pret = 281 + cheltuieli;
}
else if (31 <= varsta && varsta <= 40 & 1201 < capacitatenr && capacitatenr <= 1400)
{
pret = 173 + cheltuieli;
}
else if (41 <= varsta && varsta <= 50 & 1201 < capacitatenr && capacitatenr <= 1400)
{
pret = 178 + cheltuieli;
}
else if (51 <= varsta && varsta <= 60 & 1201 < capacitatenr && capacitatenr <= 1400)
{
pret = 174 + cheltuieli;
}
else if (varsta > 60 & 1201 < capacitatenr && capacitatenr <= 1400)
{
pret = 135 + cheltuieli;
}
else if (varsta <= 25 & 1401 < capacitatenr && capacitatenr <= 1600)
{
pret = 487 + cheltuieli;
}
else if (26 <= varsta && varsta <= 30 & 1401 < capacitatenr && capacitatenr <= 1600)
{
pret = 361 + cheltuieli;
}
else if (31 <= varsta && varsta <= 40 & 1401 < capacitatenr && capacitatenr <= 1600)
{
pret = 231 + cheltuieli;
}
else if (41 <= varsta && varsta <= 50 & 1401 < capacitatenr && capacitatenr <= 1600)
{
pret = 236 + cheltuieli;
}
else if (51 <= varsta && varsta <= 60 & 1401 < capacitatenr && capacitatenr <= 1600)
{
pret = 232 + cheltuieli;
}
else if (varsta > 60 & 1401 < capacitatenr && capacitatenr <= 1600)
{
pret = 184 + cheltuieli;
}
else if (varsta <= 25 & 1601 < capacitatenr && capacitatenr <= 1800)
{
pret = 559 + cheltuieli;
}
else if (26 <= varsta && varsta <= 30 & 1601 < capacitatenr && capacitatenr <= 1800)
{
pret = 417 + cheltuieli;
}
else if (31 <= varsta && varsta <= 40 & 1601 < capacitatenr && capacitatenr <= 1800)
{
pret = 272 + cheltuieli;
}
else if (41 <= varsta && varsta <= 50 & 1601 < capacitatenr && capacitatenr <= 1800)
{
pret = 278 + cheltuieli;
}
else if (51 <= varsta && varsta <= 60 & 1601 < capacitatenr && capacitatenr <= 1800)
{
pret = 273 + cheltuieli;
}
else if (varsta > 60 & 1601 < capacitatenr && capacitatenr <= 1800)
{
pret = 219 + cheltuieli;
}
else if (varsta <= 25 & 1801 < capacitatenr && capacitatenr <= 2000)
{
pret = 684 + cheltuieli;
}
else if (26 <= varsta && varsta <= 30 & 1801 < capacitatenr && capacitatenr <= 2000)
{
pret = 516 + cheltuieli;
}
else if (31 <= varsta && varsta <= 40 & 1801 < capacitatenr && capacitatenr <= 2000)
{
pret = 342 + cheltuieli;
}
else if (41 <= varsta && varsta <= 50 & 1801 < capacitatenr && capacitatenr <= 2000)
{
pret = 349 + cheltuieli;
}
else if (51 <= varsta && varsta <= 60 & 1801 < capacitatenr && capacitatenr <= 2000)
{
pret = 344 + cheltuieli;
}
else if (varsta > 60 & 1801 < capacitatenr && capacitatenr <= 2000)
{
pret = 280 + cheltuieli;
}
else if (varsta <= 25 & 2001 < capacitatenr && capacitatenr <= 2500)
{
pret = 1029 + cheltuieli;
}
else if (26 <= varsta && varsta <= 30 & 2001 < capacitatenr && capacitatenr <= 2500)
{
pret = 787 + cheltuieli;
}
else if (31 <= varsta && varsta <= 40 & 2001 < capacitatenr && capacitatenr <= 2500)
{
pret = 537 + cheltuieli;
}
else if (41 <= varsta && varsta <= 50 & 2001 < capacitatenr && capacitatenr <= 2500)
{
pret = 547 + cheltuieli;
}
else if (51 <= varsta && varsta <= 60 & 2001 < capacitatenr && capacitatenr <= 2500)
{
pret = 539 + cheltuieli;
}
else if (varsta > 60 & 2001 < capacitatenr && capacitatenr <= 2500)
{
pret = 447 + cheltuieli;
}
else if (varsta <= 25 & capacitatenr > 2500)
{
pret = 1569 + cheltuieli;
}
else if (26 <= varsta && varsta <= 30 & capacitatenr > 2500)
{
pret = 1210 + cheltuieli;
}
else if (31 <= varsta && varsta <= 40 & capacitatenr > 2500)
{
pret = 842 + cheltuieli;
}
else if (41 <= varsta && varsta <= 50 & capacitatenr > 2500)
{
pret = 857 + cheltuieli;
}
else if (51 <= varsta && varsta <= 60 & capacitatenr > 2500)
{
pret = 845 + cheltuieli;
}
else if (varsta > 60 & capacitatenr > 2500)
{
pret = 708 + cheltuieli;
}
if (nastere > obtinere || ancurent – nastere < 18 || obtinere – nastere < 18 || Ddanobtinerepermis.SelectedItem.Value == String.Empty || Ddltipauto.SelectedItem.Value == String.Empty || Ddmarca.SelectedItem.Value == String.Empty || Ddmodel.SelectedItem.Value == String.Empty || Ddcombustibil.SelectedItem.Value == String.Empty || Ddlocuri.SelectedItem.Value == String.Empty || nrinmatriculare.Text == String.Empty || masa.Text == String.Empty || sasiu.Text == String.Empty || capacitate.Text == String.Empty || putere.Text == String.Empty || annastere.Text == String.Empty || Calendar1.SelectedDate.Date < System.DateTime.Today)
{
completare();
varstaminima();
varstalegala();
datacalendar();
}
else
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
dt.Columns.Add(new DataColumn("Col1", typeof(string)));
dt.Columns.Add(new DataColumn("Col2", typeof(string)));
dt.Columns.Add(new DataColumn("Col3", typeof(string)));
dr = dt.NewRow();
dr["RowNumber"] = 1;
dr["Col1"] = "Omniasig";
dr["Col2"] = omniasig6.ToString("c2");
dr["Col3"] = omniasig12.ToString("c2");
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 2;
dr["Col1"] = "Asirom";
dr["Col2"] = asirom6.ToString("c2");
dr["Col3"] = asirom12.ToString("c2");
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 3;
dr["Col1"] = "Euroins";
dr["Col2"] = euroins6.ToString("c2");
dr["Col3"] = euroins12.ToString("c2");
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 4;
dr["Col1"] = "CityInsurance";
dr["Col2"] = cityinsurance6.ToString("c2");
dr["Col3"] = cityinsurance12.ToString("c2");
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["RowNumber"] = 5;
dr["Col1"] = "Groupama";
dr["Col2"] = groupama6.ToString("c2");
dr["Col3"] = groupama12.ToString("c2");
dt.Rows.Add(dr);
Tabel.DataSource = dt;
Tabel.DataBind();
}
}
protected void Tabel_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select1")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow selectedRow = Tabel.Rows[index];
TableCell Col2 = selectedRow.Cells[2];
string contact = Col2.Text;
Session["suma"] = Col2.Text;
Response.Redirect("Date personale fizica.aspx");
}
else if (e.CommandName == "Select2")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow selectedRow = Tabel.Rows[index];
TableCell Col3 = selectedRow.Cells[5];
string contact = Col3.Text;
Session["suma"] = Col3.Text;
Response.Redirect("Date personale fizica.aspx");
}
}
protected void Ddmarca_SelectedIndexChanged(object sender, EventArgs e)
{
if (Ddmarca.SelectedItem.Value == "Acura")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("CDX");
Ddmodel.Items.Add("ILX");
Ddmodel.Items.Add("MDX");
Ddmodel.Items.Add("RDX");
Ddmodel.Items.Add("RLX");
Ddmodel.Items.Add("TLX");
Ddmodel.Items.Add("TSX");
}
else if (Ddmarca.SelectedItem.Value == "Alfa Romeo")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("134");
Ddmodel.Items.Add("156");
Ddmodel.Items.Add("159");
Ddmodel.Items.Add("Brera");
Ddmodel.Items.Add("Mito");
}
else if (Ddmarca.SelectedItem.Value == "Aston Martin")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Cygnet");
Ddmodel.Items.Add("DB11");
Ddmodel.Items.Add("Vanquish Volante");
Ddmodel.Items.Add("Virage Volante");
Ddmodel.Items.Add("Zagato");
}
else if (Ddmarca.SelectedItem.Value == "Audi")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("A1");
Ddmodel.Items.Add("A2");
Ddmodel.Items.Add("A3");
Ddmodel.Items.Add("A4");
Ddmodel.Items.Add("A5");
Ddmodel.Items.Add("A6");
Ddmodel.Items.Add("A7");
Ddmodel.Items.Add("A9");
Ddmodel.Items.Add("S1");
Ddmodel.Items.Add("S2");
Ddmodel.Items.Add("RS8");
}
else if (Ddmarca.SelectedItem.Value == "Bmw")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("118");
Ddmodel.Items.Add("320");
Ddmodel.Items.Add("520");
Ddmodel.Items.Add("750");
Ddmodel.Items.Add("I3");
Ddmodel.Items.Add("I8");
Ddmodel.Items.Add("M5");
Ddmodel.Items.Add("M5");
Ddmodel.Items.Add("M6");
Ddmodel.Items.Add("X5");
Ddmodel.Items.Add("X6");
}
else if (Ddmarca.SelectedItem.Value == "Citroen")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Berlingo");
Ddmodel.Items.Add("C1");
Ddmodel.Items.Add("C2");
Ddmodel.Items.Add("C3");
Ddmodel.Items.Add("C4");
Ddmodel.Items.Add("C5");
Ddmodel.Items.Add("C8");
Ddmodel.Items.Add("C15");
Ddmodel.Items.Add("Jumper");
Ddmodel.Items.Add("Nemo");
}
else if (Ddmarca.SelectedItem.Value == "Chevrolet")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Aveo");
Ddmodel.Items.Add("Bolt");
Ddmodel.Items.Add("Camaro");
Ddmodel.Items.Add("Captiva");
Ddmodel.Items.Add("Corvette");
Ddmodel.Items.Add("Cruze");
Ddmodel.Items.Add("Spark");
}
else if (Ddmarca.SelectedItem.Value == "Dacia")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("Logan");
Ddmodel.Items.Add("Sandero");
Ddmodel.Items.Add("Duster");
}
else if (Ddmarca.SelectedItem.Value == "Ford")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("B-Max");
Ddmodel.Items.Add("C-Max");
Ddmodel.Items.Add("Edge");
Ddmodel.Items.Add("Fiesta");
Ddmodel.Items.Add("Focus");
Ddmodel.Items.Add("Kuga");
Ddmodel.Items.Add("Mustang");
}
else if (Ddmarca.SelectedItem.Value == "Honda")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Accord");
Ddmodel.Items.Add("BR-V");
Ddmodel.Items.Add("Civic");
Ddmodel.Items.Add("CR-V");
Ddmodel.Items.Add("Jazz");
Ddmodel.Items.Add("HR-V");
Ddmodel.Items.Add("StepWGN");
}
else if (Ddmarca.SelectedItem.Value == "Hyundai")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Accent");
Ddmodel.Items.Add("Elantra");
Ddmodel.Items.Add("i10");
Ddmodel.Items.Add("i20");
Ddmodel.Items.Add("i30");
Ddmodel.Items.Add("i45");
Ddmodel.Items.Add("Santa Fe");
Ddmodel.Items.Add("Tucson");
}
else if (Ddmarca.SelectedItem.Value == "Mitsubishi")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Aspire");
Ddmodel.Items.Add("Colt");
Ddmodel.Items.Add("Lancer");
Ddmodel.Items.Add("Leo");
Ddmodel.Items.Add("Pajero");
Ddmodel.Items.Add("Strada");
}
else if (Ddmarca.SelectedItem.Value == "Opel")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Agila");
Ddmodel.Items.Add("Astra");
Ddmodel.Items.Add("Corsa");
Ddmodel.Items.Add("Frontera");
Ddmodel.Items.Add("GT");
Ddmodel.Items.Add("Insignia");
Ddmodel.Items.Add("Zafira");
}
else if (Ddmarca.SelectedItem.Value == "Volkswagen")
{
Ddmodel.Items.Clear();
Ddmodel.Items.Add("");
Ddmodel.Items.Add("Caddy");
Ddmodel.Items.Add("Fox");
Ddmodel.Items.Add("Golf");
Ddmodel.Items.Add("Jetta");
Ddmodel.Items.Add("Passat");
Ddmodel.Items.Add("Polo");
Ddmodel.Items.Add("Tiguan");
}
}
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
if (e.Day.Date < DateTime.Now)
{
e.Day.IsSelectable = false;
e.Cell.BackColor = System.Drawing.Color.LightGray;
e.Cell.Enabled = false;
}
}
}
}
CV
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Planificarea activității [308930] (ID: 308930)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
