13401053聂三丽文档格式.docx
《13401053聂三丽文档格式.docx》由会员分享,可在线阅读,更多相关《13401053聂三丽文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。
因此,开发一套适和大众的、兼容性好的系统是很有必要的。
本系统在开发过程中,注意使其符合操作的业务流程,并力求系统的全面性、通用性,使得本系统不只适用于一家教育机构。
在开发方法的选择上,选择了生命周期法与原型法相结合的方法,遵循系统调查研究、系统分析、系统设计和系统实施四个主要阶段进行设计,而在具体的设计上,采取了演化式原型法,随着用户的使用及对系统了解的不断加深,对某一部分或几部分进行重新分析、设计、实施。
本论文主要从系统分析、系统设计、系统实施与使用等几个方面进行介绍
1.1选题意义
随着社会发展,近年来大学不断扩招,大学生人数不断的增加,因此如此庞大的人如果不进行有效的管理就大大的增加了工作人员的工作强度,现在电子计算机技术和软件业的日趋完善给现代办公带来了极大的便利,利用软件就很容易的解决了这种问题从而帮助工作人员高效的合理的管理。
本学生信息管理系统就是本着这个目的,帮助老师进行有效的管理,减轻工作强度和提高工作效率,使管理更方便快捷。
1.2国内外现状综述
计算机在管理中的应用开始与1954年,当时美国首先用计算机处理工资单。
40多年来,计算机在处理管理信息方面发展迅速。
例于,美国计算机在管理应用项目不到300项,到了1975年达到2670项。
而现在美国财务会上90的工作由计算机完成;
物资管理中80-100的信息处理由计算机完成;
计划管理中是80-90.据计算机应用方面发展比较快的国家统计,计算机应用于经济管理的约占80;
用于科技运算的占8;
用于生产过程控制的占12.我国在全国范围内推广计算机在管理的应用,是在70年代末开始的,虽然起步较晚,近几年发展却较快,特别是微型计算机的出现和普及为信息处理提供了物美价廉的手段,对于推动我国管理信息处理的现代化起了重要作用。
2.系统需求分析
随着科学技术的不断提高,计算机科学技术日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
现在我国的教育机构对学生成绩管理还普遍停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代,这种传统的管理方法必然被计算机为基础的信息管理所取代。
通过调查,要求系统具有权限设置功能的登录模块,学生可以实现成绩信息查询功能。
教务管理人员能够实现注册新用户,学生成绩信息的查询、录入、删除、修改、浏览、统计等功能。
2.1系统功能概述
系统功能有:
1:
输入学生信息2:
输出学生信息3:
查询4:
排序5:
统计6:
删除7:
修改0:
退出。
2.2系统模块
(1)系统主菜单:
用户进入系统主菜单,可以按提示进行选择,从而完成不同的任务。
储,以便进行管理。
(2)输入学生信息:
输入学生信息并存入文件中。
(3)输出学生信息:
输出学生信息并显示在屏幕上。
(4)查询学生信息:
可根据姓名或者学号进行查找,若在学生信息文件中查找到则在屏幕上列出其内容,若没有找到,给出提示信息。
(5)对学生记录进行排序:
对计算机分数进行升序排。
(6)按计算机对成绩进行统计:
求出最高分、最低分、平均分、及格率及在五个分数段的学生人数比率([0,59],[60,69],[70,79],[80,89],[90,100])并输出。
(7)删除学生信息:
根据用户输入的学生学号,在学生信息文件中查找到该信息并除。
(8)修改学生信息:
根据用户输入的学生学号,在学生信息文件中查找到该信息并修
改。
(9)退出:
退出系统。
图2-1系统功能模块图
3系统存储结构说明
3.1系统存储信息说明
系统存储的信息有:
学生学号,姓名,性别,计算机分数,数学分数,英语分数。
特点:
分别是:
长整型,字符串型,字符串型,整型,整型,整型。
structstudent
{
longno;
charname[10];
charsex[5];
intcomp,math,eng;
};
学号要随机生成,是一串数字,所以用长整型。
姓名是由几个字符组成,定义时用字符串。
姓别是字符,用字符串更方便。
计算机分数,数学分数,英语分数是0-100内的数字,定义时用整型。
3.2系统文件使用说明
系统使用时使用的是读文件和写文件。
输入时,写入文件。
输出时,读文件,然后输出。
删除和修改时,调用写函数,因为删除和修改后,要写入文件中,然后输出。
voidread()//读文件
{
FILE*fp;
inti;
if((fp=fopen("
stud.txt"
"
rb"
))==NULL)
{
printf("
Fileopenerror!
\n"
);
return;
}
for(i=0;
i<
M;
i++)
fread(&
stud[i],sizeof(structstudent),1,fp);
fclose(fp);
}
voidwrite(structstudentstud[])//写文件
wb"
for(i=0;
fwrite(&
fclose(fp);
4系统功能实现及代码描述
4.1输入学生信息
先输入学生人数,然后输入下标为0的学生信息。
如果输入时计算机分数,数学分数,英语分数大于100或者小于0,则默认计算机分数,数学分数,英语分数为0.然后下标加1,直到输入完学生信息为止。
图4-1输入模块
4.2输出学生信息
先输出学生人数,然后输出下标为0的学生信息,然后下标加1,直到输出完学生信息为止。
图4-2输出模块
4.3查询学生信息
先选择是按学号查询还是姓名查询,然后查询学号或姓名是否等于下标为0的学生,若找到,则输出该学生的信息,否则下标加1,查询学号或姓名是否等于下标为加1的学生,若找到,则输出该学生的信息;
直到比完所以学生,若找不到,则输出该学生不存在。
图4-3查询模块
4.4学生信息排序
先输入学生人数和计算机分数,然后比较下标为0和下标加1的学生计算机分数比大小,若下标为0大于下标家1的,则交换,依次比较下去,直到比完为止。
然后输出结果。
采用升序排。
for(i=0;
for(j=0;
j<
M-i-1;
j++)
{if(stud[j].comp>
stud[j+1].comp)
{tem=stud[j];
stud[j]=stud[j+1];
stud[j+1]=tem;
图4-4排序模块
4.5学生信息统计
先输入学生人数和计算机分数,然后先令max=stud[0].comp;
min=stud[0].comp;
然后在让max与下标为0的比较,若max小于下标为0,则交换,然后再让较大值与下标加1比较,若max小于下标下标加1,则交换,依次比较下去,直到比完,找到最大值;
min与下标为0比较,若min大于下标为0,则交换,然后再让较小值与下标加1比较,若min大于下标下标加1,则交换,依次比较下去,直到比完,找到最小值。
然后再下标为0计算机分数是否大于60,大于0并且小于59,大于60并且小于79,大于70并且小于79,大于80并且小89,大于90并且小于100,若是,则统计一人,然后再下标为加1计算机分数是否大于60,大于0并且小于59,大于60并且小于79,大于70并且小于79,大于80并且小89,大于90并且小于100,若是,则统计一人加1,依次比较,直到比完,统计出人数,然后用这些人数除以学生总人数。
然后输出max,min,及格率和计算机分数在0-59的人数比率,计算机分数在60-69的人数比率,计算机分数在70-79的人数比率,计算机分数在80-89的人数比率,计算机分数在90-100的人数比率。
图4-5统计模块
4.6删除学生信息
先输入要删除学生的学号,然后让该学会与下标为0的学生学号比较是否相等,若相等,则用后一个学生的信息覆盖找到的那个学生的信息,然后学生人数减一;
若不相等,则再让该学会与下标为加一的学生学号比较是否相等,若相等,则用后一个学生的信息覆盖找到的那个学生的信息,直到比完,若比完后都不相等,则输出该学生不存在。
图4-6删除模块
4.7修改学生信息
先输入要修改的学号,然后让该学会与下标为0的比较是否相等,若相等,则输入要修改的是学生的学号,姓名,性别,还是计算机分数,数学分数,英语分数;
若不相等,则再让该学会与下标为加1的比较是否相等,若相等,则输入要修改的是学生的学号,姓名,性别,还是计算机分数,数学分数,英语分数;
依次比较下去,若比完,还没有相等的,则输出该学生不存在。
图4-7修改模块
5系统测试
1.菜单当程序运行时,出现菜单,按数字选择
图5-1菜单
2.输入学生信息按数字1,输入学生信息,提示输出学生人数,当输入分数大于100或小于0时,默认为0,按任意键继续。
图5-2输入
3.输出学生信息按数字2,输出学生信息,按任意键继续。
图5-3输出
4.查询学生信息按3查询,按1,按学号查询,按2,按姓名查询,按任意键继续。
图5-4查询
5.学生信息排序按数字4,输出计算机升序排的分数,按任意键继续。
图5-5排序
6.学生信息统计按数字5,输出计算机分数的最大值,最小值,平均值计算机分数在70-79的人数比率,计算机分数在80-89的人数比率,计算机分数在90-100的人数比率,按任意键继续。
图5-6统计
7.删除学生信息
删除前按数字6,先输入要删除的学号,在输出成功删除,按任意键继续。
图5-7.删除
删除后的信息,输出删除后的信息,按任意键继续。
8.修改学生信息
修改前,按数字7,先输入要修改的学号,在按数字选择要修改的部分,按任意键继续。
图5-8修改
修改后,输出删除后的信息,按任意键继续。
9.退出按数字0退出。
图5-8退出
6体会
在做查询函数时,我把它全部弄在一个循环里,又复杂又不便与看。
我在参看了同学程序之后,我就用switch语句就好了,这样查询分类查,很方便。
在做统计函数时,升序时在前一个与后一个走比较时,定义一个整型tem与之交换,可是测试时总出错,问了胡老师后,才知道是人与人交换,而不是分数与分数交换。
解决方法是structstudenttem;
交换:
{tem=stud[j];
stud[j]=stud[j+1];
stud[j+1]=tem;
}
在做删除函数时,我只是输入以个要删除的学号,然后找到删除就行。
可同学说删除时是后一个替换前一个,移位。
培养了我选用参考书,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
7.参考文献
[1]顾小晶主编.实用C语言简明教程.中国电力出版社.2006
[]2]廖雷主编.C语言程序设计.北京:
高等教育出版社,2008
[3]陆丽娜.c语言程序设计.西安:
西安交通大学出版社.2012
[4]李兰友
杨晓光.Visual
C#.NET程序设计.北京:
清华大学
北方交通大学出版社,2004
[5]王昊亮,李刚等.Visual
C#程序设计教程.北京:
清华大学出版社,2003
[6]佟伟光.Visual
Basic.NET实用教程.北京:
电子工业出版社,2003
附录
#include<
stdio.h>
string.h>
stdlib.h>
time.h>
intM=3;
//学生人数
structstudentstud[3];
voidread()//读文件
voidintput()//输入
system("
cls"
//清屏
printf("
学生总人数为%d\n"
M);
请输入学生信息\n"
请输入学号\n"
srand((unsigned)time(NULL));
stud[i].no=rand()%1000+2013000;
%ld\n"
stud[i].no);
请输入姓名\n"
scanf("
%s"
stud[i].name);
请输入性别\n"
stud[i].sex);
请输入计算机分数\n"
%d"
&
stud[i].comp);
请输入数学分数\n"
stud[i].math);
请输入英语分数\n"
stud[i].eng);
if(stud[i].comp<
0||stud[i].comp>
100)
stud[i].comp=0;
//若输入的分数大于100或小于0,则默认为0
if(stud[i].math<
0||stud[i].math>
stud[i].math=0;
if(stud[i].eng<
0||stud[i].eng>
stud[i].eng=0;
voidoutput(structstudentstud[])//输出
\n学号姓名性别计算机分数数学分数英语分数\n"
-----------------------------------------------\n"
{
\n%ld\t%s\t%s\t%d\t%d\t%d\t\n"
stud[i].no,stud[i].name,stud[i].sex,stud[i].comp,stud[i].math,stud[i].eng);
voidsearch(structstudentstud[])//查询
inti,choice;
charname[20];
按按学号查询2:
按姓名号查询\n"
请按数字选择\n"
scanf("
choice);
switch(choice)
case1:
{
printf("
请输入要查询的学生的学号\n"
scanf("
%ld"
no);
{
if(stud[i].no==no)
{
printf("
%ld\t%s\t%s\t%d\t%d\t%d\t\n"
//输出要查询的学生的信息
break;
}
}
if(i>
=M)
printf("
该学生不存在\n"
}
break;
case2:
请输入要查询的学生的姓名\n"
name);
if((strcmp(stud[i].name,name))==0)
}
voidcount(structstudentstud[])//排序
inti,j;
structstudenttem;
按升序输出计算机分数\n"
if(stud[j].comp>
tem=stud[j];
stud[j]=stud[j+1];
stud[j+1]=tem;
%d\n"
stud[j].comp);
//按升序输出学生信息
voidcountgrade(structstudentstud[])//统计
inti,sum=0,max,min;
floatn=0,n1=0,n2=0,n3=0,n4=0,n5=0;
max=stud[0].comp;
if(max<
stud[i].comp)
max=stud[i].comp;
min=stud[0].comp;
if(min>
min=stud[i].comp;
sum+=stud[i].comp;
if(stud[i].comp>
=60)
n++;
if(0<
=stud[i].comp&
&
stud[i].comp<
=59)
n1++;
if(60<
=69)
n2++;
if(70<
=79)
n3++;
if(80<
=89)
n4++;
if(90<
=100)
n5++;
输出最大值,最小值,平均值,及格率:
%d,%d,%f\n,%f%%\n"
max,min,1.0*sum/M,1.0*n/M);
计算机分数在0-59的人数比率为%.2f%%\n"
1.0*n1/M);
计算机分数在60-69的人数比率为%.2f%%\n"
1.0*n2/M);
计算机分数在70-79的人数比率为%.2f%%\n"
1.0*n3/M);
计算机分数在80-89的人数比率为%.2f%%\n"
1.0*n4/M);
计算机分数在90-100的人数比率为%.2f%%\n"
1.0*n5/M);
voiddeletestud(structstudentstud[])//删除
inti,j,b=0;
请输入要删除的学号\n"
if(stud[i].no==no)//找到该学生后删除该学生信息
{
for(j=i;
=M;
M--;
已成功删除该学生\n"
b++;
break;
if(b==0)
voidedit(s