精华内容
下载资源
问答
  • C语言链表学生成绩管理系统代码,具体内容可以查看博客说明:https://blog.csdn.net/qq_21480607/article/details/90722185
  • C语言链表实现的学生成绩管理系统,交互友好,包含录入、插入、修改成绩等大量功能,本作业成绩95+,包你满意
  • C语言链表编写学生成绩管理系统

    万次阅读 多人点赞 2018-09-06 20:04:12
    一、设计题目:学生成绩管理系统 二、目的与要求 每位学生记录包含有学号、姓名、性别、出生日期、三门功课的成绩(高等数学、大学英语、C语言)、总分和平均分 系统菜单: (1)录入学生记录 (2)添加学生...

    本代码供读者学习使用,请不要随意转载。

    一、设计题目:学生成绩管理系统

    二、目的与要求
    每位学生记录包含有学号、姓名、性别、出生日期、三门功课的成绩(高等数学、大学英语、C语言)、总分和平均分
    系统菜单:
    (1)录入学生记录
    (2)添加学生记录
    (3)删除学生记录
    (4)修改学生记录(要求输入密码)
    (5)查找学生记录(按学号、按姓名)
    (6)按总分对记录进行降序排列
    (7)将当前结果显示或打印,重新保存进数据文件中
    (8)输出所有学生信息
    (9)计算班级平均分
    (10)修改管理员密码(未保存至文件,程序关闭后失效)
    (11)C语言挂科人数
    (0)结束程序

    #include<stdio.h>
    #include<stdlib.h> 
    #include<string.h>
    #include<malloc.h>
    #include<math.h>
    #define LEN sizeof(struct student)
     struct student
    {
    	struct student *next;
    	long num;
    	char name[8];
    	char sex[4];
    	int year;
    	int month;
    	int day;
    	float c;
    	float math;
    	float eng;
    	float sum;
    };
    
    int n;
    struct student * creat()          //建立基础的学生信息库 
    {
    	struct student * head,*p1,*p2;
    	n=0;
    	p1=p2=(struct student *)malloc(LEN);
    	printf("输入学生的学号为0时,停止录入.\n");
            printf("请输入学生学号:");
    		scanf("%ld",&p1->num);
    		if(p1->num!=0)
    		{
    		printf("请输入学生姓名:");scanf("%s",p1->name);
    		printf("请输入学生性别:");scanf("%s",p1->sex); 
    	 printf("请输入学生生日:\n");
    	 printf("年:");scanf("%d",&p1->year);
    	 printf("月:");scanf("%d",&p1->month);
    	 printf("日:");scanf("%d",&p1->day);
    	    printf("c语言:");scanf("%f",&p1->c);
    	    printf("高数:");scanf("%f",&p1->math);
    	    printf("英语:");scanf("%f",&p1->eng);
    	    p1->sum=p1->c+p1->eng+p1->math;
    		printf("\n");
    	}
    	while(p1->num!=0)
    	{
    		n=n+1;
    		if(n==1)
    		{
    			head=p1;
    		}
    		else
    		{
    			p2->next=p1;
    		}
    		p2=p1;
    		p1=(struct student *)malloc(LEN);
                printf("请输入学生学号:");
    	scanf("%ld",&p1->num);
    	if(p1->num!=0)
    	{
    	printf("请输入学生姓名:");scanf("%s",p1->name);
    	printf("请输入学生性别:");scanf("%s",p1->sex);
    	 printf("请输入学生生日:\n");
    	 printf("年:");scanf("%d",&p1->year);
    	 printf("月:");scanf("%d",&p1->month);
    	 printf("日:");scanf("%d",&p1->day);
    	    printf("c语言:");scanf("%f",&p1->c);
    	    printf("高数:");scanf("%f",&p1->math);
    	    printf("英语:");scanf("%f",&p1->eng);
    	    p1->sum=p1->c+p1->eng+p1->math;
    		printf("\n");
    	}
    	}
         p2->next=NULL;
    	return head;
    }
    
    struct student * del(struct student *head,long num) //删除学生信息 
    {
    	struct student  *p1,*p2;
    	if(head==NULL)
    	{
    		printf("\nlist null!\n");
    		return head;
    	}
    	p1=head;
    	while(num!=p1->num&&p1->next!=NULL)
    	{
    		p2=p1;p1=p1->next;
    	}
    		if(num==p1->num)
    		{
    			if(p1==head)
    				head=p1->next;
    			else
    				p2->next=p1->next;
    			printf("你删除的学生信息为:\n");
    			printf("学号:%ld\n",p1->num);
    					printf("姓名:%s\n",p1->name);
    					printf("性别:%s\n",p1->sex);
    					printf("生日:\n");
    					printf("年:%d\n",p1->year);
    					printf("月:%d\n",p1->month);
    					printf("日:%d\n",p1->day);
    					printf("c语言:%5.2f\n",p1->c);
    					printf("高数:%5.2f\n",p1->math);
    					printf("英语:%5.2f\n",p1->eng);
    					p1->sum=p1->c+p1->math+p1->eng;
    			        printf("总分:%5.2f\n",p1->sum);
    					printf("\n");
    			n=n-1;
    		}
    			else
    				printf("输入有误!\n");
    	    return head;
    }
    
    struct student * insert (struct student *head,struct student *stud) //添加学生信息 
    {
    	struct student * p0,*p1,*p2;
    	p1=head;
    	p0=stud;
    	if(head==NULL)
    	{
    		head=p0;
    		p0->next=NULL;
    	}
    	else
    		while((p0->num>p1->num)&&(p1->next!=NULL))
    		{
    			p2=p1;
    			p1=p1->next;
    		}
    		if(p0->num<=p1->num)
    		{
    			if(head==p1)
    				head=p0;
    			else
    				p2->next=p0;
    			p0->next=p1;
    		}
    		else
    		{
    			p1->next=p0;
    			p0->next=NULL;
    		}
    		n=n+1;
    		return head;
    }
    
    
    
              
    void sort(struct student  *head) //排序 
    {
        struct student *p, *q, *max;
        long temp1;
        char temp2[4],temp9[4];
        int temp3,temp4,temp5;
        float temp,temp6,temp7,temp8;
        p = head;
        while (p != NULL)
        {
            max = p;
            q = p->next;
            while (q != NULL)
            {
                if (max->sum < q->sum)
                    max = q;
                q = q->next;
            }
            // 交换值
            if (max != p)
            {
                temp = max->sum;max->sum = p->sum;p->sum = temp;
                temp1=max->num;max->num=p->num;p->num=temp1;
                strcpy(temp2,max->name);strcpy(max->name,p->name);strcpy(p->name,temp2);
                temp3=max->year;max->year=p->year;p->year=temp3;
                temp4=max->month;max->month=p->month;p->month=temp4;
                temp5=max->day;max->day=p->day;p->day=temp5;
                temp6=max->c;max->c=p->c;p->c=temp6;
    			temp7=max->math;max->math=p->math;p->math=temp7; 
                temp8=max->eng;max->eng=p->eng;p->eng=temp8;
                strcpy(temp9,max->sex);strcpy(max->sex,p->sex);strcpy(p->sex,temp9);
            }
            p = p->next;
        }
    printf("排序以后的学生信息为:\n"); 
    struct student *p1;
      p1 = head;
    int count=1;
    while(p1!=NULL)
    {
        printf("第%d名:\n",count);
    	printf("学号:%ld   ",p1->num);
    					printf("姓名:%s   ",p1->name);
    					printf("生日:");
    					printf("%d.",p1->year);
    					printf("%d.",p1->month);
    					printf("%d   ",p1->day);
    					printf("c语言:%5.3f   ",p1->c);
    					printf("高数:%5.3f   ",p1->math);
    					printf("英语:%5.3f   ",p1->eng);
    	printf("总分:%4.2f   ",p1->sum);
    	printf("\n");
    	count++;
    	p1=p1->next;   
    }
    }
    
    float ave(struct student * head)//求平均数
    {
    	int i;
    	float ave,sum=0;
    	struct student *p;
    	p=head;
    	for(i=0;p!=NULL;i++)
    	{
    		sum=sum+p->sum;
    		p=p->next;
    	}
    	ave=sum/i;
    	return ave;
    }
    
    void change(struct student *head,long num)//修改学生数据 
    {
    	struct student *p;
    	p=head;
    	for(;p!=NULL;)
    	{
    		if(p->num==num)
    		{
    			printf("请输入学生姓名:");scanf("%s",p->name);
    			printf("请输入学生性别:");scanf("%s",p->sex);
    	 printf("请输入学生生日:\n");
    	 printf("年:");scanf("%d",&p->year);
    	 printf("月:");scanf("%d",&p->month);
    	 printf("日:");scanf("%d",&p->day);
    	    printf("c语言:");scanf("%f",&p->c);
    	    printf("高数:");scanf("%f",&p->math);
    	    printf("英语:");scanf("%f",&p->eng);
    	    p->sum=p->c+p->eng+p->math;
    		printf("\n");
    		break;
    		}
    		else
    		{
    			p=p->next;
    		 } 
    	}
    }
    
    void filein(struct student *head)//保存到文件中 
    {
    	FILE *fp;
    	struct student *p;
    	if((fp=fopen("D:\\20161181\\23\\student.dat","wb"))==NULL)//打开文件 
    	{
    		printf("can't open.\n");
    		exit(0);
    	}
    	p=head; 
    	while(p!=NULL)                //将链表的内容存储到文本文件中 
    	{
            fwrite(p,LEN,1,fp);
    		printf("\n");
    		p=p->next;
    	}
    	fclose(fp);
    	printf("成功保存至D:\\20161181\\23\\student.dat\n");
    }
    struct student *fileout(struct student *head)
    {
    	FILE *fp;
    	struct student *p,*s;
    	if((fp=fopen("D:\\20161181\\23\\student.dat","rb"))==NULL)
    		return NULL;
    	else if(fgetc(fp)==EOF)
    		return NULL;
    	rewind(fp);
    	head=(struct student *)malloc(LEN);
    	fread(head,LEN,1,fp);
    	p=head;
    	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);
    
    }
    
    struct student * locate(struct student *head,long num1)//按学号查找
    {
     struct student *p1,*p2;
              p1=head;
              if(head==NULL)    //空链表时返回
              {
                    printf("/n链表为空!/n");
                    return(head);
              }
              else
              {
                    while(num1!=p1->num && p1->next!=NULL)
                    {
                        p2=p1;
                        p1=p1->next;
                    }
    	if(p1->num==num1)//比较输入学号是否与链表中学生学号匹配 
    		{
    		    printf("查找的学生信息为:\n");
    			printf("学号:%ld\n",p1->num);
    			printf("姓名:%s\n",p1->name);
    			printf("性别:%s\n",p1->sex);		                    		 					
    			printf("生日:\n");		                    
    			printf("年:%d\n",p1->year);		                   
    			printf("月:%d\n",p1->month);	                    
    			printf("日:%d\n",p1->day);	                    
    			printf("c语言:%5.3f\n",p1->c);		                    
    			printf("高数:%5.3f\n",p1->math);		                    
    			printf("英语:%5.3f\n",p1->eng);
    			p1->sum=p1->c+p1->eng+p1->math;
    			printf("总分:%5.2f\n",p1->sum);	                   
    			printf("\n");		                   
    		    return head;
    		}
    	else
    	{
    		printf("无该学生数据\n");
    		return head;
    	}
    }
           }
      struct student * locate1(struct student *head)//按姓名查找
    {
    	char name[10];
    	printf("请输入要查询学生的姓名:");
    	scanf("%s",name); 
     struct student *p1,*p2;
              p1=head;
              if(head==NULL)    //空链表时返回
              {
                    printf("/n链表为空!/n");
                    return(head);
              }
              else
              {
                    while(strcmp(name,p1->name)!=0 && p1->next!=NULL)
                    {
                        p2=p1;
                        p1=p1->next;
                    }
    	if(strcmp(name,p1->name)==0)//比较输入姓名与链表中学生姓名是否匹配 
    		{
    		    printf("查找的学生信息为:\n");
    			printf("学号:%ld\n",p1->num);
    			printf("姓名:%s\n",p1->name);
    			printf("性别:%s\n",p1->sex);		                    		 					
    			printf("生日:\n");		                    
    			printf("年:%d\n",p1->year);		                   
    			printf("月:%d\n",p1->month);	                    
    			printf("日:%d\n",p1->day);	                    
    			printf("c语言:%5.3f\n",p1->c);		                    
    			printf("高数:%5.3f\n",p1->math);		                    
    			printf("英语:%5.3f\n",p1->eng);
    			p1->sum=p1->c+p1->eng+p1->math;
    			printf("总分:%5.2f\n",p1->sum);	                   
    			printf("\n");		                   
    		    return head;
    		}
    	else
    	{
    		printf("无该学生数据\n");
    		return head;
    	}
    }
           }
    
    	
    
          //输出学生信息 
     void print(struct student *head)
     {
     	struct student *p;
     	p=head;
     	printf("现在链表里的数据为:\n");
    				while(p!=NULL)
    				{
    				    printf("学号:%ld   ",p->num);
    					printf("姓名:%s   ",p->name);
    					printf("性别:%s   ",p->sex);
    					printf("生日:%d.",p->year);
    					printf("%d.",p->month);
    					printf("%d   ",p->day);
    					printf("c语言:%5.2f   ",p->c);
    					printf("高数:%5.2f   ",p->math);
    					printf("英语:%5.2f   ",p->eng);
    					printf("总分:%5.2f   ",p->sum);
    					printf("\n");
    					p=p->next;
    				}
    				printf("\n");
    }
    void sum(struct student *head)
    {
    	int n=0;
    	struct student *p,*p1;
    	p=head;
    	while(p!=NULL)
    	{
    	if(p->c<60)
    	{
    		n++;	
    	}
    	p=p->next; 
        }
        if(n==0)
    	{ 
    	printf("(o^.^o)本次C语言无人挂科.\n");
        }
    if(n>0)
     { 
     printf("本次C语言挂科人数有%d人\n\n",n);
     printf("挂科人员的学号,姓名如下\n\n");
     }
     p1=head;
     while(p1!=NULL&&p1->c<60)
     {
     	printf("学号:%ld  ",p1->num);
     	printf("姓名:%s\n",p1->name);
     	p1=p1->next;
     }
    
    printf("\n");
    }
    int main()
    {
    	int choose,n;
    	long number,e;
    	char name[6];
    	struct student *head,*p;
    	 char password[10]={"123456"};
    	 char password1[10],password2[10],password3[10],password4[10],num[12];
    	printf("请输入进入学生成绩管理系统的管理员代号和密码:\n系统默认登录密码为:123456.\n管理员代号:");
            scanf("%s",num);
    		printf("密码:"); 
    		scanf("%s",password1);
    		printf("\n");
    	for(;;)
    	{
    		if(strcmp(password1,password)!=0)
    		{
    	printf("输入错误,请重新输入:\n管理员代号:");
    	    scanf("%s",num);
    		printf("\n密码:"); 
    		scanf("%s",password1);
    		printf("\n");
    	    }
    	    else
    	    {
    	    printf("%s管理员成功登陆\n",num); 
    	    
    	    break;
    		}	
    	}
    	        printf("★★★★欢迎使用学生成绩管理系统★★★★\n\n");
    	        printf("---------------------------------------\n");
    	        printf("\t0.退出程序\n\t1.录入学生记录\n\t2.添加学生记录\n");
    			printf("\t3.删除学生记录\n\t4.修改学生记录\n");
    			printf("\t5.查找学生记录\n\t6.按总分对学生记录进行降序排序\n");
    			printf("\t7.将数据保存至文件\n\t8.输出所有学生信息\n\t9.计算班级平均分\n");
    			printf("\t10.修改管理员密码\n\t11.统计C语言挂科人数\n");
    			system("pause");
    			system("cls");
    			head=fileout(head);
    			choose=-1;
    			while(choose!=0)
    			{
    				printf("★★★★欢迎使用学生成绩管理系统★★★★\n");
    				printf("---------------------------------------\n");
    	            printf("\t0.退出程序\n\t1.录入学生记录\n\t2.添加学生记录\n");
    			    printf("\t3.删除学生记录\n\t4.修改学生记录\n");
    			    printf("\t5.查找学生记录\n\t6.按总分对学生记录进行降序排序\n");
    			    printf("\t7.将数据保存至文件\n\t8.输出所有学生信息\n\t9.计算班级平均分\n");
    			    printf("\t10.修改管理员密码\n\t11.统计C语言挂科人数\n");
    				printf("请输入一个数字:\n");
    				scanf("%d",&choose);
    				system("cls");
    				switch(choose)
    				{
    					case 0:
    						printf("\n\n");
    						printf("★★★★期待您的下次使用★★★★");
    						
    						printf("\n\n");
    						break;
    					case 1:
    					 head=creat();
    					 system("pause");
    					 system("cls");
    					 break;
    					 case 2:
    					 	p=(struct student *)malloc(LEN);
    	                    printf("请输入要添加学生学号\n"); 
    					 	printf("学号:\n");
    	                    scanf("%ld",&p->num);
    	                    if(p->num!=0)
    	                    {
    					 		printf("请输入学生姓名:");scanf("%s",p->name);
    					 		printf("请输入学生性别:");scanf("%s",p->sex);
    	                        printf("请输入学生生日:\n");
    	 						printf("年:");scanf("%d",&p->year);
    	 						printf("月:");scanf("%d",&p->month);
    	 						printf("日:");scanf("%d",&p->day);
    	    					printf("c语言:");scanf("%f",&p->c);
    	   		 				printf("高数:");scanf("%f",&p->math);
    	    					printf("英语:");scanf("%f",&p->eng); 
    	    					p->sum=p->c+p->eng+p->math;
    	    					head=insert(head,p);
    	    				}
    	    				system("pause");
    	    				system("cls");
    					 	break;
    					 	case 3:
    					 		printf("输入您要删除的学号:\n");
    					 		scanf("%ld",&e);
    					 		if(e!=0)
    					 		head=del(head,e);
    					 		system("pause");
    					 		system("cls");
    					 	    break;
    					 		case 4:
    					 			int num;
    					 			printf("请输入密码:\n");
    					 			scanf("%s",password4);
    					 			while(strcmp(password,password4)!=0)
    					 			{
    					 					printf("输入错误,请重输:\n");
    					 					scanf("%s",password4);
    								} 
    									 printf("输入密码正确!\n");
    									 printf("请输入要修改学生学号:");
    									 scanf("%ld",&num);
    									 change(head,num); 
    								    system("pause");
    								    system("cls");
    					 				break;
    					 				case 5:
    					 					int ch;
    					 					printf("输入您要查找的学生的内容:\n1.按学号查找\n2.按姓名查找\n");
    					 					scanf("%d",&ch);
    					 					if(ch==1)
    					 					{
    					 						printf("请输入要查询学生学号:");
    					 					scanf("%ld",&number);
    					 					head=locate(head,number);
    					                    printf("\n");
    										}
    										if(ch==2)
    										{
    											head=locate1(head);
    											printf("\n");
    										}
    					                    system("pause");
    					                    system("cls");
    					                    break;
    					 				case 6:
    					 					sort(head);
    					 					system("pause");
    					 					system("cls");
    					 					break;
    					 					case 7:
    					 						filein(head); 
    					 						system("pause");
    					 						system("cls");
    					 						break;					
    					case 8:
    						print(head);
    						system("pause");
    						system("cls");
    						break;
    						case 9:
    							
    							float aver;
    							aver=ave(head);
    							printf("该班平均分为:%4.2f\n",aver);
    							system("pause");
    							system("cls");
    							break;
    							case 10:
    						printf("旧密码:");
    						scanf("%s",password1);
    						printf("新密码:");
    						scanf("%s",password2);
    						printf("请您确认新密码:"); 
    						scanf("%s",password3);
    						for(;;)
    						{
    							if(strcmp(password,password1)!=0)
    							{
    							printf("输入的旧密码有误\n");
    							printf("旧密码:");
    						scanf("%s",password1);
    						printf("新密码:");
    						scanf("%s",password2);
    						printf("请确认新密码:"); 
    						scanf("%s",password3);
    						    }
    							if(strcmp(password2,password3)!=0)
    							{
    							printf("输入的新密码与确认的新密码不一致\n");
    							printf("旧密码:");
    						scanf("%s",password1);
    						printf("新密码:");
    						scanf("%s",password2);
    						printf("请确认新密码:"); 
    						scanf("%s",password3);
    						    }
    						    if(strcmp(password1,password)==0&&strcmp(password2,password3)==0)
    						    {
    						    	printf("成功修改密码.\n");
    						    	break; 
    							}
    						}
    						strcpy(password,password2);
    						system("pause");
    						system("cls");
    						break;
    						case 11:
    							sum(head);
    							system("pause");
    							system("cls");
    							break;
    				}
    			}
    	return 0;
     }
    
    

    1.先输入系统规定密码123456进入学生成绩管理系统。进入后能看到以下界面。
    主界面
    2.按照下图信息进行学生信息的录入。
    学生信息录入
    3.按3删除学号为3的学生信息。
    这里写图片描述
    再按8看看链表中的数据是不是被删除了。
    这里写图片描述
    4.按2添加学生为3的学生信息。
    这里写图片描述
    按8看看添加的效果,程序是按照学号排序的方式插入的。
    这里写图片描述

    5.按数字5查找学生记录。(两种方式。1.按照学号查询 2.按照姓名查询)
    1.按照学号查询
    这里写图片描述
    2.按照姓名查询
    这里写图片描述

    6.按数字6根据总分对学生成绩进行排序。
    这里写图片描述

    7.按数字9计算班级平均分
    8.按数字10进行密码修改(由于未存入文件,再次打开仍然要输入原始密码,此项密码修改只针对第4项功能的修改学生记录时的密码输入)
    这里写图片描述
    9.按数字4进行学生记录的修改(需要输入上次修改密码)
    这里写图片描述

    可以看到原始密码123456已经失效。
    9.按数字11统计C语言挂科人数。
    有挂科人员时,会输出挂科人员的学号和姓名。
    这里写图片描述
    10.按数字7将学生信息保存至文件(文件路径为D:\20161181\23\stu.dat)。
    第二次打开程序时,原有数据会丢失,由于没有做读取文件的功能。

    读者可以自行完善文件的读取功能

    这里写图片描述
    11.按数字0退出程序。

    经测试,上述代码未出现问题。

    关注公众号,获取更多资源。在后台回复学生成绩管理系统,即可获取源码。
    在这里插入图片描述

    每天进步一点点,开心也多一点点

    展开全文
  • 学生成绩管理系统,用C语言链表写的
  • printf("\n\t\t\t 使用学生管理系统1.0\n\n\t\t\t\t\t-----------景炎中学计算机组WJQ\n"); printf("*************************************MENU***************************************\n"); printf("\t\t\t1. ...

    匿名用户

    1级

    2008-04-21 回答

    /*头文件*/

    #include

    #include

    #include /*其它说明*/

    #include /*字符串函数*/

    #include /*内存操作函数*/

    #include /*字符操作函数*/

    #include /*动态地址分配函数*/

    #define LEN sizeof(STUDENT)

    typedef struct stu /*定义结构体数组用于缓存数据*/

    {char num[6];

    char name[5];

    int score[3];

    int sum;

    float average;

    int order;

    struct stu *next;

    }STUDENT;

    /*函数原型*/

    STUDENT *init(); /*初始化函数*/

    int menu_select(); /*菜单函数*/

    STUDENT *create(); /*创建链表*/

    void print(STUDENT *head); /* 显示全部记录*/

    void search(STUDENT *head); /*查找记录*/

    STUDENT *delete(STUDENT *head); /*删除记录*/

    STUDENT *sort(STUDENT *head); /*排序*/

    STUDENT *insert(STUDENT *head,STUDENT *new); /*插入记录*/

    void save(STUDENT *head); /*保存文件*/

    STUDENT *load(); /*读文件*/

    /*主函数界面*/

    main()

    {STUDENT *head,new;

    head=init(); /*链表初始化,使head的值为NULL*/

    for(;;) /*循环无限次*/

    {switch(menu_select())

    {

    case 1:head=create();break;

    case 2:print(head);break;

    case 3:search(head);break;

    case 4:head=delete(head);break;

    case 5:head=sort(head);break;

    case 6:head=insert(head,&new);break; /*&new表示返回地址*/

    case 7:save(head);break;

    case 8:head=load(); break;

    case 9:exit(0); /*如菜单返回值为9则程序结束*/

    }

    }

    }

    /*初始化函数*/

    STUDENT *init()

    {

    return NULL; /*返回空指针*/

    }

    /*菜单选择函数*/

    menu_select()

    {int n;

    struct date d; /*定义时间结构体*/

    getdate(&d); /*读取系统日期并把它放到结构体d中*/

    printf("\n按任一键进入主菜单...... \npress any key to enter the menu......"); /*按任一键进入主菜单*/

    getch(); /*从键盘读取一个字符,但不显示于屏幕*/

    clrscr(); /*清屏*/

    printf("********************************************************************************\n");

    printf("\t\t 欢迎 Welcome to\n");

    printf("\n\t\t\t 使用学生管理系统1.0\n\n\t\t\t\t\t-----------景炎中学计算机组WJQ\n");

    printf("*************************************MENU***************************************\n");

    printf("\t\t\t1. 输入学生成绩记录 Enter the record\n"); /*输入学生成绩记录*/

    printf("\t\t\t2. 显示 Print the record\n"); /*显示*/

    printf("\t\t\t3. 寻找 Search record on name\n"); /*寻找*/

    printf("\t\t\t4. 删除 Delete a record\n"); /*删除*/

    printf("\t\t\t5. 排序 Sort to make new a file\n"); /*排序*/

    printf("\t\t\t6. 插入 Insert record to list\n"); /*插入*/

    printf("\t\t\t7. 保存 Save the file\n"); /*保存*/

    printf("\t\t\t8. 读取 Load the file\n"); /*读取*/

    printf("\t\t\t9. 退出 Quit\n"); /*退出*/

    printf("\n\t\t 制作吴俊遒WJQ Made by Wu Junqiu.\n");

    printf("********************************************************************************\n");

    printf("\t\t\t\t当前系统日期:%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day); /*显示当前系统日期*/

    do{

    printf("\n\t\t\t输入你的选择Enter your choice(1~9):");

    scanf("%d",&n);

    }while(n<1||n>9); /*如果选择项不在1~9之间则重输*/

    return(n); /*返回选择项,主函数根据该数调用相应的函数*/

    }

    /*输入函数*/

    STUDENT *create()

    {int i,s;

    STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/

    clrscr();

    for(;;)

    {p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/

    if(!p) /*如果指针p为空*/

    {printf("\n输出内存溢出. Out of memory."); /*输出内存溢出*/

    return (head); /*返回头指针,下同*/

    }

    printf("输入学号Enter the num(0:list end):");

    scanf("%s",p->num);

    if(p->num[0]=='0') break; /*如果学号首字符为0则结束输入*/

    printf("输入名字Enter the name:");

    scanf("%s",p->name);

    printf("请输入3门成绩Please enter the %d scores\n",3); /*提示开始输入成绩*/

    s=0; /*计算每个学生的总分,初值为0*/

    for(i=0;i<3;i++) /*3门课程循环3次*/

    {

    do{

    printf("成绩score%d:",i+1);

    scanf("%d",&p->score[i]);

    if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/

    printf("数据错误,请重新输入 Data error,please enter again.\n");

    }while(p->score[i]<0 || p->score[i]>100);

    s=s+p->score[i]; /*累加各门成绩*/

    }

    p->sum=s; /*将总分保存*/

    p->average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/

    p->order=0; /*未排序前此值为0*/

    p->next=head; /*将头结点做为新输入结点的后继结点*/

    head=p; /*新输入结点为新的头结点*/

    }

    return(head);

    }

    /* 显示全部记录函数*/

    void print(STUDENT *head)

    {int i=0; /* 统计记录条数*/

    STUDENT *p; /*移动指针*/

    clrscr();

    p=head; /*初值为头指针*/

    printf("\n************************************STUDENT************************************\n");

    printf("-------------------------------------------------------------------------------\n");

    printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");

    printf("-------------------------------------------------------------------------------\n");

    while(p!=NULL)

    {

    i++;

    printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

    i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);

    p=p->next;

    }

    printf("-------------------------------------------------------------------------------\n");

    printf("**************************************END**************************************\n");

    }

    /*查找记录函数*/

    void search(STUDENT *head)

    {STUDENT *p; /* 移动指针*/

    char s[5]; /*存放姓名用的字符数组*/

    clrscr();

    printf("请输入个姓名来查找. Please enter name for searching.\n");

    scanf("%s",s);

    p=head; /*将头指针赋给p*/

    while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/

    p=p->next; /*移动指针,指向下一结点*/

    if(p!=NULL) /*如果指针不为空*/

    {printf("\n*************************************FOUND************************************\n");

    printf("-------------------------------------------------------------------------------\n");

    printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");

    printf("-------------------------------------------------------------------------------\n");

    printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

    p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);

    printf("-------------------------------------------------------------------------------\n");

    printf("***************************************END**************************************\n");

    }

    else

    printf("\n没有该学生 There is no num %s student on the list.\n",s); /*显示没有该学生*/

    }

    /*删除记录函数*/

    STUDENT *delete(STUDENT *head)

    {int n;

    STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/

    char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/

    clrscr();

    printf("请输入要删除的学号 Please enter the deleted num: ");

    scanf("%s",s);

    p1=p2=head; /*给p1和p2赋初值头指针*/

    while(strcmp(p1->num,s) && p1 != NULL) /*当记录的学号不是要找的,或指针不为空时*/

    {p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/

    p1=p1->next; /*将p1指针指向下一条记录*/

    }

    if(strcmp(p1->num,s)==0) /*学号找到了*/

    {printf("**************************************FOUND************************************\n");

    printf("-------------------------------------------------------------------------------\n");

    printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");

    printf("-------------------------------------------------------------------------------\n");

    printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

    p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);

    printf("-------------------------------------------------------------------------------\n");

    printf("***************************************END**************************************\n");

    printf("\n是否要删除,输入Y删除,N则退出\nAre you sure to delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/

    for(;;)

    {scanf("%c",&c);

    if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/

    if(c=='y'||c=='Y')

    {

    if(p1==head) /*若p1==head,说明被删结点是首结点*/

    head=p1->next; /*把第二个结点地址赋予head*/

    else

    p2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/

    n=n-1;

    printf("\n学号为(Num): %s 学生以被删除(student have been deleted.)\n",s);

    printf("别忘了保存. Don't forget to save.\n");break; /*删除后就跳出循环*/

    }

    }

    }

    else

    printf("\n没有这个学生在表上\nThere is no num %s student on the list.\n",s); /*找不到该结点*/

    return(head);

    }

    /*排序函数*/

    STUDENT *sort(STUDENT *head)

    {int i=0; /*保存名次*/

    STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/

    temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/

    head->next=NULL; /*第一个结点为新表的头结点*/

    while(temp!=NULL) /*当原表不为空时,进行排序*/

    {

    t=temp; /*取原表的头结点*/

    temp=temp->next; /*原表头结点指针后移*/

    p1=head; /*设定移动指针p1,从头指针开始*/

    p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/

    while(t->averageaverage&&p1!=NULL) /*作成绩平均分比较*/

    {

    p2=p1; /*待排序点值小,则新表指针后移*/

    p1=p1->next;

    }

    if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/

    {

    t->next=p1; /*待排序点的后继为p*/

    head=t; /*新头结点为待排序点*/

    }

    else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/

    {

    t->next=p1; /*t的后继是p1*/

    p2->next=t; /*p2的后继是t*/

    }

    }

    p1=head; /*已排好序的头指针赋给p1,准备填写名次*/

    while(p1!=NULL) /*当p1不为空时,进行下列操作*/

    {

    i++; /*结点序号*/

    p1->order=i; /*将结点序号赋值给名次*/

    p1=p1->next; /*指针后移*/

    }

    printf("排序成功 Sorting is sucessful.\n"); /*排序成功*/

    return (head);

    }

    /*插入记录函数*/

    STUDENT *insert(STUDENT *head,STUDENT *new)

    {STUDENT *p0,*p1,*p2;

    int n,sum1,i;

    p1=head; /*使p1指向第一个结点*/

    p0=new; /*p0指向要插入的结点*/

    printf("\nPlease enter a new record.\n"); /*提示输入记录信息*/

    printf("输入学号Enter the num:");

    scanf("%s",new->num);

    printf("输入名字Enter the name:");

    scanf("%s",new->name);

    printf("Please enter the %d scores.\n",3);

    sum1=0; /*保存新记录的总分,初值为0*/

    for(i=0;i<3;i++)

    {

    do{

    printf("成绩score%d:",i+1);

    scanf("%d",&new->score[i]);

    if(new->score[i]>100||new->score[i]<0)

    printf("数据错误Data error,please enter again.\n");

    }while(new->score[i]>100||new->score[i]<0);

    sum1=sum1+new->score[i]; /*累加各门成绩*/

    }

    new->sum=sum1; /*将总分存入新记录中*/

    new->average=(float)sum1/3;

    new->order=0;

    if(head==NULL) /*原来的链表是空表*/

    {head=p0;p0->next=NULL;} /*使p0指向的结点作为头结点*/

    else

    {while((p0->averageaverage)&&(p1->next!=NULL))

    {p2=p1; /*使p2指向刚才p1指向的结点*/

    p1=p1->next; /*p1后移一个结点*/

    }

    if(p0->average>=p1->average)

    {if(head==p1)head=p0; /*插到原来第一个结点之前*/

    else p2->next=p0; /*插到p2指向的结点之后*/

    p0->next=p1;}

    else

    {p1->next=p0;p0->next=NULL;} /*插到最后的结点之后*/

    }

    n=n+1; /*结点数加1*/

    head=sort(head); /*调用排序的函数,将学生成绩重新排序*/

    printf("\n学生Student %s 已被更新have been inserted.\n",new->name);

    printf("不要忘了保存Don't forget to save the new file.\n");

    return(head);

    }

    /*保存数据到文件函数*/

    void save(STUDENT *head)

    {FILE *fp; /*定义指向文件的指针*/

    STUDENT *p; /* 定义移动指针*/

    char outfile[10];

    printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score\n");

    scanf("%s",outfile);

    if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/

    {

    printf("打不开文件Cannot open the file\n");

    return; /*若打不开则返回菜单*/

    }

    printf("\n保存中...Saving the file......\n");

    p=head; /*移动指针从头指针开始*/

    while(p!=NULL) /*如p不为空*/

    {

    fwrite(p,LEN,1,fp); /*写入一条记录*/

    p=p->next; /*指针后移*/

    }

    fclose(fp); /*关闭文件*/

    printf("保存成功....Save the file successfully!\n");

    }

    /* 从文件读数据函数*/

    STUDENT *load()

    {STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/

    FILE *fp; /* 定义指向文件的指针*/

    char infile[10];

    printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");

    scanf("%s",infile);

    if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/

    {

    printf("打不开文件Can not open the file.\n");

    return(head);

    }

    printf("\n寻找文件...Loading the file!\n");

    p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/

    if(!p1)

    {

    printf("内存溢出!Out of memory!\n");

    return(head);

    }

    head=p1; /*申请到空间,将其作为头指针*/

    while(!feof(fp)) /*循环读数据直到文件尾结束*/

    {

    if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/

    p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/

    if(!p1->next)

    {

    printf("Out of memory!\n");

    return (head);

    }

    p2=p1; /*使p2指向刚才p1指向的结点*/

    p1=p1->next; /*指针后移,新读入数据链到当前表尾*/

    }

    p2->next=NULL; /*最后一个结点的后继指针为空*/

    fclose(fp);

    printf("\n你成功的从文件中读取了数据!\nYou have success to read data from the file!\n");

    return (head);

    }

    展开全文
  • 要做课程作业了,就学着网上模版写了个链表学生信息系统,但我想分成老师-学生两个登陆模块。思路如下: mian()中设置ahead结构体指针。 老师模块完成学生成绩的增删改查排序(借鉴网上的已完成)。。老师模块结束后...
  • c语言链表-学生成绩管理系统

    千次阅读 2015-09-11 16:47:28
    大学时候用链表写的成绩管理系统,可实现增删查改的功能,代码如下 #include #include #include #include #define L sizeof( struct student ) struct student { long xuehao; char name[20];  ...

    大学时候用链表写的成绩管理系统,可实现增删查改的功能,代码如下


    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    #include<string.h>
    #define L sizeof( struct student )


    struct student
    {
    long xuehao;
    char name[20]; 
    float shudian;
    float english;
    float physics;
    float cyuyan;
    struct student *next;
    };




    struct student *creat()

    struct student *p1,*p2,*head;
    char str[90];
    int n = 0;
    FILE *fp = fopen( "file2.txt","r" );

    if( fp == NULL )
    {
    printf( "cannot open the file" );
     exit( 0 );
    }

    puts( fgets( str,90,fp ) );
    head = p1 = p2 = ( struct student* )malloc(L);
      fscanf( fp,"%ld %s %f %f %f %f",&p1->xuehao,p1->name,&p1->shudian,
              &p1->english,&p1->physics,&p1->cyuyan );
      
    while( !feof( fp ) )
    {
      p1 = ( struct student* )malloc( L );
        fscanf(fp,"%ld %s %f %f %f %f\n",&p1->xuehao,p1->name,&p1->shudian,
          &p1->english,&p1->physics,&p1->cyuyan);
          p2->next = p1;
        p2 = p1;
    }
    p2->next = NULL;
    fclose( fp );
    return( head );
    }




    void search( struct student *head,long num )
    {
    struct student *p;
    printf( "search record: " );
    scanf( "%ld",&num );
    p = head;
    while( p )
    {
    if( p->xuehao == num )
    {
    printf("xuehao:%ld\nname:%s\nshudian:%6.1f\nenglish:%6.1f\nphysics:%6.1f\ncyuyan:%6.1f\n",
    p->xuehao,p->name,p->shudian,
    p->english,p->physics,p->cyuyan);
    break;
    }
    p = p->next;
     }
    }




    void print( struct student *head )
    {
    struct student *p;
    p = head;
    if( head != NULL )
    while( p != NULL )

    printf("%ld    %s  %6.1f  %6.1f  %6.1f   %6.1f\n",p->xuehao,p->name,p->shudian,
    p->english,p->physics,p->cyuyan);
    p = p->next;
    }
    }




    struct student *sort(struct student *head)
    {
    struct student *endpt,*p,*p1,*p2;
    p1 = (struct student *)malloc(L);
    p1->next = head; 
    head = p1;
    for (endpt = NULL; endpt != head; endpt = p) 
    {
    for (p=p1 = head; p1->next->next != endpt; p1 = p1->next)
    {
        if ((p1->next->shudian+p1->next->english+p1->next->physics+
         p1->next->cyuyan)>(p1->next->next->shudian+ p1->next->next->english+
         p1->next->next->physics+ p1->next->next->cyuyan)) 
        {
        p2 = p1->next->next; 
        p1->next->next = p2->next; 
        p2->next = p1->next; 
        p1->next = p2; 
        //p = p1->next->next; 
        }
    }
    }
    p1 = head; 
    head = head->next; 
    return head;


    }






    void save(struct student *head)
    {
    FILE *fp;int i;
    char s[80] = "学号    姓名  数电  英语  物理  c语言 总分 平均分" ;
    struct student *p;
    head = sort(head);
    p = head;

    if( (fp = fopen("file3.txt","w")) == NULL )
    {
    printf( "cannot open the file!\n" );
     exit( 0 );
    }

    fprintf( fp,"%s\n", s );

    while( p != NULL )

    fprintf(fp,"%ld %s %6.1f %6.1f %6.1f %6.1f %6.1f %6.1f\n",
     p->xuehao,p->name,p->shudian,p->english,p->physics,p->cyuyan,
     p->shudian+p->english+p->physics+p->cyuyan,
        (p->shudian+p->english+p->physics+p->cyuyan)/4);
        p = p->next;
    }

    fclose( fp );
    }




    struct student *del( struct student *head,long xuehao )
    {
    struct student *p1,*p2;
    if( head == NULL )
    {
    printf( "\nlist null\n" );
    }
    p1=head;
      int flag = 0;
    while( p1)

    if( xuehao == p1->xuehao )
     {
      flag = 1;
    if( p1 == head )
     {
    head = p1->next;
     }
     else
     {   
    p2->next = p1->next;
    }
      printf("delete xuehao : %ld\n",xuehao);
     }
     p2 = p1;
    p1 = p1->next;
    }
    if( flag == 0 )
    {
    printf("%ld not been found!\n",xuehao);
    }
    return( head );
    }




    struct student *insert( struct student *head,struct student *stu )
    {
    struct student *p0,*p1,*p2;
    p0 = stu;
    p1 = head;

    if( head == NULL )
    {
    head = p0;
     p0->next = NULL;
    }
    else
    {
    while( ( p0->xuehao > p1->xuehao )
          &&( p1->next != NULL ))
    {
    p2 = p1;
    p1 = p1->next;
    }

    if( p0->xuehao <= p1->xuehao )
    {
    if( head == p1 )

    head = p0;
    }
    else
     {
    p2->next = p0;
    p0->next = p1;
    }
    }
    else
    {
    p1->next = p0;
    p0->next = NULL;
    }

    }
      return( head );
    }






    int main( )
    {
    struct student *head,stu;
    long a,b;
    printf( "input records:\n" );
    head = creat();
    print( head );
    search( head , b );
    printf( "\ninput the deleted xuehao:" );
    scanf( "%ld",&a );
    head = del( head , a );
    print(head);
    printf( "\ninput the inserted record:" );
    scanf( "%ld%s%f%f%f%f",&stu.xuehao,stu.name,&stu.shudian,
         &stu.english,&stu.physics,&stu.cyuyan );
      head = insert( head,&stu );
      print( head );
      save( head );
    return 0;
    }

    展开全文
  • 当初准备用数组去实现,发现比较麻烦,对比下,使用链表去实现。效果还不错。实现查询,修改,删除,插入,求总和,平均值,排名功能。在TC上运行通过。代码及注释如下:/*----------------------------------------...

    当初准备用数组去实现,发现比较麻烦,对比下,使用链表去实现。效果还不错。实现查询,修改,删除,插入,求总和,平均值,排名功能。在TC上运行通过。

    代码及注释如下:

    /*--------------------------------------------*/

    /*The name of program:the system management of score*/

    /*---------------------------------------------*/

    #include

    #include

    #include

    #define Max 20

    struct  List                     /*节点结构声明*/

    {

    int Number;

    char Name[Max];

    int Chinese;

    int English;

    int Math;

    int Physical;

    int Chemsitry;

    struct  List *next;

    };

    typedef struct List Node;

    typedef Node *Link;

    struct  student                    /*结构体数组声明*/

    {

    int Number_;

    char Name_[Max];

    int Chinese_;

    int English_;

    int Math_;

    int Physical_;

    int Chemsitry_;

    }student[10]={{0,"Alan",85,90,98,93,86},{1,"Danie",76,70,80,74,75},{2,"Helen",95,98,96,95,94},{3,"Bill",65,60,80,70,74},{4,"Peter",79,65,86,79,80}};

    int M=5;       /*初始学生总数*/

    /*释放链表*/

    void Free_List(Link Head)

    {

    Link Pointer;

    while(Head!=NULL)

    {

    Pointer=Head;

    Head=Head->next;/*消掉下一个节点*/

    free(Pointer);

    }

    }

    /*建立链表*/

    Link Create_List(Link Head)

    {

    Link New;

    Link Pointer;

    int i;

    Head=(Link)malloc(sizeof(Node));/*内存配置*/

    if(Head==NULL)

    printf("allocate failure!\n");/*配置失败*/

    else

    {

    Head->Number=student[0].Number_;  /*初始化*/

    strcpy(Head->Name,student[0].Name_);

    Head->Chinese=student[0].Chinese_;

    Head->English=student[0].English_;

    Head->Math=student[0].Math_;

    Head->Physical=student[0].Physical_;

    Head->Chemsitry=student[0].Chemsitry_;

    Head->next=NULL;

    Pointer=Head;

    for(i=1;i<10;i++)

    {

    New=(Link)malloc(sizeof(Node));

    New->Number=student[i].Number_;

    strcpy(New->Name,student[i].Name_);

    New->Chinese=student[i].Chinese_;

    New->English=student[i].English_;

    New->Math=student[i].Math_;

    New->Physical=student[i].Physical_;

    New->Chemsitry=student[i].Chemsitry_;

    New->next=NULL;

    Pointer->next=New;

    Pointer=New;

    }

    }

    return Head;

    }

    /*查询成绩*/

    Link List_Search(int Key,Link Head)

    {

    Link Pointer;

    Pointer=Head;

    while(Pointer!=NULL)

    {

    if(Pointer->Number==Key)

    {

    printf("your Number is:%d\n",Pointer->Number);

    printf("your Name   is:%s\n",Pointer->Name);

    printf("your Chinese is:%d\n",Pointer->Chinese);

    printf("your English is:%d\n",Pointer->English);

    printf("your Math   is:%d\n",Pointer->Math);

    printf("your Physical is:%d\n",Pointer->Physical);

    printf("your Chemsitry is:%d\n",Pointer->Chemsitry);

    }

    Pointer=Pointer->next;

    }

    return Head;

    }

    /*修改成绩*/

    Link List_Modify(char *s,int Key,Link Head)

    {

    Link Pointer;

    int newscore1,newscore2,newscore3,newscore4,newscore5;

    Pointer=Head;

    while(Pointer!=NULL)

    {

    if(Pointer->Number==Key)

    {

    if(strcmp(s,"Chinese")==0)

    {

    printf("**please input new score:");

    scanf("%d",&newscore1);

    student[Key].Chinese_=newscore1;

    break;

    }

    else if(strcmp(s,"English")==0)

    {

    printf("**please input new score:");

    scanf("%d",&newscore2);

    student[Key].English_=newscore2;

    break;

    }

    else if(strcmp(s,"Math")==0)

    {

    printf("**please input new score:");

    scanf("%d",&newscore3);

    student[Key].Math_=newscore3;

    break;

    }

    else if(strcmp(s,"Physical")==0)

    {

    printf("**please input new score:");

    scanf("%d",&newscore4);

    student[Key].Physical_=newscore4;

    break;

    }

    else if(strcmp(s,"Chemsitry")==0)

    {

    printf("**please input new score:");

    scanf("%d",&newscore5);

    student[Key].Chemsitry_=newscore5;

    break;

    }

    }

    Pointer=Pointer->next;

    }

    return Head;

    }

    /*删除某人的成绩*/

    Link Delete_List(int Key,Link Head)

    {

    Link Pointer;

    Link Back;

    Pointer=Head;

    while(1)

    {

    if(Pointer->next==NULL)

    {

    printf("Not Found!\n");

    break;

    }

    if(Head->Number==Key)

    {

    Head=Pointer->next;

    free(Pointer);

    break;

    }

    Back=Pointer;

    Pointer=Pointer->next;

    if(Pointer->Number==Key)

    {

    Back->next=Pointer->next;

    free(Pointer);

    break;

    }

    }

    return Head;

    }

    /*插入某人的成绩*/

    Link Insert_List(int Key,Link Head,Link New)

    {

    Link Pointer;

    Pointer=Head;

    while(1)

    {

    if(Pointer==NULL)

    {

    New->next=Head;

    Head=New;

    break;

    }

    if(Pointer->Number==Key)

    {

    New->next=Pointer->next;

    Pointer->next=New;

    break;

    }

    Pointer=Pointer->next;

    }

    return Head;

    }

    /*求某人总分*/

    int total(int Key,Link Head)

    {

    Link Pointer;

    int total_;

    Pointer=Head;

    while(Pointer!=NULL)

    {

    {

    if(Pointer->Number==Key)

    total_=Pointer->Chinese+Pointer->English+Pointer->Math+Pointer->Physical+Pointer->Chemsitry;

    }

    Pointer=Pointer->next;

    }

    return total_;

    }

    /*求某人平均分*/

    float average(int Key,Link Head)

    {

    float average_;

    average_=total(Key,Head)/5;

    return  average_;

    }

    /*求全体平均分*/

    float Average(int M,Link Head)

    {

    int Key;

    float Average_=0.0;

    for(Key=0;Key

    {

    Average_+=total(Key,Head)/M;

    }

    return  Average_;

    }

    /*某人排名*/

    int paiming(int Key,int M,Link Head)

    {

    int i,j,k,c;

    int a[10]={0};

    c=total(Key,Head);

    for(i=0;i

    {

    a[i]=total(i,Head);

    }

    j=M;

    for(k=0;k

    {

    if(c>a[k])

    j--;

    }

    return  j;

    }

    /*主函数*/

    void main()

    {

    Link Head;

    Link New;

    int selection,total_,Key1,paiming_;

    int Index1,Index2,Index3,Index4,Index5,Index6;

    float average_,Average_;

    char *subject;

    while(1)                                 /*用户菜单*/

    {

    printf("=========================\n");

    printf("==Simple student score management system==\n");

    printf("==1.Search student score==\n");

    printf("==2.Modify student score==\n");

    printf("==3.Delete student score==\n");

    printf("==4.Insert student score==\n");

    printf("==5.The total score of someone==\n");

    printf("==6.The average score of someone==\n");

    printf("==7.paiming                   ==\n");

    printf("==8.The average of class==\n");

    printf("==9.Quit                ==\n");

    printf("=========================\n");

    printf("Please input your choose:");

    scanf("%d",&selection);       /*度取用户选项*/

    Head=Create_List(Head);

    if(Head!=NULL)

    {

    switch(selection)

    {

    case 1:

    printf("**Please input the student number:");

    scanf("%d",&Index1);

    Head=List_Search(Index1,Head);/*调用List_Search函数*/

    Free_List(Head);              /*调用Free_List函数*/

    break;

    case 2:

    printf("**Please input the student number:");

    scanf("%d",&Index2);

    printf("Which subject do you want to Modify:");

    scanf("%s",subject);

    Head=List_Modify(subject,Index2,Head);/*调用List_Modify函数*/

    Free_List(Head);                      /*调用Free_List函数*/

    break;

    case 3:

    printf("While number do you want to delete:");

    scanf("%d",&Index3);

    Head=Delete_List(Index3,Head);   /*调用Delete_List函数*/

    Free_List(Head);                 /*调用Free_List函数*/

    student[Index3].Number_=-1;        /*置删除学生学号不存在*/

    strcpy(student[Index3].Name_," ");/*名字为空*/

    student[Index3].Chinese_=0;       /*分数为0*/

    student[Index3].English_=0;

    student[Index3].Math_=0;

    student[Index3].Physical_=0;

    student[Index3].Chemsitry_=0;

    M--;           /*删除后人数减1*/

    break;

    case 4:

    New=(Link)malloc(sizeof(Node));   /*内存配置*/

    printf("**Please input the student number:");

    scanf("%d",&New->Number);

    printf("Please input student name:");

    scanf("%s",New->Name);

    printf("Please input the score of Chinese  ,English   ,Math   ,Physical   ,Chemsitry   :");

    scanf("%d  %d  %d   %d   %d",&New->Chinese,&New->English,&New->Math,&New->Physical,&New->Chemsitry);

    printf("Please input the number for Insert:");

    scanf("%d",&Key1);

    Head=Insert_List(Key1,Head,New);   /*调用Insert_List函数*/

    Free_List(Head);                   /*调用Free_List函数*/

    student[Key1].Number_=New->Number;

    strcpy(student[Key1].Name_,New->Name);

    student[Key1].Chinese_=New->Chinese;

    student[Key1].English_=New->English;

    student[Key1].Math_=New->Math;

    student[Key1].Physical_=New->Physical;

    student[Key1].Chemsitry_=New->Chemsitry;

    M++;       /*插入后人数加1*/

    break;

    case 5:

    printf("**Please input the student number:");

    scanf("%d",&Index4);

    total_=total(Index4,Head);   /*调用total函数*/

    Free_List(Head);             /*调用Free_List函数*/

    printf("the total of the student is:%d",total_);

    break;

    case 6:

    printf("**Please input the student number:");

    scanf("%d",&Index5);

    average_=average(Index5,Head); /*调用average函数*/

    Free_List(Head);               /*调用Free_List函数*/

    printf("the average of the student is:%f",average_);

    break;

    case 7:

    printf("**Please input the student number:");

    scanf("%d",&Index6);

    paiming_=paiming(Index6,M,Head);  /*调用paiming函数*/

    Free_List(Head);    /*调用Free_List函数*/

    printf("the paiming of the student is:%d",paiming_);

    break;

    case 8:

    Average_=Average(M,Head);   /*调用Average函数*/

    Free_List(Head);  /*调用Free_List函数*/

    printf("the average of the whole class is:%f",Average_);

    break;

    case 9:             exit(1);  /*退出用户菜单*/             break;          }        }     } }

    展开全文
  • 学生成绩管理系统绝对是我们课设的经典选题之一,那么今天就给大家带来一个链表版本的学生成绩管理系统,希望对大家的学习有所帮助,这个项目采用链表这一数据结构最为底层的存储框架,然后是用文件对数据进行一个...
  • 利用链表,文件打开、指针等操作实现的学生成绩管理系统,功能全面,可做为大作业,符合多种要求,基于C语言编写,该成绩管理系统功能全面,可作为C语言学习
  • 学生成绩管理系统 C语言链表版本

    千次阅读 2015-03-14 20:37:26
    可以实现管理学生姓名学号成绩信息,有一定的容错能力。 源代码下载地址.../********************************************************* *程序描述:学生成绩管理系统 *运行环境:Windows 7
  • 英语成绩 7.C语言成绩 0.修改整条本科生信息\n" ); printf( "请输入(1-7或0): " ); scanf( "%d" , &choice); switch  (choice) { case  1: printf( "请输入新的姓名: " ); getchar(); ...
  • 利用链表,文件打开等操作实现的学生成绩管理系统。 符合多种要求。
  • 本文实例为大家分享了C语言学生成绩管理系统的具体代码,供大家参考,具体内容如下 Ps:后加了个链表排序,用冒泡写的。 /* Title : Student's score management system Author: nyist_xiaod Date : 2012.5.8 */...
  • C语言嵌套链表实现学生成绩管理系统 链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景: 一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1--B5 做一个学生成绩管理系统 学生成绩有...
  • 通过C语言编程的基于链表的学生成绩管理系统,实现学生成绩管理的各个功能
  • c语言嵌套链表实现学生成绩管理系统 第一次写博客,把学习过程记录下来,望大佬路过指正 如题: 链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景:一个年级,相当链表A 该年级5个班,每个班5个人,...
  • c语言成绩管理系统 C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,修改,查询,计算平均成绩和展示。 开发语言:C语言 开发工具:Dev c++ 开发者:呵呵up 创建学生成绩信息 2. 插入学生信息 3. ...
  • (使用C语言)(基本思路已给出) 基于链表的学生成绩管理系统(1)输入5个学生3门课的成绩存入链表中; (2)输出学生信息; (3)求每个学生的平均分; (4)输入一个学号num,查找其学号等于num的学生。要求:用链表存放学生...
  • 当初准备用数组去实现,发现比较麻烦,对比下,使用链表去实现。效果还不错。实现查询,修改,删除,插入,求总和,平均值,排名功能。在TC上运行通过。  代码及注释如下:    /*----------------------------...
  • C语言 C应用 学生成绩管理系统 设计 模板 C应用 链表
  • C语言写的学生成绩管理系统(链表)》由会员分享,可在线阅读,更多相关《C语言写的学生成绩管理系统(链表)(6页珍藏版)》请在人人文库网上搜索。1、include#include#includestruct studlong num;char name20;float ...
  • printf(" 姓名 学号 性别 班级 c语言成绩 数学成绩 英语成绩 体育成绩 思修成绩 总分 平均分\n"); while(fscanf(fp,"%s%s%s%s%f%f%f%f%f%f%f",head->name,head->num,head->sex,head->banji,&head->c,&head->math,&...
  • 做一个学生成绩管理系统,学生成绩有语文 数学 英语 功能: 录入成绩 找三科总分的最高分 最低分 算出平均分 首先定义两个结构体变量分别是Class类和Student类。 struct Class { struct Student *phead; struct ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 468
精华内容 187
关键字:

c语言链表成绩管理系统

c语言 订阅