using System.Collections.Generic;
class AssetManagementSystem
private static Dictionary<string, string> authorizedUsers = new Dictionary<string, string>();
private static Dictionary<string, (string Name, string Condition, string Status)> assets = new Dictionary<string, (string, string, string)>();
private static string managerID;
private static bool isFirstSetup = true;
Console.WriteLine("Welcome to the School Asset Management System");
AuthenticateUser(managerID);
static void SetupManager()
Console.Write("Enter Manager ID for Initial Setup: ");
managerID = Console.ReadLine();
authorizedUsers[managerID] = "Manager";
Console.WriteLine("System Setup Complete. Manager Registered.");
static void AuthenticateUser(string userID = null)
Console.Write("Enter Your ID: ");
userID = Console.ReadLine();
if (authorizedUsers.ContainsKey(userID))
Console.WriteLine($"Access granted. Welcome, {authorizedUsers[userID]}.");
Console.WriteLine("Access Denied. You are not authorized to use this system.");
static void ShowMenu(string userID)
Console.WriteLine("\nMenu:");
Console.WriteLine("1. Add New Assets");
Console.WriteLine("2. View Assets");
Console.WriteLine("3. Update Asset Condition");
Console.WriteLine("4. Update Asset Status");
Console.WriteLine("5. Remove Assets");
Console.WriteLine("6. Add New User (Manager Only)");
Console.WriteLine("7. Exit");
Console.Write("Select an option: ");
string choice = Console.ReadLine();
Console.WriteLine("Only the Manager can add new users.");
Console.WriteLine("Exiting...");
Console.WriteLine("Invalid choice. Try again.");
Console.Write("Enter New User ID: ");
string newUserID = Console.ReadLine();
Console.Write("Enter User Role (e.g., Staff, Auditor): ");
string role = Console.ReadLine();
authorizedUsers[newUserID] = role;
Console.WriteLine("User added successfully.");
static void AddMultipleAssets()
Console.Write("Enter the number of assets to add: ");
if (!int.TryParse(Console.ReadLine(), out int count) || count <= 0)
Console.WriteLine("Invalid number of assets.");
Console.Write("Enter the initial asset ID: ");
string initialID = Console.ReadLine();
Console.Write("Enter Asset Name: ");
string assetName = Console.ReadLine();
string prefix = new string(initialID.TakeWhile(char.IsLetter).ToArray());
string numericPartStr = new string(initialID.SkipWhile(char.IsLetter).ToArray());
if (!int.TryParse(numericPartStr, out int numericPart))
Console.WriteLine("Invalid initial ID format. Ensure it contains a valid number at the end.");
int digitCount = numericPartStr.Length;
Console.Write($"Enter condition for {assetName} (ID: {initialID}): ");
condition = Console.ReadLine();
Console.Write($"Enter status (Active, Dormant, Under Repair, Broken) for {assetName} (ID: {initialID}): ");
status = Console.ReadLine();
for (int i = 0; i < count; i++)
string newID = prefix + (numericPart + i).ToString($"D{digitCount}");
assets[newID] = (assetName, condition, status);
Console.WriteLine($"Asset {assetName} (ID: {newID}) with condition '{condition}' and status '{status}' added successfully.");
Console.WriteLine("No assets available.");
Console.WriteLine("\nList of Assets:");
foreach (var asset in assets)
Console.WriteLine($"ID: {asset.Key}, Name: {asset.Value.Name}, Condition: {asset.Value.Condition}, Status: {asset.Value.Status}");
static void UpdateAssetCondition()
Console.Write("Enter Asset ID to update condition: ");
string assetID = Console.ReadLine();
if (assets.ContainsKey(assetID))
Console.Write("Enter new condition: ");
string newCondition = Console.ReadLine();
var asset = assets[assetID];
assets[assetID] = (asset.Name, newCondition, asset.Status);
Console.WriteLine("Asset condition updated successfully.");
Console.WriteLine("Asset not found.");
static void UpdateAssetStatus()
Console.Write("Enter Asset ID to update status: ");
string assetID = Console.ReadLine();
if (assets.ContainsKey(assetID))
Console.Write("Enter new status (Active, Dormant, Under Repair, Broken): ");
string newStatus = Console.ReadLine();
var asset = assets[assetID];
assets[assetID] = (asset.Name, asset.Condition, newStatus);
Console.WriteLine("Asset status updated successfully.");
Console.WriteLine("Asset not found.");
static void RemoveMultipleAssets()
Console.WriteLine("Enter asset IDs to remove (Type 'done' to finish):");
List<string> assetsToRemove = new List<string>();
Console.Write("Enter Asset ID: ");
string assetID = Console.ReadLine();
if (assetID.ToLower() == "done") break;
if (assets.ContainsKey(assetID))
assetsToRemove.Add(assetID);
Console.WriteLine("Asset not found.");
foreach (var assetID in assetsToRemove)
Console.WriteLine($"Asset ID {assetID} removed successfully.");