学生管理系统,帮忙找错啊...
1、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出. 2、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1) 每一条记录包括一个学生的学号、姓名、3门课成绩 (2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录的输入。) (3)、成绩信息显示浏览功能:完成全部学生记录的显示。 (4)、查询功能:完成按姓名查找学生记录,并显示。 (5)成绩信息的删除:按学号进行删除某学生的成绩. (6)、排序功能:按学生平均成绩进行排序。 程序代码:
#include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXN 35 #define MAX_NAME 256 typedef struct student //学生信息 { int no; char name[MAX_NAME]; int Chinese,math,English,mark_ave,mark_tot; } STUDENT; /*-----------输入信息子程序---------*/ void input(STUDENT *data, int *len) { int no; putchar('\n'); printf("%s\n", "请输入新的记录,如果需要退出当前菜单请输入-1."); printf("%s\n", "格式:\n学号\n"); printf("%s\n", "姓名 语文 数学 英语"); putchar('\n'); printf("如:\n"); printf("1\n"); printf("杨江彬 93 95 89\n"); scanf("%d", &no); while(no != -1) { data[*len].no = no; scanf("%s%lf%lf%lf",data[*len].name,&data[*len].Chinese,&data[*len].math,&data[*len].English); data[*len].mark_ave=(data[*len].Chinese+data[*len].math+data[*len].English)/3.0; data[*len].mark_tot=data[*len].Chinese+data[*len].math+data[*len].English; (*len)++; scanf("%d",&no); } } /*---------------输出信息子程序---------------*/ void output(STUDENT *data, int len) { int i; system("cls"); printf("%8s","学号"); printf("%8s","姓名"); printf("%8s","语文"); printf("%8s","数学"); printf("%10s","英语"); printf("%12s","平均分"); printf("%10s","总分"); putchar('\n'); for(i=0;i<80;i++) putchar("="); putchar("\n"); for(i=0;i<len;i++) { printf("%8d",data[i].no); printf("%8s",data[i].name); printf("%8.1lf",data[i].Chinese); printf("%8.1lf",data[i].math); printf("%10.1lf",data[i].English); printf("%12.1lf",data[i].mark_ave); printf("%10.1lf",data[i].mark_tot); putchar('\n'); } for(i=0;i<80;i++) putchar('='); putchar('\n'); printf("按回车键继续."); getchar(); getchar(); } /*--------------排序子程序------------*/ void sort(STUDENT *data, int len) { int i,j,k; STUDENT temp; for(i=0;i<len-1;i++) { for(k=i,j=i+1;j<len; j++) if(data[k].mark_ave>data[j].mark_ave) k=j; if (k!=i) { temp = data[i]; data[i]=data[k]; data[k]=temp; } } } /*--------------------搜索子程序-----------------------*/ void find(STUDENT *data, int len) { int find_no,result; int i; lab:result=0; printf("%s\n","请输入需要查找的学生的学号,退出当前菜单请输入 -1."); scanf("%d",&find_no); if (find_no==-1) return; /*exit the fine sub program*/ while(data[result].no!=find_no&&result<len)result++; if (result>=len) { printf("%s\n","未查询到相关信息"); goto lab; } else { system("cls"); printf("%s\n", "查询信息如下:"); for(i=0;i<80;i++) putchar('='); putchar('\n'); printf("%8s","学号"); printf("%8s","姓名"); printf("%8s","语文"); printf("%8s","数学"); printf("%10s","英语"); printf("%12s","平均分"); printf("%10s","总分"); putchar('\n'); printf("%8d",data[result].no); printf("%8s",data[result].name); printf("%8.1lf",data[result].Chinese); printf("%8.1lf",data[result].math); printf("%10.1lf",data[result].English); printf("%12.1lf",data[result].mark_ave); printf("%10.1lf",data[result].mark_tot); putchar('\n'); for(i=0;i<80;i++) putchar('='); putchar('\n'); goto lab; } } /*-----------------插入子程序-------------*/ void insert(STUDENT *data, int *len) { int *no, pos; double Chinese,math,English,mark_ave,mark_tot; int i; char name[MAX_NAME]; lab:printf("%s\n","输入新的记录,退出当前菜单请输入-1."); printf("%s\n","格式:学号"); printf("%s\n","姓名,语文,数学,英语"); scanf("%d",&no); if(no==-1) return; data[*len].no=no; scanf("%s%lf%lf%lf",name,&Chinese,&math,&English); mark_ave=(Chinese+math+English)/3.0; mark_tot=Chinese+math+English; pos=0; while((data[pos].mark_ave<mark_ave)&&(pos<*len)) pos++; for(i=*len-1;i>=pos;i--) data[i+1]=data[i]; data[pos].no=no; strcpy(data[pos].name,name); data[pos].Chinese=Chinese; data[pos].math=math; data[pos].English=English; data[pos].mark_ave=mark_ave; data[pos].mark_tot=mark_tot; (*len)++; goto lab; } /*-------------删除子程序--------------*/ void delete_item(STUDENT *data, int *len) { int no,i,pos; lab: pos=0; printf("%s\n", "输入需要删除的学生的学号,退出当前菜单请输入-1."); scanf("%d",&no); if(no==-1) return; while((data[pos].no!= no)&&(pos<*len))pos=pos+1; if (pos>=*len) { printf("%s\n", "未找到需要删除的学生"); goto lab; } else { for(i=pos+1;i<*len;i++) data[i-1]=data[i]; *len=*len-1; if(*len==0) { printf("%s\n", "没有任何记录,请按回车键返回."); getchar(); getchar(); return; } goto lab; } } /*---------------统计子程序------------*/ void stat(STUDENT *data, int len) { int no_59=0,no_69=0,no_79=0,no_89=0,no_100=0; int i; for(i=0;i<len;i++){ if(data[i].mark_ave<=59) no_59++; else if(data[i].mark_ave<=69) no_69++; else if(data[i].mark_ave<=79) no_79++; else if(data[i].mark_ave<= 89) no_89++; else no_100++; } system("cls"); for(i=0;i<80;i++) putchar('='); putchar('\n'); printf("%10s","分数"); printf("%10s","0--59"); printf("%10s","60--69"); printf("%10s","70--79"); printf("%10s","80--89"); printf("%10s","90--100"); putchar('\n'); putchar('\n'); printf("%10s","学生"); printf("%10d",no_59); printf("%10d",no_69); printf("%10d",no_79); printf("%10d",no_89); printf("%10d",no_100); putchar('\n'); for(i=0;i<80;i++) putchar('='); putchar('\n'); printf("按回车键返回"); getchar(); getchar(); } /*---------------显示信息子程序------------*/ void paint() { int i; system("cls"); printf("%55s\n", "海都学院学生成绩管理系统\n"); printf(" 制作者: \n"); for(i=0;i<80;i++) putchar('='); putchar('\n'); printf(" 1 输入信息 2 输出信息\n"); printf(" 3 按平均分排序 4 按学号查找\n"); printf(" 5 插入 6 按学号删除\n"); printf(" 7 按平均分输出统计信息 8 保存到文件\n"); printf(" 0 退出\n"); for(i =0;i<=79;i++) putchar('='); putchar('\n'); printf("%s\n", "请输入各操作对应的序号:"); } void save(STUDENT *data, int len)//将数据保存到文件 { int i; FILE *fp; fp=fopen("成绩统计表.txt","w"); fprintf(fp,"%8s", "学号"); fprintf(fp,"%8s", "姓名"); fprintf(fp,"%8s", "语文"); fprintf(fp,"%8s", "数学"); fprintf(fp,"%10s", "英语"); fprintf(fp,"%12s", "平均分"); fprintf(fp,"%10s\n", "总分"); fprintf(fp,"========================================================================\n"); putchar('\n'); for(i=0;i<len;i++) { fprintf(fp,"%8d",data[i].no); fprintf(fp,"%8s",data[i].name); fprintf(fp,"%8.1lf",data[i].Chinese); fprintf(fp,"%8.1lf",data[i].math); fprintf(fp,"%10.1lf",data[i].English); fprintf(fp,"%12.1lf",data[i].mark_ave); fprintf(fp,"%10.1lf\n",data[i].mark_tot); } fprintf(fp,"========================================================================\n"); fclose(fp); printf("文件已保存到\"成绩统计表.txt\""); getchar();getchar(); } /*-----------主程序--------------*/ void main() { STUDENT data[MAXN]; int len=0; char ctrl_ch; paint(); scanf("%c",&ctrl_ch); switch(ctrl_ch) { ; case'1': input(data, &len); break; case'2': output(data, len); break; case'3': sort(data, len); break; case'4': find(data, len); break; case'5': insert(data, &len); break; case'6': delete_item(data, &len); break; case'7': stat(data,len); break; case'8': save(data,len); break; default: if (ctrl_ch!='\n') printf("%s\n","输入错误!"); break; } if (ctrl_ch!='\n') paint(); scanf("%c", &ctrl_ch); } }