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

上传人:b****6 文档编号:16210603 上传时间:2022-11-21 格式:DOCX 页数:63 大小:608.35KB
下载 相关 举报
数据结构课程设计报告 成绩分析问题 和 通讯录Word下载.docx_第1页
第1页 / 共63页
数据结构课程设计报告 成绩分析问题 和 通讯录Word下载.docx_第2页
第2页 / 共63页
数据结构课程设计报告 成绩分析问题 和 通讯录Word下载.docx_第3页
第3页 / 共63页
数据结构课程设计报告 成绩分析问题 和 通讯录Word下载.docx_第4页
第4页 / 共63页
数据结构课程设计报告 成绩分析问题 和 通讯录Word下载.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

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

《数据结构课程设计报告 成绩分析问题 和 通讯录Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告 成绩分析问题 和 通讯录Word下载.docx(63页珍藏版)》请在冰豆网上搜索。

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

[概要设计]

-=ADT=

{

intright(STD*h,inti);

//查看学号i是否存在

voidnewstu(STD*h);

//新增一个学生

STD*find(STD*h,charnam);

//查找姓名为nam的学生,返回该学生上一结点的地址

STD*find(STD*h,charnum);

//查找学号为mum的学生,返回该学生上一结点的地址

voidshow(STD*p,inti);

//输出结点p的信息,若i=0只输出姓名和学号,i=1,输出全部信息

voidshow(STD*h);

//按提示输出学生的信息

voidintoscores(STD*h);

//按提示录入学生的成绩

voidsort(STD*h,inta,intb);

/*对学生信息排序,a为0以数学成绩为关键字排序a=1-4为英语成绩、计算机成绩、总成绩、学号。

b=0为降序,b=1为升序*/

voidcjjpx(STD*h);

//按提示对学生信息排序

voidtjcj(STD*h);

//统计学生成绩

voiddel(STD*h);

//按提示删除学生

intinto(STD*h);

//从文件中读数据放在头结点为h的链表中

intsave(STD*h);

//将头结点为h的链表数据保存在文件中

}

[存储结构]

structSTD//学生信息链表

charname[20];

//姓名

intnumber;

//学号

intscores[4];

//各科成绩

structSTD*next;

//指向下一结点的指针

};

structSTDD//记录数据

//姓名

//各科分数

[流程图]

intright(STD*h,STDDstudent);

//判断学号student.number是否存在

voidnewstu(STD*h)STD*find(STD*h,charname[])

//添加一个新学生//以姓名为关键字

STD*find(STD*h,charname[])

//以学号为关键字

voidintoscores(STD*h)//录入学生的成绩

 

voidshow(STD*h)//输出学生信息

voidtjcj(STD*h)//学生信息统计

voidsort(STD*h,inta,intb)//对学生信息按要求进行排序

voiddel(STD*h)//删除学生

[详细设计]

//成绩分析问题.cpp

#include<

stdio.h>

stdlib.h>

conio.h>

string.h>

structSTD{//学生成绩链表

//学生姓名

//学生学号

//学生成绩

//指向下一学生结点

structSTDD//学生结点

intright(STD*h,STDDstudent)

STD*p;

//定义结点p,使之在链表中遍历

p=h->

next;

//p指向头结点的下一个结点开始遍历

while(p!

=NULL)//判断p是否为空

{

if(student.number==p->

number)//否p不为空再判断学号是否相同

return(0);

//若学号相同,返回0

p=p->

//若学号不同,p指向下一结点继续比较

}

return

(1);

//若学号都没相同的,返回1。

voidnewstu(STD*h)

STDDstudents;

//定义STDD结构体变量students来存储一些数据

inti;

//定义整型变量

STD*p,*q;

//定义STDD链表结点

p=h;

//p指向头结点

while(p->

next!

=NULL)//找到最后一个结点

system("

cls&

title学生注册"

);

printf("

\n\n\n"

<

>

<

\n\n"

请输入要注册学生的学号"

scanf("

%d"

&

students.number);

//输入注册的学号

while(right(h,students)==0)//判断该学号是否存在,若存在,就重新输入

printf("

\a\n学号有重复,请重新输入按任意键继续"

getch();

system("

scanf("

\n<

请输入要注册学生的姓名"

q=(structSTD*)malloc(sizeof(STD));

//给q分配内存

%s"

q->

name);

//输入姓名

q->

number=students.number;

//将输入的学号存入q中

for(i=0;

i<

4;

i++)//初始化成绩

q->

scores[i]=0;

p->

next=q;

//将q联结在p的后面

next=NULL;

//q为最后一结点

你注册以以上信息的学生按任意键返回"

getch();

\n"

voidshow(STD*p,inti)

if(i==0)//若i=0只输出姓名和学号

学号%d姓名%s\n"

p->

number,p->

else//若i=0输出全部信息

%3d%6s%4d%4d%4d%4d%4.1f\n"

name,p->

scores[0],p->

scores[1],p->

scores[2],p->

scores[3],(p->

scores[3]*1.0)/3);

STD*find(STD*h,charname[])

STD*p=h;

//定义链表指针使之对成绩链表进行遍历

=NULL)//只要p不为最后一结点

if((strcmp(p->

next->

name,name))==0)//比较姓名

return(p);

//若姓名一样,返回该姓名的上一结点p

//若不一样,p向下继续搜索

return(p);

//若都不一样,返回最后一结点p

STD*find(STD*h,intnum)

=NULL)

if(p->

number==num)

voidshow(STD*h)

title查看成绩"

//定义链表指针

STDDstudent;

//定义记录变量

charxz;

//定义字符xz来进行菜单的选择

inti=0;

//定义整型常量i

成绩查看<

1:

查看全部\n\n"

2:

查看单个\n\n"

0:

返回\n\n"

输入你的选择:

"

xz=getch();

switch(xz)//判断xz的值

case'

1'

:

system("

cls"

p=h->

if(p!

{

printf("

学号姓名语文数学计算机总分平均分\n\n"

}

while(p!

=NULL)//只要p不为空,输出该结点的信息

show(p,1);

p=p->

//指向下一结点

i++;

if(i==0)

没有学生\n"

else

\n一共输出了%d名学生的信息"

i);

按任意键返回"

break;

2'

学号\n\n"

姓名\n\n"

xz=getch();

switch(xz)

case'

\n\n\n\n"

请输入学号"

scanf("

student.number);

//输入要输出学生的学号

p=find(h,student.number);

//以学号为关键字查找

if(p->

=NULL)//只要p的下一结点不为空,输出p的下一结点的信息

{

printf("

show(p->

next,1);

}

else

没有该学生\n"

getch();

break;

请输入姓名"

student.name);

//输入姓名

p=find(h,student.name);

//经姓名为关键字查找

=NULL)//p的下一结点是否为空

while(p->

{

i++;

show(p->

//输出p的下一结点的信息

p=find(p->

next,student.name);

//从p下一结点开始继续搜索,看是还有学生为该名,有则输出

}

if(i==0)

没有该学生\n"

else

voidintoscores(STD*h)

//记录选择的菜单编号

//记录信息

//对链表进行遍历

title成绩输入"

成绩录入\n\n"

1:

录入全部学生成绩\n\n"

2:

录入单个学生成绩\n\n"

0:

请输入你的选择"

%c"

xz);

switch(xz)//判断输出菜单的编号

//p指向头结点的下一结点

i=0;

=NULL)//p是否为空

show(p,0);

//输出p的姓名和学号,下面按提示输入成绩

\n"

请输入数学成绩"

p->

scores[0]);

while(p->

scores[0]>

100||p->

scores[0]<

0)//若成绩不正确,重新输入

scanf("

请输入英语成绩"

scores[1]);

scores[1]>

scores[1]<

0)

请输入计算机成绩"

scores[2]);

scores[2]>

scores[2]<

p->

scores[3]=p->

scores[0]+p->

scores[1]+p->

scores[2];

//计算总分

//指向下一结点继续输入成绩

你一共录入了%d名学生的成绩\n\n"

printf("

请输入要录入学生的学号"

//输入学生的学号

p=find(h,student.number);

//找到为该学号的学生

show(p->

next,0);

//输出学生姓名,学号

//输入成绩

while(p->

p->

voidsort(STD*h,inta,intb)

//定义链表变量

//从头开始

if(b==0)//若b=0,为升序

q=p->

//q为p的下一结点

while(q->

=NULL)//q不为最后一结点

if(a==4)//若a=4,则以学号为关键字排序

if(p->

number>

number)

{//比较学号的大小,满足则交接两者

student.number=p->

number;

p->

number=q->

q->

number=stud

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

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1