Author Topic: Student Marlist Preparation C#  (Read 1022 times)

kathir

  • Administrator
  • Sr. Member
  • *****
  • Posts: 283
Student Marlist Preparation C#
« on: June 12, 2011, 11:16:57 am »
Here is the widely used student mark list preparation code in C#. It is a menu oriented console application.

http://www.softwareandfinance.com/CSharp/MenuDriven_MarkList.html

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
 
 
namespace ConsoleHelperFunction
{
   
    public class ConsoleHelper
    {
        [StructLayout(LayoutKind.Sequential)]
        struct POSITION
        {
            public short x;
            public short y;
        }
 
        // http://msdn.microsoft.com/en-us/library/ms682073
        [DllImport("kernel32.dll", EntryPoint = "GetStdHandle", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern int GetStdHandle(int nStdHandle);
 
        [DllImport("kernel32.dll", EntryPoint = "SetConsoleCursorPosition", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern int SetConsoleCursorPosition(int hConsoleOutput, POSITION dwCursorPosition);
 
        public void gotoxy(short x, short y)
        {
            const int STD_OUTPUT_HANDLE = -11;
            int hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
            POSITION position;
            position.x = x;
            position.y = y;
            SetConsoleCursorPosition(hConsoleHandle, position);
        }
 
        [StructLayout(LayoutKind.Sequential)]
        struct CONSOLERECT
        {
            public short Left;
            public short Top;
            public short Right;
            public short Bottom;
        }
 
        [StructLayout(LayoutKind.Sequential)]
        struct CONSOLEBUFFER
        {
            public POSITION size;
            public POSITION position;
            public int attrib;
            public CONSOLERECT window;
            public POSITION maxsize;
        }
 
        [DllImport("kernel32.dll", EntryPoint = "FillConsoleOutputCharacter", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern int FillConsoleOutputCharacter(int handleConsoleOutput, byte fillchar, int len, POSITION writecord, ref int numberofbyeswritten);
 
        [DllImport("kernel32.dll", EntryPoint = "GetConsoleScreenBufferInfo", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern int GetConsoleScreenBufferInfo(int handleConsoleOutput, ref CONSOLEBUFFER bufferinfo);
 
        public void ClearScreen()
        {
            const int STD_OUTPUT_HANDLE = -11;
            int hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
 
            int hWrittenChars = 0;
            CONSOLEBUFFER strConsoleInfo = new CONSOLEBUFFER();
            POSITION pos;
            pos.x = pos.y = 0;
            GetConsoleScreenBufferInfo(hConsoleHandle, ref strConsoleInfo);
            FillConsoleOutputCharacter(hConsoleHandle, 32, strConsoleInfo.size.x * strConsoleInfo.size.y, pos, ref hWrittenChars);
            SetConsoleCursorPosition(hConsoleHandle, pos);
        }
    }
}
 
namespace CSMarkList
{
    class CStudent
    {
        public string name;
        public int[] marks = new int[5];
        public int total;
    }
 
    class CStudents
    {
        public string filename = "c:\\csstudents.bin";
        public List<CStudent> m_studList = new List<CStudent>();
 
        public int m_nMaxStudents;
        public int ReadAllRecords()
        {
            m_studList.Clear();
            m_nMaxStudents = 0;
 
            if (System.IO.File.Exists(filename) == false)
                return 0;
 
            System.IO.Stream s1 = System.IO.File.Open(filename, System.IO.FileMode.Open);
            System.IO.BinaryReader f1 = new System.IO.BinaryReader(s1);
 
            m_nMaxStudents = f1.ReadInt32();
           
            for (int i = 0; i < m_nMaxStudents; i++)
            {
                CStudent stud = new CStudent();
 
                stud.name = f1.ReadString();
 
                for (int j = 0; j < 5; j++)
                    stud.marks[j] = f1.ReadInt32();
 
                stud.total = f1.ReadInt32();
 
                m_studList.Add(stud);
            }
 
            f1.Close();
            return m_nMaxStudents;
        }
 
        public int WriteAllRecords()
        {
            System.IO.Stream s2 = System.IO.File.Open(filename, System.IO.FileMode.Create);
            System.IO.BinaryWriter f2 = new System.IO.BinaryWriter(s2);
 
            m_nMaxStudents = m_studList.Count;
            f2.Write(m_nMaxStudents);
 
            for(int i = 0; i < m_nMaxStudents; i++)
            {
                f2.Write(m_studList.name);
 
                for (int j = 0; j < 5; j++)
                    f2.Write(m_studList.marks[j]);
 
                f2.Write(m_studList.total);
            }
            f2.Close();
            return m_nMaxStudents;
        }
 
        public int AddRecord(string name, int[] marks)
        {
            CStudent stud = new CStudent();
            stud.name = name;
            stud.marks = marks;
            stud.total = 0;
            for (int i = 0; i < 5; i++)
                stud.total += stud.marks;
            m_studList.Add(stud);
            m_nMaxStudents = m_studList.Count;
            WriteAllRecords();
            return 1;
        }
 
        public int EditRecord(int index, string name, int[] marks)
        {
            CStudent stud = new CStudent();
            stud.name = name;
            stud.marks = marks;
            stud.total = 0;
            m_studList[index] = stud;
            m_nMaxStudents = m_studList.Count;
            WriteAllRecords();
            return 1;
        }
 
        public int DeleteRecord(int index)
        {
            m_studList.RemoveAt(index);
            WriteAllRecords();
            return 1;
        }
    }
 
    class Program
    {
 
        static public CStudents theStudents = new CStudents();
 
        static public void gotoxy(int x, int y)
        {
            gotoxy((short)x, (short)y);
        }
 
        static void gotoxy(short x, short y)
        {
            ConsoleHelperFunction.ConsoleHelper ch = new ConsoleHelperFunction.ConsoleHelper();
            ch.gotoxy(x, y);
        }
 
        static void clrscr()
        {
            ConsoleHelperFunction.ConsoleHelper ch = new ConsoleHelperFunction.ConsoleHelper();
            ch.ClearScreen();
        }
 
        static public int DisplayMainMenu()
        {
            clrscr();
 
            gotoxy(10,4);
            Console.WriteLine("Welcome to Student MarkList Application");
 
            gotoxy(10,5);
            Console.WriteLine("___________________________________________");
 
            gotoxy(10,6);
            Console.WriteLine("1. Add Student Mark List");
 
            gotoxy(10,7);
            Console.WriteLine("2. Edit Student Mark List");
 
            gotoxy(10,8);
            Console.WriteLine("3. View Student Mark List");
 
            gotoxy(10,9);
            Console.WriteLine("4. Delete Student Mark List");
 
            gotoxy(10,10);
            Console.WriteLine("5. Exit");
 
            gotoxy(10,11);
            Console.WriteLine("___________________________________________");
 
            gotoxy(10,13);
            Console.Write("Enter your Selection: ");
            try
            {
                string s = Console.ReadLine();
                return Convert.ToInt32(s);
            }
            catch (Exception e)
            {
                return -1;
            }
        }
 
        static public void ViewRecords()
        {
            theStudents.ReadAllRecords();
 
            clrscr();
               
            gotoxy(10,4);
            Console.WriteLine("Welcome to Student Mark List Application");
 
            gotoxy(10,5);
            Console.WriteLine("_______________________________________________________________");
 
            gotoxy(10,6);
            Console.WriteLine("SNo Student Name       Sub1   Sub2   Sub3   Sub4   Sub5   Total");
 
            gotoxy(10,7);
            Console.WriteLine("_______________________________________________________________");
 
            int pos = 8;
            // Enable Paging
            for(int i = 0; i < theStudents.m_nMaxStudents; i++)
            {
              gotoxy(10,pos);
              Console.WriteLine(i + 1);
              gotoxy(14,pos);
              Console.WriteLine(theStudents.m_studList.name);
              gotoxy(33,pos);
              Console.WriteLine(theStudents.m_studList.marks[0]);
              gotoxy(40,pos);
              Console.WriteLine(theStudents.m_studList.marks[1]);
              gotoxy(47,pos);
              Console.WriteLine(theStudents.m_studList.marks[2]);
              gotoxy(54,pos);
              Console.WriteLine(theStudents.m_studList.marks[3]);
              gotoxy(61,pos);
              Console.WriteLine(theStudents.m_studList.marks[4]);
              gotoxy(68,pos);
              Console.WriteLine(theStudents.m_studList.total);
              pos++;
            }
            gotoxy(10,pos++);
            Console.WriteLine("_______________________________________________________________");
            pos++;
            gotoxy(10,pos++);
        }
 
 
        static public void InputRecords()
        {
            while(true)
            {
                clrscr();
               
              gotoxy(10,4);
              Console.WriteLine("Welcome to Student Mark List Application");
 
                gotoxy(10,5);
              Console.WriteLine("__________________________________________________________");
 
              gotoxy(10,6);
              Console.WriteLine("Student Name: ");
 
              gotoxy(10,7);
              Console.WriteLine("Sub1 Mark: ");
 
              gotoxy(10,8);
              Console.WriteLine("Sub2 Mark: ");
 
              gotoxy(10,9);
              Console.WriteLine("Sub3 Mark: ");
 
              gotoxy(10,10);
              Console.WriteLine("Sub4 Mark: ");
 
              gotoxy(10,11);
              Console.WriteLine("Sub5 Mark: ");
 
              gotoxy(10,12);
              Console.WriteLine("__________________________________________________________");
 
              gotoxy(23,6);
              string name;
            name = Console.ReadLine();
 
            int[] marks = new int[5];
              for(int i = 0; i < 5; i++)
              {
                    gotoxy(23,7 + i);
                marks = Convert.ToInt32(Console.ReadLine());
              }
 
              theStudents.AddRecord(name, marks);
 
              gotoxy(10,14);
              Console.WriteLine("Do you want to add another record (Y/N)? ");
            char ch = Console.ReadKey().KeyChar;
 
              if(ch == 'Y' || ch == 'y')
                  continue;
              else
                  break;
            }
        }
 
 
        static public void EditRecords()
        {
            ViewRecords();
            Console.WriteLine("Enter the serial number you want to edit: ");
            int m = Convert.ToInt32(Console.ReadLine()); ;
 
            if(m >= 1 && m <= theStudents.m_nMaxStudents)
            {
                  clrscr();
                  gotoxy(10,4);
                  Console.WriteLine("Welcome to Student Mark List Application");
 
                  gotoxy(10,5);
                  Console.WriteLine("__________________________________________________________");
 
                  gotoxy(10,6);
                  Console.WriteLine("Student Name: ");
 
                  gotoxy(10,7);
                  Console.WriteLine("Sub1 Mark: ");
 
                  gotoxy(10,8);
                  Console.WriteLine("Sub2 Mark: ");
 
                  gotoxy(10,9);
                  Console.WriteLine("Sub3 Mark: ");
 
                  gotoxy(10,10);
                  Console.WriteLine("Sub4 Mark: ");
 
                  gotoxy(10,11);
                  Console.WriteLine("Sub5 Mark: ");
 
                  gotoxy(10,12);
                  Console.WriteLine("__________________________________________________________");
 
                  gotoxy(23,6);
                  string name;
                name = Console.ReadLine();
 
                int[] marks = new int[5];
                  for(int i = 0; i < 5; i++)
                  {
                        gotoxy(23,7 + i);
                    marks = Convert.ToInt32(Console.ReadLine());
                  }
 
                  theStudents.EditRecord(m - 1, name, marks);
                  gotoxy(10,12);
                  Console.WriteLine("Record updated. Press any key to return to Main Menu");
                Console.ReadKey();
            }
            else
            {
                  gotoxy(10,12);
                  Console.WriteLine("Invalid Entry. Press any key to return to Main Menu");
                Console.ReadKey();
            }
 
        }
 
        static public void DeleteRecords()
        {
            ViewRecords();
            Console.WriteLine("Enter the serial number you want to delete: ");
            int m = Convert.ToInt32(Console.ReadLine()); ;
 
            if(m >= 1 && m <= theStudents.m_nMaxStudents)
            {
                theStudents.DeleteRecord(m - 1);
                  Console.WriteLine("Record deleted. Press any key to return to Main Menu");
                Console.ReadKey(); ;
            }
            else
            {
                  Console.WriteLine("Invalid Entry. Press any key to return to Main Menu");
                Console.ReadKey(); ;
            }
        }
 
        static void Main(string[] args)
        {
            theStudents.ReadAllRecords();
            while(true)
            {
                int selection = DisplayMainMenu();
                if (selection == -1)
                    continue;
 
                  switch(selection)
                  {
                    case 1:
                        InputRecords();
                          break;
                      case 2:
                        EditRecords();
                        break;
                      case 3:
                        {
                          ViewRecords();
                          Console.Write("Press any key to return to Main Manu: ");
                          Console.ReadKey();
                          }
                        break;
                    case 4:
                          DeleteRecords();
                        break;
 
                    case 5:
                      default:
                          return;
                };
            }
        }
    }
}

kcreddy90

  • Newbie
  • *
  • Posts: 3
Re: Student Marlist Preparation C#
« Reply #1 on: June 12, 2011, 11:31:58 am »
Even it supports menu oriented, it looks long code for beginners. Can you post the simple version (simple menu) of the same?

 


Disclaimer: This web site is for educational and informational purposes only. Click here to read the Disclaimer.
Content copyright 2010-2014. Kathiresan. All rights reserved.
This page is using SMF version 2.0.1