数据结构课程设计--考试报名管理

/*       
* 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;
}




  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值