学生课程成绩统计程序设计
学生成绩管理系统程序分析

学生成绩管理分析系统设计报告本次作业的任务是设计一个学生成绩管理分析系统,通过此次设计任务达到基本掌握面向过程程序设计的基本思路和方法,熟练使用C语言的知识和技能来解决简单的程序设计问题。
一、需求分析1.功能需求为了实现学生成绩的管理与分析,需要输入学生的基本信息和学习信息,要保证信息的准确性,需要提供包含添加、删除等修改功能,在此基础上,提供统计与分析手段。
因此,通过对需求的分析,本程序设计的功能需求如下:a)信息输入b)信息显示c)信息修改d)信息分析2. 系统需求根据任务要求,实现学生成绩的管理与分析需要使用标准C语言进行编程;由于本程序满足任务要求的功能需求计算简单,信息的显示均为文本类型,且无通讯方面的需求,因此占用计算机的资源较少。
本程序的数据量大小取决于管理学生数量的多少,根据中国各高校情况分析,在校学生少则数百人,多则数万人,而每一名学生记录仅需要数十字节,因此数据的存取量需求最大不会超过10GB。
综上所述,本程序对系统的需求,目前一台普通计算机即可满足使用。
本程序设计拟采用VC 编制,在Windows 2000操作系统下开发实现。
二、总体设计本程序设计采用模块化设计,每一个模块实现一项功能。
按照不同的功能对学生成绩管理分析系统进行模块划分,其总体设计如下:数据录入模块。
每个学生的基本信息和成绩用一个结构体来表示,称为一条记录,可以增加或者删除记录。
为简化问题,能对学生的总成绩进行排序,这里约定相同系别的学生所选科目的数量一致,不同系别的学生所选科目可以不同。
数据查询模块。
对已经录入的学生基本信息和成绩进行查询,可以查询单个学生的基本信息和成绩,比如通过学号、姓名等关键字查询,也可以查询某类数据,比如通过系别关键字查询该系所有学生的资料、通过科目名称查询参加该科考试的所有学生的成绩。
数据修改模块。
对学生基本信息或成绩进行修改,并保存记录。
数据分析模块。
包括对每系或每班的单科成绩的分析,如求平均成绩、及格率、优秀率等;对选修某科的所有学生成绩进行分析,包括求平均分、最高分、最低分等;对同一学期每个班的学生总成绩进行排序。
c语言学生成绩统计程序的设计与实现

c语言学生成绩统计程序的设计与实现学生成绩统计是学校教务管理系统中一个非常重要的功能模块,它可以帮助学校及时了解学生的学习情况,进行科学、全面的评估和分析。
在本文中,将设计和实现一个简单的C语言学生成绩统计程序,包括输入学生信息、录入学生成绩、统计学生总分和平均分等功能。
设计思路:1.学生信息设计:首先,需要设计学生信息的结构体,包括学生的学号、姓名和性别等基本信息,还可以根据需要添加其他信息,如年龄、班级等。
```ctypedef struct{char studentID[20]; //学号char name[30]; //姓名char gender[10]; //性别} Student;```2.学生成绩设计:接下来,需要设计学生成绩的结构体,包括学生的学号和各科目的分数等信息。
```ctypedef struct{char studentID[20]; //学号float chineseScore; //语文成绩float mathScore; //数学成绩float englishScore; //英语成绩} Score;```3.输入学生信息和录入学生成绩:为了方便起见,这里假设只输入3个学生的信息和成绩。
可以使用循环结构,循环3次,每次输入一个学生的信息和成绩。
```cint main(){int i;Student students[3];for (i = 0; i < 3; i++){printf("请输入第%d个学生的学号:", i + 1);scanf("%s", students[i].studentID);printf("请输入第%d个学生的姓名:", i + 1);scanf("%s", students[i].name);printf("请输入第%d个学生的性别:", i + 1); scanf("%s", students[i].gender);}Score scores[3];for (i = 0; i < 3; i++){printf("请输入第%d个学生的学号:", i + 1); scanf("%s", scores[i].studentID);printf("请输入第%d个学生的语文成绩:", i + 1); scanf("%f", &scores[i].chineseScore);printf("请输入第%d个学生的数学成绩:", i + 1); scanf("%f", &scores[i].mathScore);printf("请输入第%d个学生的英语成绩:", i + 1);scanf("%f", &scores[i].englishScore);}return 0;}```4.统计学生总分和平均分:最后,根据录入的成绩计算每个学生的总分和平均分,并输出结果。
结构体应用-统计学生成绩

结构体应⽤-统计学⽣成绩设计⼀个程序,统计⼀个班(最多有35⼈)的学⽣成绩,要求能实现如四个功能:(1)由键盘输⼊每个学⽣的学号和四门课程的成绩。
(2)计算每个学⽣的平均分和总分。
(3)按总分从⾼到低排出名次,并按名次输出每个学⽣的情况,包括:学号、各科成绩、平均分和总分。
(4)根据⽤户要求输出某门课程(由键盘输⼊课程号)成绩在90分以上(含90分)且总分在前五名的学⽣情况,包括:学号、各科成绩、平均分和总分。
具体要求如下:(1)每个功能为⼀个独⽴的函数。
(2)所有的输⼊之前都要有提⽰。
⽅法说明:⾸先,在主函数中定义以下⼏个数组:num[35] 整型⼀维数组,依次(按输⼊的顺序)存放学⽣的学号。
a[35][6] 实型⼆维数组,其中的每⼀⾏依次(按输⼊的顺序)存放⼀个学⽣的四门课程(课程号分别为1,2,3,4)的成绩、平均分与总分。
order[35] 整型⼀维数组,按名次存放学⽣情况的输⼊序号,即order[k]存放第k+1名(C语⾔中数组下标是从0开始)学⽣情况的输⼊序号。
然后依次调⽤四个功能函数。
#include<stdio.h>#include<conio.h>#define M 35 /*调试时可将此数值该得⼩⼀些*/#define N 6int number=0;void input(int num[M],float a[M][N]){int k=0,n;float a0,a1,a2,a3;printf("请输⼊学⽣信息:\n");printf("学号\t课程[1]\t课程[2]\t课程[3]\t课程[4]\n");scanf("%d%f%f%f%f",&n,&a0,&a1,&a2,&a3);while(n>=0 && k<35){number++;num[k]=n;a[k][0]=a0;a[k][1]=a1;a[k][2]=a2;a[k][3]=a3;k++;scanf("%d%f%f%f%f",&n,&a0,&a1,&a2,&a3);}}void count(float a[M][N]){int k;for(k=0;k<N;k++){a[k][5]=a[k][0]+a[k][1]+a[k][2]+a[k][3];a[k][4]=a[k][5]/4;}}void sort(float a[M][N],int order[M]){int i,j,k,n,temp;float d;for(i=0;i<M;i++)order[i]=i;for(i=0;i<M;i++){n=order[i];d=a[n][5];k=i;for(j=i+1;j<M;j++){n=order[j];if(a[n][5]>d){d=a[n][5];k=j;}}if(k!=i){temp=order[i];order[i]=order[k];order[k]=temp;}}printf("学⽣信息排序后结果为:\n");printf("名次\t学号\t课程[1]\t课程[2]\t课程[3]\t课程[4]\t平均分\t总分\n");for(i=0;i<number;i++){k=order[i];printf("第%d名\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",i+1,k+1,a[k][0],a[k][1],a[k][2],a[k][3],a[k][4],a[k][5]); }}void serch(int num[M],float a[M][N],int order[M]){int m=0,i,j,k,flag=0;while(m<1 || m>4){printf("请输⼊课程号(1或2或3或4):");scanf("%d",&m);}printf("学号\t课程[1]\t课程[2]\t课程[3]\t课程[4]\t平均分\t总分\n");for(i=0;i<5;i++){k=order[i];if(a[k][m-1]>=90){printf("%d\t",num[k]);flag=1;for(j=0;j<N;j++)printf("%.2f\t",a[k][j]);printf("\n");}}if(flag==0)printf("⽆学⽣信息!\n");}void main(){int num[M]={0};float a[M][N]={0};int order[M];char flag;input(num,a);count(a);sort(a,order);printf("是否需要查询?(y/n):");getchar();scanf("%c",&flag);while(flag=='Y'||flag=='y'){serch(num,a,order);printf("是否需要查询?(y/n):");getchar();scanf("%c",&flag);}getch();}。
关于学生成绩的程序

关于学生成绩的程序摘要:一、引言1.学生成绩的重要性2.程序在学生成绩管理中的应用二、学生成绩程序的功能1.成绩录入与查询2.成绩统计与分析3.成绩排名与评估4.成绩预警与干预三、学生成绩程序的设计与实现1.技术选型与架构2.数据库设计与数据表结构3.核心功能模块详解3.1 成绩录入与查询模块3.2 成绩统计与分析模块3.3 成绩排名与评估模块3.4 成绩预警与干预模块四、学生成绩程序的应用案例1.学校教务管理系统中的应用2.教师教学辅助中的应用3.学生自主学习与评估中的应用五、学生成绩程序的优化与拓展1.数据安全与隐私保护2.用户体验与界面设计3.新功能的开发与迭代六、结语1.学生成绩程序的价值与意义2.未来发展趋势与展望正文:一、引言学生成绩是衡量学生学习成果的重要指标,对于学生个人、家长、教师以及学校管理者而言,成绩都具有重要的参考价值。
随着信息技术的不断发展,学生成绩的程序化管理已经成为教育教学管理的必然趋势。
本文将从学生成绩程序的应用背景、功能、设计与实现、应用案例、优化与拓展等方面展开论述,以期为广大教育工作者和学生提供有益的参考。
二、学生成绩程序的功能学生成绩程序主要包含以下功能:1.成绩录入与查询:教师可以方便地录入学生成绩,学生和家长可以随时查询成绩,了解学习状况。
2.成绩统计与分析:程序可以自动对学生成绩进行统计和分析,为教师、学生和家长提供有关学习情况的数据支持。
3.成绩排名与评估:程序支持成绩排名功能,有助于激发学生的竞争意识,同时,根据成绩评估学生的学习水平,为个性化教学提供依据。
4.成绩预警与干预:程序可以对学生的成绩进行预警,发现学生的学习问题,并采取相应的干预措施,提高学生的学习效果。
三、学生成绩程序的设计与实现1.技术选型与架构:学生成绩程序可以采用Web端、移动端或桌面端等多种技术实现,满足不同场景的需求。
程序采用分层架构,包括前端展示层、业务逻辑层和数据访问层。
C语言程序设计学生成绩管理系统实验报告

移通学院C语言程序设计报告书设计名称:学生成绩管理系统专业:指导老师:班级:姓名:学号:座号:时间一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础;二、实验内容运用所学的C语言知识编辑一个应用程序:学习成绩管理系统三.系统软件环境:本程序主要运行在: Visual C++ 6.0Turbo C/C++ 3.0四.课程设计题目:学生成绩管理系统程序说明:有N个学生,每个学生的数据包含学号不重复、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:1主菜单2各菜单项功能①成绩录入:输入学生的学号、姓名及三门课的成绩;②成绩查询:按学号查询学生记录;③成绩统计:计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序后输出;④退出系统:退出整个系统即主菜单;五.数据结构设计描述:↓int num; /定义学号,变量为整型/char name; /定义姓名,变量为字符型/int score; /定义课程的成绩,变量为整型/float average; /定义平均分,变量为浮点型/七.系统各函数的功能,、相互调用关系1.函数实现功能说明:1menu函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择;2input函数是定义用于输入学生信息;3select 函数是定义用于查询学生信息;包括学号、姓名及各科成绩;4statistics 函数计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序输出;2.相互调用关系:Main函数调用menu函数;Menu 函数可以调用input 函数、select函数和statistics 函数八.心得体会C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距;我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序; 九.程序:include <stdio.h>include <stdlib.h>include <conio.h>define N 3 /学生人数/define M 3 /课程门数/struct student{int num; /学号/char name20; /姓名/int score3; /三门课成绩/float average;}stuN; /学生数/void input; /查询/void select; /统计/void menu;void input{int i,j;printf"\t\t①成绩录入\n\n";fori=0;i<N;i++{printf"请输入学号:";scanf"%d",&stui.num;printf"请输入姓名:";scanf"%s",&;forj=0;j<M;j++{printf"第%d门成绩的分数:",j+1;scanf"%d",&stui.scorej;}printf"\n\n";}printf"\n\n";printf"输入完毕按任意键返回主菜单";}/2.查询/void selectint no{int i;printf"学生%d号: \n",no; printf"学号: %d\n",stuno-1.num; printf"姓名: %s\n",;for i=0;i<M;i++{printf"第%d门课程的成绩为: ",i+1; printf"%d\n",stuno-1.scorei;}printf"\n按任意键返回主菜单";getch;}/3.统计/void statistics{float temp=0;int i=0;/学生成绩平均分/temp=0;printf"\t\t③成绩统计\n\n";forj=0;j<N;j++{fori=0;i<M;i++{temp=temp+stuj.scorei;}stuj.average=temp/N;printf"\n学生%s的成绩平均成绩为:",;printf"%0.2f分",stuj.average;temp=0;}/排序/for j=0;j<N;j++fori=0;i<N-j-1;i++ifstui.average<stui+1.average{ temp=stui.average;stui.average=stui+1.average;stui+1.average=temp;}printf"\n\n学生平均成绩前三名:";fori=0;i<3;i++{printf"\n第%d名:%0.2f分",i+1,stui.average;}printf"\n\n按任意键返回主菜单";getch;}void menu{ int num=0;int n=0;printf"\n\t\t\t学生成绩管理系统\n\n";printf"\n\t\t\t①成绩录入\n\t\t\t②成绩查询\n\t\t\t③成绩统计\n\t\t\t④退出系统\n";printf"\t\t\tchoose:";scanf"%d",#switchnum{case 1:system"cls";input;break;case 2:system"cls";printf"\t\t②成绩查询\n\n"; printf"请输入要查询的学生号1~3:";scanf"%d",&n;selectn;break;case 3:system"cls";statistics;break;case 4:exit0;default:;}}void main{while1{system"cls"; /清屏/menu;}}。
C语言课程设计 200行代码 -学生成绩查询系统.doc

功能:查询修改统计成绩。
#include <stdio.h>struct student /*成绩表的结构声明*/{int num;char name[15];char sex;float WuLi;float ShuXue;float YingYu;float KuaiJi;float totle;};/*定义6个学生的信息:*/#define STU_NUMBER 6 /*宏定义学生数为6*/struct student Stu[STU_NUMBER]={{101,"yuchen", 'F', 98,85,96,89,0},{102,"xiaotong", 'F', 99,91,90,93,0},{103,"likanglong",'M', 76,83,74,82,0},{104,"yinger", 'F', 88,76,89,77,0},{105,"fengjiao", 'F', 97,100,94,96,0},{106,"sunyao", 'M', 87,89,66,84,0} };int SelectMainMenu(); /*显示并选择主菜单。
返回:被选择的菜单项*//*所有的函数声明:*/void Show(); /*成绩查询模块*/void Modify(); /*成绩修改模块*/void Stat(); /*成绩统计模块*/void StatAve(float *AveWuLi,float *AveShuXue,float *AveYingYu,float *AveKuaiJi);/*统计平均分*/int FindStudent(int num); /*根据学号查找某一学生*/void SetAllTotle(); /*计算所有学生总分*/void SetTotle(int No); /*计算第No个学生总分*/void ShowAllStudent(); /*显示所有成绩*/void ShowTitle(); /*显示表头信息*/void ShowStudent(int No); /*显示第No个的学生信息*/void main(){int isend=0,password=0; /*程序结束标志量,0表示不结束,1表示结束*/SetAllTotle(); /*计算所有学生总分*/while(password!=666){printf("qing shu ru mi ma:\n");scanf("%d",&password);}{switch(SelectMainMenu()) /*显示并选择主菜单*/{case 1: /*成绩查询*/Show(); /*调用成绩查询函数*/break;case 2: /*成绩修改*/Modify(); /*调用成绩修改函数*/break;case 3: /*成绩统计*/Stat(); /*调用成绩统计函数*/break;case 4: /*退出系统*/printf("\nxie xie nin de shi yong,zai jian!\n\n");isend = 1; /*设置程序结束标志*/break;}if(isend) break; /*程序结束*/}}int SelectMainMenu() /*显示并选择主菜单。
高校学生成绩管理系统的设计与实现

高校学生成绩管理系统的设计与实现随着高校规模的扩大和学生数量的增加,高校学生成绩管理已经成为一项繁琐但必不可少的工作。
为了解决学校学生成绩管理的问题,设计和实现一个高校学生成绩管理系统就显得尤为重要。
本文将探讨该系统的设计思路、功能需求以及实现方案。
一、设计思路1. 需求分析首先,我们需要进行需求分析,明确高校学生成绩管理系统的功能需求。
这包括学生成绩录入、成绩查询、成绩统计与分析、成绩报表生成等基本功能。
另外,还应该考虑系统的安全性,确保学生成绩的信息不会被盗取或篡改。
2. 数据库设计设计一个适合高校学生成绩管理的数据库非常关键。
我们需要建立一个包含学生信息、课程信息和成绩信息的数据库。
学生信息包括学号、姓名、性别等;课程信息包括课程编号、课程名称、教师等;成绩信息包括学生学号、课程编号、成绩等。
3. 界面设计界面设计应简洁、直观,方便用户操作。
我们可以采用图形界面设计,使用户可以通过鼠标点击进行操作。
界面应包括学生成绩录入界面、成绩查询界面、统计与分析界面、报表生成界面等。
4. 功能模块设计我们可以将高校学生成绩管理系统分为以下几个功能模块:- 学生成绩录入模块:教师可以通过该模块录入学生的成绩,并将成绩信息存入数据库。
- 成绩查询模块:学生和教师可以通过该模块查询学生的成绩。
- 成绩统计与分析模块:该模块可以对成绩进行统计和分析,例如计算课程的平均成绩、最高成绩、最低成绩等,并生成相应的报表。
- 成绩报表生成模块:该模块可以根据用户的需求生成成绩报表,包括班级成绩排名、个人成绩单等。
二、功能需求基于以上的设计思路,我们可以进一步详细描述高校学生成绩管理系统的功能需求:1. 学生成绩录入:教师通过界面输入学生的学号、姓名和课程成绩,系统将信息存入数据库,并自动生成学生的学号。
2. 成绩查询:学生和教师可以通过输入学号或姓名查询学生的成绩,系统将显示出相应的成绩信息。
3. 成绩统计与分析:系统可以根据输入的课程编号进行统计和分析,生成课程的平均成绩、最高成绩、最低成绩等,并可以按照成绩进行排序。
学生课程成绩统计程序设计

《微机原理与接口技术》课程设计(学年论文)说明书课题名称:学生课程成绩统计程序设计(A1 难度系数1)学生学号:专业班级:学生姓名:学生成绩:指导教师:课题工作时间:2013-6-13 至2013-6-18填写说明:1. 一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;2. 第五项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3. 成绩评定由指导教师按评定标准评分。
4. 此表格填写好后与正文一同装订成册。
课程设计评审标准(指导教师用)学生课程成绩统计程序设计说明书1、方案论证(1)汇编程序设计步骤、要点(2)DOS系统调用2、程序设计(1)总体设计设计分析与思路说明总体框图(框图中每一个模块的功能说明)(2)程序设计流程图程序代码及注释3、程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(5)程序运行结果截屏图片结果说明4、结论用结果说明设计成功之处,对某些问题进行分析、展望。
1.方案论证(1)汇编程序设计步骤、要点1 引言汇编语言能充分利用计算机所有的硬件特性并对硬件进行直接控制,汇编语言编制的程序比使用其它语言编制的程序执行速度快、资源占用少,所以,汇编语言在工业自动化控制和智能化产品的生产上有着十分广泛的用途。
但是,汇编语言是一种低级符号语言,与机器指令有着一一对应的关系,与高级语言相比不太符合人的思维习惯,它向寄存器、内存单元,必须通过一种具体的计算机来学习,同时要求初学者应具有一定的硬件基础,真正掌握起来有一定的难度。
2 汇编语言程序设计技巧808618088汇编语言程序设计中一般说来遵循以下几个步骤:首先分析题意,确定解题算法。
然后根据算法由粗到精画程序流程图,最后编写程序。
3 寻址方式的准确使用程序设计的目的是将输入数据加工处理转换成输出数据,获取正确的数据是保证程序处理正确的前提,而获取正确的数据又与正确地使用寻址方式关系密切,所以有必要先从寻址方式谈起。
学生成绩管理系统(JAVA课程设计)

Java课程设计课题:学生成绩管理系统一、问题及功能分析1、身份验证,和使用系统的权限设置、判定。
2、实现同学的学号、性别、成绩等信息的录入、编辑3、提供对学号或姓名,进行成绩或所有信息的查询.4、计算学生平均成绩,显示最高成绩学生信息5、能实现按成绩、学号、姓名排序列出学生信息.6、能统计学生成绩分数段的分布(60以下、60~70、70~80、80~90、90~100)情况,并输出。
7、用文件保存数据,以便反复使用.二、概要设计import java。
lang.*;import java.io。
*;class Mytest{public static void main(String[]args)throws IOException{{int select;select = 1;Student stu[]= new Student[10];StudentMis mis=new StudentMis();Scanner sc = new Scanner(System.in);System。
out.println();System.out。
println(”—---—-—-————————-——-——-——-—---—--———-——");System.out。
println(”* *");System。
out.println(”欢迎进入学生成绩管理系统");System。
out。
println(”**”);System。
out.println(”-————--——-—-—---——-——--———-—-—----——--—");while(true){System。
out.println( );System。
out.println(" 请选择您的操作:");System.out.println(” 1.录入学生成绩信息;”);System.out.println(" 2.显示学生成绩信息;”);System。
统计成绩实验报告程序设计

统计成绩实验报告程序设计一、实验目的本实验旨在设计一个程序,能够对学生的考试成绩进行统计和分析,包括计算平均分、最高分、最低分以及各个分数段的学生人数等。
二、实验环境本实验的编程语言为Python,并利用PyCharm作为开发工具。
三、实验原理本实验的核心思想是通过编写一个统计成绩的程序,输入学生的考试成绩列表,然后根据需求进行相应的统计和分析。
程序的设计思路如下:1. 首先,需要定义一个函数来输入学生的考试成绩,输入结束后返回成绩列表。
2. 然后,设计一个函数来计算成绩的平均分,即将所有成绩相加后除以人数。
3. 接下来,编写函数来找出成绩列表中的最高分和最低分。
4. 最后,编写一个函数来统计成绩在不同分数段的人数。
四、实验步骤步骤1:定义输入成绩函数pythondef input_scores():scores = []while True:score = float(input("请输入成绩(输入-1表示结束输入):")) if score == -1:breakscores.append(score)return scores步骤2:设计计算平均分函数pythondef calc_average(scores):total = sum(scores)average = total / len(scores)return average步骤3:设计找出最高分和最低分函数pythondef find_extreme(scores):maximum = max(scores)minimum = min(scores)return maximum, minimum步骤4:设计统计不同分数段人数的函数pythondef count_scores(scores):count = [0, 0, 0, 0, 0]for score in scores:if score >= 90:count[0] += 1elif score >= 80:count[1] += 1elif score >= 70:count[2] += 1elif score >= 60:count[3] += 1else:count[4] += 1return count步骤5:主程序pythonscores = input_scores()average = calc_average(scores)maximum, minimum = find_extreme(scores)count = count_scores(scores)print("成绩统计结果如下:")print("平均分:{}".format(average))print("最高分:{}".format(maximum))print("最低分:{}".format(minimum))print("90分以上人数:{}".format(count[0]))print("80-89分人数:{}".format(count[1]))print("70-79分人数:{}".format(count[2]))print("60-69分人数:{}".format(count[3]))print("60分以下人数:{}".format(count[4]))五、实验结果假设我们输入的成绩列表为[75, 95, 80, 60, 90, 85, 70, 55, 65]:成绩统计结果如下:平均分:75.0最高分:95.0最低分:55.090分以上人数:180-89分人数:170-79分人数:260-69分人数:360分以下人数:2六、实验总结通过本实验的编程设计,我们可以实现对学生考试成绩的统计和分析。
c语言学生成绩管理系统

黑河学院实验报告实验名称:C语言程序设计姓名:张硕院(系):通识教育学院专业班级:计算机类四班学号:2015862155 时间:2016年4月15 日一设计项目:学生成绩管理系统二总体设计:1 程序设计组成框图:2:模块功能说明:1 输入功能:输入学生姓名学号及成绩。
2 查看功能:输出姓66名学号及各科成绩。
43 查询功能:通过学号查询学生姓名及各科成绩。
4 统计功能:统计班级学生及格率,优秀率,各个学生成绩方差等。
5 修改功能:通过输入学号修改指定学生的错误信息。
6添加功能:添加学生信息。
7删除功能:通过输入学号输入指定学生信息。
8保存功能:将学生信息保存。
9 退出系统。
3:主要函数之间的调用关系及各自功能:主要函数的函数原型void inputscore(void);void savescore(void);void avergescore(void);void modifyscore(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void menu(void);i.在菜单界面输入1,调用函数inputscore( )实现输入学生成绩信息功能。
ii.在菜单界面2,调用函数lookscore( )实现学生成绩按平均分高低排序输。
出,同时lookscore()函数调用avergescore()函数实现各个学生平均分的计算。
iii.在菜单界面输入3,调用searchscore()函数实现通过学号查找学生成绩信息功能。
iv.在菜单界面输入4,调用statistic()函数输出班级及格率,优秀率,学生成绩方差,不及格学生名单。
v.在菜单界面输入5,调用modify()函数实现通过学号修改学生成绩的功能vi.在菜单界面输入6,调用add()函数实现添加学生成绩。
任务5-1、统计某门课程的平均成绩

while 循环 3-1
do...while语句用来实现‚直到型‛循环结构
while 循环的一般语法:
do { 循环体语句 }while(表达式);
执行流程
它先执行循环体中的语句,然后再判断条件是否为真, 如果为真则继续循环;如果为假,则终止循环
do-while 循环
do...while循环与while循环的不同之处在于:先执行循环中的 语句,然后再判断表达式是否为真,如果为真则继续循环;如 果为假,则终止循环。 do-while循环至少要执行一次循环语句。 与应用while一样,应该注意,在循环体中应该包含改变循环 条件表达式值的语句,否则会出现无限循环(死循环)。
案例2-1
【案例5-1】模拟超市的收款。
分析:
超市购买商品结账时要统计所购买商品的总金额,当依次输入完所 有的商品品的单价、数量后,立即显示所购买商品的的数量和总金额。 这就是逐个数据的累加处理的过程,利用循环来完成。
案例2-2
void main() { float price,sum=0; int counter=0,number=1; printf("输入单价和数量(单价为0结束)\n"); printf("No %d\n",counter+1); printf("单价:"); scanf("%f",&price); while (price!=0) { printf("数量:"); scanf("%d",&number); sum+=price*number; counter++; printf("No %d\n",counter+1); printf("单价:"); scanf("%f",&price); } printf("总共%d件商品\t", counter++); printf("总金额:%6.2f\n",sum); }
java学生成绩统计程序设计

java学生成绩统计程序设计Java学生成绩统计程序设计Java是一种广泛应用于软件开发领域的编程语言。
在教育领域,Java也被广泛应用于计算机编程教学。
而学生成绩统计是教师们经常需要处理的任务之一。
为了提高教师们的工作效率,我们可以设计一个Java程序来自动完成学生成绩的统计。
本文将一步一步回答有关Java学生成绩统计程序设计的问题。
首先,我们需要明确程序的功能和需求。
一个基本的学生成绩统计程序需要能够记录学生的个人信息,并保存学生的成绩信息,同时还需要能够计算学生的平均分、最高分和最低分等统计指标。
因此,我们的程序需要包含学生类和成绩类,并且还需要有相应的方法来实现各种功能。
接下来,我们可以开始设计程序的结构。
在Java中,我们可以创建两个类:Student(学生类)和Grade(成绩类)。
Student类用于表示学生的个人信息,而Grade类用于表示学生的成绩信息。
首先,我们来设计Student类。
Student类需要包含学生的姓名、学号和班级等属性。
为了便于获取和设置学生的信息,我们可以使用私有变量,并提供公共的getter和setter方法。
javapublic class Student {private String name;private int studentId;private String className;public String getName() {return name;}public void setName(String name) { = name;}public int getStudentId() {return studentId;}public void setStudentId(int studentId) { this.studentId = studentId;}return className;}public void setClassName(String className) {this.className = className;}}接下来,我们来设计Grade类。
统计输入10个学生5门功课的成绩,求每个学生的平均分、每门课的平均分及最高分所对应的学生和功课

《C语言程序设计》课程设计说明书班级:08计算机应用技术<1>班学号:A083GZ*********姓名:陈****:***2009.12前言从C语言产生到现在,它已经成为最重要和最流行的编程语言之一。
C语言具有高级语言的强大功能,却又有很多直接操作计算机硬件的功能(这些都是汇编语言的功能),因此,C语言通常又被称为中级语言。
学习和掌握C语言,既可以增进对于计算机底层工作机制的了解,又为进一步学习其他高级语言打下了坚实的基础。
在各种流行编程语言中,都能看到C语言的影子,如Java的语法与C语言基本相同。
学习、掌握C语言是每一个计算机技术人员的基本功之。
在这次的课程设计中,我学到了很多东西,比如课堂上老师所教授的仅是基础的基础,是编程的前提,正所谓“师父领进门,修行靠个人”。
老师把我们带进C的世界,让我们不再“哇!”的羡慕别人的程序设计,这是信心与兴趣的培养。
学习任何程序设计语言,都要认识几件事情。
首先,要学的东西很多,但是掌握了它们之后,你会有极大的成就感。
其次,学习的过程很有趣,你将体会到这一点。
第三,你只有通过动手实践才能学会程序设计。
最后,学习程序设计语言比你想象的容易得多,所以你肯定能掌握它。
要理解在特定背景中的程序设计方法,需要理解应用独立语言元素的机理。
该程序应用了本书学习的知识。
书上的程序可帮助你获得开发程序的能力和信心,了解如何综合运用各种语言元素。
最重要的是,它们能让你了解设计真实程序时会遇到的问题以及如何管理实际的代码。
如果第一次读复杂的程序没有完全理解,不必担心。
第一次难免会觉得难以理解,因为它们通常都是把你所学的知识应用到了相当复杂的问题中。
如果你真的不能理解,书是非常有用的资源,那可得要多看书多请教老师咯,然后再回头研究这些程序。
这也是学习程序设计语言的一个重要部分。
尝试修改程序,看看还能让它们做什么,这是很有趣的。
不要害怕尝试,如果不明白某一点如何使用,输入几种变体,看看会出现哪些情况。
c++学生成绩管理系统课程设计

C++学生成绩管理系统课程设计本课程设计旨在介绍如何使用 C++语言设计和实现一个学生成绩管理系统,包括学生信息管理、成绩管理、课程管理等功能。
下面是本店铺为大家精心编写的4篇《C++学生成绩管理系统课程设计》,供大家借鉴与参考,希望对大家有所帮助。
《C++学生成绩管理系统课程设计》篇1引言学生成绩管理系统是教育信息化建设的重要组成部分,它的自动化和信息化程度对于提高学校管理效率和教学质量具有重要意义。
本课程设计使用 C++语言设计和实现一个学生成绩管理系统,包括学生信息管理、成绩管理、课程管理等功能。
该系统可以方便地管理学生信息和成绩,为学校和教师提供高效的管理工具。
一、系统功能本系统主要包括以下功能:1. 学生信息管理:包括添加、删除、修改和查询学生信息 (如学号、姓名、性别、年龄、班级等)。
2. 成绩管理:包括添加、删除、修改和查询学生成绩 (如课程名称、成绩等)。
3. 课程管理:包括添加、删除、修改和查询课程信息 (如课程名称、学分等)。
二、系统设计1. 数据库设计本系统使用 MySQL 数据库存储学生和课程信息。
数据库包括以下表:- 学生表 (student):包括学号、姓名、性别、年龄、班级等字段。
- 成绩表 (score):包括学号、课程名称、成绩等字段。
- 课程表 (course):包括课程名称、学分等字段。
2. 界面设计本系统使用 Visual Studio 2017 开发,采用 Windows Forms 界面设计。
界面包括以下组件:- 菜单栏:包括“文件”、“学生信息管理”、“成绩管理”、“课程管理”、“帮助”等菜单项。
- 工具栏:包括“添加”、“删除”、“修改”、“查询”等按钮。
- 数据表格:用于显示学生和课程信息。
3. 功能实现本系统使用 C++语言实现,主要包括以下代码文件:- main.cpp:程序入口文件,负责启动程序和显示界面。
- student.cpp:学生信息管理模块,负责实现学生信息的添加、删除、修改和查询功能。
简单学生成绩管理系统程序设计报告

简单学生成绩管理系统程序设计报告一、引言学生成绩管理系统是一个比较常见的实用型软件,其主要功能是对学生的成绩进行管理和统计。
通过该系统,可以方便地查看学生的各科成绩,及时发现问题并进行调整。
本文将介绍一个简单的学生成绩管理系统程序设计报告。
二、需求分析1. 功能需求(1)管理员登录:管理员需要通过用户名和密码登录到系统中。
(2)添加学生信息:管理员可以添加新的学生信息,包括姓名、性别、年龄等。
(3)添加成绩信息:管理员可以为每个学生添加各科成绩信息。
(4)查询学生信息:管理员可以根据姓名或学号查询某个学生的详细信息,包括基本信息和各科成绩。
(5)修改学生信息:管理员可以修改某个学生的基本信息和各科成绩。
(6)删除学生信息:管理员可以删除某个学生的所有信息。
2. 非功能需求(1)安全性要求:系统需要保证数据安全,防止未经授权人员访问或篡改数据。
(2)易用性要求:系统需要具有良好的用户界面设计,方便用户进行操作。
三、设计方案1. 数据库设计本系统需要使用数据库来存储所有的数据,包括学生基本信息和各科成绩信息。
数据库设计如下:学生表(student):字段名类型说明id int 学号,主键name varchar(20) 姓名sex varchar(2) 性别age int 年龄成绩表(score):字段名类型说明id int 学号,外键,关联学生表的id字段subject varchar(20) 科目名称score f loat 成绩2. 界面设计本系统需要具有良好的用户界面设计,方便用户进行操作。
界面设计如下:(1)登录界面:管理员需要输入用户名和密码才能登录到系统中。
(2)主界面:管理员登录成功后进入的主界面,包括添加学生信息、添加成绩信息、查询学生信息、修改学生信息和删除学生信息等功能。
(3)添加学生信息界面:管理员可以在此界面添加新的学生信息。
(4)添加成绩信息界面:管理员可以在此界面为每个学生添加各科成绩信息。
c语言课程设计学生成绩管理系统流程图

C语言课程设计学生成绩管理系统流程图本文介绍了一个基于C语言的学生成绩管理系统的流程图设计。
该系统可以帮助学校管理学生的成绩信息,包括录入学生成绩、查询学生信息、统计学生成绩等功能。
1. 系统流程图概览graph LRA[开始] --> B(登录系统)B --> C{登录是否成功}C -- 是 --> D(显示菜单)C -- 否 --> BD --> E[输入操作选项]E --> F{选择操作}F -- 1 --> G(录入学生成绩)F -- 2 --> H(查询学生信息)F -- 3 --> I(统计学生成绩)F -- 4 --> J(显示菜单)F -- 5 --> K(退出系统)G --> L[输入学生信息]L --> M[保存学生成绩]M --> N[继续操作]N --> GH --> O[输入学生学号]O --> P[查询学生信息]P --> NI --> Q[统计学生成绩]Q --> R[显示统计结果]R --> NJ --> DK --> S[结束]2. 系统流程图详解2.1. 开始系统开始运行,进入登录界面。
2.2. 登录系统用户输入登录信息,包括用户名和密码。
2.3. 用户登录验证系统对用户输入的用户名和密码进行验证,包括检查用户名是否存在和密码是否匹配等。
•如果登录验证成功,进入显示菜单页面。
•如果登录验证失败,返回登录系统页面,提示用户重新输入。
2.4. 显示菜单系统显示主功能菜单,供用户选择需要执行的操作。
2.5. 输入操作选项用户根据菜单提示,输入相应的操作选项。
2.6. 选择操作系统根据用户输入的操作选项,执行相应的操作。
•如果用户选择录入学生成绩,进入输入学生信息步骤。
•如果用户选择查询学生信息,进入输入学生学号步骤。
•如果用户选择统计学生成绩,进入统计学生成绩步骤。
C语言课程设计实验报告-学生成绩统计软件

C 语言课程设计实验报告一 问题描述:编辑一个学生成绩统计软件 二 基本要求:1) 每条记录由学号、姓名、若干门课程的成绩组成; 2) 能计算每个学生的总分和平均分并显示;3) 能按平均分统计各分数段的人数,并以分布图显示,如右图所示。
4) 在此基础上,可进行文件操作。
三 系统分析和设计函数的设计,其最终目的是要实现所需要的功能。
本例中,是用main 函数调用两个子函数来实现的! 1)文件的建立:要想实现对学生成绩的统计,首先要建立一个文件用来存放学生信息,要用到FILE 文件指针。
fp1=fopen("c:\\turboc2\\file1.rec","w+"); 2)程序的设计:学生的信息放在结构体数组struct student_score s[N]中。
通过for 循环,调用子函数getdata ,从键盘接收学生信息(num ,name ,score[0],score[1],score[2],score[3]),并计算总分与平均分,返回学生信息return st 到调用处。
用fprintf 函数向文件中逐一写入学生的信息,通过rewend(fp1)函数使文件指针回到文件头,用fscanf 读学生信息,并显示在屏幕上。
同时根据所读学生信息,统计各分数段的人数s1++,s2++,s3++,s4++,s5++,然后调用一个子函数putsgraph 用来输出图表!四 结构图主函数五 流程图:(背面)具体程序如下:#define N 5#include"stdio.h"#include"stdlib.h"struct student_score{long num;char name[20];float score[4];float total;float aver;}s[N];main(){FILE *fp1;struct student_score getdata(struct student_score st,int x);int putsgraph(int sa, int sb,int sc,int sd,int se);int i=0,s1=0,s2=0,s3=0,s4=0,s5=0;fp1=fopen("c:\\turboc2\\file1.rec","w+");for(i=0;i<N;i++)s[i]=getdata(s[i],i);for(i=0;i<N;i++)fprintf(fp1,"%-7ld%-10s%10.1f%10.1f%10.1f%10.1f%10.1f%10.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].total,s[i].aver);rewind(fp1);{long num;char name[20];float e,f,g,h,total,aver;for(i=0;i<N;i++){fscanf(fp1,"%ld%s%f%f%f%f%f%f\n",&num,name,&e,&f,&g,&h,&total,&aver);printf("%-7ld%-20s%10.1f%10.1f\n",num,name,total,aver);if(aver<60) s1++;else if(aver<70) s2++;else if(aver<80) s3++;else if(aver<90) s4++;else if(aver<=100) s5++;}}fclose(fp1);putsgraph(s1,s2,s3,s4,s5);}struct student_score getdata(struct student_score st,int x){int y;printf("\nEnter student%d\'s num:\n",x+1);scanf("%ld",&st.num); getchar();printf("\nEnter name:\n");gets();st.total=0;printf("\nEnter 4 scores:\n");for(y=0;y<4;y++){scanf("%f",&st.score[y]);getchar();st.total+=st.score[y];}st.aver=st.total/4;return st;}int putsgraph(int sa, int sb,int sc,int sd,int se){int i,j;char graph[16][80];for(i=0;i<16;i++){for(j=0;j<79;j++) graph[i][j]=' ';graph[i][79]='\0';}for(j=0;j<79;j++) graph[11][j]='-';for(j=3;j<=15;j+=4){ graph[12][j]='<'; graph[12][j+2]='0'; }graph[12][4]='6';graph[12][8]='7';graph[12][12]='8';graph[12][16]='9';graph[12][19]='<'; graph[12][20]='=';graph[12][21]='1';graph[12][22]='0'; graph[12][23]='0';for(i=10;i>(10-sa);i--) graph[i][4]='o';for(i=10;i>(10-sb);i--) graph[i][8]='o';for(i=10;i>(10-sc);i--) graph[i][12]='o';for(i=10;i>(10-sd);i--) graph[i][16]='o';for(i=10;i>(10-se);i--) graph[i][20]='o';for(i=0;i<16;i++) puts(graph[i]);}六测试数据Entrer student1’ num:7879366Enter name:wuhaoEnter 4 scores:66778894Entrer student2’ num:7879343Enter name:JiapanEnter 4 scores:87547683Entrer student3’ num:7879343Enter name:huboEnter 4 scores:85907061Entrer student4’ num:7879422Enter name:jinleiEnter 4 scores:72846578Entrer student5’ num:7879222Enter name:yananEnter 4 scores:37728975结果:7879366 wuhao 325.0 81.2 7879343 jiapan 300.0 75.07879456 hubo 306.0 76.57879422 jinlei 299.0 74.87879222 yanan 273.0 68.2ooo o o-----------------------------------------<60 <70 <80 <90 <=100七软件说明:本程序采用宏定义方式定义学生人数,增加程序的通用性,文件的路径为c:\\turboc2\\file1.rec,当运行结束后,可在dos状态下,输入命令行:type file1.rec打开此文件以检验文件的建立是否正确,并且可以查看学生的全部信息。
VB制作学生成绩统计分析系统

用VB制作学生成绩统计分析系统一.程设计的目的和意义每个学校都要举行考试,有的班级更是经常考试。
为了掌握学生的学习情况,老师们不得不花费大量时间和精力对考试成绩进行统计分析,因此,开发一个统计分析软件,具有重要的意义。
为强化和巩固所学的知识,本文所采用的程序是建立在以教材《VB程序设计使用教程》所涉及内容为基础之上的。
二.系统功能设计在本系统中,将主要实现如下的一些功能:1.对各分数段的人数及所占比例进行统计2.对最高分、最低分、平均分进行查询3.对不及格人数及所占比例进行统计4.将成绩分布用直方图表示出来三.设计思路在对课程项目进行分析以后,认为系统应有如下几条要求:1.要有系统登录界面2.要有成绩录入框3.要有统计结果显示界面4.要能对成绩进行保存四.设计流程图五.设计界面、基本控件使用方法简介:1.按退出键,关闭界面,退出程序。
2.按进入键,进入成绩输入界面,如下图所示。
3.建议在1028*768显示分辨率下使用。
1.因文件写入和读出之间有“系统误差”,所以用逗号开头,以消除“误差”2.按确定键,系统自动将成绩保存在“d:\kcsj\cjb.txt”文件,并对文件数据进行读入和运算处理,将统计结果显示在显示界面。
3.按取消键,则返回登录界面。
1.本界面为统计结果显示界面。
2.按返回键,关闭本界面,返回上一界面,即成绩输入界面。
3.按退出键,关闭各界面,结束程序。
六.关键程序//后为该程序段解释Private Sub Form_load()Dim sg() As Single, im(9) As IntegerDim int1, int2, int3 As Integer: Dim x, y, sb, sg1 As SingleDim n, m, z As IntegerDim a, b, c As IntegerOpen "d:\kcsj\cjb.txt" For Input As #1 //打开文件im(0) = -1n = 0Do While Not EOF(1)n = n + 1ReDim Preserve sg(n)Input #1, sg(n)Loop //读入数据Close #1 //关闭文件m = 2Do While m <= nSelect Case sg(m)Case Is >= 90im(9) = im(9) + 1Case Is >= 80im(8) = im(8) + 1Case Is >= 70im(7) = im(7) + 1Case Is >= 60im(6) = im(6) + 1Case Is >= 50im(5) = im(5) + 1Case Is >= 40im(4) = im(4) + 1Case Is >= 30im(3) = im(3) + 1Case Is >= 20im(2) = im(2) + 1Case Is >= 10im(1) = im(1) + 1Case Is >= 0im(0) = im(0) + 1Case Elsea = 1End Selectm = m + 1Loop //将各成绩按分数段分类统计L15.Caption = n – 2 //显示班级人数int2 = 0Do Until int2 > 9L1(int2).Caption = im(int2) //显示各分数段人数sb = im(int2) * 100 / (n - 2)L1(int2 + 10).Caption = Format(sb, "0.0") //显示各分数段人数比例int2 = int2 + 1Loopa = 1:b = 0Dob = b + sg(a)a = a + 1Loop While a <= n - 1Lav.Caption = Format(b / (n - 2), "0.0") //显示平均分For int1 = 2 To n - 2For int2 = int1 + 1 To n - 1If sg(int1) > sg(int2) Thensg1 = sg(int1)sg(int1) = sg(int2)sg(int2) = sg1End IfNextNextLmax.Caption = sg(n - 1) //显示最高分Lmin.Caption = sg(2) //显示最低分z = im(0) + im(1) + im(2) + im(3) + im(4) + im(5)Lren.Caption = z //显示不及格人数Lbi.Caption = Format(z / n, "0") //显示不及格人数所占比例Shape1(0).Height = 0: Shape1(1).Height = 0: Shape1(2).Height = 0: Shape1(3).Height = 0 Shape1(4).Height = 0: Shape1(5).Height = 0: Shape1(6).Height = 0: Shape1(7).Height = 0 Shape1(8).Height = 0: Shape1(9).Height = 0int2 = 0Do Until int2 > 9sb = im(int2) / (n - 2)Shape1(int2).Height = sb * Label7.HeightShape1(int2).Top = Line23.Y1 - Shape1(int2).HeightIf Shape1(int2).Height = 0 ThenShape1(int2).V isible = FalseElse: Shape1(int2).FillStyle = 0End Ifint2 = int2 + 1Loop //显示直方图End Sub七.心得本系统在最简程度上实现了对学生成绩的统计分析,所涉及的也都是基础性的知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《微机原理与接口技术》课程设计(学年论文)说明书课题名称:学生课程成绩统计程序设计(A1 难度系数1)学生学号:专业班级:学生姓名:学生成绩:指导教师:课题工作时间:2013-6-13 至2013-6-18填写说明:1. 一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;2. 第五项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3. 成绩评定由指导教师按评定标准评分。
4. 此表格填写好后与正文一同装订成册。
课程设计评审标准(指导教师用)学生课程成绩统计程序设计说明书1、方案论证(1)汇编程序设计步骤、要点(2)DOS系统调用2、程序设计(1)总体设计设计分析与思路说明总体框图(框图中每一个模块的功能说明)(2)程序设计流程图程序代码及注释3、程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(5)程序运行结果截屏图片结果说明4、结论用结果说明设计成功之处,对某些问题进行分析、展望。
1.方案论证(1)汇编程序设计步骤、要点1 引言汇编语言能充分利用计算机所有的硬件特性并对硬件进行直接控制,汇编语言编制的程序比使用其它语言编制的程序执行速度快、资源占用少,所以,汇编语言在工业自动化控制和智能化产品的生产上有着十分广泛的用途。
但是,汇编语言是一种低级符号语言,与机器指令有着一一对应的关系,与高级语言相比不太符合人的思维习惯,它向寄存器、内存单元,必须通过一种具体的计算机来学习,同时要求初学者应具有一定的硬件基础,真正掌握起来有一定的难度。
2 汇编语言程序设计技巧808618088汇编语言程序设计中一般说来遵循以下几个步骤:首先分析题意,确定解题算法。
然后根据算法由粗到精画程序流程图,最后编写程序。
3 寻址方式的准确使用程序设计的目的是将输入数据加工处理转换成输出数据,获取正确的数据是保证程序处理正确的前提,而获取正确的数据又与正确地使用寻址方式关系密切,所以有必要先从寻址方式谈起。
(1)程序预定义数据的寻址。
在程序装入时,程序中预定义的数据一并进入内存,可在程序中直接使用。
由于8086/8088是16位计算机,其最大寻址空间为1MB,所以,物理地址=段地址×16+偏移地址。
这里讲的寻址主要指偏移地址(有效地址)。
对于程序中定义的单一变量而言,在程序中宜采用中,可使用语句MOV AX,X或MOVAX,【X】。
需要注意的是在数据段中应将x说明成“字”类型变量,否则汇编时会出错。
对于表格或数组变量的操作(如使用循环实现),可采用基址变址或寄存器相对寻址方式。
如X是一维字数组,现要把X 中的第三个字放入AX中。
使用相对寻址方式如下:(BX为16位的位移量,即相对于X的距离)MOVBX,4(Bx的值可在循环体内实现自增或自减)MOV AX,【X+BX】使用基址变址寻址方式如下:(BX为基址寄存器,SI为变址寄存器)LEA BX,X(BX的值可在循环体外装入X的有效首地址)MOV SI,4(SI的值可在循环体内实现自增或自减)MOV AX,【BX+SI】在这两种寻址方式中除要保证原操作数和目的操作数的类型一致外,还要注意基址寄存器只能是BX或BP,变址寄存器只能是SI或DI。
同时,在计算物理地址时隐含的段基址,如BX、SI、DI联合或单独寻址,段基址隐含在DS中;BP单独寻址或BP和SI、DI联合寻址,段基址在隐含SS中。
如不清楚这一点,极易导致程序的逻辑错误乃至程序崩溃。
(2)通用设备数据输入的寻址。
通用设备如键盘、磁盘等,由于在开机时操作系统已经对它们进行了初始化,配备了相应的设备驱动程序,只要使用操作系统提供的功能调用即可进行输入输出,这些设备对用户来说是完全透明的。
具体方法如下:首先按功能调用的要求初始化入口参数并执行语句INT N(N为功能调用号),然后从相应的寄存器或内存中取出输出结果即可。
对于字符型设备如键盘,出口参数通常都是放在寄存器中;而对于块设备如磁盘,出口参数通常都是放在预先开辟好的内存中,使用时可参照1.1进行访问。
(3)输入输出指令的寻址。
外设通过硬件接口板插在总线上与计算机相连,系统会将一部分端口地址分配给I/O设备的控制、状态、数据寄存器,在程序中可通过IN、OUT指令直接实现外设和CUP、内存之问的动态数据交换。
在使用这两条语句时需要注意两点:一是端口宽度:如端口宽度是8位,输入时须使用IN AL,端口号,输出时须使用oUT端口号:AL。
如端口宽度是16位,输入时须使用INAX,端口号,输出时须使用OUT端口号,AX。
二是端口地址:如端口地址大于255,则首先应把端口地址送入DX中,然后使用短格式进行寻址。
如输入是采用lNAL/AX,DX,输出时采用OUT DX,AL/AX。
(2)DOS系统调用1 A H←功能号2 在指令寄存器中存放入该功能所有要求的入口参数3 执行INT 21H指令4 分析出口参数2.程序设计(1)总体设计设计分析与思路说明首先就是输入成绩,将成绩存入以SCORE为首地址的区域,然后再将成绩分为12个组,最后将每组的数据输出,输入成绩,因为有30个成绩,如果给每个成绩两个字节的区域,就至少要定义60个字节,就是SCORE的区域你们的成绩是两位数,所以我就给的BUF1,最多只能输入两位数,COUNT是用来存储分组的每组个数的,一共12组,就给12字节,TS1 TS2就是两个字符串输出显示,CRLF是为了输出换行,输入成绩,首先从键盘输入的是字符串,字符串不好比较大小,所以要先转换为二进制数,DI是为了控制循环次数,也方便遍历,从第0个字节到第58个字节,每次增加2,总共就循环30次,输入30个字符串,全部转换为二进制数依次存放到SCORE里,总共12个组,都在CLASSIFY这个函数里分好。
分好数据之后,最后要把每个组里的个数输出以后个数在机器里是二进制形式所以要转换为十进制输出。
这里CX是为了控制循环次数,总共12组。
这里是第一步的实现,字符串转换为二进制数字存放。
每个字符根据asc 码来,比如0的asc码是30h,所以要减去30h,才能得到0 如果是f的话,表示15,f的asc码是46h 变成15要减去37h。
然后就将十位的数字乘10加上各位数字就得到了总数,总数是二进制的,就是30个成绩每个依次比较,小与等于9的是0-9,输入第0组如果大于9小于等于19是第二组,到最后大于99的,分为F1和F0两种情况,一种是作弊,一共是旷考。
分好组之后的数据是二进制的,要输出就要转换为十进制的输出。
这里首先将需要转换的数据送到AX中,然后调用F2T10函数将AX里面的数据转换为十进制输出,一共12次循环。
最后返回DOS调用,结束程序。
总体框图(2)程序设计流程图程序代码及注释.386DATA SEGMENT USE16BUF1 DB 3,0,3 DUP(0) ;BUF1是每个学生成绩缓冲区SCORE DB 62 DUP(0)BUF DB 12 DUP(0)COUNT DB 12 DUP(0)TS1 DB 'Please input 30 scores:',0DH,0AH,'$'TS2 DB 'Result of 0-9,10-19,20-29,...89-99,CHEAT,NO is:',0DH,0AH,'$' CRLF DB 0DH,0AH,'$'DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXLEA DX,TS1MOV AH,9INT 21HMOV DI,0 ;输入数字字符串转换为二进制数据LOOPB:LEA DX,BUF1MOV AH,10INT 21HLEA DX,CRLFMOV AH,9INT 21HCALL STRT2ADD DI,2CMP DI,60JNZ LOOPBLEA DI,SCORE ;将分数分类CALL CLASSIFYLEA DX,TS2MOV AH,9INT 21HMOV CX,12 ;将每组的二进制数转换为十进制数输出LEA DI,COUNTLOPA: MOV AX,WORD PTR [DI]MOV AH,0MOV DX,32CALL F2T10MOV DL,' 'MOV AH,2INT 21HADD DI,1LOOP LOPAMOV AH,4CHINT 21H;子程序名:STRT2;功能:将一个数字字符串转换为二进制数存放在以SCORE为首址的字单元存储区;入口参数:以BUF1为首址的输入缓冲区;出口参数:转换成数字后以SCORE为首址的字单元存储区;所用寄存器:BX-记录输入字符串中字符个数; SI-BUF1的变址寄存器; CX-用来存放字符串变成数字之后的累加和STRT2 PROCMOV BL,BUF1+1MOV BH,0MOV SI,2MOV CX,0LOOPA:IMUL CX,10CMP BYTE PTR BUF1[SI],46HJNZ X1SUB BYTE PTR BUF1[SI],37HJMP X2X1: SUB BYTE PTR BUF1[SI],30HX2: ADD CL,BUF1[SI]INC SIDEC BXJNZ LOOPAMOV WORD PTR SCORE[DI],CXRETSTRT2 ENDP;子程序名:分类;按照12种分组方式依次分类CLASSIFY PROCMOV CX,30MOV SI,0S0: MOV AX,WORD PTR SCORE[SI] CMP AX,9JA S1MOV DI,0JMP S12S1: CMP AX,19JA S2MOV DI,1JMP S12S2: CMP AX,29JA S3MOV DI,2JMP S12S3: CMP AX,39JA S4MOV DI,3JMP S12S4: CMP AX,49JA S5MOV DI,4JMP S12S5: CMP AX,59JA S6MOV DI,5JMP S12 X: JMP S0S6: CMP AX,69JA S7MOV DI,6JMP S12S7: CMP AX,79JA S8MOV DI,7JMP S12S8: CMP AX,89JA S9MOV DI,8JMP S12S9: CMP AX,99JA S10MOV DI,9JMP S12S10: CMP AX,096HJNZ S11MOV DI,10JMP S12S11: MOV DI,11S12: ADD SI,2INC COUNT[DI]DEC CXCMP CX,0JNZ XRETCLASSIFY ENDP;子程序名:F2T10;功能:将AX/EAX中的二进制数以十进制形式在显示器上输出;入口参数:AX/EAX-存放待转换的二进制数;出口参数:转换后的十进制数在显示器上输出;所用寄存器:EBX-用来存放基数10; SI-用来作十进制数ASCII码存储区的指针;调用子程序名:RADIXF2T10 PROCPUSH EBXPUSH SILEA SI,BUFPLUS: MOV EBX,10CALL RADIXMOV BYTE PTR [SI],'$'LEA DX,BUFMOV AH,9INT 21HPOP SIPOP EBXRETF2T10 ENDP;子程序名:RADIX;功能:将EAX中的32位无符号二进制数转换为P进制数(16位段);入口参数:;EAX-存放待转换的32位无符号二进制数;EBX-存放要转换数制的基数;SI-存放转换后的P进制ASCII码数字串的字节缓冲区首址;出口参数:;所求P进制ASCII码数字串按高位在前、低位在后的顺序存放在以SI为指针的字节缓冲区中;SI-指向字节缓冲区中最后一个ASCII码的下一个字节处;所使用的寄存器:;CX-P进制数字入栈、出栈时的计数器RADIX PROCPUSH CXPUSH EDXXOR CX,CXLOP1: XOR EDX,EDXDIV EBXPUSH DXINC CXOR EAX,EAXJNZ LOP1LOP2: POP AXCMP AL,10JB L1ADD AL,7L1: ADD AL,30HMOV [SI],ALINC SILOOP LOP2POP EDXPOP CXRETRADIX ENDPCODE ENDSEND START3程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(4)程序运行结果结果说明随机输入30个成绩,在命令提示符界面出现12个成绩段和相应的成绩个数,如上图所示4.结论用结果说明设计成功之处,对某些问题进行分析、展望设计经过调试后所得结果与课题所预期的相同,最后输入的成绩与统计的人数段相符。