C语言学生信息管理程序

程序要求如下:

实验源码:

/*要求实现学生信息的查找、添加、删除、修改、浏览、保存、从文件读取7 个功能,
每个功能模块均能实现随时从模块中退出,而且可以选择不同的方式实 现所需功能,从而完成一个学生管理系统所需功能。
2.要使用结构体来实现对学生信息的存储。
3.使用链表来实现对学生信息的查找、添加、删除、修改、浏览等操作。
4.使用文件完成数据的存储与读取,要求每次运行某个功能模块时将数据读入结构体中,
并给用户提供保存选项,可以将结构体中的数据保存在文件中。
5.系统制作完成后应实现类似下图所示界面。

补充说明:
学生信息需至少包括:学号,姓名,性别,年龄
成绩信息至少包括三科以上成绩:C语言、高数、英语...*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define LEN sizeof(struct student)

struct student{
	long num;
	char name[30];
	char sex[10];
	int age; 
	float C;
	float math;
	float English;
	struct student *next;
}s3={2001,"xiaoming","man",18,89,67,85,NULL},s2={2002,"xiaohong","woman",17,79,89,92,&s3},s1={5002,"xiaogang","man",18,67,34,45,&s2};

struct student *head=&s1;

void Seanum()
{
	struct student *p=&s1;
	long a;
	printf("请输入要查询的学号:");
	scanf("%ld",&a);
	while(p!=NULL){
		if(a==p->num){
			printf("学号:%ld\n姓名:%s\n性别:%s\n年龄:%d",p->num,p->name,p->sex,p->age);
		}
		p=p->next;
	}
}

void Seaname()
{
	struct student *p=&s1;
	char str[30];
	printf("请输入要查询的姓名:");
	scanf("%s",str);
	while(p!=NULL){
		if(strcmp(str,p->name)==0){
			printf("学号:%ld\n姓名:%s\n性别:%s\n年龄:%d",p->num,p->name,p->sex,p->age);
		}
		p=p->next;
	}
}

void Seasex()
{
	struct student *p=&s1;
	char str[10];
	printf("请输入要查询的性别:");
	scanf("%s",str);
	while(p!=NULL){
		if(strcmp(str,p->sex)==0){
			printf("学号:%ld\n姓名:%s\n性别:%s\n年龄:%d",p->num,p->name,p->sex,p->age);
		}
		p=p->next;
	}
}

void Seaage()
{
	struct student *p=&s1;
	long a;
	printf("请输入要查询的年龄:");
	scanf("%d",&a);
	while(p!=NULL){
		if(a==p->num){
			printf("学号:%ld\n姓名:%s\n性别:%s\n年龄:%d",p->num,p->name,p->sex,p->age);
		}
		p=p->next;
	}
}

void Search1()
{
	int i;
	printf("请输入要查找的类型:\n\t\t1.学号\n\t\t2.姓名\n\t\t3.性别\n\t\t4.年龄\n\t\t0.退出");
	scanf("%d",&i);
	switch(i){
		case 0:					break;
		case 1:		Seanum();	break;
		case 2:		Seaname();	break;
		case 3: 	Seasex();	break;
		case 4: 	Seaage();	break;
	}
	printf("\n");
}

void SeaC()
{
	struct student *p=&s1;
	float a;
	printf("请输入要查询的C语言成绩:");
	scanf("%f",&a);
	while(p!=NULL){
		if(a==p->C){
			printf("学号:%ld\n姓名:%s\n性别:%s\nC语言成绩:%f",p->num,p->name,p->sex,p->C);
		}
		p=p->next;
	}
}

void Seamath()
{
	struct student *p=&s1;
	float a;
	printf("请输入要查询的高数成绩:");
	scanf("%f",&a);
	while(p!=NULL){
		if(a==p->C){
			printf("学号:%ld\n姓名:%s\n性别:%s\n高数成绩:%f",p->num,p->name,p->sex,p->math);
		}
		p=p->next;
	}
}

void SeaEnglish()
{
	struct student *p=&s1;
	float a;
	printf("请输入要查询的英语成绩:");
	scanf("%f",&a);
	while(p!=NULL){
		if(a==p->C){
			printf("学号:%ld\n姓名:%s\n性别:%s\n英语成绩:%f",p->num,p->name,p->sex,p->English);
		}
		p=p->next;
	}
}

void Search2()
{
	int i;
	printf("请输入要查找的类型:\n\t\t1.C语言\n\t\t2.高数\n\t\t3.英语\n");
	scanf("%d",&i);
	switch(i){
		case 1:		SeaC();	break;
		case 2:		Seamath();	break;
		case 3: 	SeaEnglish();	break;
		default:	printf("输入错误!!"); 
	}
	printf("\n");
}

void Add()
{
	struct student *p1,*p2;
	p1=(struct student *)malloc(LEN);
	p2=head;
	if(p1==NULL){
		printf("申请空间失败");
	}else{
		printf("按学号、姓名、性别、年龄、C语言成绩、高数成绩、英语成绩的顺序输入数据:");
		printf("\n");
		scanf("%ld%s%s%d%f%f%f",&p1->num,&p1->name,&p1->sex,&p1->age,&p1->C,&p1->math,&p1->English);
		while(p2!=NULL){
			p2=p2->next;
		}
		p2->next=p1;
		p1->next=NULL;
	}
}

void Delete()
{
	printf("输入要删除数据的学生姓名:");
	char Name[30];
	int n=0;
	scanf("%s",Name);
	struct student *p2,*p1;
	p1=head;
	p2=head;
		while(p1!=NULL){
			n++;
			if(n==1){
				if(strcmp(p1->name,Name)==0){
				head=p1->next;
			}p1=p2->next;
			}
			else if(strcmp(p1->name,Name)==0){
				p2->next=p1->next;
			}
			p2=p1;
			p1=p1->next;
		}
}

void xiugai()
{
	printf("输入要修改数据的学生姓名:");
	char Name[30];
	int n=0;
	scanf("%s",Name);
	struct student *p1;
	p1=head;
		while(p1!=NULL){
			if(strcmp(p1->name,Name)==0){
			printf("按学号、姓名、性别、年龄、C语言成绩、高数成绩、英语成绩的顺序输入数据:");
			printf("\n");
			scanf("%ld %s",&p1->num,&p1->name);
			getchar();
			scanf("%s",&p1->sex);
			getchar();
			scanf("%d %f %f %f",&p1->age,&p1->C,&p1->math,&p1->English);	
			}
			p1=p1->next;
		}
}

void liulan()
{
	struct student *p1=head;
	while(p1!=NULL){
		printf("\t学号:%ld\n \t姓名:%s\n \t性别:%s\n \t年龄:%d\n \tC语言成绩:%f\n \t高数成绩:%f\n \t英语成绩:%f\n",p1->num,p1->name,p1->sex,p1->age,p1->C,p1->math,p1->English);
		printf("\n");
		p1=p1->next;
	}
}

void chengji()
{
	printf("*****************************************************\n");
	printf("\t\t学生成绩信息管理系统\n");
	printf("\t\t  1. 查找\n\t\t  2. 添加\n\t\t  3. 删除\n\t\t  4. 修改\n\t\t  5. 浏览\n");
	printf("*****************************************************\n请选择:");
	int i;
	scanf("%d",&i);
	switch (i){
	case 1:		Search2();	break;
	case 2:		Add();		break;
	case 3: 	Delete();	break;
	case 4: 	xiugai();	break;
	case 5: 	liulan();	break;
	default: 	printf("输入错误!!");
		}
}

void jiben()
{
	printf("*****************************************************\n");
	printf("\t\t学生基本信息管理系统\n");
	printf("\t\t  1. 查找\n\t\t  2. 添加\n\t\t  3. 删除\n\t\t  4. 修改\n\t\t  5. 浏览\n");
	printf("*****************************************************\n请选择:");
	int i;
	scanf("%d",&i);
	switch (i){
	case 1:		Search1();	break;
	case 2:		Add();		break;
	case 3: 	Delete();	break;
	case 4: 	xiugai();	break;
	case 5: 	liulan();	break;
	default: 	printf("输入错误!!");
		}
}

void File()
{
	FILE *fp;
	struct student *p;
	if((fp=fopen("wenjian","wb"))==NULL){
		printf("打开错误!!");
		exit(0);
	}
	p=head;
	while(p!=NULL)
	{
		fwrite(p,LEN,1,fp);
		printf("\n");
		p=p->next;
	}
	fclose(fp);
	printf("成功保存!!");
}

struct student *Fileout()
{
	FILE *fp;
	struct student *p1,*p,*s;
	if((fp=fopen("wenjian","rb"))==NULL){
		return NULL;
	}else if(fgetc(fp)==EOF){
		return NULL;
	}
	rewind(fp);
	p1=(struct student *)malloc(LEN);
	fread(s,LEN,1,fp);
	p=p1;
	while(!feof(fp)){
		s=(struct student *)malloc(LEN);
		if(fread(s,LEN,1,fp)==0){
			break;
		}
		p->next=s;
		p=s;
		p->next=NULL;
	}
	return head;
	fclose(fp);
	
}

void file()
{
	printf("请选择功能:\n\t1.保存\n\t2.从文件读取\n");
	int i;
	scanf("%d",&i);
	switch(i){
		case 1:	File();	break;
		case 2:	Fileout(); break;
		default:	printf("输入错误!!");
	}
}

int main()
{
	printf("*****************************************************\n");
	printf("\t\t学生管理系统\n");
	printf("\t\t  1. 学生基本信息管理\n\t\t  2. 学生成绩信息管理\n\t\t  3. 文件操作\n\t\t  4. 退出\n");
	printf("*****************************************************\n请选择:");
	int i;
	scanf("%d",&i);
	switch (i){
	case 1:		jiben();	break;
	case 2:		chengji();		break;
	case 3: 	file();	break;
	case 4: 	return 0;	break;
	default: 	printf("输入错误!!");
		}
		if(i!=4){
			main();
		}
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值