有没有大神级存在啊, 帮忙搞定一下

来源:互联网 发布:javascript 线程等待 编辑:程序博客网 时间:2024/05/16 08:49

考生报名管理系统(用二叉排序树做)

考生报名管理系统的设计主要是实现对考生报考相应类别考试的管理和相关操作。基本功能如下:
(1)考试报考息录入、添加功能:包括考生的考号、姓名、性别、年龄、籍贯、考试类别等信息。
(2)报考信息查询:可以按考生的考号查询某个考生的报考信息。
(3)报考信息排序:按考生的考号排序或按考试类别排序。
(4)考生报考信息的修改或删除:按考生考号修改或删除某个考生的相关信息。
(5)统计功能:分别统计系统中共有多少人报名、每个考生的报考种类的数量、每种考试类别的考生数量等。

下面是我自己的做的, 但运行不起来

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define MaxSize 100
typedef int KeyType;//定义关键字类型
typedef char InfoType;
typedef struct node//记录类型
{
 KeyType num[MaxSize];//关键字项
 InfoType name[MaxSize];
 InfoType sex[MaxSize];
 int age[MaxSize];
 InfoType nation[MaxSize];
 InfoType style[MaxSize];
 struct node *lchild,*rchild;
}BSTNode;
//int path[MaxSize];//全局变量,用于存放路径
int InsertBST(BSTNode *&p,KeyType k);//二叉排序树的插入和生成
BSTNode *CreatBST(KeyType A[],int n);//建立二叉排序树
void CreathInforBST(BSTNode *bt);//将考生信息录入
BSTNode *SearchBST(BSTNode *bt,KeyType k);//根据关键字num(考号)找到它的地址
void ChaXun(BSTNode *bt,KeyType k);//根据关键字num(考号)查询信息
void ChangeBST(BSTNode *bt,KeyType k);//根据关键字num(考号)修改信息
void Delete1(BSTNode *p,BSTNode *&r);//当被删除*p节点有左右子树的删除过程
void Delete(BSTNode *&p);//从二叉排序树中删除*p节点
int DeleteBST(BSTNode *&bt,KeyType k);//在bt中删除关键字num的节点
void InOrder(BSTNode *bt);//根据关键字k(考号)排序
void SearchStyleBST(BSTNode *bt);//查找某一科目
void StyleBST(BSTNode *bt);//查找科目种类
void SearchNumBST(BSTNode *bt);//统计多少人参加考试
void SumBST(BSTNode *bt);//统计函数
void CaiDanS(int num);//菜单函数

 

 

#include"_decl.h"
int InsertBST(BSTNode *&p,KeyType k)//二叉排序树的插入和生成
{
 if(p==NULL)
 {
  p=(BSTNode *)malloc(sizeof(BSTNode));
  p->num[MaxSize ]=k;
  p->lchild=p->rchild=NULL;
  return 1;
 }
 else if(k==p->num[MaxSize ])
  return 0;
 else if(k<p->num[MaxSize ])
  return InsertBST(p->lchild,k);
 else
  return InsertBST(p->rchild,k);

}
BSTNode *CreatBST(KeyType A[],int n)//建立二叉排序树
{
 BSTNode *bt=NULL;
 int i=0;
 while(i<n)
 {
  InsertBST(bt,A[i]);
  i++;
 }
 return bt;
}
void CreathInforBST(BSTNode *bt)//将考生信息录入
{
 bt=(BSTNode *)malloc(sizeof(BSTNode));
 //bt->sex=malloc(sizeof(BSTNode));
 //bt->age=malloc(sizeof(BSTNode));
 //bt->natio=malloc(sizeof(BSTNode));
 //bt->style=malloc(sizeof(BSTNode));
 printf("%c,%c,%d,%c,%c",bt->name,bt->sex,bt->age,bt->nation,bt->style);

}
BSTNode *SearchBST(BSTNode *bt,KeyType k)//根据关键字num(考号)找到它的地址
{
 if(bt==NULL||bt->num[MaxSize ]==k)
  return bt;
 if(k<bt->num[MaxSize ])
  return SearchBST(bt->lchild,k);
 else
  return SearchBST(bt->rchild,k);
// printf("%c,%c,%d,%c,%c",bt->name,bt->sex,bt->age,bt->nation,bt->style);
}
void ChaXun(BSTNode *bt,KeyType k)//根据关键字num(考号)查询信息
{
 bt=(BSTNode *)malloc(sizeof(BSTNode));//zhu
 SearchBST(bt,k);
 printf("%c,%c,%d,%c,%c",bt->name,bt->sex,bt->age,bt->nation,bt->style);
}

void ChangeBST(BSTNode *bt,KeyType k)//根据关键字num(考号)修改信息
{
 bt=(BSTNode *)malloc(sizeof(BSTNode));//zhu
 SearchBST(bt,k);
 printf("请重新输入该学生的信息:%c,%c,%d,%c,%c",bt->name,bt->sex,bt->age,bt->nation,bt->style);
// printf("请重新输入该学生的信息:%c,%c,%d,%c,%c",name,sex,age,nation,style);

}
void Delete1(BSTNode *p,BSTNode *&r)//当被删除*p节点有左右子树的删除过程
{
 BSTNode *q;
 if(r->rchild!=NULL)
  Delete(p->rchild);
 else
 {
  p->num==r->num;
  q=r;
  r=r->lchild;
  free(q);
 }
}
void Delete(BSTNode *&p)//从二叉排序树中删除*p节点
{
 BSTNode *q;
 if(p->rchild==NULL)
 {
  q=p;
  p=p->lchild;
  free(q);
 }
 else if(p->lchild==NULL)
 {
  q=p;
  p=p->rchild;
  free(q);
 }
 else
  Delete1(p,p->lchild);
}
int DeleteBST(BSTNode *&bt,KeyType k)//在bt中删除关键字num的节点
{
 if(bt==NULL)
  return 0;
 else
 {
  if(k<bt->num[MaxSize])
   return DeleteBST(bt->lchild,k);
  else if(k>bt->num[MaxSize])
   return DeleteBST(bt->rchild,k);
  else
  {
   Delete(bt);
   return 1;
  }
 }

}

void InOrder(BSTNode *bt)//根据关键字k(考号)排序
{
 if(bt!=NULL)
 {
  bt=(BSTNode *)malloc(sizeof(BSTNode));//zhu
  InOrder(bt->lchild);
  printf("%c,%c,%d,%c,%c",bt->name,bt->sex,bt->age,bt->nation,bt->style);
  InOrder(bt->rchild);
 }
}
void SearchStyleBST(BSTNode *bt)//查找某一科目报考人数
{
 int sum=0;
 bt=(BSTNode *)malloc(sizeof(BSTNode));//zhu
 if(bt==NULL)
  sum=0;
 else
 {
  sum++;
  if(bt->style!=bt->lchild->style&&bt->style!=bt->rchild->style)//都不等
   sum=sum;
  if(bt->style==bt->lchild->style&&bt->style==bt->rchild->style)//都相等
   sum=sum+2;
  else
   sum=sum+1;
  SearchStyleBST(bt->lchild);
  SearchStyleBST(bt->lchild);
 }
 printf("%d",sum);
}
void StyleBST(BSTNode *bt)//查找科目种类
{
 int sumstyle=0;
 bt=(BSTNode *)malloc(sizeof(BSTNode));//zhu
 if(bt==NULL)
  sumstyle=0;
 else
 {
  sumstyle++;
  if(bt->style!=bt->lchild->style&&bt->style!=bt->rchild->style)//都不等种类加2
   sumstyle=sumstyle+2;;
  if(bt->style==bt->lchild->style&&bt->style==bt->rchild->style)//都相等种类不加
   sumstyle=1;
  else
   sumstyle=sumstyle+1;//有一个相等种类加1
  StyleBST(bt->lchild);
  StyleBST(bt->rchild);
  
 }
 printf("%d",sumstyle);

}
void SearchNumBST(BSTNode *bt)//统计多少人参加考试
{
 int sumnum=0;
 bt=(BSTNode *)malloc(sizeof(BSTNode));//zhu
 if(bt==NULL)
  sumnum=0;
 else
 {
  sumnum++;
  SearchNumBST(bt->lchild);
  SearchNumBST(bt->rchild);

 }
 printf("%d",sumnum);
}
void SumBST(BSTNode *bt)//统计函数
{
 SearchStyleBST(bt);
 StyleBST(bt);
 SearchNumBST(bt);
 
}
void CaiDanS(int num)//菜单函数
{
 BSTNode *bt;
 //BSTNode bs[MaxSize];
 do
 {
  printf("\n\n\n***************欢迎进入考生报名管理系统**********************\n\n\n\n");
        printf("\n\n 1: 考生报考信息录入 \n");
     printf("\n\n 2: 报考信息查询 \n");
  printf("\n\n 3: 考生信息排序  \n");
  printf("\n\n 4: 考生报考信息的修改  \n");
  printf("\n\n 5: 考生报考信息的删除 \n");
  printf("\n\n 6: 统计功能\n");
  printf("请选择:");
  scanf("%d",&num);
  switch(num)
  {
  case 1:CreathInforBST(bt);
  case 2:ChaXun(bt,num);
  case 3:InOrder(bt);
  case 4:ChangeBST(bt,num);
  case 5: DeleteBST(bt,num);
  case 6:SumBST(bt);

  }
 }while(0);
}

 

#include"_decl.h"
void main()
{
 int num[MaxSize];
 //BSTNode *bt;
 CaiDanS(num[MaxSize ]);

}


 

 


 

 

0 0