C语言课程设计实习报告学生成绩管理系统文档格式.docx
《C语言课程设计实习报告学生成绩管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实习报告学生成绩管理系统文档格式.docx(35页珍藏版)》请在冰豆网上搜索。
先输入学生学号,若系统中有此学生的信息,则删除该学生的所有信息;
否则提示系统中无此学生的信息。
6).实现修改功能:
先输入要修改的学生的学号,如果该学生存在,则根据需要修改学生信息;
7).计算每个学生的加权平均分并根据其是否大于60分别写入两个文本。
课程设计题目功能
1.系统功能模块框图设计
本程序将用到结构体数组和对文件的操作。
程序运行后先要录入学生的信息(班级、学号、姓名、四门课的成绩),用结构体数组保存分类信息。
另外在程序中要实现查询显示等功能则需要菜单选择来调用实现各个功能的子函数。
由此可以将本系统分为如下几个部分:
读取学生信息,按姓名查询,按性别查询,计算总成绩,按姓名排序,按总成绩排序,录入新的学生信息,删除学生信息,修改学生信息,计算加权平均分等。
其中个函数通过菜单函数实现。
退出
计算每个学生的加权平均分
修改学生信息
删除学生信息
录入新的学生信息
按姓名排序
计算每位同学的总成绩
显示菜单
(menu)
主函数
(main)
按总成绩排序
按性别查询学生信息
按姓名查询学生信息
读取学生信息
以下为系统功能模块框图:
2.数据结构说明及详细设计
1.定义一个结构体来保存原始数据。
structstudent//------------------------学生信息结构体
{
longnum;
//-----------------------------学号
charname[7];
//-------------------------姓名
charsex[3];
//--------------------------性别
chardate[13];
//------------------------出生日期
intscore[N];
//-------------------------各科成绩
intsum;
//------------------------------总成绩
doubleave;
//---------------------------加权平均分
}st[M];
2.菜单函数Menu输出菜单。
printf("
**************************\n"
);
printf("
|学生成绩管理系统|\n"
|1.读取学生信息|\n"
|2.按姓名查询|\n"
|3.按性别查询|\n"
|4.计算每位同学的总成绩|\n"
|5.按姓名排序|\n"
|6.按总成绩排序|\n"
|7.录入新的学生信息|\n"
|8.按学号删除|\n"
|9.修改学生信息|\n"
|10.计算每个学生的加权平均分|\n"
|0.退出|\n"
***************************\n"
通过printf函数输出菜单
3.ReadDat函数读取学生信息。
if((fp=fopen("
tx0126.txt"
"
r"
))==NULL)
{
printf("
文件打开错误!
\n"
return;
}
通过指针打开tx0126文本文件
fgets(str1,100,fp);
%s"
str1);
fgets函数读取tx0126文件的表头并输出
for(i=0;
i<
M;
i++)
{
fscanf(fp,"
%d%s%s%s"
&
st[i].num,st[i].name,
st[i].sex,st[i].date);
%d%7s%5s%13s"
st[i].num,st[i].name,
st[i].sex,st[i].date);
for(j=0;
j<
N;
j++)
{
fscanf(fp,"
%d"
st[i].score[j]);
%7d"
st[i].score[j]);
用for循环通过fscanf函数读出tx0126的具体内容,然后通过printf函数将具体内容显示在屏幕上
流程图如下:
输出全部信息
错误!
提示:
打开失败!
!
正确!
测定每个文件数量是否到最后
指针链接文件,判断是否正确打开
关闭文件
4.CheckName按姓名查询。
if(!
strcmp(name,st[i].name))
判断是否有与所输入的姓名相同的学生。
然后通过for循环用printf函数输出查询内容。
输入查询内容
流程图如下:
输入要查询的内容
(姓名,性别)
将输入的内容与源文件进行比较
未找到相同的。
未找到指定项。
找到相同的。
输出该文件的全部信息
5.CheckSex按性别查询。
strcmp(sex,st[i].sex))
判断是否有与所查性别相同的学生。
流程图同模块4
6.TotalScore函数计算总成绩。
if((fp=fopen("
ts0126.txt"
"
w"
))==NULL)
return;
通过指针打开ts0126文本文件
fprintf(fp,"
学号姓名性别出生年月英语数学C语言物理总成绩\n"
for(i=0;
i++)
{fprintf(fp,"
for(j=0;
{
fprintf(fp,"
%9d"
sum=sum+st[i].score[j];
}
%7d\n"
sum);
sum=0;
//计算完后sum必须归0;
否则,后面学生总成绩的结果将是前面学生总成绩的和
}
fclose(fp);
通过for循环计算出每位学生的总成绩,用fprintf函数将计算出的结果及学生原始信息写入ts0126文件,最后fclose函数关闭。
计算总成绩
错误:
正确!
将表头写入文件
For循环计算总成绩
将结果重新写入文件
关闭
7.SortByname按姓名排序
structstudentstu[M];
structstudentt;
inti,j;
stu[i]=st[i];
建立一个student副本
M-1;
for(j=i+1;
if(strcmp(stu[i].name,stu[j].name)>
0)
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
用if函数比较每位同学姓名的ASIC码,再通过两个for循环将所有学生行重新排序,最后用printf函数将排好序的学生信息输出在屏幕上。
流程图:
排序
输入排序标准
(姓名、总成绩)
For循环与if结构对各项进行比较并交换顺序
输出
8.SortBySore按总成绩排序。
structstudentstu[M];
inti,j,sum1=0,sum2=0,n;
重新建立一个student副本
{
for(n=0;
n<
n++)
sum1=sum1+stu[i].score[n];
for(n=0;
sum2=sum2+stu[j].score[n];
if(sum1<
sum2)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
通过两个for循环计算出每位同学的总成绩并通过if函数比较每位学生的总成绩进行排序,最后用print函数将排好序的学生信息输出在屏幕上
流程图同模块7!
9.AddStudent函数录入新的学生信息。
if(number==stu[j].num)
\n\n该学生已存在,请重新输入!
!
"
gotoloop;
判断要添加的学生是否存在;
若存在,通过goto函数loop处重新输入;
若不存在,
执行后面的添加项;
打开失败\n"
用指针打开tx0126文件
for(j=0;
M+1;
{printf("
%d%73ss%5s%1%9d%9d%9d%9d\n"
st[j].num,
st[j].name,st[j].sex,st[j].date,st[j].score[0],st[j].score[1],st[j].score[2],st[j].score[3]);
fprintf(fp,"
%d%7s%5s%13s%9d%9d%9d%9d\n"
st[j].name,st[j].sex,st[j].date,st[j].score[0],
st[j].score[1],st[j].sco