考试报名管理系统

/*********************************************************** 
* 版权所有 (C)2017,考试报名管理系统 
* 
* 文件名称: main.cpp 
* 文件标识:main 
* 内容摘要:函数文件 
* 其它说明:主函数 
* 当前版本: V3.0 
* 作 者:宋昊 
* 完成日期: 2017.12.21 
* 
* 修改记录1: 
* 修改日期 :2017.12.20 
* 版本号: V1.0 
* 修改人: 宋昊 
* 修改内容:修复统计信息Bug
* 
* 修改记录2: 
* 修改日期 :2017.12.21 
* 版本号: V2.0 
* 修改人:  
* 修改内容:修复修改信息Bug 
*  
**********************************************************/ 
#ifndef ST_H_INCLUDED
#define ST_H_INCLUDED
typedef struct student
{
    int   num;
    char  sex[10];
    char  name[10];
    char  address[10];
    int   type;
}ElemType;


typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LinkList;

void InitList(LinkList *&L);     //初始化线性表
void DestroyList(LinkList *&L);  //销毁线性表
void CreateListR(LinkList *&L);  //采用尾插法创建链表
void DispList(LinkList *L);      //输出链表
int LocateElem(LinkList *L);     //查找信息
int ListDelete(LinkList *&L);    //删除信息
int create(LinkList *&L);        //修改信息
void sort(LinkList *&L);         //排序信息
void sumList(LinkList *&L);      //统计信息
void Insterlist(LinkList *L);    //插入信息
void display();                  //菜单名
void Display(LinkList *L);       //菜单对应的操作



#endif // ST_H_INCLUDED
#include 
#include 
#include 
#include 
#include 
#include "st.h"
using namespace std;
ElemType e;


/***********************************************************
* 功能描述:初始化线性表  建立一个空的单链表,创建一个头结点
* 输入参数:L
* 输出参数:无
* 返回值  :无
* 其它说明:无
************************************************************/
void InitList(LinkList *&L)
{
    L=(LinkList *)malloc(sizeof(LinkList));
    L->next=NULL;
}


/***********************************************************
* 功能描述:销毁线性表,释放单链表L占用的内存空间,即逐一释放全部节点的空间
* 输入参数:L
* 输出参数:空链表
* 返回值  :无
* 其它说明:无
************************************************************/
void DestroyList(LinkList *&L)
{
    LinkList *p=L,*q=p->next;
    while (q!=NULL)
    {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);
    L->next=NULL;
    printf("释放空间成功!\n");
}


/***********************************************************
* 功能描述:采用尾差法创建链表
* 输入参数:该链表的总人数n
* 输出参数:无
* 返回值  :无
* 其它说明:无
************************************************************/
void CreateListR(LinkList *&L)    //采用尾差法创建链表>

  {   int n;     //该链表的总人数

      printf("请输入要增加的人数n=");
      scanf("%d",&n);
       LinkList *s,*r;int i;    //定义LinkList *s 做作为插入的新结点    定义LinkList *r  始终指向尾结点

 L=(LinkList *)malloc(sizeof(LinkList));
        r=L;
        printf("输入考号(不能相同)  姓名 性别 院系 年龄 科目\n");
        for (i=0;i

        {    s=(LinkList *)malloc(sizeof(LinkList));
              scanf("%d %s %s %s  %d",&s->data.num,&s->data.name,&s->data.sex,&s->data.address,&s->data.type);
              r->next=s;
              r=s;
        }
        r->next=NULL;            //将尾结点指向null

  }


  /***********************************************************
* 功能描述:输出信息
* 输入参数:考号
* 输出参数:考生信息
* 返回值  :无
* 其它说明:无
************************************************************/
void DispList(LinkList *L)
{
    LinkList *p=L->next;   //定义LinkList *p 指向第一个元素结点
    while (p!=NULL) //用while循环逐次输出链表元素(条件是p!=null)

    {  printf("考号(不能相同)  姓名 性别 院系 科目\n");
       printf("%d           %s %s %s %d\n",p->data.num,p->data.name,p->data.sex,p->data.address,p->data.type);
       p=p->next;
    }
    printf("\n");
}


/***********************************************************
* 功能描述:查找信息
* 输入参数:要查找的考号i
* 输出参数:信息
* 返回值  :1
* 其它说明:无
************************************************************/
int LocateElem(LinkList *L)    //定义ElemType e   作为查找考号的对象
{   printf("请输入要查找的考号i=");
    scanf("%d",&e.num);
    LinkList *p=L->next;          //定义LinkList *p   指向第一个元素结点
    while (p!=NULL && p->data.num!=e.num )     //用while循环查找要查找的结点(条件是p!=NULL && p->data.num!=e.num)

    {
        p=p->next;

    }
    if (p==NULL)
        return(0);
    else
    {printf("考号:");
     printf("%d\n",p->data.num);
     printf("性别:");
     printf("%s\n",p->data.sex);
     printf("姓名:");
     printf("%s\n",p->data.name);
     printf("院系:");
     printf("%s\n",p->data.address);
     printf("科目:");
     printf("%d\n",p->data.type);
     return 1;}
}


/***********************************************************
* 功能描述:删除信息
* 输入参数:要删除的考号i
* 输出参数:输出删除以后的全部信息
* 返回值  :1
* 其它说明:无
************************************************************/
int ListDelete(LinkList *&L)               //定义ElemType e 作为删除考号的对象
{
    printf("请输入要删除的考号i=");
    scanf("%d",&e.num);
    LinkList *p=L,*q;        //定义LinkList *p  指向头结点        定义LinkList *q 作为存储删除结点的变量
    while (e.num!=p->next->data.num &&p!=NULL)   // 用while循环查找该结点,并且用free(q)清空该结点

    {

        p=p->next;
    }
    if (p==NULL)
        return 0;
    else
    {
        q=p->next;
        if (q==NULL)
            return 0;
        p->next=q->next;
        free(q);
        printf("输出删除以后的全部信息:\n\n");
        DispList(L);
        return 1;
    }

}


/***********************************************************
* 功能描述:修改信息
* 输入参数:要修改的考号i
* 输出参数:输出修改以后的全部信息
* 返回值  :1
* 其它说明:无
************************************************************/
int create(LinkList *&L)   //定义ElemType i  作为修改考号的对象

{
    printf("请输入要修改人的考号i=");
    scanf("%d",&e.num);
    LinkList *p=L;         //定义LinkList *p     指向头结点

    while (e.num!=p->data.num&&p->next!=NULL)     //用while循环查找该结点

    {
        p=p->next;
    }
    if  (e.num!=p->data.num)
         {

         printf("不存在此考号\n\n");
         DispList(L);
         }
    else
    {
         printf("请输入考号\n");
         scanf("%d",&e.num);
         if(p->data.num==e.num)
         {
          printf("允许修改,请输入:姓名 性别 院系 科目\n");
          scanf("%s %s %s %d",&p->data.name,&p->data.sex,&p->data.address,&p->data.type);
          printf("输出修改以后的全部信息:\n\n");
          DispList(L);
          return (1);
         }
        else
        {
          printf("考号不同,不能修改,重新执行修改信息\n");
          return (1);
        }

    }
}


/***********************************************************
* 功能描述:排序信息
* 输入参数:无
* 输出参数:输出排好序的链表
* 返回值  :无
* 其它说明:无
************************************************************/
void sort(LinkList *&L)
{ LinkList *p=L->next,*q,*r;    //定义LinkList *p   指向未排序的第一个结点      定义LinkList *q   指向头结点

  if(p!=NULL)
  {r=p->next;
   p->next=NULL;
   p=r;
   while(p!=NULL)    //用while循环寻找p指向的元素比排好序中的元素大,则将其插入其后

   {r=p->next;
    q=L;
    while(q->next!=NULL&&q->next->data.numdata.num)
        q=q->next;
    p->next=q->next;
    q->next=p;
    p=r;
   }
  }
  DispList(L);
}


/***********************************************************
* 功能描述:统计信息
* 输入参数:无
* 输出参数:统计的信息
* 返回值  :无
* 其它说明:无
************************************************************/
void sumList(LinkList *&L)
{LinkList *p=L;            //定义LinkList *p  指向头结点        定义多个变量   统计报考各科的人数
  int n=0;
  while(p->next!=NULL)                //用while循环和if语句统计人数
  { n++;
  p=p->next;
}
  printf("报考的总人数是n=");
  printf("%d\n",n);

}


/***********************************************************
* 功能描述:插入信息
* 输入参数:要插入的人数n
* 输出参数:无
* 返回值  :无
* 其它说明:无
************************************************************/
void Insterlist(LinkList *L)
{     int n;
      printf("请输入要插入的人数n=");     //定义变量int n  作为插入的人数

      scanf("%d",&n);
       LinkList *s,*r,*p=L;int i;  //定义变量LinkList *s  作为新插入结点变量      定义变量LinkList *r   指向尾指针  定义变量LinkList *p  作为循环条件变量       //r=s;
        printf("输入考号(不能相同)  姓名 性别 院系 科目 \n");
        while(p->next!=NULL)      //用while循环找到尾结点,插入新元素
            p=p->next;
        for (i=0;idata.num,&s->data.name,&s->data.sex,&s->data.address,&s->data.type);
              p->next=s;
              p=s;
              r=s;
        }
        r->next=NULL;
  }


/***********************************************************
* 功能描述:菜单栏
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其它说明:无
************************************************************/
void display()
{ printf("........考试报名菜单选择.........\n");
  printf("***********1.排序信息.***********\n");
  printf("***********2.查找信息.***********\n");
  printf("***********3.删除信息.***********\n");
  printf("***********4.输出信息.***********\n");
  printf("***********5.输入信息.***********\n");
  printf("***********6.释放空间.***********\n");
  printf("***********7.统计信息.***********\n");
  printf("***********8.修改信息.***********\n");
  printf("***********9.插入信息.***********\n");
  printf("**********10.结束程序.***********\n");
}


/***********************************************************
* 功能描述:进行操作
* 输入参数:要进行的项目
* 输出参数:对应的操作
* 返回值  :对应各个函数
* 其它说明:无
************************************************************/
void Display(LinkList *L)        //定义变量a       作为选择变量
{while(true)
{display();
 int a;
 printf("请输入要操作的序号a=");
 scanf("%d",&a);
 switch(a)          //用switch语句,编写选择项目
 {case 1:
      {sort(L);break;}
  case 2:
      {LocateElem(L);break;}
  case 3:
      {ListDelete(L);break;}
  case 4:
      {DispList(L); break;}
  case 5:
      { CreateListR(L);break;}
  case 6:
      {DestroyList(L);break;}
  case 7:
      {sumList(L);break;}
  case 8:
      {create(L);break;}
  case 9:
      {Insterlist(L);break;}
  case 10:
      {
          cout<<"**************************************"<
#include 

#include "st.h"


 int main()
{LinkList *L;  //定义LinkList *L
 InitList(L); //调用初始化线性表函数
 Display(L); //调用显示菜单函数
 return 0;
}



运行图:

输入信息

考试报名管理系统_第1张图片

排序信息

考试报名管理系统_第2张图片

修改信息

考试报名管理系统_第3张图片

统计信息

考试报名管理系统_第4张图片

查找信息

考试报名管理系统_第5张图片

删除信息

考试报名管理系统_第6张图片

插入信息

考试报名管理系统_第7张图片

释放空间

考试报名管理系统_第8张图片

退出程序

考试报名管理系统_第9张图片




你可能感兴趣的:(考试报名管理系统)