考试报名管理

简介: 考试报名管理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;
}
相关文章
|
5月前
0.考试介绍
0.考试介绍
|
11月前
|
测试技术
考试在即,预祝ISTQB考试成功!
大家好,ISTQB软件测试认证考试即将到来,相信各位考生都已经做好了充分准备。今天,博主特别为自己和大家送上最真挚的祝福,预祝我们考试成功! 一、备考经验分享 备考期间,我们注意到很多考生都在积极地分享自己的备考经验,比如如何制定学习计划、如何高效地记忆知识点、如何应对考试中的难题等等。这些经验都是宝贵的财富,帮助我们更好地备考,提高考试通过率。 二、加强自信心 在备考期间,不少考生会感到焦虑和紧张,这是很正常的。但是,在考试前,我们需要加强自信心,相信自己已经做好了充分准备,相信自己能够应对考试中的各种难题。只有充满自信,才能更好地发挥自己的实力。 三、放松心态 考试前的紧张情绪会影响
48 0
|
小程序 API 容器
培训报名小程序报名确认开发
培训报名小程序报名确认开发
|
云安全 弹性计算 负载均衡
阿里云acp专业认证考试有用吗 考试易错题分析
云服务是互联网技术发展的一个重要方向,目前国内云服务领域形成了阿里、腾讯、华为三强鼎力的局面,其中阿里更具优势。因此阿里云认证也就有更强的影响力,是从事阿里云工作的必备资格。阿里云acp考试是阿里云认证体系中的一项,它是针对不同产品类别、依据考生成长阶段而打造的认证考试,旨在验证考生是否具备了使用阿里云产品解决企业实际问题的能力。今天就介绍阿里云acp专业认证考试的相关内容。
305 0
阿里云acp专业认证考试有用吗 考试易错题分析
|
机器学习/深度学习 分布式计算 DataWorks
阿里云认证考试题库靠谱吗?认证考试通过率如何?
阿里认证大使为您介绍: ● 熟悉阿里云大数据相关产品的基本概念,包括大数据计算服务MaxCompute、数据工场 DataWorks(原大数据开发套件DataIDE)、数据集成、QuickBI、机器学习 PAI 等(下同)
380 0
阿里云认证考试题库靠谱吗?认证考试通过率如何?
|
云安全 弹性计算 分布式计算
阿里云acp考试通过率怎么样 考试范围
当你问到现在的年轻人敢不敢“躺平”的时候,估计大部分人都会回答“不敢”,因为现在这个社会都是内卷的社会,在各大互联网热搜上连送外卖的小哥都开始内卷了,一些毕业于985、211的学生都加入了外卖小哥行列,看完这些,试问还有谁敢“躺平”,不敢“躺平”的人都
549 0
阿里云acp考试通过率怎么样 考试范围
|
安全 网络安全 云计算
阿里云认证考试报名方法! 阿里云认证考试真题解析。
云计算云服务属于高新技术领域的一种重要方向,国内各大互联网公司都投入大量人力和物力参与其建设,因此它也为从业者提供了良好的发展前途以及丰厚的物质报酬。但是需要指出的是,该领域有较高门槛,考取资格证书是第一步,目前国内主流的有阿里云认证、腾讯云认证和华为云认证,今天就介绍阿里云认证报名方法和须知,并分享认证考试真题以及解析。
659 0
阿里云认证考试报名方法! 阿里云认证考试真题解析。
|
人工智能 运维 架构师
阿里云课程体系,准备考试的赶紧收藏
伴随人工智能、大数据、云架构等等新技术对不断升温,如何用技术降低成本、提高业务能力已经成为了这个时代开发者、架构师所必须思考的问题
155 0
阿里云课程体系,准备考试的赶紧收藏
|
弹性计算 运维 安全
阿里云认证考试报名方法 阿里云认证题库试题分享
多年以来我国的互联网产业发展迅速,并且取得了很大成就,近几年的云计算云服务领域已经得到了很多互联网巨头的关注,每年都有大量人力物力和财力投入。其中,以阿里云的表现更加出色,不仅占据了近七成的国内市场份额,国际市场份额也攀居到全球第二位。从事该行业的工作,不经有丰厚的薪资报酬,还有良好的发展前途,因此阿里云认证考试热度一直居高不下,今天就为大家分享阿里云认证题库的部分练习题。
444 0
阿里云认证考试报名方法 阿里云认证题库试题分享