考试报名管理

问题及代码:

/* 
* 烟台大学计算机与控制工程学院 
* 作者:孙启先 
* 完成日期: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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
考试报名管理系统设计主要包括以下几个方面: 1. 用户管理:系统应该支持用户的注册和登录功能,考生可以通过注册账号后登录系统进行相关操作。 2. 考试管理:系统需要提供考试信息的发布功能,包括考试科目、考试时间、考试地点等。管理员可以添加、编辑和删除考试信息。 3. 报名管理:考生可以根据自己的需求选择报名参加的考试,系统要支持报名功能,包括选择考试科目和提交报名表等。 4. 缴费管理:系统需要提供在线支付功能,考生可以通过系统完成缴费操作,系统要记录缴费信息并生成缴费凭证。 5. 成绩查询:考生可以通过系统查询自己参加考试的成绩。系统需要记录考生的考试成绩,并提供成绩查询界面。 6. 通知管理:系统应该提供通知功能,管理员可以通过系统发布考试相关通知,考生可以在登录系统后查看通知内容。 7. 数据统计:系统需要对考试报名情况、缴费情况和考试成绩进行数据统计,管理员可以查看统计结果。 8. 安全性:为了保证数据的安全,系统需要设置相应的权限控制和数据加密措施,确保用户信息和成绩等数据不被非法获取。 综上所述,考试报名管理系统设计应包括用户管理考试管理报名管理、缴费管理、成绩查询、通知管理、数据统计和安全性等功能,以提高考试报名的效率和便利性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值