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

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

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

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

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

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

《数据结构》课程设计报告

5:

成绩分析问题

16:

通讯录

学院(系):

*************

班级:

*********

学生姓名:

***学号**********

指导教师:

***

时间:

从2011年12月31日到2012年1月6日

一、课程设计概述:

本次数据结构课程设计共完成两个题:

成绩分析问题和通讯录

使用语言:

C

编译环境:

TC3.0/VC6.0

二、课程设计题目一

[实验内容]

成绩分析问题

[问题描述]

录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。

[需求分析]

(1)通过键盘输.入各学生的多门课程的成绩,建立相应的文件input.dat。

(2)对文件input.dat中的数据进行处理,要求具有如下功能:

1)按各门课程成绩排序,并生成相应的文件输出。

2)计算每人的平均成绩,按平均成绩排序,并生成文件。

3)求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数。

4)根据姓名或学号查询某人的各门课成绩,重名情况也能处理。

(3)界面美观。

[概要设计]

-=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//记录数据

{

charname[20];//姓名

intnumber;//学号

intscores[4];//各科分数

};

[流程图]

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

#include

#include

#include

structSTD{//学生成绩链表

charname[20];//学生姓名

intnumber;//学生学号

intscores[4];//学生成绩

structSTD*next;//指向下一学生结点

};

structSTDD//学生结点

{

charname[20];

intnumber;

intscores[4];

};

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->next;//若学号不同,p指向下一结点继续比较

}

return

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

}

voidnewstu(STD*h)

{

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

inti;//定义整型变量

STD*p,*q;//定义STDD链表结点

p=h;//p指向头结点

while(p->next!

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

{

p=p->next;

}

system("cls&title学生注册");

printf("\n\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>请输入要注册学生的学号");

scanf("%d",&students.number);//输入注册的学号

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

{

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

getch();

system("cls&title学生注册");

printf("\n\n\n");

printf("<><><><><<><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>请输入要注册学生的学号");

scanf("%d",&students.number);

}

printf("\n<>请输入要注册学生的姓名");

q=(structSTD*)malloc(sizeof(STD));//给q分配内存

scanf("%s",q->name);//输入姓名

q->number=students.number;//将输入的学号存入q中

for(i=0;i<4;i++)//初始化成绩

q->scores[i]=0;

p->next=q;//将q联结在p的后面

q->next=NULL;//q为最后一结点

printf("\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>你注册以以上信息的学生按任意键返回");

getch();

printf("\n");

}

voidshow(STD*p,inti)

{

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

{

printf("<>学号%d姓名%s\n",p->number,p->name);

}

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

printf("%3d%6s%4d%4d%4d%4d%4.1f\n",p->number,p->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;//定义链表指针使之对成绩链表进行遍历

while(p->next!

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

{

if((strcmp(p->next->name,name))==0)//比较姓名

return(p);//若姓名一样,返回该姓名的上一结点p

p=p->next;//若不一样,p向下继续搜索

}

return(p);//若都不一样,返回最后一结点p

}

STD*find(STD*h,intnum)

{

STD*p;

p=h;

while(p->next!

=NULL)

{

if(p->next->number==num)

return(p);

p=p->next;

}

return(p);

}

voidshow(STD*h)

{

system("cls&title查看成绩");

STD*p;//定义链表指针

STDDstudent;//定义记录变量

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

inti=0;//定义整型常量i

printf("\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>成绩查看<>\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>1:

查看全部\n\n");

printf("<>2:

查看单个\n\n");

printf("<>0:

返回\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>输入你的选择:

");

xz=getch();

switch(xz)//判断xz的值

{

case'1':

system("cls");

p=h->next;

printf("\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

if(p!

=NULL)

{

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

}

while(p!

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

{

show(p,1);

p=p->next;//指向下一结点

i++;

}

if(i==0)

printf("没有学生\n");

else

printf("\n一共输出了%d名学生的信息",i);

printf("\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>按任意键返回");

getch();

break;

case'2':

system("cls");

printf("\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>成绩查看<>\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>1:

学号\n\n");

printf("<>2:

姓名\n\n");

printf("<>0:

返回\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>输入你的选择:

");

xz=getch();

switch(xz)

{

case'1':

system("cls");

printf("\n\n\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("请输入学号");

scanf("%d",&student.number);//输入要输出学生的学号

p=find(h,student.number);//以学号为关键字查找

if(p->next!

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

{

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

show(p->next,1);

}

else

printf("没有该学生\n");

printf("\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>按任意键返回");

getch();

break;

case'2':

system("cls");

printf("\n\n\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("请输入姓名");

scanf("%s",student.name);//输入姓名

p=find(h,student.name);//经姓名为关键字查找

if(p->next!

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

{

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

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("\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>按任意键返回");

getch();

break;

}

}

}

voidintoscores(STD*h)

{

inti;

charxz;//记录选择的菜单编号

STDDstudent;//记录信息

STD*p;//对链表进行遍历

system("cls&title成绩输入");

printf("\n\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("成绩录入\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>1:

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

printf("<>2:

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

printf("<>0:

返回\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("<>请输入你的选择");

xz=getch();

printf("%c",xz);

system("cls");

printf("\n\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

printf("成绩录入\n\n");

printf("<><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");

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

{

case'1':

p=h->next;//p指向头结点的下一结点

i=0;

while(p!

=NULL)//p是否为空

{

show(p,0);//输出p的姓名和学号,下面按提示输入成绩

printf("\n");

printf("<>请输入数学成绩");

scanf("%d",&p->scores[0]);

while(p->scores[0]>100||p->scores[0]<0)//若成绩不正确,重新输入

{

printf("<>请输入数学成绩");

scanf("%d",&p->scores[0]);

}

printf("<>请输入英语成绩");

scanf("%d",&p->scores[1]);

while(p->scores[1]>100||p->scores[1]<0)

{

printf("<>请输入英语成绩");

scanf("%d",&p->scores[1]);

}

printf("<>请输入计算机成绩");

scanf("%d",&p->scores[2]);

while(p->scores[2]>100||p->scores[2]<0)

{

printf("<>请输入计算机成绩");

scanf("%d",&p->scores[2]);

}

p->scores[3]=p->scores[0]+p->scores[1]+p->scores[2];//计算总分

p=p->next;//指向下一结点继续输入成绩

i++;

printf("\n");

}

printf("<>你一共录入了%d名学生的成绩\n\n",i);

printf("<><><><><><><><><><><><><><><><><><><><><><><>\n\n");

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->scores[0]);

while(p->next->scores[0]>100||p->next->scores[0]<0)

{

printf("<>请输入数学成绩");

scanf("%d",&p->next->scores[0]);

}

printf("<>请输入英语成绩");

scanf("%d",&p->next->scores[1]);

while(p->next->scores[1]>100||p->next->scores[1]<0)

{

printf("<>请输入英语成绩");

scanf("%d",&p->next->scores[1]);

}

printf("<>请输入计算机成绩");

scanf("%d",&p->next->scores[2]);

while(p->next->scores[2]>100||p->next->scores[2]<0)

{

printf("<>请输入计算机成绩");

scanf("%d",&p->next->scores[2]);

}

p->next->scores[3]=p->next->scores[0]+p->next->scores[1]+p->next->scores[2];

break;

}

}

voidsort(STD*h,inta,intb)

{

inti;

STDDstudent;//定义记录变量

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->next->number>q->next->number)

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

student.number=p->next->number;

p->next->number=q->next->number;

q->next->number=stud

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

当前位置:首页 > 小学教育 > 语文

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

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