回 帖 发 新 帖 刷新版面

主题:[讨论]求助关于一个学生卡管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>
#define NUM 40

struct student{
  char name[10];
  char id[10];
  char major[10];
  char sex[3];
  char consume[5];
  }List[NUM];
struct tnode{
 struct student key;
 struct tnode *lchild,*rchild;
};
typedef struct tnode TREE;
TREE *head;

int number=0;
void input(); 
void Printconsume();
void BTconsume(); 
void IDsearch();
void inorder(TREE*p);
void end();
void select()
{
 int cmd;
 printf("-------------欢迎使用学生卡管系统-------------\n");
 printf("-------------1.输入学生信息-------------------\n");
 printf("-------------2.查询学生消费记录---------------\n");
 printf("-------------3.记录学生消费信息---------------\n");
 printf("-------------4.按学号查找学生信息-------------\n");
 printf("-------------5.打印所有学生信息---------------\n");
 printf("-------------6.退出系统-----------------------\n");
  printf("请输入1-6进入相应的功能\n");
  scanf("%d",&cmd);
  switch(cmd)
  {
    case 1:  input();break;
    case 2:  Printconsume();break;
    case 3:  BTconsume();break; 
    case 4:  IDsearch(); break;
    case 5:  inorder(head);select();break;
    case 6:  end();break;
    default:;
  }
}
void input()
{
  int cmd=1,i;
  TREE *s,*p,*q;
 while((number<NUM)&&(cmd!=0))
  {
   printf("请输入姓名:\n");
    scanf("%s",List[number].name);
   printf("请输入ID:\n");
    scanf("%s",List[number].id);
   printf("请输入学院:\n");
    scanf("%s",List[number].major);
   printf("请输入性别:\n");
    scanf("%s",List[number].sex);
    system("cls");
   printf("继续输入请按'1'否则请按'0'\n ");
   scanf("%d",&cmd);
   number++;
  }
 if(number==NUM)
    printf("内存已满\n");
 else
    printf("输入结束\n");
  head=NULL;
  for(i=0;i<number;i++)
    {
     s=(TREE*)malloc(sizeof(TREE));
     s->key=List[i];
     s->lchild=NULL;
     s->rchild=NULL;
     if(head==NULL)
       head=s;
     else
       {
        p=head;
        while(p!=NULL)
          {
           q=p;
           if(strcmp(s->key.id,p->key.id)<0)
               p=p->lchild;
           else
               p=p->rchild;
          }
     if(strcmp(s->key.id,q->key.id)<0)
       q->lchild=s;
     else
       q->rchild=s;
      }
    }
  select();
}
void BTconsume()
{int front=-1,rear=-1;
char ID[10];
int a;
TREE *p;
int cmd=1;
while(cmd!=0)
 {
  printf("请输入要查询学生的ID学号\n");
  scanf("%s",ID);
  p=head;
  while(p!=NULL)
      {
      if(strcmp(p->key.id,ID)==0)
         break;
      if(strcmp(p->key.id,ID)>0)
           p=p->lchild;
      else
           p=p->rchild;
      }
  if(p==NULL)
     printf("找不到相关信息!");
  else
        printf("请输入该学生消费情况:\n");
        scanf("%d",&a);
if(front==(rear+1)%5)
    {
    printf("循环队列已满,上溢!\n");
    exit(1);
    }
else
    {
    rear=(rear+1)%5;
    p->key.consume[rear]=a;    
    }
    system("cls");
    printf("继续输入请按'1'否则请按'0'\n ");
   scanf("%d",&cmd);}
select();
}
void Printconsume()
{char ID[10];
int i;
TREE *p;
  printf("请输入要查询学生的ID学号\n");
  scanf("%s",ID);
  p=head;
  while(p!=NULL)
      {
      if(strcmp(p->key.id,ID)==0)
         break;
      if(strcmp(p->key.id,ID)>0)
           p=p->lchild;
      else
           p=p->rchild;
      }
  if(p==NULL)
     printf("找不到相关信息!");
  else
      {printf("该学生近五次的消费情况为:\n");
    for(i=0;i<=4;i++)
    printf("%3d\n",p->key.consume[i]);}
    select(); 

void IDsearch()
 {
 int cmd=1;
 int i;
 TREE *p;
 char ID[10];
 while(cmd!=0)
 {
  i=0;
  printf("请输入要查询学生的ID学号\n");
  scanf("%s",ID);
  p=head;
  while(p!=NULL)
      {
      if(strcmp(p->key.id,ID)==0)
         break;
      if(strcmp(p->key.id,ID)>0)
           p=p->lchild;
      else
           p=p->rchild;
      }
  if(p==NULL)
     printf("找不到相关信息!");
  else
    {
      printf("%s  ",p->key.name);
      printf("%s  ",p->key.id);
      printf("%s  ",p->key.major);
      printf("%s  ",p->key.sex);
      printf("搜索完成,谢谢使用!\n");
     }
     getch();
     system("cls");
   printf("继续查找请输入'1',否则输入'0'?\n ");
   scanf("%d",&cmd);
   select();
  }
 }
void inorder(TREE*p) //中序遍历所建二叉排序树,将得到一个按关键字有序的元素序列
{
 if(p!=NULL)
 {
 inorder(p->lchild);
 printf("----------------------------------------------------------\n");
 printf("       学号      姓名     学院     性别           \n");
 printf("%s     %s     %s    %s     \n",p->key.id,p->key.name,p->key.major,p->key.sex);
 printf("----------------------------------------------------------\n");
 inorder(p->rchild);
 }
}
void end()
  {
  printf("谢谢使用本系统!\n");

}


int main()
  {
   select();
  }
正确的程序了,给大家看看。

回复列表 (共2个回复)

沙发

错误要贴出来,你这样说谁去看啊。。。

板凳


粘贴到自己的编程工具里运行一下错误就出来了啊,所以直接贴代码比较方便啊。

我来回复

您尚未登录,请登录后再回复。点此登录或注册