链表实现考试报名系统

/*
  Name: 链表实现考试报名系统 
  Description: 完成对考生信息的建立,查找,插入,修改,删除等功能 
*/
//==================================学生成绩管理系统================================

#include<iostream>
using namespace std;

//======================Node类作为链表的结点,用以存储单个考生信息===================

class Node
{
      friend class Examinee;
      
      public:
             long examnum;//准考证号
             string name;//姓名
             string sex;//性别
             int age;//年龄
             string type;//报考类别
             Node *next;//指向下一个结点的指针
             
             Node();
};

//=======================Examinee类作为单链表类,用以实现相关操作=====================

class Examinee
{
      public:
             void Creat(Examinee &L);
             void Insert(Examinee &L); 
             void Delete(Examinee &L); 
             void Update(Examinee &L); 
             void Lookup(Examinee &L); 
             int Length(Examinee &L); 
             void Print(Examinee &L); 
             
             Examinee();
      private:
              Node *head;
};

//===========================Node类的构造函数,初始化结点数据==========================

Node::Node()
{
            examnum = 0;
            name = '?';
            sex = '?';
            age = 0;
            type = '?';
            next = NULL;
}
//===========================Examinee类的构造函数,初始化首结点========================

Examinee::Examinee()
{
                    head = NULL;
}

//=============================创建考生信息的线性表(单链表)===========================
void Examinee::Creat(Examinee &L)
{
     cout << "请输入考生人数:" ;
     int n;
     cin >> n;
     cout << "请依次输入考生的考号,姓名,性别,年龄以及报考类别!" << '\n';
     Node *p,*s;
     for(int j = 0;j < n;j++)
     {
             p = new Node;
             long examnum;
             cin >> examnum;
             p->examnum = examnum;
             
             string name;
             cin >> name;
             p->name = name;
             
             string sex;
             cin >> sex;
             p->sex = sex;
             
             int age;
             cin >> age;
             p->age = age;
             
             string type;
             cin >> type;
             p->type = type;
             
             p->next = NULL;
             
             if(j==0)
             {
                     L.head = p;
                     s = L.head;
             }
             else
             {
                 s->next = p;
                 s = p;
             }
     }
}
//================================输出线性表中所有考生信息=============================

void Examinee::Print(Examinee &L)
{
     Node *p = L.head;
     cout << '\n';
     cout << "考号" << '\t' << "姓名" << '\t' << "性别" << '\t';
     cout << "年龄" << '\t' << "报考类别" << '\n';
     
     while(p->next)
     {
                    cout << p->examnum << '\t' << p->name << '\t' << p->sex << '\t';
                    cout << p->age << '\t' << p->type << '\n';
                    
                    p = p->next;
     }
     //输出链表的最后一个结点 
     cout << p->examnum << '\t' << p->name << '\t' << p->sex << '\t';
     cout << p->age << '\t' << p->type << '\n';
     
}

//===============================查询线性表的长度======================================

int Examinee::Length(Examinee &L)
{
    Node *p = L.head;
    int i = 1;
    while(p->next)
    {
                  i++;
                  p = p->next;
    }
    return i;
}

//==========================在线性表的某个位置上插入考生信息===========================

void Examinee::Insert(Examinee &L)
{
     cout << "请输入你要插入的考生的位置:";
     int m;
     cin >> m;
     
     if(m > Examinee::Length(L) + 1)
     {
          cout << "你要插入的位置不存在,请重新输入!"<<'\n';
          Examinee::Insert(L);
     }
     else
     {
         Node *p,*s;
         
         p = new Node;
         s = L.head;
         cout << "请依次输入要插入的考生的考号,姓名,性别,年龄及报考类别!" << '\n';
         
         long examnum;
         cin >> examnum;
         p->examnum = examnum;
         
         string name;
         cin >> name;
         p->name = name;
         
         string sex;
         cin >> sex;
         p->sex = sex;
         
         int age;
         cin >> age;
         p->age = age;
         
         string type;
         cin >> type;
         p->type = type;
         
         if(m == 1)
         {
              p->next = L.head;
              L.head = p;
         }
         else
         {
             int i = 1;
             while(i != m - 1)
             {
                     s = s->next;
                     i++;
             }
             p->next = s->next;
             s->next = p;
         }
     }
} 
//==========================根据考号删除线性表中对应的学生信息===========================
void Examinee::Delete(Examinee &L)
{
     cout << "请输入要删除的考生的考号";
     long examnum;
     cin >> examnum;
     Node *p = L.head;
     Node *s;
     int i = 1;
     while(p->next)
     {
                   if(L.head->examnum == examnum)
                   {
                                      s = L.head;
                                      L.head = s->next;
                                      cout << "你要删除的考生信心是:"<< s->examnum << '\t' << s->name <<'\t';
                                      cout << s->sex << '\t' << s->age << '\t' << s->type <<'\n';
                                      break;
                   }
                   else if(p->next->examnum = examnum)
                   {
                        s = p->next;
                        p->next = s->next;
                        cout << "你删除的考生信息是:" << s->examnum << '\t' << s->name <<'\t';
                        cout << s->sex << '\t' << s->age <<'\t' << s->type << '\n';
                        break;
                   }
                   else
                   {
                       p = p->next;
                       i++;
                   }
     }
     if(i > Examinee::Length(L))
     {
          cout << "你要删除的考生不存在,请重新输入考号!" << '\n';
          Examinee::Delete(L);
     }
}
//================================根据考号查询线性表中的考生信息=============================

void Examinee::Lookup(Examinee &L)
{
     cout << "请输入要查找的学生的考号:";
     long examnum;
     cin >> examnum;
     Node *p = L.head;
     int i = 1;   
     while(p)
     {
             if(p->examnum == examnum)
             {
                           cout << "考号" << '\t' << "姓名" << '\t' << "性别" << '\t';
                           cout << "年龄" << '\t' << "报考类别" << '\n';
                           cout << p->examnum << '\t' << p->name << '\t' << p->sex << '\t';
                           cout << p->age << '\t' << p->type << '\n';
                           
                           break;
             }
             else
             {
                 p = p->next;
                 i++;
             }
     }
     cout << '\n';
     if(i > Examinee::Length(L)){
          cout << "你要查询的考生不存在,请重新输入考号!" << endl;
          Examinee::Lookup(L);
     }
} 
//===============================根据考号修改线性表中的考生信息==============================
void Examinee::Update(Examinee &L)
{
     cout << "请输入要修改信息的考生的考号:";
     long examnum;
     cin >> examnum;
     Node *p = L.head;
     int i = 1;
     if(i > Examinee::Length(L)){
          cout << "你要修改信息的考生不存在,请重新输入考号!" << endl;
          Examinee::Update(L);
     }
     while(p)
     {
             if(p->examnum == examnum)
             {
                           cout << "请依次输入修改后的考生的考号,姓名,性别,年龄以及报考类别!" << '\n';
                           long updatenum;
                           cin >> updatenum;
                           p->examnum = updatenum;
                           
                           string name;
                           cin >> name;
                           p->name = name;
                           
                           string sex;
                           cin >> sex;
                           p->sex = sex;
                           
                           int age;
                           cin >> age;
                           p->age = age;
                           
                           string type;
                           cin >> type;
                           p->type = type;
                           break;
             }
             else
             {
                 p = p->next;
                 i++;
             }
     }
}
//====================================================界面====================================================== 
int Menu()
{
     cout << "=============================请选择相应的功能============================" <<endl;
     cout << '\n';
     cout << "-----------------------------1.插入--------------------------------------" <<endl; 
     cout << "-----------------------------2.删除--------------------------------------" <<endl; 
     cout << "-----------------------------3.查找--------------------------------------" <<endl; 
     cout << "-----------------------------4.修改--------------------------------------" <<endl; 
     cout << "-----------------------------5.统计--------------------------------------" <<endl; 
     cout << "-----------------------------0.取消操作----------------------------------" <<endl; 
     cout << '\n';
     cout << "=========================================================================" <<endl;
}
//=========================================主函数,调用类Examinee的成员函数以实现相应的功能==========
int main()
{
     cout << "首先建立考生信息系统!" << '\n';
     Examinee L;
     L.Creat(L);
     L.Print(L);
     
     int j = -1;
     Menu();
     while(j)
     {
             cout << "\n" << "请选择您要进行的操作:";
             cin >> j;
             switch(j)
             {
                      case 1:
                           {
                                                    L.Insert(L);
                                                    L.Print(L);
                           }
                      case 2:
                           {
                                                    L.Delete(L);
                                                    L.Print(L);
                                                    break;
                           }
                      case 3:
                           {
                                                    L.Lookup(L);
                                                    L.Print(L);
                                                    break;
                           }
                      case 4:
                           {
                                                    L.Update(L);
                                                    L.Print(L);
                                                    break;
                           }
                      case 5:
                           {
                                                    cout << "该考生系统人数为:" << L.Length(L) << '\n';
                                                    break;
                           }
                      default:
                           {
                                                    cout << "该操作不存在,请输入正确操作!" << '\n';
                                                    break;
                           }
             }
     }
     return 0;
}


转载于:https://my.oschina.net/clear/blog/53961

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的C语言链表实现考试报名管理系统的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct student { char name[50]; int id; struct student *next; }; struct student *head = NULL; void add_student() { struct student *new_student = malloc(sizeof(struct student)); printf("\nEnter student name: "); scanf("%s", new_student->name); printf("Enter student ID: "); scanf("%d", &new_student->id); new_student->next = NULL; if (head == NULL) { head = new_student; } else { struct student *temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = new_student; } } void display_students() { printf("\n"); if (head == NULL) { printf("No students registered yet.\n"); } else { struct student *temp = head; while (temp != NULL) { printf("Name: %s\nID: %d\n\n", temp->name, temp->id); temp = temp->next; } } } int main() { int choice; printf("Exam Registration Management System\n"); do { printf("\nEnter 1 to add a student\n"); printf("Enter 2 to display all students\n"); printf("Enter 0 to exit\n"); scanf("%d", &choice); switch (choice) { case 1: add_student(); break; case 2: display_students(); break; case 0: printf("Exiting program...\n"); break; default: printf("Invalid choice.\n"); break; } } while (choice != 0); return 0; } ``` 这个程序使用了一个链表来存储学生的信息。每个学生都有一个名字和一个ID,并且通过 `add_student()` 函数将学生添加到链表中。通过 `display_students()` 函数可以显示所有已经注册的学生信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值