/*
* Copyright (c) 2016, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:cgh22.project
* 作者:陈光辉
* 完成日期:2016年12月29日
* 版本号:VC++6.0
* 问题描述:本程序是一个有关于考试报名管理系统。实现了增加、删除、修改、查询、显示、排序等功能。*/
头文件ks.h
#include <iomanip>
#include<malloc.h>
#include<iostream>
using namespace std;
typedef struct datatype
{
char KH[12]; //考生考号
char XM[12]; //考生姓名
char XB[4]; //性别
char NL[4]; //年龄
char JG[20]; //籍贯
char KSLB[10]; //考试类别
}DataType; //为结构体命名
typedef struct LNode //节点类型
{
DataType data;
struct LNode * next;
}LinkList;
LinkList * InsetList(LinkList *&p) ; // 1 添加
int ListLength(LinkList *p); // 2 统计
void FindElem(LinkList *p); // 3 查找
void SortList(LinkList *&p); // 4 排序
LinkList * ReList(LinkList *&p); // 5 修改
LinkList * DelList(LinkList *&p); // 6 删除
void DispList(LinkList *p); // 7 输出信息
ks.cpp文件
#include"ks.h"
// 1.报名信息添加函数 尾插法
//===========================================================
LinkList * InsetList(LinkList *&p)
{
LinkList *L=p;
while(L->next!=NULL)
L=L->next;
LinkList *q;
q=(LinkList *)malloc(sizeof(LinkList));
cout<<"考号:";
cin>>q->data.KH;
cout<<"姓名:";
cin>>q->data.XM;
cout<<"性别:";
cin>>q->data.XB;
cout<<"年龄:";
cin>>q->data.NL;
cout<<"籍贯:";
cin>>q->data.JG;
cout<<"考试类别:";
cin>>q->data.KSLB;
q->next=L->next;
L->next=q;
return p;
}
//===========================================================
// 2.报名表人数统计
//=========================================================
int ListLength(LinkList *p)
{
int n=0;
LinkList *L=p;
while(L->next!=NULL)
{
n++;
L=L->next;
}
return n;
}
//===========================================================
// 3.考生信息的查询
//===========================================================
void FindElem(LinkList *p)
{
LinkList *L=p;
char y[99999];
cout<<"请输入需查询者的考号\n";
cin>>y;
while(L!=NULL&&(strcmp(L->data.KH,y)!=0))//||strcmp(L->data.XM,y)!=0))
{
L=L->next;
}
if(L!=NULL)
{
cout<<"------------------------------------------------------------------------------------------------------------------------\n";
cout<<"考生号 姓名 性别 年龄 籍贯 考试类别 \n";
cout<<setiosflags(ios::left)<<setw(11)<<L->data.KH<<setiosflags(ios::left)<<setw(9)<<L->data.XM<<setiosflags(ios::left)<<setw(9)<<L->data.XB<<setiosflags(ios::left)<<setw(12)<<L->data.NL
<<setiosflags(ios::left)<<setw(31)<<L->data.JG<<setiosflags(ios::left)<<setw(0)<<L->data.KSLB<<endl;
cout<<"------------------------------------------------------------------------------------------------------------------------\n";
}
else
cout<<"查无此人\n";
}
//===========================================================
// 4.报名表信息排序 冒泡
//===========================================================
void SortList(LinkList *&p)
{
LinkList *L=p->next,*q,*r;
if(L!=NULL)
{
r=L->next;
L->next=NULL;
L=r;
while(L!=NULL)
{
r=L->next;
q=p;
while(q->next!=NULL && strcmp(q->next->data.KH,L->data.KH)<0)
q=q->next;
L->next=q->next;
q->next=L;
L=r;
}
}
cout<<"排序完成\n";
DispList(p);
}
//===========================================================
// 5.信息修改
//===========================================================
LinkList * ReList(LinkList *&p)
{
LinkList *L;
L=p->next;
if(L!=NULL)
{
char y[12];
cout<<"请输入需修改人的考号\n";
cin>>y;
while(strcmp(L->data.KH,y)!=0)//||strcmp(L->data.XM,y)!=0)
{
L=L->next;
}
for(;;)
{
cout<<"修改哪类信息\n";
cout<<"1.考号 2.姓名 3.性别 4.年龄 5.籍贯 6.考试类别 其它整数退出";
int x;cin>>x;
if(x==1)
{
cin>>L->data.KH;
cout<<"修改完毕\n";
}
if(x==2)
{
cin>>L->data.XM;
cout<<"修改完毕\n";
}
if(x==3)
{
cin>>L->data.XB;
cout<<"修改完毕\n";
}
if(x==4)
{
cin>>L->data.JG;
cout<<"修改完毕\n";
}
if(x==5)
{
cin>>L->data.KSLB;
cout<<"修改完毕\n";
}
else
break;
}
cout<<"确认更改后信息:\n";
cout<<"考生号 姓名 性别 年龄 籍贯 考试类别 \n";
cout<<setiosflags(ios::left)<<setw(11)<<L->data.KH<<setiosflags(ios::left)<<setw(9)<<L->data.XM<<setiosflags(ios::left)<<setw(9)<<L->data.XB<<setiosflags(ios::left)<<setw(12)<<L->data.NL
<<setiosflags(ios::left)<<setw(31)<<L->data.JG<<setiosflags(ios::left)<<setw(0)<<L->data.KSLB<<endl;
}
else
cout<<"表为空\n";
return p;
}
//===========================================================
// 6.考生信息的删除
//===========================================================
LinkList * DelList(LinkList *&p)
{
LinkList *m=p,*s;
char y[12];
cout<<"请输入需删除者的考号\n";
cin>>y;
//if(m!=NULL)
while(m!=NULL&&(strcmp(m->next->data.KH,y)!=0))//||strcmp(m->next->data.XM,y)!=0))
m=m->next;
if(m==NULL)
{
cout<<"未找到此考生\n";
return NULL;
}
s=m->next;
if(s==NULL)
return 0;
m->next=s->next;
free(s);
return p;
}
//===========================================================
// 7.考生信息表的输出
//==========================================================
void DispList(LinkList *p)
{
LinkList *L;
L=p->next;
cout<<"考生报名信息表输出:\n";
cout<<"---------------------------------------------------------------------------------------------------------\n";
cout<<"考生号 姓名 性别 年龄 籍贯 考试类别 \n";
while(L!=NULL)
{
cout<<setiosflags(ios::left)<<setw(11)<<L->data.KH<<setiosflags(ios::left)<<setw(9)<<L->data.XM<<setiosflags(ios::left)<<setw(9)<<L->data.XB<<setiosflags(ios::left)<<setw(12)<<L->data.NL
<<setiosflags(ios::left)<<setw(31)<<L->data.JG<<setiosflags(ios::left)<<setw(0)<<L->data.KSLB<<endl;
L=L->next;
}
cout<<"---------------------------------------------------------------------------------------------------------\n";
cout<<" 输出结束\n";
}
主函数main.cpp
#include"ks.h"
#include<iomanip>
#include<iostream>
using namespace std;
int main()
{
LinkList *p;
int xz;
p=(LinkList *)malloc(sizeof(LinkList));
p->next=NULL;
for(;;)
{
cout<<" 考生报名管理系统 \n";
cout<<"=============================\n";
cout<<" 1.添加考生 \n";
cout<<" 2.统计考生人数 \n";
cout<<" 3.查询考生信息 \n";
cout<<" 4.考生排序 \n";
cout<<" 5.修改考生信息 \n";
cout<<" 6.删除考生信息 \n";
cout<<" 7.输出考生信息表 \n";
cout<<" 0.安全退出系统 \n";
cout<<"=============================\n";
cout<<" 请选择0-7进行操作 \n";
cout<<" 陈光辉 计156-1\n";
cin>>xz;
if(xz==0)
{
cout<<" 您已安全退出系统 \n";
break;
}
switch(xz)
{
case 0:
cout<<" 谢谢使用\n ";
break;
case 1:
{
int K=1;
while(K==1)
{
InsetList(p) ;
cout<<"是否继续添加?(1/0)\n";
cin>>K;
}
break;
}
case 2:
cout<<"当前报名人数为:"<<ListLength(p)<<endl;
break;
case 3:
FindElem(p);
break;
case 4:
SortList(p);
break;
case 5:
ReList(p);
break;
case 6:
DelList(p);
break;
case 7:
DispList(p);
break;
default:
cout<<"输错啦!!!重输= =\n";
}
}
return 0;
}