考试报名管理

简介: 考试报名管理1.项目简介考试报名工作给各高校报名工作带来了新的挑战,给教务管理部门增加了很大的工作量,报名数据手工录入既费时又会不可避免地出现错误,同时也给不少学生以可乘之机。本项目是对考试报名管理的简单模拟,用菜单选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。2.设计思路

考试报名管理

1.项目简介

考试报名工作给各高校报名工作带来了新的挑战,给教务管理部门增加了很大的工作量,报名数据手工录入既费时又会不可避免地出现错误,同时也给不少学生以可乘之机。本项目是对考试报名管理的简单模拟,用菜单选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。


2.设计思路

本项目的实质是完成对考生信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。


3.数据结构

本项目的数据是一组考生信息,每条考生信息由准考证号、姓名、性别、年龄、报考类别等信息组成,这组考生信息具有相同特性,属于同一数据对象,相邻数据元素之间存在序偶关系。由此可以看出,这些数据也具有线性表中数据元素的性质,所以该系统的数据可以采用线性表来存储。


从上一节的例子中可见,线性表的顺序存储结构的特点是逻辑关系相邻的两个元素在物理位置上也相邻,因此可以随机存储表中任一元素,它的存储位置可用一个简单、直观的公式来表示。然而,从另一个方面来看,这个特点也铸成了这种存储结构的弱点:在做插入或删除操作时,需要移动大量元素。为克服这一缺点,我们引入另一种存储形式――链式存储。链式存储是线性表的另一种表示方法,由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构的弱点,但同时也失去了顺序表可随机存取的特点。


链式存储的优点是插入或删除元素时很方便,使用灵活。缺点是存储密度小,存储空间利用率低。事实上,链表插入、删除运算的快捷是以空间代价来换取时间。

顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。

本项目对考生数据主要进行插入、删除、修改等操作,所以采用链式存储结构比较适合。用结构体类型定义每个考生信息,故该单链表中的每个结点的数据元素结构可描述为:

typedef struct examinee
{ char examno[10];    //准考证号
  char name[10];    //姓名
  char sex;
  float age;
char examtype[5];     //成绩
} ElemType;

程序主要功能:


输入学生信息;输出学生信息;查找学生信息;插入学生信息;修改学生信息;删除学生信息;

函数之间的调用关系:

1.调用函数void CreateListR( )输入相对应学生信息

2.调用函数void DispList( )输出相对应的考生信息

3.调用函数int LocateElem()查找相应学生信息

4.调用函数void InsertList()插入所需要的学生信息

5.调用函数int create() 修改学生信息

6. 调用函数void ListDelete( )删除学生成绩则必须对链表结点进行 删除意味着将某个要删除结点前后的连续打断去掉该结点,使前后指针变量重新连接,完成结点删除任务


详细设计

1.删除学生信息

输入要删除的学生的考号,调用删除函数int ListDelete()。

判断考号num是否存在的实现方法或关键代码:

while(e.num!=q->data.num && q->next!=NULL)
  {
    q=q->next;
  p=p->next;
  }
  if(e.num!=q->data.num)
  {
    printf("抱歉,没有找到!\n");
  return 0;
  }
删除考号为num的学生信息的方法或关键代码:
q=p->next;
  if(q==NULL)
    return 0;
  p->next=q->next;
  free(q);
  printf("输出删除以后的全部信息\n\n");
  DispList(L);
  return 1;

2.添加学生信息

实现添加学生信息的方法或关键代码:

while(p->next!=NULL)
    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;

3.修改学生信息

while(e.num!=p->data.num && p->next!=NULL)
  {
    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;
  }

4.查询学生信息

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.name);
  printf("性别:");
  printf("%s\n",p->data.sex);
  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;
  }

执行结果测试

1、输入学生信息测试结果

11.1.png

2、删除学生信息测试结果11.2.png

3、修改学生信息测试结果

11.3.png

4、查询学生信息测试结果11.4.png

5、添加学生信息测试结果11.5.png

带注释的源程序:

//头文件
#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 CreateListR(LinkList *&L)
{
  int n;
  printf("请输入需要增加的人数n=");
  scanf("%d",&n);
  LinkList *s,*r;
  int i;
  L=(LinkList *)malloc(sizeof(LinkList));
  r=L;
  printf("输入考号:姓名 性别 籍贯 年龄 考试类别(1.英语 2.数据结构 3.数学 4.语文 5.其他)\n");
  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);
  r->next=s;
  r=s;
  }
  r->next=NULL;
}
//输出信息
void DispList(LinkList *L)
{
  LinkList *p=L->next;
  while(p!=NULL)
  { 
  printf("\n输入考号:姓名 性别 籍贯 年龄 考试类别(1.英语 2.数据结构 3.数学 4.语文 5.其他)\n");
    printf("%d %s %s %s %d %d",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;
  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.name);
  printf("性别:");
  printf("%s\n",p->data.sex);
  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)
{
  printf("请输入要删除的考号i=");
  scanf("%d",&e.num);
  LinkList *p=L,*q;
  q=p->next;
  while(e.num!=q->data.num && q->next!=NULL)
  {
    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;
  while(e.num!=p->data.num && p->next!=NULL)
  {
    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 InsertList(LinkList *L)
{
  int n;
  printf("请输入要插入的人数为n=");
  scanf("%d",&n);
  LinkList *s,*r,*p=L;
  int i;
  printf("输入考号:姓名 性别 籍贯 年龄 考试类别(1.英语 2.数据结构 3.数学 4.语文 5.其他)\n");
  while(p->next!=NULL)
    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");
}
//定义变量a为选择变量
void Display(LinkList *L)
{
  while(true)
  {
    display();
  int a;
  printf("请输入要操作的序号a=");
  scanf("%d",&a);
  switch(a)
  {
  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:
    {InsertList(L);break;}
  case 7:
    {
        cout<<"**************************"<<endl;
      cout<<"**************************"<<endl;
      cout<<"******欢迎再次使用******"<<endl;
      cout<<"**************************"<<endl;
      cout<<"**************************"<<endl;
      exit(0);
    }
  }
  }
}
int main()
{
  LinkList *L;
  InitList(L);
  Display(L);
  return 0;
}
相关文章
|
7月前
|
数据挖掘 索引
Elastic 认证考试团购报名第四季
Elastic 认证考试团购报名第四季
43 0
|
7月前
0.考试介绍
0.考试介绍
|
测试技术
考试在即,预祝ISTQB考试成功!
大家好,ISTQB软件测试认证考试即将到来,相信各位考生都已经做好了充分准备。今天,博主特别为自己和大家送上最真挚的祝福,预祝我们考试成功! 一、备考经验分享 备考期间,我们注意到很多考生都在积极地分享自己的备考经验,比如如何制定学习计划、如何高效地记忆知识点、如何应对考试中的难题等等。这些经验都是宝贵的财富,帮助我们更好地备考,提高考试通过率。 二、加强自信心 在备考期间,不少考生会感到焦虑和紧张,这是很正常的。但是,在考试前,我们需要加强自信心,相信自己已经做好了充分准备,相信自己能够应对考试中的各种难题。只有充满自信,才能更好地发挥自己的实力。 三、放松心态 考试前的紧张情绪会影响
56 0
|
小程序 API 容器
培训报名小程序报名确认开发
培训报名小程序报名确认开发
阿里云证书没经验的人可以考吗?要怎么报名?
但是阿里云证书是面对社会所有人群的,不仅有经验的人可以考,没有学习过相关知识、从事过相关工作的人,也可以考取阿里云认证。
|
云安全 人工智能 大数据
阿里云ace认证考试难吗?阿里云认证考试报名方式有哪些?
最近几年比较火的阿里云ace认证考试也是引起了很多网友们的热烈关注,那么这个阿里云ace认证考试难吗?阿里云认证考试报名方式有哪些?下面就让认证大使给大家解答一下相关的疑问。
834 1
阿里云ace认证考试难吗?阿里云认证考试报名方式有哪些?
|
云安全 弹性计算 负载均衡
阿里云acp专业认证考试有用吗 考试易错题分析
云服务是互联网技术发展的一个重要方向,目前国内云服务领域形成了阿里、腾讯、华为三强鼎力的局面,其中阿里更具优势。因此阿里云认证也就有更强的影响力,是从事阿里云工作的必备资格。阿里云acp考试是阿里云认证体系中的一项,它是针对不同产品类别、依据考生成长阶段而打造的认证考试,旨在验证考生是否具备了使用阿里云产品解决企业实际问题的能力。今天就介绍阿里云acp专业认证考试的相关内容。
317 0
阿里云acp专业认证考试有用吗 考试易错题分析
|
存储 安全 固态存储
阿里云aca考试通过率以及试题
不同于阿里云认证的其他考试,阿里云aca考试科目非常多,难度自然是比较高的,那么阿里云aca考试通过率怎么样呢?接下来为我们详细介绍阿里云aca考试通过率以及阿里云aca考试试题。
1041 0
阿里云aca考试通过率以及试题
|
机器学习/深度学习 分布式计算 DataWorks
阿里云认证考试题库靠谱吗?认证考试通过率如何?
阿里认证大使为您介绍: ● 熟悉阿里云大数据相关产品的基本概念,包括大数据计算服务MaxCompute、数据工场 DataWorks(原大数据开发套件DataIDE)、数据集成、QuickBI、机器学习 PAI 等(下同)
394 0
阿里云认证考试题库靠谱吗?认证考试通过率如何?
下一篇
DataWorks