考试报名管理系统

来源:互联网 发布:centos 6.8 snmp 编辑:程序博客网 时间:2024/04/27 22:25

/*********************************************************** * 版权所有 (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_INCLUDEDtypedef 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 <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#include <iostream>#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<n;i++)               //使用for循环将新结点逐次插入链表之后(条件是int i<n)</span>        {    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 指向第一个元素结点</span>    while (p!=NULL) //用while循环逐次输出链表元素(条件是p!=null)</span>    {  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   作为查找考号的对象</span>{   printf("请输入要查找的考号i=");    scanf("%d",&e.num);    LinkList *p=L->next;          //定义LinkList *p   指向第一个元素结点</span>    while (p!=NULL && p->data.num!=e.num )     //用while循环查找要查找的结点(条件是p!=NULL && p->data.num!=e.num)</span>    {        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 作为存储删除结点的变量</span>    while (e.num!=p->next->data.num &&p!=NULL)   // 用while循环查找该结点,并且用free(q)清空该结点</span>    {        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  作为修改考号的对象</span>{    printf("请输入要修改人的考号i=");    scanf("%d",&e.num);    LinkList *p=L;         //定义LinkList *p     指向头结点</span>    while (e.num!=p->data.num&&p->next!=NULL)     //用while循环查找该结点</span>    {        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.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;  while(p->next!=NULL)                //用while循环和if语句统计人数</span>  { 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循环找到尾结点,插入新元素</span>            p=p->next;        for (i=0;i<n;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);              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语句,编写选择项目</span> {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<<"**************************************"<<endl;          cout<<"********    谢谢您的使用   **********       "<<endl;          cout<<"**************************************"<<endl;    exit(0);    } }}}
#include <stdio.h>#include "st.h" int main(){LinkList *L;  //定义LinkList *L</span> InitList(L); //调用初始化线性表函数</span> Display(L); //调用显示菜单函数</span> return 0;}



运行图:

输入信息


排序信息


修改信息


统计信息


查找信息


删除信息


插入信息


释放空间


退出程序





原创粉丝点击