小路k 发表于 2018-6-23 23:25:36

c++学生信息管理系统怎么根据学号排序萌新跪求

本帖最后由 小路k 于 2018-6-24 14:52 编辑

一个学生信息管理系统的排序功能
定义一个student 的类
student中包括学号,姓名,年龄
这个类中定义一个排序的功能
要求能根据学号进行排序
学号为string类型
初学者求助,跪求大佬帮助......


嘤嘤嘤?!

凌九霄 发表于 2018-6-23 23:38:34

我觉得这个在数据库层面就能实现,select * from studentinfo order by 学号

关键是感觉 发表于 2018-6-24 00:58:52

#include "stdio.h"
#include "malloc.h"
#include "string.h"
//一个学生信息管理系统的排序功能
//学生信息包括学号,姓名,年龄
//要求能根据学号进行排序
//学号为string类型
//初学者求助,跪求大佬帮助......

typedef struct sData{
        char * xh;
        char * name;
        int age;
}sData;

typedef struct sTest{
        sData * Data;
        struct sTest *next;
}sTest;

typedef struct sHead{
        sTest * p_head;
}sHead;

void random_data(sHead * p,int n){
        sTest * t;
        char str;
        int i ;
        p->p_head=NULL;                                                                        //初始化
        for(i=0;i<n;i++){
                t=(sTest *)malloc(sizeof(sTest));
                t->Data=(sData *)malloc(sizeof(sData));
               
                str='a'+i;
                str='b'+i;
                str='c'+i;
                str='\0';
                t->Data->xh=(char *)malloc(strlen(str)+1);
                t->Data->name=(char *)malloc(strlen(str)+1);
                t->Data->age=i;
                strcpy(t->Data->xh,str);
                strcpy(t->Data->name,str);

                t->next=p->p_head;
                p->p_head=t;
        }
}

void print(sHead * p){
        sTest *t=p->p_head;
        while(t){
                printf("number:%s name:%s age:%d\n",t->Data->xh,t->Data->name,t->Data->age);
                t=t->next;
        }
}
void sort(sHead * p){
        sTest *t=p->p_head;
        sTest *t1;
        sTest * swap;
        while(t&& t->next){
                swap = t;
                t1=t->next;
                while(t1){
                        if(strcmp(swap->Data->xh,t1->Data->xh)>0){
                                swap=t1;
                        }
                        t1=t1->next;
                }
                if(t-swap){                                                        //地址发生偏移
                        sData * s = t->Data;
                        t->Data = swap->Data;
                        swap->Data = s;
                }
                t=t->next;
        }
}

int main(){
        sHead head;
       
        random_data(&head,10);
        print(&head);
        sort(&head);
        puts("\n\n");
        print(&head);
        return 0;
}


sort比较low,好的方法。可以带入函数指针,函数指针返回 0 或者大于0 或者小于0,sort根据函数指针返回到值,进行操作。
这样到好处是,可以sort各种排序

像番茄加两个蛋 发表于 2018-6-24 08:11:36

根据学会排序呗

小路k 发表于 2018-6-24 15:08:42

关键是感觉 发表于 2018-6-24 00:58
sort比较low,好的方法。可以带入函数指针,函数指针返回 0 或者大于0 或者小于0,sort根据函数指针返 ...

蟹蟹{:10_297:}

有意思啊 发表于 2018-6-28 10:24:41

强制转化为int型排序
页: [1]
查看完整版本: c++学生信息管理系统怎么根据学号排序萌新跪求