数据结构课程设计.docx

上传人:b****5 文档编号:8567638 上传时间:2023-01-31 格式:DOCX 页数:36 大小:242.40KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共36页
数据结构课程设计.docx_第2页
第2页 / 共36页
数据结构课程设计.docx_第3页
第3页 / 共36页
数据结构课程设计.docx_第4页
第4页 / 共36页
数据结构课程设计.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(36页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

郑州轻工业学院

课程设计任务书

题目:

学生成绩分析问题

姓名:

院(系):

数学与信息科学学院

专业班级:

学号:

指导教师:

时间:

2014年6月09日至2014年6月20日

一、基本要求及主要内容

1.学生成绩分析问题

(1)问题描述。

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

(2)基本要求。

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

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

按各门课程成绩排序,并生成相应的文件输出;计算每个人的平均成绩,按平均成绩排序,并生成文件;求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数;根据姓名或学号查询某人的各门课成绩。

c)使用VisualC++6.0控制台应用程序开发,界面美观。

(3)测试数据,如下图所示。

学号

姓名

数学

英语

计算机

01

王芳

78

77

90

02

张强

89

67

88

03

李浩

56

66

78

04

黄鹏

89

86

85

05

尚校

67

88

76

06

赵鹏

45

54

67

07

蒋泽

78

76

70

2.职工信息管理系统

设有一个职工文件,其结构为:

职工号(no)、姓名、部门号、工资数、职工号指针、部门号指针和工资数指针。

设计一个程序,从该文件中读取记录到一个单链表中,并完成如下功能:

(1)输入。

添加一个职工信息。

(2)输入。

输出全部职工信息。

(3)按no排序。

通过pno指针将职工记录按no从小到大链接起来。

(4)按no输出。

沿pno链输出全部职工信息。

(5)按depno排序。

通过pdepno指针将职工记录按depno从小到达链接起来。

(6)按depno输出。

沿pdepno链输出全部职工信息。

(7)按salary排序。

通过psalary指针将职工记录按salary从小到大链接起来。

(8)按salary输出。

沿psalary链输出全部职工信息。

(9)清空。

删除职工文件中的全部记录。

(10)存储退出。

将单链表中的全部结点存储到职工文件中,然后退出程序运行过程。

3.通讯录管理系统

通讯录管理系统一般包括通讯者结点信息的插入、查询、删除、更新以及通讯录信息的输出等功能。

通讯者的信息一般包括编号、姓名、性别、电话以及地址等。

4.约瑟夫生者死者游戏

约瑟夫游戏的大意是:

30名旅客同乘一条船,因为超载严重,加上风雨大作,情况危急。

船长告诉旅客,只有将全船一半的旅客扔进海中,其他人才能幸免于难。

无奈,大家商议出如此办法,30个人围成一圈,由第一个人开始依次报数,数到第9人,便把他仍入海中,然后再从他的下一个人开始报数,数到第9人,便把他仍入海中,如此循环进行,直至剩下15个旅客为止。

问哪些位置是将被扔下大海的位置。

5.迷宫问题

给定M´N的迷宫图,求一条从制定入口到出口的路径。

假设迷宫如图教材P77页图3.7所示。

对于图中每个方块,用个空白表示通道,用阴影表示墙。

所求路径必须是简单路径,即在求得的路径上不能重复出现同一通道块。

二、主要参考文献

[1]李春葆,尹为民等,数据结构教程(第4版),北京:

清华大学出版社,2013年.

完成期限:

2014年6月20日

指导教师签名:

课程负责人签名:

2014年6月9日

摘要

一、通过对问题的具体描述的理解,可知道要用结构体来解决本题目数据较多这个问题。

另外根据问题的要求,可以采用构造函数来解决每一个小要求,以实现该题的全部要求。

二、用合适的算法解决问题,并编写代码,通过计算机来实现所有的功能。

三、设计界面友好,设计过程将主体函数声明于主函数之前,具体函数体写在主函数之后,以及各种注释更方便程序员理解程序主要内容。

四、结合设计过程,总结自己的心得体会。

五、列出参考文献。

1问题描述

1.1问题描述

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

1.2基本要求

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

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

①.按各门课程成绩排序,并生成相应的文件输出;

②.计算每个人的平均成绩,按平均成绩排序,并生成文件;

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

④.根据姓名或学号查询某人的各门课成绩。

3、使用VisualC++6.0控制台应用程序开发,界面美观

1.3问题的其它注意事项

算法的设计尽量简单,用简单的程序来实现复杂的问题的求解。

一定要注意程序的可读性实现,要按要求实现问题中的各项功能。

2程序结构及功能描述

图1程序中函数的调用结构

首先设置要统计学生的个数;然后进入主函数,之后会有提示信息选择是否查看接着就进入主菜单。

主菜单包括:

学生成绩信息、平均成绩信息、排序、查找和退出系统5项总体功能。

排序又包含:

按数学成绩排序、按英语成绩排序、按计算机成绩排序、按平均成绩排序和最高成绩、最低成绩以及优(90~100)、良(80~89)、中(70~79)、及格(60~69)和不及格(0~59)的人数。

查找包含:

按姓名查找和按学号查找。

平均成绩包含:

数学的平均成绩、英语的平均成绩和计算机的平均成绩。

有关函数如下:

(1)voidmenu();//主菜单函数,用来显示各种功能选项。

(2)voidshow(studentstu[],intn);//显示学生信息,把各科成绩、//姓名、学号都输出来。

(3)voidreadfile(studentstu[],intn);//读取文件数据,用来对//数据的操作。

(4)voidmath(studentstu[],intn);//对数学成绩的排序

(5)voidenglish(studentstu[],intn);//对英语成绩的排序

(6)voidcomputer(studentstu[],intn);//对计算机成绩的排序

(7)voidaverage(studentstu[],intn);//学生三门课程的平均成绩的计算

(8)voidscore_analyse(studentstu[],intn);//对学生各科成绩的//分析与各个等级的人数的统计

(9)voidsearch_no(studentstu[],intn);//按学号查找学生信息

(10)voidsearch_name(studentstu[],intn);//按姓名查找学生信息

(11)voidclosesystem();//主程序的关闭

3算法描述

#include

#include

#include

#include

#include

#defineN7

staticintselect=0;//输入选择的项

staticintnum=0;//已录入学生人数

//************************定义学生结构体****************************

typedefstruct

{

charno[12];//学号

charname[16];//姓名

intmath;//数学成绩

intenglish;//英语成绩

intcomputer;//计算机成绩

intaverage;//个人平均成绩

}student;

studentstu[N];//定义结构体数组

studentstud[N];//备份结构体数组用来排序

//*******************************菜单*******************************

voidmenu();//菜单原型声明

voidshow(studentstu[],intn);//显示学生数据原型声明

voidreadfile(studentstu[],intn);//读取数据原型声明

voidmath(studentstu[],intn);//对数学成绩排序原型声明

voidenglish(studentstu[],intn);//对英语成绩排序原型声明

voidcomputer(studentstu[],intn);//对计算机成绩排序原型声明

voidaverage(studentstu[],intn);//对平均成绩排序原型声明

intdegree(intnum);//等级分级原型声明

voidscore_analyse(studentstu[],intn);//成绩分析原型声明

voidsearch_no(studentstu[],intn);//按学号查找原型声明

voidsearch_name(studentstu[],intn);//按姓名查找原型声明

voidclosesystem();//关闭程序

//*********************************测试函数*************************

voidmain()

{

studentstu[7]={//定义学生体

{"01","王芳",78,77,90},

{"02","张强",89,67,88},

{"03","李浩",56,66,78},

{"04","黄鹏",89,86,85},

{"05","尚校",67,88,76},

{"06","赵鹏",45,54,67},

{"07","蒋泽",78,76,70},

};

readfile(stu,7);//读取数据

for(;;){

menu();

cin>>select;

switch(select)

{

case1:

math(stu,7);break;

case2:

english(stu,7);break;

case3:

computer(stu,7);break;

case4:

average(stu,7);break;

case5:

score_analyse(stu,7);break;

case6:

search_no(stu,7);break;

case7:

search_name(stu,7);break;

case8:

show(stu,7);break;

case0:

closesystem();break;

default:

printf("dataerror!

");

}

}

}

//▲▲▲▲▲▲▲▲▲▲▲▲▲▲〖具体函数原型〗▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

voidmenu()

{

system("cls");

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"〓〓〓〓〓〓〓〓〓〓〓〓【欢迎进入学生成绩系统】〓〓〓〓〓〓〓〓〓〓〓〓〓\n";

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"※\t\t\t输入相应的序号实现功能:

\t\t\t\t※"<

cout<<"※\t\t1、按数学成绩排序,并生成相应的文件输出\t\t※"<

cout<<"※\t\t2、按英语成绩排序,并生成相应的文件输出\t\t※"<

cout<<"※\t\t3、按计算机成绩排序,生成相应的文件输出\t\t※"<

cout<<"※\t\t4、按平均成绩排序,并生成文件\t\t\t\t※"<

cout<<"※\t\t5、各科成绩分布\t\t\t\t\t※"<

cout<<"※\t\t6、按学号查询\t\t\t\t\t\t※"<

cout<<"※\t\t7、按姓名查询\t\t\t\t\t\t※"<

cout<<"※\t\t8、显示新学生信息\t\t\t\t\t※"<

cout<<"※\t\t0、退出系统\t\t\t\t\t\t※"<

cout<<"※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※"<

}

//**************************显示学生数据****************************

voidshow(studentstu[],intn)

{

system("cls");//清屏

cout<<"\t〓〓〓〓〓〓〓〓〓☆学生成绩☆〓〓〓〓〓〓〓〓〓〓\n";

cout<<"\t■\t"<<"学号\t"<<"姓名\t"<<"数学\t"<<"英语\t"<<"计算机\t■\n";

for(inti=0;i

{

cout<<"\t■\t"<

<

}

cout<<"\t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n";

cout<<"即将进入菜单选择!

"<

system("pause");

}

//************************文件的读写***********************************

voidreadfile(studentstu[],intn)

{

inti;

FILE*fp;

fp=fopen("G:

\\数据结构课程设计\\input.dat","wb");//以"写"方式打开一个二进制文件

if(fp==NULL)

{

cout<<"Can'topen!

\n";

exit(0);

}

cout<<"input文件打开成功。

"<

for(i=0;i

{

fwrite(&stu[i],sizeof(student),1,fp);//一次写入一个学生的成绩

}

system("pause");system("cls");//清屏

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"〓〓〓〓〓〓〓〓〓〓〓【是否显示学生成绩信息?

】〓〓〓〓〓〓〓〓〓〓〓〓〓\n";

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"☆☆☆☆☆☆☆☆☆☆☆【1、是\t\t】☆☆☆☆☆☆☆☆☆☆☆☆\n";

cout<<"☆☆☆☆☆☆☆☆☆☆☆【0、其他\t\t】☆☆☆☆☆☆☆☆☆☆☆☆\n";

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cin>>select;

if(select==1){system("cls");show(stu,7);system("cls");}

else

{

cout<<"即将进入菜单选项!

"<

system("pause");

}

}

//*************************按数学成绩排序并输出************************

voidmath(studentstu[],intn)

{

system("cls");//清屏

ofstreamfout;//fout输出文件流对象

ifstreamfin;//fin输入文件流对象

inti=0;

studentt;//排序时用来当做临时变量

for(i=0;i

stud[i]=stu[i];

fout.open("math.txt",ios:

:

out|ios:

:

binary);//打开要导入的math.txt文件

if(!

fout)

{

cout<<"Error:

Can'topenmath.txt!

";

exit

(1);

}

cout<<"成功打开math.txt文件。

"<

system("pause");

fin.open("input.dat",ios:

:

in|ios:

:

binary);//打开要读取得input.dat文件

if(!

fin)

{

cout<<"Error:

Can'topeninput.dat!

";

exit

(1);

}

intk,j;

for(k=0;k

{

for(j=0;j

{

if(stud[j].math>stud[j+1].math)

{

t=stud[j];

stud[j]=stud[j+1];

stud[j+1]=t;

}

}

}

system("cls");

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆【按数学成绩升序排序】☆☆☆☆☆☆☆☆☆☆☆☆☆\n";

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n";

cout<<"〓\t\t学号\t"<<"姓名\t"<<"数学\t"<<"英语\t"<<"计算机\t\t\t〓\n";

for(i=0;i

{

cout<<"〓\t\t"<

<

fout.write((char*)&stud[i],sizeof(student));//将学生排序后得信息写入文件

}

cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n";

cout<<"数学排序已录入math.txt";

fout.close();

cout<<"将返回菜单!

"<

system("pause");

}

//*************************按英语成绩排序并输出************************

voidenglish(studentstu[],intn)

{

system("cls");//清屏

ofstreamfout;//fout输出文件流对象

ifstreamfin;//fin输入文件流对象

inti=0;

studentt;//排序时用来当做临时变量

for(i=0;i

stud[i]=stu[i];

fout.open("english.txt",ios:

:

out|ios:

:

binary);//打开要导入的math.txt文件

if(!

fout)

{

cout<<"Error:

Can'topenenglish.txt!

";

exit

(1);

}

cout<<"成功打开english.txt文件。

"<

system("pause");//暂停

fin.open("input.dat",ios:

:

in|ios:

:

binary);//打开要读取得input.dat文件

if(!

fin)

{

cout<<"Error:

Can'topeninput.dat!

";

exit

(1);

}

intk,j;

for(k=0;k

{

for(j=0;j

{

if(stud[j].english>stud[j+1].english)

{

t=stud[j];

stud[j]=stud[j+1];

stud[j+1]=t;

}

}

}

system("cls");

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆【按英语成绩升序排序】☆☆☆☆☆☆☆☆☆☆☆☆☆\n";

cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n";

cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n";

cout<<"〓\t\t学号\t"<<"姓名\t"<<"数学\t"<<"英语\t"<<"计算机\t\t\t〓\n";

for(i=0;i

{

cout<<"〓\t\t"<

fout.write((char*)&stud[i],sizeof(student));//将学生排序后得信息写入文件

}

cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n";

cout<<"英语排序已录入english.txt";

fout.close();

cout<<"将返回菜单!

"<

system("pause");

}

//*************************按英语成绩排序并输出************************

voidcomputer(studentstu[],intn)

{

system("cls");//清屏

ofstreamfout;//fout输出文件流对象

ifstreamfin;//fin输入文件流对象

inti=0;

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

当前位置:首页 > 初中教育

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

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