Group
C# Arrays, Structures and Strings
Objective
1. Implement a struct to store information for each program, including name, category, description, and version.
2. Create an array of structs to hold up to 1000 records.
3. Implement operations to add, show, update, delete, sort, and fix redundant spaces in the records.
4. Validate the input, ensuring correct formats and limits for the data.
5. Provide clear user feedback and handle errors such as invalid program numbers.
Write a C# program that can store up to 1000 records of computer programs. For each program, you must keep the following data: Name, Category, Description, Version (is a set of 3 data: version number -text-, launch month -byte- and launch year -unsigned short-).
Example C# Exercise
Show C# Code
using System;
class Program
{
// Define the struct to hold information about a program
struct ProgramRecord
{
public string Name; // Name of the program
public string Category; // Category of the program
public string Description; // Description of the program
public string VersionNumber; // Version number of the program
public byte LaunchMonth; // Launch month of the program
public ushort LaunchYear; // Launch year of the program
}
static void Main()
{
ProgramRecord[] programs = new ProgramRecord[1000]; // Array to store up to 1000 programs
int programCount = 0; // Counter to track the number of programs
while (true)
{
Console.Clear(); // Clear the console screen
// Display menu options to the user
Console.WriteLine("1 - Add New Program");
Console.WriteLine("2 - Show All Programs");
Console.WriteLine("3 - View Program Data");
Console.WriteLine("4 - Update Program Record");
Console.WriteLine("5 - Delete Program Record");
Console.WriteLine("6 - Sort Programs Alphabetically");
Console.WriteLine("7 - Fix Redundant Spaces in Names");
Console.WriteLine("X - Exit");
Console.Write("Choose an option: ");
string choice = Console.ReadLine(); // Get user choice
if (choice == "1") // Add new program
{
if (programCount >= 1000) // Check if the database is full
{
Console.WriteLine("Cannot add more programs. The database is full.");
Console.ReadKey();
continue;
}
// Getting user input for a new program
ProgramRecord newProgram;
Console.Write("Enter Program Name: ");
newProgram.Name = Console.ReadLine().Trim(); // Get the name and trim whitespace
// Validate name is not empty
while (string.IsNullOrEmpty(newProgram.Name))
{
Console.Write("Name cannot be empty. Enter Program Name: ");
newProgram.Name = Console.ReadLine().Trim(); // Re-prompt for a valid name
}
Console.Write("Enter Program Category (Max 30 characters): ");
newProgram.Category = Console.ReadLine().Trim(); // Get category and trim whitespace
// Validate category length
while (newProgram.Category.Length > 30)
{
Console.Write("Category too long. Enter Program Category (Max 30 characters): ");
newProgram.Category = Console.ReadLine().Trim(); // Re-prompt for valid category
}
Console.Write("Enter Program Description (Max 100 characters): ");
newProgram.Description = Console.ReadLine().Length > 100
? Console.ReadLine().Substring(0, 100) // Limit description length to 100 characters
: Console.ReadLine().Trim();
Console.Write("Enter Program Version Number: ");
newProgram.VersionNumber = Console.ReadLine(); // Get version number
Console.Write("Enter Program Launch Month (1-12): ");
newProgram.LaunchMonth = byte.Parse(Console.ReadLine()); // Get launch month
Console.Write("Enter Program Launch Year: ");
newProgram.LaunchYear = ushort.Parse(Console.ReadLine()); // Get launch year
programs[programCount] = newProgram; // Add the new program to the array
programCount++; // Increment the program count
Console.WriteLine("Program added successfully!");
Console.ReadKey();
}
else if (choice == "2") // Show all programs
{
if (programCount == 0) // Check if there are no programs
{
Console.WriteLine("No programs available.");
}
else
{
// Display all program names
for (int i = 0; i < programCount; i++)
{
Console.WriteLine(programs[i].Name);
}
}
Console.ReadKey();
}
else if (choice == "3") // View program data
{
Console.Write("Enter part of program name, category or description: ");
string searchText = Console.ReadLine(); // Get search input
bool found = false; // Flag to check if any program matches the search text
for (int i = 0; i < programCount; i++)
{
// Check if the program name, category, or description contains the search text
if (programs[i].Name.Contains(searchText) ||
programs[i].Category.Contains(searchText) ||
programs[i].Description.Contains(searchText))
{
// Display the program details
Console.WriteLine($"Program {i + 1}:");
Console.WriteLine($"Name: {programs[i].Name}");
Console.WriteLine($"Category: {programs[i].Category}");
Console.WriteLine($"Description: {programs[i].Description}");
Console.WriteLine($"Version: {programs[i].VersionNumber} | Launch Month: {programs[i].LaunchMonth} | Launch Year: {programs[i].LaunchYear}");
Console.WriteLine();
found = true;
}
}
if (!found) // If no matching programs were found
{
Console.WriteLine("No matching programs found.");
}
Console.ReadKey();
}
else if (choice == "4") // Update program record
{
Console.Write("Enter program number to update: ");
int programNumber = int.Parse(Console.ReadLine()) - 1; // Get program index to update
if (programNumber >= 0 && programNumber < programCount) // Check if the program number is valid
{
// Display the current program data
Console.WriteLine("Current Program Data:");
Console.WriteLine($"Name: {programs[programNumber].Name}");
Console.WriteLine($"Category: {programs[programNumber].Category}");
Console.WriteLine($"Description: {programs[programNumber].Description}");
Console.WriteLine($"Version: {programs[programNumber].VersionNumber}");
Console.WriteLine($"Launch Month: {programs[programNumber].LaunchMonth}");
Console.WriteLine($"Launch Year: {programs[programNumber].LaunchYear}");
// Prompt for new values, allowing the user to keep current values if left blank
Console.Write("Enter new name (leave blank to keep current): ");
string newName = Console.ReadLine();
if (!string.IsNullOrEmpty(newName)) programs[programNumber].Name = newName;
Console.Write("Enter new category (leave blank to keep current): ");
string newCategory = Console.ReadLine();
if (!string.IsNullOrEmpty(newCategory)) programs[programNumber].Category = newCategory;
Console.Write("Enter new description (leave blank to keep current): ");
string newDescription = Console.ReadLine();
if (!string.IsNullOrEmpty(newDescription)) programs[programNumber].Description = newDescription;
Console.Write("Enter new version number (leave blank to keep current): ");
string newVersion = Console.ReadLine();
if (!string.IsNullOrEmpty(newVersion)) programs[programNumber].VersionNumber = newVersion;
Console.Write("Enter new launch month (leave blank to keep current): ");
string newLaunchMonth = Console.ReadLine();
if (!string.IsNullOrEmpty(newLaunchMonth)) programs[programNumber].LaunchMonth = byte.Parse(newLaunchMonth);
Console.Write("Enter new launch year (leave blank to keep current): ");
string newLaunchYear = Console.ReadLine();
if (!string.IsNullOrEmpty(newLaunchYear)) programs[programNumber].LaunchYear = ushort.Parse(newLaunchYear);
Console.WriteLine("Program updated.");
}
else
{
Console.WriteLine("Invalid program number.");
}
Console.ReadKey();
}
else if (choice == "5") // Delete program record
{
Console.Write("Enter program number to delete: ");
int deleteIndex = int.Parse(Console.ReadLine()) - 1; // Get program index to delete
if (deleteIndex >= 0 && deleteIndex < programCount) // Check if the program number is valid
{
// Shift all programs after the deleted one to fill the gap
for (int i = deleteIndex; i < programCount - 1; i++)
{
programs[i] = programs[i + 1];
}
programCount--; // Decrease the program count
Console.WriteLine("Program deleted.");
}
else
{
Console.WriteLine("Invalid program number.");
}
Console.ReadKey();
}
else if (choice == "6") // Sort programs by name
{
Array.Sort(programs, 0, programCount, Comparer.Create((x, y) => x.Name.CompareTo(y.Name)));
Console.WriteLine("Programs sorted.");
Console.ReadKey();
}
else if (choice == "7") // Fix redundant spaces in names
{
// Replace multiple spaces with a single space in program names
for (int i = 0; i < programCount; i++)
{
programs[i].Name = System.Text.RegularExpressions.Regex.Replace(programs[i].Name, @"\s+", " ");
}
Console.WriteLine("Redundant spaces fixed.");
Console.ReadKey();
}
else if (choice.ToUpper() == "X") // Exit the application
{
break; // Exit the loop and end the program
}
}
}
}
Output
1 - Add New Program
2 - Show All Programs
3 - View Program Data
4 - Update Program Record
5 - Delete Program Record
6 - Sort Programs Alphabetically
7 - Fix Redundant Spaces in Names
X - Exit
Choose an option: 1
Enter Program Name: Example Program
Enter Program Category (Max 30 characters): Productivity
Enter Program Description (Max 100 characters): This is a description of the example program.
Enter Program Version Number: 1.0
Enter Program Launch Month (1-12): 12
Enter Program Launch