13401053聂三丽.docx

上传人:b****5 文档编号:6497954 上传时间:2023-01-07 格式:DOCX 页数:28 大小:502.10KB
下载 相关 举报
13401053聂三丽.docx_第1页
第1页 / 共28页
13401053聂三丽.docx_第2页
第2页 / 共28页
13401053聂三丽.docx_第3页
第3页 / 共28页
13401053聂三丽.docx_第4页
第4页 / 共28页
13401053聂三丽.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

13401053聂三丽.docx

《13401053聂三丽.docx》由会员分享,可在线阅读,更多相关《13401053聂三丽.docx(28页珍藏版)》请在冰豆网上搜索。

13401053聂三丽.docx

13401053聂三丽

 

武汉长江工商学院

计算机科学与技术系

 

项目名称:

学生成绩管理系统

学生姓名:

聂三丽

学号:

13401053

班级:

13计科本2

指导教师:

刘莹

2014年5月2日

 

目录

1.引言3

1.1选题意义3

1.2国内外现状综述3

2.系统需求分析3

2.1系统功能概述3

2.2系统模块3

3系统存储结构说明4

3.1系统存储信息说明4

3.2系统文件使用说明4

4系统功能实现及代码描述5

4.1输入学生信息5

4.2输出学生信息6

4.3查询学生信息7

4.4学生信息排序9

4.5学生信息统计11

4.6删除学生信息13

4.7修改学生信息13

5系统测试14

6体会17

7.参考文献17

附录17

1.引言

本系统依据开发要求主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。

开发本系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。

 

目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。

因此,开发一套适和大众的、兼容性好的系统是很有必要的。

 

本系统在开发过程中,注意使其符合操作的业务流程,并力求系统的全面性、通用性,使得本系统不只适用于一家教育机构。

在开发方法的选择上,选择了生命周期法与原型法相结合的方法,遵循系统调查研究、系统分析、系统设计和系统实施四个主要阶段进行设计,而在具体的设计上,采取了演化式原型法,随着用户的使用及对系统了解的不断加深,对某一部分或几部分进行重新分析、设计、实施。

本论文主要从系统分析、系统设计、系统实施与使用等几个方面进行介绍

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

fread(&stud[i],sizeof(structstudent),1,fp);

fclose(fp);

}

voidwrite(structstudentstud[])//写文件

{

FILE*fp;

inti;

if((fp=fopen("stud.txt","wb"))==NULL)

{

printf("Fileopenerror!

\n");

return;

}

for(i=0;i

fwrite(&stud[i],sizeof(structstudent),1,fp);

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;i

for(j=0;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.删除

删除后的信息,输出删除后的信息,按任意键继续。

图5-7.删除

8.修改学生信息

修改前,按数字7,先输入要修改的学号,在按数字选择要修改的部分,按任意键继续。

图5-8修改

修改后,输出删除后的信息,按任意键继续。

图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

#include

#include

#include

intM=3;//学生人数

structstudent

{

longno;

charname[10];

charsex[5];

intcomp,math,eng;

};

structstudentstud[3];

voidread()//读文件

{

FILE*fp;

inti;

if((fp=fopen("stud.txt","rb"))==NULL)

{

printf("Fileopenerror!

\n");

return;

}

for(i=0;i

fread(&stud[i],sizeof(structstudent),1,fp);

fclose(fp);

}

voidwrite(structstudentstud[])//写文件

{

FILE*fp;

inti;

if((fp=fopen("stud.txt","wb"))==NULL)

{

printf("Fileopenerror!

\n");

return;

}

for(i=0;i

fwrite(&stud[i],sizeof(structstudent),1,fp);

fclose(fp);

}

voidintput()//输入

{

inti;

system("cls");//清屏

printf("学生总人数为%d\n",M);

for(i=0;i

{

printf("请输入学生信息\n");

printf("请输入学号\n");

srand((unsigned)time(NULL));

stud[i].no=rand()%1000+2013000;

printf("%ld\n",stud[i].no);

printf("请输入姓名\n");

scanf("%s",stud[i].name);

printf("请输入性别\n");

scanf("%s",stud[i].sex);

printf("请输入计算机分数\n");

scanf("%d",&stud[i].comp);

printf("请输入数学分数\n");

scanf("%d",&stud[i].math);

printf("请输入英语分数\n");

scanf("%d",&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>100)

stud[i].math=0;//若输入的分数大于100或小于0,则默认为0

if(stud[i].eng<0||stud[i].eng>100)

stud[i].eng=0;//若输入的分数大于100或小于0,则默认为0

}

}

voidoutput(structstudentstud[])//输出

{

inti;

system("cls");//清屏

printf("\n学号姓名性别计算机分数数学分数英语分数\n");

printf("-----------------------------------------------\n");

for(i=0;i

{

printf("\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;

longno;

charname[20];

system("cls");//清屏

printf("1:

按按学号查询2:

按姓名号查询\n");

printf("请按数字选择\n");

scanf("%d",&choice);

switch(choice)

{

case1:

{

printf("请输入要查询的学生的学号\n");

scanf("%ld",&no);

for(i=0;i

{

if(stud[i].no==no)

{

printf("%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);//输出要查询的学生的信息

break;

}

}

if(i>=M)

printf("该学生不存在\n");

}

break;

case2:

{

printf("请输入要查询的学生的姓名\n");

scanf("%s",name);

for(i=0;i

{

if((strcmp(stud[i].name,name))==0)

{

printf("%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);

break;

}

}

if(i>=M)

printf("该学生不存在\n");

}

break;

}

}

voidcount(structstudentstud[])//排序

{

inti,j;

structstudenttem;

system("cls");//清屏

printf("按升序输出计算机分数\n");

for(i=0;i

{

for(j=0;j

{

if(stud[j].comp>stud[j+1].comp)

{

tem=stud[j];

stud[j]=stud[j+1];

stud[j+1]=tem;

}

printf("%d\n",stud[j].comp);//按升序输出学生信息

}

}

}

voidcountgrade(structstudentstud[])//统计

{

inti,sum=0,max,min;

floatn=0,n1=0,n2=0,n3=0,n4=0,n5=0;

system("cls");//清屏

max=stud[0].comp;

for(i=0;i

if(max

max=stud[i].comp;

min=stud[0].comp;

for(i=0;i

if(min>stud[i].comp)

min=stud[i].comp;

for(i=0;i

sum+=stud[i].comp;

for(i=0;i

{

if(stud[i].comp>=60)

n++;

if(0<=stud[i].comp&&stud[i].comp<=59)

n1++;

if(60<=stud[i].comp&&stud[i].comp<=69)

n2++;

if(70<=stud[i].comp&&stud[i].comp<=79)

n3++;

if(80<=stud[i].comp&&stud[i].comp<=89)

n4++;

if(90<=stud[i].comp&&stud[i].comp<=100)

n5++;

}

printf("输出最大值,最小值,平均值,及格率:

\n");

printf("%d,%d,%f\n,%f%%\n",max,min,1.0*sum/M,1.0*n/M);

printf("计算机分数在0-59的人数比率为%.2f%%\n",1.0*n1/M);

printf("计算机分数在60-69的人数比率为%.2f%%\n",1.0*n2/M);

printf("计算机分数在70-79的人数比率为%.2f%%\n",1.0*n3/M);

printf("计算机分数在80-89的人数比率为%.2f%%\n",1.0*n4/M);

printf("计算机分数在90-100的人数比率为%.2f%%\n",1.0*n5/M);

}

voiddeletestud(structstudentstud[])//删除

{

inti,j,b=0;

longno;

system("cls");//清屏

printf("请输入要删除的学号\n");

scanf("%ld",&no);

for(i=0;i

{

if(stud[i].no==no)//找到该学生后删除该学生信息

{

for(j=i;j<=M;j++)

stud[j]=stud[j+1];

M--;

printf("已成功删除该学生\n");

b++;

break;

}

}

if(b==0)

printf("该学生不存在\n");

}

voidedit(s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1