c程序课程设计(学生信息管理系统)

最近学校在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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值