人人范文网 范文大全

学生成绩管理数据结构课程设计报告

发布时间:2020-03-02 01:12:24 来源:范文大全 收藏本文 下载本文 手机版

学生成绩管理系统 数据结构课程设计

一、课程设计的内容与目的

利用所学数据结构理论知识完成“学生成绩管理系统”的设计。

通过课程设计提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。具体包括:

了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

二、课程设计的要求与数据 1.系统功能需求分析:

1、输入功能:可以输入40位同学信息

2、增加功能,能增加学生的信息

3、浏览功能:完成对全部学生记录浏览

4、查询功能:采用散列查找完成按学号查找学生记录

5、排序功能:采用直接选择排序,将学生平均成绩从低到高排序输出

6、删除功能:可以删除学生信息

7、修改功能:可以对学生信息的各项信息进行修改

8、插入功能:完成数据的插入

9、统计功能:统计出各分数段学生人数(60分以下,60~70,71~80,...)

2.存储结构设计分析:

3.学生的信息:学生的信息采用结构体类型定义,每个元素表示一个学生的信息,包括学号,姓名及数据结构平均成绩4个数据项:

(1) struct student {char num[11]; char name[20]; int score[8]; float ave; }stu[N]; (2)散列表的结点类型定义:

typedef struct node {unsigned long int key; struct node * link;}HNode; 3.源程序如下: #include #include #include /*控制学生记录的容量*/ #define N 40 #define PR printf(\"\\n\\r%s %s %s %s %s %s %s %s %s %s %s \",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].ave) struct student {char num[11]; char name[20]; int score[8]; float ave; }stu[N]; typedef struct node {unsigned long int key; struct node * link;}HNode; typedef struct{int key; /*排序码*/ float data;/*其他数据项*/}RecNode; /*全新保存函数*/ save(int n) /*保存函数,保存n个记录*/ {FILE *fp; int i; if((fp=fopen(\"sc.txt\",\"wb\"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/ {printf(\"\\n不能打开文件\\n\"); getch();return NULL; } for(i=0;i\'9\') /*判断学号是否为数字*/ {puts(\"Input error! Only be made up of (0-9).Please reinput!\\n\"); w1=1;break; } if(w1!=1) for(k=0;k\\n\\n 1).学号 2.姓名 3).英语 4).数学\\n 5).C语言 6).管理学 7).信检 8).体育 9).近代史\\n 10).线性代数 11).all score 12).all data 13).cancel and back\"); printf(\"请选择: [ ]\\b\\b\"); scanf(\"%d\",&c); if(c>13||c13||c2&&ckey=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[],char 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); } search() /*查找模块*/ {int i,n,k,w1=1,w2,w3,w4; struct student s; n=load(); do {do {k=-1; printf(\"\\n\\n输入查找学号! NO.:\"); scanf(\"%s\",s.num); /*输入要修改的数据的学号*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0;ij;i--) if(stu[i].ave>stu[i-1].ave) {s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;} save(n+1); printf_back(); } else if(c!=2) teacher(); } while(c==2); } /****************排序模块(按平均成绩)****************/ void sift(RecNode r[],int t,int w) /*用筛选法调整堆*/ {int i,j; RecNode x; i=t; x=r[i]; j=2*i+1; while(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);} } /****************排序模块(按平均成绩)****************/ order() /*排序模块(按平均成绩)*/ {int i,j,k,n; struct student s; n=load(); for(i=0;i

/*****************统计模块*******************/ void fenduantongji() { int k,u,n,i,j,w1=1,w2; int a,b,c,d,e; a=0;b=0;c=0;d=0;e=0; printf(\" 1.英语 2.数学 3.C语言 4.管理学 5.信检 6.体育 7.近代史 8.线性代数 9.平均分\\n\"); printf(\"请输入要统计的科目:\"); scanf(\"%d\",&u); if(u=90) a=a+1; else if(k=80) b=b+1; else if(k=70) c=c+1; else if(k=60) d=d+1; else if(k=90) a=a+1; else if(k=80) b=b+1; else if(k=70) c=c+1; else if(k=60) d=d+1; else if(k

if(w1==1) fenduantongji(w1); else teacher(); } /****************教师界面****************/ teacher() /*教师界面*/ {int n,w1; do {system(\"cls\"); /*清屏*/ puts(\"\\t\\t*********************MENU*********************\\n\\n\"); puts(\"\\t\\t\\t\\t1.输入新数据\"); puts(\"\\t\\t\\t\\t2.添加数据\"); puts(\"\\t\\t\\t\\t3.修改数据\"); puts(\"\\t\\t\\t\\t4.删除数据\"); puts(\"\\t\\t\\t\\t5.浏览全部\"); puts(\"\\t\\t\\t\\t6.学号查询\"); puts(\"\\t\\t\\t\\t7.插入数据\"); puts(\"\\t\\t\\t\\t8.按平均分排序\"); puts(\"\\t\\t\\t\\t9.分段统计\"); puts(\"\\t\\t\\t\\t10.退出\"); puts(\"\\t\\t\\t\\t11.返回主界面\"); puts(\"\\n\\n\\t\\t**********************************************\\n\"); printf(\"请选择序号:(1-11): [ ]\\b\\b\"); scanf(\"%d\",&n); if(n11) /*对选择的数字作判断*/ {w1=1;getchar();} else w1=0; } while(w1==1); /*选择功能*/ switch(n) {case 1:enter();break; /*输入模块*/ case 2:add();break; /*追加模块*/ case 3:modify();break; /*修改模块*/ case 4:del();break; /*删除模块*/ case 5:browse();break; /*浏览模块*/ case 6:search();break; /*查找模块*/ case 7:insert();break; /*插入模块*/ case 8:order();break; /*排序模块*/ case 9:fenduantongji();break;/*统计模块*/

case 10:exit(0); /*退出*/ case 11:menu(); /*返回主界面*/ getch(); } } /****************密码函数****************/ distin() /*密码函数*/ { int f; char mima[]={\"gdut09\"}; char mi[6]; printf(\"输入密码:\"); scanf(\"%s\",mi); if(strcmp(mima,mi)==0) { teacher(); } else

{ printf(\"密码错误!\\n\"); printf(\"\\n\\n请选择:\\n\\t1).目录 2).退出 [ ]\\b\\b\"); scanf(\"%d\",&f); switch(f) { case 1: menu(); break; case 2: exit(0); break; } } } /****************学生界面****************/ st() /*学生界面*/ {int i,n,k,w1=1,w2,w3,w4; struct student s; n=load(); do {system(\"cls\"); do {k=-1; printf(\"\\n\\n请输入学号 NO.:\"); scanf(\"%s\",s.num); printf_face(); for(i=0;i

); printf(\"\\n\\n ^-^ ★成功★ ^-^.\"); printf(\"\\n\\n请选择:\\n\\t1).返回 [ ]\\b\\b\"); scanf(\"%d\",&w2); } } } while(w2==1); menu(); } /****************主界面****************/ menu() /*主界面*/ { int c; {system(\"cls\"); /*清屏*/ printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \"printf(\"\\n ● ● ■■■■■ ▲ ▲ ■■■■■ \"printf(\"\\n 〓 〓 ■ 〓 〓 ■ ■\"); printf(\"\\n ■ ■ ■ ■ ■ ■ ■ \"printf(\"\\n ■■■■■ ■■■■ ■ ■ ■ ■ \"printf(\"\\n ■ ■ ■ ■ ■ ■ ■ \"printf(\"\\n ■ ■ ■ ■ ■ ■ ■ \"printf(\"\\n ■ ■ ■■■■■ ■■■■ ■■■■ ■■■■■ \"printf(\"\\n ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \"getch(); system(\"cls\");/*清屏*/ printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\"); printf(\"\\n\\t\\t\\t 欢迎使用学生成绩管理系统\\n\\n\"); puts(\"\\t\\t★★★★★★★★★★★目录★★★★★★★★★★★\\n\\n\"); printf(\"\\t\\t 1.教师登陆\\n\"); printf(\"\\t\\t 2.学生登录\\n\"); printf(\"\\t\\t 3.退出\"); puts(\"\\n\\n\\t\\t★★★★★★★★★★★★★★★★★★★★★★★★\\n\");

); ); ); ); ); ); ); ); scanf(\"%d\",&c); switch(c) {

case 1: distin(); break; case 2: st(); break; case 3: exit(0); break; } } }

/*****************主函数****************/ main() {menu(); getch(); }

三、实验结果和数据处理: 1.、运行该程序,初始界面为欢迎界面:

2、输入数字1,按enter后,然后输入密码gdut09,进入教师菜单:

3、教师界面:

4、输入1,选择输入功能,再输入3个学生信息:

5、输入1,浏览全部数据:

6、返回教师界面,输入3,进行修改:

7、返回教师界面,输入2,进行追加数据

8、返回教师界面,输入4,进行删除数据:

9、返回教师界面,输入5,进行浏览:

10、返回教师界面,输入6,进行查找:

11、返回教师界面,输入7,进行插入数据:

12、进入教师界面后,输入进行按平均成绩(从小到大)排序:

13、在教师界面输入9,完成分段统计功能:

14、返回主界面,输入2,进入学生界面,按学号进行查找学生成绩:

四、参考文献:

《数据结构 C语言》 严蔚敏 清华大学出版社

《c语言程序设计》 谭浩强 清华大学出版社 《数据结构》 高教出版社

《数据结构习题》 李春保 清华大学出版社 《数据结构习题》 严蔚敏 清华大学出版社 《c语言与数据结构》 王立柱 清华大学出版社

《数据结构(C语言篇)习题与解析)李春葆 清华大学出版社

五、总结:

通过这次的课程设计,做一个程序设计,真的不容易。很多都不懂得怎么去做,虽然最后做完了这个课程设计,但是有些并不能满足老师的要求,而且因为有很多不懂的地方,所以发了很多时间去看书及请教同学。虽然不能说这个程序是完全自己做的,但是我也有很认真的去寻找错误并修改。我觉得这次自己也有一点点进步的,当自己发现了错误,会修改了也是一种进步吧。看到自己进步,其实也挺欣慰的,至少努力没白费,还是学到了一点知识的。就像我知道了怎样返回某些函数。

开始的时候本来是想要用堆排序进行学生平均分排序,可是做了很久,又问同学,最后还是不会做,虽然在懂堆排序,却不会用。所以只好用直接选择排序。而在分段统计中,原来有很多错误,不明确。之后我跟同学就把它改成按科目及平均分来统计,可是看了很久,改了很多次,其他分数段的没有错误,但是在60分以下的统计却不能实现,不知道该怎样去改。

数据结构课程设计学生成绩名次表

数据结构课程设计——成绩管理系统

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告

数据结构课程设计报告

学生成绩管理数据结构课程设计报告
《学生成绩管理数据结构课程设计报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档