40 loadAdminCredentials();
42 displayWelcomeMessage();
51 if (scanf(
"%u", &choice) != 1) {
52 printf(
"Error: Invalid input.\n");
62 if (!isBloodAvailable(NULL, transactionType)) {
63 printf(
"No blood available for purchase.\n");
67 uint32_t bloodGroupId;
69 printf(
"Enter Entity Name (Hospital Code): ");
70 fgets(hospitalCode,
sizeof(hospitalCode), stdin);
71 hospitalCode[strcspn(hospitalCode,
"\n")] = 0;
72 if (containsPipe(hospitalCode)) {
73 printf(
"Error: Hospital code cannot contain a pipe character.\n");
76 if (!validateHospitalCode(hospitalCode)) {
77 printf(
"Error: Invalid hospital code.\n");
82 printf(
"Enter Blood Group ID: ");
83 scanf(
"%u", &bloodGroupId);
85 if (!isValidBloodGroup(bloodGroupId)) {
86 printf(
"Error: Invalid blood group.\n");
89 if (!isBloodAvailable(&bloodGroupId, transactionType)) {
90 printf(
"Blood %s is not available for purchase.\n", getBloodGroupById(bloodGroupId));
93 printf(
"Enter Quantity: ");
94 scanf(
"%u", &quantity);
96 if (addTransaction(transactionType, hospitalCode, bloodGroupId, quantity)) {
97 printf(
"Transaction successful for %s (%s).\n", getHospitalNameByCode(hospitalCode), hospitalCode);
99 printf(
"Error: Transaction failed.\n");
105 if (!isBloodAvailable(NULL, transactionType)) {
106 printf(
"No blood available for sale.\n");
110 uint32_t bloodGroupId;
112 printf(
"Enter Donor Name: ");
113 fgets(donorName,
sizeof(donorName), stdin);
114 donorName[strcspn(donorName,
"\n")] = 0;
115 if (containsPipe(donorName)) {
116 printf(
"Error: Donor name cannot contain a pipe character.\n");
119 displayBloodStocks();
120 printf(
"Enter Blood Group ID: ");
121 scanf(
"%u", &bloodGroupId);
123 if (!isValidBloodGroup(bloodGroupId)) {
124 printf(
"Error: Invalid blood group.\n");
127 if (!isBloodAvailable(&bloodGroupId, transactionType)) {
128 printf(
"Blood %s is not available for sale.\n", getBloodGroupById(bloodGroupId));
132 printf(
"Enter Quantity: ");
133 scanf(
"%u", &quantity);
135 if (addTransaction(transactionType, donorName, bloodGroupId, quantity)) {
136 printf(
"Transaction successful for %s.\n", donorName);
138 printf(
"Error: Transaction failed.\n");
143 displayBloodStocks();
147 printf(
"Enter Admin Username: ");
148 fgets(currentAdminUsername,
sizeof(currentAdminUsername), stdin);
149 currentAdminUsername[strcspn(currentAdminUsername,
"\n")] = 0;
150 if (!checkUsername(currentAdminUsername)) {
151 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
154 printf(
"Enter Admin Password: ");
155 getPassword(adminPassword,
sizeof(adminPassword));
157 if (validateAdmin(currentAdminUsername, adminPassword)) {
159 printf(
"Admin %s logged in successfully.\n", currentAdminUsername);
164 if (scanf(
"%u", &choice) != 1) {
165 printf(
"Error: Invalid input.\n");
176 printf(
"Enter Hospital Name: ");
177 fgets(hospitalName,
sizeof(hospitalName), stdin);
178 hospitalName[strcspn(hospitalName,
"\n")] = 0;
179 if (containsPipe(hospitalName)) {
180 printf(
"Error: Hospital name cannot contain a pipe character.\n");
183 printf(
"Enter Hospital Location: ");
184 fgets(hospitalLocation,
sizeof(hospitalLocation), stdin);
185 hospitalLocation[strcspn(hospitalLocation,
"\n")] = 0;
186 if (containsPipe(hospitalLocation)) {
187 printf(
"Error: Hospital location cannot contain a pipe character.\n");
190 char* hospitalCode = addHospital(hospitalName, hospitalLocation);
192 printf(
"Hospital %s added successfully by %s.\n", hospitalName, currentAdminUsername);
193 printf(
"Hospital Code: %s\n", hospitalCode);
195 printf(
"Error: Could not add hospital.\n");
200 displayBloodGroups();
201 uint32_t bloodGroupId;
202 uint32_t newQuantity;
203 printf(
"Enter Blood Group ID: ");
204 scanf(
"%u", &bloodGroupId);
206 if (!isValidBloodGroup(bloodGroupId)) {
207 printf(
"Error: Invalid blood group.\n");
210 if (!isBloodAvailable(&bloodGroupId,
SELL)) {
212 printf(
"Price for %s is not set.\n", getBloodGroupById(bloodGroupId));
213 printf(
"Enter New Price: ");
214 scanf(
"%f", &newPrice);
216 if (updateBloodPrice(bloodGroupId, newPrice)) {
217 printf(
"Blood price for %s updated successfully by %s.\n", getBloodGroupById(bloodGroupId), currentAdminUsername);
219 printf(
"Error: Could not update blood price.\n");
222 printf(
"Enter New Quantity: ");
223 scanf(
"%u", &newQuantity);
225 if (updateBloodQuantity(bloodGroupId, newQuantity)) {
226 printf(
"Blood quantity for %s updated successfully by %s.\n", getBloodGroupById(bloodGroupId), currentAdminUsername);
228 printf(
"Error: Could not update blood quantity.\n");
233 displayBloodGroups();
234 uint32_t bloodGroupId;
236 printf(
"Enter Blood Group ID: ");
237 scanf(
"%u", &bloodGroupId);
239 if (!isValidBloodGroup(bloodGroupId)) {
240 printf(
"Error: Invalid blood group.\n");
243 printf(
"Enter New Price: ");
244 scanf(
"%f", &newPrice);
246 if (updateBloodPrice(bloodGroupId, newPrice)) {
247 printf(
"Blood price for %s updated successfully by %s.\n", getBloodGroupById(bloodGroupId), currentAdminUsername);
249 printf(
"Error: Could not update blood price.\n");
256 printf(
"Enter Old Password: ");
257 getPassword(adminOldPassword,
sizeof(adminOldPassword));
258 printf(
"Enter New Password: ");
259 getPassword(adminNewPassword,
sizeof(adminNewPassword));
260 if (changeAdminPassword(currentAdminUsername, adminOldPassword, adminNewPassword)) {
261 printf(
"Password for %s updated successfully.\n", currentAdminUsername);
263 printf(
"Error: Could not change admin password.\n");
272 printf(
"To continue, please enter your (%s) current password: ", currentAdminUsername);
273 getPassword(currentAdminPassword,
sizeof(currentAdminPassword));
274 if (validateAdmin(currentAdminUsername, currentAdminPassword)) {
275 printf(
"Password verified successfully.\n");
277 printf(
"Error: Invalid password.\n");
280 printf(
"Enter New Admin Username: ");
281 fgets(newAdminUsername,
sizeof(newAdminUsername), stdin);
282 newAdminUsername[strcspn(newAdminUsername,
"\n")] = 0;
283 if (!checkUsername(newAdminUsername)) {
284 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
287 printf(
"Enter New Admin Password: ");
288 getPassword(newAdminPassword,
sizeof(newAdminPassword));
289 printf(
"Confirm New Admin Password: ");
290 getPassword(confirmNewAdminPassword,
sizeof(confirmNewAdminPassword));
291 if (strcmp(newAdminPassword, confirmNewAdminPassword) != 0) {
292 printf(
"Error: Passwords do not match.\n");
295 if (addAdmin(newAdminUsername, newAdminPassword, currentAdminUsername, currentAdminPassword)) {
296 printf(
"New admin %s added successfully by %s.\n", newAdminUsername, currentAdminUsername);
298 printf(
"Error: Could not add new admin.\n");
305 printf(
"To continue, please enter your (%s) current password: ", currentAdminUsername);
306 getPassword(currentAdminPassword,
sizeof(currentAdminPassword));
307 if (validateAdmin(currentAdminUsername, currentAdminPassword)) {
308 printf(
"Password verified successfully.\n");
310 printf(
"Error: Invalid password.\n");
313 printf(
"Enter Admin Username to Delete: ");
314 fgets(delAdminUsername,
sizeof(delAdminUsername), stdin);
315 delAdminUsername[strcspn(delAdminUsername,
"\n")] = 0;
316 if (!checkUsername(delAdminUsername)) {
317 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
320 if (deleteAdmin(delAdminUsername, currentAdminUsername, currentAdminPassword)) {
321 printf(
"Admin %s deleted successfully by %s.\n", delAdminUsername, currentAdminUsername);
323 printf(
"Error: Could not delete admin.\n");
330 printf(
"To continue, please enter your (%s) current password: ", currentAdminUsername);
331 getPassword(currentAdminPassword,
sizeof(currentAdminPassword));
332 if (validateAdmin(currentAdminUsername, currentAdminPassword)) {
333 printf(
"Password verified successfully.\n");
335 printf(
"Error: Invalid password.\n");
338 printf(
"Enter Hospital Code to Delete: ");
339 fgets(delHospitalCode,
sizeof(delHospitalCode), stdin);
340 delHospitalCode[strcspn(delHospitalCode,
"\n")] = 0;
341 if (containsPipe(delHospitalCode)) {
342 printf(
"Error: Hospital code cannot contain a pipe character.\n");
345 if (deleteHospital(delHospitalCode, currentAdminUsername, currentAdminPassword)) {
346 printf(
"Hospital %s deleted successfully by %s.\n", delHospitalCode, currentAdminUsername);
348 printf(
"Error: Could not delete hospital.\n");
361 displayBloodStocks();
369 printf(
"Exiting admin panel...\n");
373 printf(
"Error: Invalid option. Please try again.\n");
377 printf(
"Error: Invalid admin credentials.\n");
382 printf(
"Exiting...\n");
385 printf(
"Error: Invalid option. Please try again.\n");
Admin manager header file.
#define MAX_PASSWORD_LENGTH
Maximum password length.
#define MAX_USERNAME_LENGTH
Maximum username length.
Blood manager header file.
Hospital manager header file.
#define MAX_HOSPITAL_CODE_LENGTH
Maximum hospital code length.
#define MAX_HOSPITAL_LOCATION_LENGTH
Maximum hospital location length.
#define MAX_HOSPITAL_NAME_LENGTH
Maximum hospital name length.
Transaction manager header file.
#define MAX_TRANSACTION_NAME_LENGTH
Maximum transaction name length.
TransactionType
Transaction type enum.
void displayTransactions(void)
Display all transactions.