数据结构课程设计报告 成绩分析问题 和 通讯录
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计报告
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=
{
int right(STD *h,int i);
// 查看学号i 是否存在
void newstu(STD *h);
// 新增一个学生
STD *find(STD *h,char nam);
// 查找姓名为nam的学生,返回该学生上一结点的地址
STD *find(STD *h,char num);
// 查找学号为mum的学生,返回该学生上一结点的地址
void show(STD *p,int i);
// 输出结点p的信息,若i=0 只输出姓名和学号,i=1,输出全部信息void show(STD *h);
// 按提示输出学生的信息
void intos cores(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);
// 统计学生成绩
void del(STD *h);
// 按提示删除学生
int into(STD *h);
// 从文件中读数据放在头结点为h的链表中
int save(STD *h);
// 将头结点为h的链表数据保存在文件中
}
[存储结构]
struct STD //学生信息链表
{
char name[20]; //姓名
int number; //学号
int scores[4]; //各科成绩
struct STD *next;//指向下一结点的指针
};
struct STDD // 记录数据
{
char name[20];//姓名
int number; //学号
int scores[4]; //各科分数
};
[流程图]
int right(STD *h,STDD student);
//判断学号student.number是否存在
void newstu(STD *h) STD *find(STD *h,char name[]) //添加一个新学生 //以姓名为关键字
STD *find(STD *h,char name[]) //以学号为关键字
void intoscores(STD *h) // 录入学生的成绩
void show(STD *h) //输出学生信息
void tjcj(STD *h) //学生信息统计
void sort(STD *h,int a,int b) //对学生信息按要求进行排序
void del(STD *h) //删除学生
[详细设计]
// 成绩分析问题.cpp
#include
#include
#include
#include
struct STD{ //学生成绩链表
char name[20]; //学生姓名
int number; //学生学号
int scores[4]; //学生成绩
struct STD *next; //指向下一学生结点
};
struct STDD //学生结点
{
char name[20];
int number;
int scores[4];
};
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); //若学号相同,返回0
p=p->next; //若学号不同,p指向下一结点继续比较
}
return (1); //若学号都没相同的,返回1。
}
void newstu(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("\n\n\n");