• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Smart Gym System documentation
 

Smart Gym System documentation

on

  • 3,976 views

 

Statistics

Views

Total Views
3,976
Views on SlideShare
3,976
Embed Views
0

Actions

Likes
1
Downloads
260
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Smart Gym System documentation Smart Gym System documentation Document Transcript

    • 1. Introduction1.1 Overview of Project1.2 Objectives1.3 Modules1.4 Architecture and Design of the project2. Literature Survey2.1 Existing System 2.1.1 Drawbacks of Existing System2.2 Proposed System 2.2.1 Merits of Proposed System2.3 Overview of Language used 2.3.1 Introduction of Microsoft Visual Basic 6.0 2.3.1.1 The Programming Process 2.3.1.2 Understanding Program Maintenance 2.3.1.3 Visual Basic is a Smart Language 2.3.1.4 Tool Box Control 2.3.1.5 Adding Control 2.3.1.6 Removing Control 2.3.1.7 Intrinsic Control 2.3.1.8 Label Control 2.3.1.9 Command Bottom 2.3.1.10 Text Control 2.3.1.11 what does VB 6.0 has 2.3.1.12 Visual Basic with Databases 2.3.1.13 Active X Data Object Components 2.3.2 Introduction of MS Access 20033. Requirement Analysis3.1 Role of SRS3.2 Aim3.3 Purpose3.4 Scope3.5 Application Requirements3.6 Hardware Requirements3.7 Functional Requirements 3.7.1 Administrator Functional Requirements3.8 Non-Functional Requirements 3.8.1 Reliability 3.8.2 Usability 3.8.3 Maintainability 3.8.4 Performance 5
    • 4. Design 4.1 Data Flow Diagram Notations 4.2 Context Diagram 4.3 Low Level DFD 4.3.1 Level1 DFD Admin 4.3.2 Level1 DFD User 4.4 High Level DFD 4.4.1 Level2 DFD User 4.4.2 Level2 DFD Admin 4.5 Entity-Relationship Diagram 4.6 Module Design 4.6.1 4.6.2 4.6.3 4.6.4 4.7 Database Design 4.7.1 Introduction to Database Design 4.7.2 Tables Created5. Coding6. Testing 6.1 Introduction to Testing 6.1.1 White Box Testing 6.1.2 Black Box Testing 6.1.3 Application Strategies 6.1.4 Unit Testing 6.1.5 Integration Testing 6.1.6 Validation Testing 6.1.7 System Testing 6.2 Multi-User System6.3 Testing Results7. Conclusion8. Future Enhancement9. Bibliography10. User Manual 10.1 Screen Shots 6
    • Chapter 1IntroductionWe all know health is a wealth. We do not need a fancy car, big apartment, a doctor degreewithout a health. Being healthy is a first thing we need to keep in mind. Because most of time 7
    • our attitude depends on how we feel. Being healthy and fit gives us energy to do anything. Sohow do we stay fit? Be active, eat green and hit a gym! Physical fitness is very necessary for a healthy and tension free life. Physical fitness includesdiet, exercise and sleep. These three basic things have their own importance in eachindividuals life and everyone should be sensible with regard to these for a healthy life.1.1 Overview of Project Our proposed “Smart Gym System” is for those who runs a gym business. Before doinganything we did a decent research on major difficulties for gym owners. We examined carefullyabout how to make a huge registering system without failure as well as different functions fordifferent kind of user depending on their privilege.ObjectivesFirst thing we wanted to do in designing is avoid boring formal user interface. So we tried todevelop modern graphic user interface system. This application is for gym owners as well as fortheir staffs to register new member, and take body measurements and see the reports of financialand individual body progress. To use features of our application user has to enter password andusername. If you want to visit and make changes in admin panel you have to unlock the adminpanel by typing password in it. In the admin panel admin able to create username withpassword, set privilege to groups which means which user can do what operations like seereport, take measurement etc. Also admin able to create groups and membership plans andapply it. 8
    • 1.3 Modules:Administrator ModuleThis module includes storing and retrieving the details of the data. The detail of theentertainment which is stored is categorized into different types like:Creating userAdmin can create an user along with password. Admin also able to put a user in aparticular groups.Creating groupCreate a group and set privilege for it. It includes read, read/write, read/write/deletepermissions.Creating membership planCreate a flexible membership plans for gym members. Plans can be various dependingon member needs.User ModuleDepends on the privilege user’s access to features of the application is granted.1.4 Architecture and Design of the project 9
    • The application will be made of Desktop based distributed two-tier architecture tosupport user entertainment at the same time. 10
    • DFD LEVEL-0: CONTEXT DIAGRAM : 11
    • 12
    • Chapter 2Literature Survey Everything on the earth either living or non-living has an evolution cycle. Like scientist hasproved that human has completed an evolution cycle from ape to man. In same manner thecomputer has an evolution cycle, as technology is improving the computers are becoming moreand more efficient. Similarly as the computer architecture is improving day by day, it alsorequires upgrading the previous systems accordingly. 13
    • As we have developed this application for the first time. Similar application’s of differentcompanies are present in the market and we tried to study those, a brief discussion was carriedout with the project guide to know more details about existing system. After discussion thevarious deficiencies in the system was identified these points are noted down and discussed withproject guide again and decide where to make modification over existing system.Since we are implementing our application in the new envoirnment and using the presenttechnologies so as to make it more efficient, there was a need to understand the application’senvironment and also about the new technologies. And while implementing the applicationvarious thing has been taken into consideration like application will also be usable for those endusers who don’t understand english.2.1 Existing SystemAn Existing system refers to the system that is being followed till now. Presently all the resumeFunctionalities are done manually. This is making the person very difficult to keep track of theclient and the members in the job seeker.2.1.1 Drawbacks of Existing System a. Time consuming. b. Updating and Retrieval tasks are very tedious. c. Highly error prone. d. Easy Customer service is difficult. e. Lot of paper work results in lot of confusion. f. No direct role for the higher officials.To avoid all these limitations and make the system working more accurately it needs to becomputerized.2.2 Proposed System 14
    • The online mobile shopping application is user-friendly application. Most of the informationabout different brand of latest mobile to the customer who wants to know the details and want tobuy. It is very simple in design and to implement. The system requirements are very low.System resources and the system will work in almost all configurations.The main objectives of the proposed system can be enumerated as follows:a. Customer can easily search different brand of mobile.b. Customer can also search according to price.c. User can register and buy that particular product.2.2.1 Merits of Proposed SystemThe system is very simple in design and to implement. The system requiresVery low system resources and the system will work in almost allConfigurations a. Security of data b. Ensure data accuracy c. Administrator controls the entire system d. Reduce the damages of the machines e. Minimize manual data entry f. Greater efficiency g. User friendly and interactive h. Saves lot of time i. Retrieval and Updating tasks can be performed much faster and easier2.3 Overview of languages used2.3.1 Introduction to MICROSOFT VISUAL BASIC 6.0Visual Basic 6 is Microsofts latest and greatest version of the Visual Basic programminglanguage. Although writing programs can be a tedious chore at times, Visual Basic reduces the 15
    • effort required on your part and makes programming enjoyable. Visual Basic makes manyaspects of programming as simple as dragging graphic objects onto the screen with your mouse.Microsoft based Visual Basic on a programming language written for beginners called BASIC.BASIC has been around for more than 35 years in one form or another. The original languagedesigners wanted to develop a programming language that beginners could use. With BASIC,new programmers could become proficient right away.BASIC stands for Beginners All-purpose Symbolic Instruction Code. Thats some abbreviation!A programming language is a set of commands and command options, called arguments, thatyou use to give instructions to the computer. Computers cannot (yet) understand humanlanguages because people deal well with ambiguous commands, and a computer cannotunderstand such ambiguity. A programming language must be more precise than a spokenlanguage.2.3.1.1 The Programming ProcessOver time youll find your own way of writing programs that works best for you. Nevertheless,youll generally follow these standard set of steps when creating your Visual Basic programs:1. Decide what your application is to do by creating an overall design.2. Create the visual portion of your application (the screens and menus that your users willinteract with).3. Add Visual Basic programming language code to tie the visual elements together and toautomate the program.4. Test your application to locate and remove any bugs you find.5. Compile your tested application and distribute the compiled application to your users.2.3.1.2 Understanding Program MaintenanceBugs are not the only reason that you will work on a program after you think youre completelydone with it. Program maintenance is necessary because requirements change, companieschange, and laws change. You must also change the programs you write so that they remain 16
    • viable programs; you will need to update your program periodically to reflect changes thatimpact the program. In addition, users will think of new things that they want the program to do.Program maintenance is the term used for the updating of a program after the program is putinto use. This update may be a result of a users request or a change in the way the programneeds to operate.It is said that a program is written once and modified many times. The more programmaintenance you perform, the more likely that your program will be up-to-date and in use. Youmay want to release new versions of your program so that users can, with a different versionnumber on the opening screen that you place there, keep track of the latest version installed ontheir system.2.3.1.3 Visual Basic Is a Smart LanguageThe main reason why Visual Basic is so popular and powerful is the same reason behind thesuccess of Windows. Microsoft took a complex technology (writing computer programs) andmade it easier to use through a graphical interface. Suppose you have to write a program foryour company. In a visual programming environment, you can quickly design the windows thatthe user sees by drawing and arranging them just as you would lay out elements for anewspaper.In a text-based programming system, you control the user interface through program languagecommands. Common sense tells you that the visual programming method is easier fornewcomers to learn and requires less time to maintain. In this case, the old adage “a picture isworth a thousand words” truly applies. However, do not let me give you the impression thatVisual Basic is just another pretty interface.Another key concept of Visual Basic is the ability to create and use self-contained components,or objects.2.3.1.4 Tool Box ControlsThe toolbox contains all the custom control needed for a visual basic application .severaladvanced controls can be added to the project from the menu bar tool, Project – Components.Each control has its own properties, Events and methods. The properties of the controls can beset either through code or in the properties window, user – defined controls can also be createdand added to the tool box. Controls work with multimedia and internet too.2.3.1.5 Adding controlsControls can be added to a form in two ways: 17
    • *Double-click on a control in the toolbox and it appears on the form.*Click on the control icon. Move the mouse over the form, click and draw the control to therequired size.2.3.1.6 Removing controlsTo remove a control from the form*Select the control.*Press the delete key. Controls can be placed anywhere on the form. Their size can be changed by using the sizinghandle which appear when a control in selected.2.3.1.7 Intrinsic controlsThe default controls which are automatically displayed in a toolbox when a form is loaded areknown as intrinsic controls. The intrinsic controls in visual basic are very powerful, sinceobjects such as buttons, labels, text boxes, and combo or list boxes can be added to a form easilyand coded.Some common intrinsic controls which are described below are: 1. Label 2. Command button 3. Text box 4. Frame 5. Option button 6. Check box 7. Picture box 8. Inage box 9. Timer 10. Combo box 11. List box 12. Horizontal & vertical scroll box 18
    • 13. Shape and line 14. OLE2.3.1.8 Label Label control allows the user to display text on a form, which does not change. For example Label1.caption=”Name;” Generally labels are used to print captions for other controls. Text printed on labels cannot be edited during runtime.2.3.1.9 Command buttonsCommands buttons is one of the most powerful and frequently used controls in windowsapplication. It is used to invoke response from the user or to invoke special functions on theform.2.3.1.10 Textbox controlTextbox control is one of the most popular and versatile mechanism used to display and enterstext in a window user interface. It behaves like a mini text editor providing all the basic textediting facilities.Basic text propertiesThe basic properties of a textbox determine the appearance and functionality of a textboxcontrol. Some of them are as described below:Enabled: Indicates whether the user can interact with the control or not.Index: Determine the control array index.Locked: Boolean. Indicates whether the user can type in the textbox or not.Max Length: Indicates the maximum number of characters input in the textbox. Default valuesare 0, which means any number of characters. The maximum of text can be typed in a textbox isnearly 64 kb.Max length property can be set to a specific value restricting the user to type only that manycharacter.Multi Line: Specifies whether the textbox will hold a single line or multiple lines. 19
    • Password char: Specifies the masking character for text displayed in the textbox. Suppose thepassword is set to “*”, the user than sees an asterisk in the place of every character typed in thattextbox.Scrollbars: Indicates horizontal scrollbars, vertical scrollbars or both for the textbox. Thisproperty is used with multiline property. Multiline textboxes can have horizontal, vertical orboth scroll bars. If a horizontal scrollbar is attached to a text box, the text will not wrapautomatically. The user must press enter to start new line.Text: Specifies the text in the textbox.Alignment: Alignment of text in a textbox can be Left-justified, centered or right-justified.SelText: Returns the selected text. A selected text can be converted to uppercase by thefollowing code:Text1. SelText= Ucase(Text1.SelText)SelStart: Specifies the position of the first character of the selected text.SetLength: Returns the length of the selected text. The most common use of these properties isto select a piece of text at runtime to select the text in a textbox.Text1.selstart=1Text1.selLength=Len (Text1)Click: Click event is called when the text box is clicked with the mouse.Key press: Occurs every time a key is pressed and stores the ASCII code of the key pressed inkeyASCII(an integer type). This event can be used to restrict the user to type only certaincharacters.Controls are elements you can use when designing a user interface.Visual Basic controls enable you to add features to your programs without you having to beinvolved in the details of how these features work. For example, receiving input from a user ofyour program is as simple as drawing a control that accepts input. This is a great advantage ofvisual programming languages—you can concentrate on what you want your program to do, nothow to get the programming language to do it.2.3.1.11 What does VB 6.0 have…. 20
    • Just about everything we could write about Visual Basic is, from language reference to ADOdatabase handling, from creating Web browsers to dragging and dropping data acrossapplications, from email applications to multimedia players, from creating ActiveX controls andActiveXDocuments to setup programs, it’s all here.Here’s some of what we’ll see:• ActiveX controls• ActiveX documents• ADO, DAO, and RDO database applications• Multimedia AVI, MPG, WAV, and MID players• CD players that play CDs from the computer’s CD-ROM drive• Bitmapped menu items• Full Web browsers• Pie charts, line charts, bar charts, and others• Code clients that call methods in programs like Microsoft Excel• Code components (OLE automation servers)• Graphics animation• Applications that use the Windows Common Dialogs• Customized toolbars with embedded controls like combo boxes• Data entry forms• Database editing applications• Direct connections to the Windows API• Direct connections to code written in Visual C++• Drag/drop operations• Graphics applications that draw arcs, circles, rectangles, lines, and more• Email applications 21
    • • Error handlers• Applications that use the printer• Word processor applications• File handlers for text and binary data• FTP applications• Dialog boxes• Windows Help files• MDI applications• Pop-up menus activated with right mouse clicks• Application deployment• HTTP applications• Image handling: blur, emboss, engrave, flip, sweep, stretch images, and more• OLE applications• Applications that use the Windows Registry• List views and tree views• Applications that create controls at runtime• Mouse capture• OLE drags (dragging data between applications)• Online user registration• Picture clip applications• Setup programs• Screen capture• Spreadsheets• Status bars and toolbars• Tab strips, progress bars, and others 22
    • 2.3.1.12 Visual Basic with Databases A database is a collection of information. This information is stored in a very structuredmanner. By exploiting this known structure, we can access and modify the information quicklyand correctly.For database management, Visual Basic application acts as a front-end to the database. Thismeans the Visual Basic application provides the interface between the user and the database.This interface allows the user to tell the database what he or she needs and allows the databasetorespond to the request displaying the requested information in some manner. A Visual Basic application cannot directly interact with a database. There are two intermediatecomponents between the application and the database: the data control and the databaseengine: The data control is a Visual Basic object that connects the application to the databasevia the database engine. It is the conduit between the application and the engine, passinginformation back and forth between the two. The database engine is the heart of a Visual Basic database management system. It isthe actual application that does the management. Having this engine saves programmers a lot ofwork. The database engine native to Visual Basic is known as the Jet engine. It is the sameengine used by Microsoft Access for database management. Hence, it is primarily used towork with Access databases, but it can also work with others. 23
    • 2.3.1.13 ActiveX Data Object ComponentsThe first step in editing an ADO database is to open that database, which is called a data sourcein ADO terminology, by setting up a Connection object.To use that and other ADO objects in code, use the Project|References item, select theMicrosoft ActiveX Data Objects Library item, and click on OK, adding the ADO Object Libraryto your program.Now create a new ADO Connection object with the Connection object’s Open method:Here are the arguments for this method:• Connection String—String containing connection information.• UserID—String containing a username to use when establishing the connection.• Password—String containing a password to use when establishing the connection.• OpenOptions—if set to adConnectAsync, the connection will be opened asynchronously.Here are the possible values for the Type argument:• dbOpenKeyset—Opens a dynaset-type Recordset object, which is like an ODBC keysetcursor.• dbOpenDynamic—Opens a dynamic-type Recordset object, which lets the application seechanges made by other users.• dbOpenStatic—Opens a static-type Recordset object.• dbOpenForwardOnly—Opens a forward-only-type Recordset object, where you can only useMoveNext to move.Here are the possible values for the LockType argument:• AdLockReadOnly—The default; read-only.• adLockPessimistic—Pessimistic locking, record by record.• adLockOptimistic—Optimistic locking, record by record.• adLockBatchOptimistic—Optimistic batch updates.Here are the possible values for the Options argument:• adCmdText—Provider should evaluate Source as a definition of a command.• adCmdTable—ADO should generate an SQL query to return all rows from the table named inSource.• adCmdTableDirect—Provider should return all rows from the table named in Source.• adCmdStoredProc—Provider should evaluate Source as a stored procedure.• adCmdUnknown—Type of command in the Source argument is not known.• adCommandFile—Record set should be restored from the file named in Source.• adExecuteAsync—Source should be executed asynchronously.• adFetchAsync—After the initial quantity specified in the CacheSize property is fetched, anyremaining rows should be fetched asynchronously.2.3.2 Introduction of MS Access 2003 24
    • Generically, any database management system (DBMS) that can response to queries fromclient machines formatted on the SQL language..Chapter 25
    • Requirement Analysis3.1 Role of SRS Application Requirement Specification (SRS) is the starting point of the applicationdeveloping activity. As system grew more complex it became evident that the goal of the entiresystem cannot be easily comprehended. Hence the need for the requirement phase arose. Theapplication project is initiated by the client needs. The SRS is the means of translating the ideasof the minds of clients (the input) into a formal document. Application RequirementSpecification is the medium though which the client and user needs are accurately specified. Itforms the basis of application development.3.2 Aima. This application is designed to maintain the database of job seeker and job providers.b. The application must give universal access for the users of the system.c. The application is user friendly and provides all the information required. 26
    • d. The application must work properly without problems on all targeted devices and networksupport.3.3 PurposeThe purpose of this document is to describe all external requirements of Mobile Management.It also describes the interfaces for the system. The basic idea behind the project is to bridge thecommunication gap between job seekers and the organization.3.4 ScopeThis document is the only one that describes the requirements of the system. It is meant for theuse by the developers, and will also be the basis for validating the final delivered system. Anychanges made to the requirements in the future will have to go through a formal changeapproval process. The developer is responsible for asking for clarifications, where necessary,and will not make any alterations without the permission of the client. This project helps the job seeker to keep track of the Member and clients details.3.5 Application Requirements Operating system Windows XP, Windows 7 Front End Microsoft Visual Basic 6.0 Database Microsoft Access 2003 Connectivity ActiveX Data Object Report Data Report 27
    • 3.6 Hardware Requirements RAM 512 MB or higher Hard Disk 10GB or higher Computer Processor Pentium IV Clock Speed 700MHZ Processor3.7 Functional Requirements The main purpose of functional requirements is to define all activities or operations thattake place in the system. These are derived through interactions with the users of the system.Since requirements specification is a comprehensive document and contains a lot of data, it hasbeen broken down into different stages in this report.3.7.1 Administrator module functional requirements 28
    • Administrator has all the rights of maintaining all the records of Mobile Management.Administrators will be responsible for editing and updating the information of the application.Administrator will only have the rights to create users and give the permissions to the users. 3.7.2 Client module functional requirementsA client has all the privileges on job seeker and the job seeker details. Client cannot make anychanges in the new user creations.3.8 Non-Functional Requirements3.8.1 ReliabilityReliability is the correlation of an item, scale, or instrument with a hypothetical one, which trulymeasures what it is supposed to. Since the true instrument is not available. The programaccording to the requirement can perform the intended function.b. Error-handling- exception occurring while accessing database need to be addressed.3.8.2 Usability Usability refers to the capability of the product to be understood, learned, and used and userfriendly to users, when used under specified conditions. This section should include all of thoserequirements that affect usability.3.8.3 MaintainabilityMaintainability is the ease with which a program/specification can be corrected if an erroroccurs desires a change in requirements. Specify attributes of application that relate to the easeof maintenance of the application itself.3.8.4 Performance 29
    • Performance is measured in terms of the output provided by the application. Requirementspecification plays an important part in the analysis of a system. Only when the requirementspecifications are properly given, it is possible to design a system, which will fit into requiredenvironment.The requirement specification for any system can be broadly stated as given below: a. The system should be able to interface with the existing system. b. The system should be accurate. c. The system should be better than the existing system.The existing system is completely dependent on the user to perform all the duties.Chapter 4 30
    • Design4.1 Data flow diagram notations The dataflow diagram (DFD) is the one of the most important modeling tools. It shows the use of the data pictorially. DFD represents the flow of data between different transformations and process in the system. The dataflow shows logical flow of the data. Different notations used in DFD are:Functional Processing It is represented by a diamond. This notation specifies the processing or main transactions. 31
    • Data Flow An arrow line represents it and name of the data is specified by the side of the line as label. This arrow line is used to indicate data movement.Source or Sink It is represented by a rectangle .It is used for specifying from where data is coming and where it will reach.4.7.2 Tables CreatedTable 1: login table FIELD DATA SIZE NAME TYPE long userId number integer username text 30 password text 30 firstname text 30 lastname text 50 long gid number integer 32
    • Table 2: userGroup table DATA FIELD NAME SIZE TYPE long groupId number integer groupName text 255 long permissionSetId number integerTable 3: userPermission DATA FIELD NAME SIZE TYPE permissionId integer canSeeMember integer canAddMember integer canEditMember integer canDeleteMember integer canTakeMeasurement integer canSeeReport integer canSeeBodyProgress integerTable 4: members table 33
    • FIELD NAME DATA TYPE SIZE long memberId integer firstname text 50 lastname text 50 gender text 10 long number integer address text 255 doj Date/Time dob Date/Time profilePhotoUrl text 255 dueDate text 255Table 5: progressMember Table FIELD NAME DATA TYPE SIZE long memberId integer height double weight double bmi double biceps double hips double thigh double neck double forearms double 34
    • chest double calves double mdate Date/Time bodyfat double waist double wrist doubleTable 6: paymentTransaction Table FIELD NAME DATA TYPE SIZE long memberId integer date Date/Time amt CurrencyTable 7: gymDetail Table DATATYP FIELD E SIZE gymName text 255 gymAddress text 255 gymLogoUrl text 255 gymPhone text 255 35
    • Coding 36
    • DialogLoading Form:Option ExplicitDim counter As IntegerPrivate Sub Form_Load() Dim Action As AnimationActions Action = gfaPlay counter = 0End SubPrivate Sub Timer1_Timer() If counter >= 2 Then frmMain.Show Unload Me Exit Sub End If counter = counter + 1End SubDialogToAccessAdmin Form:Option ExplicitPrivate Sub CancelButton_Click()Unload MeEnd SubPrivate Sub Form_Load()If Me.Visible = True ThentxtPassword.SetFocusCall CenterChild(frmMain, Me)End IfEnd SubPrivate Sub OKButton_Click() Call databaseconnection rs.Open "select * from login", con, adOpenStatic While Not rs.EOF If rs.Fields(2) = txtPassword.Text Then Call disconnectdatabase frmAdmin.Show Unload Me Exit Sub Else rs.MoveNext End If Wend 37
    • Call disconnectdatabase MsgBox "You are not granted to access", vbOKOnly + vbExclamation, "Authentication" txtPassword.Text = "" txtPassword.SetFocusEnd SubdialogToChangeWallpaper Form:Option ExplicitDim file As StringPrivate Sub CancelButton_Click()Unload MeEnd SubPrivate Sub cmdBwse_Click() CommonDialog1.ShowOpen Dim ext As String ext = GetFileExtension(CommonDialog1.FileName) If ext = "jpg" Or ext = "png" Or ext = "jpeg" Or ext = "bmp" Then file = CommonDialog1.FileName Image1.Picture = LoadPicture(file) Else MsgBox "Invalid image file!", vbOKOnly + vbExclamation, "Notification" Exit SubEnd IfEnd SubPrivate Sub cmdSave_Click()If file = "" ThenMsgBox "Choose the wallpaper to set!", vbOKOnly + vbExclamation, "Notification"Exit SubEnd IfFileCopy file, App.Path & "wallpaper.jpeg"frmMain.Picture = LoadPicture(App.Path & "wallpaper.jpeg")Unload MefrmMain.SetFocusEnd SubPrivate Sub Form_Load()file = ""Me.Caption = ""End SubfrmAdmin Form:Dim add As IntegerDim userId As IntegerDim planName As StringDim permId As IntegerDim file As StringPrivate Sub cmdDelete_Click() delete group sub If qcombGroup.ListIndex = -1 Then MsgBox "Select a group to delete!", vbOKOnly + vbExclamation, "Warning" 38
    • Exit Sub End If Dim arr() As String arr = Split(qcombGroup.Text, " ") Call databaseconnection rs.Open "Select * from userGroup", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do Until rs.EOF If rs.Fields(0) = Val(arr(1)) Then rs.Delete rs.Update Exit Do End If rs.MoveNext Loop rs.Close rs.Open "select * from userPermission", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do Until rs.EOF If rs.Fields(0) = permId Then rs.Delete rs.Update Exit Do End If rs.MoveNext Loop rs.Close Call readGroup MsgBox "Group deleted!", vbOKOnly + vbInformation, "Warning" Call disconnectdatabaseEnd SubPrivate Sub cmdSave_Click()check the empty fieldscheck whether group id is exited or notaddIf qmemberAdd.ListIndex = -1 And _ qmemberDelete.ListIndex = -1 And _ qmemberEdit.ListIndex = -1 And _ qmemberRead.ListIndex = -1 And _ qmeasureAdd.ListIndex = -1 And _ qreadReport.ListIndex = -1 And _ qreadProgress.ListIndex = -1 And _ qgroupId.Text = "" And _ 39
    • qgroupName.Text = "" Then MsgBox "Fields cannot be blank!", vbOKOnly + vbExclamation, "Warning" Exit SubEnd IfCall databaseconnectionrs.Open "select * from userGroup"If Not rs.EOF Thenrs.MoveLastEnd Ifrs.AddNewrs.Fields(0) = Val(qgroupId.Text)rs.Fields(1) = Trim(qgroupName.Text)rs.Fields(2) = permIdrs.Updaters.Closers.Open "select * from userPermission", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveLastEnd Ifrs.AddNewrs.Fields(0) = permId If qmemberRead.ListIndex = 0 Then rs.Fields(1) = 1 Else rs.Fields(1) = 0 End If If qmemberAdd.ListIndex = 0 Then rs.Fields(2) = 1 Else rs.Fields(2) = 0 End If If qmemberEdit.ListIndex = 0 Then rs.Fields(3) = 1 Else rs.Fields(3) = 0 End If If qmemberDelete.ListIndex = 0 Then rs.Fields(4) = 1 Else rs.Fields(4) = 0 End If If qmeasureAdd.ListIndex = 0 Then rs.Fields(5) = 1 Else rs.Fields(5) = 0 End If If qreadReport.ListIndex = 0 Then 40
    • rs.Fields(6) = 1 Else rs.Fields(6) = 0 End If If qreadProgress.ListIndex = 0 Then rs.Fields(7) = 1 Else rs.Fields(8) = 0 End Ifrs.Updaters.CloseCall readGroupCall clearGroupEnd SubPrivate Sub cmdUpdate_Click()check the empty fieldscheck the group id matches, if then addIf qmemberAdd.ListIndex = -1 And _ qmemberDelete.ListIndex = -1 And _ qmemberEdit.ListIndex = -1 And _ qmemberRead.ListIndex = -1 And _ qmeasureAdd.ListIndex = -1 And _ qreadReport.ListIndex = -1 And _ qreadProgress.ListIndex = -1 And _ qgroupId.Text = "" And _ qgroupName.Text = "" Then MsgBox "Fields cannot be blank", vbOKOnly + vbExclamation, "Notification" Exit SubEnd IfCall databaseconnectionrs.Open "select * from userGroup"If Not rs.EOF Thenrs.MoveFirstEnd IfDo While Not rs.EOFIf rs.Fields(0) = Val(qgroupId.Text) Thenrs.Fields(0) = Val(qgroupId.Text)rs.Fields(1) = Trim(qgroupName.Text)rs.UpdateExit DoEnd Ifrs.MoveNextLooprs.Closers.Open "select * from userPermission", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveLast 41
    • End IfDo Until rs.EOFIf rs.Fields(0) = permId Then If qmemberRead.ListIndex = 0 Then rs.Fields(1) = 1 Else rs.Fields(1) = 0 End If If qmemberAdd.ListIndex = 0 Then rs.Fields(2) = 1 Else rs.Fields(2) = 0 End If If qmemberEdit.ListIndex = 0 Then rs.Fields(3) = 1 Else rs.Fields(3) = 0 End If If qmemberDelete.ListIndex = 0 Then rs.Fields(4) = 1 Else rs.Fields(4) = 0 End If If qmeasureAdd.ListIndex = 0 Then rs.Fields(5) = 1 Else rs.Fields(5) = 0 End If If qreadReport.ListIndex = 0 Then rs.Fields(6) = 1 Else rs.Fields(6) = 0 End If If qreadProgress.ListIndex = 0 Then rs.Fields(7) = 1 Else rs.Fields(8) = 0 End If rs.Update Exit DoEnd Ifrs.MoveNextLooprs.CloseCall readGroupCall clearGroupEnd Sub 42
    • Private Sub Form_Load()Call databaseconnectionCall refreshLoginTableCall refreshMembershipPlanTableuserId = -1planName = ""Fill the tableCall fillTable***Initializing comboBoxqmemberAdd.AddItem ("Allow")qmemberAdd.AddItem ("Deny")qmemberEdit.AddItem ("Allow")qmemberEdit.AddItem ("Deny")qmemberRead.AddItem ("Allow")qmemberRead.AddItem ("Deny")qmemberDelete.AddItem ("Allow")qmemberDelete.AddItem ("Deny")qmeasureAdd.AddItem ("Allow")qmeasureAdd.AddItem ("Deny")qreadProgress.AddItem ("Allow")qreadProgress.AddItem ("Deny")qreadReport.AddItem ("Allow")qreadReport.AddItem ("Deny")cmdSave.Enabled = FalseDim I As IntegerI=1While I <= 24mtxtDuration.AddItem II=I+1Wend***Reading groupsCall readGroup***Fill lgroupCall databaseconnectionrs.Open "select * from userGroup", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Then rs.MoveFirstEnd IfWhile Not rs.EOF lgroup.AddItem (rs.Fields(0)) rs.MoveNextWendrs.CloseCall disconnectdatabaseMe.Caption = "Admin Panel"add = 0 43
    • Gym details loadingCall databaseconnectionrs.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Then rs.MoveFirstEnd IfDo Until rs.EOF gymName.Text = rs.Fields(0) gymAddress.Text = rs.Fields(1) If Not rs.Fields(2) = "" Then file = rs.Fields(2) Image1.Picture = LoadPicture(App.Path & rs.Fields(2)) Else file = "" End If gymPhone.Text = rs.Fields(3) rs.MoveNextLooprs.CloseEnd SubPrivate Sub Form_Unload(Cancel As Integer)If MsgBox("Do you want to exit Admin panel?", vbYesNo + vbQuestion, "Notification") = vbYes Then Unload MeElse Me.SetFocusEnd IfEnd SubPrivate Sub gymCmdBrowse_Click() logo.ShowOpen Dim ext As String ext = GetFileExtension(logo.FileName) If ext = "jpg" Or ext = "png" Or ext = "jpeg" Or ext = "bmp" Then file = logo.FileName Image1.Picture = LoadPicture(file) Else MsgBox "Invalid image file", vbOKOnly + vbExclamation, "Notification" Exit Sub End IfEnd SubPrivate Sub gymCmdSave_Click() If gymName.Text = "" And _ gymAddress.Text = "" And _ gymPhone.Text = "" And _ file = "" Then MsgBox "All fields are mandatory!", vbOKOnly + vbExclamation, "Notification" 44
    • Exit Sub End If Call databaseconnection rs.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If If rs.RecordCount = 0 Then rs.AddNew rs.Fields(0) = Trim(gymName.Text) rs.Fields(1) = gymAddress.Text rs.Fields(2) = file rs.Fields(3) = Val(gymPhone.Text) rs.Update Else Do Until rs.EOF rs.Fields(0) = Trim(gymName.Text) rs.Fields(1) = gymAddress.Text If Not file = App.Path & "gymLogo.jpeg" Then FileCopy file, App.Path & "gymLogo.jpeg" End If rs.Fields(2) = "gymLogo.jpeg" rs.Fields(3) = Val(gymPhone.Text) rs.Update rs.MoveNext Loop End If rs.Close MsgBox "Gym details saved!", vbOKOnly + vbInformation, "Notification"End SubPrivate Sub gymPhone_KeyPress(KeyAscii As Integer)If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub lcmdAdd_Click() If add = 0 Then Call clearLoginFields lusername.SetFocus lid.Enabled = False Call databaseconnection rs.Open "select * from login", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveLast End If lid.Text = rs.Fields(0) + 1 rs.Close 45
    • Call disconnectdatabase add = 1 lcmdAdd.Caption = "*Add" Exit Sub End If If add = 1 Then If lid.Text = "" And lusername.Text = "" And lpassword.Text = "" And lfname.Text = "" Andllname.Text = "" And lgroup.Text = "" Then MsgBox "All fields are mandatory!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If Call databaseconnection rs.Open "select * from login", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do Until rs.EOF If rs.Fields(1) = lusername.Text Then MsgBox "Username exists! Choose different!", vbOKOnly + vbExclamation, "Warning" Exit Sub End If rs.MoveNext Loop rs.MoveLast rs.AddNew rs.Fields(0) = lid.Text rs.Fields(1) = lusername.Text rs.Fields(2) = lpassword.Text rs.Fields(3) = lfname.Text rs.Fields(4) = llname.Text rs.Fields(5) = lgroup.Text rs.Update rs.Close Call disconnectdatabase MsgBox "Record saved", vbOKOnly + vbInformation, "Notification" lcmdAdd.Caption = "Add" add = 0 Call clearLoginFields Call refreshLoginTable Exit Sub End IfEnd SubPrivate Sub lcmdCancel_Click()Unload MeEnd SubPrivate Sub lcmdDelete_Click() If userId = -1 Then 46
    • MsgBox "Select a user to delete!", vbOKOnly + vbExclamation, "Notification" Exit Sub End IfCall databaseconnection rs.Open "Select * from login", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Then rs.MoveFirst End IfDo Until rs.EOF If rs.Fields(0) = userId Then rs.Delete MsgBox "User is deleted", vbOKOnly + vbInformation, "Notification" Exit Do End If rs.MoveNext Loop rs.Close Call refreshLoginTableEnd SubPrivate Sub lcmdModify_Click() If lid.Text = "" And lusername.Text = "" And lpassword.Text = "" And lfname.Text = "" And llname.Text= "" And lgroup.Text = "" Then MsgBox "All fields are mandatory!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If Call databaseconnection rs.Open "select * from login", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do Until rs.EOF If rs.Fields(0) = lid.Text Then rs.Fields(0) = lid.Text rs.Fields(1) = lusername.Text rs.Fields(2) = lpassword.Text rs.Fields(3) = lfname.Text rs.Fields(4) = llname.Text rs.Fields(5) = lgroup.Text rs.Update rs.Close Exit Do End If rs.MoveNext Loop Call disconnectdatabase MsgBox "Record updated!", vbOKOnly + vbInformation, "Notification" 47
    • Call clearLoginFields Call refreshLoginTableEnd SubPrivate Sub lcmdRefresh_Click() Call refreshLoginTableEnd SubPrivate Sub loginTable_Click() userId = loginTable.Columns(0) lid.Text = loginTable.Columns(0) lusername.Text = loginTable.Columns(1) lpassword.Text = loginTable.Columns(2) lfname.Text = loginTable.Columns(3) llname.Text = loginTable.Columns(4) Dim Index As Integer Index = 0 For Index = 0 To lgroup.ListCount - 1 If UCase$(lgroup.ItemData(Index)) = UCase$(loginTable.Columns(5)) Then lgroup.ListIndex = Index Exit For End If Next group from comboBoxEnd SubPrivate Sub mcmdDelete_Click()If planName = "" ThenMsgBox "Choose the plan to delete!", vbOKOnly + vbExclamation, "Notification"Exit SubEnd IfCall databaseconnectionrs.Open "select * from membershipPlan", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfWhile Not rs.EOFIf rs.Fields(0) = planName Thenrs.Deleters.Updaters.CloseplanName = ""Call disconnectdatabaseCall refreshMembershipPlanTablemtxtplanname.Text = ""mtxtfinalAMT.Caption = ""mtxtdiscount.Text = ""mtxtamount.Text = ""Exit SubEnd If 48
    • rs.MoveNextWendEnd SubPrivate Sub mcmdSave_Click()If mtxtplanname.Text = "" And mtxtamount.Text = "" And mtxtdiscount.Text = "" AndmtxtDuration.Text = "Select" ThenMsgBox "Fill the blanks!", vbOKOnly + vbExclamation, "Notification"Exit SubEnd IfCall databaseconnectionrs.Open "select * from membershipPlan", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveLastEnd Ifrs.AddNewrs.Fields(0) = Trim(mtxtplanname.Text)rs.Fields(1) = Val(mtxtDuration.Text)rs.Fields(2) = Val(mtxtfinalAMT.Caption)rs.Updaters.CloseCall disconnectdatabaseCall refreshMembershipPlanTablemtxtplanname.Text = ""mtxtfinalAMT.Caption = ""mtxtdiscount.Text = ""mtxtamount.Text = ""End SubPrivate Sub mcmdUpdate_Click()If mtxtplanname.Text = "" And mtxtamount.Text = "" And mtxtdiscount.Text = "" ThenMsgBox "Fill the blanks!", vbOKOnly + vbExclamation, "Notification"Exit SubEnd IfIf mtxtfinalAMT.Caption = "" ThenMsgBox "Final amount is not calculated!", vbOKOnly + vbExclamation, "Notification"Exit SubEnd IfCall databaseconnectionDim rsTemp As ADODB.RecordsetSet rsTemp = New ADODB.RecordsetrsTemp.Open "select * from membershipPlan", con, adOpenDynamic, adLockOptimisticIf Not rsTemp.EOF ThenrsTemp.MoveFirstEnd IfDo While Not rsTemp.EOF If rsTemp.Fields(0) = mtxtplanname.Text Then rsTemp.Fields(0) = mtxtplanname.Text rsTemp.Fields(1) = Val(mtxtDuration.Text) 49
    • rsTemp.Fields(2) = Val(mtxtfinalAMT.Caption) rsTemp.Update mtxtplanname.Text = "" mtxtfinalAMT.Caption = "" mtxtdiscount.Text = "" mtxtamount.Text = "" Call refreshMembershipPlanTable Exit Do End IfrsTemp.MoveNextLooprsTemp.CloseEnd SubPrivate Sub membershipPlan_Click()planName = Trim(membershipPlan.Columns(0))mtxtplanname = planNamemtxtamount = membershipPlan.Columns(2)mtxtDuration = membershipPlan.Columns(1)End SubPrivate Sub mtxtamount_KeyPress(KeyAscii As Integer)If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub mtxtdiscount_Change()mtxtfinalAMT = mtxtamount - (Val(mtxtdiscount) * Val(mtxtamount)) / 100End SubPrivate Sub mtxtdiscount_KeyPress(KeyAscii As Integer)If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub qcombGroup_Click() Call clearGroup Call databaseconnection add new group initialization If qcombGroup.Text = "Add new group" Then Call clearGroup cmdSave.Enabled = True cmdUpdate.Enabled = False qgroupName.SetFocus rs.Open "select * from userGroup", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveLast End If qgroupId.Text = rs.Fields(0) + 1 50
    • rs.Close qgroupId.Enabled = False cmdSave.Enabled = True rs.Open "select * from userPermission", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveLast End If permId = rs.Fields(0) + 1 rs.Close Exit SubEnd IfcmdSave.Enabled = FalsecmdUpdate.Enabled = TrueqgroupId.Enabled = FalseDim tempArray() As StringtempArray = Split(qcombGroup.Text, " ")rs.Open "select * from userGroup", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfDo While Not rs.EOF If rs.Fields(0) = Val(tempArray(0)) Then permId = rs.Fields(2) qgroupId.Text = rs.Fields(0) qgroupName.Text = rs.Fields(1) Exit Do End If rs.MoveNextLooprs.Closers.Open "select * from userPermission", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Then rs.MoveFirstEnd IfDo While Not rs.EOF If rs.Fields(0) = permId Then If rs.Fields(1) = 1 Then qmemberRead.ListIndex = 0 Else qmemberRead.ListIndex = 1 End If If rs.Fields(2) = 1 Then qmemberAdd.ListIndex = 0 Else qmemberAdd.ListIndex = 1 51
    • End If If rs.Fields(3) = 1 Then qmemberEdit.ListIndex = 0 Else qmemberEdit.ListIndex = 1 End If If rs.Fields(4) = 1 Then qmemberDelete.ListIndex = 0 Else qmemberDelete.ListIndex = 1 End If If rs.Fields(5) = 1 Then qmeasureAdd.ListIndex = 0 Else qmeasureAdd.ListIndex = 1 End If If rs.Fields(6) = 1 Then qreadReport.ListIndex = 0 Else qreadReport.ListIndex = 1 End If If rs.Fields(7) = 1 Then qreadProgress.ListIndex = 0 Else qreadProgress.ListIndex = 1 End If Exit Do End If rs.MoveNext Looprs.CloseCall disconnectdatabaseEnd SubPublic Sub readGroup() qcombGroup.clear Call databaseconnection rs.CursorLocation = adUseClient rs.Open "select * from userGroup", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then While Not rs.EOF qcombGroup.AddItem (rs.Fields(0) & " " & rs.Fields(1)) rs.MoveNext Wend Else MsgBox "Record set is empty!", vbOKOnly + vbExclamation, "Warning" End If 52
    • rs.Close Call disconnectdatabase qcombGroup.AddItem ("Add new group")End SubPublic Sub clearGroup() qmemberAdd.Text = "" qmemberEdit.Text = "" qmemberRead.Text = "" qmemberDelete.Text = "" qmeasureAdd.Text = "" qreadProgress.Text = "" qreadReport.Text = "" qgroupId.Text = "" qgroupName.Text = "" cmdUpdate.Enabled = True cmdSave.Enabled = TrueEnd SubPublic Sub clearLoginFields()lid.Text = ""lusername.Text = ""lpassword.Text = ""lfname.Text = ""llname.Text = ""lgroup.Text = ""End SubPublic Sub refreshLoginTable() loginTable.ClearFields loginTableDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"Datasgsdata.mdb;Persist Security Info=False" loginTableDC.CommandType = adCmdText loginTableDC.RecordSource = "select * from login" Set loginTable.DataSource = loginTableDC loginTableDC.Refresh loginTable.RefreshEnd SubPublic Sub refreshMembershipPlanTable() membershipPlan.ClearFields membershipPlanDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &App.Path & "Datasgsdata.mdb;Persist Security Info=False" membershipPlanDC.CommandType = adCmdText membershipPlanDC.RecordSource = "select * from membershipPlan" Set membershipPlan.DataSource = membershipPlanDC membershipPlanDC.Refresh membershipPlan.RefreshEnd Sub 53
    • frmIndividualReport Form:Option ExplicitDim mId As IntegerPrivate Sub cmdGenerate_Click() If mId = -1 Then MsgBox "Select a member!", vbOKOnly + vbExclamation, "Warning" Exit Sub End If generateSelfReport (mId)End SubPrivate Sub Form_Load() mId = -1 lblBMIChange.Caption = "" lblBodyFatChange.Caption = "" lblDueDate.Caption = "" lblLastMeasurementDate.Caption = "" lblLastPaymentDate.Caption = "" lblMemberNameGreeting.Caption = "" lblSinceJoinedDate.Caption = "" lblTotalAmtPaid.Caption = "" lblWeightChange.Caption = "" memberTableDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"Datasgsdata.mdb;Persist Security Info=False" memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "select memberId, firstname, lastname from members" Set memberTable.DataSource = memberTableDCEnd SubPrivate Sub memberTable_Click() mId = Val(memberTable.Columns(0))End SubPublic Function generateSelfReport(memberId As Integer)Dim str As StringlblMemberNameGreeting.Caption = memberTable.Columns(0) & " " & memberTable.Columns(1) & " "& memberTable.Columns(2)str = getLastMeasurementDateOf(memberId)If Not str = "" ThenlblLastMeasurementDate.Caption = "Last measurement date: " & strElselblLastMeasurementDate.Caption = "Measurement History is empty"End Ifstr = ""lblBMIChange.Caption = "BMI change : " & getBMIchangeOf(memberId)lblBodyFatChange.Caption = "Body Fat change : " & getBodyFatChangeOf(memberId)lblWeightChange.Caption = "Weight change : " & getWeightChangeOf(memberId)str = getLastPaymentDateOf(memberId) 54
    • If Not str = "" ThenlblLastPaymentDate.Caption = "Last Payment Date : " & strElselblLastPaymentDate.Caption = "Payment History is empty"End Ifstr = ""str = getTotalAmtPaidOf(memberId)If Not str = "" ThenlblTotalAmtPaid.Caption = "Total amount paid : " & strElselblTotalAmtPaid.Caption = "Payment History is empty"End Ifstr = ""lblSinceJoinedDate.Caption = sinceJoinedDateOf(memberId)lblDueDate.Caption = "Due Date : " & getDueDateOf(memberId)End FunctionPrivate Sub txtSearch_Change() If txtSearch.Text = "" Then memberTable.ClearFields memberTableDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path& "Datasgsdata.mdb;Persist Security Info=False" memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "select memberId, firstname, lastname from members" Set memberTable.DataSource = memberTableDC memberTableDC.Refresh memberTable.Refresh Exit Sub End If If optRno.Value Then memberTable.ClearFields memberTableDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path& "Datasgsdata.mdb;Persist Security Info=False" memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "select memberId, firstname, lastname from members wherememberId like " & Val(txtSearch.Text) & "%" Set memberTable.DataSource = memberTableDC memberTableDC.Refresh memberTable.Refresh ElseIf optFname.Value Then memberTable.ClearFields memberTableDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path& "Datasgsdata.mdb;Persist Security Info=False" memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "select memberId, firstname, lastname from members wherefirstname like " & txtSearch.Text & "%" Set memberTable.DataSource = memberTableDC 55
    • memberTableDC.Refresh memberTable.Refresh End IfEnd SubPrivate Sub txtSearch_GotFocus() If optRno.Value = False And optFname.Value = False Then MsgBox "Choose the search option!", vbOKOnly + vbExclamation, "Warning" Exit Sub End If txtSearch.Text = ""End SubPrivate Sub txtSearch_KeyPress(KeyAscii As Integer) If optRno Then If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 And KeyAscii <> 45 And KeyAscii <> 47 Then KeyAscii = 0 End If End IfEnd SubfrmInitialReport Form:Option ExplicitPrivate Sub cmdProceed_Click()If optIndividual.Value = False And optReport.Value = False Then MsgBox "Select the report type!", vbOKOnly + vbExclamation, "Notification" Exit SubElseIf optIndividual.Value Then frmIndividualReport.ShowElse frmReport.ShowEnd IfUnload MeEnd SubfrmLogin Form:Option ExplicitPublic LoginSucceeded As BooleanPrivate Sub cmdCancel_Click() set the global var to false to denote a failed login LoginSucceeded = False Me.HideEnd SubPrivate Sub cmdClose_Click() If MsgBox("Are you really quit? ", vbYesNo, "Notification") = vbYes Then Unload Me End IfEnd SubPrivate Sub Form_Load() 56
    • txtUserName.BackColor = RGB(241, 241, 241)txtPassword.BackColor = RGB(241, 241, 241)lblOk.MousePointer = 99lblOk.MouseIcon = LoadPicture(App.Path & "hand.ico")End SubPrivate Sub lblOk_Click()If txtUserName.Text = "" And txtPassword.Text = "" ThenMsgBox "Enter the username and password!", vbOKOnly + vbExclamation, "Login"txtUserName.Text = ""txtPassword.Text = ""ElseIf txtUserName.Text = "" ThenMsgBox "Enter the username", vbOKOnly + vbExclamation, "Login"txtUserName.Text = ""txtPassword.Text = ""ElseIf txtPassword.Text = "" ThenMsgBox "Enter the password", vbOKOnly + vbExclamation, "Login"txtUserName.Text = ""txtPassword.Text = ""Else Call databaseconnection rs.Open "select * from login", con, adOpenStatic If rs.EOF = True Then MsgBox "Login entry is empty!", vbOKOnly + vbCritical, "Error" Exit Sub Else rs.MoveFirst End If While Not rs.EOF If Trim(txtUserName.Text) = rs.Fields(1) And Trim(txtPassword.Text) = rs.Fields(2) Then barName = rs.Fields(3) & " " & rs.Fields(4) Call disconnectdatabase dialogLoading.Show Unload Me Exit Sub Else rs.MoveNext End If Wend Call disconnectdatabase MsgBox "Bad login", vbOKOnly + vbExclamation, "Login" txtPassword.SetFocus End IfEnd SubfrmMain Form:Private Declare Function GetMenu Lib "User32" (ByVal hWnd As Long) As LongPrivate Declare Function GetSubMenu Lib "User32" (ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate Declare Function SetMenuItemBitmaps Lib "User32" _ 57
    • (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _ ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As LongPrivate Declare Function LoadImage Lib "User32" Alias "LoadImageA" _ (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, _ ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As LongConstant for SetMenuItemBitmapsPrivate Const MF_BYPOSITION As Long = &H400&Constants for LoadImagePrivate Const IMAGE_BITMAP As Long = &O0Private Const LR_LOADFROMFILE As Long = 16Private Const LR_CREATEDIBSECTION As Long = 8192Private Sub addmember_Click()frmMember.loadType = 0frmMember.ShowEnd SubPrivate Sub adminpanel_Click()dialogToAccessAdmin.ShowEnd SubPrivate Sub bodyprogress_Click()frmSearch.loadBodyProgress = TruefrmSearch.ShowEnd SubPrivate Sub calc_Click()Shell "C:WINDOWSSystem32calc.exe"End SubPrivate Sub employees_Click(Index As Integer)End SubPrivate Sub hideMetroGrid_Click() frmMetroStyleMenu.Visible = FalseEnd SubPrivate Sub logout_Click()frmLogin.ShowUnload MeEnd SubPrivate Sub MDIForm_Load()Me.Caption = "Smart Gym System : " & barNamefrmSideBar.Showsetting to fullscreendX = Me.WidthdY = Me.HeightsetFullScreen MefrmMetroStyleMenu.ShowDim ext As Stringext = GetFileExtension(App.Path & "wallpaper.jpeg")If ext = "jpg" Or ext = "png" Or ext = "jpeg" Or ext = "bmp" Then Me.Picture = LoadPicture(App.Path & "wallpaper.jpeg")Else 58
    • MsgBox "Invalid Image File!", vbOKOnly + vbExclamation, "Notification" Exit SubEnd Ifadd icons to the menu Dim hMenu As Long Dim hSubMenu As Long Dim hMenuImg As Long Dim sFileName As String Get the bitmap. sFileName = App.Path & "IconsmenuIconsinvisible.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Get the menu item handle. hMenu = GetMenu(Me.hWnd) hSubMenu = GetSubMenu(hMenu, 0) Set the "mnuTwo" bitmap to the one that is loaded in memory. Call SetMenuItemBitmaps(hSubMenu, 0, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsvisible.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 1, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsAdminPanel.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 2, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsLogOut.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 3, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsShutsystem.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 4, MF_BYPOSITION, hMenuImg, 0) hMenu = GetMenu(Me.hWnd) hSubMenu = GetSubMenu(hMenu, 1) sFileName = App.Path & "IconsmenuIconsMemberList.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 0, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsMemberAdd.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 1, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsMeasurement.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) 59
    • Call SetMenuItemBitmaps(hSubMenu, 2, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsProgress.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 3, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsMakePayment.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 4, MF_BYPOSITION, hMenuImg, 0) hMenu = GetMenu(Me.hWnd) hSubMenu = GetSubMenu(hMenu, 3) sFileName = App.Path & "IconsmenuIconsCalculator.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 0, MF_BYPOSITION, hMenuImg, 0) sFileName = App.Path & "IconsmenuIconsChangeWall.bmp" hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE OrLR_CREATEDIBSECTION) Call SetMenuItemBitmaps(hSubMenu, 1, MF_BYPOSITION, hMenuImg, 0)End SubPrivate Sub MDIForm_Unload(Cancel As Integer)If MsgBox("Are you really want to exit?", vbYesNo + vbQuestion, "Notification") = vbYes Then Unload MeEnd IfEnd SubPrivate Sub measurement_Click() frmSearch.loadMeasurement = True frmSearch.ShowEnd SubPrivate Sub memberdetails_Click()frmMemberlist.ShowEnd SubPrivate Sub metroGrid_Click() If frmMetroStyleMenu.Visible = False Then frmMetroStyleMenu.Visible = True Exit Sub End If frmMetroStyleMenu.ShowEnd SubPrivate Sub payment_Click() frmSearch.loadPayment = True frmSearch.ShowEnd SubPrivate Sub reports_Click() frmInitialReport.Show 60
    • End SubPrivate Sub setWallpaper_Click()dialogToChangeWallpaper.ShowEnd SubPrivate Sub shutsystem_Click()If MsgBox("Are you really want to exit?", vbYesNo + vbQuestion, "Notification") = vbYes Then Unload MeEnd IfEnd SubfrmMember Form:Public loadType As IntegerPublic payment As BooleanPublic memberId As IntegerDim ibj As ObjectDim dtmTest As DateDim dateTimeNow As StringDim dd As StringDim tt As StringDim photoUrl As StringDim photoName As StringDim isClicked As BooleanPrivate Sub cmdBrowse_Click()CommonDialog1.ShowOpenpictureProfile.Picture = LoadPicture(CommonDialog1.FileName)photoUrl = CommonDialog1.FileNamephotoName = CommonDialog1.FileTitleEnd SubPrivate Sub cmdCancel_Click()If MsgBox("Exit?", vbYesNo + vbQuestion, "Notification") = vbYes ThenCall disconnectdatabaseUnload MeEnd IfEnd SubPrivate Sub cmdClear_Click()Call clearEnd SubPrivate Sub cmdProgress_Click()End SubPrivate Sub cmdReport_Click() If isClicked Then cmdReport.Caption = "Show Report" Me.Width = Line2.X2 isClicked = False 61
    • Else cmdReport.Caption = "Hide Report" Me.Width = 13920 isClicked = True End IfEnd SubPrivate Sub cmdSave_Click() If txtid.Text = "" And txtfname.Text = "" And txtlname.Text = "" And txtgender.Text = "Select" Andtxtdob.Text = "" And txtnumber.Text = "" And txtaddress.Text = "" Then MsgBox "Fill the fields", vbOKOnly + vbExclamation, "Warning!" End If If loadType = 1 Then memberModify rs.Open "select * from members" If Not rs.EOF Then rs.MoveFirst End If While Not rs.EOF If rs.Fields(0) = txtid.Text Then rs.Fields(0) = txtid.Text rs.Fields(1) = txtfname.Text rs.Fields(2) = txtlname.Text rs.Fields(3) = txtgender.Text rs.Fields(4) = txtnumber.Text rs.Fields(5) = txtaddress.Text rs.Fields(7) = txtdob.Value delete the previous photo Kill App.Path & rs.Fields(8) new photo is copied here If Not photoUrl = "" Then FileCopy photoUrl, App.Path & "ProfilePicture" & photoName End If set the photo to the database rs.Fields(8) = "ProfilePicture" & photoName Unload Me Exit Sub End If rs.MoveNext Wend ElseIf loadType = 2 Then memberReadOnly Else memberAdd dd = Format$(Now, "mm/dd/yyyy") tt = Format$(time, "hh:mm:ssAM/PM") dateTimeNow = dd & " " & tt rs.Open "select * from members" 62
    • If Not rs.EOF Then rs.MoveLast End If rs.AddNew rs.Fields(0) = txtid.Text rs.Fields(1) = txtfname.Text rs.Fields(2) = txtlname.Text rs.Fields(3) = txtgender.Text rs.Fields(4) = txtnumber.Text rs.Fields(5) = txtaddress.Text rs.Fields(6) = dateTimeNow rs.Fields(7) = txtdob.Value rs.Fields("dueDate") = dd If Not photoUrl = "" Then FileCopy photoUrl, App.Path & "ProfilePicture" & photoName End If rs.Fields(8) = "ProfilePicture" & photoName rs.Update rs.Close MsgBox "Saved!", vbOKOnly + vbInformation, "Notification" If MsgBox("Are you want to make payment?", vbYesNo, "Payment") = vbYes Then frmPayment.txtid = txtid.Text frmPayment.txtname = txtfname.Text & " " & txtlname.Text frmPayment.Show Unload Me Else Me.Refresh Call clear Unload Me End IfEnd IfEnd SubPrivate Sub Form_Load()Call databaseconnectionCall cleartxtgender.AddItem "Male"txtgender.AddItem "Female"txtid.Enabled = TruetxtdueDate.Enabled = Falsetxtnumber.MaxLength = 12cmdReport.Visible = FalsecmdBrowse.Visible = TruecmdCancel.Visible = TruecmdClear.Visible = TruecmdSave.Visible = TrueMe.Height = 6000Me.Width = Line2.X2 63
    • If loadType = 1 Then#######memberModify Me.Caption = "Edit member" txtid.Enabled = False txtdoj.Enabled = False cmdSave.Caption = "Update" Me.Height = 6000 Me.Width = Line2.X2 cmdReport.Visible = False rs.Open "select * from members", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If While Not rs.EOF If rs.Fields(0) = memberId Then txtid.Text = rs.Fields(0) txtfname.Text = rs.Fields(1) txtlname.Text = rs.Fields(2) txtgender.Text = rs.Fields(3) txtnumber.Text = rs.Fields(4) txtaddress.Text = rs.Fields(5) txtdoj.Text = rs.Fields(6) txtdob.Value = rs.Fields(7) If FileExists(App.Path & rs.Fields(8)) Then Image1.Picture = LoadPicture(App.Path & rs.Fields(8)) End If txtdueDate.Text = rs.Fields(9) rs.Close Exit Sub End If rs.MoveNext WendElseIf loadType = 2 Then########memberReadOnly Me.Caption = "Member in detail" cmdClear.Visible = False cmdCancel.Visible = False cmdSave.Visible = False cmdReport.Visible = True cmdBrowse.Visible = False txtaddress.Enabled = False txtdob.Enabled = False txtdoj.Enabled = False txtfname.Enabled = False txtgender.Enabled = False txtid.Enabled = False txtlname.Enabled = False 64
    • txtnumber.Enabled = False Me.Height = 9210 Me.Width = Line2.X2 rs.Open "select * from members", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do While Not rs.EOF If rs.Fields(0) = memberId Then txtid.Text = rs.Fields(0) txtfname.Text = rs.Fields(1) txtlname.Text = rs.Fields(2) txtgender.Text = rs.Fields(3) txtdob.Value = rs.Fields(7) txtnumber.Text = rs.Fields(4) txtaddress.Text = rs.Fields(5) txtdoj.Text = rs.Fields(6) Dim fullPath As String fullPath = App.Path & rs.Fields(8) pictureProfile.Picture = LoadPicture(fullPath) txtdueDate.Text = rs.Fields(9) Exit Do End If rs.MoveNext Loop rs.Close Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset rs2.CursorLocation = adUseClient rs2.Open "SELECT * FROM paymentTransaction WHERE memberId=" & Val(txtid.Text), con,adOpenDynamic, adLockOptimistic Set PaymentHistory.DataSource = rs2 Call generateSelfReport Exit SubElse#######memberAdd Me.Caption = "New member" txtdoj.Enabled = False Me.Height = Line1.Y2 + 400 dd = Format$(Now, "mm/dd/yyyy") tt = Format$(time, "hh:mm:ssAM/PM") dateTimeNow = dd & " " & tt txtdoj.Text = dateTimeNow ***********Generating ID for the newmember********************************* rs.Open "Select memberId from members", con, adOpenStatic, adLockOptimistic 65
    • If rs.EOF = True Then txtid.Text = 1 Else rs.MoveLast txtid.Text = rs.Fields(0) + 1 End If rs.Close****************************************************************************End IfEnd SubPublic Function clear() txtid.Locked = True txtid.Text = "" txtfname.Text = "" txtlname.Text = "" txtgender.Text = "Select" txtdob.Value = "1/1/2012" txtnumber.Text = "" txtaddress.Text = ""End FunctionPrivate Sub Form_Unload(Cancel As Integer) If loadType = 0 Then If MsgBox("Do you want to cancel?", vbOKOnly + vbQuestion, "Notification") = vbYes Then Unload Me Call disconnectdatabase Exit Sub Else Exit Sub End If End If Unload Me Call disconnectdatabaseEnd SubPublic Function generateSelfReport()Dim str As StringlblMemberNameGreeting.Caption = txtid.Text & " " & txtfname.Text & " " & txtlname.Textstr = getLastMeasurementDateOf(Val(txtid.Text))If Not str = "" ThenlblLastMeasurementDate.Caption = "Last measurement date: " & strElselblLastMeasurementDate.Caption = "Measurement History is empty"End Ifstr = ""lblBMIChange.Caption = "BMI change : " & getBMIchangeOf(Val(txtid.Text))lblBodyFatChange.Caption = "Body Fat change : " & getBodyFatChangeOf(Val(txtid.Text))lblWeightChange.Caption = "Weight change : " & getWeightChangeOf(Val(txtid.Text))str = getLastPaymentDateOf(Val(txtid.Text)) 66
    • If Not str = "" ThenlblLastPaymentDate.Caption = "Last Payment Date : " & strElselblLastPaymentDate.Caption = "Payment History is empty"End Ifstr = ""str = getTotalAmtPaidOf(Val(txtid.Text))If Not str = "" ThenlblTotalAmtPaid.Caption = "Total amount paid : " & strElselblTotalAmtPaid.Caption = "Payment History is empty"End Ifstr = ""lblSinceJoinedDate.Caption = sinceJoinedDateOf(Val(txtid.Text))lblDueDate.Caption = "Due Date : " & getDueDateOf(Val(txtid.Text))Dim rs3 As ADODB.RecordsetSet rs3 = New ADODB.Recordsetrs3.CursorLocation = adUseClientrs3.Open "SELECT * FROM progressMember WHERE memberId=" & Val(txtid.Text), con,adOpenDynamic, adLockOptimisticSet measurementHistory.DataSource = rs3End FunctionPrivate Sub txtnumber_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubfrmMemberlist Form:Dim memberId As IntegerDim oSelRows As SelBookmarksDim bookmark As DoublePrivate Sub cmdAddMember_Click() frmMember.loadType = 0 frmMember.ShowEnd SubPrivate Sub cmdDeleteMember_Click() If memberId = -1 Then MsgBox "Select the member to delete!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If If MsgBox("Are you really want to delete the user?", vbYesNo + vbQuestion, "Notification") = vbYesThen delete rs.Open "Select * from members", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If 67
    • Do While Not rs.EOF If rs.Fields(0) = memberId Then rs.Delete rs.Update rs.Close Exit Do End If rs.MoveNext Loop rs.Close rs.Open "select * from progressMember", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do While Not rs.EOF If rs.Fields(0) = memberId Then rs.Delete rs.Update rs.Close Exit Do End If rs.MoveNext Loop rs.Close ElseIf answer = vbNo Then frmMemberlist.SetFocus End IfEnd SubPrivate Sub cmdMakePayment_Click() If memberId = -1 Then MsgBox "Select the member to make payment!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If frmPayment.memberId = memberId frmPayment.Show memberId = -1End SubPrivate Sub cmdModifyMember_Click() If memberId = -1 Then MsgBox "Select the member to modify!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If frmMember.loadType = 1 frmMember.memberId = memberId frmMember.Show memberId = -1 68
    • End SubPrivate Sub cmdShowProfile_Click() If memberId = -1 Then MsgBox "Select the member to modify!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If frmMember.loadType = 2 frmMember.memberId = memberId frmMember.Show memberId = -1End SubPrivate Sub cmmdTakeMeasurement_Click() frmMemberMeasurement.memberId = Val(DataGrid1.Columns(0)) frmMemberMeasurement.ShowEnd SubPrivate Sub DataGrid1_Click() memberId = DataGrid1.Columns(0)End SubPrivate Sub Form_Load() memberId = -1 MsgBox memberId Me.Picture = Nothing memberTableDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"Datasgsdata.mdb;Persist Security Info=False" memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "select * from members" Set DataGrid1.DataSource = memberTableDCEnd SubPrivate Sub searchField_Change() If searchField.Text = "" Then DataGrid1.ClearFields memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "Select * from members" Set DataGrid1.DataSource = memberTableDC memberTableDC.Refresh DataGrid1.Refresh Exit Sub End If If optRno Then DataGrid1.ClearFields memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "Select * from members where memberId like " &Val(searchField.Text) & "%" Set DataGrid1.DataSource = memberTableDC memberTableDC.Refresh DataGrid1.Refresh 69
    • ElseIf optFname Then DataGrid1.ClearFields memberTableDC.CommandType = adCmdText memberTableDC.RecordSource = "Select * from members where firstname like " &searchField.Text & "%" Set DataGrid1.DataSource = memberTableDC memberTableDC.Refresh DataGrid1.Refresh End IfEnd SubPrivate Sub searchField_KeyPress(KeyAscii As Integer) If optRno Then If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End If End IfEnd SubfrmMemberMeasurementPublic memberId As IntegerPublic memberGender As BooleanDim dateTimeNow As StringDim dd As StringDim tt As StringPrivate Sub c1height_KeyPress(KeyAscii As Integer)If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c2weight_KeyPress(KeyAscii As Integer)If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c3neck_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c4hips_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c5waist_Change()If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 70
    • End IfEnd SubPrivate Sub c6forearm_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c7wrist_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub cmdCalculate_Click() lblBMI.Caption = calculateBMIbyMetric(Val(c2weight.Text), Val(c1height.Text)) lblBodyFat.Caption = calculateBodyFat(memberGender, Val(c2weight.Text), Val(c5waist.Text),Val(c7wrist.Text), Val(c4hips.Text), Val(c6forearm.Text)) & "%"End SubPrivate Sub cmdCancel_Click() If MsgBox("Measurement will be declined", vbYesNo + vbQuestion, "Notification") = vbYes Then Unload Me End IfEnd SubPrivate Sub cmdSave_Click() If c1height.Text = "" And _ c2weight.Text = "" And _ c3neck.Text = "" And _ c4hips.Text = "" And _ c5waist.Text = "" And _ c6forearm.Text = "" And _ c7wrist.Text = "" Then MsgBox "Core Measurement fields are mandatory!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If dd = Format$(Now, "mm/dd/yyyy") tt = Format$(time, "hh:mm:ssAM/PM") dateTimeNow = dd & " " & tt Call databaseconnection rs.Open "select * from progressMember", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveLast End If rs.AddNew rs.Fields(0) = Val(lblmemberId.Caption) rs.Fields(1) = Val(c1height.Text) rs.Fields(2) = Val(c2weight.Text) rs.Fields(3) = Val(lblBMI.Caption) rs.Fields(4) = Val(d1bicep.Text) 71
    • rs.Fields(5) = Val(c4hips.Text) rs.Fields(6) = Val(d2thigh.Text) rs.Fields(7) = Val(c3neck.Text) rs.Fields(8) = Val(c6forearm.Text) rs.Fields(9) = Val(d3chest.Text) rs.Fields(10) = Val(d4calves.Text) rs.Fields(11) = dateTimeNow Dim tempArray() As String tempArray = Split(lblBodyFat.Caption, "%") rs.Fields(12) = Val(tempArray(0)) rs.Fields(13) = Val(c5waist.Text) rs.Fields(14) = Val(c7wrist.Text) rs.Update rs.Close MsgBox "Measurement of " & memberId & " was successfully added", vbOKOnly + vbInformation,"Notification" Unload MeEnd SubPrivate Sub d1bicep_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub d2thigh_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub d3chest_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub d4calves_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub Form_Load() optionCore.Value = True corePanel.Enabled = True detailedPanel.Enabled = False detailedPanel.BackColor = &HE0E0E0 Me.Caption = "Measurement" dd = Format$(Now, "mm/dd/yyyy") tt = Format$(time, "hh:mm:ssAM/PM") dateTimeNow = dd 72
    • lblDate.Caption = dateTimeNow Call databaseconnection rs.Open "select * from members", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do While Not rs.EOF If rs.Fields(0) = memberId Then lblmemberId.Caption = rs.Fields(0) lblname.Caption = rs.Fields(1) & " " & rs.Fields(2) If rs.Fields(3) = "Male" Then memberGender = True Else memberGender = False End If Exit Do End If rs.MoveNext Loop rs.CloseEnd SubPrivate Sub Form_Unload(Cancel As Integer) If MsgBox("Measurement will be declined", vbYesNo + vbQuestion, "Notification") = vbYes Then Unload Me End IfEnd SubPrivate Sub optionCore_Click() corePanel.Enabled = True detailedPanel.Enabled = False detailedPanel.BackColor = &HE0E0E0End SubPrivate Sub optionDetailed_Click() corePanel.Enabled = True detailedPanel.Enabled = True detailedPanel.BackColor = corePanel.BackColorEnd SubfrmMetroStyleMenuPublic memberId As IntegerPublic memberGender As BooleanDim dateTimeNow As StringDim dd As StringDim tt As StringPrivate Sub c1height_KeyPress(KeyAscii As Integer)If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then 73
    • KeyAscii = 0 End IfEnd SubPrivate Sub c2weight_KeyPress(KeyAscii As Integer)If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c3neck_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c4hips_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c5waist_Change()If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c6forearm_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub c7wrist_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub cmdCalculate_Click() lblBMI.Caption = calculateBMIbyMetric(Val(c2weight.Text), Val(c1height.Text)) lblBodyFat.Caption = calculateBodyFat(memberGender, Val(c2weight.Text), Val(c5waist.Text),Val(c7wrist.Text), Val(c4hips.Text), Val(c6forearm.Text)) & "%"End SubPrivate Sub cmdCancel_Click() If MsgBox("Measurement will be declined", vbYesNo + vbQuestion, "Notification") = vbYes Then Unload Me End IfEnd SubPrivate Sub cmdSave_Click() If c1height.Text = "" And _ c2weight.Text = "" And _ 74
    • c3neck.Text = "" And _ c4hips.Text = "" And _ c5waist.Text = "" And _ c6forearm.Text = "" And _ c7wrist.Text = "" Then MsgBox "Core Measurement fields are mandatory!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If dd = Format$(Now, "mm/dd/yyyy") tt = Format$(time, "hh:mm:ssAM/PM") dateTimeNow = dd & " " & tt Call databaseconnection rs.Open "select * from progressMember", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveLast End If rs.AddNew rs.Fields(0) = Val(lblmemberId.Caption) rs.Fields(1) = Val(c1height.Text) rs.Fields(2) = Val(c2weight.Text) rs.Fields(3) = Val(lblBMI.Caption) rs.Fields(4) = Val(d1bicep.Text) rs.Fields(5) = Val(c4hips.Text) rs.Fields(6) = Val(d2thigh.Text) rs.Fields(7) = Val(c3neck.Text) rs.Fields(8) = Val(c6forearm.Text) rs.Fields(9) = Val(d3chest.Text) rs.Fields(10) = Val(d4calves.Text) rs.Fields(11) = dateTimeNow Dim tempArray() As String tempArray = Split(lblBodyFat.Caption, "%") rs.Fields(12) = Val(tempArray(0)) rs.Fields(13) = Val(c5waist.Text) rs.Fields(14) = Val(c7wrist.Text) rs.Update rs.Close MsgBox "Measurement of " & memberId & " was successfully added", vbOKOnly + vbInformation,"Notification" Unload MeEnd SubPrivate Sub d1bicep_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfPrivate Sub d2thigh_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 75
    • End IfEnd SubPrivate Sub d3chest_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub d4calves_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End IfEnd SubPrivate Sub Form_Load() optionCore.Value = True corePanel.Enabled = True detailedPanel.Enabled = False detailedPanel.BackColor = &HE0E0E0 Me.Caption = "Measurement" dd = Format$(Now, "mm/dd/yyyy") tt = Format$(time, "hh:mm:ssAM/PM") dateTimeNow = dd lblDate.Caption = dateTimeNow Call databaseconnection rs.Open "select * from members", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do While Not rs.EOF If rs.Fields(0) = memberId Then lblmemberId.Caption = rs.Fields(0) lblname.Caption = rs.Fields(1) & " " & rs.Fields(2) If rs.Fields(3) = "Male" Then memberGender = True Else memberGender = False End If Exit Do End If rs.MoveNext Loop rs.CloseEnd SubPrivate Sub Form_Unload(Cancel As Integer) If MsgBox("Measurement will be declined", vbYesNo + vbQuestion, "Notification") = vbYes Then Unload Me End If 76
    • End SubPrivate Sub optionCore_Click() corePanel.Enabled = True detailedPanel.Enabled = False detailedPanel.BackColor = &HE0E0E0End SubPrivate Sub optionDetailed_Click() corePanel.Enabled = True detailedPanel.Enabled = True detailedPanel.BackColor = corePanel.BackColorEnd SubfrmPayment Form:Public memberId As IntegerDim duration As IntegerOption ExplicitPrivate Sub cmdCancel_Click()Call disconnectdatabaseUnload MeEnd SubPrivate Sub cmdPay_Click()rs.Open "select * from paymentTransaction", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveLastEnd Ifrs.AddNewrs.Fields(0).Value = txtid.Textrs.Fields(1).Value = Format$(Now, "mm/dd/yyyy") & " " & Format$(time, "hh:mm:ssAM/PM")rs.Fields(2).Value = Val(txtPayableAmt.Caption)rs.Fields(3).Value = Val(lblBillno.Caption)rs.Updaters.Closers.Open "select * from members", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfDo Until rs.EOF If rs.Fields(0) = Val(txtid.Text) Then Dim dueSTR As String dueSTR = rs.Fields("dueDate").Value rs.Fields("dueDate").Value = addMonth(dueSTR, duration) rs.Update If MsgBox("Payment Transaction done! " & vbCrLf & "Do you want to print the receipt?", vbYesNo+ vbQuestion, "Notification") = vbYes Then Receipt Print page generation *************************************************** 77
    • Dim rsTemp As ADODB.RecordsetSet rsTemp = New ADODB.RecordsetrsTemp.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimisticIf Not rsTemp.EOF ThenrsTemp.MoveFirstEnd IfDim zgname As StringDim zaddress As StringDim zphone As StringDim zmname As StringDim zpType As StringDim zdueDate As StringDim zdate As StringDim zBillNo As IntegerDim zId As IntegerDim zAmt As DoubleDo Until rsTemp.EOFzgname = rsTemp.Fields(0)zaddress = rsTemp.Fields(1)zphone = rsTemp.Fields(3)Exit DoLoopzmname = Trim(txtname.Text)zpType = Trim(txtPaymentType.Text)zdueDate = Trim(rs.Fields("dueDate"))zBillNo = Val(lblBillno.Caption)zId = Val(txtid.Text)zAmt = Val(txtPayableAmt.Caption)Call databaseconnectionDim rsT As ADODB.RecordsetSet rsT = New ADODB.RecordsetrsT.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimisticSet ReceiptP.DataSource = rsTReceiptP.DataMember = rsT.DataMemberReceiptP.Sections("Section0").Controls("lblGymName").Caption = zgnameReceiptP.Sections("Section0").Controls("lblAddress").Caption = zaddressReceiptP.Sections("Section0").Controls("lblPhone").Caption = zphoneReceiptP.Sections("Section1").Controls("lblBillNo").Caption = "Receipt No : " & zBillNoReceiptP.Sections("Section2").Controls("lblMemberName").Caption = zmnameReceiptP.Sections("Section2").Controls("lblPlanName").Caption = zpTypeReceiptP.Sections("Section2").Controls("lblDueDate").Caption = zdueDateReceiptP.Sections("Section2").Controls("lblAmtPaid").Caption = zAmtReceiptP.Sections("Section2").Controls("lblMemberId").Caption = zIdReceiptP.Sections("Section1").Controls("lblReceiptDate").Caption = "Receipt Date : " & zdateReceiptP.Show 78
    • ENDING RECEIPT GENERATION****************************************************** End If Exit Do End If rs.MoveNextLooprs.CloseUnload MeEnd SubPrivate Sub Form_Load()Call databaseconnectiongenerating billnors.Open "select * from paymentTransaction ORDER BY billno", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Then rs.MoveLastEnd IfIf rs.RecordCount = 0 Then lblBillno.Caption = "0"Else lblBillno.Caption = rs.Fields(3) + 1End Ifrs.Closers.Open "select * from membershipPlan", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfWhile Not rs.EOFtxtPaymentType.AddItem (rs.Fields(0).Value)rs.MoveNextWendtxtPaymentType.Text = "Select"rs.Closers.Open "Select * from members", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfWhile Not rs.EOF If memberId = rs.Fields(0) Then txtid.Text = rs.Fields(0) txtname.Text = rs.Fields(1) rs.Close Exit Sub End If rs.MoveNext 79
    • Wendrs.CloseMsgBox "User could not found!", vbOKOnly + vbExclamation, "Notification"End SubPrivate Sub Form_Unload(Cancel As Integer)Call disconnectdatabaseEnd SubPrivate Sub txtPaymentType_Click()If txtPaymentType.Text = "..." ThendialogToAccessAdmin.ShowElsers.Open "select * from membershipPlan", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfWhile Not rs.EOFIf txtPaymentType.Text = rs.Fields(0) ThentxtPayableAmt.Caption = rs.Fields(2)duration = rs.Fields(1)rs.CloseExit SubEnd Ifrs.MoveNextWendrs.CloseEnd IfEnd SubfrmProgress Form:Public memberId As IntegerPublic fname As StringPublic lname As StringPrivate Sub Form_Load() lblFname.Caption = fname lblLname.Caption = lname lblmemberId.Caption = memberId tableDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"Datasgsdata.mdb;Persist Security Info=False" tableDC.CommandType = adCmdText tableDC.RecordSource = "select * from progressMember where memberId=" & memberId Set table.DataSource = tableDCEnd SubfrmReport Form:Option ExplicitDim billNo As IntegerDim paymentQuery As StringDim memberId As Integer 80
    • Dim memberId1 As IntegerPrivate Sub cmdPrint_Click() If paymentQuery = "" Then Exit Sub End If Dim sum As Double Dim Count As Integer Dim gName As String Dim gAddress As String Dim rec As ADODB.Recordset Set rec = New ADODB.Recordset rec.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimistic If Not rec.EOF Then rec.MoveFirst gName = rec.Fields(0) gAddress = rec.Fields(1) Else gName = "" gAddress = "" End If rec.Close rec.Open paymentQuery, con, adOpenDynamic, adLockOptimistic Count = 0 sum = 0 If Not rec.EOF Then rec.MoveFirst End If Do Until rec.EOF sum = sum + rec.Fields(2) Count = Count + 1 rec.MoveNext Loop Set PaymentP.DataSource = rec PaymentP.DataMember = rs.DataMember PaymentP.Sections("Section4").Controls("lblGymName").Caption = gName PaymentP.Sections("Section4").Controls("lblAddress").Caption = gAddress PaymentP.Sections("Section5").Controls("lblRecordCount").Caption = "Total Transaction : " & Count PaymentP.Sections("Section2").Controls("lblRange").Caption = "Range : " & dtFrom.Value & " - " &dtTo.Value PaymentP.Sections("Section5").Controls("lblTotalTransaction").Caption = "Total : " & sum & "rs" PaymentP.ShowEnd SubPrivate Sub cmdPrintDue_Click()Call databaseconnectionDim gymName As StringDim gymAddress As StringDim countM As Integer 81
    • Dim recM As ADODB.RecordsetSet recM = New ADODB.RecordsetrecM.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimistic If Not recM.EOF Then recM.MoveFirst gymName = recM.Fields(0) gymAddress = recM.Fields(1) Else gymName = "" gymAddress = "" End IfrecM.ClosecountM = countOutdatedMembersSet recM = getOutdatedMembersSet DueMembersP.DataSource = recMDueMembersP.DataMember = recM.DataMemberDueMembersP.Sections("Section4").Controls("lblGymName").Caption = gymNameDueMembersP.Sections("Section4").Controls("lblAddress").Caption = gymAddressDueMembersP.Sections("Section3").Controls("lblCount").Caption = countMDueMembersP.ShowEnd SubPrivate Sub cmdPrintReceipt_Click() If billNo = -1 Then MsgBox "Choose a bill to print!", vbOKOnly + vbExclamation, "Notification" Exit Sub End If Receipt Print page generation *************************************************** Dim zgname As String Dim zaddress As String Dim zphone As String Dim zmname As String Dim zpType As String Dim zdueDate As String Dim zdate As String Dim zBillNo As Integer Dim zId As Integer Dim zAmt As Double Dim rsTemp As ADODB.Recordset Set rsTemp = New ADODB.Recordset rsTemp.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimistic If Not rsTemp.EOF Then rsTemp.MoveFirst End If Do Until rsTemp.EOF zgname = rsTemp.Fields(0) zaddress = rsTemp.Fields(1) zphone = rsTemp.Fields(3) 82
    • Exit Do Loop rsTemp.Close rsTemp.Open "select * from paymentTransaction where billno=" & billNo, con, adOpenDynamic,adLockOptimistic If Not rsTemp.RecordCount = 0 Then If Not rsTemp.EOF Then rsTemp.MoveFirst End If zBillNo = Val(rsTemp.Fields(3)) zdate = rsTemp.Fields(1) zAmt = Val(rsTemp.Fields(2)) zId = Val(rsTemp.Fields(0)) Else zBillNo = 0 zdate = "" zAmt = 0 zId = 0 End If rsTemp.Close rsTemp.Open "Select * From members where memberId=" & zId, con, adOpenDynamic,adLockOptimistic If Not rsTemp.RecordCount = 0 Then rsTemp.MoveFirst zmname = rsTemp.Fields(1) zdueDate = rsTemp.Fields("dueDate") Else zmname = "" zdueDate = "" End If rsTemp.Close rsTemp.Open "Select * from membershipPlan where amt=" & zAmt, con, adOpenDynamic,adLockOptimistic If Not rsTemp.RecordCount = 0 Then zpType = rsTemp.Fields("planName") Else zpType = "" End If rsTemp.Close Dim rsT As ADODB.Recordset Set rsT = New ADODB.Recordset rsT.Open "select * from gymDetail", con, adOpenDynamic, adLockOptimistic Set ReceiptP.DataSource = rsT ReceiptP.DataMember = rsT.DataMember ReceiptP.Sections("Section0").Controls("lblGymName").Caption = zgname ReceiptP.Sections("Section0").Controls("lblAddress").Caption = zaddress ReceiptP.Sections("Section0").Controls("lblPhone").Caption = zphone 83
    • ReceiptP.Sections("Section1").Controls("lblBillNo").Caption = "Receipt No : " & zBillNo ReceiptP.Sections("Section2").Controls("lblMemberName").Caption = zmname ReceiptP.Sections("Section2").Controls("lblPlanName").Caption = zpType ReceiptP.Sections("Section2").Controls("lblDueDate").Caption = zdueDate ReceiptP.Sections("Section2").Controls("lblAmtPaid").Caption = zAmt ReceiptP.Sections("Section2").Controls("lblMemberId").Caption = zId ReceiptP.Sections("Section1").Controls("lblReceiptDate").Caption = "Receipt Date : " & zdate ReceiptP.Show ENDING RECEIPT GENERATION******************************************************End SubPrivate Sub cmdProfile_Click() If memberId = -1 Then MsgBox "Select a member ID to see the profile!", vbOKOnly + vbExclamation, "Warning" Exit Sub End If frmMember.loadType = 2 frmMember.memberId = memberId frmMember.ShowEnd SubPrivate Sub cmdShowProfile_Click() If memberId1 = -1 Then MsgBox "Select a member ID to see the profile!", vbOKOnly + vbExclamation, "Warning" Exit Sub End If frmMember.loadType = 2 frmMember.memberId = memberId1 frmMember.ShowEnd SubPrivate Sub combIncome_Click() Dim arr() As String arr = Split(combIncome.Text, " ") lblIncomeByRange.Caption = combIncome.Text & " Income : " & getIncomeByRange(Val(arr(1)))End SubPrivate Sub dtFrom_Change() paymentTransaction.ClearFields paymentTransactionDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &App.Path & "Datasgsdata.mdb;Persist Security Info=False" paymentTransactionDC.CommandType = adCmdText paymentTransactionDC.RecordSource = "SELECT * FROM paymentTransaction where date between#" & dtFrom.Value & "# and #" & dtTo.Value & "#" paymentQuery = "SELECT * FROM paymentTransaction where date between #" & dtFrom.Value & "#and #" & dtTo.Value & "#" Set paymentTransaction.DataSource = paymentTransactionDC paymentTransactionDC.Refresh paymentTransaction.Refresh 84
    • End SubPrivate Sub dtTo_Change() paymentTransaction.ClearFields paymentTransactionDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &App.Path & "Datasgsdata.mdb;Persist Security Info=False" paymentTransactionDC.CommandType = adCmdText paymentTransactionDC.RecordSource = "SELECT * FROM paymentTransaction where date between#" & dtFrom.Value & "# and #" & dtTo.Value & "#" paymentQuery = "SELECT * FROM paymentTransaction where date between #" & dtFrom.Value & "#and #" & dtTo.Value & "#" Set paymentTransaction.DataSource = paymentTransactionDC paymentTransactionDC.Refresh paymentTransaction.RefreshEnd SubPrivate Sub Form_Load()memberId = -1memberId1 = -1billNo = -1paymentQuery = "select * from paymentTransaction"combIncome.AddItem "Last 1 month"combIncome.AddItem "Last 2 month"combIncome.AddItem "Last 3 month"combIncome.AddItem "Last 4 month"combIncome.AddItem "Last 5 month"combIncome.AddItem "Last 6 month"combIncome.AddItem "Last 7 month"combIncome.AddItem "Last 8 month"combIncome.AddItem "Last 9 month"combIncome.AddItem "Last 10 month"combIncome.AddItem "Last 11 month"combIncome.AddItem "Last 12 month"combIncome.ListIndex = 0Dim arr() As Stringarr = Split(combIncome.Text, " ")Dim cMembers As IntegercMembers = countMemberslblTotalMembers.Caption = "Total Members : " & cMemberslblTotalIncome.Caption = "Total Income : " & getIncome & "rs"lblIncomeByRange.Caption = "Last Month Income : " & getIncomeByRange(Val(arr(1))) & "rs"Dim male As Integer, female As IntegerDim mperc As Double, fperc As Doublemale = countMaleMembersfemale = countFemaleMembersmperc = male / cMembers * 100fperc = female / cMembers * 100lblgenderMcount.Caption = "Male " & male & " and " & mperc & "%"lblgenderFcount.Caption = "Female " & female & " and " & fperc & "%" 85
    • paymentTransactionDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &App.Path & "Datasgsdata.mdb;Persist Security Info=False"paymentTransactionDC.CommandType = adCmdTextpaymentTransactionDC.RecordSource = "SELECT * FROM paymentTransaction"Set paymentTransaction.DataSource = paymentTransactionDCSet OutdatedMembers.DataSource = getOutdatedMembersOutdatedMembers.Columns(0).Width = 400OutdatedMembers.Columns(1).Width = 1000OutdatedMembers.Columns(2).Width = 1700paymentTransaction.Columns(1).Width = 2300End SubPrivate Sub lblCountGenderMembers_Click()End SubPrivate Sub paymentTransaction_Click() billNo = paymentTransaction.Columns(3) memberId = Val(paymentTransaction.Columns(1))End SubPrivate Sub txtSearchByBillno_Change() If txtSearchByBillno.Text = "" Then paymentTransaction.ClearFields paymentTransactionDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &App.Path & "Datasgsdata.mdb;Persist Security Info=False" paymentTransactionDC.CommandType = adCmdText paymentTransactionDC.RecordSource = "SELECT * FROM paymentTransaction" paymentQuery = "SELECT * FROM paymentTransaction" Set paymentTransaction.DataSource = paymentTransactionDC paymentTransactionDC.Refresh paymentTransaction.Refresh Exit Sub End If paymentTransaction.ClearFields paymentTransactionDC.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &App.Path & "Datasgsdata.mdb;Persist Security Info=False" paymentTransactionDC.CommandType = adCmdText paymentTransactionDC.RecordSource = "SELECT * FROM paymentTransaction where billno like " &Val(txtSearchByBillno.Text) & "%" paymentQuery = "SELECT * FROM paymentTransaction where billno like " &Val(txtSearchByBillno.Text) & "%" Set paymentTransaction.DataSource = paymentTransactionDC paymentTransactionDC.Refresh paymentTransaction.RefreshEnd SubPrivate Sub txtSearchByBillno_KeyPress(KeyAscii As Integer) If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 Then KeyAscii = 0 End If 86
    • End SubfrmSearch Form:Public loadMeasurement As BooleanPublic loadSearchNprofile As BooleanPublic loadPayment As BooleanPublic loadBodyProgress As BooleanOption ExplicitPrivate Sub cmdSelect_Click() Dim memberId As Integer Dim fname As String Dim lname As String Dim gender As Boolean rs.Open "Select * from members", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If If optRollno Then Do Until rs.EOF If rs.Fields(0) = Val(combMember.Text) Then memberId = rs.Fields(0) fname = rs.Fields(1) lname = rs.Fields(2) If rs.Fields(3) = "Male" Then gender = True Else gender = False End If Exit Do End If rs.MoveNext Loop ElseIf optFname Then Do Until rs.EOF If rs.Fields(1) = Trim(combMember.Text) Then memberId = rs.Fields(0) fname = rs.Fields(1) lname = rs.Fields(2) If rs.Fields(3) = "Male" Then gender = True Else gender = False End If Exit Do End If rs.MoveNext Loop Else 87
    • Do Until rs.EOF If rs.Fields(2) = Trim(combMember.Text) Then memberId = rs.Fields(0) fname = rs.Fields(1) lname = rs.Fields(2) If rs.Fields(3) = "Male" Then gender = True Else gender = False End If Exit Do End If rs.MoveNext LoopEnd Ifrs.Closefetching of user data finished*******************************************************************If loadBodyProgress Then frmProgress.memberId = memberId frmProgress.fname = fname frmProgress.lname = lname frmProgress.Show loadBodyProgress = False Unload MeElseIf loadMeasurement Then frmMemberMeasurement.memberId = memberId frmMemberMeasurement.Show loadMeasurement = False Unload MeElseIf loadPayment Then frmPayment.memberId = memberId frmPayment.Show loadPayment = False Unload MeElseIf loadSearchNprofile Then frmMember.loadType = 2 frmMember.memberId = memberId frmMember.Show loadSearchNprofile = False Unload MeElse MsgBox "Profile has not loaded!", vbOKOnly + vbExclamation, "Notification"End IfEnd SubPrivate Sub combMember_Change() 88
    • AutoTypeComboChange combMemberEnd SubPrivate Sub combMember_GotFocus() gstrATCDBTableName = "members" If optRollno.Value Then gstrATCDBFieldName = "memberId" ElseIf optFname.Value Then gstrATCDBFieldName = "firstname" Else gstrATCDBFieldName = "lastname" End If gblnGetAllData = False gblnDropDownOnFocus = IIf(True, True, False) AutoTypeComboGotFocus combMemberEnd SubPrivate Sub combMember_KeyDown(KeyCode As Integer, Shift As Integer)AutoTypeComboKeyDown combMember, KeyCode, ShiftEnd SubPrivate Sub combMember_KeyPress(KeyAscii As Integer)If optRollno Then If Not Chr(KeyAscii) Like "[0-9]" And KeyAscii <> 8 And KeyAscii <> 45 And KeyAscii <> 47 Then KeyAscii = 0 End IfEnd IfAutoTypeComboKeyPress Me, combMember, KeyAsciiEnd SubPrivate Sub combMember_LostFocus() AutoTypeComboLostFocus combMemberEnd SubPrivate Sub Form_Load() Call databaseconnection Call combSearchEnd SubCalculationModule Module:Public Function calculateBMIbyEnglish(weight As Double, Height As Double) Dim result As Double result = (weight / (Height * Height)) * 703 calculateBMIbyEnglish = Round(result, 2)End FunctionPublic Function calculateBMIbyMetric(weight As Double, Height As Double) Dim result As Double result = (weight / (Height * Height)) calculateBMIbyMetric = Round(result, 2)End FunctionPublic Function calculateBodyFat(gender As Boolean, weight As Double, waist As Double, wrist AsDouble, hips As Double, forearm As Double) As Double 89
    • Dim f1, f2, f3, f4, f5, lbm, bfw, result As DoubleIf gender Thenmale f1 = (weight * 1.082) + 94.42 f2 = (waist * 4.15) lbm = f1 - f2 bfw = weight - lbm result = (bfw * 100) / weight calculateBodyFat = Round(result, 2)Elsefemale f1 = (weight * 0.732) + 8.987 f2 = wrist / 3.14 f3 = waist * 0.157 f4 = hips * 0.249 f5 = forearm * 0.434 lbm = f1 + f2 - f3 - f4 + f5 bfw = weight - lbm result = (bfw * 100) / weight calculateBodyFat = Round(result, 2)End IfEnd FunctioncustomDialogModule Module :Public trigger As BooleanPublic answerYesNo As BooleanPublic counter As LongSub CenterChild(Parent As Form, Child As Form)Dim iTop As IntegerDim iLeft As IntegerIf Parent.WindowState <> vbNormal ThenExit SubElseiTop = ((Parent.Height - Child.Height) 2)iLeft = ((Parent.Width - Child.Width) 2)iLeft = ((Parent.ScaleWidth - Child.ScaleWidth) 2)Child.Move iLeft, iTopEnd IfEnd SubPublic Function helpDlg(msg As String)DialogHelp.lblBodyText = msgDialogHelp.ShowEnd FunctionPublic Function notificationDlg(msg As String) As BooleanDialogNotification.lblBodyText = msgDialogNotification.Show 90
    • notificationDlg = answerYesNoEnd FunctionFunction GetFileExtension(ByVal FileName As String) As String Dim I As Long For I = Len(FileName) To 1 Step -1 Select Case mId$(FileName, I, 1) Case "." GetFileExtension = mId$(FileName, I + 1) Exit For Case ":", "" Exit For End Select NextEnd FunctiondatabaseModule Module:Public barName As StringPublic databasePath As StringPublic con As New ADODB.ConnectionPublic rs As New ADODB.RecordsetPublic rsTemp As New ADODB.RecordsetPublic gobjCmd As ADODB.CommandPublic Sub databaseconnection()If Not con.State = adStateOpen Thencon.Provider = "Microsoft.Jet.OLEDB.4.0"con.Open App.Path & "Datasgsdata.mdb"End IfEnd SubPublic Sub disconnectdatabase()If con.State = adStateOpen Thencon.CloseEnd IfEnd SubFunction FileExists(FileName As String) As Boolean On Error GoTo ErrorHandler FileExists = (GetAttr(FileName) And vbDirectory) = 0ErrorHandler: FileExists = FalseEnd FunctionPublic Sub combSearch() Set gobjCmd = New ADODB.Command Set gobjCmd.ActiveConnection = con gobjCmd.CommandType = adCmdTextEnd SubdateTimeModule Module:Public Function CurrentDate() As String 91
    • Dim sdate As Datesdate = DateValue(Now)CurrentDate = sdateEnd FunctionPublic Function CurrentTime() As StringDim time As Datetime = TimeValue(Now)CurrentTime = timeEnd FunctionPublic Function CurrentDayToString() As StringDim day As Dateday = DatePart("w", Now)If day = 1 ThenCurrentDayToString = "Sunday"ElseIf day = 2 ThenCurrentDayToString = "Monday"ElseIf day = 3 ThenCurrentDayToString = "Tuesday"ElseIf day = 4 ThenCurrentDayToString = "Wednesday"ElseIf day = 5 ThenCurrentDayToString = "Thursday"ElseIf day = 6 ThenCurrentDayToString = "Friday"ElseIf day = 7 ThenCurrentDayToString = "Saturday"End IfEnd FunctionPublic Function splitNgetDate(datestr As String) As StringDim tempArray() As StringtempArray = Split(datestr, " ")splitNgetDate = tempArray(0)End FunctionPublic Function splitNgetTime(datestr As String) As StringDim tempArray() As StringtempArray = Split(datestr, " ")splitNgetTime = Trim(tempArray(1))End FunctionPublic Function getDay(datestr As String) As IntegerReturns trimmed day of dateSTRDim tempArray() As StringtempArray = Split(datestr, "/")getDay = tempArray(1)End FunctionPublic Function getMonth(datestr As String) As Integerreturns trimmed month of dateSTRDim tempArray() As String 92
    • tempArray = Split(datestr, "/")getMonth = tempArray(0)End FunctionPublic Function getYear(datestr As String) As Integerreturns trimmed year of dateSTRDim tempArray() As StringtempArray = Split(datestr, "/")getYear = tempArray(2)End FunctionPublic Function addMonth(baseDate As String, months As Integer) As StringDim yyyy As IntegerDim mm As IntegerDim dd As Integeryyyy = getYear(baseDate)mm = getMonth(baseDate)dd = getDay(baseDate)mm = mm + monthsIf mm > 12 Then yyyy = yyyy + (mm / 12) mm = mm Mod 12End IfaddMonth = mm & "/" & dd & "/" & yyyyEnd FunctionfullScreenModule Module:Dim isFullscreen As BooleanOption ExplicitPublic Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd TypePublic Const GWL_STYLE = (-16)Public Const WS_CAPTION = &HC00000Public Const WS_MAXIMIZEBOX = &H10000Public Const WS_MINIMIZEBOX = &H20000Public Const WS_SYSMENU = &H80000window position constantsPublic Const SWP_SHOWWINDOW = &H40Public Const SWP_HIDEWINDOW = &H80Public Const SWP_FRAMECHANGED = &H20 93
    • Public Const SWP_NOACTIVATE = &H10Public Const SWP_NOCOPYBITS = &H100Public Const SWP_NOMOVE = &H2Public Const SWP_NOOWNERZORDER = &H200Public Const SWP_NOREDRAW = &H8Public Const SWP_NOREPOSITION = SWP_NOOWNERZORDERPublic Const SWP_NOSIZE = &H1Public Const SWP_NOZORDER = &H4Public Const SWP_DRAWFRAME = SWP_FRAMECHANGEDPublic Const HWND_NOTOPMOST = -2Public Const SM_CXSCREEN = 0Public Const SM_CYSCREEN = 1Public Const HWND_TOP = 0API declarationsPublic Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long, lpRect As RECT) As LongPublic Declare Function SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter AsLong, ByVal X As Long, ByVal Y As Long, ByVal Cx As Long, ByVal Cy As Long, ByVal wFlags As Long) AsLongPublic Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long,ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long,ByVal nIndex As Long) As LongPublic Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As LongPublic dX As LongPublic dY As LongPublic dL As LongPublic dT As LongPublic Function setFullScreen(frm As Form)Dim Cx As Long Dim Cy As Long Dim RetVal As Long Record the current size and position of the window dX = frm.Width dY = frm.Height dL = frm.Left dT = frm.Top Determine if screen is already maximized. If frm.WindowState = vbMaximized Then Set window to normal size frm.WindowState = vbNormal End If Disable the view of the Title Bar ShowTitleBar False, frm Get full screen width. Cx = GetSystemMetrics(SM_CXSCREEN) Get full screen height. 94
    • Cy = GetSystemMetrics(SM_CYSCREEN) Call API to set new size of window. RetVal = SetWindowPos(frm.hWnd, HWND_TOP, 0, 0, Cx, Cy, SWP_SHOWWINDOW) isFullscreen = TrueEnd FunctionPublic Function unsetFullscreen(frm As Form)Enable the Title Bar Again ShowTitleBar True, frm Restore the earlier window size and position frm.WindowState = vbNormal frm.Width = dX frm.Height = dY frm.Left = dL frm.Top = dT frm.Refresh isFullscreen = FalseEnd FunctionPrivate Function ShowTitleBar(ByVal bState As Boolean, frm As Form) Dim lStyle As Long Dim tR As RECT On Error Resume Next get the windows position Call GetWindowRect(frm.hWnd, tR) should the titlebar style be not visible? lStyle = GetWindowLong(frm.hWnd, GWL_STYLE) If (bState) Then set the styles for the current window (if titlebar active) frm.Caption = frm.Tag If frm.ControlBox Then lStyle = lStyle Or WS_SYSMENU If frm.MaxButton Then lStyle = lStyle Or WS_MAXIMIZEBOX If frm.MinButton Then lStyle = lStyle Or WS_MINIMIZEBOX If frm.Caption <> "" Then lStyle = lStyle Or WS_CAPTION Else titlebar is invisible set the current caption to the forms tag frm.Tag = frm.Caption remove the caption (otherwise the titlebar will not hide) frm.Caption = vbNullString lStyle = lStyle And Not WS_SYSMENU lStyle = lStyle And Not WS_MAXIMIZEBOX lStyle = lStyle And Not WS_MINIMIZEBOX lStyle = lStyle And Not WS_CAPTION End If Call SetWindowLong(frm.hWnd, GWL_STYLE, lStyle) change the window style maintaining current sizes Call SetWindowPos(frm.hWnd, 0, tR.Left, tR.Top, tR.Right - tR.Left, tR.Bottom - tR.Top,SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED) 95
    • frm.Refresh fire resize code if any Call Form_ResizeEnd FunctionPrivate Sub Form_Resize()End SubautoTypeCombo ModuleOption Explicit*** NOTE: The calling form should use this set of events,*** replacing "Combo1" with the name of the combobox.Private Sub Combo1_GotFocus() AutoTypeComboGotFocus Combo1End SubPrivate Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer) AutoTypeComboKeyDown Combo1, KeyCode, ShiftEnd SubPrivate Sub Combo1_KeyPress(KeyAscii As Integer) AutoTypeComboKeyPress Me, Combo1, KeyAsciiEnd SubPrivate Sub Combo1_Change() AutoTypeComboChange Combo1End SubPrivate Sub Combo1_LostFocus() AutoTypeComboLostFocus Combo1End SubPublic gstrATCDBTableName As StringPublic gstrATCDBFieldName As StringPublic gblnGetAllData As Boolean true = get all entries, false = go by 1st letterPublic gblnDropDownOnFocus As BooleanPrivate Const CB_FINDSTRING As Long = &H14CPrivate Const CB_SHOWDROPDOWN As Long = &H14FPrivate Const LB_FINDSTRING As Long = &H18FPrivate Const CB_ERR As Long = (-1)Private Const CB_GETITEMHEIGHT As Long = &H154Private Const CB_SETDROPPEDWIDTH As Long = &H160Private Type POINTAPI X As Long Y As LongEnd TypePrivate Type RECT Left As Long Top As Long Right As Long Bottom As Long 96
    • End TypePrivate Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByValwMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function MoveWindow Lib "User32" (ByVal hWnd As Long, ByVal X As Long, ByVal Y AsLong, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As LongPrivate Declare Function ScreenToClient Lib "User32" (ByVal hWnd As Long, lpPoint As POINTAPI) AsLongPrivate Declare Function GetWindowRect Lib "User32" (ByVal hWnd As Long, lpRect As RECT) As LongPrivate gblnATCIgnoreTextChange As BooleanPrivate gblnATCTextDeleted As BooleanPrivate gintATCSelStart As IntegerPrivate gintATCSelLen As Integer---------------------------------------------------------------------------------Public Sub AutoTypeComboGotFocus(pobjCombo As ComboBox)--------------------------------------------------------------------------------- Select existing text on entry to the combo box pobjCombo.SelStart = 0 pobjCombo.SelLength = Len(pobjCombo.Text) if currently populated, drop it down If pobjCombo.ListCount > 0 And gblnDropDownOnFocus Then SendMessage pobjCombo.hWnd, CB_SHOWDROPDOWN, 1, ByVal 0& End IfEnd Sub---------------------------------------------------------------------------------Public Sub AutoTypeComboKeyDown(pobjCombo As ComboBox, _ KeyCode As Integer, _ Shift As Integer)--------------------------------------------------------------------------------- If the full text is selected and the user presses a letter or number, the selected text should be replaced If pobjCombo.SelText = pobjCombo.Text _ And ((KeyCode >= vbKeyA And KeyCode <= vbKeyZ) Or _ (KeyCode >= vbKey0 And KeyCode <= vbKey9)) _ Then pobjCombo.Text = "" gblnATCTextDeleted = False pobjCombo.Refresh Exit Sub End If If a user presses the "Delete" key, then the selected text is removed. If KeyCode = vbKeyDelete And pobjCombo.SelText <> "" Then Make sure that the text is not automatically re-entered as soon as it is deleted gblnATCIgnoreTextChange = True gintATCSelStart = pobjCombo.SelStart + 1 97
    • gintATCSelLen = pobjCombo.SelLength pobjCombo.SelText = "" KeyCode = 0 gblnATCTextDeleted = True Else gblnATCTextDeleted = False End IfEnd Sub---------------------------------------------------------------------------------Public Sub AutoTypeComboKeyPress(pobjForm As Form, _ pobjCombo As ComboBox, _ KeyAscii As Integer)--------------------------------------------------------------------------------- If a user presses the "Backspace" key, then the selected text is removed. Autosearch is not re-performed, as that would only put it straight back again. Dim objCtl As Control If Len(pobjCombo.Text) = 0 Then gblnATCIgnoreTextChange = False LoadCombo pobjCombo, IIf(gblnGetAllData, "", Chr$(KeyAscii)) If pobjCombo.ListCount > 0 Then SetDropDownHeight pobjForm, pobjCombo, IIf(pobjCombo.ListCount < 8, _ pobjCombo.ListCount, 8) End If pobjForm.Refresh On Error Resume Next For Each objCtl In pobjForm.Controls objCtl.Refresh Next End If If pobjCombo.ListCount > 0 Then SetDropDownWidth pobjCombo SendMessage pobjCombo.hWnd, CB_SHOWDROPDOWN, 1, ByVal 0& End If If KeyAscii = 8 Then gblnATCIgnoreTextChange = True If Len(pobjCombo.SelText) > 0 Then pobjCombo.SelText = "" KeyAscii = 0 End If End If if user presses enter, select the listindex If KeyAscii = 13 Then pobjCombo.ListIndex = SendMessage(pobjCombo.hwnd, _ CB_FINDSTRING, _ -1, _ ByVal CStr(pobjCombo.Text)) 98
    • End IfEnd Sub---------------------------------------------------------------------------------Public Sub AutoTypeComboChange(pobjCombo As ComboBox)--------------------------------------------------------------------------------- Dim I As Integer Dim l As Long Dim strNewText As String Check to see if a search is required. If gblnATCTextDeleted Then Exit Sub If Not gblnATCIgnoreTextChange And pobjCombo.ListCount > 0 Then l = SendMessage(pobjCombo.hWnd, _ CB_FINDSTRING, _ -1, _ ByVal CStr(pobjCombo.Text)) strNewText = pobjCombo.list(l) If Len(pobjCombo.Text) <> Len(strNewText) Then Partial match found Avoid recursively entering this event gblnATCIgnoreTextChange = True I = Len(pobjCombo.Text) Attach the full text from the list to what has already been entered. This technique preserves the case entered by the user. pobjCombo.Text = pobjCombo.Text & mId$(strNewText, I + 1) Select the text that is auto-entered pobjCombo.SelStart = I pobjCombo.SelLength = Len(mId$(strNewText, I + 1)) End If Else The IgnoreTextChange Flag is only effective for one Change event. gblnATCIgnoreTextChange = False End IfEnd Sub---------------------------------------------------------------------------------Public Sub AutoTypeComboLostFocus(pobjCombo As ComboBox)--------------------------------------------------------------------------------- On Error Resume Next If gblnATCTextDeleted Then If Len(pobjCombo.Text) > 0 Then pobjCombo.Text = Left$(pobjCombo.Text, gintATCSelStart - 1) & _ mId$(pobjCombo.Text, gintATCSelStart + gintATCSelLen) pobjCombo.AddItem pobjCombo.Text End If End IfEnd Sub 99
    • ---------------------------------------------------------------------------------Public Sub LoadCombo(pobjCombo As ComboBox, pstrLetter As String)--------------------------------------------------------------------------------- Dim objRstDropDownData As ADODB.Recordset Dim strSQL As String Dim strWhereClause As String Dim strWhereOrAnd As String If pstrLetter = "" Then strWhereClause = "" strWhereOrAnd = " WHERE " Else strWhereOrAnd = " AND " If UCase$(pstrLetter) >= "A" And UCase$(pstrLetter) <= "Z" Then strWhereClause = " WHERE " & gstrATCDBFieldName & " LIKE " & pstrLetter & "%" Else strWhereClause = " WHERE " & gstrATCDBFieldName & " LIKE [!A-Z]%" End If End If strSQL = "" strSQL = strSQL & "SELECT " & gstrATCDBFieldName strSQL = strSQL & " FROM " & gstrATCDBTableName strSQL = strSQL & strWhereClause strSQL = strSQL & strWhereOrAnd & gstrATCDBFieldName & " IS NOT NULL" strSQL = strSQL & " AND TRIM(" & gstrATCDBFieldName & ") <> " strSQL = strSQL & " ORDER BY " & gstrATCDBFieldName gobjCmd.CommandText = strSQL Set objRstDropDownData = gobjCmd.Execute With pobjCombo .clear Do Until objRstDropDownData.EOF .AddItem objRstDropDownData.Fields(gstrATCDBFieldName) objRstDropDownData.MoveNext Loop End With objRstDropDownData.Close Set objRstDropDownData = NothingEnd Sub---------------------------------------------------------------------------------Public Sub SetDropDownHeight(pobjForm As Form, _ pobjCombo As ComboBox, _ plngNumItemsToDisplay As Long)--------------------------------------------------------------------------------- Dim pt As POINTAPI Dim rc As RECT Dim lngSavedWidth As Long 100
    • Dim lngNewHeight As Long Dim lngOldScaleMode As Long Dim lngItemHeight As Long lngSavedWidth = pobjCombo.Width lngOldScaleMode = pobjForm.ScaleMode pobjForm.ScaleMode = vbPixels lngItemHeight = SendMessage(pobjCombo.hWnd, CB_GETITEMHEIGHT, 0, ByVal 0) lngNewHeight = lngItemHeight * (plngNumItemsToDisplay + 2) Call GetWindowRect(pobjCombo.hWnd, rc) pt.X = rc.Left pt.Y = rc.Top Call ScreenToClient(pobjForm.hWnd, pt) Call MoveWindow(pobjCombo.hWnd, pt.X, pt.Y, pobjCombo.Height, lngNewHeight, True) pobjForm.ScaleMode = lngOldScaleMode pobjCombo.Width = lngSavedWidthEnd Sub-----------------------------------------------------------------------------Public Sub SetDropDownWidth(mCombo As ComboBox)----------------------------------------------------------------------------- Dim RetVal As Long Dim PixelWidth As Long Dim MaxWidth As Long Dim LoopCounter As Long Dim lWidth As Long For LoopCounter = 0 To mCombo.ListCount - 1 lWidth = mCombo.Parent.TextWidth(mCombo.list(LoopCounter)) If lWidth > MaxWidth Then MaxWidth = lWidth End If Next LoopCounter MaxWidth = MaxWidth + (23 * Screen.TwipsPerPixelX) If MaxWidth > (mCombo.Width * 2) Then MaxWidth = (mCombo.Width * 2) ElseIf MaxWidth < mCombo.Width Then MaxWidth = mCombo.Width End If PixelWidth = (MaxWidth Screen.TwipsPerPixelX) RetVal = SendMessage(mCombo.hWnd, CB_SETDROPPEDWIDTH, PixelWidth, 0)End SubReportModule Module:Public Function countMembers() As IntegerDim counter As IntegerCall databaseconnectionrs.Open "select count(*) from members", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Then 101
    • rs.MoveFirstEnd IfDim n As Integern = Val(rs.Fields(0))rs.ClosecountMembers = nCall disconnectdatabaseEnd FunctionPublic Function getOutdatedMembers() As ADODB.RecordsetDim rsMember As ADODB.RecordsetSet rsMember = New ADODB.Recordset rsMember.CursorLocation = adUseClient rsMember.Fields.Append "ID", adBigInt, 20 rsMember.Fields.Append "Name", adVarChar, 100 rsMember.Fields.Append "DueDate", adDate, 100 rsMember.Fields.Append "Status", adVarChar, 100 rsMember.OpenDim list() As StringDim counter As Integercounter = 0Call databaseconnectionrs.Open "select * from members", con, adOpenDynamicIf Not rs.EOF Thenrs.MoveFirstEnd IfDim diff As LongWhile Not rs.EOF diff = DateDiff("d", Format$(rs.Fields("dueDate"), "mm/dd/yyyy"), Now) If diff >= 0 Then Outdated rsMember.AddNew rsMember.Fields(0).Value = rs.Fields(0) rsMember.Fields(1) = rs.Fields(1) rsMember.Fields(2) = rs.Fields("dueDate") rsMember.Fields(3) = "Outdated" rsMember.Update ElseIf diff >= -7 Then rsMember.AddNew rsMember.Fields(0).Value = rs.Fields(0) rsMember.Fields(1) = rs.Fields(1) rsMember.Fields(2) = rs.Fields("dueDate") rsMember.Fields(3) = Abs(diff) & " to out" rsMember.Update End If rs.MoveNextWend 102
    • rs.CloseSet getOutdatedMembers = rsMemberEnd FunctionPublic Function countOutdatedMembers() As IntegerCall databaseconnectionrs.Open "select * from members", con, adOpenDynamicIf Not rs.EOF Thenrs.MoveFirstEnd IfDim counter As IntegerWhile Not rs.EOF diff = DateDiff("d", Format$(rs.Fields("dueDate"), "mm/dd/yyyy"), Now) If diff >= 0 Then counter = counter + 1 End If rs.MoveNextWendrs.ClosecountOutdatedMembers = counterEnd FunctionPublic Function getIncome() As LongCall databaseconnectionDim income As Longincome = 0rs.Open "select * from paymentTransaction", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfDo While Not rs.EOF income = income + Val(rs.Fields(2)) rs.MoveNextLooprs.ClosegetIncome = incomeEnd FunctionPublic Function getTotalAmtPaidOf(memberId As Integer) As StringCall databaseconnectionDim income As Longincome = 0rs.Open "select * from paymentTransaction where memberId=" & memberId, con, adOpenDynamic,adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfDo While Not rs.EOF income = income + Val(rs.Fields(2)) 103
    • rs.MoveNextLooprs.ClosegetTotalAmtPaidOf = incomeEnd FunctionPublic Function getLastPaymentDateOf(memberId As Integer) As StringCall databaseconnectionDim datestr As StringDim cmdString As StringcmdString = "select * from paymentTransaction where memberId=" & memberId & " ORDER BY dateDESC"rs.Open cmdString, con, adOpenDynamic, adLockOptimisticIf Not rs.RecordCount = 0 ThenIf Not rs.EOF Thenrs.MoveFirstEnd IfDo Until rs.EOFdatestr = rs.Fields(1)Exit DoLoopEnd Ifrs.CloseIf Not datestr = "" ThengetLastPaymentDateOf = datestrElsegetLastPaymentDateOf = ""End IfEnd FunctionPublic Function sinceJoinedDateOf(memberId As Integer) As StringCall databaseconnectionDim diffDays As LongDim diffMonths As LongDim since As Stringrs.Open "select * from members", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfDo While Not rs.EOF If rs.Fields(0) = memberId Then since = splitNgetDate(rs.Fields("doj")) diffDays = DateDiff("d", Format$(splitNgetDate(rs.Fields("doj")), "mm/dd/yyyy"), Now) diffMonts = DateDiff("m", Format$(splitNgetDate(rs.Fields("doj")), "mm/dd/yyyy"), Now) Exit Do End If rs.MoveNextLooprs.Close 104
    • sinceJoinedDateOf = "Since " & since & ", " & Abs(diffMonts) & " months or " & Abs(diffDays) & " days."End FunctionPublic Function getLastMeasurementDateOf(memberId As Integer) As String Call databaseconnection Dim str As String rs.Open "SELECT * FROM progressMember WHERE memberId=" & memberId & " ORDER BY mdateDESC", con, adOpenDynamic, adLockOptimistic If Not rs.EOF Then rs.MoveFirst End If Do Until rs.EOF If Not rs.Fields("mdate") = "" Then str = rs.Fields("mdate") Else str = "" End If Exit Do Loop rs.Close getLastMeasurementDateOf = strEnd FunctionPublic Function getOverallGrowthOf(memberId As Integer) As String Call databaseconnection date is ordered and Last measurement date comes first rs.Open "SELECT * FROM progressMember WHERE memberId=" & memberId & " ORDER BY mdateDESC" If Not rs.EOF Then rs.MoveFirst End If getOverallGrowthOf = ""End FunctionPublic Function getBMIchangeOf(memberId As Integer) As Double Call databaseconnection date is ordered and Last measurement date comes first rs.Open "SELECT TOP 2 * FROM progressMember WHERE memberId=" & memberId & " ORDER BYmdate DESC" If Not rs.EOF Then rs.MoveFirst End If Dim last As Double Dim prev As Double If rs.RecordCount = 0 Then last = Val(rs.Fields("bmi")) rs.MoveNext prev = Val(rs.Fields("bmi")) Dim result As Double 105
    • result = ((last - prev) * 100) / prev If result < 0 Then getBMIchangeOf = Abs(result) Else getBMIchangeOf = (-1) * result End If Else getBMIchangeOf = 0 End If rs.CloseEnd FunctionPublic Function getBodyFatChangeOf(memberId As Integer) As Double Call databaseconnection date is ordered and Last measurement date comes first rs.Open "SELECT TOP 2 * FROM progressMember WHERE memberId=" & memberId & " ORDER BYmdate DESC" If Not rs.EOF Then rs.MoveFirst End If Dim last As Double Dim prev As Double If rs.RecordCount = 0 Then last = Val(rs.Fields("bodyfat")) rs.MoveNext prev = Val(rs.Fields("bodyfat")) Dim result As Double result = ((last - prev) * 100) / prev If result < 0 Then getBodyFatChangeOf = Abs(result) Else getBodyFatChangeOf = (-1) * result End If Else getBodyFatChangeOf = 0 End If rs.CloseEnd FunctionPublic Function getWeightChangeOf(memberId As Integer) As Double Call databaseconnection date is ordered and Last measurement date comes first rs.Open "SELECT TOP 2 * FROM progressMember WHERE memberId=" & memberId & " ORDER BYmdate DESC" If Not rs.EOF Then rs.MoveFirst End If 106
    • Dim last As Double Dim prev As Double If rs.RecordCount = 0 Then last = Val(rs.Fields("weight")) rs.MoveNext prev = Val(rs.Fields("weight")) Dim result As Double result = ((last - prev) * 100) / prev getWeightChangeOf = result Else getWeightChangeOf = 0 End If rs.CloseEnd FunctionPublic Function getDueDateOf(memberId As Integer) As StringCall databaseconnectionDim str As Stringrs.Open "select * from members", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfDo Until rs.EOF If rs.Fields(0) = memberId Then str = rs.Fields("dueDate") Exit Do End If rs.MoveNextLooprs.ClosegetDueDateOf = strEnd FunctionPublic Function showReceipt(ByRef billNo As Integer, mId As Integer, mName As String, planName AsString, amt As Double, dueDate As String, gymName As String, gymAddress As String, gymPhone AsString) As Boolean With ReceiptP Call databaseconnection Dim rsT As ADODB.Recordset Set rsT = New ADODB.Recordset rsT.Open "select * from members", con, adOpenDynamic, adLockOptimistic Set .DataSource = rsT .DataMember = rsT.DataMember .Sections("Section0").Controls("lblGymName").Caption = gymName .Sections("Section0").Controls("lblAddress").Caption = gymAddress .Sections("Section0").Controls("lblPhone").Caption = gymPhone .Sections("Section1").Controls("lblBillNo").Caption = "Receipt No : " & billNo .Sections("Section2").Controls("lblMemberName").Caption = mName 107
    • .Sections("Section2").Controls("lblPlanName").Caption = planName .Sections("Section2").Controls("lblDueDate").Caption = dueDate .Sections("Section2").Controls("lblAmtPaid").Caption = amt .Sections("Section3").Controls("lblMemberId").Caption = mId .Show End WithEnd FunctionPublic Function getIncomeByRange(last As Integer) As DoubleDim diff As IntegerDim income As DoubleCall databaseconnectionrs.Open "select * from paymentTransaction order by date", con, adOpenDynamic, adLockOptimisticIf Not rs.EOF Thenrs.MoveFirstEnd IfDo Until rs.EOF diff = DateDiff("m", Format$(rs.Fields("date"), "mm/dd/yyyy"), Now) If diff >= 0 And diff <= 3 Then income = income + rs.Fields("amt") End If rs.MoveNextLooprs.ClosegetIncomeByRange = incomeEnd FunctionPublic Function countMaleMembers() As Integer Dim Count As Integer Call databaseconnection rs.Open "select count(*) from members where gender=Male", con, adOpenDynamic,adLockOptimistic rs.MoveFirst Count = rs.Fields(0) rs.Close countMaleMembers = CountEnd FunctionPublic Function countFemaleMembers() As Integer Dim Count As Integer Call databaseconnection rs.Open "select count(*) from members where gender=Female", con, adOpenDynamic,adLockOptimistic rs.MoveFirst Count = rs.Fields(0) rs.Close countFemaleMembers = CountEnd Function 108
    • Testing 109
    • 6.1 Introduction to Testing Testing goes side by side with the implementation that is aimed at ensuring that thesystem works accurately and efficiently before the live operation is performed .The commonview of testing held by the user is process of executing a program with explicit intention ofhandling errors. The application which has been developed has to be tested to prove its validity.Testing is considered to be the least creative phase of the whole cycle of system design. In thereal sense it is the phase, which helps to bring out the creativity of the other phases, and makes itshine. The Mobile Management System was tested using the following two techniques ofapplication testing.6.1.1 White Box Testing a. By using this technique it was tested that all the individual logical paths were executed at least once and every statement in the program was executed once during testing b. All the logical decisions where tested on both their true and false sides 110
    • c. All the loops were tested with data in between the range and especially at the boundary values.6.1.2 Black Box Testing a. By the use of this technique the missing functions were identified and placed in their position. b. The errors in the interfaces were identified and corrected. c. The errors in the database access were indentified. d. This technique was along used to identify the initialization and termination errors and correct them.6.1.3 Application Testing Strategies Any application has to be tested with pre-planned strategies. As Roger Pressman states,the preparation for testing should star as soon as the design of the system star. To carry out thetesting in an efficient manner certain amount of strategic planning has to be done. Any testingstrategy must incorporate test planning, test case design, test execution and the resultant datacollection evaluation.Mobile Management was tested with the help of the following testing strategies:6.1.4 Unit Testing a. In the line of strategy the entire individuals function and modules were put to test independently b. By following this strategy all the errors in coding were identified and corrected. c. This method was applied in combination with the White Box and Black Box testing 111
    • d. Technique to find errors in each module. e. The effort of specific combination of data on system operation was tested. f. The following were the testes carried out for Graphical User Interface (GUI). g. It was seen that the pages opens properly based on related menu based commands. h. It was tested whether all relevant menus, buttons, icons and other controls are available and properly displayed. i. Are the names of the menu functions self explanatory? j. Are data input messages intelligible?6.1.5 Integration Testing This application testing strategy has two different approached namely the top downapproach in which the integration is carried out from the top level module to the bottom andthe bottom up approach in which the integration is carried out from the low level modules to thetop.The modules were tested using the bottom up approach by introducing stubs for the top –levelfunctions.This test was used to identify the errors in the interfaces, the error in passing the parametersbetween the function and to correct them.6.1.6 Validation Testing The main aim of this testing is to verify that the application system does what it wasdesigned for. The system was tested to ensure that the purpose of automating the Asha clinicwas fulfilled.Alpha testing was carried out to ensure the validity of the system 112
    • 6.1.7 System TestingThe idea of applying this testing strategy was to put the system to a series of tests to ensure thatit performed well and exactly same under all condition.The tests that the system was put were:Recovery TestingPerformance TestingThe tests were made on each form for its correctness of accepting the data and storing the datainto the respective tables in the desired form of data type. The algorithms were tested with thetest data first and then with the real data. The tests were made for all types of constraints. Thetests were done in presence of the user so that he/she is familiar with the system that is going tobe introduced. During the testing each objective of the system was tested and found to beworking correctly.6.2 MULTI-USER SYSTEMDatabase Locking Schemes: Whenever more than one person is accessing a record/s some typeof process must be use to prevent the outer users from attempting to update the same record atthe same time. This process is a locking scheme. In its simplest form, a locking scheme allowsonly one user at a time to update information in the database.Chapter 7: 113
    • Conclusion 114
    • On the area of selling revolution, online selling has been an inevitable component .Effecting computingcapabilities are therefore utilized. The availability of the required online selling at the press of a buttonis something favorable and therefore computers are used for this purpose. Thus, one way of potentialtaping is achieved.The project “Online Mobile Selling Management” after being tested was found to be achieving what ismeant for. The system is found to be minimum error free ready for implementation. Any work may notbe always perfect. There may be any error or shortcoming in this work. We have taken at care toensure that the project works perfectly.The system has been designed in such a way that it can be modified with very little effort to beachieving what a need arise in the future, as it follows the struts framework. The system has beenfound to work efficiently and effectively. Due to its higher user friendliness, other may use thesedocument as a prototype for developing similar application.The development application is tested with sample data and outputs obtained in according to therequirement. Through it could not be claimed that ours is an ideal project, it will meet the primaryrequirement of the concern. Even though I have tried my level best to make it a dream project, due totime constrains I could not add more facilities to it. So the project has to be improved by havingmodifications as and when the necessity arises in due course.The project Smart Gym System is for computerizing the work in a College.The application takes care of all the requirements of a job Department and is capable toprovide easy and effective storage of information related to Department. 115
    • Chapter 8FUTURE Enhancement 116
    • FUTURE EnhancementThe project has been developed in a very short period of time and all efforts have been taken so thatthis project is very efficient in its execution there still exists some scope of improvement in our project.The following lists some of the enhancement that can be added incorporate into the project.Application of the project can be done more attractively .Database management and stockmaintenance module can be added which helps the administrator. This project can also be modifiedinto a client server application. More security measures can be taken. 117
    • Chapter 9Bibliography 118
    • BibliographyBooks[A]Black book,2009[B]VB Complete Reference,2009Websites[a]http://yahoo.com/[e]http://www.google.com 119
    • CHAPTER 10User Manual 120
    • Screenshot• DialogToChangeWallpaper• DialogToAccessAdmin• DrDueMemberList 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128