考试报名管理系统

来源:互联网 发布:淘宝历史最低价 编辑:程序博客网 时间:2024/04/29 01:47
/************************************************************
版权所有(C)2017liusiyuan
**文件名称:lsy.cpp
*文件标识:无
*内容摘要:该代码用于创建一个考试报名管理系统
*其它说明:无
*当前版本:V1.0
*作者:刘思源
*完成日期:20171221
**修改记录1:
*修改日期:20171221
*版本号:V1.0
*修改人:刘思源
*修改内容:创建

**********************************************************/

lsy.cpp:


#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <iostream>
#include "head.h"
using namespace std;
ElemType e;
  void InitList(LinkList *&L) //初始化线性表  建立一个空的单链表,创建一个头结点
{
    L=(LinkList *)malloc(sizeof(LinkList)); //向系统请求分配内存空间来装LinkList这种类型的指针数据的内存大小
    L->next=NULL;  //创建头结点,其next域置为NULL


}
/**********************************************************
*功能描述:采用尾差法创建链表
*输入参数:链表总人数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("输入考号  姓名 性别 籍贯 年龄 考试类别(1.英语四级 2.英语六级 3.电脑二级 4.电脑四级 5.其它)\n");
        for (i=0;i<n;i++)               //使用for循环将新结点逐次插入链表之后(条件是int i<n)


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


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


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


    {
       printf("考号%d   姓名%s   性别 %s   籍贯%s  年龄%d   考试类别%d\n",
              p->data.num,p->data.name,p->data.sex,p->data.address,p->data.age,p->data.type);
       p=p->next;
    }
    printf("\n");
}
/***********************************************************
*功能描述:查找信息
*输入参数:考号
*输出参数:考生信息
*返回值:无
*其它说明:无
***********************************************************/
int LocateElem(LinkList *L)   //查找信息
{   printf("请输入要查找的考号i=");
    scanf("%d",&e.num);
    LinkList *p=L->next;         // 定义LinkList *p指向第一个元素结点
    while (p!=NULL && p->data.num!=e.num     )//用while循环查找要查找的结点


    {
        p=p->next;


    }
    if (p==NULL)
        printf("没有此考号.\n");
    else
    {printf("考号:");
     printf("%d\n",p->data.num);
     printf("姓名:");
     printf("%s\n",p->data.name);
     printf("性别:");
     printf("%s\n",p->data.sex);
     printf("籍贯:");
     printf("%s\n",p->data.address);
     printf("年龄:");
     printf("%d\n",p->data.age);
     printf("考试类别:");
     printf("%d\n",p->data.type);


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


int create(LinkList *&L)      //修改信息
{
    printf("请输入要修改人的考号i=");
    scanf("%d",&e.num);
    LinkList *p=L->next;         //定义LinkList *p指向第一个元素
while (e.num!=p->data.num&&p->next!=NULL)     //用while循环查找该结点
    {
        p=p->next;
}




if(p->data.num==e.num)
{
printf("允许修改,请输入:姓名 性别 籍贯 年龄 考试类别(1.英语四级 2.英语六级 3.电脑二级 4.电脑四级 5.其它)\n");
scanf("%s %s %s %d %d",&p->data.name,&p->data.sex,&p->data.address,&p->data.age,&p->data.type);
printf("输出修改以后的全部信息:\n\n");
DispList(L);
return 0;


}
printf("没有此考号,不能修改,重新执行修改信息\n");
return 0;
}
/***********************************************************
*功能描述:排序信息
*输入参数:无
*输出参数:从小到大的考号及考生信息
*返回值:无
*其它说明:无
***********************************************************/
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.num<p->data.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,m=0,h=0,i=0,j=0,k=0;
  while(p->next!=NULL)             //用while循环和if语句统计人数
  { n++;
   if(p->next->data.type==1)
       m++;
   if(p->next->data.type==2)
       i++;
   if(p->next->data.type==3)
       h++;
   if(p->next->data.type==4)
       j++;
   if(p->next->data.type==5)
       k++;
   p=p->next;}
  printf("报考的总人数是n=");
  printf("%d\n",n);
  printf("报考英语四级的人数是m=");
  printf("%d\n",m);
  printf("报考英语六级的人数是h=");
  printf("%d\n",h);
  printf("报考电脑二级的人数是i=");
  printf("%d\n",i);
  printf("报考电脑四级的人数是j=");
  printf("%d\n",j);
  printf("报考其它的人数是k=");
  printf("%d\n",k);
}


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


      scanf("%d",&n);
       LinkList *s,*r,*p=L;int i;  //定义变量LinkList *s作为新插入结点变量      定义变量LinkList *r指向尾指针  定义变量LinkList *p作为循环条件变量
        printf("输入考号  姓名 性别 籍贯 年龄 考试类别(1.英语四级 2.英语六级 3.电脑二级 4.电脑四级 5.其它)\n");
        while(p->next!=NULL)    //用while循环找到尾结点,插入新元素
            p=p->next;
        for (i=0;i<n;i++)
        {     s=(LinkList *)malloc(sizeof(LinkList));
              scanf("%d %s %s %s %d %d",&s->data.num,&s->data.name,&s->data.sex,&s->data.address,&s->data.age,&s->data.type);
              p->next=s;
              p=s;
              r=s;
        }
        r->next=NULL;
  }
void display()
{ printf("┏━━━━━━考试报名菜单选择━━━━┓\n");
  printf("┃              1.输入信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              2.输出信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              3.查找信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              4.删除信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              5.修改信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              6.排序信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              7.统计信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              8.插入信息.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              9.释放空间.           ┃\n");
  printf("┣━━━━━━━━━━━━━━━━━━┫\n");
  printf("┃              10.结束程序.          ┃\n");
  printf("┗━━━━━━━━━━━━━━━━━━┛\n");
  system("color F0");
}
void Display(LinkList *L)
{while(true)
{display();
 int a;       //定义变量a作为选择变量
 printf("请输入要操作的序号a=");
 scanf("%d",&a);
 switch(a)       //用switch语句,编写选择项目
 {case 1:
      {CreateListR(L);
      break;}
  case 2:
      {DispList(L);
      break;}
  case 3:
      {LocateElem(L);
      break;}
  case 4:
      {ListDelete(L);
       break;}
  case 5:
      {create(L);
      break;}
  case 6:
      {sort(L);
      break;}
  case 7:
      {sumList(L);
      break;}
  case 8:
      {InsertList(L);
      break;}
  case 9:
      {DestroyList(L);
      break;}
  case 10:
      {
          cout<<"┏━━━━━━━━━━━━━━━┓"<<endl;
          cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
          cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
          cout<<"┃         欢迎再次使用         ┃"<<endl;
          cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
          cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
          cout<<"┗━━━━━━━━━━━━━━━┛"<<endl;
          exit(0);
      }
 }
}
}

/************************************************************
版权所有(C)2017liusiyuan
**文件名称:head.h
*文件标识:无
*内容摘要:该代码包含程序的头文件
*其它说明:无
*当前版本:V1.0
*作者:刘思源
*完成日期:20171221
**修改记录1:
*修改日期:20171221
*版本号:V1.0
*修改人:刘思源
*修改内容:创建

**********************************************************/


head.h:

#ifndef  HEAD


#endif HEAD
#ifndef HEAD_H_INCLUDED


#define HEAD_H_INCLUDED


typedef struct student
{
    int   num;
    char  sex[10];
    char  name[10];
    int   age;
    char  address[10];
    int   type;
}ElemType;


typedef struct LNode  //定义单链表节点类型
{
    ElemType data;   //存放元素值
    struct LNode *next;  //指向后继节点
} LinkList;




void InitList(LinkList *&L); //初始化线性表  建立一个空的单链表,创建一个头结点
void DestroyList(LinkList *&L); //销毁线性表,释放单链表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 InsertList(LinkList *L);   //插入信息
void display() ;
void Display(LinkList *L);//定义变量a作为选择变量


#endif // HEAD_H_INCLUDED

/************************************************************
版权所有(C)2017liusiyuan
**文件名称:mai.ncpp
*文件标识:无
*内容摘要:该代码用于实现程序
*其它说明:无
*当前版本:V1.0
*作者:刘思源
*完成日期:20171221
**修改记录1:
*修改日期:20171221
*版本号:V1.0
*修改人:刘思源
*修改内容:创建

**********************************************************/


main:



#include<stdio.h>
#include"head.h"


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


原创粉丝点击