logo资料库

数据结构综合实验报告 学生数据结构成绩管理系统.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
一、 实验目的与要求: 实验报告 1、综合应用线性结构,树及图的有关知识,实现“学生数据结构成绩管理系统”的 分析、设计与实现; 2、掌握散列表冲突的解决方法及散列查找的实现; 3、掌握常见排序算法,实现系统学生成绩的排序; 二、 实验内容: 学生数据结构成绩管理系统 1、系统分析: 1.1.设计题目:学生数据结构成绩管理系统 1.2.设计内容: 设计一个简单的学生信息管理系统,使之能提供以下功能:学生信息及成绩 的录入,学生成绩的查询,学生成绩的分段统计和排序输出。 要求系统界面友好,使用方便。 1.3.系统功能需求分析: (1)学生信息及成绩的录入 要求包括的学生信息有:学号,姓名,性别,出生日期,民族 及数据结构成 绩(具体内容可自行假设,至少录入 10 名以上学生). 所录入的学生按学号散列存储,采用拉链法解决冲突. (2)学生成绩的查询 根据提供的学号完成学生成绩的查询(采用散列查找). (3)学生成绩的分段统计和排序输出 统计出各分数段学生人数(60 分以下,60~70,71~80,81~90,91~100) 采用堆排序,将学生成绩从高到低排序输出. (4)应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能 清晰美观。 1.4.数据结构设计: struct student {
unsigned long int num; /* 定义学号*/ char name[10];/*定义姓名*/ char sex[10];/*定义性别*/ char birth[10];/*定义出生日期*/ char nationality[10];/*定义民族*/ int score;/*定义分数*/ } stu[SIZE]; /* 定义结构体数组,存贮多个学生的记录*/ typedef struct node{unsigned long int key; struct node *link;}HNode;/* 散列表的节点类型定义*/ typedef struct{int key;/*排序码*/ float data;/*其他数据项*/}RecNode; 1.5.源程序代码: #include #include #define SIZE 10 typedef struct node{unsigned long int key; struct node *link;}HNode; typedef struct{int key;/*排序码*/ float data;/*其他数据项*/}RecNode; struct student { unsigned long int num; char name[10]; char sex[10]; char birth[10]; char nationality[10]; int score;
}stu[SIZE]; void build() {int i; printf("\n*** No. name sex birth nationality score ***\n"); for(i=0;i
HNode *p; i=h(k); if(t[i]==NULL) {p=(HNode*)malloc(sizeof(HNode)); p->key=k;p->link=NULL; t[i]=p;printf("\n inserted %lu\n ",k); return(1);} else {p=t[i]; while(p!=NULL) if(p->key==k) {printf("\n retrieval %lu\n ",k);return(0);} else if(p->link!=NULL) p=p->link; else{p->link=(HNode*)malloc(sizeof(HNode)); p=p->link;p->key=k;p->link=NULL; printf("\n inserted %lu\n ",k);return(1); getch();} } } HNode *linksearch(HNode *t[],unsigned long int k) {/*在用拉链法处理冲突的散列表t中查找关键字为给定值k的记录*/ HNode *p; int i; i=h(k); if(t[i]==NULL)return(NULL); p=t[i]; while(p!=NULL) if(p->key==k) {printf("%lu\n",p->key); return(p);}
else p=p->link; return(NULL); } void statistics() { float k; int A,B,C,D,E,i; A=0; B=0; C=0; D=0; E=0; for(i=0;i=90) A=A+1; else if(89>=k&&k>=80) B=B+1; else if(79>=k&&k>=70) C=C+1; else if(69>=k&&k>=60) D=D+1; else E=E+1; } } printf(" \n 90~100: %d\n",A); printf(" \n 80~89: %d\n",B); printf(" \n 70~79: %d\n",C); printf(" \n 60~69: %d\n",D);
printf(" \n <60: %d\n",E); getch(); } void sift(RecNode r[],int t,int w) {/*用筛选法调整堆*/ int i,j; RecNode x; i=t; x=r[i]; j=2*i+1; while(j<=w) {if((jr[j+1].key)) j++; if(x.key>r[j].key) {r[i]=r[j];i=j;j=2*j+1;} else break; } r[i]=x; } void heapsort(RecNode r[],int n) {/*堆排序*/ int i; RecNode x; for(i=n/2-1;i>=0;i--) sift(r,i,n-1); for(i=n-1;i>0;i--) {x=r[0];r[0]=r[i]; r[i]=x; sift(r,0,i-1);
} } void sort() {HNode *t[SIZE]; RecNode r[SIZE]; int i; int s;unsigned long int k; for(i=0;i
h(k); linkinsert(t[SIZE],k); } printf("input what you want to search:\n"); scanf("%lu",&k); h(k); linksearch(t[SIZE],k); for(i=0;i
分享到:
收藏