当前位置:文档之家› c语言学生成绩管理系统含源代码

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

C 语言程序设计作业一设计项目:学生成绩管理系统二总体设计:1 程序设计组成框图:2:模块功能说明:1 输入功能:输入学生姓名学号及成绩。

2 查看功能:输出姓名学号及各科成绩。

3 查询功能:通过学号查询学生姓名及各科成绩。

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()函数实现添加学生成绩。

vii.在菜单界面输入7,调用delscore()函数实现删除指定学生成绩。

viii.在菜单界面输入8,调用savescore()函数将学生成绩信息保存。

ix.在菜单界面输入9,退出成绩管理系统。

三程序运行效果截图1 主菜单2 输入成绩3 查看成绩4 查询成绩5统计成绩6修改成绩7 添加成绩8 删除成绩9保存成绩四个人总结整个程序主要运用了课本上的基础知识,并未有太大创新,通过for循环,循环输入学生成绩。

在学生成绩排序中运用选择法,同时实现学生名次的确定。

在删除指定学生成绩时,先确定信息存储位置即其在结构体数组中的序号,通过结构体变量的整体赋值将从指定位置以后的学生信息赋给前一个结构体变量,并将学生总数n减1,实现删除学生成绩信息。

源代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<process.h>#include<conio.h>#define N 30#define M 3typedef struct student{ char number[10];char name[20];float score[M];float aver;float total;}STU;STU stu[N];int n;void inputscore(void);void savescore(void);void avergescore(void);void total(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);void main(){ short int flag=0;menu();do{ flag=1;switch(getch()){ case '1' : inputscore();break; /*输入成绩*/case '2' : lookscore();break; /*查看成绩*/case '3' : searchscore();break; /*查找成绩*/case '4' : statistic();break; /*成绩统计*/case '5' : modify();break; /*修改成绩*/case '6' : add();break; /*添加成绩*/case '7' : delscore();break; /*删除成绩*/case '8' : savescore();break; /*保存成绩*/case '9' :exit(0); /*退出程序*/default : printf("输入有误\n");}printf("按任意键继续\n");getch();menu();}while (flag==1);}void menu(void){system("cls");printf("\n");printf("*********欢迎进入学生成绩管理系统**************\n");printf(" 菜单\n");printf("输入成绩-------------------------------------1\n");printf("查看成绩及成绩排序---------------------------2\n");printf("查询学生成绩---------------------------------3\n");printf("成绩统计-------------------------------------4\n");printf("修改成绩-------------------------------------5\n");printf("添加成绩-------------------------------------6\n");printf("删除成绩-------------------------------------7\n");printf("保存成绩-------------------------------------8\n");printf("退出系统-------------------------------------9\n");printf("**********************************************\n");printf("请输入您的选择\n");}/***************输入各个同学的学生信息(王超)******************************/ void inputscore(void){ int i,j;system("cls");printf("请输入学生总数:\n");scanf("%d",&n);printf("提示:*输入学号时请输入由1位大写字母和8位数字组成的学号,如P0********\n"); /*因二维表上下需对正故有此要求*/for(i=0;i<n;i++){ printf("请输入学生%d的学号姓名:\n",i+1);scanf("%s%s",stu[i].number,stu[i].name);printf("请输入学生成绩:\n");printf("高数\t物理\tC语言\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);}printf("成功输入\n");}/*****************计算各个同学的总分(孙友)*****************************/ void total(void){ int i,j;for(i=0;i<n;i++){ stu[i].total=0;for(j=0;j<M;j++){stu[i].total+=stu[i].score[j];}}}/*****************计算各个同学的平均分*****************************/void avergescore(void){ int i,j;for(i=0;i<n;i++){ stu[i].aver=0;for(j=0;j<M;j++){stu[i].aver+=stu[i].score[j];}stu[i].aver=stu[i].aver/M;}}/************查看学生成绩及根据平均分对学生进行排序*********************/ void lookscore(void){ int i,j,k;STU t;total();avergescore();system("cls");for(i=0;i<n-1;i++){ for(k=i,j=i+1;j<n;j++)if(stu[j].aver>stu[k].aver)k=j;if(k!=j){ t=stu[k];stu[k]=stu[i];stu[i]=t;}}printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");for(i=0;i<n;i++){ printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");}}/*****************通过输入学号查找学生成绩***************************/void searchscore(void){ char a[10];int i,j;system("cls");printf("请输入需查询的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){ if(strcmp(a,stu[i].number)==0){ printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");break; /*找到该学生成绩信息后跳出for循环*/}elseprintf("未找到该学生信息\n");}}/*******统计学生成绩信息,平均分及格率,优秀率****************/void statistic(void){ STU *p=stu;int i,j;float count=0.0,sum=0.0;system("cls");for(i=0;i<n;i++){ sum+=(p+i)->aver;}printf("该班级平均分为%4.2f\n",sum/n); /*平均分计算*/for(i=0;i<n;i++){ if((p+i)->aver>=60)count++;}printf("该班级及格率为%4.2f%%\n",count/n*100); /*及格率计算*/count=0.0;for(i=0;i<n;i++){ if((p+i)->aver>=90)count++;}printf("该班级优秀率为%4.2f%%\n",count/n*100); /*优秀率计算*/printf("平均分低于60的学生名单\n");for(i=0;i<n;i++){if(stu[i].aver<60)printf("%s\n",stu[i].name);} /*统计不及格学生名单*/}/***************修改学生成绩*****************/void modify(void){ char a[10];int i,j;system("cls");printf("请输入需要修改成绩的学生学号\n");scanf("%s",a);for(i=0;i<n;i++){ if(strcmp(a,stu[i].number)==0){ printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");printf("请重新输入该学生的学号姓名:\n");scanf("%s%s",stu[i].number,stu[i].name);printf("请重新输入学生成绩:\n");printf("高数\t物理\tC语言\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);/*找到该学生成绩后进行修改,跳出for 循环*/printf("修改成功\n");break;}elseprintf("请确认该学生是否为本班学生!\n");}}/*****************添加学生成绩********************/void add(void){ int a,i,j;system("cls");printf("请输入新增加的学生人数:\n");scanf("%d",&a);n=n+a;for(i=n-a;i<n;i++){ printf("请输入学生%d的学号姓名:\n",i+1);scanf("%s%s",stu[i].number,stu[i].name);printf("请输入学生成绩:\n");printf("高数\t物理\tC语言\n");for(j=0;j<M;j++)scanf("%f",&stu[i].score[j]);printf("添加成功\n");}}/*******************删除学生成绩*************************/void delscore(void){ int i,j,c;char m,a[10];system("cls");printf("请输入学生学号\n");scanf("%s",a);for(i=0;i<n;i++){ if(strcmp(a,stu[i].number)==0){ printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);for(j=0;j<M;j++)printf("%4.2f\t",stu[i].score[j]);printf("%4.2f\t",stu[i].total);printf("%4.2f",stu[i].aver);printf("\n");c=i;break;}elseprintf("未找到该学生信息\n");}printf("是否删除该学生成绩(y/n)\n");scanf("%s",&m);if(m=='y'){for(i=c;i<n-1;i++)stu[i]=stu[i+1]; /*结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/n=n-1; /*删除该学生信息后学生总数减一*/printf("删除成绩成功\n");}elseprintf("删除成绩失败\n");}/******************保存学生成绩************************/ void savescore(void){ FILE *fp;int i,flag=1;char m;system("cls");puts("是否保存学生成绩(y/n)");scanf("%s",&m);if(m=='y'){ if((fp=fopen("score.dat","wb"))==NULL){ printf("文件打开失败\n");return;}for(i=0;i<n;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1){ printf("保存失败\n");flag=0;}if(flag==1)printf("保存成功!\n");fclose(fp);}elsereturn;}。

相关主题