精华内容
下载资源
问答
  • 链表自己随便编了一个学生成绩管理的小程序,比较粗糙,排序功能目前还没有实现~ #include <stdio.h> #include <stdlib.h> typedef struct nodeList{ char name[20]; int score; struct ...

     学链表自己随便编了一个学生成绩管理的小程序,比较粗糙,排序功能目前还没有实现~

     

    #include <stdio.h>
    #include <stdlib.h>
    
    
    typedef struct nodeList{
    	char name[20];
    	int score;
    	struct nodeList *next;
    }NODE; 
    
    
    NODE *InitList(NODE *head){
    	head = (NODE *)malloc(sizeof(NODE));	
    	head->next = NULL;
    	return head;
       }
    NODE *CreatList(NODE *head,int n){
    	NODE *p,*tail;
    	tail = head;
    	int i = n;
    	while(0!=i){
    		p = (NODE *)malloc(sizeof(NODE));
    		printf("请输入学生姓名:");
    		scanf("%s",&p->name);
    		printf("请输入学生的分数:");
    		scanf("%d",&p->score);
    
    	   	p->next = NULL;
    		tail->next = p; 
    		tail = p; 
    		i-=1;
    	}
    	return head;
    }
    
    void OutputList(NODE *head){
    	NODE *p = head;
    	while(p!=NULL){ 
    		printf("姓名:%s  |  成绩:%3d\n",p->name,p->score);
    		p = p->next;
    	}
    }
    
    NODE *DeleteList (NODE *head,int Position){                 //删除链表中的元素 
    	NODE *p,*q;
    	int i;
    	p = head->next;
    	for (i = 1;i<Position-1&&p!=NULL;i++){
    		p= p->next;                         //定位 
    	}
    	q = p->next;
    	p->next = q->next;
    	free(q);
    	return head;
    	
    }
    
    NODE *AddList(NODE *head){
    	NODE *p,*q;
    	q = head;
    	p = (NODE *)malloc(sizeof(NODE));
    	printf("请输入新转来的同学的姓名:");
    	scanf("%s",&p->name);
    	printf("请输入成绩:");
    	scanf("%d",&p->score);
    	while(q->next!=NULL){
    		q=q->next;
    	} 
    	p->next = NULL;
    	q->next = p;
    	
    	return head;
    }
    
    int LENGTHLIST(NODE *head){
    	NODE *p; int length = 0;
    	p = head->next;
    	while(p!=NULL){
    		p= p->next;
    		length++;
    	}
      return length;
    }
    
    
    	
    	
    	
    }
    
    main(){
    	NODE *head;
    	int studentNUMber = 0;
    	printf("请输入学生人数:");
    	scanf("%d",&studentNUMber);
    	
    	head = InitList(head);
    	head = CreatList(head,studentNUMber);
    	
    	printf("\n---------这是分割线~~~-------------\n"); 
    	OutputList(head->next);
    	
    	printf("\n-------删除一名坏学生,小公鸡点到谁就是谁!--------\n");
    	
    	head = DeleteList(head,2);
    	
    	OutputList(head->next);
    	
    	printf("\n------这里转来了一名新同学!-----\n");
    	 
    	head = AddList(head);
    	
    	OutputList(head->next); 
    	
    	
    //	printf("LENGTH =%d",LENGTHLIST(head));
    //	
    //	printf("\n------排个序吧!----------------------------\n");
    //	head = OrderList(head);
    //	OutputList(head);
    	 
    	return 0;
    }

     

    展开全文
  • C语言链表节点排序

    千次阅读 2019-05-07 19:54:45
    初次用到链表排序还是在C语言课程设计上,当时想着要把代码发到CSDN上,结果一拖再拖到现在。 我的课程设计项目为“学生成绩管理系统”,所用链表为双向链表链表。 涉及到成绩管理则避免不了成绩的排序。 结构体中...

    初次用到链表的排序还是在C语言课程设计上,当时想着要把代码发到CSDN上,结果一拖再拖到现在。

    我的课程设计项目为“学生成绩管理系统”,所用链表为双向链表链表。
    涉及到成绩管理则避免不了成绩的排序。
    结构体中的项目包括:

    1. 学生成绩;
    2. 学生姓名;
    3. 学生学号;
    4. 结构体的头指针与尾指针;
      先创建结构体:
    #include"stdio.h"
    #include"stdlib.h"
    #include"string.h"
    struct student
    {
    	struct student *ahead;
    	float grade[10];
    	char name[10];
    	char x[10];
    	struct student *next;
    }*head, *end, *New, *get, *stu;
    

    设置head指针和end指针。head指向头结点,end始终指向尾节点。
    输入数据:

    int input(int N, char **G)//数据输入
    //变量说明:“N”为考试的科目数量,此处**G为字符串指针数组,其中存储着考试科目。
    {
    	int i, c = 1, icount = 0, s[10], j, k, d;
    	char r[10];
    	for (j = 0; j < 10; j++)
    		s[j] = 0;
    	while (c)
    	{
    		New = (struct student *)malloc(sizeof(struct student));
    		printf("\t\t输入该名学生姓名(结束请按‘0’):");
    		scanf("%s", New->name);
    		if (New->name[0] != 48)
    		{
    			printf("\t\t输入该名学生学号:");
    			scanf("%s", r);
    			icount++;
    			strcpy(New->x, r);
    			New->grade[N] = 0;
    			for (i = 0; i < N; i++)
    			{
    				printf("\t\t%s成绩:", G[i]);
    				scanf("%f", &New->grade[i]);
    				if (New->grade[i] < 60)
    					s[i]++;
    				New->grade[N] = New->grade[N] + New->grade[i];
    			}
    			strcpy(New->mima, "1234");
    			end->next = New;
    			New->ahead = end;
    			end = New;
    			end->next = NULL;
    		}
    	}
    	else
    	{
    		c = 0;
    	}
    }
    

    链表已经创建完成,现在只需要向其中添加数据,下一步祭出我屌炸天 的链表节点排序代码?
    此代码运用简单选择排序的排序方法。即,先比较两个节点中数据的大小,并两个选中较大或较小的一个。并让选中的节点与下一个节点中的数据比较直到最后一个节点。比较完毕后将最小的节点接到链表的最后。
    当然,开始排序之前,我创建了一个空节点让其存储成绩的数组的每一个元素都等于“-1”将其接到了链表的最后作为新的有序链表与旧的无序链表的边界。在排序完毕后程序自动将此空节点删除。得到的就是新的有序数组。

    1.排序前的准备阶段(假设此处为升序排序)

    主要步骤为:

    1. 创建三个结构体指针“ *min”、“*xunow”、“ *uend”;
    2. uend就是我添加的边界空指针;
    int paixu(int N)//成绩排序
    {
    	int i;//在程序的后便会让用户选择升序还是降序排序,变量i的作用是根据i的值选择排序方式。若i为1则降序排列,0则升序排列
    	struct student *min, *xunow, *uend;
    	uend = (struct student *)malloc(sizeof(struct student));
    	uend->grade[0] = -1;
    	uend->next = NULL;
    	uend->ahead = end;
    	end->next = uend;
    

    2.排序执行阶段

    上一步中创建的三个结构体指针已经用掉了一个,在这一步中“min”代表比较值最小的节点。"xunow"表示当前与min节点比较的节点。

    1. 通过简单选择排序找出旧链表中的最小值节点;
    2. 将此最小值节点接到链表的最后;
    printf("\n\t\t升序排序(0)     降序排序(1)\n\t\t");
    	scanf("%d", &i);
    	for (min = head->next; min->next->grade[0] != -1; min = head->next)
    	{
    		xunow = min->next;
    		if (i == 0)
    		{
    			do
    			{
    				if (xunow->grade[0] < min->grade[0])
    				{
    					min = xunow;
    				}
    				xunow = xunow->next;
    			} while (xunow->next->grade[0] != -1 && xunow->grade[0] != -1 && min->next->grade[0] != -1);
    			min->ahead->next = min->next;
    			min->next->ahead = min->ahead;
    			min->ahead = uend;
    			uend->next = min;
    			uend = min;
    		}
    		else
    		{
    			do
    			{
    				if (xunow->grade[0] > min->grade[0])
    				{
    					min = xunow;
    				}
    				xunow = xunow->next;
    			} while ( xunow->grade[0] != -1 && min->next->grade[0] != -1);
    			min->ahead->next = min->next;
    			min->next->ahead = min->ahead;
    			min->ahead = uend;
    			uend->next = min;
    			uend = min;
    		}
    		
    	}
    

    3.排序完成收尾阶段

    在执行完上步代码后,表明排序基本完成。按照步骤,此时边界空节点的旧链表一侧还有最后一个具有有效数据的节点,即存储最大数据的节点。现在只需要将此节点与边界节点一起转移到整个链表的最后再删除边界节点,就能最终完成链表的排序。

        min = head->next;
    	xunow = min->next;
    	head->next = xunow->next;
    	xunow->next->ahead = head;
    	xunow->next = NULL;
    	min->ahead = uend;
    	uend->next = min;
    	uend = xunow;
    	end = uend->ahead;
    	uend->ahead->next = NULL;
    	free(uend);
    	return 0;
    }
    

    这就是自己在本学期的课程设计中,灵光一现敲出的链表节点排序代码。虽然不够简洁但不管怎么样这段代码还是实现了功能,即节点排序。

    展开全文
  • 老师模块完成学生成绩的增删改查排序(借鉴网上的已完成)。。老师模块结束后返回处理后的链表头指针,传递给学生模块,学生模块通过这个传递过来的指针进行访问信息链表,输入自己学号查询本人成绩。 结果,编译...
  • 做了两个链表 每个节点内有一个学生的编号和成绩,现在要求把两个链表合并,然后按照学号升序排列 不知道为啥 第65行总是报错 我整了一个小时了 没发现哪里错了,貌似运行时候显示说我引用了一个不可以引用的地址?...
  • 利用c语言实现学生成绩的查询,排序,分均分。插入删除各类操作
  • c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别, 还有三门课比如语,数,外的成绩,并且按照要求对其进行排序输出
    要求:用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,

    还有三门课比如语,数,外的成绩,并且按照要求对其进行排序输出

    /*用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,
    还有三门课比如语,数,外的成绩,并且按照要求对其进行排序输出*/
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    using namespace std;
    const int n=5;
    /*
    * nodeEntry : 节点数据类型
    * nodeADT   : 节点结构
    * linkADT   : 链表结构
    */
    typedef struct Student
    {
    	int num;
    	char name[30];
    	char sex;
    	float score1;//语文
    	float score2;//数学
    	float score3;//英语
    	//struct Student *next;
    }Student;
    
    
    typedef struct nodeCDT {
        Student entry;
        struct nodeCDT *next;
    }*nodeADT;
    
    
    typedef struct linkCDT {
        nodeADT head;
    }*linkADT;
    
    /*
    * InitLink   : 初始化链表
    * CreateNode : 创建节点
    * AppendLink : 添加数据
    */
    
    void InitLink(linkADT *link) {
        *link=(linkADT)malloc(sizeof*(*link));
        (*link)->head=0;
    }
    
    nodeADT CreateNode(Student entry) {
        nodeADT p=(nodeADT)malloc(sizeof*p);
        p->entry=entry,p->next=0;
        return p;
    }
    
    void AppendLink(linkADT *link,Student entry) {
        nodeADT newNode=CreateNode(entry),p;
        if (!*link) InitLink(link);
        if (!(*link)->head) (*link)->head=newNode;
        else {
            for (p=(*link)->head;p->next;p=p->next);
            p->next=newNode;
        }
    }
    
    /*
    * SortLink : 排序链表
    * -------------------
    * 通过移动每个节点的指针来完成排序
    */
    
    //按学号排序
    void SortLinkID(linkADT link) {
        nodeADT pHead,pRear,p,tp;
        if (!link) return;
        for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
            for (tp=pHead,p=pHead->next;p;tp=p,p=p->next) 
                if (pHead->entry.num>=p->entry.num)
                    tp->next=p->next,p->next=pHead,pHead=p,p=tp;
            if (!pRear) link->head=pHead;
            else pRear->next=pHead;
            pRear=pHead;
        }
    }
    
    //按语文成绩排序
    void SortLinkChinese(linkADT link) {
        nodeADT pHead,pRear,p,tp;
        if (!link) return;
        for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
            for (tp=pHead,p=pHead->next;p;tp=p,p=p->next) 
                if (pHead->entry.score1>=p->entry.score1)
                    tp->next=p->next,p->next=pHead,pHead=p,p=tp;
            if (!pRear) link->head=pHead;
            else pRear->next=pHead;
            pRear=pHead;
        }
    }
    
    
    //按数学成绩排序
    void SortLinkMath(linkADT link) {
        nodeADT pHead,pRear,p,tp;
        if (!link) return;
        for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
            for (tp=pHead,p=pHead->next;p;tp=p,p=p->next) 
                if (pHead->entry.score2>=p->entry.score2)
                    tp->next=p->next,p->next=pHead,pHead=p,p=tp;
            if (!pRear) link->head=pHead;
            else pRear->next=pHead;
            pRear=pHead;
        }
    }
    
    //按英语成绩排序
    void SortLinkEnglish(linkADT link) {
        nodeADT pHead,pRear,p,tp;
        if (!link) return;
        for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
            for (tp=pHead,p=pHead->next;p;tp=p,p=p->next) 
                if (pHead->entry.score3>=p->entry.score3)
                    tp->next=p->next,p->next=pHead,pHead=p,p=tp;
            if (!pRear) link->head=pHead;
            else pRear->next=pHead;
            pRear=pHead;
        }
    }
    
    
    //按姓名的字典序进行排序
    void SortLinkName(linkADT link) {
        nodeADT pHead,pRear,p,tp;
        if (!link) return;
        for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
            for (tp=pHead,p=pHead->next;p;tp=p,p=p->next) 
                if (pHead->entry.name[0]>=p->entry.name[0])
                    tp->next=p->next,p->next=pHead,pHead=p,p=tp;
            if (!pRear) link->head=pHead;
            else pRear->next=pHead;
            pRear=pHead;
        }
    }
    
    
    //按姓名的长度进行排序
    void SortLinkNameLength(linkADT link) {
        nodeADT pHead,pRear,p,tp;
        if (!link) return;
        for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {
            for (tp=pHead,p=pHead->next;p;tp=p,p=p->next) 
                if (strlen(pHead->entry.name)>=strlen(p->entry.name))
                    tp->next=p->next,p->next=pHead,pHead=p,p=tp;
            if (!pRear) link->head=pHead;
            else pRear->next=pHead;
            pRear=pHead;
        }
    }
    
    
    // PrintLink : 打印链表
    void PrintLink(linkADT link) {
        nodeADT p=link->head;
    	cout<<"学号"<<"  "<<"姓名"<<"\t"<<"性别"<<"\t"
    	<<"语文"<<"\t"<<"数学"<<"\t"<<"英语"<<endl;
        for (;p;p!=NULL,p=p->next){
    		cout<<p->entry.num<<"  "<<p->entry.name<<"\t"<<p->entry.sex<<"\t"
    		<<p->entry.score1<<"\t"<<p->entry.score2<<"\t"<<p->entry.score3<<endl;
    	}
        printf("\n");
    }
    
    /* 测试 */
    int main() {
        linkADT link=0;
    
        Student stu[n]={{1002,"Gao Min",'M',80,80,80},{1008,"Wen LR",'M',79,80,70},
    		{1000,"Wan Huang",'F',72,94,87},{1006,"Zhang Xin",'F',90,90,90},
    		{1001,"Liu qing",'M',89,90,92}};
    	int i;
        for (i=0;i<n;AppendLink(&link,*(stu+i++)));
        cout<<"请选择:"<<endl;
    	cout<<"1、按照学号升序排序"<<endl;
    	cout<<"2、按照姓名字符长度升序排序"<<endl;
    	cout<<"3、按照姓名字典序升序排序"<<endl;
    	cout<<"4、按照语文成绩升序排序"<<endl;
    	cout<<"5、按照数学成绩升序排序"<<endl;
    	cout<<"6、按照英语升序排序"<<endl;
    	//cout<<"7、未排序数据"<<endl;
    	cout<<"0、退出"<<endl;
    	//cout<<"未排序数据:"<<endl;
    	//PrintLink(link);
    	int n;
    	while(~scanf("%d",&n)){
    		if(n==0) break;
    		else if(n==1){
    			cout<<"按照学号升序排序:"<<endl;
    			SortLinkID(link);
    			PrintLink(link);
    		}
    		else if(n==2){
    			cout<<"按照姓名字符长度升序排序:"<<endl;
    			SortLinkNameLength(link);
    			PrintLink(link);
    		}
    		else if(n==3){
    			cout<<"按照姓名字典序升序排序:"<<endl;
    			SortLinkName(link);
    			PrintLink(link);
    		}
    		else if(n==4){
    			cout<<"按照语文成绩升序排序:"<<endl;
    			SortLinkChinese(link);
    			PrintLink(link);
    		}
    		else if(n==5){
    			cout<<"按照数学成绩升序排序:"<<endl;
    			SortLinkMath(link);
    			PrintLink(link);
    		}
    		else if(n==6){
    			cout<<"按照英语升序排序:"<<endl;
    			SortLinkEnglish(link);
    			PrintLink(link);
    		}
    		else cout<<"输入错误,请重新输入!"<<endl;	
    	}
    	return 0;
    }


    展开全文
  • 程序主要实现的功能有:学生信息的录入(动态链表创建),输出所有学生信息(链表遍历),输出排名(单向链表排序),以及一系列基于链表操作的查询,修改,添加学生成绩和求平均分,统计分数区域人数等功能。
  • 这是我用c语言设计一个普通的学生成绩管理系统,主要还是运用了链表的各种操作,在这里稍微记录一下吧 拥有功能 数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。 (1...


    这是我用c语言设计一个普通的学生成绩管理系统,主要还是运用了链表的各种操作,在这里稍微记录一下吧

    可以前往我的个人博客阅读,里面附源码
    前往阅读

    拥有功能

    数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。
    (1)系统以菜单方式工作
    (2)添加、删除任意个记录。
    (3)修改任意个记录。
    (4)浏览、保存记录。
    (5)排序功能:打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排序法将平均成绩和总成绩排序后生成两个新文件(从大到小),存盘并显示这两个文件的全部记录。
    (6)查询功能:打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。

    要求

    (1)设计一个主函数和多个子函数,每个子函数完成一个相对独立的子功能。
    (2)程序运行时,首先进行口令检查,再显示菜单。并能根据菜单调用相应的函数功能。
    口令程序段的功能要求:
    ①提示用户输入一个口令。
    ②用户输入口令后,若口令对,则提示用户通过,可执行后续程序;否则不通过。
    ③可对口令输入进行次数限制(如:重复输入3次都不对),则自动退出系统。
    (3)显示数据时,一页显示不下,可分页显示。(其实用system(“cls”)清屏函数就能实现,但我输入的学生信息不多,就没使用

    功能展示

    系统总体功能结构
    1.登录验证
    2.菜单
    3.添加学生信息并保存
    4.删除学生信息并保存
    5.输出当前所有学生信息并保存
    6.将学生信息按平均成绩从高到低排序,输出后保存
    7.将学生信息按总成绩从高到低排序,输出后保存
    8.以总成绩查找该分数的学生人数

    1.登录验证功能模块

    输入过程中密码显示为*号。

    void PassWord()
    {
        int i = 0,j = 0;
        char password[10]= {0};
        printf("\n请输入密码(密码:123)\n\n");
        while(1)
        {
            password[j]=getch();
    
            if(password[j]=='\r')//输入为回车时结束
            {
                password[j]='\0';
                if (strcmp(password, "123") == 0)
                {
                    printf("\n\n正在登陆.");
                    Sleep(500);//加个延时函数,免得菜单突然出现,吓到小朋友
                    printf(".");
                    Sleep(500);
                    printf(".");
                    Sleep(500);
                    break;
                }
                else
                {
                    i++;
                    if(i == 3)
                    {
                        printf("\n你已经3次输入密码错误!无法进入程序\n");//三次输入密码错误
                        exit(0);
                    }
                    printf("\n你已经%d次输入密码错误!达到3次后无法进入程序\n",i);
                    password[10]= {0};
                    j = 0;
                    continue;//重新初始化
                }
            }
            printf("*");
            j++;
        }
    }
    

    登录验证功能模块

    2.菜单功能模块

    主要用printf语句显示菜单。

    int menu()
    {
        int a=8;
        printf("\n\n菜单/\n");
        printf("\n欢迎登陆学生成绩管理系统\n");
        printf("\n(1)添加学生信息\n\n(2)删除学生信息\n\n(3)修改学生信息\n\n(4)查看当前所有学生信息\n\n(5)按平均分从高到低查看学生信息\n\n(6)按总成绩从高到低查看学生信息\n\n(7)按总成绩查找该分数的学生人数\n\n(8)退出\n\n");
    
        printf("///\n");
        printf("请选择你需要的操作:\n");
        scanf("%d",&a);
        return a;
    }
    

    在这里插入图片描述

    3.添加学生信息功能功能模块

    先输入需要添加的学生信息数量,然后利用for循环逐个输入学生信息,调用Insert(L,p)函数将每一条信息插入链表中,最后再调用Save(L,1)函数保存。

    Status scan(LinkList &L)
    {
        int i,n;
        system("cls");//清屏
        printf("需要输入多少个学生的信息?\n");
        scanf("%d",&n);
        LinkList p;
        for (i=n; i>0; --i)
        {
            p=(LinkList)malloc(sizeof(Node));//生成新结点
            printf("\n请输入学号、姓名、年级、专业、语文成绩、数学成绩、英语成绩(用空格分开):\n");
            scanf("%s %s %s %s %f %f %f",&p->num,&p->name,&p->grade,&p->major,&p->score[0],&p->score[1],&p->score[2]);
            p->aver=(p->score[0]+p->score[1]+p->score[2])/3;//平均分
            p->AllScore=p->score[0]+p->score[1]+p->score[2];//总成绩
            Insert(L,p);//调用函数插入表尾
        }
        Save(L,1);//调用保存函数
        return OK;
    }
    

    在这里插入图片描述

    4.删除学生信息功能功能模块

    通过对链表节点的操作,用按学号查找或者姓名查找删除学生信息,删除后调用Save(L,1)保存

    Status Delete(LinkList &L)
    {
        system("cls");//清屏
        char i[15];
        int c=0;
        if(L->next==NULL)
        {
            printf("\n无学生信息,请添加\n");
            system("pause");
        }
        else
        {
            LinkList p,q;
            printf("请选择:\n1、按学号查找需要删除的学生\n\n2、按姓名查找需要删除的学生\n");
            scanf("%d",&c);
            if(c==1)
            {
                printf("请输入需要删除的学生信息的学号: \n");
                scanf("%s",&i);
                p=L; //初始化,p指向第一个结点
                while(strcmp(i,(p->next)->num))//顺指针向后查找,直到p指向需要删除信息的学生前一位
                {
                    p=p->next;
                    if(!(p->next))//到这里证明无该学号,退出循环
                        break;
                }
                if (!(p->next))
                {
                    printf("无该学号!\n");
                    system("pause");
                    return OK;
                }
            }
            else
            {
                printf("请输入需要删除的学生信息的姓名: \n");
                scanf("%s",&i);
                p=L; //初始化,p指向第一个结点
                while(strcmp(i,(p->next)->name))//顺指针向后查找,直到p指向需要删除信息的学生前一位或p为空
                {
                    p=p->next;
                    if(!(p->next))//到这里证明无该学生,退出循环
                        break;
                }
                if (!(p->next))
                {
                    printf("无该学生!\n");
                    system("pause");
                    return OK;
                }
            }
            q=p->next;
            p->next=q->next;
            //回收被删除结点空间
            free(q);
            printf("删除成功!\n");
            Save(L,1);//删除后保存信息
        }
        return OK;
    }
    

    在这里插入图片描述

    5.修改学生信息功能功能模块

    通过对链表的操作,对需要修改信息的学生重新赋值,可以用按学号和按姓名查找。修改完后,调用Save(L,1)保存

    Status Change(LinkList &L)
    {
        system("cls");//清屏
        char i[15];
        int c=0;
        LinkList p;
        if(L->next==NULL)
        {
            printf("\n无学生信息,请添加\n");
            system("pause");
            return OK;
        }
        else
        {
            printf("请选择:\n1、按学号查找需要修改的学生\n\n2、按姓名查找需要修改的学生\n");
            scanf("%d",&c);
            if(c==1)
            {
                printf("请输入需要修改的学生信息的学号: \n");
                scanf("%s",&i);
                p=L; //初始化,p指向第一个结点
                while(p&&strcmp(i,p->num) )
                {
                    //顺指针向后查找,直到p指向该学号或p为空
                    p=p->next;
                }
                if (!p)
                {
                    printf("无该学号!\n");
                    system("pause");
                    return OK;
                }
            }
            else
            {
                printf("请输入需要修改的学生信息的姓名: \n");
                scanf("%s",&i);
                p=L; //初始化,p指向第一个结点
                while(p&&strcmp(i,p->name) )
                {
                    //顺指针向后查找,直到p指向该学生姓名或p为空
                    p=p->next;
                }
                if (!p)
                {
                    printf("无该学生!\n");
                    system("pause");
                    return OK;
                }
            }
        }
        //找到该名学生后,修改信息
        printf("请输入修改后的学号、姓名、年级、专业、语文成绩、数学成绩、英语成绩(用空格分开):\n");
        scanf("%s %s %s %s %f %f %f",&p->num,&p->name,&p->grade,&p->major,&p->score[0],&p->score[1],&p->score[2]);
        p->aver=(p->score[0]+p->score[1]+p->score[2])/3;//平均分
        p->AllScore=p->score[0]+p->score[1]+p->score[2];//总成绩
    
        Save(L,1);//将修改后的数据保存
        return OK;
    }
    

    在这里插入图片描述

    6.将学生信息按平均成绩排序功能功能模块

    通过对平均成绩的对比,调用Swap(p,q)交换节点信息,将平均成绩较高的排在前面,调用OutPu(L)输出后,再调用Save(L,2)保存。

    Status AverSort(LinkList L)
    {
     LinkList p,q;
     if(L->next==NULL)
     {
         printf("\n无学生信息,请添加\n");
         system("pause");
     }
     else
     {
         for(p=L->next; p!=NULL; p=p->next)
         {
             for(q=p->next; q!=NULL; q=q->next)
                 if(p->aver<q->aver)
                     Swap(p, q);//调用函数交换结点的学生信息
         }
         OutPut(L);//输出
         Save(L,2);//将排序后的学生信息保存
     }
     return OK;
    }
    

    在这里插入图片描述

    7.将学生信息按总成绩排序功能功能模块

    通过对总成绩的对比,调用Swap(p,q)交换节点信息,将总成绩较高的排在前面,调用OutPu(L)输出后,再调用Save(L,3)保存。

    Status AllScoreSort(LinkList L)
    {
        LinkList p,q;
        if(L->next==NULL)
        {
            printf("\n无学生信息,请添加\n");
            system("pause");
        }
        else
        {
            for(p=L->next; p!=NULL; p=p->next)
            {
                for(q=p->next; q!=NULL; q=q->next)
                    if(p->AllScore<q->AllScore)
                        Swap(p,q);//调用函数交换结点的学生信息
            }
            OutPut(L);//输出
            Save(L,3);//将排序后的学生信息保存
        }
        return OK;
    }
    

    在这里插入图片描述

    8.输入总成绩查找学生人数功能功能模块

    得到输入的总成绩后,遍历整个链表,如果有总成绩和输入的总成绩相同,开始计数。

    Status Get( LinkList L )
    {
      system("cls");//清屏
      int j=0;
      float i=0.0;
      if(L->next==NULL)
      {
          printf("\n无学生信息,请添加\n");
          system("pause");
      }
      else
      {
          LinkList p;
          printf("请输入需要查找的学生总成绩: \n");
          scanf("%f",&i);
          for(p=L->next; p!=NULL; p=p->next)
              if(p->AllScore==i)//找到成绩相同的话,j自增
                  j++;
          printf("总成绩为%.1f的学生数为%d\n",i,j);
          //菜单返回操作
          system("pause");
      }
      return OK;
    }
    

    在这里插入图片描述

    完整代码可以去我的博客下载
    前往下载

    可能会有一些小bug,写得也一般,毕竟用的时间不算多,但是也能凑合着参考一下~

    展开全文
  • 开发这样一个系统需要具备的知识:线性表(链表)、文件操作、排序(如果需要成绩排序)。 开发环境为VS2015;在Linux下没有conio.h的头文件,需要修改与getch()函数相关的代码。 #include #include #include #...
  • C语言编写学生成绩信息管理系统

    千次阅读 多人点赞 2020-07-06 18:27:13
    C语言设计学生成绩信息管理系统介绍代码结构体数组的定义main_interface()函数add_infor()函数browse_infor()函数 介绍 软件方面采用的是Visual Studio 2019 IDE工具。 程序方面采用结构体数组,成员包括学号、...
  • C语言实现学生成绩管理系统

    万次阅读 多人点赞 2018-02-19 19:42:55
    开发这样一个系统需要具备的知识:线性表(链表)、文件操作、排序(如果需要成绩排序)。开发环境为VS2015;在Linux下没有conio.h的头文件,需要修改与getch()函数相关的代码。具体代码如下#include &lt;stdio....
  • 大一时写的学生成绩管理系统 文件编码是GB2312 使用的数据结构是链表 主要实现了排序(冒泡)搜索(模糊匹配)文件读写等功能
  • 功能有增删查改,排序,输出 #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> #define mian main const int N = 1e5 + 5; typedef struct stu { char no[20...
  • C语言实现学生成绩管理系统(小白也看得懂)

    千次阅读 多人点赞 2020-01-31 11:03:09
    5、学生成绩排序(这是进阶功能,实现起来也最复杂) 6、学生成绩的分析 程序设计的整体思路 程序主要实现思路是依靠链表,数组,指针,结构体等相关知识,其中的核心是对链表的操作。 ①:使用单链表作为程序核心...
  • 2、 利用结构体实现学生成绩的数据结构设计 3、 用指针链表将所有学生的数据按照学号顺序链接起来 4、 系统具有增加,查询,修改,排序等基本功能 5、 系统的各个功能模块要求用函数的形式实现 6、 完成设计任务并...
  • 程序主要实现的功能有:学生信息的录入(动态链表创建),输出所有学生信息(链表遍历),输出排名(单向链表排序),以及一系列基于链表操作的查询,修改,添加学生成绩和求平均分,统计分数区域人数等功能。 总体思路:...
  • 系统功能说明 1、 录入学生信息:从文件中读取学生信息并建立链表; 2、 修改学生信息:直接对学生的信息进行修改; 3、 搜索:可以搜索学生在不同学期的成绩;...7、 退出:退出学生成绩管理系统;
  • 6 成绩排序\n"); printf("0 退出\n"); printf("***********************************\n"); do { printf("\n请选择您需要的功能:"); scanf("%d", &n); switch (n...
  • 2. 数学成绩排序文件名:sxcj.txt(文本文件) 3. 程序设计成绩排序名:cxsj.txt(文本文件) 二、记录结构和全局变量 typedef struct { char xh[12]; /*学号*/ char xm[12]; /*姓名*/ char sxcj[5]; /*数学...
  • 在实现学生成绩(存入很多类型数据,如学号,成绩,课程号等)排序的时候,要根据正序输出。因为在以前做过数组的选择排序,所以本来以为链表差不多,但是在实际操作的时候出现了很多问题。 1.首先是怎么交换位置,...
  • 用到链表 2.增删改查 3.各种排序显示 */ #include<stdio.h> #include<stdlib.h> struct Score { //定义成绩的结构体 int math; int C; int english; }; struct student{ ...
  • 学生成绩排序\t\t*\n"); printf("*\t0.退出系统\t\t*\n"); printf("——————————————------\n"); } //键盘输入 void keyDown() { char ch = _getch(); switch (ch) { ...
  • c链表 学生成绩管理系统

    千次阅读 2015-01-04 23:03:21
    一个c语言学生成绩管理系统,是用链表实现的。可以进行删除,插入,修改,成绩排序。(链表是不循环单链表)
  • 能完美运行 包含功能: 1、输入:函数input把20学生的学号、姓名、性别、年龄、四科成绩以及平均成绩和总成绩放在一个结构体数组中,学生的学号、姓名、四科成绩由键盘输入,然后计算出平均成绩和总成绩放在结构体...
  • 本程序是用C语言实现的简单学生成绩管理,用到的主要知识点是链表,涉及到链表的建立,插入,节点的删除,排序等几乎所有的链表常用操作.模块强,可以根据需要自行裁减,原创作品!
  • 运用数组和链表实现输入,显示,排序,删除,恢复删除,查找等功能。主要通过利用c语言对文件的操作,将数据写入.txt的二进制文件中储存,在需要时进行相应操作。同时利用结构体将一名学生的数据定义为一种数据类型...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 164
精华内容 65
关键字:

c语言链表学生成绩排序

c语言 订阅