我之前写了一个,跟你要的功能差不多,参考一下吧,如有帮助,请采纳一下,谢谢。
代码链接(https://blog.csdn.net/qfl_sdu/article/details/118186493)
//学生成绩管理系统精简第二版
//整合部分
//主头函数部分
#include<stdio.h>
#include<stdlib.h> //清屏
#define ren 6 //定义班上的人
struct student //结构体
{
int num; //学号
char name[20]; //名字
int age; //年龄
float pingshi; //c成绩
float shiyan; //英语成绩
float shujuku; //数据库成绩
double zongping; //总成绩
}stu[ren];
struct number //结构体2
{ //用来承接第二个的修改之类的
int num;
}xh[1];
int main()
{ //在主界面输入后引用的函数
int i;
void a(); //1:录入
void b(); //2:查询, 修改
void c(); //3:出每个人的总分
void d(); //4:用于结束错误的输入
void a2(); //2_A部分用于输出查询
void b2(); //2_B部分用于修改
void c2(); //2_C部分用于删除
char n,opi=55; //输入的选择
printf("\t*************************欢迎查看学生成绩管理系统简介*************************\n\n");
printf("本程序为分析人数为%d的学生管理系统\n",ren);
printf("\n*本程序基本实现了:\n\n");
printf("*输入学生信息,查询学生信息,输出学生排名等的基本功能\n\n");
printf("*当输入错误数据时返回提示\n");
printf("\n\n按下回车键进入系统...");
getchar();
if(opi)system("cls"); // 清屏
for(i=0;i<=ren;i++)
stu[i]. num=4392+i;
printf("\t*************************欢迎使用学生成绩管理系统*************************\n\n");
printf("1:输入学生信息\n\n");
printf("2:查询学生信息\n\n");
printf("3:输出学生排名\n\n");
printf("6:退出系统\n\n");
printf("请正确输入\n\n\n`在这里插入代码片`\n");
printf("[请输入命令并按键回车以执行: 1 / 2 / 3 / 6 选择项目]:");
scanf("%d",&n); //输入n的值
//printf("%d",n); //测试输入
for(int q=0;q<=0;q++)
if(n!=1&&n!=6)
{
printf("\n请先输入数据!\n");
n=12;
}
while(n!=0&&n!=7)
{
printf("\n");
switch(n) //循环
{
case 1:a();break;
case 2:b();break;
case 3:c();break;
case 4:d();break;
case 6:printf("\n*******************谢谢使用!*******************\n");break;
break;
default :printf("\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n");
//printf("%d",n); //用于测试为何循环出错
}
if(n==6)break;
if(n!=6)
//if(n!=0)
{
if(n=0)n=7; //用于二级输入错误时退出程序
if(n!=6)
{
printf("1:输入学生信息\n\n");
printf("2:查询学生信息\n\n");
printf("3:输出学生排名\n\n");
printf("6:退出系统\n\n");
//printf("%d",n);
printf("[请输入命令: 1 / 2 / 3 / 6 选择项目]:");
scanf("%d",&n); //输入n的值
}
if(n!=6)printf("*请正确输入!\n\n");
if(n==6)printf("\n*******************谢谢使用!*******************\n");
}
}
if(n!=6) printf("\n\n\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n");
getchar();
}
//成绩输入记录部分
/* 子 函 数*/
/*个班的学生记录*/
void a() /* 输入一个班的学生记录*/
{
int i,o;
for(i=0;i<ren;i++) //ren个人的成绩
{
/* printf("请输入第%d位同学的信息并以逗号隔开:\n学号 姓名 年龄 C语言成绩 英语成绩 数据库成绩:\n",i+1);
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].pingshi,&stu[i].shiyan,&stu[i].kaoshi,&stu[i].shujuku);
*/
printf("\t请输入第%d位同学的信息:\n\n",i+1);
printf("*请正确输入\n\n");
printf("请输入学号:");
scanf("%d", &stu[i]. num);
for(o=1;o<=6;o++)
if(stu[i-o]. num==stu[i]. num)
{
printf("\n***请不要输入一样的学号呢~~\n\n");
}
printf("请输入姓名:");
scanf("%s", &stu[i]. name);
printf("请输入年龄:");
scanf("%f", &stu[i].age);
printf("请输入C语言成绩:");
scanf("%f", &stu[i]. pingshi);
printf("请输入英语成绩:");
scanf("%f", &stu[i]. shiyan);
printf("请输入数据库成绩:");
scanf("%f", &stu[i]. shujuku);
printf("\n###########################################\n\n\n\n");
}
printf("\n恭喜你,所有同学数据录入完成!\n");
printf("###########################################\n\n\n\n");
for(i=0;i<ren;i++)
stu[i].zongping=stu[i].pingshi+stu[i].shiyan+stu[i].shujuku; //计算总分部分
}
//void b() //根据学号查询学生并修改信息
/* 查询 */
void b() //由学号查询删除修改
{
int sno,p,i,*s,a,n; //son用来表示输入的学号;p表示判断;i用来循环查找
void a2(); //2_A部分用于输出查询
void b2(); //2_B部分用于修改
void c2(); //2_C部分用于删除
printf("请输入要选择的学号:\n"); //s用来代换 ;n用来三级菜单的输入
scanf("%d",&sno);
n=0;
for(i=0;i<=ren;i++)
{
n=n+1; //计算进行了几次循环
s=&a;
s=&stu[i].num; //不知道为什么比不了*因为是指针
p=0;
if(*s-sno==0)
{
p=1;//此时如果括号里面相等的话,这个的值就是1
//printf("%d\n",i); //调试
break;
//else break; //所以符合就是相等
//printf("\n\n%d\n",a); //a输出的是一直是10,不能用
//printf("%d\n",*s); //这个正常
}
}
if(p==1)
{
printf("\n已找到该学生\n\n\n");
printf("********************************************************\n");
printf("1.输出该学生的详情\n\n");
printf("2.修改该学生的详情\n\n");
printf("3.删除该学生的详情\n\n");
printf("\n\n请输入要进行的操作:");
n=n-1;
//printf("%d\n",n);
xh[1].num=n;
//printf("%d\n",n);
//printf("%d\n", xh[1].num);
scanf("%d",&n);
//开始第三级菜单
if(n!=0||n!=4)
{
printf("\n");
//if(n=0)n=6;
switch(n) //循环
{
case 1:a2();break; //将储存位置?发给下一步
case 2:b2();break;
case 3:c2();break;
case 0:n=6;break;
break;
default :printf("\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n");
}
}
}
if(p==0)
printf("查无此人!\n");
printf("********************************************************\n");
}
//4:输出成绩与排名\n\n
void c() //4:输出成绩与排名\n\n
{
int a[6]={0,1,2,3,4,5}; //定义数组来排名
int i,j,temp;
for(j=0;j<3;j++) //用了浮点法??
{
for(i=0;i<3-j;i++)
if(stu[a[i]].num>stu[a[i+1]].num) //用总学号排名
{
temp=a[i];a[i]=a[i+1];
a[i+1]=temp;
}
}
printf("\n###########################################\n");
printf("按学号顺序如下:\n");
printf("学号 姓名 C语言成绩 英语成绩 数据库成绩 总成绩\n");
for(i=0;i<ren;i++)
printf("%d %14s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].shiyan,stu[i].shujuku,stu[i].zongping);
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
}
//改成D部分
void d() //用于结束错误的输入
{
printf("\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n") ;
}
//2_A部分
//用于输出查询
void a2()
{
int a,*b; //b用来引用结构体2
b=&xh[1].num;
printf("%d\n",*b); //测试*b的值
printf("以下为这位同学的信息:\n\n");
/* printf("年龄为:%d\n\n",stu[*b].age);
printf("C语言成绩为:%d\n\n",stu[*b]. pingshi);
printf("英语成绩为:%d\n\n",stu[*b]. shiyan);
printf("数据库成绩为:%d\n\n",stu[*b]. shujuku);
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
*/
printf("学号 姓名 C语言成绩 英语成绩 结构体成绩 总成绩\n");
printf("%d %14s%14.2f%14.2f%14.2f%14.2f\n",stu[*b].num,stu[*b].name,stu[*b].pingshi,stu[*b].shiyan,stu[*b].shujuku,stu[*b].zongping);
printf("\n完成!\n");
}
//2_B部分
//用于修改
void b2()
{
int a,*b; //b用来引用结构体2
//b=&a;
b=&xh[1].num;
printf("%d\n",*b); //测试*b的值
printf("请输入这位同学的信息:\n\n");
printf("请输入年龄:");
scanf("%f", &stu[*b].age);
printf("请输入C语言成绩:");
scanf("%f", &stu[*b]. pingshi);
printf("请输入英语成绩:");
scanf("%f", &stu[*b]. shiyan);
printf("请输入数据库成绩:");
scanf("%f", &stu[*b]. shujuku);
stu[*b].zongping=stu[*b].pingshi+stu[*b].shiyan+stu[*b].shujuku; //计算总分部分
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
}
//2_C部分
//用于删除
void c2()
{
int a,*b; //b用来引用结构体2
b=&xh[1].num;
stu[*b].age=0;
stu[*b].pingshi=0;
stu[*b].shiyan=0;
stu[*b].shujuku=0;
stu[*b].zongping=stu[*b].pingshi+stu[*b].shiyan+stu[*b].shujuku; //计算总分部分
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
}
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
//学生成绩管理系统精简第二版
//整合部分
//主头函数部分
#include<stdio.h>
#include<stdlib.h> //清屏
#define ren 6 //定义班上的人
struct student //结构体
{
int num; //学号
char name[20]; //名字
int age; //年龄
float pingshi; //c成绩
float shiyan; //英语成绩
float shujuku; //数据库成绩
double zongping; //总成绩
}stu[ren];
struct number //结构体2
{ //用来承接第二个的修改之类的
int num;
}xh[1];
int main()
{ //在主界面输入后引用的函数
int i;
void a(); //1:录入
void b(); //2:查询, 修改
void c(); //3:出每个人的总分
void d(); //4:用于结束错误的输入
void a2(); //2_A部分用于输出查询
void b2(); //2_B部分用于修改
void c2(); //2_C部分用于删除
char n,opi=55; //输入的选择
printf("\t*************************欢迎查看学生成绩管理系统简介*************************\n\n");
printf("本程序为分析人数为%d的学生管理系统\n",ren);
printf("\n*本程序基本实现了:\n\n");
printf("*输入学生信息,查询学生信息,输出学生排名等的基本功能\n\n");
printf("*当输入错误数据时返回提示\n");
printf("\n\n按下回车键进入系统...");
getchar();
if(opi)system("cls"); // 清屏
for(i=0;i<=ren;i++)
stu[i]. num=4392+i;
printf("\t*************************欢迎使用学生成绩管理系统*************************\n\n");
printf("1:输入学生信息\n\n");
printf("2:查询学生信息\n\n");
printf("3:输出学生排名\n\n");
printf("6:退出系统\n\n");
printf("请正确输入\n\n\n`在这里插入代码片`\n");
printf("[请输入命令并按键回车以执行: 1 / 2 / 3 / 6 选择项目]:");
scanf("%d",&n); //输入n的值
//printf("%d",n); //测试输入
for(int q=0;q<=0;q++)
if(n!=1&&n!=6)
{
printf("\n请先输入数据!\n");
n=12;
}
while(n!=0&&n!=7)
{
printf("\n");
switch(n) //循环
{
case 1:a();break;
case 2:b();break;
case 3:c();break;
case 4:d();break;
case 6:printf("\n*******************谢谢使用!*******************\n");break;
break;
default :printf("\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n");
//printf("%d",n); //用于测试为何循环出错
}
if(n==6)break;
if(n!=6)
//if(n!=0)
{
if(n=0)n=7; //用于二级输入错误时退出程序
if(n!=6)
{
printf("1:输入学生信息\n\n");
printf("2:查询学生信息\n\n");
printf("3:输出学生排名\n\n");
printf("6:退出系统\n\n");
//printf("%d",n);
printf("[请输入命令: 1 / 2 / 3 / 6 选择项目]:");
scanf("%d",&n); //输入n的值
}
if(n!=6)printf("*请正确输入!\n\n");
if(n==6)printf("\n*******************谢谢使用!*******************\n");
}
}
if(n!=6) printf("\n\n\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n");
getchar();
}
//成绩输入记录部分
/* 子 函 数*/
/*个班的学生记录*/
void a() /* 输入一个班的学生记录*/
{
int i,o;
for(i=0;i<ren;i++) //ren个人的成绩
{
/* printf("请输入第%d位同学的信息并以逗号隔开:\n学号 姓名 年龄 C语言成绩 英语成绩 数据库成绩:\n",i+1);
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].pingshi,&stu[i].shiyan,&stu[i].kaoshi,&stu[i].shujuku);
*/
printf("\t请输入第%d位同学的信息:\n\n",i+1);
printf("*请正确输入\n\n");
printf("请输入学号:");
scanf("%d", &stu[i]. num);
for(o=1;o<=6;o++)
if(stu[i-o]. num==stu[i]. num)
{
printf("\n***请不要输入一样的学号呢~~\n\n");
}
printf("请输入姓名:");
scanf("%s", &stu[i]. name);
printf("请输入年龄:");
scanf("%f", &stu[i].age);
printf("请输入C语言成绩:");
scanf("%f", &stu[i]. pingshi);
printf("请输入英语成绩:");
scanf("%f", &stu[i]. shiyan);
printf("请输入数据库成绩:");
scanf("%f", &stu[i]. shujuku);
printf("\n###########################################\n\n\n\n");
}
printf("\n恭喜你,所有同学数据录入完成!\n");
printf("###########################################\n\n\n\n");
for(i=0;i<ren;i++)
stu[i].zongping=stu[i].pingshi+stu[i].shiyan+stu[i].shujuku; //计算总分部分
}
//void b() //根据学号查询学生并修改信息
/* 查询 */
void b() //由学号查询删除修改
{
int sno,p,i,*s,a,n; //son用来表示输入的学号;p表示判断;i用来循环查找
void a2(); //2_A部分用于输出查询
void b2(); //2_B部分用于修改
void c2(); //2_C部分用于删除
printf("请输入要选择的学号:\n"); //s用来代换 ;n用来三级菜单的输入
scanf("%d",&sno);
n=0;
for(i=0;i<=ren;i++)
{
n=n+1; //计算进行了几次循环
s=&a;
s=&stu[i].num; //不知道为什么比不了*因为是指针
p=0;
if(*s-sno==0)
{
p=1;//此时如果括号里面相等的话,这个的值就是1
//printf("%d\n",i); //调试
break;
//else break; //所以符合就是相等
//printf("\n\n%d\n",a); //a输出的是一直是10,不能用
//printf("%d\n",*s); //这个正常
}
}
if(p==1)
{
printf("\n已找到该学生\n\n\n");
printf("********************************************************\n");
printf("1.输出该学生的详情\n\n");
printf("2.修改该学生的详情\n\n");
printf("3.删除该学生的详情\n\n");
printf("\n\n请输入要进行的操作:");
n=n-1;
//printf("%d\n",n);
xh[1].num=n;
//printf("%d\n",n);
//printf("%d\n", xh[1].num);
scanf("%d",&n);
//开始第三级菜单
if(n!=0||n!=4)
{
printf("\n");
//if(n=0)n=6;
switch(n) //循环
{
case 1:a2();break; //将储存位置?发给下一步
case 2:b2();break;
case 3:c2();break;
case 0:n=6;break;
break;
default :printf("\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n");
}
}
}
if(p==0)
printf("查无此人!\n");
printf("********************************************************\n");
}
//4:输出成绩与排名\n\n
void c() //4:输出成绩与排名\n\n
{
int a[6]={0,1,2,3,4,5}; //定义数组来排名
int i,j,temp;
for(j=0;j<3;j++) //用了浮点法??
{
for(i=0;i<3-j;i++)
if(stu[a[i]].num>stu[a[i+1]].num) //用总学号排名
{
temp=a[i];a[i]=a[i+1];
a[i+1]=temp;
}
}
printf("\n###########################################\n");
printf("按学号顺序如下:\n");
printf("学号 姓名 C语言成绩 英语成绩 数据库成绩 总成绩\n");
for(i=0;i<ren;i++)
printf("%d %14s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].shiyan,stu[i].shujuku,stu[i].zongping);
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
}
//改成D部分
void d() //用于结束错误的输入
{
printf("\t@@@@@@@@@@@@@@@@@@@@ 请正确输入命令: 1 / 2 / 3 / 6 @@@@@@@@@@@@@@@@@@@@\n\n\n\n\n\n") ;
}
//2_A部分
//用于输出查询
void a2()
{
int a,*b; //b用来引用结构体2
b=&xh[1].num;
printf("%d\n",*b); //测试*b的值
printf("以下为这位同学的信息:\n\n");
/* printf("年龄为:%d\n\n",stu[*b].age);
printf("C语言成绩为:%d\n\n",stu[*b]. pingshi);
printf("英语成绩为:%d\n\n",stu[*b]. shiyan);
printf("数据库成绩为:%d\n\n",stu[*b]. shujuku);
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
*/
printf("学号 姓名 C语言成绩 英语成绩 结构体成绩 总成绩\n");
printf("%d %14s%14.2f%14.2f%14.2f%14.2f\n",stu[*b].num,stu[*b].name,stu[*b].pingshi,stu[*b].shiyan,stu[*b].shujuku,stu[*b].zongping);
printf("\n完成!\n");
}
//2_B部分
//用于修改
void b2()
{
int a,*b; //b用来引用结构体2
//b=&a;
b=&xh[1].num;
printf("%d\n",*b); //测试*b的值
printf("请输入这位同学的信息:\n\n");
printf("请输入年龄:");
scanf("%f", &stu[*b].age);
printf("请输入C语言成绩:");
scanf("%f", &stu[*b]. pingshi);
printf("请输入英语成绩:");
scanf("%f", &stu[*b]. shiyan);
printf("请输入数据库成绩:");
scanf("%f", &stu[*b]. shujuku);
stu[*b].zongping=stu[*b].pingshi+stu[*b].shiyan+stu[*b].shujuku; //计算总分部分
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
}
//2_C部分
//用于删除
void c2()
{
int a,*b; //b用来引用结构体2
b=&xh[1].num;
stu[*b].age=0;
stu[*b].pingshi=0;
stu[*b].shiyan=0;
stu[*b].shujuku=0;
stu[*b].zongping=stu[*b].pingshi+stu[*b].shiyan+stu[*b].shujuku; //计算总分部分
printf("\n完成!\n");
printf("###########################################\n\n\n\n");
}
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢