Система управления студенческими записями с использованием связанного списка

Опубликовано: 2 Сентября, 2022

Предпосылки: связанный список

Проблема: Создайте систему управления записями учащихся, которая может выполнять следующие операции:

  • Вставить студенческую запись
  • Удалить студенческую запись
  • Показать студенческую запись
  • Поиск студенческой записи

Личный кабинет должен содержать следующие пункты

  • Имя студента
  • Ролл номер студента
  • Курс, на который зачислен студент
  • Всего оценок студента

Подход: Имея базовые знания об операциях со связанными списками, таких как вставка и удаление элементов в связанном списке, можно создать систему управления записями учащихся. Ниже описаны функции, которые должны быть реализованы:

  • Проверка записи: это служебная функция создания записи, которая проверяет перед вставкой, что запись уже существует или нет. Он использует концепцию проверки узла с заданными данными в связанном списке.
  • Создать запись: это так же просто, как создать новый узел в пустом связанном списке или вставить новый узел в непустой связанный список.
  • Поиск записи: поиск записи аналогичен поиску ключа в связанном списке. Здесь в ключе записи учащегося указан номер списка, поскольку номер списка уникален для каждого учащегося.
  • Удалить запись: Удалить запись аналогично удалению ключа из связанного списка. Здесь ключевой номер рулона. Удалить запись — это целочисленная функция, возвращающая -1 , если такая запись с заданным номером списка не найдена, в противном случае она удаляет узел с заданным ключом и возвращает 0 .
  • Показать запись: показывает, что запись аналогична печати всех элементов связанного списка.

Обработка исключений

Хотя реализация обработки исключений довольно проста, перед проектированием такой системы необходимо принять во внимание несколько моментов:

  • Номер рулона должен использоваться в качестве ключа для различения двух разных записей, поэтому при вставке записи проверьте, существует ли эта запись уже в нашей базе данных или нет, если она уже существует, то немедленно сообщите пользователю, что запись уже существует, и вставьте эту запись в базу данных. .
  • Запись должна быть вставлена в отсортированном порядке для этого, чтобы сделать номер списка ключом и использовать узел вставки в отсортированном связанном списке.

Ниже приведена реализация вышеуказанного подхода:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Node Class
class Node {
public:
    int roll;
    string Name;
    string Dept;
    int Marks;
    Node* next;
};
 
// Stores the head of the Linked List
Node* head = new Node();
 
// Check Function to check that if
// Record Already Exist or Not
bool check(int x)
{
    // Base Case
    if (head == NULL)
        return false;
 
    Node* t = new Node;
    t = head;
 
    // Traverse the Linked List
    while (t != NULL) {
        if (t->roll == x)
            return true;
        t = t->next;
    }
 
    return false;
}
 
// Function to insert the record
void Insert_Record(int roll, string Name,
                   string Dept, int Marks)
{
    // if Record Already Exist
    if (check(roll)) {
        cout << "Student with this "
             << "record Already Exists ";
        return;
    }
 
    // Create new Node to Insert Record
    Node* t = new Node();
    t->roll = roll;
    t->Name = Name;
    t->Dept = Dept;
    t->Marks = Marks;
    t->next = NULL;
 
    // Insert at Begin
    if (head == NULL
        || (head->roll >= t->roll)) {
        t->next = head;
        head = t;
    }
 
    // Insert at middle or End
    else {
        Node* c = head;
        while (c->next != NULL
               && c->next->roll < t->roll) {
            c = c->next;
        }
        t->next = c->next;
        c->next = t;
    }
 
    cout << "Record Inserted "
         << "Successfully ";
}
 
// Function to search record for any
// students Record with roll number
void Search_Record(int roll)
{
    // if head is NULL
    if (!head) {
        cout << "No such Record "
             << "Available ";
        return;
    }
 
    // Otherwise
    else {
        Node* p = head;
        while (p) {
            if (p->roll == roll) {
                cout << "Roll Number "
                     << p->roll << endl;
                cout << "Name "
                     << p->Name << endl;
                cout << "Department "
                     << p->Dept << endl;
                cout << "Marks "
                     << p->Marks << endl;
                return;
            }
            p = p->next;
        }
 
        if (p == NULL)
            cout << "No such Record "
                 << "Available ";
    }
}
 
// Function to delete record students
// record with given roll number
// if it exist
int Delete_Record(int roll)
{
    Node* t = head;
    Node* p = NULL;
 
    // Deletion at Begin
    if (t != NULL
        && t->roll == roll) {
        head = t->next;
        delete t;
 
        cout << "Record Deleted "
             << "Successfully ";
        return 0;
    }
 
    // Deletion Other than Begin
    while (t != NULL && t->roll != roll) {
        p = t;
        t = t->next;
    }
    if (t == NULL) {
        cout << "Record does not Exist ";
        return -1;
        p->next = t->next;
 
        delete t;
        cout << "Record Deleted "
             << "Successfully ";
 
        return 0;
    }
}
 
// Function to display the Student"s
// Record
void Show_Record()
{
    Node* p = head;
    if (p == NULL) {
        cout << "No Record "
             << "Available ";
    }
    else {
        cout << "Index Name Course"
             << " Marks ";
 
        // Until p is not NULL
        while (p != NULL) {
            cout << p->roll << "    "
                 << p->Name << " "
                 << p->Dept << " "
                 << p->Marks << endl;
            p = p->next;
        }
    }
}
 
// Driver code
int main()
{
    head = NULL;
    string Name, Course;
    int Roll, Marks;
 
    // Menu-driven program
    while (true) {
        cout << " Welcome to Student Record "
                "Management System Press 1 to "
                "create a new Record 2 to delete a "
                "student record 3 to Search a Student "
                "Record 4 to view all students "
                "record 5 to Exit ";
        cout << " Enter your Choice ";
        int Choice;
 
        // Enter Choice
        cin >> Choice;
        if (Choice == 1) {
            cout << "Enter Name of Student ";
            cin >> Name;
            cout << "Enter Roll Number of Student ";
            cin >> Roll;
            cout << "Enter Course of Student ";
            cin >> Course;
            cout << "Enter Total Marks of Student ";
            cin >> Marks;
            Insert_Record(Roll, Name, Course, Marks);
        }
        else if (Choice == 2) {
            cout << "Enter Roll Number of Student whose "
                    "record is to be deleted ";
            cin >> Roll;
            Delete_Record(Roll);
        }
        else if (Choice == 3) {
            cout << "Enter Roll Number of Student whose "
                    "record you want to Search ";
            cin >> Roll;
            Search_Record(Roll);
        }
        else if (Choice == 4) {
            Show_Record();
        }
        else if (Choice == 5) {
            exit(0);
        }
        else {
            cout << "Invalid Choice "
                 << "Try Again ";
        }
    }
    return 0;
}

Вывод: Ниже приведены скриншоты вывода различных функций, предоставляемых системой управления студенческими записями:

  • Создать запись:

  • Показать запись:

  • Удалить запись:

  • Запись поиска:

  • Студенческая запись: