汇编课程设计成绩管理系统源代码.doc

合集下载

学生成绩管理系统=附源码=附源码

学生成绩管理系统=附源码=附源码

题目2学生成绩管理系统一、设计目的与内容1.设计目的用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。

可以建立函数输入二叉树。

要写明:存储结构、基本算法(可以使用程序流程图)、输入输出、源程序、测试数据和结果、算法的时间复杂度;2.设计内容:建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。

程序运行时显示一个简单的菜单,如:(1):信息输入(2):总分统计(3):平均分统计(4):总分排序(5):平均分排序(6):查询其中:(1):对4个学生的信息进行输入;(2):对每个学生的3门课程统计总分;(3):对每个学生的3门课程统计平均分;(4):对4个学生的总分按降序或升序排序并显示出来;(5):对4个学生的平均分按降序或升序排序并显示出来;(6):查询输入一个学号或姓名后,显示出该学生的有关信息;二、算法的基本思想程序分为6个功能模块:信息录入,总分统计,平均分统计,总分排序,平均分排序,查询。

其中总分排序功能模块还设了按总分降序和按总分升序两个菜单, 平均分排序功能模块还设了按平均分降序和按平均分升序两个菜单, 查询功能模块还设了按学号查询和按姓名查询两个菜单。

程度的总体设计思想如下图框架所示:三、测试数据第一个学生:姓名:小张学号:01Fox得分:67C得分:78 ENGLISH得分:87 第二个学生:姓名:小李学号:02Fox得分:66C得分:98 ENGLISH得分:78 第三个学生:姓名:小王学号:03Fox得分:88C得分:78 ENGLISH得分:65 第四个学生:姓名:小陈学号:04Fox得分:65C得分:79 ENGLISH得分:68 如图1-1所示:(图1-1)四、源程序及系统文件使用说明1、进入系统并输入测试数据(如上图1-1)2、测试总分统计(如图1-2)(图1-2)3、测试平均分统计(如图1-3)(图1-3)4、(1)测试总分降序排序(如图1-4)(图1-4)(2)测试总分升序排序(如图1-5)(图1-5)5、(1)测试平均分降序排序(如图1-6)(图1-6)(2)测试平均分升序排序(如图1-7)(图1-7)6、(1)测试按学号查询(如图1-8)(图1-8)(2)测试按姓名查询(如图1-9)(图1-9)另附部分程序代码:1、初试代码char stu[4][10];//学生char bb[3]={'0'};int num[4][4];//学号,成绩int t[4]={0,1,2,3};int i,j,a,m,temp,b,c,d,aa=0,k=0;int sum[4],sums[4],ave[4];//总分,平均分for(i=0;i<4;i++)sum[i]=0,sums[4]=0,ave[4]=0;H1:d=0;printf(" ==============学生成绩信息管理=================\n"); printf(" 1.信息输入\n");printf(" 2.总分统计\n");printf(" 3.平均分统计\n");printf(" 4.总分排序\n");printf(" —>(1)按总分降序排序\n");printf(" —>(2)按总分升序排序\n");printf(" 5.平均分排序\n");printf(" —>(1)按平均分降序排序\n");printf(" —>(2)按平均分升序排序\n");printf(" 6.查询\n");printf(" —>(1)按学号查询\n");printf(" —>(2)按姓名查询\n");printf(" ================================================\n"); printf("请选择操作项:");scanf("%d",&a);2、信息输入if(a==1){for(i=0;i<4;i++){printf("请输入第%d个学生的姓名:",i+1);scanf("%s",stu[i]);printf("学号:");scanf("%d",&num[i][0]);for(m=0;m<i;m++){if(num[i][0]==num[m][0]){printf("学号重复,请重新输入不同的学号!\n");printf("学号:");scanf("%d",&num[i][0]);}}printf("FOX得分:");scanf("%d",&num[i][1]);if(num[i][1]<0 || num[i][1]>100){printf("输入数值不合法,请输入0到100之间的数\n");printf("FOX得分:");scanf("%d",&num[i][1]);}printf("C得分:");scanf("%d",&num[i][2]);if(num[i][2]<0 || num[i][2]>100){printf("输入数值不合法,请输入0到100之间的数\n");printf("C得分:");scanf("%d",&num[i][2]);}printf("ENGLISH得分:");scanf("%d",&num[i][3]);if(num[i][3]<0 || num[i][3]>100){printf("输入数值不合法,请输入0到100之间的数\n");printf("ENGLISH得分:");scanf("%d",&num[i][3]);}printf("\n");}3、总分统计else if(a==2&&k==1)//总分统计{for(i=0;i<4;i++)for(j=1;j<4;j++)sum[i]=sum[i]+num[i][j];printf("学号姓名总分\n");for(i=0;i<4;i++)printf("%d %s %d\n",num[i][0],stu[i],sum[i]);printf("\n");printf("总分统计完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}else if(a==3&&k==1)//平均分统计{for(i=0;i<4;i++){for(j=1;j<4;j++)sums[i]=sums[i]+num[i][j];ave[i]=sum[i]/3;}printf("学号姓名平均分\n");for(i=0;i<4;i++)printf("%d %s %d\n",num[i][0],stu[i],ave[i]);printf("\n");printf("平均分统计完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}4、总分排序else if(a==4&&k==1)//总分排序{printf("总分排序:\n1.降序\n2.升序\n");scanf("%d",&aa);if(aa==1){printf("按总分降序排序如下:\n");//总分降序for(i=0;i<4;i++)for(j=i;j<4;j++)if(sum[t[i]]<sum[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],sum[t[i]]);//输出学号姓名总分printf("\n");printf("总分降序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}else if(aa==2){printf("按总分升序排序如下:\n");//总分升序for(i=0;i<4;i++)for(j=i;j<4;j++)if(sum[t[i]]>sum[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],sum[t[i]]);//输出学号姓名总分printf("\n");printf("总分升序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}}5、平均分排序else if(a==5&&k==1)//平均分排序{printf("平均分排序:\n1.降序\n2.升序\n");scanf("%d",&aa);if(aa==1){printf("按平均分降序排序如下:\n");//平均分降序for(i=0;i<4;i++)for(j=i;j<4;j++)if(ave[t[i]]<ave[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],ave[t[i]]);//输出学号姓名总分printf("\n");printf("平均分降序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}else if(aa==2){printf("按平均分升序排序如下:\n");//平均分升序for(i=0;i<4;i++)for(j=i;j<4;j++)if(ave[t[i]]>ave[t[j]]){temp=t[i];t[i]=t[j];t[j]=temp;}for(i=0;i<4;i++)printf("%d %s %d\n",num[t[i]][0],stu[t[i]],ave[t[i]]);//输出学号姓名总分printf("\n");printf("平均分升序排序完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}}6、查询else if(a==6&&k==1)//查询{printf("查询:\n1.学号\n2.姓名\n");scanf("%d",&aa);if(aa==1){printf("请输入查询学号:");//学号查询scanf("%d",&b);for(i=0;i<4;i++)if(num[i][0]==b){printf("学号:%d 姓名:%s\n",num[i][0],stu[i]);printf("FOX: %d C: %d ENGLISH: %d 总分:%d\n",num[i][1],num[i][2],num[i][3],sum[i]);d=1;printf("\n");printf("查询完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}if(d==0){printf("没有该学生!\n");printf("是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}}else if(aa==2){printf("请输入查询姓名:");//姓名查询scanf("%s",bb);for(i=0;i<4;i++)if(strcmp(stu[i],bb)==0){printf("学号:%d 姓名:%s\n",num[i][0],stu[i]);printf("FOX: %d C: %d ENGLISH: %d 总分:%d\n",num[i][1],num[i][2],num[i][3],sum[i]);d=1;printf("\n");printf("查询完成!是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1);}if(d==0){printf("没有该学生!\n");printf("是否继续(1.继续/2.退出)\n");scanf("%d",&c);if(c==1)goto H1;elseexit(1); } } }五、心得体会通过本课程设计让我对用C语言编程以及算法的应用有了进一步的认识,对数据统计,排序,查询反面的编程以及信息录入和界面友好性设计方面都有了不同程度的学习,巩固和提高,另外,程序中应用到了各种算法让我更加深了对算法的理解与应用。

学生成绩管理系统源代码-(数据结构与算法课设)C语言版汇编

学生成绩管理系统源代码-(数据结构与算法课设)C语言版汇编

运行前需在功程里新建个ni.txt.内容如下7004 sun 98.0 89.0 97.0 94.7 284.0 005 li 98.0 48.0 78.0 74.7 224.0 002 zhao 98.0 78.0 59.0 78.3 235.0 006 zhou 89.0 97.0 86.0 90.7 272.0 003 qian 78.0 98.0 89.0 88.3 265.0 001 chen 59.0 60.0 98.0 68.3 205.0 007 wu 57.0 76.0 87.0 73.3 220.0代码# include <stdio.h> //使程序包含头文件<stdio.h># include <stdlib.h> //使程序包含头文件<stdlib.h># include <string.h> //使程序包含头文件<string.h># define SIZE 50 //定义常量SIZE来控制数组的长度void input_num(struct Student stud[], int n, int i); //声明学号输入函数void input_name(struct Student stud[], int n, int i); //声明姓名输入函数void input_score(struct Student stud[], int n, int i); //声明成绩输入函数void output_stu(struct Student stud[], int n, int i); //声明输出函数void stat_stu(struct Student stud[], int n, int o); //声明统计函数float class_avr(struct Student stud[], int n, int o); //声明排序函数void chenji_stu(struct Student stud[], int n, int o);void desc_stu(struct Student stud[], int n, int o); //声明降序函数int find_stu(struct Student stud[], int n); //声明查找函数void delete_stu(struct Student stud[], int n, int y); //声明删除函数void amend_stu(struct Student stud[], int n, int y); //声明修改函数void write_text(struct Student stud[], int n); //声明保存文件函数int add_text(struct Student stud[], int n); //声明读取文件函数struct Student /*声明结构体*/ {char num[10];char name[20];float score[5];};void main() /*主函数,是程序的入口*/{struct Student stu[SIZE]; //定义一个结构数组int count = 0; //定义整型变量count用来存放学生信息的个数,初始化为0int choice; //定义choice用于存放用户对主菜单的选择 int a; //用于接收主选单中scanf()函数的返回值 char judge; //用于帮助判断输入的选择是否正确int flag_main; //用于判断主菜单用户输入的选择是否有误 int stat_choice = 0; //定义stat_choice用于用户对统计项目的选择,初始化为0int flag_stat; //用于接收scanf()函数的返回值int flag_find; //定义flag_find用于接收查寻函数的返回值char man_choice; //定义man_choice用于接收用户对是否进行修改删除的选择int con_choice; //定义con_choice用于接收用户对修改或删除的选择char sign_main; //定义sign_main接收用户对是否离开程序的选择char sign_input; //定义sign_main接收用户对是否继续输入的选择int i; //定义i,j作为控制循环的变量while (1) //形成一个死循环{system("color 71"); //设置输出显示颜色/*输出主选菜单*/printf("\n============================欢迎使用班级成绩管理系统============================\n\n");printf("==============================请选择您要使用的功能==============================\n\n");printf("\t\t-◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆-\n");printf("\t\t★※★\t\t 1:班级成绩录入★※★\n\n");printf("\t\t★※★\t\t 2:班级成绩显示★※★\n\n");printf("\t\t★※★\t\t 3:班级成绩统计★※★\n\n");printf("\t\t★※★\t\t 4:班级成绩查询★※★\n\n");printf("\t\t★※★\t\t 5:班级成绩修改★※★\n\n");printf("\t\t★※★\t\t 6:班级成绩表★※★\n\n");printf("\t\t★※★\t\t 7:班级成绩存档★※★\n\n");printf("\t\t★※★\t\t 8:班级成绩读入★※★\n\n");printf("\t\t★※★\t\t 0:退出★※★\n\n");printf("\t\t-◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆-");printf("======================================================================= =========");/*输入对菜单的选择*/do{flag_main = 0;printf("\n\t\t\t 请您选择需要的操作(0-6):");fflush(stdin);a = scanf("%d%c", &choice, &judge);if (a<2 || judge != '\n'){printf("\n\t\t\t 您的选择有误,请重新输入!\n");flag_main--;}}while (flag_main < 0);printf("\n\t\t\t ");system("pause"); //令屏幕暂停待输入任意键后恢复运行 system("cls"); //清屏system("color 71"); //设置输出显示颜色switch (choice) //把用户对主菜单的选择作为switch结构的判断条件{case (1):printf("\n\t\t请录入学生信息:\n");i=0; //循环前对i清零do{if (count+i == 50){break;}input_num(stu, count, i); //输入学号input_name(stu, count, i); //输入姓名input_score(stu, count, i); //录入成绩及总成绩平均成绩i++; //每录入一个学员信息i加1printf("\n\t\t还需要继续录入吗?(Y/N)"); /*产生是否继续录入的条件*/fflush(stdin);sign_input = getchar();}while(sign_input == 'y' || sign_input== 'Y' ); //判断count=count+i; //计算出本次录入后总的已录入成员个数printf("\t\t");break;case (2):/* printf("\n显示班级成绩信息:\n");printf("--------------------------------------------------------------------------------");printf("学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩"); /*格式化输出提示信息*/printf(" 学生信息表\n");*/printf(" ==================\n\n");printf("┏━━━━━━┳━━━━━━━━┳━━━┳━━━┳━━━┳━━━┳━━━━━┓\n");printf("┃学号┃姓名┃数据库┃算法┃ C语言┃总成绩┃平均成绩┃\n");printf("┣━━━━━━╋━━━━━━━━╋━━━╋━━━╋━━━╋━━━╋━━━━━┫\n");for (i = 0; i < count; i++) /*循环输出学员信息*/{output_stu(stu, count, i); //输出单个学员信息}printf("┗━━━━━━┻━━━━━━━━┻━━━┻━━━┻━━━┻━━━┻━━━━━┛\n");break;case (3):while (stat_choice != 4) /*循环统计直到用户选择退出结束*/{printf("\t\t0:数据库\n");printf("\t\t1:算法\n");printf("\t\t2:C语言\n");printf("\t\t3:平均成绩\n");printf("\t\t4:结束统计\n");printf("\n\n请选择成绩统计的项目");fflush(stdin);flag_stat = scanf("%d%c", &stat_choice, &a); /*接收用户选择并返回值给flag_stat*/if (flag_stat == 2 && a == '\n') /*如果成功接收用户选择则根据选择进行统计若选择有误提示重新输入*/{if (stat_choice == 0) /*根据选择0进行统计*/{desc_stu(stu, count, stat_choice);stat_stu(stu, count, stat_choice);}else if (stat_choice == 1) /*根据选择1进行统计*/{desc_stu(stu, count, stat_choice);stat_stu(stu, count, stat_choice);}else if (stat_choice == 2) /*根据选择2进行统计*/{desc_stu(stu, count, stat_choice);stat_stu(stu, count, stat_choice);}else if (stat_choice == 3) /*根据选择3进行统计*/{desc_stu(stu, count, stat_choice);stat_stu(stu, count, stat_choice);}else if (stat_choice == 4) /*选择4则break循环退出*/{break;}else /*其它错误选择提示重新输入*/{printf("\n您的输入有误,请重新输入!");}}else /*若没成功接收用户选择则提示重新输入*/{printf("\n您的输入有误,请重新输入!");}}stat_choice =getchar(); //每次循环结束stat_choice归0printf("\n");break;case (4):flag_find = find_stu(stu, count); //实现用户的查找功能/*根据查找函数的返回值为用户显示查找的信息*/if (flag_find > 0) /*返回值大于0,用户选择的是姓名查找方式*/{printf("\n 学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");output_stu(stu, count, flag_find-1);printf("\n--------------------------------------------------------------------------------");}else if (flag_find == 0) /*查找失败返回失败信息*/{printf("\n对不起没有找到您的成绩!\n");}else /*返回值大于0,用户选择的是学号查找方式*/{printf("\n 学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");output_stu(stu, count, -flag_find-1);printf("\n--------------------------------------------------------------------------------");}break;case (5):flag_find = find_stu(stu, count); //实现用户的查找功能/*根据查找函数的返回值为用户显示查找的信息*/if (flag_find > 0) /*返回值大于0,用户选择的是姓名查找方式*/{printf("\n 学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");output_stu(stu, count, flag_find-1);printf("\n--------------------------------------------------------------------------------");}else if (flag_find == 0) /*查找失败返回失败信息*/{printf("\n对不起没有找到您的成绩!\n");}else /*返回值大于0,用户选择的是学号查找方式*/{printf("\n 学号\t\t姓名\t\t数据库\t算法\tC语言\t总成绩\t平均成绩\n");output_stu(stu, count, -flag_find-1);printf("\n--------------------------------------------------------------------------------");}if (flag_find != 0) /*查找成功的情况下用户可选择修改或删除操作*/{fflush(stdin);man_choice = getchar(); /*接收用户选择是否进行下一步操作*/while (man_choice) /*判断用户的选择*/{printf("\t\t1:修改\n");printf("\t\t2:删除\n");printf("\t\t3:退出\n");printf("\n请选择您的操作");fflush(stdin);scanf("%d",&con_choice); /*用于接收用户选择的操作*//*根据用户的选择完成用户选择的操作*/if (con_choice == 1) /*进行修改操作*/{amend_stu(stu, count, flag_find);}else if (con_choice == 2) /*进行删除操作,一旦删除则无法再进行修改*/{delete_stu(stu, count, flag_find);count--;printf("\n删除成功!\n");break;}else if (con_choice == 3) /*选择4则break循环退出*/{break;}else /*用户输入错误信息返回用户选择有误*/{printf("您的选择有误!\n");}stat_choice = 0; //每次循环结束stat_choice归0}}//修改删除操作结束printf("\n");break;case (7):printf("\t\t\t将学生成绩信息存盘:\n\n\n");write_text(stu, count); /*循环写入数据*/printf("\t\t\t");break;case (8):printf("\t\t\t从文件载入学生信息:\n\n\n");count = add_text(stu, count); /*读入文件信息*/break;case (6):printf("\t\t\t学生成绩排名信息:\n");chenji_stu(stu, count, stat_choice);/*读入文件信息*/printf("\t\t\t");break;case (0):printf("\n\t\t\t确定您真的要退出吗?(y/n)"); /*提醒用户是否退出并接收选择*/fflush(stdin);sign_main = getchar();if (sign_main == 'y' || sign_main == 'Y') /*若用户确定退出则返回退出信息*/{printf("\n\n\n\n\t\t\t谢谢使用本软件!\n\n\n\n\n");exit(0); //退出主程序}printf("\n\t\t\t");break;default: //提示用户输入错误printf("\n\t\t\t您的输入有误,请重新输入!\n\n\t\t\t");}system("pause"); //令屏幕暂停待输入任意键后恢复运行system("cls"); //清屏system("color 71"); //设置输出屏幕颜色}}/*************************************************************************** 功能:从键盘输入正确学号依次存放入stu[n].num中参数:参数struct Student stud[ ]代表结构体数组首地址,n代表已有成员个数,i代表本次录入的第i个学号。

C语言课程设计 学生成绩管理系统 源代码

C语言课程设计 学生成绩管理系统 源代码

//学生成绩管理系统//用户名:xdxy 密码:700619#include<stdio.h>#include<conio.h> /*清屏*/#include <stdlib.h> /*显示目录*/#include<string.h>#define MAX 1000void menu();void input(); /*输入数据函数*/ void sort(); /*排序数据函数*/ void display(); /*显示数据函数*/ void display1(); /*显示各科成绩函数*/ void insert(); /*插入数据函数*/ void del(); /*删除数据函数*/ void average(); /*平均值函数*/void find(); /*查找数据函数*/ void save(); /*保存数据函数*/ void read(); /*读出数据函数*/ void del_file(); /*删除文件函数*/void modify(); /*修改文件函数*/int now_no=0;struct student //定义学生信息{int no; // 学号char name[20]; //姓名char sex[4]; //性别float score1; //成绩1float score2; //成绩2float score3; //成绩3float sort; //排序成绩float ave; //平均分float sum; //总分};void main(){int h,flag1,flag2;char name[20]="xdxy",password[10]="700619";char person[20],password1[10];printf ("\t\t ******** 欢迎进入学生成绩管理系统!********\n\n");printf ("\t\t\t 用户登录\n\n");for(h=0;h!=5;){printf("\t\t\t\t 用户名:");gets(person);flag1=strcmp(person,name);printf("\t\t\t\t 密码:");gets(password1);flag2=strcmp(password,password1);if(flag1==0 && flag2==0){printf("\t\t\t\t 登陆成功!\n\n");menu();break;}else{printf ("\t\t\t 用户名或密码错误!\n\n");printf ("\t\t\t 请注意:您还剩%d次机会!\n\n",4-h);h++;}}if (h=5)printf ("对不起,您输入的用户名或密码有误,已被强制退出。

汇编课程设计成绩管理系统+源代码

汇编课程设计成绩管理系统+源代码

XXXXX课程设计说明书汇编语言课程设计班级: 网络B101 姓名: XXX学号XXX设计题目: 学生成绩管理设计时间: 2012.12.09 至2012.12.21指导教师: XXX评语:___________________________________________________________________________________________________________________________________________________________________________________________评阅成绩:___________评阅教师:____________ 一、课程设计的目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。

二、设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 2010三、课程设计要求1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。

2.遵循模块化、结构化的程序设计方法。

3.要求程序必须正确。

4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。

5.要求程序结构合理,语句使用得当。

6.适当追求编程技巧和程序运行效率。

四、课程设计的课题和分析题目:学生成绩管理分析:建立学生成绩文档;输入学生各门功课成绩;(假设3门功课);修改指定学号的学生成绩;统计指定学号的学生的平均成绩、总成绩,并在屏幕上显示;统计指定学号课程的平均成绩,并在屏幕上显示;每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数;(分数段为:>=90;80~89;70~79;60~69;<=59)此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。

汇编语言课程设计学生成绩管理系统

汇编语言课程设计学生成绩管理系统

汇编语言课程设计课题名称:学生成绩管理系统小组成员:班级:指导教师:日期:2014.06.18 一、选题目的:熟悉汇编语言程序设计的实验环境,主要是熟悉汇编程序的基本结构,编译、连接和调试等基本操作。

利用该题目进行汇编语言程序设计运用的综合性训练,综合运用汇编语言循环程序和子程序编程方法,巩固以及提高汇编语言程序设计能力运用水平,为后续的开发和实验工作打好基础。

二、功能设计:编制一个程序,要求接收从键盘收入的一个班的学生成绩,并存放于50字节的GRADE 数组中,其中GRADE+N保存学号N+1的学生成绩,然后根据GRADE得学生成绩,把学生名次填入50自己的RANK数组中,其中RANK+N的内容是学号N+1学生的名次,在按学号把学生顺序学生名次显示出来。

三、算法流程图:四、运行结果:从键盘输入三个学生的姓名和成绩,按学生成绩升序排序,并显示出排序结果五、程序源代码:data segmentinfor0 db 0ah,0dh,'sort=$'infor1 db 0ah,0dh,'input name:$'infor2 db 0ah,0dh,'input score:$'n equ 8 姓名长度m equ 4 成绩长度(3位+回车符)p equ 3 输入的人数q equ 3 成绩的位数buff1 db n,?,n dup(0),'$' 姓名缓冲区,加$字符以便输入时用 buff2 db m,?,m dup(0),'$' 成绩缓冲区sname db p dup(n+1 dup(0)) 保存姓名score1 dw p dup(m+1 dup(0)) 保存成绩score2 dw p dup(m+1 dup(0))mingci db p dup(0) 名次x dw ?sign1 dw 0sign2 dw 0cont db '1' 计数data endscode segmentassume cs:code, ds:datamain proc farstart:mov ax,datamov ds,axmov es,axmov bx,0mov cx,0call inputcall sortcall printmov ah,4chint 21hmain endpinput procinc bx 输入次数统计cmp bx,p 输入次数>p?ja exitlea dx,infor1 显示提示2mov ah,9int 21hlea dx,buff1 输入姓名mov ah,10int 21hmov al,buff1+1 实际输入个数——a1add al,2 +2.包含bufferl的0、1号单元mov ah,0mov si,ax 回车0d所在位置,跟在最后一个字符后 mov buff1[si],0 将0d换为0,便于输出显示lea dx,infor2 显示提示2mov ah,9int 21hlea dx,buff2 输入成绩mov ah,10int 21hmov al,buff2+1 实际输入个数add al,2 个数+2,包含0、1单元,为找到0dmov ah,0mov si,axmov buff2[si],0 将0d换为0,便于输出显示mov mingci[bx-1],bl bx为输入次数,保存输入的次序cmp bx,1 第一次输入转let1jz let1add sign1,n+1 姓名间隔为n+1add sign2,q 成绩间隔为qlet1: 子程序嵌套call copyjmp inputexit:retinput endpcopy procmov cx,n+1 姓名长度+3(包含$)lea si,buff1+2lea di,sname 姓名传递到snameadd di,sign1 加上间隔值cldrep movsbmov cx,nmov ax,'$' 用$覆盖姓名区,清除已输入的姓名 lea si,buff2+2lea di,score1 成绩传递到score1add di,sign2 加上间隔符cldrep movsblea si,buff2+2mov di,sign2call change 二进制成绩score2retcopy endpchange procmov x,0mov cx,[si-1] 成绩的位数cxmov cx,000fh 保留低四位rept2:mov al,[si] 按位取出成绩cmp al,30h 是否在0、9之间jl exit1cmp al,39hjg exit1and ax,000fhxchg ax,xmov dx,10 将ax中前一次形成的书扩大十倍mul dx 保存到xadd x,axinc siloop rept2mov ax,x 按十进制形成的成绩以二进制保存 mov score2[di],ax 二进制成绩送入score2mov x,0add sign2,2 下一个成绩单元exit1:retchange endpsort procmov cx,p 数组长度dec cxloop1:push cx 保存外循环次数mov bx,0mov si,0loop2: mov ax,score2[bx]cmp ax,score2[bx+m+1] m+1=5jge next 降序xchg ax,score2[bx+m+1] 交换成绩mov score2[bx],axmov al,mingci[si]xchg al,mingci[si+1] 交换名次mov mingci[si],alnext:add bx,m+1inc si 下一个成绩loop loop2pop cx 恢复外循环次数loop loop1retsort endpprint proclea dx,infor0 显示结果提示mov ah,9int 21hmov cx,pmov bx,0mov ax,0mov di,0rept3:mov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov dl,cont 显示名次序号mov ah,2int 21hinc contmov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov al,mingci[di] 取名次dec al 位置-1,因为地址从0开始 mov bl,9mul bllea dx,snameadd dx,ax 偏移地址+姓名位移量mov ah,9 显示姓名int 21hmov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov bx,0mov al,mingci[di] 取名次dec al 地址从0开始mov bl,5mul bllea dx,score1add dx,axmov ah,9 显示成绩int 21hinc diloop rept3retprint endpcode endsend start六、自我评价:本次大作业做的是显示学生名次表,重要考察的是复杂程序设计中,采用模板块结构可以划分功能,分解程序,在各个程序之间存在参数传递问题,强调了传递方式和嵌套调用层次的运用。

学生成绩管理系统程序源代码

学生成绩管理系统程序源代码

首先呢,先建立新的c++文件。

然后拷贝这些内容到里面:#include 〈stdio.h>#include <string.h〉typedef struct count{ /*保存记录条数结构体*/ char name[10];int num;}count;typedef struct st{char name[10];long Number;int Math;int C;int Amount;}st;st record[8];count num[1];char filename[10]={”0"};char filename2[10]={"0”};int Inputnum[8];void MainMenu(){/*主菜单*/ printf("\n\t\t\t\t* ** * **** **\n”);printf("\t\t\t\t*主菜单*\n”);printf(”\t\t\t\t* 1。

新建数据*\n”);printf(”\t\t\t\t*2。

添加数据*\n");printf("\t\t\t\t* 3. 删除数据*\n");printf("\t\t\t\t* 4. 排序*\n”);printf("\t\t\t\t* 5。

查询*\n");printf(”\t\t\t\t* 6. 退出*\n");printf(”\t\t\t\t***** ** ***\n”);}void DelMenu(){/*删除菜单*/ printf(”\n\t\t\t\t* ** *** *** * * *\n");printf("\t\t\t\t*删除菜单*\n”);printf("\t\t\t\t* 1. 学号查询删除*\n”);printf(”\t\t\t\t*2。

成绩管理系统源代码

成绩管理系统源代码

#include<stdio.h>#include<stdlib.h>#include<string.h>void Add();void Del();void Qur();void Modefy();void Wrong();typedef struct STU{ char num[10];char name[15];int cgrade;int mgrade;int egrade;int total;double ave;int mingci;struct STU *next;}STU;int select;char new_num[10], new_name[15];int i,n,new_cgrade,new_mgrade,new_egrade,new_total; double new_ave;STU *head,*p,*q,*r;void main(){head=(STU *)malloc(sizeof(STU));/*建立其它结点并将其链接*/printf("输入学生数:");scanf("%d",&n);p=head;/*输入新结点部分成员并求新结点其它成员值*/printf("学号:");scanf("%s",p->num);printf("姓名:");scanf("%s",p->name);printf("该生三科成绩:");scanf("%d%d%d",&p->cgrade,&p->mgrade,&p->egrade);p->total=p->cgrade+p->mgrade+p->egrade;p->ave=p->total/3.0;for(i=1;i<n;i++){q=(STU*)malloc(sizeof(STU));p->next=q;p=q;printf("学号:");printf("姓名:");scanf("%s",p->name);printf("该生三科成绩:");scanf("%d%d%d",&p->cgrade,&p->mgrade,&p->egrade);p->total=p->cgrade+p->mgrade+p->egrade;p->ave=p->total/3.0;i++;}/*尾结点的链置空*/p->next=NULL;/*输出链表中每个结点*/printf("\n\n计科系**班第*学年第*学期**课程成绩表\n");printf("--------------------------------------------------------------------------------\n");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","学号","姓名","c成绩","数学成绩","英语成绩","总分","平均分");p=head;while(p!=NULL){printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10f\n",p->num,p->name,p->cgrade,p->mg rade,p->egrade,p->total,p->ave);p=p->next;}printf("--------------------------------------------------------------------------------\n");printf("\t\t\22 学生成绩管理系统主菜单\22\n");printf("\t\t\22 \22\n");printf("\t\t\22 1.增加学生记录\22\n");printf("\t\t\22 2.删除学生记录\22\n");printf("\t\t\22 3.查询学生记录\22\n");printf("\t\t\22 4.修改学生记录\22\n");printf("\t\t\22 5.退出\22\n");printf("\t\t请选择: 1-5:");scanf("%d",&select);switch(select){case 1:Add();break;case 2:Del();break;case 3:Qur();break;case 4:Modefy();break;case 5:break;default :Wrong();break;}}void Add(){/*输入待插学生的学号*/printf("请输入待插学生学号:");printf("姓名:");scanf("%s",new_name);printf("该生三科成绩:");scanf("%d%d%d",&new_cgrade,&new_mgrade,&new_egrade);new_total=new_cgrade+new_mgrade+new_egrade;new_ave=new_total/3.0;/*在单链表中寻找满足学号>new_num的第一条记录p,并记录其前驱q*/ p=head; q=head;while(p!=NULL&&strcmp(p->num, new_num)<0){ q=p;p=p->next;}/*建立新结点*/r=(STU *)malloc(sizeof(STU));strcpy(r->num, new_num);strcpy(r->name, new_name);r->cgrade=new_cgrade;r->mgrade=new_mgrade;r->mgrade=new_egrade;r->total=new_total;r->ave=new_ave;/*在q结点后面(p结点前面)插入新结点r*/if(p!=head) /*当待插位置不在第一位置*/{ r->next=q->next;q->next=r;}else /*应该在头结点前插入*/{ r->next=p;head=r;}/*输出新单链表*/printf("插入新结点后的单链表为:");printf("\n\n计科系**班第*学年第*学期**课程成绩表\n");printf("--------------------------------------------------------------------------------\n");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","学号","姓名","c成绩","数学成绩","英语成绩","总分","平均分");p=head;while(p!=NULL){printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10f\n",p->num,p->name,p->cgrade,p->mg rade,p->egrade,p->total,p->ave);p=p->next;}printf("--------------------------------------------------------------------------------\n");printf("--------------------------------------------------------------------------------\n");printf("\t\t\22 学生成绩管理系统主菜单\22\n");printf("\t\t\22 \22\n");printf("\t\t\22 1.增加学生记录\22\n");printf("\t\t\22 2.删除学生记录\22\n");printf("\t\t\22 3.查询学生记录\22\n");printf("\t\t\22 4.修改学生记录\22\n");printf("\t\t\22 5.退出\22\n");printf("\t\t请选择: 1-5:");scanf("%d",&select);switch(select){case 1:Add();break;case 2:Del();break;case 3:Qur();break;case 4:Modefy();break;case 5:break;default :Wrong();break;}}void Del(){/*输入待删学生的学号*/printf("请输入待删学生学号:");scanf("%s", new_num);/*在单链表中寻找学号=new_num的记录p,并记录其前驱q*/p=head; q=head;while(p!=NULL&&strcmp(p->num, new_num)<0){ q=p;p=p->next;}/*判断是否找到该结点*/if(p!=NULL&&strcmp(p->num, new_num)==0){ if(p!=head) /*若不是头结点*/q->next=p->next;elsehead=p->next;free(p);}else printf("未找到该学生!\n");/*输出新单链表*/printf("删除结点后的单链表为:");printf("\n\n计科系**班第*学年第*学期**课程成绩表\n");printf("--------------------------------------------------------------------------------\n");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","学号","姓名","c成绩","数学成绩","英语成绩","总分","平均分");p=head;while(p!=NULL){printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10f\n",p->num,p->name,p->cgrade,p->mg rade,p->egrade,p->total,p->ave);p=p->next;}printf("--------------------------------------------------------------------------------\n");printf("--------------------------------------------------------------------------------\n");printf("\t\t\22 学生成绩管理系统主菜单\22\n");printf("\t\t\22 \22\n");printf("\t\t\22 1.增加学生记录\22\n");printf("\t\t\22 2.删除学生记录\22\n");printf("\t\t\22 3.查询学生记录\22\n");printf("\t\t\22 4.修改学生记录\22\n");printf("\t\t\22 5.退出\22\n");printf("\t\t请选择: 1-5:");scanf("%d",&select);switch(select){case 1:Add();break;case 2:Del();break;case 3:Qur();break;case 4:Modefy();break;case 5:break;default :Wrong();break;}}void Qur(){int select;printf("\t\t\22 1.以学号查询\22\n");printf("\t\t\22 2.以姓名查询\22\n");printf("请输入:1-2:");scanf("%d",&select);switch(select){case 1:{printf("请输入查询学生学号:");scanf("%s", new_num);/*在单链表中寻找学号=new_num的记录p,并记录其前驱q*/p=head; q=head;while(p!=NULL&&strcmp(p->num, new_num)<0){ q=p;p=p->next;}/*判断是否找到该结点*/if(p!=NULL&&strcmp(p->num, new_num)==0){printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","学号","姓名","c成绩","数学成绩","英语成绩","总分","平均分");printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10f\n",p->num,p->name,p->cgrade,p->mgr ade,p->egrade,p->total,p->ave);}else printf("未找到该学生!\n");}break;case 2:{printf("请输入查询学生姓名:");scanf("%s", new_name);/*在单链表中寻找学号=new_name的记录p,并记录其前驱q*/p=head; q=head;while(p!=NULL&&strcmp(p->name, new_name)!=0){ q=p;p=p->next;}/*判断是否找到该结点*/if(p!=NULL&&strcmp(p->name, new_name)==0){printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","学号","姓名","c成绩","数学成绩","英语成绩","总分","平均分");printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10f\n",p->num,p->name,p->cgrade,p->mgr ade,p->egrade,p->total,p->ave);}else printf("未找到该学生!\n");}break;}printf("--------------------------------------------------------------------------------\n");printf("\t\t\22 学生成绩管理系统主菜单\22\n");printf("\t\t\22 \22\n");printf("\t\t\22 1.增加学生记录\22\n");printf("\t\t\22 2.删除学生记录\22\n");printf("\t\t\22 3.查询学生记录\22\n");printf("\t\t\22 4.修改学生记录\22\n");printf("\t\t\22 5.退出\22\n");printf("\t\t请选择: 1-5:");scanf("%d",&select);switch(select){case 1:Add();break;case 2:Del();break;case 3:Qur();break;case 4:Modefy();break;case 5:break;default :Wrong();break;}}void Modefy(){printf("请输入要修改学生学号:");scanf("%s", new_num);/*在单链表中寻找学号=new_num的记录p,并记录其前驱q*/p=head; q=head;while(p!=NULL&&strcmp(p->num, new_num)<0){ q=p;p=p->next;}if(p!=NULL&&strcmp(p->num, new_num)==0){strcpy(p->num, new_num);printf("重新输入该学生信息:");printf("姓名:");scanf("%s",p->name);printf("该生三科成绩:");scanf("%d%d%d",&p->cgrade,&p->mgrade,&p->egrade);p->total=p->cgrade+p->mgrade+p->egrade;p->ave=p->total/3.0;printf("修改后的单链表为:");printf("\n\n计科系**班第*学年第*学期**课程成绩表\n");printf("--------------------------------------------------------------------------------\n");printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n","学号","姓名","c成绩","数学成绩","英语成绩","总分","平均分");p=head;while(p!=NULL){printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10f\n",p->num,p->name,p->cgrade,p->mg rade,p->egrade,p->total,p->ave);p=p->next;}printf("--------------------------------------------------------------------------------\n");}printf("--------------------------------------------------------------------------------\n");printf("\t\t\22 学生成绩管理系统主菜单\22\n");printf("\t\t\22 \22\n");printf("\t\t\22 1.增加学生记录\22\n");printf("\t\t\22 2.删除学生记录\22\n");printf("\t\t\22 3.查询学生记录\22\n");printf("\t\t\22 4.修改学生记录\22\n");printf("\t\t\22 5.退出\22\n");printf("\t\t请选择: 1-5:");scanf("%d",&select);switch(select){case 1:Add();break;case 2:Del();break;case 3:Qur();break;case 4:Modefy();break;case 5:break;default :Wrong();break;}}void Wrong(){printf("输入错误!!!!\n");printf("请输入1-5:\n");printf("--------------------------------------------------------------------------------\n"); printf("\t\t\22 学生成绩管理系统主菜单\22\n");printf("\t\t\22 \22\n");printf("\t\t\22 1.增加学生记录\22\n");printf("\t\t\22 2.删除学生记录\22\n");printf("\t\t\22 3.查询学生记录\22\n");printf("\t\t\22 4.修改学生记录\22\n");printf("\t\t\22 5.退出\22\n");printf("\t\t请选择: 1-5:\n");scanf("%d",&select);switch(select){case 1:Add();break;case 2:Del();break;case 3:Qur();break;case 4:Modefy();break;case 5:break;default :Wrong();break;}}。

c语言学生成绩信息管理系统源代码

c语言学生成绩信息管理系统源代码

C语言学生成绩信息管理系统源代码一、概述在学校教学管理工作中,学生成绩信息管理是一个至关重要的环节。

为了方便高效地进行学生成绩信息的录入、查询和管理,我们可以利用C语言编写一个学生成绩信息管理系统。

本文将介绍该系统的源代码,并对其进行详细的解释和讲解。

二、系统功能需求1. 录入学生成绩信息2. 查询学生成绩信息3. 修改学生成绩信息4. 删除学生成绩信息5. 显示所有学生成绩信息三、系统源代码实现```c#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义学生结构体typedef struct student {int id; // 学号char name[20]; // 尊称float score; // 成绩} Student;// 全局变量int count = 0; // 记录学生数量Student students[100]; // 学生数组// 录入学生成绩信息void inputStudentInfo() {printf("请输入学生学号:");scanf("d", students[count].id);printf("请输入学生尊称:");scanf("s", students[count].name); printf("请输入学生成绩:");scanf("f", students[count].score); count++;}// 查询学生成绩信息void queryStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {printf("学生信息如下:\n");printf("学号:d\n", students[i].id);printf("尊称:s\n", students[i].name);printf("成绩:.2f\n", students[i].score);return;}}printf("未找到该学生信息!\n");}// 修改学生成绩信息void modifyStudentInfo(int id, char *name, float score) { for (int i = 0; i < count; i++) {if (students[i].id == id) {strcpy(students[i].name, name);students[i].score = score;printf("修改成功!\n");return;}}printf("未找到该学生信息!\n");}// 删除学生成绩信息void deleteStudentInfo(int id) {for (int i = 0; i < count; i++) {if (students[i].id == id) {for (int j = i; j < count - 1; j++) { students[j] = students[j + 1]; }count--;printf("删除成功!\n");return;}}printf("未找到该学生信息!\n");}// 显示所有学生成绩信息void displayAllStudentInfo() {if (count == 0) {printf("暂无学生信息!\n");return;}printf("学生成绩信息如下:\n");for (int i = 0; i < count; i++) {printf("学号:d,尊称:s,成绩:.2f\n", students[i].id, students[i].name, students[i].score);}}int m本人n() {int choice, id;char name[20];float score;while (1) {printf("欢迎使用学生成绩信息管理系统!\n");printf("1. 录入学生成绩信息\n");printf("2. 查询学生成绩信息\n");printf("3. 修改学生成绩信息\n");printf("4. 删除学生成绩信息\n");printf("5. 显示所有学生成绩信息\n");printf("6. 退出系统\n");printf("请选择操作:");scanf("d", choice);switch (choice) {case 1: // 录入学生成绩信息inputStudentInfo();break;case 2: // 查询学生成绩信息printf("请输入要查询的学生学号:"); scanf("d", id);queryStudentInfo(id);break;case 3: // 修改学生成绩信息printf("请输入要修改的学生学号:"); scanf("d", id);printf("请输入修改后的尊称:");scanf("s", name);printf("请输入修改后的成绩:");scanf("f", score);modifyStudentInfo(id, name, score); break;case 4: // 删除学生成绩信息printf("请输入要删除的学生学号:"); scanf("d", id);deleteStudentInfo(id);break;case 5: // 显示所有学生成绩信息displayAllStudentInfo();break;case 6: // 退出系统printf("感谢使用学生成绩信息管理系统!\n");exit(0);default:printf("请输入正确的操作!\n");}}return 0;}```四、系统运行效果1. 运行系统后,会出现一个菜单,根据需求选择相应的操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XXXXX
课程设计说明书
汇编语言课程设计
班级: 网络B101 姓名: XXX
学号XXX
设计题目: 学生成绩管理
设计时间: 2012.12.09 至2012.12.21
指导教师: XXX
评语:_______________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
评阅成绩:___________评阅教师:____________ 一、课程设计的目的
进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。

二、设备与环境
PC兼容机、Windows操作系统、汇编程序masm for windows 2010
三、课程设计要求
1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。

2.遵循模块化、结构化的程序设计方法。

3.要求程序必须正确。

4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。

5.要求程序结构合理,语句使用得当。

6.适当追求编程技巧和程序运行效率。

四、课程设计的课题和分析
题目:学生成绩管理
分析:建立学生成绩文档;输入学生各门功课成绩;(假设3门功课);修改指定学号的学生成绩;统计指定学号的学生的平均成绩、总成绩,并在屏幕上显示;统计指定学号课程的平均成绩,并在屏幕上显示;每门课程成绩分析在屏幕上显示3门课程的各个分数段的学生人数;(分数段为:>=90;80~89;70~79;60~69;<=59)此处可以以表格的形式给出数据,或者以坐标曲线的形式给出。

对学生成绩记录进行检索(按学号、姓名), 成绩排序(按总成绩降序排列), 退出,最好用到文件处理。

五、流程图、总体设计、详细设计
学生成绩管理,最基本能实现的的功能是输入学号,同时显示该学生的基本的信息,我设计的成绩管理系统功能还包括了显示该生的语文,英语,数学三门学科的成绩,求出了该生的总分,以及该生的平均分,动态输入学生的成绩,而且成绩是按照三位数显示的,可以输入任意多的学生人数,每个学生都是三门课程,最后统计输入所有学生的各科各个分数段的人数,最后显示出所有学生的成绩排名情况。

为了使系统更实际一些,我设计的系统包括建立了文件,方便学生
的信息一次录入之后可以保存该数据,将该数据保存在score.txt文件中,而且文件的路径与该软件默认的安装路径一致;为了使系统更方便用户使用,我设计了菜单,菜单中设计了六个功能,包括插入,删除,查询,修改,查看,退出等。

以下是对程序中常用的六个个功能进行解析:
1、数据输入功能:这是必不缺少的功能,学号的输入,成绩的输入都离不了这
个功能,在输入成绩时,特地加了一个判断功能,在输入不合理的成绩时,程序将提示出错,并要求重新输入。

在输入学生学号的时候,程序首先会判断此学生的成绩是否存在,如果存在,则程序提示需重新输入。

插入一条学生记录子模块,搜索可用单元,接收输入的记录,并写入文件。

建立成绩表子模块,控制输入界面,并多次调用插入记录子模块,完成成绩的建立。

2、修改功能:考虑到会存在在输入成绩时,容易输入错误,或者发生个别学生
的试卷被误判需修改成绩等情况,所以加了此功能,在发生以上情况时可以调用此功能,修改指定学生的成绩。

3、删除学生信息的功能。

如果输入的学生信息根本不存在,或者发生其它情况
需删除一个无意义的学生信息时,可以调用此功能。

此功能将实现将指定学号学生的信息删除。

4、信息查找功能:当需要查询某个学生的成绩或者检查输入是否有误时,可以
调用此功能,此功能实现将指定学号学生的成绩显示出来。

实际上在调用此功能的同时,程序会首先求的总成绩,平均成绩,然后产生排名结果,最后将数据信息显示。

5、显示排名信息功能:此功能会将学生成绩自动相加,得到每位学生的总成绩
及平均成绩,然后进行排名,得到每个学生的名词,最后按照输入顺序将所有学生的学号,语文成绩,英语成绩,数学成绩,平均成绩,总成绩,名次依次输出。

模块中排名处理、学科平均成绩计算、均需取出某一学科的所有学生成绩,因而此操作作为公用子程序以供调用。

个人总分及平均分处理较为简单,根据索引逐条处理记录。

排名处理。

排名结果为一维数组,与学科成绩存在对应关系。

查询学生记录,先进行学号匹配,再输出一条记录;查询该生的所有信息。

6、文件写入及退出功能。

此功能实现将学生的信息保存在一个文件里。

此程序
默认将文件放在C盘下,名称为:score,属性为txt格式的文本文档。

该文档能够保存数据,以便数据不需要重复录入,是系统更能满足用户需求。

写入文件完毕后,关闭文件,并退出程序。

该程序的流程图:
文件创建和菜单显示:
在创建文件时使用命令请求创建文件,以下是菜单显示,首先显示菜单的界面,1号功能接收功能,程序先和菜单中所有的功能都进行比较,假如都不是功能菜单,则提示输入错误,重新输入,假如输入正确,则调用相对应的子程序。

文件内容显示:
在文件查找的子程序会显示该生的学号,三门的成绩,该生的总分,平均分和该生成绩的排名情况,则在显示学生信息之前先处理数据,成绩和总分是按照三位数的处理,学号和名次是按照两位数处理的,总分是字类型,其他的是字节类型,所以必须要转换基址才能找到该生相对应的总分。

文件的删除则是先找到该学生的信息,然后显示该生的成绩缓存区的地址的下一位,则显示的是空白。

总分和名次
定义子程序sum proc near,先是从存放各科的缓存区移出数据,然后相加,采用循环,对用户输入的数据都是按照这个规则求出该生的总分;ping proc near 是求出该生的平均分,把之前存放在zc[bx]的总分数据取出来,然后除以3;。

相关文档
最新文档