主题:[讨论]求助关于一个学生卡管理系统
#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();
}
正确的程序了,给大家看看。
#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();
}
正确的程序了,给大家看看。