学生信息管理系统C语言单链表文件实现

 

  • 功能概述:分有教师端和学生端
  •  1、录入学生信息     2、排列学生信息  
     3、修改学生信息     4、删除学生信息     
     5、查找学生信息     6、修改系统密码     
     7、获取学生人数     8、统计分数信息   
     9、重置学生账号     0、退出管理信息
  • 大一上用于熟练C语言语法,是程序设计实践期末的大作业。所以代码方面还有许多不尽人意的地方。
  • 结构体
  • //结构体 
    
    struct xs{
    	char name[20];//姓名 
    	int age;//年龄 
    	char sex[5];//性别 
    	char tel[20];//电话 
    	char bh[20];//
    	int yy;//英语 
    	int sx;//数学 
    	char zh[20];//账号 
    	char mm[20];//密码 
    	char zy[10];//专业 
    };
    struct node{//创建链表 
    	struct node *next;//指针域 
    	struct xs data;
    };

  • main函数
    int main() 
    {
    	int s;
    	struct node* list=creat();//创建了list链表 
    	PrintMode(); //系统菜单界面 
    	scanf("%d",&s);//选择进入教师端还是学生端 
    	while(s!=0&&s!=1&&s!=2){
    		printf("输入错误请重新输入\n");
    		scanf("%d",&s);
    	}
    	if(s==2){
    	system("cls");//清屏 
    	printf("进入教师系统,请稍后\n");
    	sleep(1);
    	char key[100];
    	dlread(key,"key.txt");//读取教师端的登陆密码文件 
    	read(list,"学生管理系统.txt");//读取文件中的学生信息 
    	gdl(key);//教师端登陆函数,传入密码key 
    	int a;
    	while(1){
    	menu();//教师端的菜单 
    	scanf("%d",&a);
    	keydown(a,list,key);//界面选择功能 
    	system("pause");
    	system("cls");
    	write(list,"学生管理系统.txt");//重新将链表的信息写入文件 
    	}
    }
    	if(s==1){//进入学生端 
    		read(list,"学生管理系统.txt");//读取信息 
    		system("cls");
    		printf("进入学生系统,请稍后\n");
    		sleep(1);//延迟效果 
    	    struct xs mem;
    		system("cls");
    		while(1){
    		dawenjinzuimei();//界面 
    		printf("账号:\n");
    		char count[20];
    		scanf("%s",count);//账号输入 
    		printf("密码:\n");
    		char code[20];
    		scanf("%s",code);//密码输入 
    		if(search(list,&mem,count,code))
    		{
    			printf("登录成功!\n");
    			system("pause");
    			system("cls");
    			printf("正在进入系统。。。。。");
    			Sleep(2*1000);
    			system("cls");
    			while(1){
    			studentmenu(mem,list);//选择功能进行 
    			system("cls");
    		}
    			
    		}else{
    			printf("账号或密码错误!\n");
    			system("pause");
    		}
    		system("cls");
    		} 
    	if(s==0){
    		system("cls");
    		printf("退出中\n");
    		sleep(1);
    		exit(0);
    	}
    	return 0;
    }
    }

    链表

  • struct node* creat(){//用这个创建,直接调用
    	struct node* headnode=(struct node*)malloc(sizeof(struct node));
    	headnode->next=NULL;
    	return headnode;
    }
    struct node* list(struct xs data){//存入
    	struct node *newnode=(struct node*)malloc(sizeof(struct node));
    	newnode->next=NULL;
    	newnode->data=data;
    	return newnode;
    }
    void cr(struct node *headnode,struct xs data){//增加节点
    	struct node *newnode=list(data);
    	newnode->next=headnode->next;
    	headnode->next=newnode;
    }

    gdl函数用于教师端登录

  • #include <stdio.h>
    void gdl(char*key)
    {//登陆界面函数
    	printf("\t╔══════════════════════════════════════════════════════════════╗\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                 ._______________________.                    ║\n");
    	printf("\t║                 | _____________________ |                    ║\n");
    	printf("\t║                 | I                   I |                    ║\n");
    	printf("\t║                 | I    教师管理系统   I |                    ║\n");
    	printf("\t║                 | I                   I |                    ║\n");
    	printf("\t║                 | I___________________I |                    ║\n");
    	printf("\t║                 !_______________________!                    ║\n");
    	printf("\t║                     ._[__________]_.                         ║\n");
    	printf("\t║                 .___|_______________|___.                    ║\n");
    	printf("\t║                  |                     |                     ║\n");
    	printf("\t║                  |   请输入密码:      |                     ║\n");
    	printf("\t║                  !_____________________!                     ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t╚══════════════════════════════════════════════════════════════╝\n");
    	char*m;
    	while(1)
    	{
    		m=num();//密码隐藏输入,返回字符串 
    	if(strcmp(m,key)==0)
    	{
    		printf("登录成功\n");
    		printf("请稍等............\n");
    		sleep(1);//延迟 
    		system("cls");
    		break;
    	}else
    	{
    	 printf("密码错误,重新输入\n");
    	}
        }
    }

    各个界面函数

  • void gdyaidawenjin()//学生界面 
    {
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******       信 息 系 统      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******        请选择编号      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******     1. 分 数 信 息     ********\n");
    	printf("\t\t\t******     2. 基 本 信 息     ********\n");
    	printf("\t\t\t******     0. 返 回 上 级     ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    }
    void woaidawenjin()//学生界面 
    {
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******       学 生 系 统      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******        请选择系统      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******     1. 修 改 密 码     ********\n");
    	printf("\t\t\t******     2. 查 询 修 改     ********\n");
    	printf("\t\t\t******     0. 退 出 系 统     ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    }
    void gudeyangaidawenjin()//学生界面 
    {
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******       修 改 系 统      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******        请选择编号      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******     1. 修 改 性 别     ********\n");
    	printf("\t\t\t******     2. 修 改 年 龄     ********\n");
    	printf("\t\t\t******     3. 修 改 账 号     ********\n");
    	printf("\t\t\t******     4. 修 改 电 话     ********\n");
    	printf("\t\t\t******     5. 修 改 密 码     ********\n");
    	printf("\t\t\t******     0. 退 出 菜 单     ********\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    }
    void menu(){//教师主菜单 
        printf("\n");
        printf("*****************************************************\n");
        printf("*                 学生信息管理系统                  *\n");
        printf("*****************************************************\n");
        printf("********************系统功能菜单*********************\n");
        printf("-----------------------     -------------------------\n");
        printf("*****************************************************\n");
        printf("**    1、录入学生信息   *     2、排列学生信息      **\n");
        printf("*****************************************************\n");
        printf("**    3、修改学生信息   *     4、删除学生信息      **\n");
        printf("*****************************************************\n");
        printf("**    5、查找学生信息   *     6、修改系统密码      **\n");
        printf("*****************************************************\n");
        printf("**    7、获取学生人数   *     8、统计分数信息      **\n");
        printf("*****************************************************\n");
        printf("**    9、重置学生账号   *     0、退出管理信息      **\n");
        printf("-----------------------     -------------------------\n");
    }
    void PrintMode(){//系统菜单页面
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******       教 学 系 统      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******        请选择系统      ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******     1. 学 生 系 统     ********\n");
    	printf("\t\t\t******     2. 教 师 系 统     ********\n");
    	printf("\t\t\t******     0. 退 出 系 统     ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t******                        ********\n");
    	printf("\t\t\t**************************************\n");
    	printf("\t\t\t**************************************\n");
    }
    void dawenjinzuimei()
    {
        printf("\t╔══════════════════════════════════════════════════════════════╗\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                 ._______________________.                    ║\n");
    	printf("\t║                 | _____________________ |                    ║\n");
    	printf("\t║                 | I                   I |                    ║\n");
    	printf("\t║                 | I    学生登陆界面   I |                    ║\n");
    	printf("\t║                 | I                   I |                    ║\n");
    	printf("\t║                 | I___________________I |                    ║\n");
    	printf("\t║                 !_______________________!                    ║\n");
    	printf("\t║                     ._[__________]_.                         ║\n");
    	printf("\t║                 .___|_______________|___.                    ║\n");
    	printf("\t║                  |                     |                     ║\n");
    	printf("\t║                  |      我爱肖老师     |                     ║\n");
    	printf("\t║                  !_____________________!                     ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t║                                                              ║\n");
    	printf("\t╚══════════════════════════════════════════════════════════════╝\n");  
    }

    学生端信息更改函数

  • void change2(struct node* L,struct xs mem)//信息更改函数 
    {
    	struct node* p=L->next;
    	int b;//用于选择修改内容 
    	char a[100]; 
    	if(p==NULL){
    		printf("你还未创建链表!\n"); 
    		return;
    	}
    	else{
    	while(p)
    	{
    		system("cls");
    		if(strcmp(mem.bh,p->data.bh)==0 ){
    			printf("查找成功!\n");
    			printf("目前您的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 专业:%s 账号:%s 密码:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.zy,p->data.zh,p->data.mm);
    			system("pause");
    			gudeyangaidawenjin(); 
    			printf("请输入您要修改的部分的选项\n");
    			scanf("%d",&b);
    			sc(L,mem.bh);
    			switch(b)
    			{ 
    		        case 1:printf("性别修改为:\n");
    		               scanf("%s",&p->data.sex );
    		              
    		               break;
    		        case 2:printf("年龄修改为:\n");
    			           scanf("%d",&p->data.age);
    			      
    			           break;
    			    case 3:printf("账号修改为:\n");
    			           scanf("%s",&p->data.zh );
    			    
    			           break;
    			    case 4:printf("电话修改为:\n");
    			           scanf("%s",&p->data.tel );
    			       
    			           break;
    			    case 5:printf("密码修改为:\n");
    			           scanf("%s",&p->data.mm);
    			    
    			    	   break;
    			    case 0:return;
    			    default:printf("选择错误\n");
    			            break; 
    		    }
    		    cr(L,p->data);
    			printf("现在您的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 专业:%s 账号:%s 密码:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.zy,p->data.zh,p->data.mm);
    			return;
    		}
    		p=p->next;
    	}
    	if(p==NULL){
    			printf("不存在的学生信息!请检查信息输入是否有误\n");
    			return;
    		}
    }   
    }

    教师端更改函数

  • void change(struct node* L)//信息更改函数 
    {
    	struct node* p=L->next;
    	int i;
    	int b;//用于选择修改内容 
    	char a[100]; 
    	if(p==NULL){
    		printf("你还未创建链表!\n"); 
    		return;
    	}
    	else{printf("您要修改的学生信息的学号是:\n"); 
    	scanf("%s",a);
    	while(p)
    	{
    		system("cls");
    		if(strcmp(a,p->data.bh)==0 ){
    			printf("查找成功!\n");
    			printf("目前他的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 英语成绩:%d 数学成绩:%d 专业:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.yy,p->data.sx,p->data.zy);
    			zcd();
    			printf("请输入您要修改的部分的选项\n");
    			scanf("%d",&b);
    			switch(b)
    			{ 
    			    case 9:printf("姓名修改为:\n");
    			           scanf("%s",&p->data.name);
    			           printf("性别修改为:\n");
    			           scanf("%s",&p->data.sex);
    			           printf("电话修改为:\n");
    			           scanf("%s",&p->data.tel);
    			           printf("学号修改为:\n");
    			           scanf("%s",&p->data.bh);
    			           printf("年龄修改为:\n");
    			           scanf("%d",&p->data.age); 
    			           printf("英语成绩修改为:\n");
    			           scanf("%d",&p->data.yy);
    			           printf("数学成绩修改为:\n");
    			           scanf("%d",&p->data.sx); 
    			           printf("专业修改为:\n");
    			           scanf("%s",&p->data.zy); 
    			           printf("修改成功\n");
    			         
    			           break;
    		        case 1:printf("姓名修改为:\n");
    		               scanf("%s",&p->data.name );
    		              
    		               break;
    		        case 2:printf("年龄修改为:\n");
    			           scanf("%d",&p->data.age);
    			      
    			           break;
    			    case 3:printf("性别修改为:\n");
    			           scanf("%s",&p->data.sex );
    			    
    			           break;
    			    case 4:printf("电话修改为:\n");
    			           scanf("%s",&p->data.tel );
    			       
    			           break;
    			    case 5:printf("高等数学成绩修改为:\n");
    			           scanf("%d",&p->data.sx);
    			    
    			    	   break;
    				case 6:printf("大学英语成绩修改为:\n");
    			           scanf("%d",&p->data.yy );
    				   
    				       break;
    				case 7:printf("学号修改为:\n");
    			           scanf("%s",&p->data.bh );
    			   
    			           break;
    			    case 8:printf("专业修改为:\n");
    			           scanf("%s",&p->data.zy );
    			   
    			           break;
    			    case 10:return;
    			    default:printf("选择错误\n");
    			            break; 
    		    }
    			printf("现在他的信息是 学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 英语成绩:%d 数学成绩:%d 专业:%s\n",p->data.bh,p->data.name,p->data.sex,p->data.tel,p->data.age,p->data.yy,p->data.sx,p->data.zy);
    			return;
    		}
    		p=p->next;
    	}
    	if(p==NULL){
    			printf("不存在的学生信息!请检查信息输入是否有误\n");
    			return;
    		}
    }   
    }

  • 学生的密码修改函数

    void studentmenu(struct xs mem,struct node*list)
    {
    	//界面 
    	woaidawenjin();//学生界面 
    	int n;
    	scanf("%d",&n);
    	system("cls");
    	switch(n){ 
    		case 1:
    		{
    			printf("密码修改为:\n");
    			           scanf("%s",mem.mm);
    			           sc(list,mem.bh);
    			           cr(list,mem);
    			    write(list,"学生管理系统.txt");
    			    	   break;
    		}
    		case 2:
    		{
    			change2(list,mem); 
    			write(list,"学生管理系统.txt");
    			break;
    		}
    		case 0:
    			exit(0);
    			break;
    	}
    }

    教师的密码更改函数

  • void Pkey(char*key)//密码更改函数 
    {
    	printf("请输入您想要改为的密码:\n");
    	scanf("%s",key);
    	dlwrite(key,"key.txt");
    }

    密码隐藏输入

  • char* num()//密码隐藏输入 
    {
    	char a[100];
    	int i;
    	char m;
    	for(i=0;;i++)
    	{
    		m=getch();
    		if(m=='\r')
    		{
    			break;
    		}
    		if(m=='\b')
    		{
    			if(i>0)
    			{
    				i--;
    				printf("\b \b");
    			}else
    			{
    				putchar(7);
    			}
    		}else
    		{
    			a[i]=m;
    			printf("*");
    		}
    	}
    	a[i]='\0';
    	printf("\n");
    	return a;
    }

    文件操作

  • void read(struct node *headnode,char *file){
    	FILE *p=fopen(file,"r");
    	struct xs data;
    	if(p==NULL){
    		p=fopen(file,"w+");
    	}
    	while(fscanf(p, "%s %s %s %s %d %d %d %s %s %s",&data.bh,&data.name,&data.sex,&data.tel,&data.age,&data.sx,&data.yy,&data.zy,&data.zh,&data.mm)!=EOF){
    		cr(headnode,data);
    	}
    	fclose(p);
    }
    void write(struct node *headnode,char *file){
    	FILE *p=fopen(file,"w");
    	struct node *move=headnode->next;
    	while(move)
    	{
    		fprintf(p, "%s %s %s %s %d %d %d %s %s %s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy,move->data.zh,move->data.mm);
    		move=move->next;
    	}
    	fclose(p);
    }
    
    void dlread(char*key,char*file)//密码文件 
    {
    	FILE *p=fopen(file,"r");
    	if(p==NULL)
    	{
    		p=fopen(key,"w+");
    	}
    	fscanf(p,"%s",key);
    	fclose(p);
    }
    
    void dlwrite(char *key,char*file)//密码读入文件 
    {
    	FILE *p=fopen(file,"w");
    	fprintf(p,"%s",key);
    	fclose(p);
    }

    交互函数

  • void keydown(int a,struct node*list,char *key){
    	struct xs data;
    	switch(a)
    	{
    		system("cls");
    		case 0:
    			gt();
    			break;
    		case 1:
    		gl(list);
    			break;
    		case 2:
    		pl(list);
    			break;
    		case 3:
    			change(list);
    			break;
    		case 4:
    			gshanchu(list);
    			break;
    		case 5:
    			gsearch(list);
    			break;
    		case 6:
    			Pkey(key);
    			break;
    		case 7:
    			n(list);
    			break;
    		case 8:
    			tj(list);
    			break;
    		case 9:
    		{
    			if(	rewrite(list)){
    				printf("重置成功!\n");
    			}
    			break;
    		}
    		default:
    			printf("输入错误");
    			break;
    	}
    }

    查找函数

  • void gll(struct node*list)//浏览函数
    {
    	printf("浏览\n");
    	printflist(list);
    }
    void gsearch(struct node*list)//分类查找 
    {
    	int a;
    	char b[100];
    	printf("查找\n");
    	printf("请选择查找的方式\n");
    	printf("1、姓名查找\n");
    	printf("2、学号查找\n");
    	printf("3、浏览全部学生\n");
    	printf("4、专业查找\n");
    	printf("请输入\n");
    	scanf("%d",&a);
    	while(a!=1&&a!=2&&a!=3&&a!=4)//判断乱输入bug 
    	{
    		printf("请正确输入\n");
    		scanf("%d",&a);
    	}
    	if(a==1)
    	{
    		printf("请输入查找的姓名:\n");
    		scanf("%s",&b);
    		gdy(list,b); 
    	}
    	if(a==2)
    	{
    	printf("输入您想找的人的学号:\n");
    	scanf("%s",&b);
    	cz(list,b);
        }
        if(a==3){
        	gll(list);
    	}
    	if(a==4){
    		printf("输入您想查找的专业:\n");
    		scanf("%s",&b);
    		dwj(list,b); 
    	} 
    }
    void cz(struct node *headnode,char *n){
    	struct node* move=headnode->next;
    	if(move==NULL){
    		printf("数据为空\n");
    		return; 
    	}
    	while(strcmp(move->data.bh,n)!=0){
    		move=move->next;
    		if(move==NULL){
    			printf("未找到\n");
    			return;
    		}
    	}
    	if(move!=NULL){
    			printf("您找的人如下\n");
    			printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    	}
    }
    void dwj(struct node*headnode,char*a)//专业查找 
    {
        struct node* move=headnode->next;//接收传来的头节点 
    	if(move==NULL){
    		printf("数据为空\n");//链表为空, 
    		return;
    	}
    	int b=1;//判断是否找出来人了 
    	while(1){//找到对应的专业就停止循环 
    		if(move!=NULL&&strcmp(a,move->data.zy )==0){
    		    if(b==1)
    			{ 
    			printf("您找的人如下\n");
    		    }
    			printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    			b++;//打印几次您找的人 
    	}
    		if(move==NULL){//循环完了
    		    if(b!=1)//找到人就不打印未找到 
    			{
    				return;
    			}
    			printf("未找到\n");
    			return;
    		}
    		move=move->next;//指向下一个 
    	}
    }
    void gdy(struct node*headnode,char*a)//姓名查找 
    {
        struct node* move=headnode->next;//接收传来的头节点 
    	if(move==NULL){
    		printf("数据为空\n");//链表为空, 
    		return;
    	}
    	int b=1;//判断是否找出来人了 
    	while(1){//找到对应的姓名就停止循环 
    		if(move!=NULL&&strcmp(a,move->data.name)==0){
    		    if(b==1)
    			{ 
    			printf("您找的人如下\n");
    		    }
    			printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    			b++;//打印几次您找的人 
    	}
    		if(move==NULL){//循环完了
    		    if(b!=1)//找到人就不打印未找到 
    			{
    				return;
    			}
    			printf("未找到\n");
    			return;
    		}
    		move=move->next;//指向下一个 
    	}
    }

    检查学号录入唯一性

  • int jc(struct node*head,char *a)//检查是否学号重复 
    {
    	struct node *move=head->next;
    	while(move!=NULL)
    	{
    		if(strcmp(move->data.bh,a)==0)
    		{
    			printf("输入错误,已存在该学号,将返回主界面\n");
    			system("pause");
    			return 1;//输入错误的话就返回1 
    		}
    		move=move->next;
    	}
    	printf("添加成功\n");
    	return 0;//添加成功返回0 
    }

    录入

  • void gl(struct node*list)//录入函数 
    {
    	struct xs data;
    	printf("录入\n");
    	printf("请输入您想输入学生的学号\n");
    	scanf("%s",&data.bh);
    	printf("请输入您想输入学生的姓名\n");
    	scanf("%s",&data.name);
    	printf("请输入您想输入学生的性别\n");
    	scanf("%s",&data.sex);
    	printf("请输入您想输入学生的电话\n");
    	scanf("%s",&data.tel);
    	printf("请输入您想输入学生的年龄\n");
    	scanf("%d",&data.age);
    	printf("请输入您想输入学生的英语成绩\n");
    	scanf("%d",&data.yy);
    	printf("请输入您想输入学生的数学成绩\n");
    	scanf("%d",&data.sx);
    	printf("请输入您想输入学生的专业\n");
    	scanf("%s",&data.zy);
    	int b=jc(list,data.bh);
    	if(b==1)
    	{
    		return; 
    	}
    	cr(list,data);
    }

    浏览全部

  • void printflist(struct node* headnode){
    	struct node *move=headnode->next;
    	while(move){
    		printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    	move=move->next;
    	}
    }

    对于查找中学生分数信息的函数,写的太拉跨了这段,请谅解

  • void tj(struct node*list)
    {
    	int a=1;
    	printf("1、查询优秀的人    90以上\n");
    	printf("2、查询良好的人    80以上\n");
    	printf("3、查询及格的人    60以上\n");
    	printf("4、查询不及格的人  60以下\n");
    	printf("请输入您要查询的编号\n");
    	while(a!=2)
    	{
    	scanf("%d",&a);
    	switch(a)
    	{
    		case 1:youxiu(list);
    		a=2;
    		break;
    		case 2:lh(list);
    		a=2;
    		break;
    		case 3:jg(list);
    		a=2;
    		break;
    		case 4:bjg(list);
    		a=2;
    		default:printf("请重新输入\n");
    		        
    	}
        }
    }
    void youxiu(struct node*headnode)
    {
    	struct node* move=headnode->next;//接收传来的头节点 
    	if(move==NULL){
    		printf("数据为空\n");//链表为空, 
    		return;
    	}
    	int b=1;//判断是否找出来人了 
    	while(1){//找到对应的就停止循环 
    		if(move!=NULL&&move->data.yy+move->data.sx>=90){
    		    if(b==1)
    			{ 
    			printf("您找的人如下\n");
    		    }
    			printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    			b++;//打印几次您找的人 
    	}
    		if(move==NULL){//循环完了
    		    if(b!=1)//找到人就不打印未找到 
    			{
    				return;
    			}
    			printf("未找到\n");
    			return;
    		}
    		move=move->next;//指向下一个 
    	}
    }
    void lh(struct node*headnode)
    {
    	struct node* move=headnode->next;//接收传来的头节点 
    	if(move==NULL){
    		printf("数据为空\n");//链表为空, 
    		return;
    	}
    	int b=1;//判断是否找出来人了 
    	while(1){//找到对应的就停止循环 
    		if(move!=NULL&&move->data.yy+move->data.sx<90&&move->data.yy+move->data.sx>=80){
    		    if(b==1)
    			{ 
    			printf("您找的人如下\n");
    		    }
    			printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    			b++;//打印几次您找的人 
    	}
    		if(move==NULL){//循环完了
    		    if(b!=1)//找到人就不打印未找到 
    			{
    				return;
    			}
    			printf("未找到\n");
    			return;
    		}
    		move=move->next;//指向下一个 
    	}
    }
    void jg(struct node*headnode)
    {
    	struct node* move=headnode->next;//接收传来的头节点 
    	if(move==NULL){
    		printf("数据为空\n");//链表为空, 
    		return;
    	}
    	int b=1;//判断是否找出来人了 
    	while(1){//找到对应的就停止循环 
    		if(move!=NULL&&move->data.yy+move->data.sx>=60){
    		    if(b==1)
    			{ 
    			printf("您找的人如下\n");
    		    }
    			printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    			b++;//打印几次您找的人 
    	}
    		if(move==NULL){//循环完了
    		    if(b!=1)//找到人就不打印未找到 
    			{
    				return;
    			}
    			printf("未找到\n");
    			return;
    		}
    		move=move->next;//指向下一个 
    	}
    }
    void bjg(struct node*headnode)
    {
    	struct node* move=headnode->next;//接收传来的头节点 
    	if(move==NULL){
    		printf("数据为空\n");//链表为空, 
    		return;
    	}
    	int b=1;//判断是否找出来人了 
    	while(1){//找到对应的就停止循环 
    		if(move!=NULL&&move->data.yy+move->data.sx<60){
    		    if(b==1)
    			{ 
    			printf("您找的人如下\n");
    		    }
    			printf("学号:%s 姓名:%s 性别:%s 电话:%s 年龄:%d 高等数学成绩:%d 大学英语成绩:%d 专业:%s\n",move->data.bh,move->data.name,move->data.sex,move->data.tel,move->data.age,move->data.sx,move->data.yy,move->data.zy);
    			b++;//打印几次您找的人 
    	}
    		if(move==NULL){//循环完了
    		    if(b!=1)//找到人就不打印未找到 
    			{
    				return;
    			}
    			printf("未找到\n");
    			return;
    		}
    		move=move->next;//指向下一个 
    	}
    }

    一样拉垮的排列

  • void pl(struct node *list){//选择排列方式 
    	int a,b;
    	printf("1.学号排序\n");
    	printf("2.大学英语成绩从大到小排序\n");
    	printf("3.高数成绩从大到小排序\n");
    	printf("请输入您的选择\n");
    	scanf("%d",&a);
    	while(a!=1&&a!=2&&a!=3){
    		printf("输入错误,请从新输入\n");
    		scanf("%d",&a);
    	}
    	if(a==1){
    		if(line1(list)){
    			printf("排序成功!\n");
    			sleep(1);
    			system("cls");
    			printflist(list);
    		}
    	}
    	if(a==2){
    		if(line2(list)){
    			printf("排序成功!\n");
    			sleep(1);
    			system("cls");
    			printflist(list);
    		}
    	}
    	if(a==3){
    		if(line3(list)){
    			printf("排序成功!\n");
    			sleep(1);
    			system("cls");
    			printflist(list);
    		}
    	}
    }
    int line1(struct node*list)//学号 
    {
    	struct xs a;
    	struct node*pmove=list->next;
    	struct node*pmovefront=list;
    	if(pmove==NULL){
    		printf("学生信息为空!\n");
    		return 0;
    	}else{
    		while(pmove!=NULL){
    			while(pmove->next!=NULL){
    				if(strcmp(pmove->data.bh,pmove->next->data.bh)>0){
    					a.age=pmove->data.age;
    					a.sx=pmove->data.sx;
    					a.yy=pmove->data.yy;
    					strcpy(a.bh,pmove->data.bh);
    					strcpy(a.mm,pmove->data.mm);
    					strcpy(a.name,pmove->data.name);
    					strcpy(a.sex,pmove->data.sex);
    					strcpy(a.tel,pmove->data.tel);
    					strcpy(a.zh,pmove->data.zh);
    					strcpy(a.zy,pmove->data.zy);
    					pmove->data.age=pmove->next->data.age;
    					pmove->data.sx=pmove->next->data.sx;
    					pmove->data.yy=pmove->next->data.yy;
    					strcpy(pmove->data.bh,pmove->next->data.bh);
    					strcpy(pmove->data.mm,pmove->next->data.mm);
    					strcpy(pmove->data.name,pmove->next->data.name);
    					strcpy(pmove->data.sex,pmove->next->data.sex);
    					strcpy(pmove->data.tel,pmove->next->data.tel);
    					strcpy(pmove->data.zh,pmove->next->data.zh);
    					strcpy(pmove->data.zy,pmove->next->data.zy);
    					pmove->next->data.age=a.age;
    					pmove->next->data.sx=a.sx;
    					pmove->next->data.yy=a.yy;
    					strcpy(pmove->next->data.bh,a.bh );
    					strcpy(pmove->next->data.mm,a.mm );
    					strcpy(pmove->next->data.name,a.name );
    					strcpy(pmove->next->data.sex,a.sex );
    					strcpy(pmove->next->data.tel,a.tel );
    					strcpy(pmove->next->data.zh,a.zh );
    					strcpy(pmove->next->data.zy,a.zy );
    				}
    				pmove=pmove->next;
    			}
    			pmove=pmovefront->next;
    			pmovefront=pmove;
    		}
    		return 1;
    	}
    }
    int line2(struct node*list)//英语高到低 
    {
    	struct xs a;
    	struct node*pmove=list->next;
    	struct node*pmovefront=list;
    	if(pmove==NULL){
    		printf("学生信息为空!\n");
    		return 0;
    	}else{
    		while(pmove!=NULL){
    			while(pmove->next!=NULL){
    				if(pmove->data.yy<pmove->next->data.yy){
    					a.age=pmove->data.age;
    					a.sx=pmove->data.sx;
    					a.yy=pmove->data.yy;
    					strcpy(a.bh,pmove->data.bh);
    					strcpy(a.mm,pmove->data.mm);
    					strcpy(a.name,pmove->data.name);
    					strcpy(a.sex,pmove->data.sex);
    					strcpy(a.tel,pmove->data.tel);
    					strcpy(a.zh,pmove->data.zh);
    					strcpy(a.zy,pmove->data.zy);
    					pmove->data.age=pmove->next->data.age;
    					pmove->data.sx=pmove->next->data.sx;
    					pmove->data.yy=pmove->next->data.yy;
    					strcpy(pmove->data.bh,pmove->next->data.bh);
    					strcpy(pmove->data.mm,pmove->next->data.mm);
    					strcpy(pmove->data.name,pmove->next->data.name);
    					strcpy(pmove->data.sex,pmove->next->data.sex);
    					strcpy(pmove->data.tel,pmove->next->data.tel);
    					strcpy(pmove->data.zh,pmove->next->data.zh);
    					strcpy(pmove->data.zy,pmove->next->data.zy);
    					pmove->next->data.age=a.age;
    					pmove->next->data.sx=a.sx;
    					pmove->next->data.yy=a.yy;
    					strcpy(pmove->next->data.bh,a.bh );
    					strcpy(pmove->next->data.mm,a.mm );
    					strcpy(pmove->next->data.name,a.name );
    					strcpy(pmove->next->data.sex,a.sex );
    					strcpy(pmove->next->data.tel,a.tel );
    					strcpy(pmove->next->data.zh,a.zh );
    					strcpy(pmove->next->data.zy,a.zy );
    				}
    				pmove=pmove->next;
    			}
    			pmove=pmovefront->next;
    			pmovefront=pmove;
    		}
    		return 1;
    	}
    }
    int line3(struct node*list)//数学高到低 
    {
    	struct xs a;
    	struct node*pmove=list->next;
    	struct node*pmovefront=list;
    	if(pmove==NULL){
    		printf("学生信息为空!\n");
    		return 0;
    	}else{
    		while(pmove!=NULL){
    			while(pmove->next!=NULL){
    				if(pmove->data.sx<pmove->next->data.sx){
    					a.age=pmove->data.age;
    					a.sx=pmove->data.sx;
    					a.yy=pmove->data.yy;
    					strcpy(a.bh,pmove->data.bh);
    					strcpy(a.mm,pmove->data.mm);
    					strcpy(a.name,pmove->data.name);
    					strcpy(a.sex,pmove->data.sex);
    					strcpy(a.tel,pmove->data.tel);
    					strcpy(a.zh,pmove->data.zh);
    					strcpy(a.zy,pmove->data.zy);
    					pmove->data.age=pmove->next->data.age;
    					pmove->data.sx=pmove->next->data.sx;
    					pmove->data.yy=pmove->next->data.yy;
    					strcpy(pmove->data.bh,pmove->next->data.bh);
    					strcpy(pmove->data.mm,pmove->next->data.mm);
    					strcpy(pmove->data.name,pmove->next->data.name);
    					strcpy(pmove->data.sex,pmove->next->data.sex);
    					strcpy(pmove->data.tel,pmove->next->data.tel);
    					strcpy(pmove->data.zh,pmove->next->data.zh);
    					strcpy(pmove->data.zy,pmove->next->data.zy);
    					pmove->next->data.age=a.age;
    					pmove->next->data.sx=a.sx;
    					pmove->next->data.yy=a.yy;
    					strcpy(pmove->next->data.bh,a.bh );
    					strcpy(pmove->next->data.mm,a.mm );
    					strcpy(pmove->next->data.name,a.name );
    					strcpy(pmove->next->data.sex,a.sex );
    					strcpy(pmove->next->data.tel,a.tel );
    					strcpy(pmove->next->data.zh,a.zh );
    					strcpy(pmove->next->data.zy,a.zy );
    				}
    				pmove=pmove->next;
    			}
    			pmove=pmovefront->next;
    			pmovefront=pmove;
    		}
    		return 1;
    	}
    }
    

    重置功能

  • int rewrite(struct node*list)
    {
    	struct node*pmove=list->next;
    	if(pmove==NULL){
    		printf("学生信息为空!\n");
    		return 0;
    	}else{
    		printf("默认初始账号为学号!\n");
    		printf("请输入初始化密码:\n");
    		char a[20]; 
    		scanf("%s",a);
    		while(pmove){
    			strcpy(pmove->data.zh,pmove->data.bh);
    			strcpy(pmove->data.mm,a);
    			pmove=pmove->next;
    		}
    		return 1;
    	}
    }

    删除

  • void gshanchu(struct node*list)
    {
    	char a[100];
    	printf("删除\n");
    	printf("输入想删除的人的学号\n");
    	scanf("%s",a);
    	sc(list,a);
    }
    void sc(struct node *headnode,char *n){
    	struct node* move=headnode->next;
    	struct node* movef=headnode;
    	if(move==NULL){
    		printf("数据为空,无法删除\n");
    		return;
    	}
    	while(strcmp(move->data.bh,n)!=0){
    		movef=move;
    		move=move->next;
    		if(move==NULL){
    			printf("未找到此人\n");
    			return;
    		}//移动结构体指针 
    	}
    	movef->next=move->next;
    	free(move);
    }

    学生端个人查找

  • int search(struct node*list,struct xs *mem,char *count,char *code)//判断账号密码是否正确并传值给结构体 
    {
    	struct node*pmove=list->next;
    	if(pmove==NULL){
    		return 0;
    	}else{
    		while(pmove){
    			if(strcmp(pmove->data.zh,count)==0&&strcmp(pmove->data.mm,code)==0){
    				mem->age=pmove->data.age;
    				mem->yy=pmove->data.yy;
    				mem->sx=pmove->data.sx;
    				strcpy(mem->name,pmove->data.name);	
    				strcpy(mem->sex,pmove->data.sex);	
    				strcpy(mem->tel,pmove->data.tel);	
    				strcpy(mem->bh,pmove->data.bh);	
    				strcpy(mem->zh,pmove->data.zh);	
    				strcpy(mem->mm,pmove->data.mm);	
    				strcpy(mem->zy,pmove->data.zy);	
    
    				return 1;
    			}
    			pmove=pmove->next;
    		}
    		printf("输入错误\n");
    		return 0;
    	}
     }

    这是加的一个拉垮功能,主要是看着功能多一点的假象,分高一点

  • ​
    void n(struct node *list){
    	int a=0;
    	struct node *move=list->next;
    	while(move){
    		a++;
    		move=move->next;
    	}
    	printf("已录入的学生的人数:");
    	printf("%d\n",a);
    }
    
    ​

    退出程序

  • ​
    void gt()//退出函数 
    {
    	printf("退出\n");
    	system("pause");
    	exit(0);
    }
    
    ​

    其中一些功能都是在CSDN上面先理解别人怎么做到的,自己才学会写的。

  • 这个程序已经答辩过了,老师给了89分。

  • 11
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值