数据结构课程设计报告成绩分析问题和通讯录Word格式文档下载.docx
- 文档编号:20218854
- 上传时间:2023-01-20
- 格式:DOCX
- 页数:61
- 大小:358.79KB
数据结构课程设计报告成绩分析问题和通讯录Word格式文档下载.docx
《数据结构课程设计报告成绩分析问题和通讯录Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告成绩分析问题和通讯录Word格式文档下载.docx(61页珍藏版)》请在冰豆网上搜索。
严对学生信息排序,a为0以数学成绩为关键字排序a=l-4为英语成绩、计算机成绩、总成绩、学号。
b二0为降序,b二1为升序*/
voidcjjpx(STD*h);
//按提示对学生信息排序
voidtjcj(STD*h);
//统计学生成绩
voiddcl(STD*h);
//按提示删除学生
intinto(STD*h);
//从文件中读数据放在头结点为h的链表中
intsave(STD*h);
//将头结点为h的链表数据保存在文件中
[存储结构]
structSTD〃学生信息链表
charname[20];
〃姓名intnumber;
〃学号intscores[4];
〃各科成绩
structSTD*next;
//指向下一结点的指针
structSTDD//记录数据
//姓名intnumber;
〃学号intscorcs[4];
〃各科分数
};
[流程图]
p=h->
next
while(p!
=NULL)
^X^dcnLnimibci^^^umbcrJx***^
N
retum(O);
p=p->
next;
return(l);
intright(STD*h.STDDstudent);
〃判断学号student.number是否存在
voidnewstu(STD*h)
〃添加一个新学生
STD*find(STD*h.charname[J)
〃以姓名为关键字
voidintoscores(STD*h)//录入学生的成绩
STD*p;
STDDstudent;
inti;
charxz;
xz=getch();
——
xz=T;
xz==T;
scanf("
%d:
&
s(udcm.number);
p=find(h,student.number);
show(p.O);
输入成绩放入p中;
p->
next!
=NULL;
输入成绩存放在提示没有该学号
next中
录入成绩结束
voidshow(STD*h)//输出学生信息
inti=O;
xz—
xz==r;
xz='
2‘;
xz==T:
xz=2;
scanfC'
%d>
\&
student,number
scanfC^s^.&
student.name
show(pj);
p=find(h,student.number;
p=find(h,student.numb
er;
'
\^->
next!
=NULL/
show(p->
next,!
);
nextj);
p=find(p->
next,student.namc
输出结朿
voidtjcj(STD*h)//学生信息统计
STD*p=h->
intav[5][4],sum[4],i,k=0,mix[4],max[4];
for(i=0;
i<
4;
i++)
for(k=0;
k<
5;
k++)
av[k][i]=0;
sum[i]=0;
mix[i]=100;
max[i]
wilc(p!
记录相应的信息
p=p->
信息统计结束
voidsort(STD*h,inta,intb)//对学生信息按要求进行排序
inti:
STDstudent;
STD*p=h,*q;
——————
while(p->
=NULL);
next\=NULL;
)
q=p->
while(q->
:
=4?
^^
next"
>
number>
q->
numbj弋/
next~>
scores[a]>
sQ->
next->
scor/\a]/
numbe
r<
<
numbe/\/
scoresCa]<
\Q->
sco/rWa]/
/N
Y\
/n
交换p、q下一结点的
数据
交换p、q下一结点的数
交换P、q下—结点的
q=q->
排
序
完
成
voiddel(STD*h)//删除学生
STD*p,*q;
intxz;
inti;
xz==>
2>
whilc(p->
%d'
i);
p=find(p,i);
q-p->
next:
p->
next=q->
free(q):
free(q);
删除完成
[详细设计]//成绩分析问题・cpp
#include<
stdio.h>
intnumber:
intscores[4J;
};
intright(STD*h.STDDstudent)
〃左义结点p,使之在链表中遍历
while(p!
//p指向头结点的下一个结点开始遍历
〃判断P是否为空
if(student.nuniber==p->
nuinber)//否p不为空再判断学号是否相同
return(0);
//若学号相同,返回0
}
return
(1);
//若学号不同,P指向下一结点继续比较
//若学号都没相同的,返回1。
}
STDDstudents;
p=h;
〃立义STDD结构体变量students来存储一些数据〃宦义整型变量
〃立义STDD链表结点
//p指向头结点
=NULL)〃找到最后一个结点
systemCcls&
title学生注册”);
printf(Hvxx>
ovx>
oovx>
vx>
vxxx>
\n\n"
printfC*<
请输入要注册学生的学号“);
scanfC^d^.&
students.number);
〃输入注册的学号
while(right(h.studen⑸=0)〃判断该学号是否存在,若存在,就重新输入
printf(H\a\n学号有重复,请重新输入按任意键继续M);
getch();
system(Hcls&
title学生注册”);
printf(M\n\n\nH);
printf(N<
o<
oo<
x>
\n\nH);
printfCo请输入要注册学生的学号”);
scanf(H%d'
printfC^i<
请输入要注册学生的姓名”);
q=(structSTD*)malloc⑸zcof(STD));
//给q分配内存
printf(Mvx>
ovxxxxxx>
vxx>
xxx>
oo\n\n”);
printfC*<
你注册以以上信息的学生按任意键返回“);
printf(H\nM);
voidshow(STD*pjnti)
if(i==0)〃若i=0只输岀姓名和学号
printf(H<
学号%d姓名%s\n”・p->
numbcr,p・>
namc);
else〃若i=0输出全部信息
print"
%3d%6s%4d%4d%4d%4d%41f\iTp>
n
umber,p->
name,p->
scores[0],p->
scores[l]>
scores[2],p->
scores[3],(p->
scores[3]*1.0)/3);
〃左义链表指针使之对成绩链表进行遍历
〃只要p不为最后一结点
STD*find(STD*h.charname[]){
STD*p=h;
if((strcmp(p->
name.name))=O)//比较姓名
return(p);
//若姓名一样,返回该姓爼的上一结点p
〃若不一样,p向卞继续搜索
//若都不一样,返回最后一结点p
STD*find(STD*h.intnum)
p=h;
if(p->
number=num)
voidshow(STD*h)
titleSTD*p;
査看成绩”);
//能义链表指针
STDDstudent;
//定义记录变量
charxz;
inti=0;
printf(”\n\nj;
〃泄义字符XZ来进行菜单的选择
//定义整型常量i
printf(M<
\n\irr);
printf(Ho成绩査看o\n\nM);
printf(n
1:
査
看
全
部\n\『);
printf(M
2:
单
个\n\『);
0:
返
回\n\n,r);
\n\nu);
输入你的选择:
"
);
switch(xz)〃判断xz的值
case,r:
system(,tclsH);
printf(H\n\nN);
oo\n\nu);
if(p!
printfC*学号姓名语文数学计算机总分平
〃指向下一结点
i++;
if(i==O)
没有学生W);
printf(H
else
一共输出了%d名学生的信息打);
printf(H\n
printfC'
<
按任意键返回”);
break:
case2:
sys(cm("
cls“);
printf(n\n\nN);
printf(Hovxxx>
\n\n'
printfC*
绩
printfC1
xx>
XXX
0000
»
xxx:
1
:
学
号\n\nM);
2
姓
名\n\n”);
回\n\nM);
o\n\nH);
printf(Nprintf(Nxz=getch();
switch(xz)
ovxxx>
\n\n
”);
system(KclsH);
printf(H\ii\n\n\nH);
printf(nvxx>
ovxx>
xxxx>
o\n\n”);
printfC*请输入学号”);
〃以学号为关键字查找
〃只要p的下一结点不为空,输出p的下一结点
scanf(”%cf,&
suidcm・numbcr);
//输入要输出学生的学号p=find(h,student.number);
if(p->
的信息
平均分\n\nN);
nextJ);
}else
printfC1
printf(M\n\nM);
printf(Hvxx>
ovx>
oovx>
o\n\n”);
按任意键返回“);
break;
case,2l:
system(MclsH);
printf(”\n\n\n\n”);
printf(MoooooooooooooooooooooooXnXn”);
printfC*请输入姓名”);
scanf(H%s,\student.name);
//^jiJ入姓名
p=find(h,student.name);
//经姓名为关键字查找if(p->
=NULL)//p的下一结点是否为空
(
printfC1学号姓名语文数学计算机总分
平均分\n\n”);
show(p・>
ncxt,l);
//输出p的下一结点的信息p=find(p->
next,student.name);
//从p下一结点开始继续搜索,看是还有学生为该名,有则输出
没有该学生讯);
一共输出了%d名学生的信息”,i);
voidintoscores(STD*h)
//记录选择的菜单编号
〃记录信息
〃对链表进行遍历
system(,rcls&
title成绩输入”);
printf(H\n\ii\nH);
scores[3]=p->
scores[0]+p->
scores[l]+p->
scores[2]y/H-算总分
i++;
〃指向下一结点继续输入成绩
primf(7门;
printfC1<
你一共录入了%d名学生的成绩\n\n”,i);
printfC*vxxx>
vxxxxxx>
按任意键返回N);
printf(“<
请输入要录入学生的学号“);
scanf(,,%dM,&
student.number);
〃输入学生的学号
〃找到为该学号的学生
〃输岀学生姓需,学号
printf(n\nH);
show(p->
next.O);
printf(,,\nH);
printf(No请输入数学成绩”);
〃输入成绩
scores[0]);
scores[0]>
100IIp->
scores[0]<
0){
请输入数学成绩”);
scanf(N%d\&
scores[OJ);
printfCo请输入英语成绩”);
scanf(,,%d,\&
scores[1]);
scores[1]>
scores[1]<
0)
请输入英语成绩”);
scores[1]);
printfC1o请输入计算机成绩M);
scores[2]);
scores[2]>
100IIp->
scores[2]<
请输入计算机成绩J;
%d,\&
scores[2];
break;
voidsort(STD*h,intauntb)
number>
q->
number)
{〃比较学号的大小,满足则交接两者
student.number=p->
number;
number=q->
number=student.number;
strcpy(studcnt.name,p->
name);
strcpy(p->
name,q->
strcpy(q->
name,studcnt.name);
{〃交换成绩
student.scores[i]=p->
scores[i];
scores[i]=q->
scores[i]=student.scores[i];
else〃若a不为4,就以相应的成绩为关键字排序
scores[a]>
scores[a])
nuniber=q->
numbcr;
ncxt->
nuinber=student.numbcr;
strcpy(student.name,p->
strcpy(p->
name,student.name);
for(i=0:
studcnt.scores[i]=p->
else//b=l,降序
if(a==4)
number<
strcpy(student.name,p->
for(i=0;
iv4;
next-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 成绩 分析 问题 通讯录
![提示](https://static.bdocx.com/images/bang_tan.gif)