C语言实训报告学生成绩管理系统文件实现Word下载.docx
《C语言实训报告学生成绩管理系统文件实现Word下载.docx》由会员分享,可在线阅读,更多相关《C语言实训报告学生成绩管理系统文件实现Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
![C语言实训报告学生成绩管理系统文件实现Word下载.docx](https://file1.bdocx.com/fileroot1/2022-12/6/47a67ed8-60ad-408d-81c7-4831d1f3c919/47a67ed8-60ad-408d-81c7-4831d1f3c9191.gif)
假设系统中每个学生记录只包括学号、姓名、平时成绩、
期末成绩、总评成绩、总分、平均分、名次等信息。
程序的运行效果如上图图所示,选择任意菜单后,实现相应功能。
具体结构体设定请见以后。
程序初始主界面截图如下:
****:
4:
^>
|0^#****:
**:
(:
**#*:
4:
**4c****□(■:
*d|c.d|cd|zd|cj|c4c:
d|c3|cd|c.d{c^zd|c
:
垮毂曙诊熬秫吾曹;
绩
成绩蹇分总询询及平羣查杳生生需II记学号列文你单入蔓亍姓WW出出入
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。
2、系统设计
2.1总体设计
本管理系统的程序主要由C语言编写,考虑到各方面的维护和需求实现考
虑,程序代码总体上采用模块化编程方式设计以及编写。
即将一个大的功能需求分作几个小模块来配合实现,为了降低添加和维护功能和需求的成本和时间。
尽量不依赖于C语言全局变量而是通过函数调用之间的参数来传递数据。
2.2函数预览
1)主函数
introainCX
调用其他不同功能
2)主菜单函数
lntltenu(uoid){
输出显示界面
3)新建信息函数1(手写输入)
lUjiriRpjiflfinZFfili1ni~n.in十inb
手动输入学生的成绩信息,包括学号、姓名、平时成绩、总评成绩
4)新建信息函数2(文件输入)
uoidReadjdatal(STUstu[]rintn^inta,intb)
通过文件导入学生成绩信息
5)计算成绩函数
uoidTotal^mark^STUstn[],intn,inta.lntb)
计算学生试卷分数的总评成绩
6)查询成绩函数1(按学号)
uoidSortbpnum(STUstu[],intn)
按学号查询学生试卷的总评成绩
7)查询成绩函数2(按姓名)
uoidSortbj/ndnie(STUstu[]sintn)
8)计算成绩函数1(计算总成绩的及格率和优秀率)
voidCount_pa55<
STU5tu[].intn)
计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学生人数
9)计算成绩函数2(计算总成绩的平均分和标准差)
voidCount_auerage(STUstu[]rintn){
■■■
计算学生总评成绩的平均分和标准差
10)输出成绩函数
voidShowdata($TUstu[].intn)
输出全班学生的所有成绩,包括学号、姓名、总评成绩
11)导出成绩函数
voidVrited日tstu[intri)
将学生所有成绩的列表导出到文本score.txt中
3、系统实现
3.1功能模快(附代码)
1)主函数
intmain(){
STUstu[SIZE];
intn,a,b;
charch;
intoh;
printf("
\t\t********************************************\n"
);
printf("
\t\t\t*欢迎使用*\n"
\t\t\t*学生试卷分数统计系统可*编辑p"
);
while
(1)
r
精品
ch=Menu();
switch(ch)
{case1:
printf(”请输入学生人数n(n<
=%d):
"
SIZE);
scanf("
%d"
&
n);
printf(”请输入学生平时成绩与期末成绩所占总评成绩的的比例(用整数表
示,满分100分):
\n"
scanf("
%d%d"
&
a,&
b);
printf("
以下有两种输入试卷分数的方式:
\n***1.手动输入试卷分数\t2.从
student.txt文件中导入试卷分数***\n"
oh);
1)输入限定switch(°
h)
{
case1:
Read_data(stu,n,a,b);
break;
case2:
Read_data1(stu,n,a,b);
break;
default:
输入菜单序号错误!
}break;
Total_mark(stu,n,a,b);
case3:
Sortbynum(stu,n);
case4:
Sortbyname(stu,n);
case5:
Count_pass(stu,n);
case6:
Count_average(stu,n);
case7:
Show_data(stu,n);
case8:
Write_data(stu,n);
case0:
\t\t********************************************\n"
\t\t\t*感谢使用*\n"
\t\t\t*学生试卷分数统计系统*\n"
exit(0);
输入菜单序号错误!
}
return0;
2)主菜单函数
率差
成绩鑒吞
总询询羣查查生生春-
—记rlr^s-于列文-
/*函数功能:
显示菜单并获得用户键盘输入的选项*/
intMenu(void){
intitemSelected;
\n【菜单】\n"
1.输入记录\n"
2•计算学生总评成绩\n”);
3.按学号查询成绩\n”);
4.按姓名查询成绩\n”);
5•计算学生及格率和优秀率\n"
6•计算学生平均分和标准差\n"
7.成绩列表\n"
8.导出文件\n"
0.退出\n”);
printf("
请输入你的选择:
scanf("
itemSelected);
/*读入用户输入*/returnitemSelected;
3)限定功能模块
躍蕭册騙占总林昨吐隔满分咧;
限定(或者说确定)学生的人数和总评成绩的计算方式
printf(”请输入学生平时成绩与期末成绩所占总评成绩的的比例(用整数表示,满分100分):
可编辑
a,&
b);
可编辑
4)新建成绩函数1(手动输入)
审给人羣生平时成绩宵期末成绩所占总评成绩的的比例(用删夷示.满分10盼):
B0
脸鸦眈鶴響的Jfewdent.txt文件中导人试卷分数*卅
1
青输入学土的学号、姓缶平时成绩和期末成绩(逗号隔开):
1651500101,位,23,56
1651500102,,氨33,67
手动输入分数*/
voidRead_data(STUstu[],intn,inta,intb)
inti=0;
printf(”请输入学生的学号、姓名、平时成绩和期末成绩(逗号隔开):
\n"
for(i=0;
i<
n;
i++)
scanf("
%ld,%s,%d,%d"
stu[i].num,&
stu[i].name,&
stu[i].score[0],&
stu[i].score[1]);
stu[i].score[2]=stu[i].score[0]*a/100+stu[i].score[1]*b/100;
5)新建成绩函数2(文件输入)
『入薩嚮時蹶诙所占总评祗的卅(用酬林耐瑚):
出忑鹑敝廳鬻的魏;
如血丄仃七文件中导入试卷分數十
1.蹴“记录
II凸-订i_Lg°
輪熒祢的选#匹
^E:
1651500101
S:
1651500102±
:
1651500103F±
:
16E1500104:
$11651500105f:
16E15D0106^z:
1651500107£
16E150010B^=:
16515D0109E:
16B15DO11D1651500111^E:
1651500112
从文本student.txt中导入试卷分数*/
voidRead_data1(STUstu[],intn,inta,intb)
inti;
FILE*fp;
if((fp=fopen("
student.txt"
"
r"
))==NULL)
打开文件student.txt失败!
!
feof(fp);
fscanf(fp,"
%ld"
stu[i].num);
%s"
stu[i].name);
stu[i].score[0]);
fclose(fp);
6)计算成绩及输出函数
计算学生试卷分数的总评成绩*/
voidTotal_mark(STUstu[],intn,inta,intb)
i<
n;
stu[i].score[2]=stu[i].score[0]*a/100+stu[i].score[1]*b/100;
printf(”学生:
%ld\t姓名:
%s\t总评成
绩:
%d\n"
stu[i].num,stu[i].name,stu[i].score[2]);
7)查询成绩函数1(按学号)
按学号查询学生试卷的总评成绩*/
voidSortbynum(STUstu[],intn)
number);
for(i==0^<
ni]++m==number)
学号:
%ld\t姓名:
%s\t平时成绩:
%d\t期末成绩:
%d\t总评成绩:
stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
return;
抱歉,没有找到!
\n”);
8)查询成绩函数2(按姓名)
期末甌辭:
34忌评咸绩:
5
55
s
忌询询a』f生牛乘—记学号亶A于列交MAHWlsiAA!
1|1.|2,|3,去5,|6.7.[8.
名:
B
■iJr--TRr;
■■■宁2ii找on的杏15你更笛
按姓名查询学生试卷的总评成绩*/
voidSortbyname(STUstu[],intn)
charnamed[10];
printf(”请输入要查找的学生姓名:
named);
9)计算成绩函数1(计算总成绩的及格率和优秀率)
计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学生人数*/
voidCount_pass(STUstu[],intn)
inti,pass_num,t[4];
floatpassrate;
memset(t,0,sizeof(t));
if(stu[i].score[2]<
60)t[0]++;
elseif(stu[i].score[2]<
=75)t[1]++;
=85)t[2]++;
=100)t[3]++;
pass_num=t[1]+t[2]+t[3];
passrate=(float)(t[1]+t[2]+t[3])/n;
及格人数:
%d\n"
pass_num);
优:
%d\t良:
%d\t中:
%d\t差:
t[3],t[2],t[1],t[0]);
总评成绩及格率:
%.2f\n"
passrate);
总评成绩优秀率:
(float)t[3]/n);
2(计算总成绩的平均分和标准差)
总评成绩标准差I
45
6
■■I
选均
的平
氤询询
i查查主生需]记学号嘉于列文单人皐姓算WW3岀菜星输评
计算学生总评成绩的平均分和标准差*/
voidCount_average(STUstu[],intn){
doublesum=O,aver,temp=O,standard;
sum=stu[i].score[2]+sum;
aver=(float)sum/n;
{temp=(stu[i].score[2]-aver)*(stu[i].score[2]-aver)+temp;
}
11)输出成绩函数
评成结
^s.
■1-
6.
7.
8.
0,LiuLi
1o
754026612518842_b59_yl2
firH绩绩绩绩绩绩绩绩绩绩绩绩绩绩绩绩绩绮成專成專專成慘?
^成的成成nr-nr-nr^^1^^1%_l、nk、T、nkIT、「、「、T37%T航“呂」国E営屮匚片言匕啟邑匕占呂匕he.p=p.l1£
l4、一一岀氐鼠一CTWII-—•—■—•—■—•——•——•Jl-JI'
i-ii-JJ
54
34
25
42
76
貂
39
31
58
聋
38
曲
75
W:
18
S3
63
成馈
•-怛挥
「•二•二•二•二•二一.-.--7^-••--■.二二-.二ly一/-2-!
■■•一••二!
■■■耳貝貝貝耳冃貝封効耳貝耳乍貝貝貝吕•貝到
_u53COE30ILIDDpCMCM吐1CMCpOQ4424654015510^^978324-49912成戍感戍戍应威廉戍成戍戍戍戍应应磁戍
ALCDEFCHI.-ELMHOroESTU«
卸"
务各并-S:
§
R衾召力:
□:
主瑜L祢的选择存
165150010】
16E1500102:
1651500103:
16B1E00104
1651500105:
165150010E
1651500107
1651500108:
lCBlEOOlOQ
1651500110
16B15001U
1651500112I:
16B1E00113]:
1651500114
1651E0011E:
1651500116'
:
1651500117:
165150011S'
1651500115
16E1E00120'
输出全班学生的所有成绩*/
voidShow_data(STUstu[],intn)
printf(”学号:
%ld\t姓名:
%s\t平时成绩:
%d\t期末成绩:
%d\t总评成
1绩导出成绩函数hum,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
=J-hrTfi---?
Sr.31
将学生所有成绩的列表导出到文本score.txt中*/
voidWrite_data(STUstu[],intn)可编辑
3.1全部实现代码
#include<
stdio.h>
string.h>
stdlib.h>
conio.h>
math.h>
#defineSIZE100
typedefstructstudent{
longnum;
charname[10];
intscore[3];
}STU;
intMenu(void);
voidRead_data(STUstu[],intn,inta,intb);
voidRead_data1(STUstu[],intn,inta,intb);
voidTotal_mark(STUstu[],intn,inta,intb);
voidSortbynum(STUstu[],intn);
voidSortbyname(STUstu[],intn);
voidCount_pass(STUstu[],intn);
voidCount_average(STUstu[],intn);
voidShow_data(STUstu[],intn);
voidWrite_data(STUstu[],intn);
intmain(){
while
(1)
switch(ch)case1:
请输入学生人数n(n<
请输入学生平时成绩与期末成绩所占总评成绩
的的比例(用整数表示,满分100分):
以下有两种输入试卷分数的方式:
\n***1.手动
输入试卷分数\t2.从student.txt文件中导入试卷分数***\n"
switch(oh)
Read_data(stu,n,a,b);
Read_data1(stu,n,a,b);
输入菜单序号错误!
}
Total_mark(stu,n,a,b);
Sortbynum(stu,n);
Sortbyname(stu,n);
Count_pass(stu,n);
Count_average(stu,n);
Show_data