C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx
- 文档编号:5279138
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:37
- 大小:432.97KB
C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx
《C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告 学生成绩管理系统Word格式文档下载.docx(37页珍藏版)》请在冰点文库上搜索。
浏览成绩
退出模块
四.详细设计
1、主函数
【分析】
将各个功能模块设置为菜单选项,方便调用,且执行完每部分功能模块后能够方便返回到系统界面.
【流程图】:
开始
显示一系列功能选项
N
输入n,判断n是否是A-H间的字母
Y
根据n的值调用各功能模块函数
结束
【程序代码】:
menu()/*主界面*/
{
intw1;
charn;
/*.变量n保存选择菜单数字,w1判断输入的数字是否在功能菜单对应数字范围内*/
do
puts("
\t\t***************菜单****************\n\n"
);
\t\t\t\tA.录入学生信息"
\t\t\t\tB.修改学生记录"
\t\t\t\tC.删除一个学生记录"
\t\t\t\tD.登记成绩"
\t\t\t\tE.修改成绩"
\t\t\t\tF.浏览全班成绩"
\t\t\t\tG.退出"
puts("
\n\n\t\t************************************\n"
printf("
操作选择(A-H):
[]\b\b"
n=getchar();
\n"
if(n<
'
A'
||n>
H'
)
w1=1;
/*对选择的数字作判断*/
else
w1=0;
}
while(w1==1);
switch(n)/*选择功能*/
{
case'
:
enter();
break;
/*输入模块*/
case'
B'
modify();
/*修改模块*/
case'
C'
delete();
/*删除模块*/
D'
add();
/*登记成绩模块*/
E'
modify_score();
/*修改成绩模块*/
F'
browse();
/*浏览模块*/
G'
exit(0);
/*退出模块*/
}
main()/*主函数*/
menu();
2、各功能模块设计
(1)输入模块
【数据分析】:
单看各数据信息,学号﹑年龄以及数学﹑英语﹑物理各科成绩和总分均是整型,姓名可以采用字符型数组.数据信息存放在文件中,一条记录对应一个学生,既符合习惯也方便信息管理.把学生的学号﹑姓名﹑年龄﹑各科成绩及总分作为结构体成员,存放若干个学生信息就用结构体数组.
【流程图】:
输入用户要输入学生记录的个数n
i从0到n-1调用输入函数input(i)
调用保存函数save(n)
【程序代码】
enter()/*输入模块*/
inti,n;
Howmanystudents(1-%d)?
"
N);
scanf("
%d"
&
n);
/*要输入的记录个数*/
\nEnterdatanow\n\n"
for(i=0;
i<
n;
i++)
printf("
\nInput%dthstudentrecord.\n"
i+1);
input(i);
/*调用输入函数*/
if(i!
=0)
save(n);
/*调用保存函数*/
printf_back();
/*一个任务结束时让用户选择是浏览还是返回*/
(2)修改模块
【分析】:
该模块的功能是显示所有学生信息,考虑到记录很多,故采用分屏显示。
显示完所有记录后,用户输入要修改学生的学号,根据学号查找学生记录,并提示用户修改该记录的哪部分信息,是学号、姓名、年龄或某科成绩、总分还是所有信息都修改,根据用户选择修改相应信息。
返回主菜单
Y
N
modify()/*修改模块*/
structstudents;
FILE*fp;
inti,n,k,w0=1,w1,w2=0;
n=load();
k=-1;
/*给用户看全部记录以便确认要修改的记录*/
printf_face();
/*调用显示数据结构项目函数*/
for(i=0;
{
if((i!
=0)&
&
(i%10==0))/*目的是分屏显示*/
{
printf("
\n\n请输入您要修改的学生编号(No.073101-).按任意键继续..."
getch();
puts("
\n\n"
}
printf_one(i);
printf("
}
do
\n\n请输入您要修改的学生编号(No.073101-)!
NO.:
073101-"
scanf("
s.num);
/*输入要修改的数据的学号*/
for(i=0;
i++)/*查找要修改的数据*/
if(s.num==stu[i].num)
{
k=i;
/*找到要修改的记录*/
s=stu[i];
/*把stu[i]备份给s,以便用户反悔时恢复*/
}
if(k==-1)printf("
\n\n记录不存在,请重新输入!
while(k==-1);
/*当k=-1表示没有找到*/
printf_one(k);
/*调用显示一个记录的函数*/
w1=modify_data(k,n);
/*修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改*/
if(w1==1)/*确认修改*/
\n修改成功!
^_^.\n\n是否继续修改?
\n\n\t1.是2.返回并保存\t[]\b\b"
w0);
w2=1;
/*来控制保存,使w2=1是标记已有过修改*/
else
w0=0;
/*结束*/
if(w2==1)
stu[k]=s;
}/*没有修改,把备份的s恢复,使w0=0是为了让循环终止*/
if(w0!
=1&
w2==1)
save(n);
/*正常返回,且有过修改*/
while(w0==1);
(3)删除模块
该模块的功能是与修改模块一样先显示所有的学生信息,同样考虑到记录很多,采用分屏显示。
显示完所有记录后,用户输入要删除学生的学号,根据学号查找学生记录并删除。
删除一般的做法是将数据从文件中删除,删除位置后面的记录往前挪。
显示所有记录,让用户看哪个要删除
输入要删除的学号
是否找到此学生记录
N
显示找到的记录提示没有找到
使stu[k].sum=0
继续删除?
【程序代码】:
delete()/*删除模块*/
(i%10==0))/*分屏显示*/
\n\n请输入您要删除的学生编号(No.073101-).按任意键继续..."
\n\n请输入您要删除的学生编号(No.073101-)!
/*将要删除的记录备份给s*/
printf("
\n确定删除?
\n\n\t1.是2.此次返回,但不保存[]\b\b"
scanf("
w1);
if(w1==1)
stu[k].sum=0;
/*标记为0后,保存时便不保存*/
\n成功删除!
^_^.\n\n是否继续删除?
/*确认删除*/
/*end*/
/*正常返回且已删除*/
(4)登记成绩模块
该模块的功能是用户需要增加新的学生记录,请从键盘输入并逐条写到原来的输入文件中.
调用加载函数n=load();
并计算可以记录个数n
输入用户要添加学生记录的个数m
K=m+n
i从n到k调用输入函数input(i)
保存添加的记录
add()/*登记成绩模块*/
inti,n,m,k;
您要添加几个学生(1-%d)?
N-n);
m);
/*输入要添加的记录个数*/
k=m+n;
for(i=n;
k;
\n请输入第%d个学生数据.\n"
input(i);
/*调用输入函数*/
if((fp=fopen("
score.txt"
"
ab"
))==NULL)/*以ab方式打开文件,添加保存*/
不能打开此文件.\n"
i++)/*输出到文件*/
if(fwrite(&
stu[i],sizeof(structstudent),1,fp)!
=1)
文件写入错误.\n"
fclose(fp);
printf_back();
/*一个任务结束时的选择浏览还是返回*/
(5)修改成绩模块
该模块的功能是修改各科成绩或全体成绩。
modify_score()/*修改成绩模块*/
\n\n请输入您要修改成绩的学生编号(No.073101-)!
.按任意键继续..."
/*输入要修改的学生学号*/
/*将要修改的记录备份*/
if(k==-1)
printf("
\n\n记录不存在,请再次输入!
w1=modify_score1(k);
/*调用修改成绩函数*/
^_^.\n\n是否继续修改成绩?
\n\n\t1.是2.保存并返回\t[]\b\b"
/*确认修改*/
/*正常返回且已修改*/
(6)浏览模块
该模块的功能是显示所有学生记录信息。
browse()/*浏览模块*/
inti,j,n;
/*加载记录*/
printf_face();
/*调用显示数据结构项目函数*/
if((i!
(i%10==0))/*分屏显示*/
\n\n按任意键继续..."
getch();
puts("
printf_one(i);
\t共有%d项记录.\n"
n);
\n按任意键返回..."
getch();
/*按任意键*/
3、一些公共函数
下面是在每个模块中都有可能用到的一些公共函数。
(1)保存函数save(intn)
【说明】
形参n控制保存的个数。
当stu[k].sum=0表示删除,不保存该记录。
save(intn)/*保存函数,保存n个记录*/
inti;
wb"
))==NULL)/*以输出打开方式,在此前的记录被覆盖*/
\n不能打开此文件\n"
returnNULL;
if(stu[i].sum!
=0)/*stu[i].sum=0表示该记录已删除*/
if(fwrite(&
文件写入错误\n"
fclose(fp);
(2)加载函数load()
该函数可以用来加载所有记录,并且可以返回所有记录的个数。
load()/*加载记录或可以计算记录个数的函数*/
rb"
!
feof(fp);
fread(&
stu[i],sizeof(structstudent),1,fp);
fclose(fp);
return(i-1);
/*返回记录个数*/
(3)学号输入函数no_input(inti,intn)
该函数对输入学号进行判断,确保输入的学号唯一。
形参i表示第i个学生记录,形参n表示总共有n个学生记录。
no_input(inti,intn)/*学号输入函数*/
intk,w1;
w1=0;
NO.:
stu[i].num);
if(stu[i].num<
1||stu[i].num>
N)/*判断学号是否在1到N之间*/
输入错误!
学号只能在(1-N)之间.请重新输入!
w1=1;
if(w1!
for(k=0;
k<
k++)/*比较到第n个学生*/
if(k!
=i&
(stu[k].num==stu[i].num))/*判断学号是否有相同*/
puts("
此记录已存在.请重新输入!
w1=1;
while(w1==1);
(4)输入三科成绩函数enter_score(inti)
形参i表示第i个学生记录。
enter_score(inti)/*输入三科成绩函数*/
数学英语物理"
%d%d%d"
stu[i].Math,&
stu[i].English,&
stu[i].Physical);
/*对分数输入*/
(5)求总分函数sum(inti)
sum(inti)/*对第i个记录的分数求总分*/
stu[i].sum=stu[i].Math+stu[i].English+stu[i].Physical;
(6)输入一个记录的函数input(inti)
input(inti)/*输入一个记录的函数*/
no_input(i,i);
/*调用学号输入函数*/
姓名:
年龄:
%s%d"
stu[i].name,&
stu[i].age);
/*输入姓名、年龄*/
enter_score(i);
/*调用分数输入函数*/
sum(i);
(7)修改成绩函数modify_score1(inti)
形参i表示第i个学生成绩记录,此函数带回保存控制值w1,当w1=1时表示确认保存。
modify_score1(inti)/*修改成绩函数*/
intc,w1;
\n修改=>
\n\n1.数学2.英语3.物理4.总分5.取消并返回"
您需要修改?
/*输入选择作个判断*/
c);
if(c>
5||c<
1)
\n选择错误!
请重新选择!
/*判断选择是否错误*/
getchar();
while(c>
1);
switch(c)/*选择要修改的项目*/
case1:
数学:
stu[i].Math);
case2:
英语:
stu[i].English);
case3:
物理:
case4:
enter_score(i);
/*调用成绩输入函数*/
case5:
0&
c<
5)sum(i);
/*调用求总分函数*/
\n现在:
/*修改后的记录让用户确认*/
\n确认修改?
\n\n\t1.是2.否,重新修改3.此次保存并返回[]\b\b"
/*输入2表示重新修改*/
while(w1==2);
return(w1);
(8)修改记录函数modify_data(inti,intn)
形参i表示第i个学生成绩记录,形参n表示有n个记录,此函数带回保存控制值w1,当w1=1时表示确认保存。
modify_data(inti,intn)/*修改记录函数*/
\n\n1.编号2.姓名3.年龄4.数学5.英语6.物理7.总分8.所有数据9.取消并返回"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课程设计报告 学生成绩管理系统 语言 课程设计 报告 学生 成绩管理系统