学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能.docx
《学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能.docx(32页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能
/*4.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,编写一程序。
应用简单菜单和子函数调用方式实现下面的功能:
(1)从键盘输入10个学生的以上内容,存入文件stud.txt
(2)浏览显示成绩表(要求显示格式成绩时,格式较规范)
(3)将10个学生按照平均分数从高到低进行排序,结果存入文件stud1.txt
(4)输入任意的一个课程名,分数从高到低进行排序,结果存入文件stud2.txt
(5)向文件stud1.txt中插入一个记录,成绩排序不变,结果存入文件stud1.txt*/
#include"stdio.h"/*头文件名*/
#include"stdlib.h"/*头文件名,因为程序中用到了exit(结束程序)和函数*/
#include"string.h"/*头文件名,因为程序中用到了字符串函数*/
#defineN1000
/*************************************************************************************************/
/*****************************************定义结构体模块******************************************/
structstudent{
longnum;/*定义学生学号为长整型*/
charname[20];/*定义姓名为字符型,占12个字符*/
floatmath,English,physics,total,average;
floatTOT_math,TOT_English,TOT_physics,TOT_total,TOT_aver;
floataver_math,aver_English,aver_physics,aver_total,aver_average;
}student;/*定义结构体名称为student*/
/*************************************************************************************************/
/****************************************输入初始值模块*******************************************/
voidinput(structstudent*p,intsize){
inti;
for(i=0;iprintf("请输入学号:
");
while
(1){scanf("%ld",&p[i].num);
if(long(p[i].num)!
=p[i].num||long(p[i].num)<=0){/*输入判断*/
printf("输入错误,学号必须为整数,请重新输入:
");
fflush(stdin);}
else{break;}}
printf("请输入姓名:
");scanf("%s",p[i].name);
printf("请输入数学成绩:
");
while
(1){scanf("%f",&p[i].math);
if(float(p[i].math)!
=p[i].math||float(p[i].math)<=0||p[i].math>100||p[i].math<0){
printf("输入错误,数学成绩必须为0~100之间的数,请重新输入:
");
fflush(stdin);}
else{break;}}
printf("请输入英语成绩:
");
while
(1){scanf("%f",&p[i].English);
if(float(p[i].English)!
=p[i].English||float(p[i].English)<=0||p[i].English>100||p[i].English<0){
printf("输入错误,英语成绩必须为0~100之间的数,请重新输入:
");
fflush(stdin);}
else{break;}}
printf("请输入物理成绩:
");
while
(1){scanf("%f",&p[i].physics);
if(float(p[i].physics)!
=p[i].physics||float(p[i].physics)<=0||p[i].physics>100||p[i].physics<0){
printf("输入错误,英语成绩必须为0~100之间的数,请重新输入:
");
fflush(stdin);}
else{break;}}
printf("\n");
}
printf("信息录入成功!
\n\n");
}
/************************************************************************************************************/
/*************************************保存初始值到"初始二进制值.txt"模块*************************************/
voidsave(structstudent*p,intsize){/*保存模块*/
FILE*fp;inti;
if((fp=fopen("初始值二进制值.txt","wb+"))==NULL){/*建立文件*/
printf("cannotopenthefile\n");
}
for(i=0;ifwrite(&p[i],sizeof(student),1,fp);}/*快写函数,写到磁盘中为二进制数*/
fclose(fp);/*关闭文件*/
}
/************************************************************************************************************/
/*************************************保存初始值到"初始二进制值.txt"模块*************************************/
voidsave0(structstudent*p,intsize){/*保存模块*/
FILE*fp;inti;
if((fp=fopen("初始值二进制值1.txt","ab+"))==NULL){/*建立文件*/
printf("cannotopenthefile\n");
}
for(i=0;ifwrite(&p[i],sizeof(student),1,fp);}/*快写函数,写到磁盘中为二进制数*/
fclose(fp);/*关闭文件*/
}
/************************************************************************************************************/
/******************************************保存初始值到可浏览文件模块****************************************/
voidSAVE(structstudent*p,intsize){
FILE*fp;
inti,b=0;
charname[20];
printf("请输入保存初始值的可浏览文件名:
");
scanf("%s",name);
if((fp=fopen(name,"w+"))==NULL){
printf("文件名输入错误!
!
\n");
}
fprintf(fp,"\n\t\t----------------------------------------------------------\n");
fprintf(fp,"\t\t序号学号姓名数学英语物理\n");
fprintf(fp,"\t\t----------------------------------------------------------");
fprintf(fp,"\n");
for(i=0;ifprintf(fp,"\t\t%-6d%-12d%-12s%-8.2f%-8.2f%-8.2f\n",b,p[i].num,p[i].name,p[i].math,p[i].English,p[i].physics);
fprintf(fp,"\t\t----------------------------------------------------------\n");
}
fclose(fp);
printf("\n文件保存成功!
\n\n");
}
/************************************************************************************************************/
/******************************************读取初始值模块****************************************************/
intread(structstudent*p,intsize){
FILE*fp;inti,n=0;
if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){
printf("文件名输入错误!
!
\n");}
for(i=0;iif(fread(&p[i],sizeof(structstudent),1,fp)!
=0){n++;}}
fclose(fp);
returnn;
}
/************************************************************************************************************/
/******************************************读取输出初始值模块************************************************/
voidread_print(structstudent*p,intsize){
FILE*fp;inti,n=0,b=0;
if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){
printf("文件名输入错误!
!
\n");
}printf("\n\t\t----------------------------------------------------------\n");
printf("\t\t序号学号姓名数学英语物理\n");
printf("\t\t----------------------------------------------------------\n");
for(i=0;iif(fread(&p[i],sizeof(structstudent),1,fp)!
=0){n++;}}
for(i=0;iprintf("\t\t%-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].math,p[i].English);
printf("%-8.2f\n",p[i].physics);
printf("\t\t----------------------------------------------------------\n");
}
printf("\n\n");
fclose(fp);
}
/************************************************************************************************************/
/*********************************************计算总分和平均分模块*******************************************/
voidtotal_average(structstudent*p,intsize){/*求每位同学的总分和平均分模块*/
inti;
for(i=0;ip[i].total=p[i].math+p[i].English+p[i].physics;
/*每个同学的总分等于三科成绩之和*/
p[i].average=p[i].total/3;/*每个同学的平均分等于总分的1/3*/
}
}
/************************************************************************************************************/
/**************************************输出初始值总分和平均分模块*******************************************/
voidread_print1(structstudent*p,intsize){
voidtotal_average(structstudent*p,intsize);
FILE*fp;inti,n=0,b=0;
if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){
printf("文件名输入错误!
!
\n");
}printf("\n\t---------------------------------------------------------------------------\n");
printf("\t序号学号姓名数学英语物理总分平均分\n");
printf("\t---------------------------------------------------------------------------\n");
for(i=0;iif(fread(&p[i],sizeof(structstudent),1,fp)!
=0){n++;}}
total_average(p,n);
for(i=0;iprintf("\t%-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].math,p[i].English);
printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average);
printf("\t---------------------------------------------------------------------------\n");
}
printf("\n\n");
fclose(fp);
}
/************************************************************************************************************/
/***************************************将初始值按平均分排序模块*********************************************/
voidrange(structstudent*p,intsize){/*所有同学的成绩按平均分由高到低排序模块*/
inti,j,k;
structstudenttemp;/*定义一个student类型的变量备用*/
for(i=0;ik=i;
for(j=i+1;jif(p[k].average
temp=p[k];
p[k]=p[j];
p[j]=temp;}
}
}
/************************************************************************************************************/
/************************************输出初始值按平均分排序的结果模块****************************************/
intread_print2(structstudent*p,intsize){
voidtotal_average(structstudent*p,intsize);
voidrange(structstudent*p,intsize);
FILE*fp;inti,n=0,b=0;
if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){
printf("文件名输入错误!
!
\n");
}printf("\n\t---------------------------------------------------------------------------\n");
printf("\t学号姓名数学英语物理总分平均分名次\n");
printf("\t---------------------------------------------------------------------------\n");
for(i=0;iif(fread(&p[i],sizeof(structstudent),1,fp)!
=0){n++;}}
total_average(p,n);
range(p,n);
for(i=0;iprintf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English);
printf("%-8.2f%-10.2f%-8.2f%d\n",p[i].physics,p[i].total,p[i].average,b);
printf("\t---------------------------------------------------------------------------\n");
}
printf("\n\n");
fclose(fp);
returnn;
}
/************************************************************************************************************/
/********************保存初始值按平均分排序后结果到"初始值按平均分排序二进制值.txt"模块**********************************/
voidsave1(structstudent*p,intsize){/*保存模块*/
FILE*fp;inti;
if((fp=fopen("按平均分排序二进制值.txt","wb+"))==NULL){/*建立文件*/
printf("cannotopenthefile\n");
}
for(i=0;ifwrite(&p[i],sizeof(student),1,fp);}/*快写函数,写到磁盘中为二进制数*/
fclose(fp);/*关闭文件*/
}
/************************************************************************************************************/
/******************************************读取排序后结果模块************************************************
intread1(structstudent*p,intsize){
FILE*fp;inti,n=0;
if((fp=fopen("按平均分排序二进制值.txt","r+"))==NULL){
printf("文件名输入错误!
!
\n");}
for(i=0;iif(fread(&p[i],sizeof(structstudent),1,fp)!
=0){n++;}}
fclose(fp);
returnn;
}
/************************************************************************************************************/
/*******************************保存初始值按平均分排序后结果到可浏览文件模块*********************************/
voidSAVE1(structstudent*p,intsize){
FILE*fp;
inti,b=0;
charname[20];
printf("请输入保存排序结果的文件名:
");
scanf("%s",name);
if((fp=fopen(name,"w+"))==NULL){
printf("文件名输入错误!
!
\n");
}
fprintf(fp,"\n\t-----------------------------------