学生成绩记录簿设计.docx
《学生成绩记录簿设计.docx》由会员分享,可在线阅读,更多相关《学生成绩记录簿设计.docx(28页珍藏版)》请在冰点文库上搜索。
![学生成绩记录簿设计.docx](https://file1.bingdoc.com/fileroot1/2023-6/21/1766c5a5-f8bc-4aaf-be03-1fa16f309d94/1766c5a5-f8bc-4aaf-be03-1fa16f309d941.gif)
学生成绩记录簿设计
课程设计(大作业)任务书
姓名:
xx院(系):
信息技术学院
专业:
计算机科学与技术学号:
xx
任务起止日期:
xx
课程设计题目:
学生成绩记录簿
课程设计要求:
编制一个C语言成绩记录簿,每个学生信息包括:
学号、姓名、C语言成绩。
具体功能:
1.系统以菜单方式工作;
2.创建学生成绩信息并以磁盘文件保存;
3.读取磁盘文件并显示输出所有学生的成绩;
4.查询学生成绩;
(1)按学号查询成绩;
(2)学号姓名查询成绩;
5.修改指定姓名或学号的学生的成绩并可存盘;
6.显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。
工作计划及安排:
星期一:
老师的大概讲解及主函数、目录函数的编写和调试;
星期二:
创建学生信息、输出学生信息和修改学生信息的函数编写及调试;
星期三:
学生信息查询、学生成绩分段和学生成绩排序的函数编写及调试;
星期四:
整个函数的最终调试,课程设计(大作业)报告的书写;
星期五:
答辩。
指导教师签字
年月日
课程设计(大作业)成绩
学号:
xx姓名:
xx指导教师:
xx
课程设计题目:
学生成绩记录簿设计
总结:
通过这次的课程设计,增加了我对学习C语言学习的兴趣,虽然还不是真正的明白所有的C语言的子函数和里面的一些逻辑顺序,但我从C语言这门课程开始,已经发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的运行也有一个大体的了解。
这次课程设计经过老师的讲解,自己的查找,在网上的搜索,实现题目上的要求,先做出一些简单的函数和程序,一步步的在做出其它的内容,不过在实际操作过程中犯得一些错误也还是会得到一些意外的收获。
在具体的操作中,对这学期的C语言的理论知识得到巩固,在设计的过程中也发现自己的不足之处,在以后的学习和上机的操作中会更加注意,同时体会到C语言的简洁和灵活。
在上机操作中我们的任何不懂的问题都会暴露出来,对于我们来说是是件好事,在课程设计的过程中特别是对数组和循环有了深刻的理解。
通过实际的操作,学会C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题,解决问题的能力。
指导教师评语:
成绩:
填表时间:
指导教师签名:
一.问题的定义
编制一个C语言成绩记录簿,每个学生信息包括:
学号、姓名、C语言成绩。
要求:
1.数据存储采用文件形式。
2.标准的C语言输入输出
3.功能完善,适当注释
4.模块化设计、结构化编程
二、需求分析
系统能实现以下主要功能:
1.系统以菜单方式工作
2.创建学生成绩信息并以磁盘文件保存;
3.读取磁盘文件并显示输出所有学生的成绩;
4.查询学生成绩
(1)按学号查询成绩
(2)学号姓名查询成绩
4.添加成绩记录;
5.修改指定姓名或学号的学生的成绩并可存盘;
6.显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。
三、总体设计
根据系统的要求,系统总体设计如图1所示。
图1系统总体结构
四、详细设计
该部分主要包括:
数据结构设计、函数设计(包括函数原型、算法思想、流程描述)、代码设计及程序运行结果显示。
(一)学生成绩数据结构设计
#include
#include
#include
inti,j,k,y;
FILE*fp;
Structstu
{
intno;
charname[30];
floatcscore;
longa;
};structstus[100];
(二)函数设计
1.主函数
main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。
2.其他各功能函数
(1)学生成绩信息录入函数voidinput()
算法思想:
①依次录入结构体数组中所包含的各个成员;
②直到输入的结构体成员中信息全部为0,数据输入结束;
③返回实际录入的学生成绩信息数。
(2)将学生成绩信息输出为voidoutput()
算法思想:
①定义结构体变量的指针变量;
②输出所输入的全部信息,若不能输出信息给出提示信息;
③将文件中的信息依次读出,最后结构体的指针为NULL。
(3)从文件中修改学生成绩信息voidmodify()
算法思想:
①定义指向结构体变量的指针和指向文件的指针;
②修改方式分为两种(学号和姓名),选择是给出相应的信息;
③将修改后的信息保存,并提示。
3.流程描述
(1)菜单函数
intfun()
{
intn;
system("cls");
printf("\n\n\t\t\t\t成绩记录薄");
printf("\n\n\t\t\t");
for(i=0;i<33;i++)
printf("*");
printf("\n");
printf("\t\t\t************菜单*************\n");
printf("\t\t\t*1、创建学生的信息!
\t*\n");
printf("\t\t\t*2、输出所有学生的信息!
\t*\n");
printf("\t\t\t*3、修改成绩!
\t*\n");
printf("\t\t\t*4、查询!
\t*\n");
printf("\t\t\t*5、显示成绩分段的学生信息!
\t*\n");
printf("\t\t\t*6、学生成绩排名!
\t*\n");
printf("\t\t\t*7、退出成绩记录薄!
\t*\n");
printf("\t\t\t");
for(i=0;i<33;i++)
printf("*");
printf("\n\n");
printf("\n\t\t\t请输入选项:
");
scanf("%d",&n);
returnn;
}
(2)学生成绩信息录入函数
voidinput()
{
system("cls");
i=0;
fp=fopen("out.dat","w");
printf("请以0作为输入学生学号信息的结束!
\n");
do
{
printf("输入学生的学号:
");
scanf("%d",&s[i].no);
printf("输入学生的姓名:
");
scanf("%s",s[i].name);
printf("输入学生的C语言成绩:
");
scanf("%f",&s[i].cscore);
printf("输入添加成绩的时间:
");
scanf("%ld",&s[i].a);
if(s[i].no!
=0)
fprintf(fp,"%d%-4s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
}while(s[i].no!
=0);
fclose(fp);
}
voidoutput()//学生全部信息输出
{
if((fp=fopen("out.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
}
printf("\t\t\t全部的学生信息:
\n");
k=0;
while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!
=EOF)
{
printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a);
k++;
}
fclose(fp);
}
(3)学生信息输出函数
voidoutput()
{
if((fp=fopen("out.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
}
printf("\t\t\t全部的学生信息:
\n");
k=0;
while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!
=EOF)
{
printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a);
k++;
}
fclose(fp);
}
(4)修改学生信息函数
voidmodify()
{
charst[30];
intx,num;
floatnu;
longh;
k=0;
system("cls");
if((fp=fopen("out.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
return;
}
while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!
=EOF)
{
k++;
}
fclose(fp);
printf("输入1表示用学号修改,输入2表示用姓名修改!
请选择:
\n");
scanf("%d",&x);
if(x==1)
{
printf("请输入修改成绩人的学号:
");scanf("%d",&num);
for(i=0;iif(num==s[i].no)
{
printf("请输入修改的成绩:
\n");
scanf("%f",&nu);
s[i].cscore=nu;
printf("请输入修改的时间:
\n");
scanf("%ld",&h);
s[i].a=h;
fp=fopen("out.dat","w");
for(i=0;ifprintf(fp,"%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
fclose(fp);
printf("修改成功\n");
return;
}
printf("没有找到该生的信息!
\n");
return;
}
if(x==2)
{
printf("请输入修改成绩人的姓名:
");
scanf("%s",st);
for(i=0;iif(strcmp(s[i].name,st)==0)
{
printf("请输入修改的成绩:
\n");
scanf("%f",&nu);
s[i].cscore=nu;
printf("请输入修改成绩的时间:
\n");
scanf("%ld",&h);
s[i].a=h;
fp=fopen("out.dat","w");
for(i=0;ifprintf(fp,"%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
fclose(fp);
printf("修改成功\n");
return;
}
printf("没有找到该生的信息!
\n");
return;
}
(5)代码设计和执行结果
1.头文件
Structstu
{
intno;/*学号*/
charname[30];/*姓名*/
floatcscore;/*成绩*/
longa;/*时间*/
};structstus[100];
/******以下是函数原型*******/
voidinput()/*输入记录*/
voidoutput()/*输出记录*/
voidmodify()/*修改记录*/
2.源程序代码与运行结果
#include
#include
#include
inti,j,k,y;
FILE*fp;
structstu//结构体函数的定义
{
intno;
charname[30];
floatcscore;
longa;
};structstus[100];
intfun()//目录函数
{
intn;
system("cls");
printf("\n\n\t\t\t\t成绩记录薄");
printf("\n\n\t\t\t");
for(i=0;i<33;i++)
printf("*");
printf("\n");
printf("\t\t\t************菜单*************\n");
printf("\t\t\t*1、创建学生的信息!
\t*\n");
printf("\t\t\t*2、输出所有学生的信息!
\t*\n");
printf("\t\t\t*3、修改成绩!
\t*\n");
printf("\t\t\t*4、查询!
\t*\n");
printf("\t\t\t*5、显示成绩分段的学生信息!
\t*\n");
printf("\t\t\t*6、学生成绩排名!
\t*\n");
printf("\t\t\t*7、退出成绩记录薄!
\t*\n");
printf("\t\t\t");
for(i=0;i<33;i++)
printf("*");
printf("\n\n");
printf("\n\t\t\t请输入选项:
");
scanf("%d",&n);
returnn;
}
voidinput()//输入学生的学号、姓名、成绩信息
{
system("cls");
i=0;
fp=fopen("out.dat","w");
printf("请以0作为输入学生学号信息的结束!
\n");
do
{
printf("输入学生的学号:
");
scanf("%d",&s[i].no);
printf("输入学生的姓名:
");
scanf("%s",s[i].name);
printf("输入学生的C语言成绩:
");
scanf("%f",&s[i].cscore);
printf("输入添加成绩的时间:
");
scanf("%ld",&s[i].a);
if(s[i].no!
=0)
fprintf(fp,"%d%-4s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
}while(s[i].no!
=0);
fclose(fp);
}
voidoutput()//学生全部信息输出
{
if((fp=fopen("out.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
}
printf("\t\t\t全部的学生信息:
\n");
k=0;
while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!
=EOF)
{
printf("\t\t\t%d\t%s\t%.1f\t%ld\n",s[k].no,s[k].name,s[k].cscore,s[k].a);
k++;
}
fclose(fp);
}
voidmodify()//修改学生信息
{
charst[30];
intx,num;
floatnu;
longh;
k=0;
system("cls");
if((fp=fopen("out.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
return;
}
while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!
=EOF)
{
k++;
}
fclose(fp);
printf("输入1表示用学号修改,输入2表示用姓名修改!
请选择:
\n");
scanf("%d",&x);
if(x==1)
{
printf("请输入修改成绩人的学号:
");scanf("%d",&num);
for(i=0;iif(num==s[i].no)
{
printf("请输入修改的成绩:
\n");
scanf("%f",&nu);
s[i].cscore=nu;
printf("请输入修改的时间:
\n");
scanf("%ld",&h);
s[i].a=h;
fp=fopen("out.dat","w");
for(i=0;ifprintf(fp,"%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
fclose(fp);
printf("修改成功\n");
return;
}
printf("没有找到该生的信息!
\n");
return;
}
if(x==2)
{
printf("请输入修改成绩人的姓名:
");
scanf("%s",st);
for(i=0;iif(strcmp(s[i].name,st)==0)
{
printf("请输入修改的成绩:
\n");
scanf("%f",&nu);
s[i].cscore=nu;
printf("请输入修改成绩的时间:
\n");
scanf("%ld",&h);
s[i].a=h;
fp=fopen("out.dat","w");
for(i=0;ifprintf(fp,"%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
fclose(fp);
printf("修改成功\n");
return;
}
printf("没有找到该生的信息!
\n");
return;
}
}
voidlookat()//学生信息查询
{
charst[30];
intx,num;
k=0;
system("cls");
if((fp=fopen("out.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
return;
}
while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!
=EOF)
{
k++;
}
printf("输入1表示用学号查询,输入2表示用姓名查询!
请选择:
\n");
scanf("%d",&x);
if(x==1)
{
printf("请输入查询的学号:
");
scanf("%d",&num);
for(i=0;iif(num==s[i].no)
{
printf("%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
return;
}
printf("对不起,找不到该生!
\n");
return;
}
if(x==2)
{printf("请输入查询的姓名:
");
scanf("%s",st);
for(i=0;iif(strcmp(s[i].name,st)==0)
{
printf("%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
return;
}
printf("对不起,找不到该生!
\n");
}
}
voidsubsection()//学生成绩分段
{
system("cls");
k=0;
if((fp=fopen("out.dat","r"))==NULL)
{
printf("Cannotopenthefile!
\n");
}
while(fscanf(fp,"%d%s%f%ld",&s[k].no,s[k].name,&s[k].cscore,&s[k].a)!
=EOF)
{
k++;
}
printf("\t\t\t90分以上学生的信息!
\n");
for(i=0;iif(s[i].cscore>=90)
printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
printf("\n\n");
printf("\t\t\t80到89分学生的信息!
\n");
for(i=0;iif(s[i].cscore<90&&s[i].cscore>=80)
printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
printf("\n\n");
printf("\t\t\t60到79分学生的信息!
\n");
for(i=0;iif(s[i].cscore>=60&&s[i].cscore<80)
printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
printf("\n\n");
printf("\t\t\t60分以下学生的信息!
\n");
for(i=0;iif(s[i].cscore<60)
printf("\t\t\t%d%s%.1f%ld\n",s[i].no,s[i].name,s[i].cscore,s[i].a);
printf("\n\n");
}
voidrank()//成绩的排序
{
structstut;
k=0;
system("cls");
if((fp=fopen("out.dat","r"))==NULL)