数据结构 学生信息管理系统.docx

上传人:b****7 文档编号:9385713 上传时间:2023-02-04 格式:DOCX 页数:8 大小:16.78KB
下载 相关 举报
数据结构 学生信息管理系统.docx_第1页
第1页 / 共8页
数据结构 学生信息管理系统.docx_第2页
第2页 / 共8页
数据结构 学生信息管理系统.docx_第3页
第3页 / 共8页
数据结构 学生信息管理系统.docx_第4页
第4页 / 共8页
数据结构 学生信息管理系统.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

数据结构 学生信息管理系统.docx

《数据结构 学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构 学生信息管理系统.docx(8页珍藏版)》请在冰豆网上搜索。

数据结构 学生信息管理系统.docx

数据结构学生信息管理系统

设计报告

设计要求:

已知在磁盘上有一个文本文件(stuin.txt),此文件存放了一组学生的成绩信息,按照如下格式存放:

1001Student189

1002Student278

1003Student360

……

1010Student10100

a.定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域;

b.将文本文件的内容读入到结构体数组中;

c.显示成绩最高的人的学号、姓名和成绩(如果有相同的人要全部显示);

d.显示平均成绩、高于、低于和等于平均成绩的人数;

e.显示成绩为优秀(100~90)、良好(89~80)、中等(79~70)、及格(69~60)、不及格(59~0)的人数和所占百分比;

f.将以上显示的信息存放到stuout.txt文件中;

设计过程:

我采用模块化设计思想,将不同的任务交由不同的函数来实现。

一、首先是文件的读写过程,因为对语法规则了解的不多,所以浪费了很多时间。

原先试图采用“fread”和“fwrite”来实现读写过程,估计是二进制和字符转换还有回车键处理得不好,显示时有乱码;最后决定采用“fprint”和“fscanf”这两个比较容易操作的函数,问题得到了解决。

第一个函数“voidread()”设计完成。

二、求最大值是老问题,很好解决,但题目还要求显示出重复的最大值的位置。

开始设想在比较最大值的同时记录并列数据的位置,但遇到一个更大的数据时,前面记录的重复数据就要被清空并重新记录,代码有些繁琐;最后采用先用一个循环判断出最大值,再用一个循环判断是否有并列的数据,并记录其位置(“num[j]”记录的是位置,“j”是并列最大值的个数)。

三、计算平均成绩也比较简单,采用“if”语句就能够解决。

四、成绩分类时使用了“switch语句”。

程序代码:

/*程序目的:

从磁盘读取数据,分析整理后将新数据显示出来并保存之新文件*/

/*作者:

陈扬君*/

/*完成时间:

2008年6月20日*/

#include"stdio.h"

#defineSIZE10//原数据的序列数

voidread();//声明读取数据函数

voidmax_score();//声明求最大值的函数

voidaverage();//声明求平均数的函数

voidrow();//声明排列顺序的函数

structstudent//定义student结构体

{

intnum;

charname[10];

floatscore;

}stud[SIZE];

voidmain()

{

read();//调用读取数据函数

max_score();//调用求最大值的函数

average();//调用求平均数的函数

row();//调用排列顺序的函数

}

voidread()//定义读取数据函数

{

FILE*fp;

inti;

if((fp=fopen("stuin.txt","r+"))==NULL)//如果文件无法打开则显示提示信息

{

printf("can'topenfile!

\n");

return;

}

printf("学生成绩如下:

\n");

for(i=0;i

{

fscanf(fp,"%d%s%f",&stud[i].num,stud[i].name,&stud[i].score);

printf("%d%s%3.1f\n",stud[i].num,stud[i].name,stud[i].score);

}

fp=fopen("stuout.txt","w+");//创建新文档并将显示的数据保存

fprintf(fp,"学生成绩如下:

\n");

for(i=0;i

{

fprintf(fp,"%d%s%3.1f\n",stud[i].num,stud[i].name,stud[i].score);

}

fclose(fp);

}

voidmax_score()//定义求最大值的函数

{

FILE*fp;

floatm;

intnum[SIZE];//确定最大值所在的位置

inti,j=0,k;

m=stud[0].score;

num[j]=0;

for(i=0;i

{

if(m

{

m=stud[i+1].score;

num[j]=i+1;

}

}

for(i=0;i

{

if(m==stud[i+1].score)

num[j++]=i+1;

}

fp=fopen("stuout.txt","a+");//将新数据追加至stuout.txt文件

printf("\n成绩最高的学生是:

\n");

fprintf(fp,"\n成绩最高的学生是:

\n");

for(i=0;i

{

k=num[i];

printf("%d%s%3.1f\n",stud[k].num,stud[k].name,stud[k].score);

fprintf(fp,"%d%s%3.1f\n",stud[k].num,stud[k].name,stud[k].score);

}

fclose(fp);

}

voidaverage()//定义求平均数的函数

{

FILE*fp;

floatave,sum=0;

inthigh=0,low=0,equ=0,i;

for(i=0;i

sum+=stud[i].score;

ave=sum/SIZE;//计算平均分

for(i=0;i

{

if(ave>stud[i].score)low++;

if(ave

if(ave==stud[i].score)equ++;

}

printf("\n平均成绩为:

%4.2f\n",ave);

printf("高于平均成绩的有%d个,占总人数的%3.1f%%\n",high,high*1.0/SIZE*100);

printf("低于平均成绩的有%d个,占总人数的%3.1f%%\n",low,low*1.0/SIZE*100);

printf("等于平均成绩的有%d个,占总人数的%3.1f%%\n",equ,equ*1.0/SIZE*100);

fp=fopen("stuout.txt","a+");//追加新数据

fprintf(fp,"\n平均成绩为:

%4.2f\n",ave);

fprintf(fp,"高于平均成绩的有%d个,占总人数的%3.1f%%\n",high,high*1.0/SIZE*100);

fprintf(fp,"低于平均成绩的有%d个,占总人数的%3.1f%%\n",low,low*1.0/SIZE*100);

fprintf(fp,"等于平均成绩的有%d个,占总人数的%3.1f%%\n",equ,equ*1.0/SIZE*100);

fclose(fp);

}

voidrow()//定义排列顺序的函数

{

FILE*fp;

inti,score,perfect=0,good=0,medium=0,pass=0,failed=0;//定义各档次人数的变量

for(i=0;i

{

score=(int)stud[i].score/10;//依靠分数判断属于哪个档次

switch(score)//计数

{

case10:

perfect++;break;

case9:

perfect++;break;

case8:

good++;break;

case7:

medium++;break;

case6:

pass++;break;

default:

failed++;

}

}

printf("\n优秀(100~90)的有%d人\n",perfect);

printf("良好(89~80)的有%d人\n",good);

printf("中等(79~70)的有%d人\n",medium);

printf("及格(69~60)的有%d人\n",pass);

printf("不及格(59~50)的有%d人\n",failed);

fp=fopen("stuout.txt","a+");//追加新数据

fprintf(fp,"\n优秀(100~90)的有%d人\n",perfect);

fprintf(fp,"良好(89~80)的有%d人\n",good);

fprintf(fp,"中等(79~70)的有%d人\n",medium);

fprintf(fp,"及格(69~60)的有%d人\n",pass);

fprintf(fp,"不及格(59~50)的有%d人\n",failed);

fclose(fp);

}

个人总结:

通过设计本程序,我了解了大型程序的开发步骤,熟悉了C语言中重要语句和函数的用法,提高了自己分析问题解决问题的能力;同时也看到了自己在一些细节问题上容易粗心大意的毛病。

总之,通过设计这个程序,我自身的到了锻炼。

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

当前位置:首页 > 高等教育 > 文学

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

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