考试报名管理

来源:互联网 发布:照片识别软件 编辑:程序博客网 时间:2024/05/17 01:50

问题及代码:

/* * 烟台大学计算机与控制工程学院 * 作者:孙启先 * 完成日期:2016年12月23日 * 问题描述:  实现对考生报考相应类别考试的管理和相关操作。 */#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>#include <iostream>using namespace std;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;ElemType e;void InitList(LinkList *&L){L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;}void DestroyList(LinkList *&L){LinkList *p=L,*q=p->next;while (q!=NULL){free(p);p=q;q=p->next;}free(p);printf("此链表为空,请重新选择,创建链表\n\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("输入考号(不能相同)  姓名 性别 籍贯 年龄 考试类别(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  }void DispList(LinkList *L){LinkList *p=L->next;   //定义LinkList *p 指向第一个元素结点while (p!=NULL) //用while循环逐次输出链表元素(条件是p!=null){  printf("考号(不能相同)  姓名 性别 籍贯 年龄 考试类别(1.英语2.电脑3.数学4.语文5.其它)\n");   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)    //定义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.age); printf("考试类别(1.英语2.电脑3.数学4.语文5.其它):"); printf("%d\n",p->data.type); return 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;}}int create(LinkList *&L)   //定义ElemType i  作为修改考号的对象{    printf("请输入要修改人的考号i=");scanf("%d",&e.num);LinkList *p=L;        // 定义LinkList *p     指向头结点while (e.num!=p->data.num&&p!=NULL)    // 用while循环查找该结点{p=p->next;}if(p==NULL)return 0;else{ printf("请输入考号\n");         scanf("%d",&e.num);     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 (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,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("报考英语的人数是e=");  printf("%d\n",m);  printf("报考数学的人数是m=");  printf("%d\n",h);  printf("报考电脑的人数是c=");  printf("%d\n",i);  printf("报考语文的人数是k=");  printf("%d\n",j);  printf("报考其它的人数是q=");  printf("%d\n",k);}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("输入考号(不能相同)  姓名 性别 籍贯 年龄 考试类别(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("          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;    cout<<"**************************************"<<endl;    cout<<"**************************************"<<endl;    exit(0);    } }}} int main(){LinkList *L;  //定义LinkList *L</span> InitList(L); //调用初始化线性表函数</span> Display(L); //调用显示菜单函数</span> return 0;}


运行结果:










0 0