班级成绩管理系统通信工程课程设计文档格式.docx
- 文档编号:22578818
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:28
- 大小:225.15KB
班级成绩管理系统通信工程课程设计文档格式.docx
《班级成绩管理系统通信工程课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《班级成绩管理系统通信工程课程设计文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
目录
1.系统需求分析与简介1
1.1原始问题描述1
2.程序结构概要1
2.1程序的模块结构1
2.2各模块的功能2
3.具体细节设计与描述3
3.1采用C语言定义相关的数据类型3
3.2显示主界面的函数4
3.3成绩录入函数4
3.4成绩显示函数5
3.5成绩保存函数6
3.6成绩排序函数6
3.7成绩修改函数7
3.8成绩统计函数8
4.系统调试中存在的问题9
5.运行结果显示10
6.学习的心得体会14
7.附录15
7.1源代码15
7.2参考书目20
8附表21
1.系统需求分析与简介
1.1原始问题描述
对一个有N个学生的班级,每个学生有M门课程。
该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
1.2功能需求
(1)本系统采用一个结构体数组,每个数据的结构应当包括:
学号、姓名、M门课程名称。
(2)本系统显示这样的菜单:
请选择系统功能项:
1.成绩录入
2.成绩显示
3.成绩保存
4.成绩排序
5.成绩修改(要求先输入密码)
6.成绩统计
(1)显示每门课程成绩最高的学生的基本信息
(2)显示每门课程的平均成绩
(3)显示超过某门课程平均成绩的学生人数
0.退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生成绩保存到文件中。
2.程序结构概要
2.1程序的模块结构
整个系统除了主函数外,另外还有7个函数,实现七大功能:
成绩录入功能、成绩显示功能、成绩保存功能、成绩排序功能、成绩修改功能、成绩统计功能、退出系统功能。
用图可表示如如下:
2.2各模块的功能
(1)主函数main()
利用while
(1)输出函数主界面和swithch(t)实现选择函数以及各函数的调用,系统根据输入的数字选项来调用相应的函数。
用switch(t)开关语句,进入“功能选择”的界面,在这个界面里有显示系统的七大功能,执行完每一个函数功能后,返回菜单。
(2)成绩录入函数
voidluru(structstudentstu[],intn);
实现对每个学生学号,姓名,四门课程的成绩,总成绩,平均成绩的录入。
(3)成绩显示函数
voidxianshi(structstudentstu[],intn);
实现对每个学生的学生信息的输出。
(4)成绩保存函数
voidbaocun(structstudentstu[],intn);
实现对输入的信息保存在stu.txt中,并且能从中读取学生的信息。
(5)成绩排序函数
voidpaixiu(structstudentstu[],intn);
实现对学生总成绩的从大到小的排序。
(6)成绩修改函数
voidxiugai(structstudentstu[],intn);
实现对几个学生信息修改,再次选择可将修改的程序重新保存。
(7)成绩统计函数
voidtongji(structstudentstu[],intn);
实现以下三个分功能:
1.每门课程成绩最高的学生信息;
2.每门课程的平均成绩;
3.显示超过某门课程平均成绩的人数。
(8)退出系统函数
用if语句表示if(t=0)break;
即选择0时就表示退出系统了。
3.具体细节设计与描述
3.1采用C语言定义相关的数据类型
对要输入的学生信息采用结构体数组的形式,这样既方便又明了,而且也使我自己对这种方式的表达更加熟悉。
structstudent//定义一个结构体类型
{
intnum;
//学号
charname[16];
//姓名
floatscore[4];
//4科学生分数
floattotal;
//总成绩
floataver;
//平均成绩
}stu[10];
//定义10个学生
本程序对要定义的学生信息中不同的信息采用了不同的数据类型,例如:
在对学生的学号和名称用字符型(intnum;
charname[10];
),在对学生的四门成绩,总成绩和平均成绩采用浮点型(floatscore[4];
floattotal;
floataver;
)。
并且对后文程序中要定义的采用了相对应的类型(inti,j;
3.2显示主界面的函数
用while
(1)语句实现,如:
while
(1)
while
(1)//利用一个无限循环
{
printf("
1.成绩录入\n"
);
2.成绩显示\n"
3.成绩保存\n"
4.成绩排序\n"
5.成绩修改\n"
6.成绩统计\n"
0.退出程序\n"
请输入选项:
\n"
)
}
根据不同的需要进行不同的选项。
3.3成绩录入函数
voidluru(structstudentstu[],intn)
{inti;
charb,m;
for(i=0;
i<
n;
i++)//通过一个循环来实现学生信息的录入
请输入第%d个学生的学号:
\n"
i+1);
//利用一个i来提示信息的准确输入
scanf("
%d"
&
stu[i].num);
请输入第%d个学生的名字:
%s"
stu[i].name);
printf("
请输入第%d个学生的语文成绩:
%f"
stu[i].score[0]);
请输入第%d个学生的数学成绩:
stu[i].score[1]);
请输入第%d个学生的英语成绩:
stu[i].score[2]);
请输入第%d个学生的物理成绩:
stu[i].score[3]);
是否继续:
'
Y'
or'
N'
scanf("
%c"
b);
m);
if(m=='
||m=='
n'
)//简单的判断
break;
}
3.4成绩显示函数
voidxianshi(structstudentstu[],intn)
\n学生信息:
10;
i++)
{
\n学号%d,姓名%s,语文成绩%3.1f,数学成绩%3.1f,英语成绩%3.1f,物理成绩%3.1f\n"
stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3]);
简单得循环来对已经输入信息的一个显示,来确认信息得正确性
3.5成绩保存函数
voidbaocun(structstudentstu[],intn)
intm1;
FILE*fp;
//建立一个文件指针
fp=fopen("
stu.txt"
"
r+"
//打开文件
if(fp==NULL)fp=fopen("
w+"
//判断文件是否为空
rewind(fp);
//让数据读写从头开始
fprintf(fp,"
n);
//在文件中打印出来
for(m1=0;
m1<
m1++)
{
fprintf(fp,"
%d%s%f%f%f%f\n"
stu[m1].num,stu[m1].name,stu[m1].score[0],stu[m1].score[1],stu[m1].score[2],stu[m1].score[3]);
}
printf("
保存成功!
fclose(fp);
//关闭文件
3.6成绩排序函数
voidpaixiu(structstudentstu[],intn)
{inti,j;
for(i=0;
i++)//这里基本都用到了循环
{
stu[i].total=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
//计算每个人的平均成绩
structstudentt;
n-1;
i++)//利用冒泡排序法实现总成绩排序
for(j=i+1;
j<
j++)
if(stu[j].total>
stu[i].total)
t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
:
按学生总成绩排名如下:
\n学生信息:
i++)//输出排序结果
\n学号%d,姓名%s,语文成绩%3.1f,数学成绩%3.1f,英语成绩%3.1f,物理成绩%3.1f,总成绩%3.1f\n"
stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].total);
3.7成绩修改函数
voidxiugai(structstudentstu[],intn)
inti,g,password,pass=123;
//设置密码,可以更改
charm,b;
请输入密码:
//输入密码
password);
if(password==pass)//利用if语句判断密码的正确性
{printf("
请输入要修改信息学生的学号:
g);
if(stu[i].num==g)
{printf("
这是你要修改的学生的以前信息:
\n请输入最新语文成绩:
//一系列输出
scanf("
\n请输入最新数学成绩:
\n请输入最新英语成绩:
\n请输入最新物理成绩:
\n成绩已修改!
请再点击保存!
\n\n\n"
break;
}
}
else
密码错误!
\n\n\n请重新选择!
\n\n"
//密码错误提示
}
3.8成绩统计函数
voidtongji(structstudentstu[],intn)
{inti,j,k;
floatmax,sum,aver_cour[4];
以下为有关科目信息\n\n"
第1科目:
语文;
第2科目:
数学;
第3科目:
英语;
第4科目:
物理\n\n"
for(j=0;
4;
j++)//统计每一科的最高成绩
max=stu[0].score[j];
//假定第一个人的成绩最高
k=0;
if(stu[i].score[j]>
max)//如果又比第一个高的成绩就替换它
max=stu[i].score[j];
k=i;
stu[k].total=stu[k].score[1]+stu[k].score[2]+stu[k].score[3]+stu[k].score[4];
stu[k].aver=stu[k].total/4;
\n第%d科最高的学生的信息如下:
\n学号%d姓名%s语文%3.1f数学%3.1f英语%3.1f物理%3.1f总成绩%3.1f平均成绩%3.1f\n"
j+1,stu[k].num,stu[k].name,stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].total,stu[k].aver);
}//输出学生相关信息
j++)统计每一科的平均成绩
sum=0;
i++)
{
sum=sum+stu[i].score[j];
aver_cour[j]=sum/10;
//求平均成绩
\n第%d科的平均成绩为%3.1f\n"
j+1,aver_cour[j]);
j++)//统计超过平均分的学生
k=0;
{
aver_cour[j])k++;
利用简单的计数
\n第%d科有%d个同学超过平均分\n"
j+1,k);
4.系统调试中存在的问题
此系统其实结构已经相当清晰,要分清主次。
首先以一个主函数为主体,其他函数为分支。
在把主函数结构完完成后,在对分支函数进行编写,先对每一个小的函数进行调试,完成后在进行整体的调试。
在调试中不断发现问题并改正它们,使程序不断的完善。
经过无数次的修改程序使不仅可以运行,而且具有高度的协调性。
不可以是以完成目的就不做了,比如一个很简单的程序让你编写的很庞大。
很显然这样是不符合需求的,所以在编的时候要用心去体会其中的道理,才利于在以后的学习中更好的学习。
在程序调试中比较多注意的问题:
1.switch语句中,每一个case之后又应有一个break;
但最后一个应没有。
就是由于漏写了break语句,case只起标号的作用,而不起判断作用。
2.数组名代表该数组的起始地址。
3.在字符输入的编写中要注意空格间的相关问题,空格键也为一个字符,不然会出现系统错误。
4.在信息保存在文件中的时候,未使用恰当的输入输出语句,应将printf语句改为fprintf语句,将scanf语句改为fscanf语句,才解决了学生信息可在我保存的stu.txt中显示出来,而不是一些乱码。
5.要定义相同类型的参数,不然不可以进行数据的交换。
6.循环虽然很好利用,但不能混乱使用。
7.关键的使在进行一系列判断,一定要注意条件的正确性,比如密码的设定与进入时的判断。
5.运行结果显示
以下为在运行程序的时候出现的界面,对你的使用会有所帮助
1.在使用的过程中会不断提示你的主界面,根据不同的需要进行不同的选择
2.这是在进行第一个选项时出现的画面,成绩的输入并进行判断,下面我们以赵凡同学为例进行说明。
现在是赵凡同学的成绩录入界面,可以看到他的语文成绩是75分,学号为14。
3.在选择了不如输成绩时的结果,我们可以清楚的看到赵凡同学的各科成绩。
4.以上对学生成绩的显示,同样也为了检查信息的正确性
5.在检查无误后,在选择了保存成绩选项后,提示你保存成功,同时再进行其他操作。
6.显示总成绩的排名,我们课题看到赵凡同学的相关信息,他的总成绩为317分,次于凯小旋同学的后面。
7.进行成绩修改,提示你输入密码,当你输入错误时,显示密码错误,再进行选择。
8.当输入正确的密码后首先显示你要修改的学生之前的所有信息,并提示你进行新的各科的成绩的输入,同样我们修改赵凡同学的信息。
以语文成绩为例,修改为78分,而之前为75分。
9.提示你成绩修改成功,为确保信息的丢失再次进行一次成绩的保存。
我们可以看到赵凡同学的语文成绩有以前的75分,变为现在的78分,因此赵凡同学的成绩修改成功。
10.成绩统计每一科成绩最高者的相关信息,因为赵凡同学的成绩不是最高的,因此没显示他的信息。
11.统计中显示平均成绩和超过平均成绩的学生
12.在所有的相关操作完成后进行程序的推出
6.学习的心得体会
7.附录
7.1源代码
#include<
stdio.h>
string.h>
stdlib.h>
voidluru(structstudentstu[],intn);
voidxianshi(structstudentstu[],intn);
voidbaocun(structstudentstu[],intn);
voidpaixiu(structstudentstu[],intn);
voidxiugai(structstudentstu[],intn);
voidtongji(structstudentstu[],intn);
structstudent
{intnum;
charname[16];
floatscore[4];
voidmain()
intt,n=10,k=0,num=0,j;
charch;
FILE*fp;
if(fp==NULL)fp=fopen("
ch=fgetc(fp);
if(ch!
=EOF)
rewind(fp);
fscanf(fp,"
num);
for(j=0;
num;
j++)
fscanf(fp,"
stu[j].num,stu[j].name,&
stu[j].score[0],&
stu[j].score[1],&
stu[j].score[2],&
stu[j].score[3]);
欢迎使用!
!
t);
switch(t)
{case1:
luru(stu,n);
break;
case2:
xianshi(stu,n);
case3:
baocun(stu,n);
case4:
paixiu(stu,n);
case5:
xiugai(stu,n);
case6:
tongji(stu,n);
case0:
default:
enterdataerror!
if(t==0)break;
voidluru(structstudentstu[],intn)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 班级 成绩管理系统 通信工程 课程设计