From 4217d9239987928616d6be068f9f76e72f80f08c Mon Sep 17 00:00:00 2001 From: Reeshal_Rittoo Date: Wed, 1 Apr 2020 20:28:08 +0400 Subject: [PATCH] First commit --- CodingComp2020/.classpath | 7 + CodingComp2020/.gitignore | 1 + CodingComp2020/.project | 17 ++ .../.settings/org.eclipse.jdt.core.prefs | 11 + CodingComp2020/CoronaSystemReeshalRittoo.sql | 205 ++++++++++++++++++ CodingComp2020/manual.png | Bin 0 -> 71781 bytes .../src/CoronaSystem/CustomerBooking.java | 169 +++++++++++++++ .../src/CoronaSystem/DatabaseConnect.java | 20 ++ .../CoronaSystem/ServiceCodeGenerator.java | 22 ++ .../src/CoronaSystem/ServiceCodeVerifier.java | 152 +++++++++++++ .../src/CoronaSystem/SupermarketLogin.java | 87 ++++++++ .../CoronaSystem/SupermarketRegistration.java | 174 +++++++++++++++ CodingComp2020/src/CoronaSystem/main.java | 103 +++++++++ CodingComp2020/src/CoronaSystem/manual.java | 19 ++ 14 files changed, 987 insertions(+) create mode 100644 CodingComp2020/.classpath create mode 100644 CodingComp2020/.gitignore create mode 100644 CodingComp2020/.project create mode 100644 CodingComp2020/.settings/org.eclipse.jdt.core.prefs create mode 100644 CodingComp2020/CoronaSystemReeshalRittoo.sql create mode 100644 CodingComp2020/manual.png create mode 100644 CodingComp2020/src/CoronaSystem/CustomerBooking.java create mode 100755 CodingComp2020/src/CoronaSystem/DatabaseConnect.java create mode 100644 CodingComp2020/src/CoronaSystem/ServiceCodeGenerator.java create mode 100644 CodingComp2020/src/CoronaSystem/ServiceCodeVerifier.java create mode 100644 CodingComp2020/src/CoronaSystem/SupermarketLogin.java create mode 100644 CodingComp2020/src/CoronaSystem/SupermarketRegistration.java create mode 100644 CodingComp2020/src/CoronaSystem/main.java create mode 100644 CodingComp2020/src/CoronaSystem/manual.java diff --git a/CodingComp2020/.classpath b/CodingComp2020/.classpath new file mode 100644 index 0000000..ae78809 --- /dev/null +++ b/CodingComp2020/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CodingComp2020/.gitignore b/CodingComp2020/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/CodingComp2020/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/CodingComp2020/.project b/CodingComp2020/.project new file mode 100644 index 0000000..a6f2713 --- /dev/null +++ b/CodingComp2020/.project @@ -0,0 +1,17 @@ + + + CodingComp2020 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/CodingComp2020/.settings/org.eclipse.jdt.core.prefs b/CodingComp2020/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/CodingComp2020/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/CodingComp2020/CoronaSystemReeshalRittoo.sql b/CodingComp2020/CoronaSystemReeshalRittoo.sql new file mode 100644 index 0000000..01bc478 --- /dev/null +++ b/CodingComp2020/CoronaSystemReeshalRittoo.sql @@ -0,0 +1,205 @@ +-- phpMyAdmin SQL Dump +-- version 4.9.0.1 +-- https://www.phpmyadmin.net/ +-- +-- Host: localhost +-- Generation Time: Apr 01, 2020 at 06:24 PM +-- Server version: 10.4.6-MariaDB +-- PHP Version: 7.3.8 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET AUTOCOMMIT = 0; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `CoronaSystem` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `dailyTimeslots` +-- + +CREATE TABLE `dailyTimeslots` ( + `shopId` int(11) NOT NULL, + `slots` time NOT NULL, + `servicecode` varchar(15) NOT NULL, + `customername` varchar(30) NOT NULL DEFAULT '' +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `dailyTimeslots` +-- + +INSERT INTO `dailyTimeslots` (`shopId`, `slots`, `servicecode`, `customername`) VALUES +(6, '08:30:00', '1AXBI6', ''), +(6, '09:00:00', 'UJ4A1X', ''), +(6, '09:30:00', '6HJYBN', ''), +(6, '10:00:00', 'DVWKIW', ''), +(6, '10:30:00', 'AFKHJA', ''), +(6, '11:00:00', 'PMVPHG', ''), +(6, '11:30:00', 'D44HRD', ''), +(6, '12:00:00', 'CNXD8I', ''), +(6, '12:30:00', 'T1YB3M', ''), +(6, '13:00:00', 'HF6DH0', ''), +(6, '13:30:00', 'P4OHON', ''), +(6, '14:00:00', 'PQFYN5', ''), +(6, '14:30:00', 'KZ1BQZ', ''), +(6, '15:00:00', 'N2DB45', ''), +(6, '15:30:00', 'E04NUN', 'Hitasha'), +(6, '16:00:00', 'ZE8W2M', 'Paupiah'), +(6, '16:30:00', '21VZZJ', 'Lavnish'), +(6, '17:00:00', '6X83SJ', ''), +(7, '09:25:00', 'ZQWREP', 'Vidushi'), +(7, '09:50:00', 'S7FRYY', ''), +(7, '10:15:00', 'UA0BRP', ''), +(7, '10:40:00', 'WB1V62', ''), +(7, '11:05:00', '013ERO', ''), +(7, '11:30:00', 'NHKMY6', ''), +(7, '11:55:00', 'BZ4MWS', ''), +(7, '12:20:00', 'JAU4V1', ''), +(7, '12:45:00', 'CUVOBP', 'Sadia'), +(7, '13:10:00', 'GB3WD5', ''), +(7, '13:35:00', 'I4O34H', ''), +(7, '14:00:00', 'RYQ2NI', ''), +(7, '14:25:00', 'TLLNZL', ''), +(7, '14:50:00', 'KQ7NWL', ''), +(7, '15:15:00', 'ZTY51H', ''), +(7, '15:40:00', 'PPZ5T2', 'Shakira'), +(7, '16:05:00', '53AS3W', ''), +(7, '16:30:00', 'S14XFB', 'Tashil'), +(7, '16:55:00', 'BBXIRL', 'Ria'), +(7, '17:20:00', '5PZO7A', ''), +(8, '09:45:00', 'VKRBUB', ''), +(8, '10:00:00', 'MM1QXV', ''), +(8, '10:15:00', 'VQ5X37', ''), +(8, '10:30:00', 'OXDCHV', ''), +(8, '10:45:00', 'G5EFKQ', 'Boosun'), +(8, '11:00:00', '3P01NB', ''), +(8, '11:15:00', 'H3G1QO', ''), +(8, '11:30:00', 'WWP2O5', ''), +(8, '11:45:00', 'GDUU0W', ''), +(8, '12:00:00', '876UNY', ''), +(8, '12:15:00', 'RJMHTX', ''), +(8, '12:30:00', 'M8AR05', ''), +(8, '12:45:00', 'H75B8W', ''), +(8, '13:00:00', 'QK3N81', ''), +(8, '13:15:00', '41X7DN', 'hena'), +(8, '13:30:00', '2TJY1C', 'YOYO'), +(8, '13:45:00', 'FKDQB8', ''), +(8, '14:00:00', '8TWA66', ''), +(8, '14:15:00', 'CEGF23', 'reeshal'), +(8, '14:30:00', '8PJ4VQ', ''), +(9, '06:35:00', 'GZ9S37', ''), +(9, '07:10:00', '07LI7M', ''), +(9, '07:45:00', 'OIGP81', ''), +(9, '08:20:00', '4G0BYX', ''), +(9, '08:55:00', 'QCBATB', ''), +(9, '09:30:00', 'E7NDA1', ''), +(9, '10:05:00', 'FKRG2O', ''), +(9, '10:40:00', '0XYQ1W', ''), +(9, '11:15:00', '5QIJY6', ''), +(9, '11:50:00', 'KU9NB9', ''), +(9, '12:25:00', 'DT1MLZ', ''), +(9, '13:00:00', 'DPLQPO', ''), +(9, '13:35:00', 'MLD5H7', ''), +(9, '14:10:00', '8KH8OK', ''), +(9, '14:45:00', '56OBNO', ''), +(9, '15:20:00', '205TWY', 'Yadhav'), +(9, '15:55:00', 'NBN8R5', ''), +(9, '16:30:00', 'ZHRIXD', ''), +(9, '17:05:00', '6SEAEK', ''), +(9, '17:40:00', 'IQ7K11', ''), +(10, '10:25:00', 'S11XM2', ''), +(10, '10:50:00', 'TUHG9O', ''), +(10, '11:15:00', 'Y089BB', ''), +(10, '11:40:00', 'OZ91T9', ''), +(10, '12:05:00', 'B4J4PH', ''), +(10, '12:30:00', 'NK2ZEZ', ''), +(10, '12:55:00', '1ID5NK', ''), +(10, '13:20:00', 'LYJF4C', ''), +(10, '13:45:00', '3LSBLA', ''), +(10, '14:10:00', '0F0GNP', ''), +(10, '14:35:00', 'KOY51N', ''), +(10, '15:00:00', 'YM101P', ''), +(10, '15:25:00', 'FYPX3U', ''), +(10, '15:50:00', 'P23XDX', ''), +(10, '16:15:00', '0A2E53', ''), +(10, '16:40:00', '7AXL1D', ''), +(10, '17:05:00', 'SBGBS7', ''), +(10, '17:30:00', 'Z9ZTNL', ''), +(10, '17:55:00', 'F4OMR4', ''), +(10, '18:20:00', '254PVV', ''), +(10, '18:45:00', 'D5N15Z', ''), +(11, '09:50:00', 'TDPW62', ''), +(11, '10:40:00', '9K56QL', ''), +(11, '11:30:00', '2KC6CB', ''), +(11, '12:20:00', '9SCB0T', ''), +(11, '13:10:00', 'K1PSEC', ''), +(11, '14:00:00', 'VPEFOF', ''), +(11, '14:50:00', 'OXK32S', ''), +(11, '15:40:00', 'SITHQS', ''), +(11, '16:30:00', 'A8BYJD', ''), +(11, '17:20:00', 'AVX4D9', ''); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `Supermarket` +-- + +CREATE TABLE `Supermarket` ( + `shopName` varchar(30) NOT NULL, + `shopAddress` varchar(50) NOT NULL, + `shopRSA` double NOT NULL, + `opening` time NOT NULL, + `closing` time NOT NULL, + `serviceTime` int(11) NOT NULL, + `shopId` int(11) NOT NULL, + `password` varchar(30) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `Supermarket` +-- + +INSERT INTO `Supermarket` (`shopName`, `shopAddress`, `shopRSA`, `opening`, `closing`, `serviceTime`, `shopId`, `password`) VALUES +('Dreamprice', 'Souillac', 9000, '08:00:00', '17:00:00', 30, 6, 'reeshal18'), +('Winners', 'Curepipe', 12000, '09:00:00', '17:30:00', 25, 7, 'reeshal18'), +('Intermart', 'Ebene', 12000, '09:30:00', '14:30:00', 15, 8, 'reeshal18'), +('Lolo', 'Morcellement Andre', 9800, '06:00:00', '18:00:00', 35, 9, 'reeshal18'), +('Shoprite', 'Trainon', 4560, '10:00:00', '19:00:00', 25, 10, 'reeshal18'), +('NewShop', 'Souillac', 450, '09:00:00', '18:00:00', 50, 11, 'reeshal17'); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `Supermarket` +-- +ALTER TABLE `Supermarket` + ADD PRIMARY KEY (`shopId`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `Supermarket` +-- +ALTER TABLE `Supermarket` + MODIFY `shopId` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=12; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/CodingComp2020/manual.png b/CodingComp2020/manual.png new file mode 100644 index 0000000000000000000000000000000000000000..0b811a5b80593694c1e4031bb39f37efa7f1275f GIT binary patch literal 71781 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 literal 0 HcmV?d00001 diff --git a/CodingComp2020/src/CoronaSystem/CustomerBooking.java b/CodingComp2020/src/CoronaSystem/CustomerBooking.java new file mode 100644 index 0000000..8b306dc --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/CustomerBooking.java @@ -0,0 +1,169 @@ +package CoronaSystem; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; + +public class CustomerBooking extends JPanel{ + JComboBox shopjc = new JComboBox(); + JComboBox timeslotjc = new JComboBox(); + JLabel lblshop, lblslot, lblcode, lblname, lblnote; + JTextField txtcode, txtname; + JButton submit; + JPanel a,b,c,d; + + String timeslots,servicecode, shopname; + int shopid; + ArrayList timeslotslist = new ArrayList(); + ArrayList servicecodelist = new ArrayList(); + ArrayList shopnamelist = new ArrayList(); + ArrayList shopidlist = new ArrayList(); + + Connection conn= DatabaseConnect.getConnection(); + + public CustomerBooking() { + setVisible(true); + setSize(500,500); + setLayout(new FlowLayout()); + positioning(); + actionEvent(); + } + + public void positioning() { + a=new JPanel(); + b=new JPanel(); + c=new JPanel(); + d=new JPanel(); + a.setLayout(new GridLayout(1,2,20,20)); + b.setLayout(new GridLayout(1,2,20,20)); + c.setLayout(new GridLayout(2,2,20,20)); + d.setLayout(new FlowLayout(FlowLayout.CENTER)); + lblshop= new JLabel("Choose a shop/supermarket"); + lblslot= new JLabel("Choose a timeslot"); + lblcode= new JLabel("Your Service Code"); + lblname= new JLabel("Insert Your Full Name"); + lblnote= new JLabel("You are requested to present your service code at the shop/supermarket"); + txtcode= new JTextField(); + txtcode.setPreferredSize(new Dimension(175,30)); + txtcode.setEditable(false); + txtname= new JTextField(); + submit=new JButton("Book"); + submit.setPreferredSize(new Dimension(200,50)); + a.add(lblshop); + a.add(shopjc); + b.add(lblslot); + b.add(timeslotjc); + c.add(lblcode); + c.add(txtcode); + c.add(lblname); + c.add(txtname); + d.add(submit); + + add(a); + add(b); + add(c); + add(d); + add(lblnote); + } + + public void actionEvent(){ + try { + Statement stt = conn.createStatement(); + stt.execute("SELECT shopName,shopId FROM Supermarket"); + ResultSet rs = stt.getResultSet(); + int i =0; + + if( rs != null) { + while(rs.next()) { + shopname=rs.getString("shopName"); + shopnamelist.add(shopname); + shopid=rs.getInt("shopId"); + shopidlist.add(shopid); + + shopjc.addItem(shopnamelist.get(i)); //adding type to the JtextField + + i++; + } + shopjc.setSelectedIndex(-1); + } + + shopjc.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent ie) { + int typeindex=shopjc.getSelectedIndex(); + int currentshopid= shopidlist.get(typeindex); + + //JOptionPane.showMessageDialog(null, typeindex); + String timeslotsql="SELECT slots, servicecode " + + "FROM dailyTimeslots WHERE customername ='' AND shopId="+currentshopid; + try { + stt.execute(timeslotsql); + ResultSet rs2 = stt.getResultSet(); + int j=0; + if( rs2 != null) { + while(rs2.next()) { + timeslots=rs2.getString("slots"); + timeslotslist.add(timeslots); + servicecode=rs2.getString("servicecode"); + servicecodelist.add(servicecode); + timeslotjc.addItem(timeslotslist.get(j)); //adding type to the JtextField + j++; + } + timeslotjc.setSelectedIndex(0); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + }); + + timeslotjc.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent ie) { + int typeindex=timeslotjc.getSelectedIndex(); + txtcode.setText(servicecodelist.get(typeindex)); + } + }); + + submit.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(txtname.getText().equals("")) + JOptionPane.showMessageDialog(null, "Input Your Name"); + else { + String updateslot="UPDATE dailyTimeslots SET customername=? WHERE servicecode=?"; + try { + PreparedStatement prep = conn.prepareStatement(updateslot); + prep.setString(1, txtname.getText()); + prep.setString(2, txtcode.getText()); + prep.execute(); + JOptionPane.showMessageDialog(null, "Time Booked:"+timeslotslist.get(timeslotjc.getSelectedIndex())+". Service code:"+txtcode.getText()); + txtname.setText(""); + txtcode.setText(""); + shopjc.setSelectedIndex(0); + timeslotjc.setSelectedIndex(0); + main.frameSplit.setRightComponent(new CustomerBooking()); + + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + + } + }); + + }catch(Exception e1) { + e1.printStackTrace(); + JOptionPane.showMessageDialog(null,e1.toString(),"FATAL ERROR!",JOptionPane.PLAIN_MESSAGE); + } + } + +// public static void main(String[] args) { +// CustomerBooking a= new CustomerBooking(); +// } +} diff --git a/CodingComp2020/src/CoronaSystem/DatabaseConnect.java b/CodingComp2020/src/CoronaSystem/DatabaseConnect.java new file mode 100755 index 0000000..6512f72 --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/DatabaseConnect.java @@ -0,0 +1,20 @@ +package CoronaSystem; +import java.sql.*; +import javax.swing.JOptionPane; +public class DatabaseConnect { + Connection conn=null; + + public static Connection getConnection() { + String username="root"; + String password=""; + try { + Class.forName("com.mysql.cj.jdbc.Driver").newInstance(); + Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/CoronaSystem",username,password); + return conn; + } + catch(Exception e) { + JOptionPane.showMessageDialog(null, "Database Conncetion Problem."); + } + return null; + } +} diff --git a/CodingComp2020/src/CoronaSystem/ServiceCodeGenerator.java b/CodingComp2020/src/CoronaSystem/ServiceCodeGenerator.java new file mode 100644 index 0000000..eb1a2e8 --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/ServiceCodeGenerator.java @@ -0,0 +1,22 @@ +package CoronaSystem; + +import java.security.SecureRandom; + +public class ServiceCodeGenerator { + + public static String generateServiceCode(){ + int len=6; + + // ASCII range - alphanumeric (0-9, s A-Z) + final String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + SecureRandom random = new SecureRandom(); + StringBuilder sb = new StringBuilder(); + // each iteration of loop choose a character randomly from the given ASCII range + // and append it to StringBuilder instance + for (int i = 0; i < len; i++) { + int randomIndex = random.nextInt(chars.length()); + sb.append(chars.charAt(randomIndex)); + } + return sb.toString(); + } +} diff --git a/CodingComp2020/src/CoronaSystem/ServiceCodeVerifier.java b/CodingComp2020/src/CoronaSystem/ServiceCodeVerifier.java new file mode 100644 index 0000000..65dda82 --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/ServiceCodeVerifier.java @@ -0,0 +1,152 @@ +package CoronaSystem; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import javax.swing.*; +import javax.swing.border.Border; + +public class ServiceCodeVerifier extends JFrame{ + JLabel lblusername, lblcode, lbltimeslot, lblname, lblqueue; + JTextField txtcode, txttimeslot, txtname; + JButton verify, logout; + Connection conn= DatabaseConnect.getConnection(); + JPanel a,b,c,d,e, container; + public ServiceCodeVerifier() { + setLayout(new BorderLayout()); + setVisible(true); + setSize(800,500); + positioning(); + getQueue(); + } + + public void positioning() { + lblusername= new JLabel(SupermarketRegistration.username); + String info=": Max number of people who can queue in your premises:"+SupermarketRegistration.lengthofQueue; + lblqueue= new JLabel(info); + lblcode= new JLabel("Enter a Service Code"); + lbltimeslot= new JLabel("Timeslot"); + lblname= new JLabel("Customer Name"); + txtcode= new JTextField(15); + txtcode.setPreferredSize(new Dimension(200,40)); + txttimeslot= new JTextField(15); + txttimeslot.setPreferredSize(new Dimension(200,40)); + txtname= new JTextField(15); + txtname.setPreferredSize(new Dimension(200,40)); + txttimeslot.setEditable(false); + txtname.setEditable(false); + verify=new JButton("Verify Code"); + logout=new JButton("Logout"); + + logout.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + SupermarketRegistration.username=""; + SupermarketRegistration.shopid=0; + dispose(); + new main(); + } + }); + + a= new JPanel(); + b= new JPanel(); + c= new JPanel(); + d= new JPanel(); + e= new JPanel(); + container= new JPanel(); + + a.setLayout(new FlowLayout(FlowLayout.RIGHT)); + a.add(lblusername); + a.add(lblqueue); + a.add(Box.createRigidArea(new Dimension(100,0))); + a.add(logout); + a.setBorder(BorderFactory.createLineBorder(Color.black)); + b.setLayout(new FlowLayout()); + c.setLayout(new FlowLayout()); + d.setLayout(new FlowLayout(FlowLayout.CENTER)); + container.setLayout(new GridLayout(4,1)); + + b.add(lblcode); + b.add(txtcode); + c.add(lbltimeslot); + c.add(txttimeslot); + d.add(lblname); + d.add(txtname); + e.add(verify); + + container.add(b); + container.add(c); + container.add(d); + container.add(e); + + add(a, BorderLayout.NORTH); + add(container, BorderLayout.CENTER); + add(Box.createRigidArea(new Dimension(200,150)),BorderLayout.SOUTH); + verify.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(txtcode.getText().equals("")) + JOptionPane.showMessageDialog(null, "Input a Service Code"); + else { + try { + String query="SELECT slots, customername FROM dailyTimeslots WHERE servicecode='"+txtcode.getText()+"' AND shopId="+SupermarketRegistration.shopid; + Statement stt = conn.createStatement(); + stt.execute(query); + ResultSet rs = stt.getResultSet(); + int flag=0; + if( rs != null) { + //JOptionPane.showMessageDialog(null, rs); + while(rs.next()) { + txttimeslot.setText(rs.getString("slots")); + if(rs.getString("customername").equals("")) { + txtname.setText("Not yet booked"); + flag=2; + } + else { + txtname.setText(rs.getString("customername")); + flag=1; + } + } + } + if(flag==0) { + txttimeslot.setText("Service code not found"); + txtname.setText("Null"); + } + flag=0; + } + catch(SQLException se) { + se.printStackTrace(); + } + } + + } + }); + } + + public void getQueue() { + try { + int length=0; + String query="SELECT shopRSA FROM Supermarket WHERE shopId="+SupermarketRegistration.shopid; + Statement stt = conn.createStatement(); + stt.execute(query); + ResultSet rs = stt.getResultSet(); + if( rs != null) { + while(rs.next()) { + length=(int)(0.25 *(rs.getFloat("shopRSA")) / 4); + } + String info=": Max number of people who can queue in your premises:"+length; + + lblqueue.setText(info); + } + + }catch(SQLException se) { + se.printStackTrace(); + } + } +// public static void main(String[] args) { +// ServiceCodeVerifier a= new ServiceCodeVerifier(); +// } +} diff --git a/CodingComp2020/src/CoronaSystem/SupermarketLogin.java b/CodingComp2020/src/CoronaSystem/SupermarketLogin.java new file mode 100644 index 0000000..9a226d8 --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/SupermarketLogin.java @@ -0,0 +1,87 @@ +package CoronaSystem; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import javax.swing.*; + +public class SupermarketLogin extends JPanel{ + JLabel lblpasswd, lblname; + JTextField txtpasswd, txtname; + JButton login; + JPanel a,b,c; + Connection conn= DatabaseConnect.getConnection(); + + public SupermarketLogin() { + setVisible(true); + setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); + positioning(); + } + + public void positioning() { + lblname=new JLabel("Supermarket Name"); + lblpasswd=new JLabel("Password"); + txtname= new JTextField(15); + txtname.setPreferredSize(new Dimension(200,40)); + txtpasswd= new JTextField(15); + txtpasswd.setPreferredSize(new Dimension(200,40)); + login= new JButton("Login"); + a= new JPanel(); + b= new JPanel(); + c= new JPanel(); + a.setLayout(new FlowLayout()); + b.setLayout(new FlowLayout()); + c.setLayout(new FlowLayout()); + a.add(lblname); + a.add(txtname); + b.add(lblpasswd); + b.add(txtpasswd); + c.add(login); + add(a); + add(b); + add(c); + + login.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(txtname.getText().equals("") || txtpasswd.getText().equals("")) + JOptionPane.showMessageDialog(null, "Input all the values"); + else { + try { + int num=0; + Statement stt = conn.createStatement(); + PreparedStatement prep = conn.prepareStatement("SELECT shopId FROM Supermarket WHERE shopname = ? and password =?"); + prep.setString(1, txtname.getText()); + prep.setString(2, txtpasswd.getText()); + ResultSet res = prep.executeQuery(); + if(res!=null) { + SupermarketRegistration.username=txtname.getText(); + + while(res.next()) { + num++; + SupermarketRegistration.shopid=res.getInt("shopId"); + } + if(num==1) { + main.frameMainMenu.dispose(); + new ServiceCodeVerifier(); + } + else if(num==0) { + JOptionPane.showMessageDialog(null,"NO ACCOUNT FOUND"); + num=0; + } + } + + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + } + }); + } + + +} diff --git a/CodingComp2020/src/CoronaSystem/SupermarketRegistration.java b/CodingComp2020/src/CoronaSystem/SupermarketRegistration.java new file mode 100644 index 0000000..05ca9d2 --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/SupermarketRegistration.java @@ -0,0 +1,174 @@ +package CoronaSystem; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.sql.Connection; +import java.sql.Date; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; + +import javax.swing.*; + +public class SupermarketRegistration extends JPanel{ + JLabel lblname, lbladdress, lblretailspace, lblopening, lblclosing, lblavgtime, lblpasswrd; + JTextField txtname, txtaddress, txtretailspace, txtopening, txtclosing, txtavgtime,txtpasswd; + JButton btnregister; + JPanel btnpanel, itemspanel; + static int shopid; + Connection conn= DatabaseConnect.getConnection(); + public static String username; + public static int lengthofQueue; + + public SupermarketRegistration() { + setVisible(true); + setLayout(new FlowLayout()); + positioning(); + } + + public void positioning() { + itemspanel= new JPanel(); + itemspanel.setLayout(new GridLayout(7,2,20,20)); + + lblname= new JLabel("Shop Name"); + lbladdress= new JLabel("Shop Address"); + lblretailspace= new JLabel("Retail Space Area(m^2)"); + lblopening= new JLabel("Opening Time (hh:mm)"); + lblclosing= new JLabel("Closing Time (hh:mm)"); + lblavgtime= new JLabel("Average Service Time (min)"); + lblpasswrd= new JLabel("Password"); + + txtname= new JTextField(); + txtname.setPreferredSize(new Dimension(200,40)); + txtaddress= new JTextField(); + txtaddress.setPreferredSize(new Dimension(200,40)); + txtretailspace= new JTextField(); + txtretailspace.setPreferredSize(new Dimension(200,40)); + txtopening= new JTextField(); + txtopening.setPreferredSize(new Dimension(200,40)); + txtclosing= new JTextField(); + txtclosing.setPreferredSize(new Dimension(200,40)); + txtavgtime= new JTextField(); + txtavgtime.setPreferredSize(new Dimension(200,40)); + txtpasswd= new JTextField(); + txtpasswd.setPreferredSize(new Dimension(200,40)); + + itemspanel.add(lblname); + itemspanel.add(txtname); + itemspanel.add(lbladdress); + itemspanel.add(txtaddress); + itemspanel.add(lblretailspace); + itemspanel.add(txtretailspace); + itemspanel.add(lblopening); + itemspanel.add(txtopening); + itemspanel.add(lblclosing); + itemspanel.add(txtclosing); + itemspanel.add(lblavgtime); + itemspanel.add(txtavgtime); + itemspanel.add(lblpasswrd); + itemspanel.add(txtpasswd); + + btnpanel= new JPanel(); + btnregister= new JButton("Register"); + btnpanel.add(btnregister); + + JPanel notepnl= new JPanel(); + JLabel notelbl= new JLabel("Note: Please Read Manual First"); + notepnl.add(notelbl); + + add(itemspanel); + add(btnpanel); + add(notelbl); + + Handler h= new Handler(); + btnregister.addActionListener(h); + + } + public class Handler implements ActionListener{ + + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + if(e.getSource()==btnregister) { + + try { + Statement stt = conn.createStatement(); + String insertsql="INSERT INTO Supermarket(shopName,shopAddress,shopRSA,opening,closing,serviceTime,password) VALUES(?,?,?,?,?,?,?)"; + PreparedStatement prep = conn.prepareStatement(insertsql); + prep.setString(1, txtname.getText()); + prep.setString(2, txtaddress.getText()); + prep.setFloat(3, Float.parseFloat(txtretailspace.getText())); + prep.setString(4, txtopening.getText()); + prep.setString(5, txtclosing.getText()); + prep.setString(6, txtavgtime.getText()); + prep.setString(7, txtpasswd.getText()); + prep.execute(); + + lengthofQueue=(int)(0.25 *(Float.parseFloat(txtretailspace.getText()) / 4)); + + PreparedStatement sqlfetchshopId=conn.prepareStatement("SELECT shopId FROM Supermarket WHERE shopName=?"); + sqlfetchshopId.setString(1, txtname.getText()); + ResultSet rs = sqlfetchshopId.executeQuery(); + if( rs != null) { + while( rs.next()) { + shopid = rs.getInt("shopId"); + } + } + timeslotGenerator(); + SupermarketRegistration.username=txtname.getText(); + main.frameMainMenu.dispose(); + new ServiceCodeVerifier(); + + } catch (SQLException e1) { + e1.printStackTrace(); + } catch (ParseException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + } + + } + + public void timeslotGenerator() throws ParseException { + int interval=Integer.parseInt(txtavgtime.getText()); + String start=txtopening.getText(); + String end=txtclosing.getText(); + String current=start; + + while(true) { + SimpleDateFormat df = new SimpleDateFormat("HH:mm"); + java.util.Date d = df.parse(current); + Calendar cal = Calendar.getInstance(); + cal.setTime(d); + cal.add(Calendar.MINUTE, interval); + String newTime = df.format(cal.getTime()); + + if(df.parse(newTime).after(df.parse(end))) + break; + else { + try { + String insertsql2="INSERT INTO dailyTimeslots(shopId,slots,servicecode,customername) VALUES(?,?,?,?)"; + PreparedStatement prep = conn.prepareStatement(insertsql2); + prep.setInt(1, shopid); + prep.setString(2, newTime); + prep.setString(3, ServiceCodeGenerator.generateServiceCode()); + prep.setString(4, ""); + prep.execute(); + } + catch (SQLException e1) { + e1.printStackTrace(); + } + current=newTime; + } + } + } + +// public static void main(String[] args) throws ParseException { +// SupermarketRegistration a= new SupermarketRegistration(); +// +// } +} diff --git a/CodingComp2020/src/CoronaSystem/main.java b/CodingComp2020/src/CoronaSystem/main.java new file mode 100644 index 0000000..ed347dc --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/main.java @@ -0,0 +1,103 @@ +package CoronaSystem; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.*; + +public class main extends JFrame{ + static JFrame frameMainMenu = new JFrame("Homepage"); + static JSplitPane frameSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);//Split menu into 2 parts + static JPanel panelMainMenu = new JPanel();//left panel containing all buttons + static JPanel panelGrid = new JPanel(); //to insert the pages + JSeparator emptySpaceInMenuBar= new JSeparator(JSeparator.VERTICAL); + + public main() { + frameMainMenu.setLayout(new BorderLayout()); + frameMainMenu.setVisible(true); + frameMainMenu.setSize(700,500); + positioning(); + frameSplit.setRightComponent(new CustomerBooking()); + frameMainMenu.setLocationRelativeTo(null); + + } + + public void positioning() { + //making the side bar + panelMainMenu.setLayout(new BoxLayout(panelMainMenu, BoxLayout.Y_AXIS)); + panelMainMenu.setPreferredSize(new Dimension(150, 500)); + + JButton Login= new JButton("Login"); + JButton Register= new JButton("Register"); + JButton Book= new JButton("Book a slot"); + JButton Manual= new JButton("Read Manual"); + + Login.setAlignmentX(Component.CENTER_ALIGNMENT); + Login.setPreferredSize(new Dimension(150, 50)); + Login.setMaximumSize(new Dimension(Short.MAX_VALUE, 100)); + + Register.setAlignmentX(Component.CENTER_ALIGNMENT); + Register.setPreferredSize(new Dimension(150, 50)); + Register.setMaximumSize(new Dimension(Short.MAX_VALUE, 100)); + + Book.setAlignmentX(Component.CENTER_ALIGNMENT); + Book.setPreferredSize(new Dimension(150, 50)); + Book.setMaximumSize(new Dimension(Short.MAX_VALUE, 100)); + + Manual.setAlignmentX(Component.CENTER_ALIGNMENT); + Manual.setPreferredSize(new Dimension(150, 50)); + Manual.setMaximumSize(new Dimension(Short.MAX_VALUE, 100)); + + emptySpaceInMenuBar.setPreferredSize(new Dimension(50,200)); + panelMainMenu.add(new JSeparator(JSeparator.VERTICAL), BorderLayout.LINE_START); + panelMainMenu.add(Login); + panelMainMenu.add(new JSeparator(JSeparator.VERTICAL), BorderLayout.LINE_START); + panelMainMenu.add(Register); + panelMainMenu.add(new JSeparator(JSeparator.VERTICAL), BorderLayout.LINE_START); + panelMainMenu.add(Book); + panelMainMenu.add(new JSeparator(JSeparator.VERTICAL), BorderLayout.LINE_START); + panelMainMenu.add(Manual); + panelMainMenu.add(emptySpaceInMenuBar, BorderLayout.LINE_START); + + //add Grid Panel and splitting frame + panelGrid.setBorder(BorderFactory.createLineBorder(Color.black)); + + frameSplit.setLeftComponent(panelMainMenu); + frameSplit.setRightComponent(panelGrid); + + frameMainMenu.add(frameSplit,BorderLayout.CENTER); + + handlerMainMenu handlerMainMenu = new handlerMainMenu(); + Login.addActionListener(handlerMainMenu); + Register.addActionListener(handlerMainMenu); + Book.addActionListener(handlerMainMenu); + Manual.addActionListener(handlerMainMenu); + } + public static class handlerMainMenu implements ActionListener{ + public void actionPerformed(ActionEvent event) { + // TODO Auto-generated method stub + String action = event.getActionCommand(); + try { + if(action.equals("Login")) { + frameSplit.setRightComponent(new SupermarketLogin()); + } + if(action.equals("Register")) { + frameSplit.setRightComponent(new SupermarketRegistration()); + } + if(action.equals("Book a slot")) { + frameSplit.setRightComponent(new CustomerBooking()); + } + if(action.equals("Read Manual")) { + frameSplit.setRightComponent(new manual()); + } + } + catch(Throwable e){ + } + } + } + public static void main(String[] args) { + // TODO Auto-generated method stub + main a= new main(); + } + +} diff --git a/CodingComp2020/src/CoronaSystem/manual.java b/CodingComp2020/src/CoronaSystem/manual.java new file mode 100644 index 0000000..bbb0c38 --- /dev/null +++ b/CodingComp2020/src/CoronaSystem/manual.java @@ -0,0 +1,19 @@ +package CoronaSystem; +import java.awt.*; +import javax.swing.*; + +public class manual extends JPanel { + + public manual() { + setSize(550,500); + setVisible(true); + setLayout(new FlowLayout()); + + Image maleimage=new ImageIcon("manual.png").getImage().getScaledInstance(550,450, java.awt.Image.SCALE_SMOOTH);; + ImageIcon maleicon=new ImageIcon(maleimage); + JLabel Micon = new JLabel(maleicon); + Micon.setAlignmentX(Component.CENTER_ALIGNMENT); + add(Micon); + } + +}