Class ScreenText C# Exercise - C# Programming Course

 Exercise

Class ScreenText

 Objetive

Create a class ScreenText, to display a certain text in specified screen coordinates. It must have a constructor which will receive X, Y and the string to write. It must also have 3 setters and a "Display" method.

Create a class CenteredText, based on ScreenText, to display text centered (horizontally) in a certain row of the screen. Its constructor will receive only Y and the text. SetX should not change the horizontal position.

Create a class FramedText, to display text centered and inside a rectangle. It will receive the starting row and the text.

Finally, create a test program for all of them, which will create an object of each type and display them.

 Example Code

// Importing the System namespace to handle basic functionalities and console output
using System;

public class ScreenText
{
    // Coordinates and text to be displayed
    protected int x, y;  // Changed from private to protected to allow access from derived classes
    protected string text;  // Changed from private to protected to allow access from derived classes

    // Constructor that sets the X, Y coordinates and text
    public ScreenText(int x, int y, string text)
    {
        this.x = x;
        this.y = y;
        this.text = text;
    }

    // Setter for X coordinate
    public void SetX(int x)
    {
        this.x = x;
    }

    // Setter for Y coordinate
    public void SetY(int y)
    {
        this.y = y;
    }

    // Setter for the text
    public void SetText(string text)
    {
        this.text = text;
    }

    // Method to display the text at the X, Y coordinates
    public virtual void Display()
    {
        Console.SetCursorPosition(x, y);
        Console.WriteLine(text);
    }
}

public class CenteredText : ScreenText
{
    // Constructor that only needs Y and text. X will be calculated to center the text
    public CenteredText(int y, string text) : base(0, y, text)
    {
        // Calculate the X position to center the text (in a console window with 80 columns)
        int centeredX = (Console.WindowWidth - text.Length) / 2;

        // Ensure that X is not less than 0 (if the text is too long for the window)
        SetX(Math.Max(centeredX, 0));  // Set X to the calculated centered position, but not less than 0
    }

    // Override the Display method to center the text
    public override void Display()
    {
        base.Display();  // Call the base class method to display the text
    }
}

public class FramedText : CenteredText
{
    // Constructor that receives the row and text and calls the base class constructor
    public FramedText(int row, string text) : base(row, text) { }

    // Override Display method to display the text inside a frame
    public override void Display()
    {
        int width = text.Length + 4;  // Adding space for the frame
        string frame = new string('*', width);  // Create a frame line

        // Print top frame
        Console.SetCursorPosition(0, y - 1);  // Adjust Y position to make room for the frame
        Console.WriteLine(frame);

        // Print the framed text in the center
        Console.SetCursorPosition(Math.Max(x - 1, 0), y);  // Ensure the X position is not negative
        Console.WriteLine("*" + text + "*");

        // Print bottom frame
        Console.SetCursorPosition(0, y + 1);  // Adjust Y position for the bottom frame
        Console.WriteLine(frame);
    }
}

// Auxiliary class with the Main function to test the functionality of the classes
public class Program
{
    public static void Main()
    {
        // Create a ScreenText object and display it at the given coordinates (X, Y)
        ScreenText screenText = new ScreenText(5, 3, "This is ScreenText!");
        screenText.Display();

        // Create a CenteredText object and display it in the center of the screen (horizontally)
        CenteredText centeredText = new CenteredText(5, "This is CenteredText!");
        centeredText.Display();

        // Create a FramedText object and display it inside a frame
        FramedText framedText = new FramedText(7, "This is FramedText!");
        framedText.Display();
    }
}

More C# Exercises of OOP More On Classes

 Array of objects: table
Create a class named "Table". It must have a constructor, indicating the width and height of the board. It will have a method "ShowData" which will wr...
 House
Create a class "House", with an attribute "area", a constructor that sets its value and a method "ShowData" to display "I am a house, my area is 200 m...
 Table + coffetable + array
Create a project named "Tables2", based on the "Tables" project. In it, create a class "CoffeeTable" that inherits from "Table". Its method "ShowDa...
 Encrypter & Decrypter
Create a class "Encrypter" to encrypt and decrypt text. It will have a "Encrypt" method, which will receive a string and return another string. It ...
 Complex numbers
A complex number has two parts: the real part and the imaginary part. In a number such as a+bi (2-3i, for example) the real part would be "a" (2) and ...
 Table + coffetable + leg
Extend the example of the tables and the coffee tables, to add a class "Leg" with a method "ShowData", which will write "I am a leg" and then it will ...
 Catalog
Create the classes diagram and then, using Visual Studio, a project and the corresponding classes for a catalog utility: It will be able to store i...
 Random number
Create a class RandomNumber, with three static methods: - GetFloat will return a number between 0 and 1 using the following algorithm: seed = (s...
 Text to HTML
Create a class "TextToHTML", which must be able to convert several texts entered by the user into a HTML sequence, like this one: Hola Soy yo Ya ...
 Enhanced ComplexNumber class
Improve the "ComplexNumber" class, so that it overloads the operators + and - to add and subtract numbers....
 3D point
Create a class "Point3D", to represent a point in 3-D space, with coordinates X, Y and Z. It must contain the following methods: MoveTo, which will...
 Catalog + Menu
Improve the Catalog program, so that "Main" displays a menu to allow entering new data of any kind, as well as displaying all the data stored....

Juan A. Ripoll - Programming Tutorials and Courses © 2025 All rights reserved.  Legal Conditions.