SCM Final
SCM Final
INFORMATION SYSTEMS
FALL SEMESTER 2023-2024
FINAL DOCUMENT
DONE BY:
PAVAN V – 21MIS0044
KAUSHIK K - 21MIS0332
NARESH R – 21MIS0335
KISHORE S – 21MIS0280
SOMASEKHAR N – 21MIS0220
LOGIN MODULE:
Interface:
Existing Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/*
*/
/**
* @author KISHORE S
*/
/**
*/
public LOGIN() {
initComponents();
this.icon2.setVisible(false);
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
*/
@SuppressWarnings("unchecked")
jLabel4.setText("jLabel4");
jLabel5.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/movie/ticket/booking/bookYOURshow
blac.jpg"))); // NOI18N
jLabel5.setText("jLabel5");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel2.setLayout(null);
jButton1.setText("LOGIN");
jButton1.addActionListener(new java.awt.event.ActionListener() {
jButton1ActionPerformed(evt);
});
jPanel2.add(jButton1);
jButton3.setBorder(new
javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
jButton3.addActionListener(new java.awt.event.ActionListener() {
jButton3ActionPerformed(evt);
});
jPanel2.add(jButton3);
jLabel6.setText("jLabel6");
jPanel2.add(jLabel6);
jLabel2.setText("USERNAME");
jPanel2.add(jLabel2);
jLabel3.setText("PASSWORD");
jPanel2.add(jLabel3);
jPanel2.add(jPasswordField1);
icon1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/movie/ticket/booking/eye
icon.jpg"))); // NOI18N
icon1.addMouseListener(new java.awt.event.MouseAdapter() {
icon1MousePressed(evt);
});
jPanel2.add(icon1);
icon2.addMouseListener(new java.awt.event.MouseAdapter() {
icon2MousePressed(evt);
});
jPanel2.add(icon2);
jButton2.addActionListener(new java.awt.event.ActionListener() {
jButton2ActionPerformed(evt);
});
jPanel2.add(jButton2);
jLabel7.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/movie/ticket/booking/bookYOURshow blac.jpg")));
// NOI18N
jLabel7.setText("jLabel7");
jPanel2.add(jLabel7);
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 1079, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 505, javax.swing.GroupLayout.PREFERRED_SIZE)
);
pack();
setLocationRelativeTo(null);
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
cm.jLabel4.setText(jTextField1.getText());
try
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
PreparedStatement pst=con.prepareStatement(sql);
pst.setString(1,jTextField1.getText());
pst.setString(2,jPasswordField1.getText());
ResultSet rs=pst.executeQuery();
if(rs.next())
JOptionPane.showMessageDialog(null,"Login Successful");
setVisible(false);
cm.setVisible(true);
else
con.close();
catch(Exception e)
JOptionPane.showMessageDialog(null,e);
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
icon2.setVisible(true);
icon1.setVisible(false);
jPasswordField1.setEchoChar((char)0);
icon1.setVisible(true);
icon2.setVisible(false);
jPasswordField1.setEchoChar('*');
try
String username=jTextField1.getText();
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
PreparedStatement pst=con.prepareStatement(sql);
ResultSet rs=pst.executeQuery();
if(rs.next())
String mve=rs.getString(6);
String st=rs.getString(10);
String amt=rs.getString(14);
String dt=rs.getString(7);
String tms=rs.getString(8);
String ttre=rs.getString(9);
setVisible(false);
t.mve.setText(movie);
t.Dt.setText(date);
t.Ttre.setText(theatre);
t.Tkts.setText(seat);
t.Total.setText(amount);
t.Tms.setText(time);
t.setVisible(true);
/**
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
*/
try {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
java.util.logging.Logger.getLogger(LOGIN.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(LOGIN.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(LOGIN.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(LOGIN.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
//</editor-fold>
java.awt.EventQueue.invokeLater(new Runnable() {
new LOGIN().setVisible(true);
});
MINIMIZED CODE:
1) NAME:
a. Variable Name
Renaming variables is the process of changing the names of variables in a program's
source code to make the code more readable, maintainable, or to adhere to specific
naming conventions.
Existing Code:
String mve=rs.getString(6);
String st=rs.getString(10);
String amt=rs.getString(14);
String dt=rs.getString(7);
String tms=rs.getString(8);
String ttre=rs.getString(9);
Changed Code:
String movie = resultSet.getString(6);
String seat = resultSet.getString(10);
String amount = resultSet.getString(14);
String date = resultSet.getString(7);
String time = resultSet.getString(8);
String theatre = resultSet.getString(9);
Existing Code:
private javax.swing.JLabel icon1;
private javax.swing.JLabel icon2; private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JPanel jPanel2;
private javax.swing.JPasswordField jPasswordField1;
private javax.swing.JTextField jTextField1;
Changed Code:
private javax.swing.JButton jButtonLogin;
private javax.swing.JButton jButtonSignUp;
private javax.swing.JButton jButtonAlreadyBooked;
private javax.swing.JLabel jLabelUsername;
private javax.swing.JLabel jLabelPassword;
private javax.swing.JPanel jPanelLogin;
private javax.swing.JTextField jTextFieldUsername;
private javax.swing.JPasswordField jPasswordFieldPassword;
private javax.swing.JLabel jLabelPasswordIcon;
Existing Code:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
Changed Code:
private void SignUpActionPerformed(java.awt.event.ActionEvent evt)
Existing Code:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
Changed Code:
private void jButtonAlreadyBookedActionPerformed(java.awt.event.ActionEvent evt)
2) Comment
Certainly,we make the comments in your code simpler and more readable.we
removed unwanted comment modify some of the comment.
existing comment:
changed comment:
3)Idioms
Idioms refers to a specific way of writing code or a coding practice that is considered
best or standard for accomplishing a particular task. These coding idioms are often
well-established and widely accepted by the programming community as effective
and efficient ways to solve common problems.
Overall, the performance of this code heavily depends on the database setup, network
conditions, and the number of records in the database table. In the best case, it can be
very efficient, but in the worst case, it may experience significant delays due to
database issues. Proper error handling and database optimization are important
considerations to improve its performance.
Pseudocode:
class LOGIN {
constructor LOGIN():
// Initialize the components
initComponents()
Hide the 'icon2' label
method initComponents():
// Initialize and configure the UI components
Create JFrame and JPanel
Create JLabels, JButtons, JTextField, JPasswordField, and set their properties
Add ActionListeners and MouseListeners to buttons and icons
Set layout for the JPanel
Add components to the JPanel
method jButton1ActionPerformed(evt):
// Event handler for the LOGIN button
Create an instance of choose_movie
Set the 'jLabel4' of choose_movie with the text from 'jTextField1'
Try:
Load the MySQL JDBC driver
Establish a database connection
Create a PreparedStatement with a SQL query to check credentials
Set parameters in the PreparedStatement with values from 'jTextField1' and
'jPasswordField1'
Execute the query and get the ResultSet
If ResultSet has data:
Show a success message
Hide the current LOGIN frame
Show the choose_movie frame
Else:
Show an error message
Close the database connection
Catch any exceptions and show an error message
method jButton3ActionPerformed(evt):
// Event handler for the "NEW USER?SIGN UP" button
Hide the current LOGIN frame
Create an instance of Newuser and show it
method icon1MousePressed(evt):
// Event handler for when the eye icon is clicked (password visibility)
Show 'icon2' and hide 'icon1'
Set the echo character of 'jPasswordField1' to 0 (revealing password)
method icon2MousePressed(evt):
// Event handler for when the crossed eye icon is clicked (password visibility)
Show 'icon1' and hide 'icon2'
Set the echo character of 'jPasswordField1' to '*' (hiding password)
method jButton2ActionPerformed(evt):
// Event handler for the "ALREADY BOOKED?" button
Try:
Get the username from 'jTextField1'
Create a SQL query to retrieve user booking information
Establish a database connection
Create a PreparedStatement and execute the query
If there is a result:
Get booking information
Hide the current LOGIN frame
Create an instance of ticket and set its labels with the booking information
Show the ticket frame
Catch any SQLException and log the error
method main(args):
Create an instance
Defensive Programming Techniques:
1. Exception Handling:
- Exception handling is used throughout the code using `try-catch` blocks. It helps to catch
and handle exceptions that may occur during database operations, preventing the application
from crashing.
apply 10 technique exception handling
1. Logging the Exception:
try {
String username = user.getText();
String amt = amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/movie", "root", "");
PreparedStatement pst = con.prepareStatement("update moviefake set amount='Rs."
+ amt + "',payment_method='GPAY' where username='" + username + "'");
pst.executeUpdate();
} catch (SQLException ex) {
// Logging the exception
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE, null, ex);
}
Existing Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
*/
/**
* @author NARESH
*/
/**
*/
public choose_theatre() {
initComponents();
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
*/
@SuppressWarnings("unchecked")
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=pvr.getText();
String time=jButton5.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(pvr.getText());
ts.Time.setText(jButton5.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=pvr.getText();
String time=jButton4.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(pvr.getText());
ts.Time.setText(jButton4.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=inox.getText();
String time=jButton8.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
} catch (ClassNotFoundException ex) {
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(inox.getText());
ts.Time.setText(jButton8.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=inox.getText();
String time=jButton9.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
{
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(inox.getText());
ts.Time.setText(jButton9.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=inox.getText();
String time=jButton6.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
{
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(inox.getText());
ts.Time.setText(jButton6.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=inox.getText();
String time=jButton7.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
}
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(inox.getText());
ts.Time.setText(jButton7.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=cinepolis.getText();
String time=jButton10.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
}
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(cinepolis.getText());
ts.Time.setText(jButton10.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=cinepolis.getText();
String time=jButton11.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(cinepolis.getText());
ts.Time.setText(jButton11.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=cinepolis.getText();
String time=jButton12.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
PreparedStatement pst=con.prepareStatement("update moviefake set
theatre='"+theatre+"',time='"+time+"',date='"+selected+"' where username='"+username+"'");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(cinepolis.getText());
ts.Time.setText(jButton12.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=cinepolis.getText();
String time=jButton13.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(cinepolis.getText());
ts.Time.setText(jButton13.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=pvr.getText();
String time=jButton2.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(pvr.getText());
ts.Time.setText(jButton2.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
else
try
String username=jLabel8.getText();
String theatre=pvr.getText();
String time=jButton3.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
String selected=datebox.getSelectedItem().toString();
ts.Date.setText(selected);
ts.Movie.setText(movieName.getText());
ts.Theatre.setText(pvr.getText());
ts.Time.setText(jButton3.getText());
ts.jLabel4.setText(jLabel8.getText());
ts.setVisible(true);
setVisible(false);
cm.jLabel4.setText(jLabel8.getText());
}
private void jButton14ActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
P.Movie.setText(movieName.getText());
P.jLabel4.setText(jLabel8.getText());
P.setVisible(true);
setVisible(false);
I.Movie.setText(movieName.getText());
I.jLabel4.setText(jLabel8.getText());
I.setVisible(true);
setVisible(false);
C.Movie.setText(movieName.getText());
C.jLabel4.setText(jLabel8.getText());
C.setVisible(true);
/**
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
*/
try {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
//</editor-fold>
java.awt.EventQueue.invokeLater(new Runnable() {
new choose_theatre().setVisible(true);
});
MINIMIZED CODE:
3) NAME:
Existing Code:
jPanel1 = new javax.swing.JPanel();
Changed Code:
panel1 = new javax.swing.JPanel();
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
try
String username=jLabel8.getText();
String theatre=pvr.getText();
String time=jButton5.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
PreparedStatement pst=con.prepareStatement("update moviefake set
theatre='"+theatre+"',time='"+time+"',date='"+selected+"' where username='"+username+"'");
pst.executeUpdate();
Changed Code:
private void DATEActionPerformed(java.awt.event.ActionEvent evt) {
if(datebox.getSelectedItem()=="SELECT DATE")
id.setVisible(true);
try
String username=jLabel8.getText();
String theatre=pvr.getText();
String time=jButton5.getText();
String selected=datebox.getSelectedItem().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
Consistent indentation and brace style are essential for writing clean and readable
code. They make your code more understandable and maintainable, not only by you
but also by other developers who may work on the code.
Existing Code:
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);}
Changed Code:
catch(SQLException ex)
{
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
The best-case scenario would be when all database operations execute without any errors, and
the application runs smoothly. In this case, the time complexity of each button click is O(1)
because the database update is expected to be fast, and there are no exceptions.
Average Case:
The average-case scenario would depend on factors such as the database load, network
latency, and the server's performance. It's difficult to specify a precise time complexity, but it
is often considered to be O(1) or O(log N) for well-optimized databases. However, in
practice, it may be influenced by external factors.
Worst Case:
The worst-case scenario would be when database operations encounter errors or slow
performance. In this case, the time complexity is driven by the worst-case performance of the
database operations. For example, if there are issues with the database server, network, or
database design, the time complexity might be O(N) or even worse, where N is the number of
records in the database. If there's a significant amount of data in the database, updating all
records can be time-consuming.
Pseudocode:
Class choose_movie:
Method choose_movie():
Initialize GUI components
Call initComponents()
Method initComponents():
// Initialize the GUI components such as buttons, labels, and panels
// Set up the layout and appearance of the JFrame
Method updateMovieSelection(movie):
Try:
Get the username from jLabel4
Establish a database connection
Prepare a SQL statement to update the movie selection for the user
Set the movie and username as parameters in the SQL statement
Execute the SQL statement to update the database
Catch SQLException or ClassNotFoundException:
Log any errors
Method openChooseTheatre(movie):
Create an instance of the choose_theatre class
Set the movie name and username labels in the choose_theatre window
Display the choose_theatre window
Method main(args):
Set the look and feel for the UI
Create an instance of the choose_movie class
Display the choose_movie window
Main program:
Call the main method to start the application
Defensive Programming Techniques:
1. Exception Handling:
- Exception handling is used throughout the code using `try-catch` blocks. It helps to catch
and handle exceptions that may occur during database operations, preventing the application
from crashing.
// Database operations
Class.forName("com.mysql.jdbc.Driver");
try (Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/movie",
"root", "");
PreparedStatement pst = con.prepareStatement("update moviefake set theatre=?,
time=?, date=? where username=?")) {
5. Exception Suppression:
// No suppression applied in this example
} finally {
6. Use of Finally Block:
// Ensure resources are closed, even if an exception occurs
// Close connections, statements, etc.
}
7. Specific Exception Handling with Different Actions:
// Catch specific types of SQLException and handle differently
Existing Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
/*
*/
/**
* @author kaush
*/
/**
*/
public paymentNew() {
initComponents();
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
*/
@SuppressWarnings("unchecked")
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
amount.setText("440.20");
jRadioButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jRadioButton1MouseClicked(evt);
});
jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
jRadioButton1ActionPerformed(evt);
});
jLabel17.setIcon(new javax.swing.ImageIcon(getClass().getResource("/movie/ticket/booking/Google_Pay-
Logo.wine.png"))); // NOI18N
jLabel17.setText("jLabel17");
jRadioButton2.addActionListener(new java.awt.event.ActionListener() {
jRadioButton2ActionPerformed(evt);
});
jLabel19.setIcon(new javax.swing.ImageIcon(getClass().getResource("/movie/ticket/booking/Paytm-
Logo.wine.png"))); // NOI18N
jLabel19.setText("jLabel19");
jRadioButton3.addActionListener(new java.awt.event.ActionListener() {
jRadioButton3ActionPerformed(evt);
});
jLabel21.setIcon(new javax.swing.ImageIcon(getClass().getResource("/movie/ticket/booking/bhim-upi-
icon.png"))); // NOI18N
jLabel21.setText("jLabel21");
jRadioButton4.addActionListener(new java.awt.event.ActionListener() {
jRadioButton4ActionPerformed(evt);
});
jLabel20.setText("CREDIT/DEBIT CARD");
jLabel1.setText("ORDER SUMMARY");
jLabel22.setText("PAYMENT WINDOW");
SEAT.setText("2");
jLabel6.setText("Tickets");
jLabel7.setText("PRIME - ");
date.setText("Fri, 21 Oct,2022");
time.setText("11:30 AM");
jLabel10.setText("---------------------------------------------------------------------------------------- ");
jLabel11.setText("Sub Total");
total.setText("Rs. 381.56");
movieLabel.setText("SARDAR(Tamil)(U/A)");
jLabel13.setText("+Convenience fees");
jLabel14.setText("Rs. 58");
jLabel23.setText("jLabel23");
jButton1.addActionListener(new java.awt.event.ActionListener() {
jButton1ActionPerformed(evt);
}
});
rows.setText("jLabel2");
jLabel2.setText("Rs.");
user.setText(" ");
try
String username=user.getText();
String amt=amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
gp.DATE.setText(date.getText());
gp.TIME.setText(time.getText());
gp.THEATRE.setText(theatreName.getText());
gp.TOTAL.setText(amount.getText());
gp.ROWS.setText(rows.getText());
gp.TICKETS.setText(SEAT.getText());
gp.MOVIE.setText(movieLabel.getText());
gp.user.setText(user.getText());
gp.setVisible(true);//setVisible(false);*/
try
String username=user.getText();
String amt=amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
gp.DATE.setText(date.getText());
gp.TIME.setText(time.getText());
gp.THEATRE.setText(theatreName.getText());
gp.TOTAL.setText(amount.getText());
gp.ROWS.setText(rows.getText());
gp.TICKETS.setText(SEAT.getText());
gp.MOVIE.setText(movieLabel.getText());
gp.user.setText(user.getText());
try
String username=user.getText();
String amt=amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
gp.DATE.setText(date.getText());
gp.TIME.setText(time.getText());
gp.THEATRE.setText(theatreName.getText());
gp.TOTAL.setText(amount.getText());
gp.rows.setText(rows.getText());
gp.TICKETS.setText(SEAT.getText());
gp.MOVIE.setText(movieLabel.getText());
gp.user.setText(user.getText());
try
String username=user.getText();
String amt=amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
setVisible(false);
gp.DATE.setText(date.getText());
gp.TIME.setText(time.getText());
gp.THEATRE.setText(theatreName.getText());
gp.ROWS.setText(rows.getText());
gp.TOTAL.setText(amount.getText());
gp.TICKETS.setText(SEAT.getText());
gp.MOVIE.setText(movieLabel.getText());
gp.user.setText(user.getText());
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
p.rows.setText(rows.getText());
p.Seat.setText(SEAT.getText());
p.Time.setText(time.getText());
p.Movie.setText(movieLabel.getText());
p.Total.setText(total.getText());
p.Theatre.setText(theatreName.getText());
p.jLabel4.setText(user.getText());
p.Date.setText(date.getText());
/**
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
*/
try {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
java.util.logging.Logger.getLogger(paymentNew.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(paymentNew.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(paymentNew.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(paymentNew.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
//</editor-fold>
java.awt.EventQueue.invokeLater(new Runnable() {
new paymentNew().setVisible(true);
});
MINIMIZED CODE:
4) NAME:
Changed Code:
panel = new javax.swing.JPanel();
1.2)Function Name
Renaming function names is the process of changing the names of functions or methods in a
program's source code. Just like renaming variables, renaming function names is done to
improve code readability, maintainability, and consistency.
Existing Code:
private void jRadioButton3ActionPerformed(java.awt.event.ActionEvent evt) {
try
String username=user.getText();
String amt=amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
}
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
Changed Code:
private void PAYTMActionPerformed(java.awt.event.ActionEvent evt) {
try
String username=user.getText();
String amt=amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie","root","");
pst.executeUpdate();
catch(SQLException ex)
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE,null,ex);
Consistent indentation and brace style are essential for writing clean and readable
code. They make your code more understandable and maintainable, not only by you
but also by other developers who may work on the code.
Existing Code:
try {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}}
Changed Code:
try {
if ("Nimbus".equals(info.getName()))
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
Try
Catch SQLException
Catch ClassNotFoundException
Try
Catch SQLException
Catch ClassNotFoundException
Try
Prepare a SQL statement to update payment information with "CREDIT/DEBIT CARD" method
Catch SQLException
Catch ClassNotFoundException
Try
Catch SQLException
Catch ClassNotFoundException
1. Exception Handling:
- Exception handling is used throughout the code using `try-catch` blocks. It helps to catch
and handle exceptions that may occur during database operations, preventing the application
from crashing.
Apply 10 Techniques For Exceptional Handling
1. Logging the Exception:
try {
String username = user.getText();
String amt = amount.getText();
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/movie",
"root", "");
PreparedStatement pst = con.prepareStatement("update moviefake set amount='Rs." + amt
+ "',payment_method='GPAY' where username='" + username + "'");
pst.executeUpdate();
} catch (SQLException ex) {
// Logging the exception
Logger.getLogger(Newuser.class.getName()).log(Level.SEVERE, null, ex);
}
6. Exception Suppression:
try {
// Code block...
} catch (SQLException ex) {
// Handling SQLException
} catch (Exception ex) {
// Handling other exceptions and possibly suppressing the original exception
ex.printStackTrace(); // Suppressing the exception
}
Existing Code:
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel12.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/movie/ticket/booking/white qr.png")));
jLabel12.setText("jLabel12");
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(88, 88, 88)
.addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 219,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(189, 189, 189)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(ROWS)
.addGap(94, 94, 94)
.addComponent(Tickets)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 87,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(Date)
.addComponent(Time)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
jPanel1Layout.createSequentialGroup()
.addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 121,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(61, 61, 61)
.addComponent(Total, javax.swing.GroupLayout.PREFERRED_SIZE, 102,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 310,
javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(41, 41, 41)
.addComponent(jLabel2)
.addGap(128, 128, 128)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Movie, javax.swing.GroupLayout.PREFERRED_SIZE, 360,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Theatre))))
.addContainerGap(27, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel1Layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(219, 219, 219))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(22, 22, 22)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 36,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 77,
Short.MAX_VALUE)
.addComponent(Movie)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(Theatre, javax.swing.GroupLayout.PREFERRED_SIZE, 14,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(57, 57, 57)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel8)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 23,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Tickets)
.addComponent(ROWS))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Date)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Time)
.addGap(61, 61, 61)
.addComponent(jLabel9)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Total, javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(49, 49, 49)
.addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 196,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(51, 51, 51)
.addComponent(jButton1)
.addGap(0, 56, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(109, 109, 109)
.addComponent(jLabel2)
.addGap(0, 0, Short.MAX_VALUE))))
);
pack();
setLocationRelativeTo(null);
}// </editor-fold>
MINIMIZED CODE:
3) NAME:
Changed Code:
Panel = new javax.swing.JPanel();
headLabel = new javax.swing.JLabel();
movieLabel = new javax.swing.JLabel();
ticketCountLabel = new javax.swing.JLabel();
theatreLabel = new javax.swing.JLabel();
dateLabel = new javax.swing.JLabel();
primeLabel = new javax.swing.JLabel();
timeLabel = new javax.swing.JLabel();
separatorLabel = new javax.swing.JLabel();
amountPaidLabel = new javax.swing.JLabel();
totalAmountLabel = new javax.swing.JLabel();
qrCodeLabel = new javax.swing.JLabel();
ticketCountValueLabel = new javax.swing.JLabel();
showQrCodeLabel = new javax.swing.JLabel();
rowsLabel = new javax.swing.JLabel();
shareButton = new javax.swing.JButton();
Existing Code:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
share obj=new share();
obj.setVisible(true);// TODO add your handling code here:
}
Changed Code:
private void shareButtonActionPerformed(java.awt.event.ActionEvent evt) {
setVisible(false);
ShareWindow share = new ShareWindow();
share.setVisible(true);
}
Consistent indentation and brace style are essential for writing clean and readable
code. They make your code more understandable and maintainable, not only by you
but also by other developers who may work on the code.
Existing Code:
public void actionPerformed(java.awt.event.ActionEvent evt)
shareButtonActionPerformed(evt);
});
Changed Code:
public void actionPerformed(java.awt.event.ActionEvent evt)
{
shareButtonActionPerformed(evt);
}
});
Here are the best, average, and worst-case complexities for the provided code:
Best Case:
The best-case complexity of this code is O(1) because it represents the time complexity when the code
execution follows the optimal path with the least number of operations. In this case, it assumes that all
GUI components are efficiently created and displayed, and there are no unexpected issues or errors
during execution.
Average Case:
The average-case complexity for GUI code like this can be challenging to precisely determine. It
depends on various factors such as the complexity of the GUI layout, the number of components, and
the specific behavior of the user interface. On average, it can be considered to be between O(n) and
O(n^2), where n represents the number of GUI components. This is because the time complexity
generally scales with the number of components and their interdependencies.
Worst Case:
The worst-case complexity of this code is O(n^2) because it represents the time complexity when the
code execution faces the most unfavorable conditions. In this case, it assumes that the layout manager
and component rendering encounter their worst-case behavior, leading to a quadratic increase in the
number of operations as the number of GUI components (n) increases.
Pseudocode:
Define a GroupLayout named layout for the content pane of the frame
Set the layout of the content pane to layout
1. Exception Handling:
- Exception handling is used throughout the code using `try-catch` blocks. It helps to catch
and handle exceptions that may occur during database operations, preventing the application
from crashing.
Apply 10 Techniques For Exceptional Handling
1. Logging the Exception:
try {
// Look and feel setup code...
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
UnsupportedLookAndFeelException ex) {
// Logging the exception at different levels
java.util.logging.Logger.getLogger(Ticket.class.getName()).log(java.util.logging.Level.SEVE
RE, null, ex);
}
5. Exception Suppression:
try {
// Look and feel setup code...
} catch (ClassNotFoundException ex) {
// Handling ClassNotFoundException
// ...
} catch (InstantiationException | IllegalAccessException |
UnsupportedLookAndFeelException ex) {
// Handling other exceptions and possibly suppressing the original exception
ex.printStackTrace(); // Suppressing the exception
}
6. Use of Finally Block:
try {
// Look and feel setup code...
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
UnsupportedLookAndFeelException ex) {
// Exception handling
} finally {
// Code that always executes whether an exception occurred or not
// e.g., cleanup or resource release
}
3. Error Handling:
- The code displays error messages using `JOptionPane` to inform the user about issues or
incorrect inputs, providing a better user experience and in this module No error handling are
used.
4.Assertions:
- No assertions are used in my module.
ENHANCING SOFTWARE MAINTENANCE FOR BANK
CUSTOMER PRELIMINARY PROBLEM REPORTING
Team Members:
PAVAN V – 21MIS0044
KAUSHIK K – 21MIS0332
KISHORE S – 21MIS0280
SOMASEKHAR – 21MIS0220
NARESH R – 21MIS0354
INTRODUCTION
▪ In the world of banking, software plays a critical
role in ensuring smooth operations, customer
satisfaction, and financial security. One of the
fundamental aspects of maintaining a robust
banking software system is addressing and
resolving customer-reported problems. This case
study examines a bank's software maintenance
process, focusing on customer preliminary
problem reporting. The primary objectives are to
eliminate obvious usage errors, ascertain the
impact of the problem, identify any ready-made
workarounds, gather the required information, and
communicate effectively with the product
organization.
BACKGROUND:
▪ The bank in question operates a modern online banking
platform that serves millions of customers. This platform
includes web and mobile applications, as well as backend
systems for transaction processing and account
management. Customer satisfaction is a top priority for the
bank, and timely resolution of software issues is crucial to
maintaining high service quality.
CHALLENGES
The bank faced several challenges in its software maintenance process:
1. Eliminating Obvious Usage Errors:
Customers often reported problems that were due to their
misunderstanding or incorrect usage of the software. Distinguishing
between genuine issues and user errors was a significant challenge.
2. Ascertaining the Impact of the Problem:
It was challenging to determine the severity and impact of each
reported problem. Some issues were minor inconveniences, while others
could potentially lead to financial loss or security risks.
3. Identifying Ready-Made Workarounds:
In some cases, there were existing workarounds or temporary solutions
that could be communicated to customers to minimize disruption while the
development team worked on a permanent fix. These workarounds were
not always easy to identify.
4. Gathering Required Information:
To effectively address software issues, the bank needed
comprehensive information from customers, including error
messages, device details, and transaction history. Gathering
this information efficiently was a key concern.
5. Communicating with the Product Organization:
Effective communication between the customer support
team and the software development and quality assurance
teams was essential to ensure that problems were addressed
promptly and effectively.
SOLUTIONS:
The bank implemented the following solutions to improve its software
maintenance process:
1. Customer Education:
The bank developed user-friendly resources, including FAQs, video tutorials,
and tooltips, to help customers better understand and use the software correctly.
This reduced the number of reported issues related to user errors.
2. Issue Severity Assessment:
A systematic process was established to categorize and prioritize reported
problems based on their potential impact. This allowed the bank to allocate
resources more efficiently.
3. Workaround Repository:
A database of known workarounds was created and integrated into the customer
support system. Customer service representatives could easily access and share
these solutions with customers when appropriate.
4. Information Gathering Tools:
The bank introduced a dedicated problem reporting tool that
guided customers through the process of providing essential
information. This tool ensured that all necessary details were
collected for each reported problem.
5. Effective Communication:
Cross-functional teams were established to facilitate
communication between customer support, software
development, and quality assurance. Regular meetings and
status updates were implemented to ensure that problems
were addressed promptly and that customers received timely
updates on their reported issues.
RESULTS:
The implementation of these solutions led to significant
improvements in the software maintenance process. The bank
experienced a decrease in the number of issues related to
user errors, more accurate problem severity assessments,
faster issue resolution times, and increased customer
satisfaction. By optimizing the preliminary problem reporting
process, the bank was better equipped to deliver a reliable
and secure online banking experience.
CONCLUSION:
▪ Enhancing the software maintenance process for
preliminary problem reporting in a bank is crucial for
maintaining customer satisfaction and the overall integrity of
the banking software. By addressing challenges related to
usage errors, problem severity assessment, workarounds,
information gathering, and communication, the bank was
able to improve its software maintenance efficiency and,
ultimately, provide a better banking experience
for its customers.