《数据结构课程设计学生信息管理系统(共18页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计学生信息管理系统(共18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上题目2. 学生信息管理系统一、课程设计目的1 数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发2 通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用 。3 学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。 学生信息管理系统:(1)熟练掌握链表存储结构及其建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧二、课程设计内容 建立学生信息管理系统,通过链
2、表实现对学生信息的输入,查找,删除,插入和排序等操作。三、需求分析 1每位学生的信息有:学号,姓名,性别,出生日期,E-mile,电话,c成绩,数学成绩等,用链表对学生的信息进行存储。 2全部数据可以只放在内存中; 3系统能实现的操作和功能如下: a) 输入学生信息: 对不同学生分别输出下列信息:学号,姓名,性别,出生日期,E-mile,电话,c成绩,数学成绩等。 b) 查找学生信息: 根据学生的学号或姓名对学生的信息进行查找。 c) 删除学生信息:删除某个学生的所有信息。 d) 插入学生信息:将某个学生的信息插入到已经输入的信息中。e) 显示学生信息: 将所有学生的信息显示出来。 f) 排序
3、: 将所有学生按某个学科的成绩依次排序。四、概要设计1系统结构图(功能模块图)主函数输入学生信息查找学生信息删除学生信息插入学生信息显示学生信息按成绩进行排序退出按学号按姓名2功能模块说明输入学生信息,creat()函数:建立单向链表,组织循环,将学生的信息依次录入。:查找学生信息:a.按学号查找,find1()函数;b.按姓名查找,find2()函数; 删除学生信息,del()函数: 建立指针,在链表中寻找要删除信息的学生的学号,找到后p-next=p-next-next,将其删除。 插入学生信息,insert()函数;输入要插入的信息,建立指针,寻找要插入的节点。显示学生信息,print(
4、)函数;将以存在的学生信息输出按某科成绩对学生进行排序,sort()函数;五、详细设计及运行结果开始main()菜单是输入:1输入:2输入:4输入:3输入:6输入:5creat()sort() print()insert()del()1.find1()输入:0退出exit()2.find2()1. 菜单:输入信息存入链表显示最终结果fclose(fp)Add添加且输入np!=nullCompare()p=p-next结束p=null2. creat()函数. 3. find()函数. 查找成功,输出输入学生信息p:null否find()p-num:num!=没有该学生信息=结束find1():
5、find2():3. del()函数.没有该学生信息输入学号del()p:null=结束p:null否p-num:num!=否p0-next=p-next删除成功4. insert()函数.没有该学生信息输入信息insert()p-num:a!=结束head:null否p-p-next!=否s-next=hesd,hesd=s插入成功q-next=s;s-next=p插入成功=是5. print()函数.6. sort()函数.排序完毕,输出信息sort() 结束head:null否没有学生信息可以查询是p-next:t-nextt-next=p分数大的放在前面,p始终指向第一个节点p:nul
6、l!=六、调试情况,设计技巧及体会通过这次课程设计,我对这门课又有了一个新的理解,最大的喜悦不是写出程序,而是从中学会了怎么去写,该如何去写,在老师的严格监督下,自己也养成了独立思考的习惯,真的从中得到了很多好处,从思想到着手,所有都是程序化的,必须踏踏实实的来。 通过学生信息管理系统的设计,使我对链表有了更深的了解,也懂得了如何用链表进行输入,插入,排序等操作,两个礼拜的实习很快就过去了,这一次真的学到了很多东西,我也将会将自己所学到的东西用到自己以后的学习中去。七、参考文献C语言程序设计-科学出版社数据结构(C语言描述)-清华大学出版社数据结构(使用C语言)-电子科技大学出版社八、附录:源
7、代码#include#include#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
8、 stu *next; ; /*输出函数*/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-birthday.year,p-birthday.mouth,p-birthday.day,p-mail,p-phone,p-cscore,p-mscore); p=p-next;printf(nn按回车键返回nn
9、); getchar(); return 0;/*创建链表*/struct stu *creat() struct stu *p,*head; int i,k; printf(请输入学生的数:n); scanf(%d,&k); p=head=(struct stu *)malloc(N); printf(请输入学号n); scanf(%d,&p-number); printf(姓名n); scanf(%s,&p-name); printf(性别n); scanf(%s,&p-sex); printf(出生日期n); scanf(%d-%d-%d,&p-birthday.year,&p-birt
10、hday.mouth,&p-birthday.day); printf(E-mailn); scanf(%s,&p-mail); printf(电话n); scanf(%s,&p-phone); printf(c成绩n); scanf(%d,&p-cscore); printf(数学成绩n); scanf(%d,&p-mscore); if(k1) for(i=1;inext=(struct stu *)malloc(N); p=p-next; printf(请输入学号n); scanf(%d,&p-number); printf(姓名n); scanf(%s,&p-name); printf
11、(性别n); scanf(%s,&p-sex); printf(出生日期n); scanf(%d-%d-%d,&p-birthday.year,&p-birthday.mouth,&p-birthday.day); printf(E-mailn); scanf(%s,&p-mail); printf(电话n); scanf(%s,&p-phone); printf(c成绩n); scanf(%d,&p-cscore); printf(数学成绩n); scanf(%d,&p-mscore); p-next=NULL; return head;/*查找链表*/struct stu *find1(s
12、truct stu *p) int number; if(p=NULL) printf(n提示:没有资料可以查询!n); return 0; printf(请输入要查找的学生学号:); scanf(%d,&number); while(p!=NULL) if(p-number=number) return(p);break; else p=p-next; return NULL; struct stu *find2(struct stu *p) char name30; if(p=NULL) printf(n提示:没有资料可以查询!n); return 0; printf(请输入要查找的学生姓
13、名:); scanf(%s,name); while(p!=NULL) if(strcmp(p-name,name)=0)return(p); else p=p-next; return NULL; /*删除链表*/int del(struct stu *h) int number; struct stu *p,*p0; if(*h=NULL) return 0; printf(请输入要删除的学号n); scanf(%d,&number); p0=*h; if(p0-number=number) *h=p0-next; free(p0); return 1; p=p0-next; while(
14、p!=NULL) if(p-number=number) p0-next=p-next; free(p); return 1; p0=p; p=p-next; printf(n按回车键返回n); getchar(); return 0; /*插入链表*/ int insert (struct stu *h) struct stu *p,*p0; p=(struct stu *)malloc(N); printf(请输入要插入的学号n); scanf(%ld,&p-number); p0=*h; if(p0-number=p-number)return 0; printf(姓名n); scanf
15、(%s,&p-name); printf(性别n); scanf(%s,&p-sex); printf(出生日期n); scanf(%d%d%d,&p-birthday.year,&p-birthday.mouth,&p-birthday.day); printf(E-mailn); scanf(%s,&p-mail); printf(电话n); scanf(%s,&p-phone); printf(c成绩n); scanf(%d,&p-cscore); printf(数学成绩n); scanf(%d,&p-mscore); p-next=NULL; if(*h=NULL) *h=p; ret
16、urn 1; p0=*h; if(p0-numberp-number) p-next=*h; *h=p; return 1; while(p0-next!=NULL&p0-next-numbernumber) p0=p0-next; if(p0-next=NULL) p0-next=p; return 1; p-next=p0-next; p0-next=p; printf(nn按回车键返回nn); getchar(); return 1; /*排序*/struct stu* sort(struct stu *p0) struct stu *t,*p,*q,*z; if(p0=NULL) pr
17、intf(没有学生信息可排序!n); return 0; if(p0=NULL)|(p0-next=NULL)/*当节点不存在或者只有一个节点时*/ return p0; t=p0; p=t-next; t-next=NULL;/*将头节点孤立出来*/while(p)/*t始终指向头节点*/ q=p-next; if(p-cscoret-cscore)/*用头节点的后一个节点与头节点进行比较*/ p-next=t;/*将分数大的放在前面*/t=p;/*t始终指向当前第一个节点*/ else z=t; while(z-next&z-next-cscore=p-cscore) z=z-next;
18、p-next=z-next; z-next=p; p=q; p0=t; return p0;void main() struct stu *head,*p; int a; int b; printf(*西安邮电学院学生管理系统*n); printf(要进入系统请按任意键n); getchar(); printf(*欢迎您!您已进入管理系统*n); printf(*学生成绩管理系统*n); do clearscreen(); printf(学生纪录操作:n); printf(1:输入学生信息n); printf(2:查找学生信息n); printf(3:删除学生信息n); printf(4:插入
19、学生信息n); printf(5:显示学生信息n); printf(6:按C语言成绩排序n); printf(0:退出系统n); printf(请选择(06):); scanf(%d,&b); switch(b) case 1:head=creat(); print(head);break; case 2:printf(请输入要查找的种类:如为学号请输1,如为姓名请输2:n); scanf(%d,&a);switch(a) case 1:p=find1(head);break;case 2:p=find2(head);break; if(p) printf(找到情况如下:n); getchar
20、(); printf(学号:%d 姓名:%s 性别:%s 出生日期:%d-%d-%d E-mail:%s 电话:%s C成绩:%d 数学成绩:%dn,p-number,p-name,p-sex,p-birthday.year,p-birthday.mouth,p-birthday.day,p-mail,p-phone,p-cscore,p-mscore); else printf(没有找到!n); getchar(); break; case 3:if(del(&head) printf(已正确删除!n); else printf(要删除的结点不存在!n); getchar(); break; case 4:if(insert(&head) printf(已成功插入!n); else printf(此学生已存在,插入失败!n); getchar(); break; case 5:print(head); break; case 6:p=sort(head); print(p); break; case 0:break; default : printf( 输入错误!请重新输入!n); while(b!=0); 专心-专注-专业