-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
164 lines (134 loc) · 4.82 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package main
import (
"fmt"
"go-experiment/helper"
"sync"
"time"
)
//Package Level Variables
var applicationName = "Anmol"
var remainingTickets uint = 50
//List of maps
//var bookings = make([]map[string]string, 0)
var bookings = make([]UserData, 0)
type UserData struct {
firstName string
lastName string
email string
numberOfTickets uint
}
const applicationTickets = 50
var wg = sync.WaitGroup{}
//Here our program starts
func main() {
greetUsers()
/*for {
//Get user input
firstName, lastName, userTickets, email := getUserInput()
//Data Validation
isValidName, isValidEmail, isValidTicketNumber := helper.ValidateUserInput(firstName, lastName, email, userTickets, remainingTickets)
if isValidName && isValidEmail && isValidTicketNumber {
bookTicket(userTickets, firstName, lastName, email)
go printTicket(userTickets, firstName, lastName, email)
bookedFirstNames := getFirstNames()
fmt.Printf("The first name of all the bookings: %v\n", bookedFirstNames)
if remainingTickets == 0 {
fmt.Println("Tickets for our application is booked out. Come back in next slot")
break
}
} else {
if !isValidName {
fmt.Println("first name or last name you entered is too short!")
}
if !isValidEmail {
fmt.Println("e-mail address you entered doesn't contain @ symbol!")
}
if !isValidTicketNumber {
fmt.Println("Number of ticket you entered is either less than 0 or greater than remaining tickets!")
}
}
}*/
//Get user input
firstName, lastName, userTickets, email := getUserInput()
//Data Validation
isValidName, isValidEmail, isValidTicketNumber := helper.ValidateUserInput(firstName, lastName, email, userTickets, remainingTickets)
if isValidName && isValidEmail && isValidTicketNumber {
bookTicket(userTickets, firstName, lastName, email)
wg.Add(1)
go printTicket(userTickets, firstName, lastName, email)
bookedFirstNames := getFirstNames()
fmt.Printf("The first name of all the bookings: %v\n", bookedFirstNames)
if remainingTickets == 0 {
fmt.Println("Tickets for our application is booked out. Come back in next slot")
}
} else {
if !isValidName {
fmt.Println("first name or last name you entered is too short!")
}
if !isValidEmail {
fmt.Println("e-mail address you entered doesn't contain @ symbol!")
}
if !isValidTicketNumber {
fmt.Println("Number of ticket you entered is either less than 0 or greater than remaining tickets!")
}
}
wg.Wait()
}
func greetUsers() {
fmt.Println("Welcome to our", applicationName, "application")
fmt.Println("We have total of", applicationTickets, "tickets and", remainingTickets, "are still remaining")
fmt.Println("Get your tickets to explore our application further")
}
func getFirstNames() []string {
bookedFirstNames := []string{}
for _, booking := range bookings {
//bookedFirstNames = append(bookedFirstNames, booking["firstName"])
bookedFirstNames = append(bookedFirstNames, booking.firstName)
}
return bookedFirstNames
}
func getUserInput() (string, string, uint, string) {
var firstName string
var lastName string
var userTickets uint
var email string
//ask user for their info and also their required number of tickets
fmt.Println("Enter your first name:")
fmt.Scan(&firstName)
fmt.Println("Enter your last name:")
fmt.Scan(&lastName)
fmt.Println("Enter your email:")
fmt.Scan(&email)
fmt.Println("Enter number of tickets:")
fmt.Scan(&userTickets)
return firstName, lastName, userTickets, email
}
func bookTicket(userTickets uint, firstName string, lastName string, email string) {
remainingTickets = remainingTickets - userTickets
//Create an empty map
/*var userData = make(map[string]string)
//Insert values into map
userData["firstName"] = firstName
userData["lastName"] = lastName
userData["email"] = email
userData["numberOfTickets"] = strconv.FormatUint(uint64(userTickets), 10)*/
var userData = UserData{
firstName: firstName,
lastName: lastName,
email: email,
numberOfTickets: userTickets,
}
//Append this map to bookings list
bookings = append(bookings, userData)
fmt.Printf("List of bookings so far %v\n", bookings)
fmt.Printf("Thank you %v %v for booking %v tickets, you will receive a email confirmation on %v\n", firstName, lastName, userTickets, email)
fmt.Println("We have total of", applicationTickets, "tickets and", remainingTickets, "are still remaining")
}
func printTicket(userTickets uint, firstName string, lastName string, email string) {
time.Sleep(10 * time.Second)
fmt.Println("################################################################################")
var ticket = fmt.Sprintf("%v tickets for %v %v", userTickets, firstName, lastName)
fmt.Printf("Sending %v to Email address %v\n", ticket, email)
fmt.Println("################################################################################")
wg.Done()
}