11-12-2-数据结构-课程设计任务书

更新时间:2024-01-20 03:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

郑州轻工业学院

课 程 设 计 任 务 书

题 目:姓 名:院(系):专业班级:学 号:指导教师:时 间:学生成绩分析

周凯丽 数学与信息科学系 信科10-1班 541010010160 时海亮,裴云霞

2012年6月04日至2012年6月15日

1

一、基本要求及主要内容

1. 学生成绩分析问题

(1)问题描述。录入并保存一个班级学生多门课程的成绩,并对成绩进行分析。

(2)基本要求。a)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。b)对文件input.dat中的数据进行处理,要求具有如下功能:按各门课程成绩排序,并生成相应的文件输出;计算每个人的平均成绩,按平均成绩排序,并生成文件;求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数;根据姓名或学号查询某人的各门课成绩。c)使用Visual C++ 6.0 控制台应用程序开发,界面美观。

(3)测试数据,如下图所示。 学号 01 02 03 04 05 06 07

姓名 王芳 张强 李浩 黄鹏 尚校 赵鹏 蒋泽 数学 78 89 56 89 67 45 78 英语 77 67 66 86 88 54 76 计算机 90 88 78 85 76 67 70 2

1 问题描述

1.1 问题描述

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

1.2 基本要求

1、通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。2、对文件input.dat中的数据进行处理,要求具有如下功能:

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

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

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

3

4

2 程序结构及功能描述

void menu();//主菜单

int printf_student(student stu[]);//输入学生信息 void math(student stu[]);//按数学成绩排序 void eng(student stu[]);//按英语成绩排序 void computer(student stu[]);//按计算机成绩排序 void averg(student stu[]);//按平均成绩输出 void data_analyse(student stu[]);//各科成绩分析 void search_no(student stu[]);//按学号查询 void search_name(student stu[]);//按姓名查询 void main()//主函数

5

3 算法描述

#include\#include\#include\#include\#include\#define N 7

int degree(int num); struct student { char NO[3]; char name[20]; float math; float eng; float computer; float aver; }stu[N]; void menu();

int printf_student(student stu[]); void math(student stu[]); void eng(student stu[]);

void computer(student stu[]); void averg(student stu[]);

void data_analyse(student stu[]); int degree(float num);

void search_no(student stu[]); void search_name(student stu[]); void main() { printf(\输入你需要在功能号\ menu(); int i; scanf(\ switch(i)

6

{ case 1: math(stu);break; case 2: eng(stu);break; case 3:computer(stu);break; case 4:averg(stu);break; case 5:data_analyse(stu);break; case 6:search_name(stu);break; case 7:search_no( stu);break; case 8:printf_student(stu);break; default:printf(\ error!\ } }

void menu() { cout<<\ cout<<\欢迎进入学生成绩系统 ***********\ cout<<\可以实现的功能有:\ cout<<\、按数学成绩排序,并生成相应的文件输出\ cout<<\、按英语成绩排序,并生成相应的文件输出\ cout<<\、按计算机成绩排序,生成相应的文件输出\ cout<<\、查询个人平均成绩\ cout<<\、各科成绩分布\ cout<<\、按姓名查询\ cout<<\、按学号查询\ cout<<\、输入新学生信息\ cout<<\ }

//输入学生情况

int printf_student(student stu[]) { FILE *mp; int i; if((mp=fopen(\

7

{ printf(\ exit(0); } cout<<\ cout<<\请输入学生信息,用空格隔开!***********\ cout<<\ fprintf(mp,\学号\\t姓名\\t数学\\t英语\\t计算机\\n\ for(i=0;i

scanf(\omputer);

fprintf(mp,%u[i].computer); } fclose(mp); return 0; }

//按数学成绩排序

void math(student stu[]) { system(\ cout<<\ cout<<\按数学成绩排序*******************\ cout<<\ FILE *mp,*np; np=fopen(\学生信息.txt\ if(np==NULL) { printf(\

8

exit(0); } int i=0; while(fscanf(np,\].eng,&stu[i].computer)!=EOF) { i++; } mp=fopen(\数学排序.txt\ if(mp==NULL) { printf(\ exit(0); } int k,j; student t; for(k=0;kstu[j+1].math) { t=stu[j]; stu[j]=stu[j+1]; stu[j+1]=t; } } cout<<\学号\\t\姓名\\t\数学\\t\英语\\t\计算机\ fprintf(mp,\学号\\t姓名\\t数学\\t英语\\t计算机\\n\ for(i=0;i

fprintf(mp,%u[i].computer); }

9

fclose(mp); }

//按英语成绩排序 void eng(student stu[]) { system(\ cout<<\ cout<<\按英语成绩排序*******************\ cout<<\ FILE *mp,*np; np=fopen(\学生信息.txt\ if(np==NULL) { printf(\ exit(0); } int i=0; while(fscanf(np,\].eng,&stu[i].computer)!=EOF) { i++; } mp=fopen(\英语排序.txt\ if(mp==NULL) { printf(\ exit(0); } int k,j; student t; for(k=0;kstu[j+1].eng) { t=stu[j];

10

stu[j]=stu[j+1]; stu[j+1]=t; } } cout<<\学号\\t\姓名\\t\英语\\t\数学\\t\计算机\ fprintf(mp,\学号\\t姓名\\t英语\\t数学\\t计算机\\n\ for(i=0;i

fprintf(mp,%u[i].computer); } fclose(mp); }

//按计算机成绩排序

void computer(student stu[]) { system(\ cout<<\ cout<<\按计算机成绩排序*****************\ cout<<\ FILE *mp,*np; np=fopen(\学生信息.txt\ if(np==NULL) { printf(\ exit(0); } int i=0; while(fscanf(np,\].eng,&stu[i].computer)!=EOF) { i++;

11

} mp=fopen(\计算机排序.txt\ if(mp==NULL) { printf(\ exit(0); } int k,j; student t; for(k=0;kstu[j+1].computer) { t=stu[j]; stu[j]=stu[j+1]; stu[j+1]=t; } } cout<<\学号\\t\姓名\\t\计算机\\t\数学\\t\英语\ fprintf(mp,\学号\\t姓名\\t计算机\\t数学\\t英语\\n\ for(i=0;i

fprintf(mp,\ng,stu[i].math); } fclose(mp); }

//求个人平均成绩

void averg(student stu[]) { system(\ cout<<\

12

cout<<\按个人平均成绩排序****************\ cout<<\ FILE *mp,*np; np=fopen(\学生信息.txt\ if(np==NULL) { printf(\ exit(0); } int i=0; while(fscanf(np,\].eng,&stu[i].computer)!=EOF) { i++; } mp=fopen(\按个人平均成绩排序.txt\ if(mp==NULL) { printf(\ exit(0); } int j; for(j=0;jstu[n+1].computer) { t=stu[n]; stu[n]=stu[n+1]; stu[n+1]=t; }

13

} cout<<\学号\\t\姓名\\t\计算机\\t\数学\\t\英语\\t\平均成绩\

fprintf(mp,\学号\\t姓名\\t计算机\\t数学\\t英语\\t平均成绩\\n\ for(i=0;i

fprintf(mp,%u[i].eng,stu[i].math,stu[i].aver); } fclose(mp); }

//学科成绩

void data_analyse(student stu[])//各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数; { float ma[8],en[8],co[8];//各门课0.平均1.最高2.最低3.不及格。。。。 for(int j=0;j<8;j++) { ma[j]=0; en[j]=0; co[j]=0; } FILE *np; np=fopen(\学生信息.txt\ if(np==NULL) { printf(\ exit(0); } int i=0; while(fscanf(np,\].eng,&stu[i].computer)!=EOF) {

14

//平均

ma[0]+=stu[i].math; en[0]+=stu[i].eng;

co[0]+=stu[i].computer; //各门课统计、最高 if(stu[i].math>ma[1]) ma[1]=stu[i].math; if(stu[i].eng>en[1]) en[1]=stu[i].eng; if(stu[i].computer>co[1]) co[1]=stu[i].computer; //各门课统计、最低 if(stu[i].math

switch(degree(stu[i].math)) {

case 0:ma[3]++;break; case 1:ma[4]++;break; case 2:ma[5]++;break; case 3:ma[6]++;break; case 4:ma[7]++;break; }

switch(degree(stu[i].eng)) {

case 0:en[3]++;break; case 1:en[4]++;break; case 2:en[5]++;break; case 3:en[6]++;break;

15

case 4:en[7]++;break; } switch(degree(stu[i].computer)) { case 0:co[3]++;break; case 1:co[4]++;break; case 2:co[5]++;break; case 3:co[6]++;break; case 4:co[7]++;break; } i++; } fclose(np); ma[0]=ma[0]/N; en[0]=en[0]/N; co[0]=co[0]/N; printf(\平均\\t最高\\t最低\\t不及格\\t60~69\\t70~79\\t80~89\\t90~100\\n\ printf(\数学\\t\ for(int k=0;k<8;k++) printf(\ printf(\英语\\t\ for(int n=0;n<8;n++) printf(\ printf(\计算机\\t\ for(int m=0;m<8;m++) printf(\ printf(\ }

int degree(float num) { if(num<60) return 0; if(num<70&&num>59) return 1; if(num<80&&num>69)

16

return 2; if(num<90&&num>79) return 3; if(num<100&&num>89) return 4; }

//按学号查找

void search_no(student stu[]) { system(\ cout<<\ cout<<\请输入要查询同学的学号**************\ cout<<\ cout<<\请输入要查询学生学号(01-07):\ char no[3]; cin>>no; FILE *np; np=fopen(\学生信息.txt\ if(np==NULL) { printf(\ exit(0); } int i=0; while(fscanf(np,\].eng,&stu[i].computer)!=EOF) { i++; } int j,flag=0; for(j=0;j

17

printf(%u[j].computer); flag=1; } } if(flag==1) printf(\找到该学生信息!\\n \ else printf(\没有该学生的信息!\\n\ }

//按姓名查找

void search_name(student stu[]) { system(\ cout<<\ cout<<\请输入要查询同学的姓名**************\ cout<<\ cout<<\请输入要查询学生姓名:\ char name[20]; cin>>name; FILE *np; np=fopen(\学生信息.txt\ if(np==NULL) { printf(\ exit(0); } int i=0; while(fscanf(np,\].eng,&stu[i].computer)!=EOF) { i++; }

18

int j,flag=0; for(j=0;j

19

4 实验数据和实验结果

20

21

22

23

24

5 开发难点及解决技巧

难点:在求各科成绩分析情况的时候,各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数。要求的数据太多

解决方法:建立了三个数组,每个中含有八个数据,分别代表要求的数据

25

6 小结

通过本次课程设计,巩固复习了的以前学习c++和c语言的知识;提高了函数之间调用的使用能力,提高了对问题的综合处理能力。

26

课程设计成绩评定表

评定项目 学习态度 答疑和设计情况 内 容 学习认真,态度端正,遵守纪律。 认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。 设计方案正确、表达清楚;设计思路、说明书质量 实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。 回答问题情况 总成绩 回答问题准确,基本概念清楚,有理有据,有一定深度。 采用五级分制:优、良、中、及格、不及格 10 40 40 满分 10 评分 总分 指导教师评语: 签名: 年 月 日 27

28

本文来源:https://www.bwwdw.com/article/z7wo.html

Top