学生管理系统

简单写了一个学生管理系统,用单链表的方法写的,有问题可以私信我哦

#include "stdio.h"
#include "stdlib.h"

//结构体
typedef struct stu{
	char *stuname;
	char *sex;
	int stunumber;
	int  stuscore;
    struct stu* next; 
}Stu; 

//创建链表 
Stu * creatNode(void)
{
	Stu* head = (Stu*)malloc(sizeof(Stu));//开辟空间 
	head->next = NULL;// 头节点 
	return head;
}
//尾插法 
void AppendStuNode(Stu* link,char *name,char *sex,int number,int score)
{
	Stu* p = link;
	Stu* student=(Stu*)malloc(sizeof(Stu));//devc++  必须要开辟空间,不然会报错 
	int i=0,j=0;
	student->stuname=name;//不开辟空间  会在这里报错 
	student->sex=sex;
	student->stunumber=number;
//	printf("%d %d",	student->stunumber,number);调试 
	student->stuscore=score;
	student->next = NULL; 
	while(p->next!=NULL)
	{
		p=p->next;
	}
	p->next = student;

} 

void SaveStuNode(Stu* link) 
{
	Stu *p=link;
	FILE *fp=NULL;//初始化文件指针变量
	fp=fopen("test.text","w");//test.text是文件名,a+是模式	
	if(fp==NULL)
	{ 
		printf("文件打开失败");
		return; 
	}
	//fprintf(fp,"姓名\t性别\t学号\t\t成绩\n");
	while(p->next!=NULL)
	{
		p=p->next;
		fprintf(fp,"%s %s %d %d\n",&p->stuname,&p->sex,p->stunumber,p->stuscore);
	} 
	printf("保存成功\r\n");
	fclose(fp);		
}
//查询学生信息 
void  SelectStuNode(Stu* link,int id)
{
	Stu* p=link;
	while(p->next!=NULL)
	{
		p=p->next;
		if(p->stunumber = id)
		{
			printf("你查询学生信息\r\n");
			printf("姓名\t性别\t学号\t\t成绩\r\n");
			printf("%s\t%s\t%d\t%d\r\n",&p->stuname,&p->sex,p->stunumber,p->stuscore);	
			return ;	
		}
	}
	printf("没有此学生信息\r\n"); 
}
//打印学生信息 
void DisplayStuNode(Stu* link) 
{
	Stu* p= link;
	printf("姓名\t性别\t学号\t\t成绩\r\n");
	while(p->next !=NULL)
	{
		p=p->next;
		printf("%s\t%s\t%d\t%d\r\n",&p->stuname,&p->sex,p->stunumber,p->stuscore);
	}
}
//读取文件 
void ReadStuNode(Stu* link,char *filename)
{
	char *name;
	char *SEX;
	int number;
	int score;
	Stu* p= link;
	FILE *fp=NULL;//初始化文件指针变量
	fp=fopen("test.text","r");//test.text是文件名,r是模式	
	if(fp==NULL)
	{
		printf("文件打开失败");
		return ;	
	}	
	while(!feof(fp)) 
	{
		fscanf(fp,"%s %s %d %d\n",&name,&SEX,&number,&score);
	//	printf("%s %s %d %d\r\n",&name,&SEX,number,score);
		AppendStuNode(p,name,SEX,number,score);
		//DisplayStuNode(p);
	}
	fclose(fp);
	printf("读取成功\r\n");
}
//统计学生个数
void CountStuNode(Stu *link)
{
   	Stu* p=link;
	int cnt=0;
	while(p->next!=NULL)
	{
		p=p->next;
		cnt++;	
	}	
	printf("高校总人数为:%d\r\n",cnt);
} 
//修改学生信息 
void AlterStuNode(Stu* link,int id)
{
	Stu* p=link;
	while(p->next!=NULL)
	{
		p=p->next;
		if(p->stunumber = id)
		{
			printf("请修改学生信息\r\n");
			printf("姓名\t年龄\t学号\t\t成绩\r\n");
			scanf("%s %s %d %d",&p->stuname,&p->sex,&p->stunumber,&p->stuscore);	
			printf("修改成功");
			return;	
		}
	}
	printf("没有此学号");	
} 
//删除学生信息 
void DeleteStuNode(Stu* link,int id)
{
	Stu* p=link;
	Stu* a;
	int cnt=0;
	while(p->next!=NULL)
	{
		if(p->next->stunumber = id) //判断下一个节点是否是删除的节点 
		{
			p->next = p->next->next;//    删除节点指向  删除节点的下一节点 
			printf("删除成功\n");
			return;
		}
		p=p->next; //下一个节点 

	}
	printf("没有此学号");	
} 

void menu(void)
{
	printf("---------欢迎使用高校学生管理系统————————\r\n");
	printf("********1.录入学生信息************\r\n");
	printf("********2.打印学生信息************\r\n");
	printf("********3.保存学生信息************\r\n");
	printf("********4.读取学生信息************\r\n");
	printf("********5.查询学生信息************\r\n");
	printf("********6.统计学生信息************\r\n"); 
	printf("********7.修改学生信息************\r\n"); 
	printf("********8.删除学生信息************\r\n");
	printf("********0.退出系统****************\r\n");
	printf("请输入序号选择功能:");

}


int main(void)
{
	int input=0;
	char *name;
	char *SEX;
	int number;
	int  score=0;
	Stu *Student = creatNode();
	char *filename = "test.text"; 
	int id;
	int num;
	char a;
	ReadStuNode(Student,filename);//读取信息 
	while(1)
	{
		menu();
	    input=0;
		scanf("%d",&input);
		switch(input)
		{
			//1.录入学生信息
			case 1:	
				printf("请输入学生信息(姓名、性别、学号、成绩):");
				scanf("%s %s %d %d",&name,&SEX,&number,&score);
				printf("%s\t%s\t%d\t%d\r\n",&name,&SEX,number,score);
				AppendStuNode(Student,name,SEX,number,score);
				printf("添加成功\r\n");	
				//DisplayStuNode(Student);
				break;
			case 2:
				//2.打印学生信息
				DisplayStuNode(Student);
				break;
			case 3:
				//3.保存学生信息
				SaveStuNode(Student);
				break;
			case 4:
				//4.读取学生信息
				ReadStuNode(Student,filename);
				break;
			case 5:
				//查询学生信息
				printf("请输入你要查询学生的学号:");
				scanf("%d",&id); 
				SelectStuNode(Student,id);
				break;
			case 6:
				//6.统计学生信息
				CountStuNode(Student);
				break;
			case 7:
				//7.修改学生信息
				printf("请输入你要修改学生的学号:");
				scanf("%d",&id); 
				AlterStuNode(Student,id);
				break;
			case 8:
				printf("请输入你要删除学生学号:");
				scanf("%d",&id); 
			    DeleteStuNode(Student,id); 
				break;
			case 0:
				printf("是否保存到文件Y/N:");
				scanf("%s",&a);
				if(a=='Y' || a=='y')
				{
					SaveStuNode(Student);		
				}
				exit(0);
				break;
			default:
				break;
		}
		
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值