最近学校在c语言程序设计,选了个学生管理系统,花一个小时写了一写,有的地方写的不好见谅哈~~~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student{
long int num;
char *name;
int age;
char sex;
char *birthday;
char *address;
long int phone;
char *mail;
struct student *left;
struct student *right;
}student;
student * add(student * root,student * tem){
if(root==NULL){
if(root=(student*)malloc(sizeof(student))){
root->left=root->right=NULL;
root->address=strdup(tem->address);
root->age=tem->age;
root->birthday=strdup(tem->birthday);
root->mail=strdup(tem->mail);
root->name=strdup(tem->name);
root->num=tem->num;
root->phone=tem->phone;
root->sex=tem->sex;
}
FILE * f=fopen("D:\\student\\student.txt","wb");
fwrite(root,sizeof(student),1,f);
fclose(f);
}
else if(root->num>tem->num)
root->left=add(root->left,tem);
else if(root->num<tem->num)
root->right=add(root->right,tem);
return root;
}
student * search_num(student * root,long int num){
while(root){
if(root->num>num)
root=root->left;
else if(root->num<num)
root=root->right;
else if(root->num==num)
return root;
}
if(root==NULL)
printf("不存在该学生\n");
return root;
}
student * search_name(student * root,char * name){
if(root!=NULL){
if(strcmp(root->name,name)==0)
return root;
else if(strcmp(root->name,name)>0)
root=search_name(root->left,name);
else if(strcmp(root->name,name)<0)
root=search_name(root->right,name);
}
else
printf("不存在该学生\n");
return root;
}
student * updata(student * root,student * tem,long int num){
if(student * s=search_num(root,num)){
s->address=strdup(tem->address);
s->age=tem->age;
s->birthday=strdup(tem->birthday);
s->mail=strdup(tem->mail);
s->name=strdup(tem->name);
s->num=tem->num;
s->phone=tem->phone;
s->sex=tem->sex;
}
else
printf("不存在该学生\n");
return root;
}
student * findmin(student* root){
while(root->left){
root=root->left;
}
return root;
}
student * deleted(student * root,long int num){
if(root==NULL)
return root;
if(root->num<num)
root->right=deleted(root->right,num);
else if(root->num>num)
root->left=deleted(root->left,num);
else if(root->left!=NULL&&root->right!=NULL){
student * a=findmin(root->right);
root->address=strdup(a->address);
root->age=a->age;
root->birthday=strdup(a->birthday);
root->mail=strdup(a->mail);
root->name=strdup(a->name);
root->num=a->num;
root->phone=a->phone;
root->sex=a->sex;
root->right=deleted(root->right,a->num);
}
else
root=(root->left!=NULL)? root->left:root->right;
return root;
}
void printtree(student * root){
if(root!=NULL){
printf("姓名:%s\n",root->name);
printf("学号:%ld\n",root->num);
printf("地址:%s\n",root->address);
printf("生日:%s\n",root->birthday);
printf("电子邮箱:%s\n",root->mail);
printf("手机号:%ld\n",root->phone);
printf("年龄:%d\n",root->age);
if(root->sex=='m')
printf("男\n");
else
printf("女\n");
printtree(root->left);
printtree(root->right);
}
}
void print(student * root){
if(root){
printf("姓名 :\n",root->name);
printf("学号%ld\n",root->num);
printf("地址%s\n",root->address);
printf("生日%s\n",root->birthday);
printf("电子邮箱%s\n",root->mail);
printf("手机号%ld\n",root->phone);
printf("年龄%d\n",root->age);
if(root->sex=='m')
printf("男\n");
else
printf("女\n");
}
}
student * input(){
student * tem=NULL;
tem=(student *)malloc(sizeof(student));
char name[10];
char address[20];
char mail[20];
char birthday[10];
printf("输入学生信息\n");
printf("姓名\n");
fflush(stdin);
scanf("%s",name);
tem->name=strdup(name);
printf("学号\n");
scanf("%ld",&tem->num);
printf("家庭地址\n");
scanf("%s",address);
tem->address=strdup(address);
printf("性别\n");
fflush(stdin);
scanf("%c",&tem->sex);
printf("电子邮箱\n");
scanf("%s",mail);
tem->mail=strdup(mail);
printf("手机号\n");
scanf("%ld",&tem->phone);
printf("输入年龄\n");
scanf("%d",&tem->age);
printf("输入出生日期 格式 xxxx/xx/xx\n");
scanf("%s",birthday);
tem->birthday=strdup(birthday);
return tem;
}
student * menu(student * root){
printf("-----------------------------------\n");
printf(" ------—学生管理系统------\n");
printf(" 1.按学号查找学生\n");
printf(" 2.按姓名查找学生\n");
printf(" 3.浏览学生\n");
printf(" 4.修改学生\n");
printf(" 5.删除学生\n");
printf(" 6.添加学生\n");
printf(" 0.退出系统\n");
int select;
long int num;
char name[10];
student * tem=NULL;
scanf("%d",&select);
switch(select){
case 1:
printf("按学号查找学生");
scanf("%ld",&num);
print(search_num(root,num));break;
case 2:
printf("按姓名查找学生\n");
scanf("%s",name);
print(search_name(root,name));break;
case 3:
printtree(root);break;
case 4:
printf("输入修改学生学号\n");
//fflush(stdin);
scanf("%ld",&num);
printf("输入修改学生信息\n");
tem=input();
root=updata(root,tem,num);break;
case 5:
printf("输入删除学生学号\n");
scanf("%ld",&num);
root=deleted(root,num);break;
case 6:
tem=input();
root=add(root,tem);break;
case 0:
exit(0);
default:
printf("无效的操作\n");
break;
}
return root;
}
int main(){
student * root=NULL;
while(1)
root=menu(root);
return 0;
}