指针-C语言:对学生学号,姓名,身份证号排序问题。

问题描述

C语言:对学生学号,姓名,身份证号排序问题。

定义一个数组(学生结构体数组),里面包含学号,姓名,身份证三门学生成绩,要求写一个函数,根据学生任何一个字段(如学号、姓名,身份证),用指针或链表实现排序。

求助CSDN里大神帮我,不甚感激啊

解决方案

这是网上找到的相关程序代码:(只实现了学号排序,关于姓名和身份证号如何排序呢 ,求助,其中姓名假设都是英文的,按字母大小排序)

#include
#include
#include

typedef struct data {
int number; //学号
char name[20]; //姓名
char id[20]; //身份证号
double score[3]; //三门课成绩
}Student;

typedef struct list {
Student pauline;
struct list *next;
}*LinkList,*pNode,Node;

LinkList getEmptyList() {
LinkList head = (pNode)malloc(sizeof(Node));
memset(head,0,sizeof(Node));
return head;
}

int addNode(LinkList head,pNode pnode) {
pNode q;
for(q = head; q->next; q = q->next)
if(q->next->pauline.id == pnode->pauline.id)
return 0;
q->next = pnode;
pnode->next = NULL;
return 1;
}

void show(LinkList head) {
pNode p;
for(p = head->next; p; p = p->next ) {
printf("%dt%st%st%.2lft%.2lft%.2lfn",
p->pauline.number,p->pauline.name,p->pauline.id,
p->pauline.score[0],p->pauline.score[1],p->pauline.score[2]);
}
}

// 按学号升排序
void sortNumber(LinkList head) {
pNode p,q,pt,qt;
p = head;
while(p->next) {
qt = p;
q = p->next;
while(q->next) {
if(qt->next->pauline.number > q->next->pauline.number)
qt = q;
q = q->next;
}
if(qt != p) {
pt = p->next;
p->next = qt->next;
qt->next = qt->next->next;
p->next->next = pt;
}
p = p->next;
}
show(head);
}

//按姓名排序
void sortName(){ //求助如何写

};

//按身份证号升排序
void sortId() { //求助如何写

}

pNode readData() {
pNode pnode = (pNode)malloc(sizeof(Node));
int i;
printf("学 号:");
scanf("%d",&pnode->pauline.number);
printf("姓 名:");
scanf("%s",pnode->pauline.name,20);
printf("身份证:");
scanf("%s",pnode->pauline.id,20);
for(i = 0; i < 3; ++i) {
printf("第%d门成绩:",i + 1);
scanf("%lf",&pnode->pauline.score[i]);
}
return pnode;
}

void menu() {
printf(" n");
printf("****** 学生成绩管理系统 ******n");
printf("********************************n");
printf("* 1、添加学生信息 n");
printf("
2、显示学生信息 n");
printf("
3、按学号排序 n");
printf("
4、按姓名排序 n");
printf("
5、按身份证号排序 n");
printf("
0、退出 n");
printf("
*******************************n");
}

int main() {
char op[20];
// int select;
LinkList head = getEmptyList();
do {
menu();
printf("请选择:");
fflush(stdin);
fgets(op,20,stdin);
fflush(stdin);
switch(op[0] - '0') {
case 1 : addNode(head,readData());
break;
case 2 : show(head);
break;
case 3 : sortNumber(head);
break;
case 5 : sortId(head);
break;

//  case 4 : printf("按第几门功课排序;");
//      scanf("%d",&select);
//      sortScore(head,select);
//      break;

    }
}while(op[0] - '0');
printf("ENDn");
return 0;

}

解决方案二:

你是江西的?身份证和姓名排序 就是 进行字符串排序,字符串排序总会吧

解决方案三:

用字符串大小比较的库函数,再用链表的操作手段,应用一种排序算法排序,就可以了,试一下吧

解决方案四:

这样的程序还是自己写好。
定义单链表会吧,再加几个操作,初始化,加结点,等。
排序简单的可以用冒泡,选择排序,追求效率用快速排序。
身份证号如果考虑最后一位X的话,可能会比较麻烦。但是,最后一位是识别码,可以不考虑。

解决方案五:

学会使用qsort。

解决方案六:

这个代码思路不难 静下心来 应该可以搞出来 自己先写 有问题 贴出来 再帮你解决。

时间: 2024-10-03 11:55:12

指针-C语言:对学生学号,姓名,身份证号排序问题。的相关文章

select-查询Score表中的最高分的学生学号和课程号?

问题描述 查询Score表中的最高分的学生学号和课程号? 计算每门课程的最高分"> 我只写出了一部分,具体代码如下: SELECT SCORE.CNO,MAX(DEGREE)最高分 FROM SCORE,COURSE WHERE SCORE.CNO=COURSE.CNO GROUP BY SCORE.CNO 返回结果如图: 之后我就不知道该如何写了?而且怎么写,也得不到我想要的结果. 解决方案 select sno,cno from score where degree in (selec

指针-c语言链表学生管理系统相关问题请教

问题描述 c语言链表学生管理系统相关问题请教 要做课程作业了,就学着网上模版写了个链表学生信息系统,但我想分成老师-学生两个登陆模块.思路如下: mian()中设置ahead结构体指针. 老师模块完成学生成绩的增删改查排序(借鉴网上的已完成)..老师模块结束后返回处理后的链表头指针,传递给学生模块,学生模块通过这个传递过来的指针进行访问信息链表,输入自己学号查询本人成绩. 结果,编译通过,老师模块成功了,学生模块没法用.所以想请教下这种思路对吗? 解决方案 思路是对的,只要老师建立的链表没错误,

js验证真实姓名与身份证号,手机号的简单实例_javascript技巧

最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 1.js验证真实姓名 js验证真实姓名,是用的unicode字符的来进行匹配,而中国人的姓名长度一般都是2-4,所以重复匹配{2,4}次 var regName =/^[\u4e00-\u9fa5]{2,4}$/; if(!regName.test(name)){ alert('真实姓名填写有误'); return fa

js验证真实姓名与身份证号是否匹配_javascript技巧

最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 js验证真实姓名,是用的unicode字符的来进行匹配,而中国人的姓名长度一般都是2-4,所以重复匹配{2,4}次 1.js验证真实姓名 var regName =/^[\ue-\ufa]{,}$/; if(!regName.test(name)){ alert('真实姓名填写有误'); return false; }

JS代码随机生成姓名、手机号、身份证号、银行卡号_javascript技巧

开发测试的时候,经常需要填写姓名.手机号.身份证号.银行卡号,既要符合格式要求.又不能重复.大家会到网上搜各种生成器. 下面小编自己写的一个js生成器代码.随机生成姓名.手机号.身份证号.银行卡号的js代码. // 生成随机姓名 function getName(){ var familyNames = new Array( "赵", "钱", "孙", "李", "周", "吴", &

js随机生成姓名、手机号、身份证号、银行卡号【实现代码】_javascript技巧

开发测试的时候,经常需要填写姓名.手机号.身份证号.银行卡号,既要符合格式要求.又不能重复.大家会到网上搜各种生成器.能不能自己写一个简单的生成器呢.下面是随机生成姓名.手机号.身份证号.银行卡号的js代码. // 生成随机姓名 function getName(){ var familyNames = new Array( "赵", "钱", "孙", "李", "周", "吴", &

编程语言 c语言-新手求指教!用c语言 简单学生成绩统计软件 。万分感谢,编好发到邮箱425572938@.

问题描述 新手求指教!用c语言 简单学生成绩统计软件 .万分感谢,编好发到邮箱425572938@. 实现的任务: (1)每个学生记录中包含学号.姓名和C 语言课设成绩等信息: (2)创建学生记录链表: (3)更新学生记录(插入.排序.删除): (4)能统计各分数段的人数,并以分布图显示: (5)输出学生记录到屏幕. 设计内容: 1. 学生记录应该包括学号.姓名.C 语言课设成绩等信息,是本程序的核心数据结构,定 义如下: typedef struct { char num[11]; /*学号*

验证码-c语言,学生信息管理系统。看不懂错误提示??

问题描述 c语言,学生信息管理系统.看不懂错误提示?? #include #include #include #include #include #define N 100 typedef struct student { int num; //学号,姓名,年龄,性别,出生年月,地址,电话, char name[18]; char sex; int age; int y, m; int tel; char add[30]; char mail[20]; int res; int stu; } S

随机字符串-C语言程序设计-学生成绩记录簿

问题描述 C语言程序设计-学生成绩记录簿 用C语言进行学生成绩记录簿设计时,输入学生信息我使用的是随机产生,当我把学生信息的最大人数设为50000时,程序溢出,无法运行了,出现(Process terminated with status -1073741510 (0 minutes, 2 seconds),这是什么情况,还有随机产生汉字可以这样设计吗? code char t2[]="王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林罗郑梁谢宋唐许韩冯邓曹彭曾肖田董袁潘于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟