计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx

上传人:b****1 文档编号:1312862 上传时间:2023-04-30 格式:DOCX 页数:11 大小:18.58KB
下载 相关 举报
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第1页
第1页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第2页
第2页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第3页
第3页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第4页
第4页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第5页
第5页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第6页
第6页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第7页
第7页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第8页
第8页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第9页
第9页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第10页
第10页 / 共11页
计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx

《计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx》由会员分享,可在线阅读,更多相关《计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx(11页珍藏版)》请在冰点文库上搜索。

计算机编程实验实验一学生成绩管理系统设计与测试Word下载.docx

完成以下编程实验,调试运行程序并完成报告。

设每个学生包含如下信息:

属性名

姓名

学号

C成绩

C实验成绩

C总成绩

类型

字符串

整数

整数(初始化为0)

1.设计一个表示学生信息的结构structstuden;

t

2.编写函数从文件读入所有学生信息:

a)函数定义intReadStudentInfo(constchar*filename,structstudent**

pStudents);

函数返回值:

返回学生个数,失败返回-1。

输入参数const

char*filename:

数据文件名;

structstudent**pStudents:

返回读取的学

生信息,内存由ReadStudentInfo函数分配,main函数释放。

b)建议函数流程:

i.打开数据文件,失败返回-1;

ii.从头到尾扫描数据文件(即预读一遍)获得学生人数;

iii.根据学生人数,利用malloc和sizeof等函数或运算符为struct

student**pStudents分配内存;

iv.利用fseek函数,定位到文件头;

v.读取数据文件,并把每一条记录通过数组下标法或指针法保存到结

构体数组pStudents中;

vi.关闭文件;

vii.返回学生人数。

c)数据文件格式说明:

一行一条学生信息的记录,不同属性用空格隔开,输入数据中无总成

绩记录。

3.编写统计函数:

a)函数定义voidCount(structstudentpStudents[],intnum)。

输入参数分别

为保存学生的结构数组和学生人数。

b)功能为:

统计所有学生的总成绩和每个班(根据学号判断班级)的平

均成绩;

输入参数包括学生信息结构数组,学生人数,计算的每个学

生的总成绩直接填充到对应的输入结构数组对应字段中。

统计信息包

括每个班的总人数、平均成绩数组,用全局变量来表示。

访问每个学

生信息的时候,用指针来指向当前正在处理的学生。

c)设计一个函数,实现根据学号计算班级,并在函数Count中使用。

4.编写信息输出函数:

要求通过一定的格式控制符,使得输出美观。

输出格式为:

学生信息:

序号姓名学号班级C成绩C实验成绩总成绩

1张三

2⋯⋯

统计信息:

序号班级学生人数平均成绩

11班3283

5.编写main函数实现:

a)定义变量,其中保存学生信息的数据文件直接在源代码中初始化;

b)读取学生信息,如果失败,打印失败信息并退出程序;

c)统计学生信息;

d)输出统计信息。

e)释放内存。

七、实验器材(设备、元器件):

微型计算机一台,含操作系统,集成开发环境,文字处理软件等;

八、实验步骤:

九、实验数据及结果分析:

代码结构及优化方案介绍:

代码总体分为ReadStudentInfo、Count、printinformation三部分,分别

执行读取txt文件各部分到结构体、按照学号判断班级、打印输出功能,最后集

中再main函数中调用。

优化方案:

代码里有大量调用结构体的语句,但是一些函数直接访问地址,

不确定会不会在之后改变地址,所以用了一些缓冲区,构建一些空的字符串,将

数据先读取到字符串里,再进行使用,减少对结构体地址造成的改变。

并且Count

部分的判断进行了调整,没有再多余用一个函数嵌套判断,而是直接判断,调用

了全局变量。

代码如下:

#include<

stdio.h>

stdlib.h>

#include<

string.h>

//定义结构体形式

structstudent

{

charname[50];

charstuID[50];

intgrade_C;

intgrade_EXP;

intgrade_All;

};

//定义全局变量,per表示每班学生的个数,sum表示班级总成绩

intfirst_per=0,first_ave,first_sum=0;

intsecond_per=0,second_ave,second_sum=0;

intthird_per=0,third_ave,third_sum=0;

intforth_per=0,forth_ave,forth_sum=0;

intfifth_per=0,fifth_ave,fifth_sum=0;

intsixth_per=0,sixth_ave,sixth_sum=0;

intReadStudentInfo(constchar*filename,structstudent**pStudents)

FILE*fp;

//文件指针

structstudent*p;

intstu_num=0,i=0;

chartemp,temp_line[100]={0};

chartemp_num[20]={0};

//将读取数据缓存

fopen_s(&

fp,filename,"

r"

);

fseek(fp,0L,SEEK_SET);

if(fp==NULL)

printf("

FailtoRead\n"

exit(-1);

}

else{

while((temp=fgetc(fp))!

=EOF)

if(temp=='

\n'

stu_num++;

*pStudents=(structstudent*)malloc(stu_num*sizeof(**pStudents));

p=*pStudents;

fgets(temp_line,100,fp);

//读取了一行数据,光标直接跳到第一行没用的末尾了

while((!

feof(fp))&

&

(i<

stu_num))

fscanf_s(fp,"

%s"

p->

stuID,_countof(p->

stuID));

//使用_countof是用来计算字符数而不是字节数,

赋值到每个p地址对应的部分

name,_countof(p->

name));

temp_num,_countof(temp_num));

p->

grade_C=atoi(temp_num);

grade_EXP=atoi(temp_num);

grade_All=0.4*p->

grade_EXP+0.6*p->

grade_C;

p++;

i++;

fclose(fp);

returnstu_num;

voidCount(structstudentpStudents[],intnum)

inti;

charcompare[20]={0};

for(i=0;

i<

num;

i++)

strncpy_s(compare,sizeofcompare,pStudents[i].stuID,10);

//将学号前十位存放到一个临时的字符

串里

if(!

strncmp(compare,"

2017020901"

10))

first_per++;

first_sum=first_sum+(pStudents+i)->

grade_All;

first_ave=first_sum/first_per;

2017020902"

second_per++;

second_sum=second_sum+(pStudents+i)->

second_ave=second_sum/first_per;

2017020903"

third_per++;

third_sum=third_sum+(pStudents+i)->

third_ave=third_sum/third_per;

2017020904"

forth_per++;

forth_sum=forth_sum+(pStudents+i)->

forth_ave=forth_sum/forth_per;

2017020905"

fifth_per++;

fifth_sum=fifth_sum+(pStudents+i)->

fifth_ave=fifth_sum/fifth_per;

2017020906"

sixth_per++;

sixth_sum=sixth_sum+(pStudents+i)->

sixth_ave=sixth_sum/sixth_per;

//打印函数

voidprintinformation(structstudentpStudents[],intnum_stu)

\n学生信息:

\n\n"

\n"

序号姓名学号班级C成绩C实验成绩总成绩\n"

for(i=0;

i<

num_stu;

i++)

pStudents[i].stuID,

%d%s%s%d%d%d\n"

i+1,pStudents[i].name,pStudents[i].grade_C,pStudents[i].grade_EXP,pStudents[i].grade_All);

\n\n统计信息:

序号

班级

学生人数

平均成绩\n"

1

1班

%d

%d\n"

first_per,first_ave);

2

2班

second_per,second_ave);

3

3班

third_per,third_ave);

4

4班

forth_per,forth_ave);

5

5班

fifth_per,fifth_ave);

6

6班

sixth_per,sixth_ave);

voidmain()

intstu_num;

constcharlocation[]="

data.txt"

;

structstudent*pStudents=NULL;

constchar*filename=location;

stu_num=ReadStudentInfo(filename,&

//返回跳过第一行后的行数,也就是学生的个数

%d"

stu_num);

Count(pStudents,stu_num);

printinformation(pStudents,stu_num);

free(pStudents);

//释放内存

getchar();

//使终端停留

return0;

十、实验结论:

十二、对本实验过程及方法、手段的改进建议:

报告评分:

指导教师签字:

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

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2