学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(37页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
中国海洋大学
青岛学院
C语言课程设计报告书
题目
学生成绩管理系统
学生姓名
指导教师
学院
专业班级
组内分工
姓名
主要任务
占系统比例
系统主菜单删除学生信息主函数
30%
录入学生信息修改学生信息
24%
查询排序
24%
排序统计
24%
目录
1前言1
2需求分析3
3模块设计图3
4NS流程图清单4
5存储结构及函数说明5
6课程设计结果6
7实践心得体会7
1前言
1.1课程设计目的
学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要,所以一个良好的学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。
学生成绩管理系统对学校加强学生成绩管理有着极其重要的作用.由于各个大学都在持续扩招,学生的数量日益庞大,对于如何管理如此庞大的学生成绩数据显得更为复杂,传统的手工成绩管理不仅工作量大,而且容易出现问题,如:
效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
已不能适应时代的发展。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,具有手工管理所无法比拟的优点。
例:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高管理者管理的效率,也是学校走向科学化、正规化管理,与世界接轨的重要条件。
因此,开发设计这样一套学生成绩管理软件成为很有必要的事情。
该学生成绩管理系统采用C语言开发研制,针对学生成绩及其数据特点,可以全面实现对学生成绩的录入、查询、修改、删除和统计等功能的计算机管理。
它能使学生成绩数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生成绩管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。
1.2课程设计过程
⑴分析程序的主要作用并写出需求分析;
⑵确定组内分工并给出全局变量及结构体;
⑶写代码并画出N-S图;
⑷组合并调试代码,做出相应的修改;
⑸完成文档;
为了方便数据的读取与保存,我们采用外部文件来进行数据保存能实现学生信息数据的维护。
1.3课程设计目标
建立学生成绩信息管理系统,采用计算机对学生成绩信息进行管理,进一步提高学校现代化水平。
帮助广大成绩信息管理者提高工作效率、减少工作时间,实现学生及其家长信息查询工作流程的系统化、公平化、规范化和自动化,也为广大在教师提供便利快捷的成绩录入功能。
为了保证系统能够长期、安全、稳定、可靠、高效的运行,本课题将达到以下几个目的:
(1)系统处理的准确性
系统处理的准确性和及时性是系统的必要性能。
在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足高校对信息处理的需求。
(2)系统处理的及时性
由于学生非常关心自己的信息正确与否以便及时接受来自学校的学习成绩信息,学生成绩信息管理功能对于整个系统的功能和性能完成举足轻重。
在系统开发过程中,必须采用一定的方法保证系统的准确性。
(3)系统的保密性
学生成绩信息是属于个人的隐私,所以系统在开发时,应该充分考虑系统的保密性,以保证学生的隐私权。
(4)系统的开放性和可扩充性
学生成绩信息管理系统在开发过程中,应该充分考虑以后的可扩充性。
例如学生成绩信息管理的方式的改变,学生成绩信息的需求也会不断的更新和完善。
2需求分析
一个学校需要管理学生的基本信息和各门功课的考试成绩,希望当用到时直接从计算机中输出,从而减轻管理人员的负担,也使学生的信息能够长期保存,需要建立一个简单的学生成绩管理系统来管理学生的成绩和信息。
学生信息管理系统作为一个应用软件为学校师生提供一个对学生信息进行管理和查询的平台。
用户可根据系统界面的提示信息对学生的信息进行录入、删除、修改、排序、查询、统计等操作。
系统功能需求描述如下:
(1)系统主菜单:
用户进入系统主菜单,可以按提示进行选择,从而完成不同的任务,此功能在显示子程序中实现。
管理员界面用output1()函数实现、用户界面用output2()函数实现。
(2)录入学生信息及成绩:
用户根据提示信息输入学生的学号、姓名、性别、班级、各科成绩等信息,系统会以文件形式存储,以便进行管理,可将学生信息整合成结构体,用voidinput()函数实现。
(3)修改学生信息及成绩:
用户根据提示信息输入学生的学号,在学生文件中查找到该学生的信息并根据提示信息进行成绩的修改,用voidcorrect()函数实现。
(4)删除学生信息及成绩:
用户根据提示信息输入学生的学号,在学生文件中查找到该学生的全部信息并将该信息全部删除,用voiddelete()函数实现。
(5)查询学生信息及成绩:
用户根据提示信息输入学生的学号或姓名的方式进行查询,在学生文件中查找到该信息并显示出来,用voidsearch_by_name()和voidsearch_by_num()函数实现。
(6)学生成绩排序:
对学生成绩(总分)进行从高到低排序,用冒泡排序法,用voidarrange()函数实现。
(7)统计学生成绩:
统计并显示各科优、良、中、及格、不及格的人数,及及格率、最高分,用voidstat()函数实现。
(8)退出系统:
完成你所需完成的任务之后并退出到系统主菜单,用exit(0)函数实现。
3模块设计图
前面的分析中已经定义了系统各个模块。
在系统运行时刻由系统的流程决定。
当管理员运行该系统后可以来进行学生成绩信息录入管理、学生成绩信息查询管理、学生成绩信息删除管理、学生成绩信息修改管理、学生成绩信息排序管理及学生成绩信息统计管理操作;当用户运行该系统后可以进行学生成绩信息查询操作,具体的流程如图3.2所示。
图3.2系统流程图
4NS流程图清单
录入功能N-S流程图
system("cls")
定义变量i=0,j,stu[MAX],文件指针*fp
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
是
(fp=fopen("学生信息及成绩表.txt","a+"))==NULL)
否
printf("openfileerorr!
\n");
exit(0);
输入j
num=num+j;
i录入并写入文件
关闭文件fclose(fp)
打开学生人数文件
将学生人数写入到文件fprintf(fp,"%d",&num);
关闭学生人数文件fclose(fp);
system("cls");
input_choose();
删除功能N-S流程图
system("cls")
定义变量i,j,index,m=0,no[20],stu[MAX],文件指针*fp
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
是
(fp=fopen("学生信息及成绩表.txt","a+"))==NULL)
否
printf("openfileerorr!
\n");
exit(0);
输入no
I读取文件
关闭文件fclose(fp)
istrcmp(Stu[i].no
是
no)=0
否
显示学生信息
此学生不存在
J=i
定义文件指针fp2
是
(fp=fopen("学生信息及成绩表.txt","a+"))==NULL)
否
printf(
"open,
fileerorr!
\n");
exit(0);
J删除信息
j写入文件
fclose(fp))
delect()
删除成功
num=num-1;
打开学生人数文件
将学生人数写入到文件fprintf(fp,"%d",&num);
关闭学生人数文件fclose(fp);
delect_choose();
修改功能流程图
system("cls")
定义变量inti,j;charch,no[20];FILE*fp;structstudentstu[MAX]
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
是
(fp=fopen("学生信息及成绩表.txt","a+"))==NULL)
否
Printf
("openfileerorr!
\n");
exit(0);
输入no
i读取文件
关闭文件fclose(fp)
iStrcmp(stu[i].no,no)==0
是
否
显示学生信息printf();
此学生不存在
j=i;
correct()
输入选择ch
casech,ch=1,2,3,4,5
case’1:
case’2’
case’3
case'4':
case'5':
scanf("%lf",&x);
stu[j].liner_score=x;break
scanf("%lf",&x);stu[j].english_score=xbreak;
scanf("%lf",&x);stu[j].listening_score=x;break
scanf("%lf",&x);stu[j].max_score=x;break;
scanf("%lf",&x);stu[j].c_score=x;break;
计算总分
计算平均分
显示学生信息printf();
(fp=fopen("学生表.txt","a+"))==NULL)
是
否
iPrintf
("openfileerorr!
\n");
exit(0)
写入文件
fclose(fp)
correct_choose();
System("cls");
查询功能N-S流程图
system("cls")
定义变量intchoice;
输入选择choice
case(choice),choice=0,1,2
case0:
case1:
case2:
defult
search_by_num()
search_by_name();
printf(“输入无效选项”);
Exit(0);
break;
break;
(1)case’2’:
search_by_name();
inti,m=0;charname[20];structstudentp[MAX];FILE*fp;
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
(fp=fopen("学生信息及成绩表.txt","a+"))==NULL)
否
是
输入姓名name
printf("Fileopenerror!
\n");
i读取文件
exit(0);
strcmp(name,p[i].name)==0
是
否
显示查询学生的信息printf()
m++;
m==0
是
否
printf("没有找到符合的信息。
\n");
search_choose();
system("cls");
(2)case’1’:
search_by_num()N-S流程图
inti,m=0;structstudentp[MAX];FILE*fp;charno[20];
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
(fp=fopen("学生信息及成绩表.txt","a+"))==NULL)
否
是
输入学号no
printf("Fileopenerror!
\n");
i读取文件
strcmp(num,p[i].num)==0
是
否
显示查询学生的信息printf();
M++;
m==0
是
否
printf("没有找到符合的信息。
\n");
search_choose();
system("cls");
统计功能N-S图
intnumber;
输入你的选择number
case‘number’,number=1,2,3,4,5
case1
case2:
case3:
case4:
case5:
:
liner_stat();
break;
english_stat();
break;
listening_stat();
break;
max_stat();
break;
c_stat();
break;
stat_choose();
system("cls");
case1:
liner_stat();N-S流程图
inti,f,j=0,k=0,l=0,m=0,n=0,Pass_no=0;doubleliner_rate,max_score,temp;FILE*fp;structstudentstu[MAX];
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
是
(fp=fopen("学生信息及成绩表.txt","r"))==NULL
否
printf("Fileopenerror!
\n");
i读取文件
exit(0);
fstu[f].liner_score>=90.00
T
F
j++;
stu[f].liner_score>=80.00&&
T
stu[f].liner_core<90.00F
k++;
stu[f].liner_score>=70.00&&
T
stu[f].liner_score<80.00
F
l++
stu[f].liner_score>=60.00&&
T
stu[f].liner_score<70.00
F
m++
Tstu[f].liner_score<60.00
F
n++
liner_rate=(double)(j+k+l+m)/(j+k+l+m+n);
pass_no=j+k+l+m;
istu[i].liner_score>stu[i+1].liner_score
T
F
temp=stu[i].liner_score;stu[i].liner_score=stu[i+1].liner_score;stu[i+1].liner_score=temp;
max_score=stu[i+1].liner_score;
输出学生线性代数统计的内容
fclose(fp)
(fp1=fopen("学生成绩表统表.txt","a+"))==NULL
F
T
写入文件
Exit(0);
fclose(fp1)
case3:
listening_stat();N-S流程图
inti,f,j=0,k=0,l=0,m=0,n=0,Pass_no=0;doublelistening_rate,max_score,temp;FILE*fp;structstudentstu[MAX];
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
是
(fp=fopen("学生信息及成绩表.txt","r"))==NULL
否
printf("Fileopenerror!
\n");
i读取文件
exit(0);
fstu[f].listening_score>=90.00
T
F
j++;
stu[f].listening_score>=80.00&&
T
stu[f].listening_score<90.00F
k++;
stu[f].listening_score>=70.00&&
T
stu[f].llistening_score<80.00
F
l++
stu[f].listening_score>=60.00&&
T
stu[f].llistening_score<70.00
F
m++
Tstu[f].listening_score<60.00
F
n++
Listening_rate=(double)(j+k+l+m)/(j+k+l+m+n);
pass_no=j+k+l+m;
istu[i].listening_score>stu[i+1].listening_score
T
F
temp=stu[i].listening_score;stu[i].listening_score=stu[i+1].listening_score;stu[i+1].listening_score=temp;
max_score=stu[i+1].listening_score;
输出听说统计内容
fclose(fp)
(fp1=fopen("学生成绩表统表.txt","a+"))==NULL
F
T
写入文件
Exit(0);
fclose(fp1)
case4:
marx_stat();N-S流程图
inti,f,j=0,k=0,l=0,m=0,n=0,Pass_no=0;doublemarx_rate,max_score,temp;FILE*fp;structstudentstu[MAX];
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
是
(fp=fopen("学生信息及成绩表.txt","r"))==NULL
否
printf("Fileopenerror!
\n");
i读取文件
exit(0);
fstu[f].marx_score>=90.00
T
F
j++;
stu[f].marx_score>=80.00&&
T
stu[f].marx_score<90.00F
k++;
stu[f].marx_score>=70.00&&
T
stu[f].marx_score<80.00
F
l++
stu[f].marx_score>=60.00&&
T
stu[f].marx_score<70.00
F
m++
Tstu[f].marx_score<60.00
F
n++
marx_rate=(double)(j+k+l+m)/(j+k+l+m+n);
pass_no=j+k+l+m;
istu[i].marx_score>stu[i+1].marx_score
T
F
temp=stu[i].marx_score;stu[i].marx_score=stu[i+1].marx_score;stu[i+1].marx_score=temp;
max_score=stu[i+1].marx_score;
输出马克思统计内容
fclose(fp)
(fp1=fopen("学生成绩表统表.txt","a+"))==NULL
F
T
写入文件
Exit(0);
fclose(fp1)
case5:
C_stat();N-S流程图
inti,f,j=0,k=0,l=0,m=0,n=0,Pass_no=0;doublec_rate,max_score,temp;FILE*fp;structstudentstu[MAX];
打开学生人数文件if((fp=fopen("学生人数.txt","a+"))==NULL)
读文件fscanf(fp,"%d",&num);
关闭文件fclose(fp);
是
(fp=fopen("学生信息及成绩表.txt","r"))==NULL
否
printf("Fileopenerror!
\n");
i读取文件
exit(0);
fstu[f].c_score>=90.00
T
F
j++;
stu[f].c_score>=80.00&&
T
stu[f].c_score<90.00F
k++;
stu[f].c_score>=70.00&&
T
stu[f].c_score<80.00
F
l++
stu[f].c_score>=60.00&&
T
stu[f].c_score<70.00
F
m++
Tstu[f].c_score<60.00
F
n++
c_rate=(double)(j+k+l+m)/(j+k+l+m+n);
pass_no=j+k+l+m;
istu[i].c_score>stu[i+1].c_score
T
F
temp=stu[i].c_score;stu[i].c_score=stu[i+1].c_score;stu[i+1].c_score=temp;
max_score=stu[i+1].c_score;
输出C