首页 > 学院 > 开发设计 > 正文

文章标题

2019-11-11 05:04:07
字体:
来源:转载
供稿:网友

C语言 学生成绩管理系统

#include<stdio.h>#include<string.h>typedef struct student{ char name[10]; int num; int score[3]; float ave; int sum;}STUD;void XMB(void); //显示主界面void add(STUD a[],int j); //添加若干条记录void delete(STUD a[],int j); //删除若干条记录void alt(STUD a[],int k); //修改若干条信息void view(STUD a[],int j); //按不同的方式查看所有信息void inqu(STUD a[],int k); //按不同的方式查找信息void viewave(STUD a[],int k); //查看符合平均值条件的信息int read(STUD a[]); //从文件中读入数据到数组,返回记录条数void sortd(STUD a[],int n); //降序排序void sortu(STUD a[],int j); //升序排序void sortu(STUD a[],int j); //按学号排序FILE *f1;STUD term;int main(void){ STUD a[100]; int m,n,j,k; char c; j=read(a); for(k=0;k<j;k++){ a[k].sum=a[k].score[0]+a[k].score[1]+a[k].score[2]; a[k].ave=a[k].sum/3.0; } do{ XMB(); scanf("%d",&n); switch(n){ case 1:view(a,j);break; case 2:add(a,j);break; case 3:delete(a,j);break; case 4:alt(a,j);break; case 5:inqu(a,j);break; case 6:viewave(a,j);break; default:PRintf("输入有误!/n"); } printf("/n按任意键继续,按0键结束/n/n"); j=read(a); c=getch(); } while(c!='0');}void XMB(void){ printf("|—-------欢迎使用学生成绩管理系统------|/n"); printf("| 1.显示所有学生信息 |/n"); printf("| 2.添加若干条信息 |/n"); printf("| 3.删除指定学生信息 |/n"); printf("| 4.修改指定学生信息 |/n"); printf("| 5.查找指定学生信息 |/n"); printf("| 6.查看符合平均值条件学生的信息 |/n"); printf("|---------------------------------------|/n/n"); printf("请选择(1-6):");}int read(STUD a[]){ int m=0; if( (f1=fopen("学生成绩.txt","r+"))==NULL){ printf("文件不存在,请检查!/n"); exit(1); } while(fscanf(f1,"%s %d %d %d %d %f %d",a->name,&a->num,&a->score[0], &a->score[1],&a->score[2],&a->ave,&a->sum)!=EOF){ a++; ++m; } rewind(f1); fclose (f1); return m;}void sortd (STUD a[],int j){ int p,q,k; for(p=0;p<j-1;p++){ k=p; for(q=p+1;q<j;q++){ if(a[k].ave>a[q].ave){ k=q; } } if(k!=p){ term=a[k]; a[k]=a[p]; a[p]=term; } }}void sortu (STUD a[],int j){ int p,q,k; for(p=0;p<j-1;p++){ k=p; for(q=p+1;q<j;q++){ if(a[k].ave<a[q].ave){ k=q; } } if(k!=p){ term=a[k]; a[k]=a[p]; a[p]=term; } }}void sortn(STUD a[],int j){ int p,q,k; for(p=0;p<j-1;p++){ k=p; for(q=p+1;q<j;q++){ if(a[k].num>a[q].num){ k=q; } } if(k!=p){ term=a[k]; a[k]=a[p]; a[p]=term; } }}void view(STUD a[],int j){ int i,k,m; m=j; STUD term; printf("*********************/n"); printf(" 1.按学号查看所有信息/n"); printf(" 2.按照平均值升序查看/n"); printf(" 3.按照平均值降序查看/n"); printf("*********************/n"); printf("请选择:"); scanf("%d",&i); switch(i) { case 1:{ sortn(a,m);break; } case 2:{ sortd(a,m);break; } case 3:{ sortu(a,m);break; } } printf(" 姓名 学号 成绩1 成绩2 成绩3 平均分 总分/n"); for(k=0;k<j;k++){ printf("%6s %6d %6d %6d %8d %9.2f %6d/n",a[k].name,a[k].num,a[k].score[0], a[k].score[1],a[k].score[2],a[k].ave,a[k].sum); }}void add(STUD a[],int j){ int n,k,i; printf("请输入需要添加的记录条数:"); scanf("%d",&n); for(k=j;k<n+j;k++){ printf("姓名:/n"); scanf("%s",a[k].name); printf("学号:/n"); scanf("%d",&a[k].num); printf("分数一:/n"); scanf("%d",&a[k].score[0]); printf("分数二:/n"); scanf("%d",&a[k].score[1]); printf("分数三:/n"); scanf("%d",&a[k].score[2]); a[k].sum=a[k].score[0]+a[k].score[1]+a[k].score[2]; a[k].ave=a[k].sum/3.0; if( (f1=fopen("学生成绩.txt","a+"))==NULL){ printf("文件不存在,请检查!/n"); exit(1); } fprintf(f1,"%s %d %d %d %d %f %d/n",a[k].name,a[k].num,a[k].score[0], a[k].score[1],a[k].score[2],a[k].ave,a[k].sum); printf("/n添加成功!/n"); } rewind(f1); fclose(f1);}void delete(STUD a[],int k){ char name[10]; int num,n,i,j,p,q; int flag=0; printf("请输入需要删除的记录条数:"); scanf("%d",&p); for(q=0;q<p;q++){ printf("**********************/n"); printf("1.根据姓名删除记录/n"); printf("2.根据学号删除记录/n"); printf("**********************/n"); printf("/n请选择/n"); scanf("%d",&n); if(n==1){ printf("请输入姓名:"); scanf("%s",name); printf("/n"); } else { printf("请输入学号:"); scanf("%d",&num); printf("/n"); } for(i=0;i<k;i++){ if(a[i].num==num||(strcmp(a[i].name,name)==0)){ if(i==k) k=k-1; else{ for(j=i;j<k-1;j++){ a[j]=a[j+1]; } } flag=1; } } if(flag==0){ printf("输入信息有误!请检查!/n"); } else{ if( (f1=fopen("学生成绩.txt","w+"))==NULL){ printf("文件不存在,请检查!/n"); exit(1); } for(i=0;i<k-1;i++){ fprintf(f1,"%s %d %d %d %d %.2f %d/n", a[i].name, a[i].num, a[i].score[0], a[i].score[1],a[i].score[2],a[i].ave,a[i].sum); } printf("/n删除成功!/n/n"); } } rewind(f1); fclose(f1);}void alt(STUD a[],int k){ int flag=0; char name[10]; int num,n,i,j,p,q; printf("请输入需要修改的记录条数:"); scanf("%d",&p); for(q=0;q<p;q++){ printf("**********************/n"); printf("1.根据姓名修改记录/n"); printf("2.根据学号修改记录/n"); printf("**********************/n"); printf("/n请选择/n"); scanf("%d",&n); if(n==1){ printf("请输入姓名:"); scanf("%s",name); printf("/n"); } else { printf("请输入学号:"); scanf("%d",&num); printf("/n"); } for(i=0;i<k;i++){ if(a[i].num==num||(strcmp(a[i].name,name)==0)){ printf("请输入新的信息:/n"); printf("姓名:/n"); scanf("%s",a[i].name); printf("学号:/n"); scanf("%d",&a[i].num); printf("分数一:/n"); scanf("%d",&a[i].score[0]); printf("分数二:/n"); scanf("%d",&a[i].score[1]); printf("分数三:/n"); scanf("%d",&a[i].score[2]); flag=1; break; } } if(flag==0) printf("输入信息有误!/n"); else { if( (f1=fopen("学生成绩.txt","w+"))==NULL){ printf("文件不存在,请检查!/n"); exit(1); } for(i=0;i<k;i++){ fprintf(f1,"%s %d %d %d %d %.2f %d/n", a[i].name, a[i].num, a[i].score[0], a[i].score[1],a[i].score[2],a[i].ave,a[i].sum); } printf("/n修改成功!/n/n"); } } rewind(f1); fclose(f1);}void inqu(STUD a[],int k){ char name[10]; int number=0,n,i,j; int flag=0; printf("**********************/n"); printf("1.根据姓名查找记录/n"); printf("2.根据学号查找记录/n"); printf("**********************/n"); printf("/n请选择/n"); scanf("%d",&n); if(n==1){ printf("请输入姓名:"); scanf("%s",name); printf("/n"); } else { printf("请输入学号:"); scanf("%d",&number); printf("/n"); } for(i=0;i<k;i++){ if(a[i].num==number||(strcmp(a[i].name,name)==0)){ printf(" 姓名 学号 成绩1 成绩2 成绩3 平均分 总分/n"); printf("%6s %6d %6d %6d %8d %9.2f %6d/n",a[i].name,a[i].num,a[i].score[0], a[i].score[1],a[i].score[2],a[i].ave,a[i].sum); } flag=1; break; } if(flag==0) printf("输入信息有误!/n"); }void viewave(STUD a[],int k){ int i,n; printf("***************************/n"); printf("1.查找平均值大于90的学生/n"); printf("2.查找平均值小于60的学生/n"); printf("***************************/n请选择:"); scanf("%d",&n); printf(" 姓名 学号 成绩1 成绩2 成绩3 平均分 总分/n"); if(n==1){ for(i=0;i<k;i++){ if(a[i].ave>90) printf("%6s %6d %6d %6d %8d %9.2f %6d/n",a[i].name,a[i].num,a[i].score[0], a[i].score[1],a[i].score[2],a[i].ave,a[i].sum); } } else { for(i=0;i<k;i++){ if(a[i].ave<60) printf("%6s %6d %6d %6d %8d %9.2f %6d/n",a[i].name,a[i].num,a[i].score[0], a[i].score[1],a[i].score[2],a[i].ave,a[i].sum); } }}

这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表