1、
C语言课程设计学生成绩管理系统完整版
33
2020年4月19日
文档仅供参考
#include
2、班级*/ char pro[20];/*专业*/ float score[5];/*储存5门功课的成绩*/ float ave;/*储存平均分*/ int year;/*入年*/ }stu[N]; int num; void panduani(int); /*经过i的值,判断信息要查找的信息是否存在*/ void output(); /*输出学生成绩函数(公共函数)*/ void init(); /*系统初始化函数*/ void newfile(); /*建立新的数
3、据文件*/ void read1(); /*从数据文件中读取数据*/ void weihu(); /*维护界面函数*/ void new1(); /*新增一个学生成绩函数*/ void xiugai(); /*修改学生成绩*/ void xgcj(int); /*修改成绩*/ void delete1(); /*删除学生信息函数*/ void tongji(); /*统计界面函数*/ void tongji
4、1(); /*计算每个学生平均分*/ void tongji2(); /*计算每门课程的平均分*/ void paixu1(); /*排序函数*/ void paino(); /*按学号排序*/ void paiave(); /*按平均分排序*/ void paidkcj(); /*按单科成绩排序*/ void change(int,int); /*交换结构体数组中的两个记录*/ void outputx(int);
5、 /*选择输出单科成绩*/ void find1(); /*查找界面函数*/ int find(char sno[]); /*按学号查找*/ int findname(char cname[]);/*按姓名查找*/ void findyear(int cyear); /*按入年查找*/ void save(); /*保存文件*/ void stop(); /*停顿函数*/ void stop() /*停顿函数 (公共函数)*/ { printf("Press A
6、ny Key To Continue...\n"); getchar(); } void output() /*输出学生成绩函数(公共函数)*/ { int i,j; printf("===================================================================\n"); printf("学号 姓名 班级 专业 入年 C语言 高数 大物 电路 模电\n"); printf("=======================================================
7、\n");
for(i=0;i 8、是否存在*/
newfile(); /*若不存在,新建数据文件*/
else
read1(); /*若存在,读取数据*/
}
void newfile() /*建立新的数据文件 */
{
int i;
FILE *fp;
if((fp=fopen("stu.dat","wb"))==NULL) /*创立二进制文件*/
{
printf("创立文件失败,请重新运行程序.\n"); /*显示"创立文件失败,请重新运行程序"*/
exit(0); /*终止程序*/
}
printf("初次运行,进 9、行数据初始化...\n");/*显示"初次运行,进行数据初始化..."*/
stop();
printf("请输入学生人数:");/*显示"请输入学生人数:"*/
scanf("%d",&num);
for(i=0;i 10、); /*显示"班级:"*/
gets(stu[i].grade);
printf("专业:"); /*显示"专业:"*/
gets(stu[i].pro);
printf("入年n:");/*显示"入年"*/
scanf("%d",&stu[i].year);
printf("C语言成绩:");/*显示"C语言成绩"*/
scanf("%f",&stu[i].score[0]);
printf("高数成绩:");/*显示"高数成绩"*/
scanf("%f",&stu[i].score[1]);
printf("大物成绩:");/*显 11、示"大物成绩"*/
scanf("%f",&stu[i].score[2]);
printf("电路成绩:");/*显示"电路成绩"*/
scanf("%f",&stu[i].score[3]);
printf("模电成绩:");/*显示"模电成绩"*/
scanf("%f",&stu[i].score[4]);
fwrite(&stu[i],1,sizeof(struct student),fp); /*把第i+1名学生成绩写入文件*/
}
fclose(fp);
printf("========================\n") 12、
printf(" 刚才输入的 %d 个数据为:\n",num); /*显示"刚才输入的 num 个数据为:"*/
printf("========================\n\n");
output();
}
void read1() /*从数据文件中读取数据 */
{
FILE *fp;
num=0; /*num为数据文件中实际存储的学生人数*/
fp=fopen("stu.dat","r");
if(fp==NULL) /*数据文件不存在*/
{
printf("文件打开失败!重新运行程序\n"); /*显示"文件打开失败! 13、重新运行程序"*/
exit(0);
}
while(!feof(fp)) /*文件结束检测"*/
{
fread(&stu[num],1,sizeof(struct student),fp);
num++;
}
num--;
fclose(fp);
printf("\t\t\t=======================================\n");
printf(" \t\t\t现有 %d 个学生的成绩:\n",num); /*显示"现有 NUM个学生的成绩:"*/
printf("\t\t\t================ 14、\n\n");
output();
}
void weihu() /*维护界面函数 */
{
char c1;
while(1)
{
printf("\n\n\n\t\t\t************************\n");
printf("\t\t\t* 维护 *\n");
printf("\t\t\t* 1. 新增 *\n"); /*新增*/
printf("\t\t\t* 2. 删除 *\n" 15、); /*删除(按学号)*/
printf("\t\t\t* 3. 修改 *\n"); /*修改*/
printf("\t\t\t* 9. 返回 *\n"); /*返回*/
printf("\t\t\t************************\n");
printf("\t\t\t 请选择:\n");/*请选择:*/
c1=getchar();
getchar();
if(c1=='9')
break;
switch(c1)
{
case '1':
new 16、1();
break;
case '2':
delete1();
case '3':
xiugai();
break;
default:
printf("选择有误,请重选!\n");/*"选择有误,请重选!"*/
}
}
}
void new1() /*新增一个学生成绩函数 */
{
printf("请输入学号:"); /*显示"请输入学号:"*/
gets(stu[num].no);
printf("姓名:"); /*显示"姓名:"*/
gets(stu 17、[num].name);
printf("班级:"); /*显示"班级:"*/
gets(stu[num].grade);
printf("专业:"); /*显示"专业:"*/
gets(stu[num].pro);
printf("入年:");/*显示"入年"*/
scanf("%d",&stu[num].year);
printf("C语言成绩:");/*显示"C语言成绩"*/
scanf("%f",&stu[num].score[0]);
printf("高数成绩:");/*显示"高数成绩"*/
scanf("%f",&stu[n 18、um].score[1]);
printf("大物成绩:");/*显示"大物成绩"*/
scanf("%f",&stu[num].score[2]);
printf("电路成绩:");/*显示"电路成绩"*/
scanf("%f",&stu[num].score[3]);
printf("模电成绩:");/*显示"模电成绩"*/
scanf("%f",&stu[num].score[4]);
num++;
printf("\n======================================\n");
printf("现有 %d个 19、学生的成绩:\n",num); /*显示"现有 NUM个学生的成绩:"*/
printf("======================================\n\n");
output();
}
void xiugai() /*修改学生成绩*/
{
char xg[11];
int i;
printf("\n请输入要修改学生的学号:\n\n");
gets(xg);
for(i=0;i 20、 {
printf("\n数据文件无该生信息!\n\n请重新输入学号.\n\n");
stop();
return;
}
xgcj(i);
}
void xgcj(int x) /*修改成绩*/
{
char xueke[5][10]={"C语言","高数","物理","电路","模电"};
char (*p)[10],c;
int j,k;
p=xueke;
for(;;)
{
printf("\n");
21、 printf("\t\t\t************************************\n\n");
printf("\t\t\t 成绩 \n");
printf("\t\t\t 1.C 语言 \n"); /*C语言*/
printf("\t\t\t 2.高数 \n"); /*高数*/
printf("\t\t\t 3.物理 22、 \n"); /*大学物理*/
printf("\t\t\t 4.电路 \n"); /*电路*/
printf("\t\t\t 5.模电 \n"); /*模电*/
printf("\t\t\t 9.返回 \n\n"); /*返回上级*/
printf("\t\t\t************************************\n\n");
p 23、rintf("\t请选择要修改的成绩(按 1.2.3.4.5.9):\n");
c=getchar();
getchar();
if(c=='9')break;
else if (c>='1'&&c<='5')
{
k=c-49;
printf("\n请输入 %s 成绩:\n",p+k);
scanf("%f",&stu[x].score[k]);
printf("\n修 息为:\n");
24、 printf("学号 姓名 班级 专业 入年 C语言 高数 大物 电路 模电\n");
printf("===================================================================\n");
printf("%s %s %s %s %d",stu[x].no,stu[x].name,stu[x].grade,stu[x].pro,stu[x].year);
for(j=0;j< 25、5;j++)
printf(" %.1f",stu[x].score[j]);
printf("\n");
}
else printf("\n选择有误,请重选!\n\n");
stop();
}
}
int find(char sno[]) /*按学号查找 */
{
int i;
for(i=0;i 26、return i;/*查找成功*/
return -1;/*查找失败*/
}
void delete1() /*删除学生信息函数*/
{
char cno[11];
int i,j;
printf("请输入要删除的学生学号:"); /*"请输入要删除的学生学号"*/
gets(cno);
i=find(cno);
if(i!=-1)
{for(j=i;j 27、绩:"*/
output();}
else {printf("请输入正确的学号. \n");
stop();}
}
void tongji() /*统计界面函数 */
{
int i;
char c2;
while(1)
{
printf("\n\n\n\t\t\t*******************************\n");
printf("\t\t\t* 统计 *\n");
printf("\t\t\t* 1. 学生平均分 *\n 28、"); /*计算学生平均分*/
printf("\t\t\t* 2. 课程平均分 *\n"); /*计算每门课程平均分*/
printf("\t\t\t* 9. 返回 *\n"); /*返回*/
printf("\t\t\t*******************************\n");
printf("\t\t\t请选择:\n");/*请选择:*/
c2=getchar();
getchar();
if(c2=='9') break;
switch(c2)
{
case '1 29、':
tongji1();
printf("\n\n学生平均分为:\n");
printf("===========================================\n");
printf("学号 姓名 入年 平均分\n");
printf("===========================================\n");
for(i=0;i 30、tu[i].ave);
stop();
break;
case '2':
tongji2();
break;
default:
printf("选择有误,请重选\n");/*"选择有误,请重选!"*/
}
}
}
void tongji1() /*计算每个学生平均分*/
{
int i,j;
for(i=0;i 31、 stu[i].ave=stu[i].ave/5;
}
}
void tongji2() /*计算每门课程的平均分*/
{
int i,j;
float sum;
float avec[5]; /*储存每门课的平均分*/
for(j=0;j<5;j++)
{
sum=0;
for(i=0;i 32、\n");
printf("C语言 高数 大物 电路 模电\n");
printf("===================================\n");
for(i=0;i<5;i++)
printf("%-7.1f",avec[i]);
printf("\n");
stop();
}
void paixu1() /*排序界面*/
{
char c3;
for(;;)
{
printf("\n\n\n");
printf("\t\t 33、\t***********************************\n");
printf("\t\t\t* 排序 * \n");
printf("\t\t\t* 1. 按学号排序 * \n"); /*按学号排序*/
printf("\t\t\t* 2. 按平均分排序 * \n"); /*按平均分排序*/
printf("\t\t\t* 3. 按单科成绩排序 * \n"); /*按单科成绩排序*/
34、 printf("\t\t\t* 9. 返回 * \n"); /*返回*/
printf("\t\t\t***********************************\n\n");
printf("\t请选择:(按1.2.3.9):\n");/*请选择:*/
c3=getchar();
getchar();
if(c3=='9') break;
switch(c3)
{
case '1':paino();break;
case '2':paiav 35、e();break;
case '3':paidkcj();break;
default:
printf("\n选择有误,请重选!\n\n");/*选择有误,请重选!*/
stop();
}
}
}
void paino() /*按学号排序*/
{ /*按学号从低到高冒泡法排序*/
int i,j;
for(i=0;i 36、0)
change(j,j+1);
printf("\n排序后为:\n"); /*"排序后为:"*/
output();
}
void paiave() /*按平均分排序 */
{ /*按平均分从高到低冒泡法排序*/
int i,j;
tongji1(); /*计算平均成绩*/
for(i=0;i 37、
printf("\n\t排序后为:\n"); /*"排序后为:"*/
printf("\t===============================================\n");
printf("\t学号 姓名 入年 平均分 排名\n");
printf("\t===============================================\n");
for(i=0;i 38、 stu[i].name,stu[i].year,stu[i].ave,i+1);
stop();
}
void paidkcj() /*按单科成绩排序*/
{
char c;
int i,j,k;
while(1)
{
printf("\n");
printf("\t\t\t************************************\n\n");
printf("\t\t\t 单科成绩 \n");
prin 39、tf("\t\t\t 1.C 语言 \n"); /*C语言*/
printf("\t\t\t 2.高数 \n"); /*高数*/
printf("\t\t\t 3.物理 \n"); /*大学物理*/
printf("\t\t\t 4.电路 \n"); /*电路*/
printf("\t\t\t 5.模电 40、 \n"); /*模电*/
printf("\t\t\t 9.返回 \n\n"); /*返回上级*/
printf("\t\t\t************************************\n\n");
printf("\t请选择:(按1.2.3.4.5.9):\n");
c=getchar();
getchar();
if(c=='9')break;
else if (c>='1'&&c<='5 41、')
{
k=c-49;
for(i=0;i 42、 }
}
void change(int i,int j) /*交换结构体数组中的两个记录*/
{
struct student temp;
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
void outputx(int k) /*选择输出单科成绩*/
{
char xueke[5][10]={"C语言","高数","物理","电路","模电"};
char (*p)[10]; /*定义一个指向包含10个字符型元素的一维数组的指针变量*/
int i;
43、
p=xueke;
printf("\n\t排序后为:\n");
printf("\t===============================================\n");
printf("\t学号 姓名 入年 %s 排名\n",p+k);
printf("\t===============================================\n");
for(i=0;i 44、no,
stu[i].name,stu[i].year,stu[i].score[k],i+1);
}
void find1() /*查找界面函数*/
{
char c4;
char cno[11],cname[10];
int i,cyear;
while(1)
{
printf("\t\t\t*************************************\n");
printf("\t\t\t* 查找 *\n");
printf("\t 45、\t\t* 1. 按学号查找 *\n"); /*按学号查找*/
printf("\t\t\t* 2. 按姓名查找 *\n"); /*按姓名查找*/
printf("\t\t\t* 3. 按入年查找 *\n"); /*按入年查找*/
printf("\t\t\t* 9. 返回 *\n"); /*返回*/
printf("\t\t\t*************************************\n"); 46、
printf("\t\t\t请选择:\n");/*请选择:*/
c4=getchar();
getchar();
if(c4==57) break;
switch(c4)
{
case '1':
printf("输入学号:\n");/*"输入学号:"*/
gets(cno);
i=find(cno);
panduani(i);
break;
case '2':
printf("输入姓名:\n");/*"输入姓名:"*/
gets(cname);
i=findname(cname);
p 47、anduani(i);
break;
case '3':
printf("输入入年:\n");/*"输入入年"*/
scanf("%d",&cyear);
findyear(cyear);
stop();
break;
default:
printf("选择有误,请重选!\n");/*"选择有误,请重选!"*/
}
}
}
int findname(char cname[]) /*按姓名查找*/
{
int i;
for(i=0;i 48、name)==0) /*判断两个字符串相等*/
return i; /*查找成功*/
return -1; /*查找失败*/
}
void findyear(int cyear)
{
int i,j,flag=0;
for(i=0;i 49、/*"查找到的学生信息为:"*/
printf("学号 姓名 班级 专业 入年 C语言 高数 大物 电路 模电\n");
printf("===================================================================\n");
for(i=0;i 50、s %d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year);
for(j=0;j<5;j++)
printf(" %.1f",stu[i].score[j]);
printf("\n");
}
}
}
}
void panduani(int i) /*经过i的值,判断信息要查找的信息是否存在*/
{
int j;
if(i==-1)
{
pri






