数据结构课程设计报告 成绩分析问题 和 通讯录.doc

上传人:仙人指路1688 文档编号:2396874 上传时间:2023-02-17 格式:DOC 页数:49 大小:608KB
返回 下载 相关 举报
数据结构课程设计报告 成绩分析问题 和 通讯录.doc_第1页
第1页 / 共49页
数据结构课程设计报告 成绩分析问题 和 通讯录.doc_第2页
第2页 / 共49页
数据结构课程设计报告 成绩分析问题 和 通讯录.doc_第3页
第3页 / 共49页
数据结构课程设计报告 成绩分析问题 和 通讯录.doc_第4页
第4页 / 共49页
数据结构课程设计报告 成绩分析问题 和 通讯录.doc_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《数据结构课程设计报告 成绩分析问题 和 通讯录.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告 成绩分析问题 和 通讯录.doc(49页珍藏版)》请在三一办公上搜索。

1、数据结构课程设计报告5 : 成绩分析问题16 : 通讯录 学院(系): * 班 级: * 学生姓名: * * * 学号 * 指导教师: * * * 时间: 从2011年12月31日 到2012年1月 6日一、课程设计概述:本次数据结构课程设计共完成两个题: 成绩分析问题 和 通讯录使用语言:C编译环境:TC3.0 / VC6.0二、课程设计题目一实验内容成绩分析问题问题描述录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。需求分析(1)通过键盘输.入各学生的多门课程的成绩,建立相应的文件input.dat。(2)对文件input.dat中的数据进行处理,要求具有如下功能:1) 按各门课程

2、成绩排序,并生成相应的文件输出。2) 计算每人的平均成绩,按平均成绩排序,并生成文件。3) 求出各门课程的平均成绩、最高分、最低分、不及格人数、6069分人数、7079分人数、8089分人数、90分以上人数。4) 根据姓名或学号查询某人的各门课成绩,重名情况也能处理。(3)界面美观。概要设计-=ADT=int right(STD *h,int i); / 查看学号 i 是否存在void newstu(STD *h); / 新增一个学生STD *find(STD *h,char nam); / 查找姓名为nam的学生,返回该学生上一结点的地址STD *find(STD *h,char num);

3、 / 查找学号为mum的学生,返回该学生上一结点的地址void show(STD *p,int i); / 输出结点p的信息,若 i=0 只输出姓名和学号,i=1,输出全部信息void show(STD *h); / 按提示输出学生的信息void intoscores(STD *h); / 按提示录入学生的成绩void sort(STD *h,int a,int b); /*对学生信息排序,a为0以数学成绩为关键字排序 a=1-4为英语成绩、计算机成绩、总成绩、学号。b=0为降序,b=1为升序*/void cjjpx(STD *h); / 按提示对学生信息排序void tjcj(STD *h)

4、; / 统计学生成绩void del(STD *h); / 按提示删除学生int into(STD *h); / 从文件中读数据放在头结点为h的链表中int save(STD *h); / 将头结点为h的链表数据保存在文件中存储结构struct STD /学生信息链表char name20; /姓名int number; /学号int scores4; /各科成绩struct STD *next;/指向下一结点的指针;struct STDD / 记录数据char name20;/姓名int number; /学号int scores4; /各科分数;流程图p=h-nextwhile(p!=NU

5、LL)Student.number=p-number?YNreturn(0);p=p-next;return(1);int right(STD *h,STDD student); /判断学号student.number是否存在void newstu(STD *h) STD *find(STD *h,char name)/添加一个新学生 /以姓名为关键字STD *p=h;STDD student;while(p-next!=NULL)p=p-next;输入学生学号scanf(“%d”,&student.number);while(right(h,student)=0)输入学生学号scanf(“%

6、d”,&student.number)scanf(“%s”,q-name);q=(STD *)malloc(sizeof(STD);q-number=student.number;for(i=0;iscoresi=0;p-next=q;q-next=NULL;STD *p=h;while(p-next!=NULL)YNreturn (p);p=p-next;return (p);strcmp(name,p-name)=0 ? STD *find(STD *h,char name) /以学号为关键字STD *p=h;while(p-next!=NULL)YNreturn (p);p=p-next

7、;return (p);p-number=num?void intoscores(STD *h) / 录入学生的成绩STD *p; STDD student; int i; char xz;xz=getch();xzxz=1;xz=1;scanf(“%d”,&student.number);p=find(h,student.number);p-next!=NULL;YN输入成绩存放在p-next中p=h-next;while(p!=NULL)show(p,0);输入成绩放入p中;p=p-next;录 入 成 绩 结 束提示没有该学号void show(STD *h) /输出学生信息STD *p

8、; STDD student; char xz; inti=0;xz=getch();xzxz=1;xz=2;xz=1;xz=2;xz=getch();xzscanf(“%d”,&student.numberscanf(“%s”,&student.namep=find(h,student.number;p-next!=NULLYNshow(p-next,1);p=find(h,student.number;while(p!=NULL)show(p-next,1);p=find(p-next,student.namep=h-next;while(p!=NULL)show(p,1);p=p-nex

9、t;输 出 结 束void tjcj(STD *h) /学生信息统计STD *p=h-next; int av54,sum4,i,k=0,mix4,max4; for(i=0;i4;i+)for(k=0;k5;k+)avki=0;sumi=0; mixi=100;maxiwile(p!=NULL)for(i=0;inext信息统计结束void sort(STD *h,int a,int b) /对学生信息按要求进行排序int i; STD student; STD *p=h,*q;b=0?while(p-next!=NULL);q=p-next;while(q-next!=NULL) a=4?

10、YNp-next-number q-next-numberYNp-next-scoresa q-next-scoresaYN交换p、q下一结点的数据q=q-next;p=p-nextwhile(p-next!=NULL;)while(p-next!=NULL;) a=4?q=p-next;while(q-next!=NULL)NYp-next-number next-numberY交换p、q下一结点的数据交换p、q下一结点的数据p=p-next;排 序 完 成Np-next-scoresa next-scoresaq=q-next;NY交换p、q下一结点的数据void del(STD *h)

11、/删除学生STD *p,*q;int xz;int i;xz=getch();xzxz=2scanf(“%d”,&i);p=find(p,i);p!=NULLYNq=p-next;p-next=q-next;free(q);while(p-next!=NULL)q=p-next;p-next=q-next;free (q);删 除 完 成详细设计/ 成绩分析问题.cpp #include#include#include#includestruct STD /学生成绩链表char name20; /学生姓名int number; /学生学号int scores4; /学生成绩struct STD

12、 *next; /指向下一学生结点;struct STDD /学生结点char name20;int number;int scores4;int right(STD *h,STDD student)STD *p; /定义结点p,使之在链表中遍历p=h-next; /p指向头结点的下一个结点开始遍历while(p!=NULL) /判断p是否为空if(student.number=p-number)/否p不为空再判断学号是否相同return (0); /若学号相同,返回0p=p-next; /若学号不同,p指向下一结点继续比较return (1); /若学号都没相同的,返回1。void news

13、tu(STD *h)STDD students; /定义STDD结构体变量students来存储一些数据int i; /定义整型变量STD *p,*q; /定义STDD链表结点p=h; /p指向头结点while(p-next!=NULL) /找到最后一个结点p=p-next;system(cls & title 学生注册);printf(nnn);printf( nn);printf( 请输入要注册学生的学号 );scanf(%d,&students.number); /输入注册的学号while(right(h,students)=0) /判断该学号是否存在,若存在,就重新输入printf(a

14、n 学号有重复,请重新输入 按任意键继续 );getch();system(cls & title 学生注册);printf(nnn);printf( nn);printf( 请输入要注册学生的学号 );scanf(%d,&students.number);printf(n 请输入要注册学生的姓名 );q=(struct STD *)malloc(sizeof(STD);/给q分配内存scanf(%s,q-name); /输入姓名q-number=students.number; /将输入的学号存入q中for(i=0;iscoresi=0;p-next=q; /将q联结在p的后面q-next=

15、NULL; /q为最后一结点printf(nn);printf( nn);printf( 你注册以以上信息的学生 按任意键返回 );getch();printf(n );void show(STD *p,int i)if(i=0) /若i=0只输出姓名和学号printf( 学号 %d 姓名 %s n,p-number,p-name);else /若i=0输出全部信息printf( %3d %6s %4d %4d %4d %4d %4.1fn,p-number,p-name,p-scores0,p-scores1,p-scores2,p-scores3,(p-scores3*1.0)/3);ST

16、D *find(STD *h,char name)STD *p=h; /定义链表指针使之对成绩链表进行遍历while(p-next!=NULL) /只要p不为最后一结点if(strcmp(p-next-name,name)=0)/比较姓名return (p); /若姓名一样,返回该姓名的上一结点pp=p-next; /若不一样,p向下继续搜索return (p); /若都不一样,返回最后一结点pSTD *find(STD *h,int num)STD *p;p=h;while(p-next!=NULL)if(p-next-number=num)return (p);p=p-next;retur

17、n (p);void show(STD *h)system(cls & title 查看成绩);STD *p; /定义链表指针STDD student; /定义记录变量char xz; /定义字符xz来进行菜单的选择int i=0; /定义整型常量iprintf(nn);printf( nn);printf( 成 绩 查 看 nn);printf( nn);printf( 1 : 查 看 全 部nn);printf( 2 : 查 看 单 个nn);printf( 0 : 返 回nn);printf( nn);printf( 输入你的选择 :);xz=getch();switch(xz) /判断

18、xz的值case 1:system(cls);p=h-next;printf(nn);printf( nn);if(p!=NULL)printf( 学 号 姓 名 语 文 数 学 计算机 总 分 平均分nn);while(p!=NULL) /只要p不为空,输出该结点的信息show(p,1);p=p-next; /指向下一结点i+;if(i=0)printf( 没 有 学 生n);else printf(n 一共输出了 %d 名学生的信息,i);printf(nn);printf( nn);printf( 按 任 意 键 返 回 );getch();break;case 2:system(cls

19、);printf(nn);printf( nn);printf( 成 绩 查 看 nn);printf( nn);printf( 1 : 学 号nn);printf( 2 : 姓 名nn);printf( 0 : 返 回nn);printf( nn);printf( 输入你的选择 :);xz=getch();switch(xz)case 1:system(cls);printf(nnnn);printf( nn);printf( 请输入学号 );scanf(%d,&student.number);/输入要输出学生的学号p=find(h,student.number); /以学号为关键字查找if

20、(p-next!=NULL) /只要p的下一结点不为空,输出p的下一结点的信息printf( 学 号 姓 名 语 文 数 学 计算机 总 分 平均分nn);show(p-next,1);elseprintf( 没 有 该 学 生 n);printf(nn);printf( nn);printf( 按 任 意 键 返 回 );getch();break;case 2:system(cls);printf(nnnn);printf( nn);printf( 请输入姓名 );scanf(%s,student.name);/输入姓名p=find(h,student.name); /经姓名为关键字查找i

21、f(p-next!=NULL) /p的下一结点是否为空printf( 学 号 姓 名 语 文 数 学 计算机 总 分 平均分nn);while(p-next!=NULL)i+;show(p-next,1);/输出p的下一结点的信息p=find(p-next,student.name);/从p下一结点开始继续搜索,看是还有学生为该名,有则输出if(i=0)printf( 没 有 该 学 生n);else printf(n 一共输出了 %d 名学生的信息,i);printf(nn);printf( nn);printf( 按 任 意 键 返 回 );getch();break;void intos

22、cores(STD *h)int i;char xz; /记录选择的菜单编号STDD student; /记录信息STD *p; /对链表进行遍历system(cls & title 成绩输入);printf(nnn);printf( nn);printf( 成 绩 录 入nn);printf( nn);printf( 1: 录 入 全 部 学 生 成 绩nn);printf( 2: 录 入 单 个 学 生 成 绩nn);printf( 0: 返 回nn);printf( nn);printf( 请 输 入 你 的 选 择 );xz=getch();printf(%c,xz);system(c

23、ls);printf(nnn);printf( nn);printf( 成 绩 录 入nn);printf( nn);switch(xz) /判断输出菜单的编号case 1:p=h-next; /p指向头结点的下一结点i=0;while(p!=NULL) /p是否为空show(p,0); /输出p的姓名和学号,下面按提示输入成绩printf(n);printf( 请输入数学成绩 );scanf(%d,&p-scores0);while(p-scores0100 | p-scores00)/若成绩不正确,重新输入printf( 请输入数学成绩 );scanf(%d,&p-scores0);pri

24、ntf( 请输入英语成绩 );scanf(%d,&p-scores1);while(p-scores1100 | p-scores10)printf( 请输入英语成绩 );scanf(%d,&p-scores1);printf( 请输入计算机成绩 );scanf(%d,&p-scores2);while(p-scores2100 | p-scores20)printf( 请输入计算机成绩 );scanf(%d,&p-scores2);p-scores3=p-scores0+p-scores1+p-scores2;/计算总分p=p-next; /指向下一结点继续输入成绩i+;printf(n);

25、printf( 你一共录入了 %d 名学生的成绩nn ,i);printf( nn);printf( 按 任 意 键 返 回 );getch();break;case 2:printf( 请输入要录入学生的学号 );scanf(%d,&student.number); /输入学生的学号p=find(h,student.number); /找到为该学号的学生printf(n);show(p-next,0); /输出学生姓名,学号printf(n);printf( 请输入数学成绩 );/输入成绩scanf(%d,&p-next-scores0);while(p-next-scores0100 |

26、p-next-scores00)printf( 请输入数学成绩 );scanf(%d,&p-next-scores0);printf( 请输入英语成绩 );scanf(%d,&p-next-scores1);while(p-next-scores1100 | p-next-scores10)printf( 请输入英语成绩 );scanf(%d,&p-next-scores1);printf( 请输入计算机成绩 );scanf(%d,&p-next-scores2);while(p-next-scores2100 | p-next-scores20)printf( 请输入计算机成绩 );scan

27、f(%d,&p-next-scores2);p-next-scores3=p-next-scores0+p-next-scores1+p-next-scores2;break;void sort(STD *h,int a,int b)int i;STDD student; /定义记录变量STD *p,*q; /定义链表变量p=h; /从头开始if(b=0) /若b=0,为升序while(p-next!=NULL) /只要p不为最后一结点q=p-next; /q为p的下一结点while(q-next!=NULL) /q不为最后一结点if(a=4) /若a=4,则以学号为关键字排序if(p-nex

28、t-number q-next-number) /比较学号的大小,满足则交接两者student.number=p-next-number;p-next-number=q-next-number;q-next-number=student.number;strcpy(student.name,p-next-name);strcpy(p-next-name,q-next-name);strcpy(q-next-name,student.name);for(i=0;inext-scoresi;p-next-scoresi=q-next-scoresi;q-next-scoresi=student.scoresi;else /若a不为4,就以相应的成绩为关键字排序if(p-next-scoresa q-next-scoresa)student.number=p-next-number;p-next-number=q-next-number;q-next-number=student.number;strcpy(student.name,p-next-name);strcpy(p-next-name,q-next-name);strcpy(q-next-name,student.name);for(i=0;i4;i+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号