1、:查找学生信息:a.按学号查找,find1()函数;b.按姓名查找,find2()函数;删除学生信息,del()函数: 建立指针,在链表中寻找要删除信息的学生的学号,找到后p-next=p-next-next,将其删除。插入学生信息,insert()函数;输入要插入的信息,建立指针,寻找要插入的节点。显示学生信息,print()函数;将以存在的学生信息输出按某科成绩对学生进行排序,sort()函数;五、详细设计及运行结果1. 菜单:2. creat()函数. 3. find()函数. find1():find2():3. del()函数.4. insert()函数.5. print()函数.6
2、. sort()函数.六、调试情况,设计技巧及体会通过这次课程设计,我对这门课又有了一个新的理解,最大的喜悦不是写出程序,而是从中学会了怎么去写,该如何去写,在老师的严格监督下,自己也养成了独立思考的习惯,真的从中得到了很多好处,从思想到着手,所有都是程序化的,必须踏踏实实的来。 通过学生信息管理系统的设计,使我对链表有了更深的了解,也懂得了如何用链表进行输入,插入,排序等操作,两个礼拜的实习很快就过去了,这一次真的学到了很多东西,我也将会将自己所学到的东西用到自己以后的学习中去。七、参考文献C语言程序设计-科学出版社数据结构(C语言描述)-清华大学出版社数据结构(使用C语言)-电子科技大学出
3、版社八、附录:源代码#include#define N sizeof(struct stu)void clearscreen() /*清屏函数*/ getchar(); system(cls);struct date /*定义出生年月日的结构体*/ int year; int mouth; int day; ;struct stu /*定义学生信息的结构体*/ int number; char name30; char sex5; struct date birthday; char mail30; char phone30; int cscore,mscore; struct stu *ne
4、xt; /*输出函数*/int print(struct stu *p) while(p!=NULL) /*如果P所指的结点不为空 执行循环*/ printf(学号 姓名 性别 出生日期 E-mail 电话 C成绩 数学成绩n printf( %2d%6s%6s%8d-%2d-%2d%11s%11s%6d%8dn,p-number,p-name,p-sex,p-mail,p-phone,p-cscore,p-mscore ); p=p-next; nn按回车键返回nn getchar(); return 0;/*创建链表*/struct stu *creat() struct stu *p,*
5、head; int i,k;请输入学生的数:n scanf(%d,&k); p=head=(struct stu *)malloc(N);请输入学号np-number);姓名n%sname);性别nsex);出生日期n%d-%d-%d;E-mailnmail);电话nphone);c成绩ncscore);数学成绩nmscore); if(k1) for(i=1;inext=(struct stu *)malloc(N);请输入学号 n p-next=NULL; return head;/*查找链表*/struct stu *find1(struct stu *p) int number; if
6、(p=NULL) n提示:没有资料可以查询!请输入要查找的学生学号:=NULL) if(p-number=number) return(p); break; else p=p- return NULL;struct stu *find2(struct stu *p) 请输入要查找的学生姓名:,name); if(strcmp(p-name,name)=0) else p=p- /*删除链表*/int del(struct stu *h) int number; struct stu *p,*p0; if(*h=NULL) return 0;请输入要删除的学号n p0=*h; if(p0-num
7、ber=number) *h=p0- free(p0); return 1; p=p0- p0- free(p); return 1; p0=p;n按回车键返回n /*插入链表*/ int insert (struct stu *h) p=(struct stu *)malloc(N);请输入要插入的学号n%ldnumber=p-number)%d%d%d if(*h=NULL) *h=p;number p-next=*h; while(p0-next!=NULL&p0-numbernext=NULL) p0-next=p;next=p0- p0- return 1; /*排序*/struct
8、 stu* sort(struct stu *p0) struct stu *t,*p,*q,*z; if(p0=NULL) printf(没有学生信息可排序! if(p0=NULL)|(p0-next=NULL)/*当节点不存在或者只有一个节点时*/ return p0; t=p0; p=t- t- /*将头节点孤立出来*/ while(p) /*t始终指向头节点*/ q=p-cscoret-cscore) /*用头节点的后一个节点与头节点进行比较*/ p-next=t; /*将分数大的放在前面*/ t=p; /*t始终指向当前第一个节点*/ z=t; while(z-next&z-=p-c
9、score) z=z-next=z- z- p=q; p0=t; return p0;void main() struct stu *head,*p; int a; int b;*西安邮电学院学生管理系统*n要进入系统请按任意键n*欢迎您!您已进入管理系统*n*学生成绩管理系统*n do clearscreen();学生纪录操作:1:输入学生信息n2:查找学生信息n3:删除学生信息n4:插入学生信息n5:显示学生信息n6:按C语言成绩排序n0:退出系统n请选择(06): scanf(b); switch(b) case 1:head=creat(); print(head); break; c
10、ase 2:printf(请输入要查找的种类:如为学号请输1,如为姓名请输2:a); switch(a) case 1:p=find1(head);break; case 2:p=find2(head); if(p) printf(找到情况如下: getchar(); printf(学号:%d 姓名:%s 性别:%s 出生日期:%d-%d-%d E-mail:%s 电话:%s C成绩:%d 数学成绩:%dn else 没有找到! break; case 3:if(del(&head) 已正确删除! else要删除的结点不存在! case 4:if(insert(&已成功插入! else 此学生已存在,插入失败! case 5:print(head); case 6:p=sort(head); print(p); case 0: default : 输入错误!请重新输入! while(b!=0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1