版权所有(C)2017liusiyuan
**文件名称:lsy.cpp
*文件标识:无
*内容摘要:该代码用于创建一个考试报名管理系统
*其它说明:无
*当前版本:V1.0
*作者:刘思源
*完成日期:20171221
**修改记录1:
*修改日期:20171221
*版本号:V1.0
*修改人:刘思源
*修改内容:创建
**********************************************************/
lsy.cpp:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <iostream>
#include "head.h"
using namespace std;
ElemType e;
void InitList(LinkList *&L) //初始化线性表 建立一个空的单链表,创建一个头结点
{
L=(LinkList *)malloc(sizeof(LinkList)); //向系统请求分配内存空间来装LinkList这种类型的指针数据的内存大小
L->next=NULL; //创建头结点,其next域置为NULL
}
/**********************************************************
*功能描述:采用尾差法创建链表
*输入参数:链表总人数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
}
/***********************************************************
*功能描述:销毁线性表,释放单链表L占用的内存空间,即逐一释放全部节点的空间
*输入参数:L
*输出参数:空链表
*返回值:无
*其它说明:无
***********************************************************/
void DestroyList(LinkList *&L) //销毁线性表,释放单链表L占用的内存空间,即逐一释放全部节点的空间 //释放空间
{
LinkList *p=L,*q=L->next;
while (q!=NULL)
{
free(p); //释放内存,p指向的地址不变
p=q;
q=p->next;
}
free(p);
printf("此链表为空,请重新选择,创建链表\n\n\n");
}
/***********************************************************
*功能描述:输出信息
*输入参数:无
*输出参数:全部考生信息
*返回值:无
*其它说明:无
***********************************************************/
void DispList(LinkList *L) //输出信息
{
LinkList *p=L->next; //定义LinkList *p 指向第一个元素结点
while (p!=NULL) //用while循环逐次输出链表元素(条件是p!=null)
{
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) //查找信息
{ printf("请输入要查找的考号i=");
scanf("%d",&e.num);
LinkList *p=L->next; // 定义LinkList *p指向第一个元素结点
while (p!=NULL && p->data.num!=e.num )//用while循环查找要查找的结点
{
p=p->next;
}
if (p==NULL)
printf("没有此考号.\n");
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("考试类别:");
printf("%d\n",p->data.type);
return 1;}
}
/***********************************************************
*功能描述:删除信息
*输入参数:考号
*输出参数:删除完后的全部考生信息
*返回值:无
*其它说明:无
***********************************************************/
int ListDelete(LinkList *&L) //删除信息
{
printf("请输入要删除的考号i=");
scanf("%d",&e.num);
LinkList *p=L,*q; //定义LinkList *p 指向头结点 定义LinkList *q 作为存储删除结点的变量
q=p->next;
while (e.num!=q->data.num &&q->next!=NULL) //用while循环查找该结点,并且用free(q)清空该结点
{
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; //定义LinkList *p指向第一个元素
while (e.num!=p->data.num&&p->next!=NULL) //用while循环查找该结点
{
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 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("报考英语四级的人数是m=");
printf("%d\n",m);
printf("报考英语六级的人数是h=");
printf("%d\n",h);
printf("报考电脑二级的人数是i=");
printf("%d\n",i);
printf("报考电脑四级的人数是j=");
printf("%d\n",j);
printf("报考其它的人数是k=");
printf("%d\n",k);
}
// 功能描述:插入信息
/*********************************************************
*功能描述:插入信息
*输入参数:插入的人数n
*输出参数:无
*返回值:无
*其它说明:无
***********************************************************/
void InsertList(LinkList *L) //插入信息
{ int n;
printf("请输入要插入的人数n="); //定义变量int n作为插入的人数
scanf("%d",&n);
LinkList *s,*r,*p=L;int i; //定义变量LinkList *s作为新插入结点变量 定义变量LinkList *r指向尾指针 定义变量LinkList *p作为循环条件变量
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("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 2.输出信息. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 3.查找信息. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 4.删除信息. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 5.修改信息. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 6.排序信息. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 7.统计信息. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 8.插入信息. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 9.释放空间. ┃\n");
printf("┣━━━━━━━━━━━━━━━━━━┫\n");
printf("┃ 10.结束程序. ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━┛\n");
system("color F0");
}
void Display(LinkList *L)
{while(true)
{display();
int a; //定义变量a作为选择变量
printf("请输入要操作的序号a=");
scanf("%d",&a);
switch(a) //用switch语句,编写选择项目
{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:
{sort(L);
break;}
case 7:
{sumList(L);
break;}
case 8:
{InsertList(L);
break;}
case 9:
{DestroyList(L);
break;}
case 10:
{
cout<<"┏━━━━━━━━━━━━━━━┓"<<endl;
cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
cout<<"┃ 欢迎再次使用 ┃"<<endl;
cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
cout<<"┣━━━━━━━━━━━━━━━┫"<<endl;
cout<<"┗━━━━━━━━━━━━━━━┛"<<endl;
exit(0);
}
}
}
}
/************************************************************
版权所有(C)2017liusiyuan
**文件名称:head.h
*文件标识:无
*内容摘要:该代码包含程序的头文件
*其它说明:无
*当前版本:V1.0
*作者:刘思源
*完成日期:20171221
**修改记录1:
*修改日期:20171221
*版本号:V1.0
*修改人:刘思源
*修改内容:创建
**********************************************************/
head.h:
#ifndef HEAD
#endif HEAD
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
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;
void InitList(LinkList *&L); //初始化线性表 建立一个空的单链表,创建一个头结点
void DestroyList(LinkList *&L); //销毁线性表,释放单链表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 InsertList(LinkList *L); //插入信息
void display() ;
void Display(LinkList *L);//定义变量a作为选择变量
#endif // HEAD_H_INCLUDED
/************************************************************
版权所有(C)2017liusiyuan
**文件名称:mai.ncpp
*文件标识:无
*内容摘要:该代码用于实现程序
*其它说明:无
*当前版本:V1.0
*作者:刘思源
*完成日期:20171221
**修改记录1:
*修改日期:20171221
*版本号:V1.0
*修改人:刘思源
*修改内容:创建
**********************************************************/
main:
#include<stdio.h>
#include"head.h"
int main()
{LinkList *L; //定义LinkList *L
InitList(L); //调用初始化线性表函数
Display(L); //调用显示菜单函数
return 0;
}