#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
int iNumOfStu=0;
struct score
{
float math;
float english;
float computer;
};
struct student
{
int number;
char name[20];
struct score sco;
float average;
};
struct student stu[N];
void print_menu(void);//输出菜单
void choosemenu(void);//菜单选择
void input_student1(int);//输入学生信息
void input_student2(void);//输入总函数
void input_student3(int &,int);//判断学号是否重复
void input_student4(int,int);//覆盖原信息
void sort_student3(student s[],int);//按照英语成绩排序
void sort_student4(student s[],int);//按照计算机成绩排序
void sort_student2(student s[],int);//按照数学成绩排序
void sort_student5(student s[],int);//按照平均成绩排序
float input_score2(int);//计算学生平均成绩
void print_student2(void);//显示表头
void print_student3(int);//显示学生信息
void print_student1(int);//显示全部学生资料
void sort_student1(void);//排序总函数
void menu(void);//菜单调度总函数
int search_student2(int);//按学号查询学生信息并输出
void search_student3(int);//按平均分最高查询并输出
void search_student1(void);//查询总函数
void delete_student2(int,int);//删除学生信息
void delete_student1(void);//删除总函数
void change_student2(int);//修改学生资料
void change_student1(void);//修改总函数
void input_score3(int);//统计成绩
void input_score1(void);//统计成绩总函数
void print_help(void);//输出帮助信息
void exit_student(void);//退出系统
void save_student(student *,int);//保存学生信息
void main()
{
menu();
}
void save_student(student *s,int a)//保存学生信息
{
FILE *fp;
if((fp=fopen("d:\\学生信息.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
}
else
{
printf("保存信息到D盘\n");
fprintf(fp,"本班所有学生具体信息如下:\r\n");
fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n");
for(int i=0;i<a;i++)
{
fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average);
fprintf(fp,"\r\n");
}
fclose(fp);
printf("信息保存成功!\n");
}
}
void exit_student(void)//退出系统
{
exit(1);
}
void print_help(void)//输出帮助信息
{
printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N);
}
void input_score1(void)//统计成绩总函数
{
int c;
c=search_student2(iNumOfStu);
printf("学号:%d\n",stu[c].number);
printf("姓名:%s\n",stu[c].name);
input_score3(c);
printf("新成绩录入成功!\n");
stu[c].average=input_score2(c);
}
void input_score3(int a)//统计成绩
{
printf("数学新成绩:");
scanf("%f",&stu[a].sco.math);
printf("英语新成绩:");
scanf("%f",&stu[a].sco.english);
printf("计算机新成绩:");
scanf("%f",&stu[a].sco.computer);
}
void change_student2(int a)//修改学生资料
{
printf("学号:%d----修改为:",stu[a].number);
scanf("%d",&stu[a].number);
getchar();
printf("姓名:%s----修改为:",stu[a].name);
gets(stu[a].name);
printf("数学成绩:%.2f----修改为:",stu[a].sco.math);
scanf("%f",&stu[a].sco.math);
printf("英语成绩:%.2f----修改为:",stu[a].sco.english);
scanf("%f",&stu[a].sco.english);
printf("计算机成绩:%.2f----修改为:",stu[a].sco.computer);
scanf("%f",&stu[a].sco.computer);
}
void change_student1(void)//修改总函数
{
int c;
c=search_student2(iNumOfStu);
getchar();
printf("是否要修改此学生信息?(“y”代表是)");
char d;
scanf("%c",&d);
if(d=='y'||d=='Y')
{
change_student2(c);
stu[c].average=input_score2(c);
printf("信息修改成功!\n");
}
}
void delete_student1(void)//删除总函数
{
int c;
c=search_student2(iNumOfStu);
getchar();
printf("是否删除此条记录?(“y”代表是)");
char d;
scanf("%c",&d);
if(d=='y'||d=='Y')
{
delete_student2(c,iNumOfStu);
printf("记录已删除!\n");
}
}
void delete_student2(int a,int b)//删除学生信息
{
for(int i=a;i<b-1;i++)
{
stu[i]=stu[i+1];
}
--iNumOfStu;
}
void search_student1(void)//查询总函数
{
printf("1、按学号查询\n2、按平均分最高查询\n请选择:");
int c;
scanf("%d",&c);
switch(c)
{
case 1:
{
search_student2(iNumOfStu);
break;
}
case 2:
{
search_student3(iNumOfStu);
break;
}
default: break;
}
}
void menu(void)//菜单调度总函数
{
print_menu();
choosemenu();
}
void sort_student1(void)//排序总函数
{
printf("1、按数学成绩排序\n2、按英语成绩排序\n3、按计算机成绩排序\n4、按平均成绩排序\n请选择:");
int c;
scanf("%d",&c);
switch(c)
{
case 1:
{
sort_student2(stu,iNumOfStu);
break;
}
case 2:
{
sort_student3(stu,iNumOfStu);
break;
}
case 3:
{
sort_student4(stu,iNumOfStu);
break;
}
case 4:
{
sort_student5(stu,iNumOfStu);
break;
}
default: break;
}
}
void print_student1(int a)//显示全部学生资料
{
printf("本班所有学生具体信息如下\n");
print_student2();
for(int i=0;i<a;i++)
{
print_student3(i);
}
}
void print_student3(int a)//显示学生信息
{
printf("%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[a].number,stu[a].name,stu[a].sco.math,stu[a].sco.english,stu[a].sco.computer,stu[a].average);
}
void print_student2(void)//显示表头
{
printf(" 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\n");
}
void input_student4(int a,int b)//覆盖原信息
{
stu[a]=stu[b-1];
--iNumOfStu;
}
void input_student3(int &a,int b)//判断学号是否重复
{
if(a!=0)
{
int i=0;
do
{
if(stu[a].number==stu[i].number)
{
printf("此学号代表的学生已录入\n1、覆盖原信息\n2、重新输入\n请选择:");
int c;
scanf("%d",&c);
switch(c)
{
case 1:
{
input_student4(i,iNumOfStu);
a=iNumOfStu-1;
printf("信息已替换!\n");
break;
}
case 2:
{
printf("请重新输入学生信息:\n");
input_student1(iNumOfStu-1);
break;
}
default: break;
}
break;
}
++i;
}
while(i<b-1);
}
}
void print_menu(void)//输出菜单
{
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(" 10、退出系统\n");
printf("====================================\n");
printf("请选择:");
}
void input_student2(void)//输入总函数
{
char end;
printf("请输入学生信息(在最后一个学生信息录入完成后以“/”结束录入):\n");
for(int i=0;(end=getchar())!='/';i++)
{
input_student1(i);
++iNumOfStu;
input_student3(i,iNumOfStu);
}
for(int j=0;j<iNumOfStu;j++)
{
stu[j].average=input_score2(j);
}
}
void input_student1(int a)//输入学生信息
{
printf("学号:");
scanf("%d",&stu[a].number);
getchar();
printf("姓名:");
gets(stu[a].name);
printf("数学成绩:");
scanf("%f",&stu[a].sco.math);
printf("英语成绩:");
scanf("%f",&stu[a].sco.english);
printf("计算机成绩:");
scanf("%f",&stu[a].sco.computer);
}
float input_score2(int a)//计算学生平均成绩
{
return (stu[a].sco.math+stu[a].sco.english+stu[a].sco.computer)/3;
}
void search_student3(int a)//按平均分最高查询并输出
{
int max=0;
for(int i=0;i<a;i++)
{
if(stu[max].average<stu[i].average)
{
max=i;
}
}
print_student2();
print_student3(max);
}
void sort_student2(student s[],int a)//按照数学成绩排序
{
struct student temp;
for(int i=0;i<a-1;i++)
{
int max=i;
for(int j=i+1;j<a;j++)
if(stu[j].sco.math>stu[max].sco.math)
{
max=j;
}
if(max!=i)
{
temp=stu[max];
stu[max]=stu[i];
stu[i]=temp;
}
}
print_student2();
for(int k=0;k<a;k++)
{
print_student3(k);
}
}
void sort_student3(student s[],int a)//按照英语成绩排序
{
struct student temp;
for(int i=0;i<a-1;i++)
{
int max=i;
for(int j=i+1;j<a;j++)
if(stu[j].sco.english>stu[max].sco.english)
{
max=j;
}
if(max!=i)
{
temp=stu[max];
stu[max]=stu[i];
stu[i]=temp;
}
}
print_student2();
for(int k=0;k<a;k++)
{
print_student3(k);
}
}
void sort_student4(student s[],int a)//按照计算机成绩排序
{
struct student temp;
for(int i=0;i<a-1;i++)
{
int max=i;
for(int j=i+1;j<a;j++)
if(stu[j].sco.computer>stu[max].sco.computer)
{
max=j;
}
if(max!=i)
{
temp=stu[max];
stu[max]=stu[i];
stu[i]=temp;
}
}
print_student2();
for(int k=0;k<a;k++)
{
print_student3(k);
}
}
void sort_student5(student s[],int a)//按照平均成绩排序
{
struct student temp;
for(int i=0;i<a-1;i++)
{
int max=i;
for(int j=i+1;j<a;j++)
if(stu[j].average>stu[max].average)
{
max=j;
}
if(max!=i)
{
temp=stu[max];
stu[max]=stu[i];
stu[i]=temp;
}
}
print_student2();
for(int k=0;k<a;k++)
{
print_student3(k);
}
}
int search_student2(int a)//按照学号查找学生并输出
{
int num;
int c;
printf("请输入要查询的学号:");
scanf("%d",&num);
for(int i=0;i<a;i++)
{
if(num==stu[i].number)
{
c=i;
}
}
printf("此学生的信息是:\n");
print_student2();
print_student3(c);
return c;
}
void choosemenu(void)//菜单选择
{
int i;
scanf("%d",&i);
switch(i)
{
case 1:
{
input_student2();
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 2:
{
delete_student1();
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 3:
{
search_student1();
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 4:
{
change_student1();
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 5:
{
print_student1(iNumOfStu);
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 6:
{
input_score1();
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 7:
{
sort_student1();
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 8:
{
save_student(stu,iNumOfStu);
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 9:
{
print_help();
printf("按回车键返回主菜单");
getchar();
getchar();
menu();
break;
}
case 10:
{
exit_student();
}
default: break;
}
}
运行结果:
源文件下载地址:
http://115.com/file/clnq138g#一个简单的学生成绩管理系统.rar
(请将此地址复制到浏览器地址栏中访问下载页面)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
int iNumOfStu=0;
struct score
{
float math;
float english;
float computer;
};
struct student
{
int number;
char name[20];
struct score sco;
float average;
};
struct student stu[N];
void print_menu(void);//输出菜单
void choosemenu(void);//菜单选择
void input_student1(int);//输入学生信息
void input_student2(void);//输入总函数
void input_student3(int &,int);//判断学号是否重复
void input_student4(int,int);//覆盖原信息
void sort_student3(student s[],int);//按照英语成绩排序
void sort_student4(student s[],int);//按照计算机成绩排序
void sort_student2(student s[],int);//按照数学成绩排序
void sort_student5(student s[],int);//按照平均成绩排序
float input_score2(int);//计算学生平均成绩
void print_student2(void);//显示表头
void print_student3(int);//显示学生信息
void print_student1(int);//显示全部学生资料
void sort_student1(void);//排序总函数
void menu(void);//菜单调度总函数
int search_student2(int);//按学号查询学生信息并输出
void search_student3(int);//按平均分最高查询并输出
void search_student1(void);//查询总函数
void delete_student2(int,int);//删除学生信息
void delete_student1(void);//删除总函数
void change_student2(int);//修改学生资料
void change_student1(void);//修改总函数
void input_score3(int);//统计成绩
void input_score1(void);//统计成绩总函数
void print_help(void);//输出帮助信息
void exit_student(void);//退出系统
void save_student(student *,int);//保存学生信息
void main()
{
menu();
}
void save_student(student *s,int a)//保存学生信息
{
FILE *fp;
if((fp=fopen("d:\\学生信息.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
}
else
{
printf("保存信息到D盘\n");
fprintf(fp,"本班所有学生具体信息如下:\r\n");
fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n");
for(int i=0;i<a;i++)
{
fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average);
fprintf(fp,"\r\n");
}
fclose(fp);
printf("信息保存成功!\n");
}
}
void exit_student(void)//退出系统
{
exit(1);
}
void print_help(void)//输出帮助信息
{
printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N);
}
void input_score1(void)//统计成绩总函数
{
int c;
c=search_student2(iNumOfStu);
printf("学号:%d\n",stu[c].number);
printf("姓名:%s\n",stu[c].name);
input_score3(c);
printf("新成绩录入成功!<