#include
#include
#include
#include
typedef struct student {
int numb,sum;
char name[10];
int score[3];
double ave;
}STU;
void input(STU* p, int num);
void showAll(STU*, int);
int searchByNumb(STU *,int);
int searchByName(STU *,int);
void search(STU *, int);
void insert(STU *, int *,int);
void del(STU *, int *);
void update(STU *, int);
void sort(STU *, int);
void save_info(STU *,int);
void load_info(STU *,int *);
void backup();
void Statistics(STU *p,int num);
void main() {
int num = 0, choice;
STU stuArray[100];
for (;;) {
system("cls");
printf("&-------------------------------------------------------------------&\n");
printf(" *学生信息管理系统* \n");
printf("---------------------------------------------------------------------\n");
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(" * 11.备份 \n");
printf(" * 0.退出系统 \n");
printf("&-------------------------------------------------------------------&\n");
printf("请选择要实现功能的相应序号 :");
scanf("%d", &choice);
if (choice == 0) break;
switch (choice) {
case 1: printf("输入人数:"); scanf("%d", &num); input(stuArray, num); break;
case 2: showAll(stuArray,num); break;
case 3: search(stuArray, num); break;
case 4: insert(stuArray,&num,100); break;
case 5: del(stuArray, &num); break;
case 6: update(stuArray, num); break;
case 7: sort(stuArray, num); break;
case 8: Statistics(stuArray, num); break;
case 9: save_info(stuArray, num); break;
case 10: load_info(stuArray, &num); break;
case 11: backup(); break;
}
printf("请按任意键继续.......\n");
getch();
}
printf("感谢您的使用,再见!\n");
}
//1.输入学生信息
void input(STU* p, int num) {
int i;
printf("请输入%d名学生信息\n", num);
printf("学号\t姓名\t数学\t英语\t语文\n");
for (i = 0; i < num; i++) {
scanf("%d%s%d%d%d", &p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2]);
p[i].ave = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;
}
printf("输入完成\n");
}
// 2.显示全部学生信息
void showAll(STU* p, int num) {
int i;
system("cls");
printf("目前共有%d名学生信息\n",num);
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
for (i = 0; i < num; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\t\n", p[i].numb, p[i].name, p[i].score[0], p[i].score[1], p[i].score[2], p[i].ave);
}
printf("输出完成\n");
}
int searchByNumb(STU *p,int num){
int i,number;
printf("请输入要查询学生的学号:");
scanf("%d",&number);
for(i = 0;i<num;i++)
{
if(p[i].numb==number)
break;}
return i;
}
int searchByName(STU* p, int num){
int i;
char name[10];
printf("请输入要查询学生的姓名:");
scanf("%s", name);
for(i=0;i<num;i++)
if(strcmp(p[i].name,name)==0)
break;
return i;
}
//3.查询学生信息
void search(STU *p,int num){
int choice,result=1;
for(;;)
{
system("cls");
printf("现在进入查询学生信息的填写\n");
printf("按学号查询请按1,按姓名查询请按2:");
scanf("%d",&choice);
switch(choice)
{
case 1: result=searchByNumb(p,num);break;
case 2: result=searchByName(p,num);break;
}
if(result>=num)
printf("查无此人\n");
else{
printf("找到了,该生信息如下: \n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
}
printf("继续查找请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
//4.新增学生信息函数
void insert(STU *p,int *pnum,int maxLen)
{
STU stu;
int choice;
for(;;)
{
if(*pnum>200){
printf("人数已达上限,无法添加!\n");
break;
}
else{
system("pause");
printf("现在进行新增学生信息填写\n");
printf("学号\t姓名\t数学\t英语\t语文\n");
scanf("%d%s%d%d%d",&stu.numb,&stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
stu.ave=(stu.score[0]+stu.score[1]+stu.score[2])/3.0;
p[*pnum]=stu;
(*pnum)++;
printf("成功添加!继续添加请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
}
//5.删除学生信息
void del(STU *p,int *pnum){
int result,i,choice;
for(;;){
system("cls");
printf("现在进入删除学生信息的处理\n");
result=searchByNumb(p,*pnum);
if(result>=*pnum)
printf("查无此人\n");
else{
printf("找到了,确定删除请按1,取消删除请按2;");
scanf("%d",&choice);
if(choice==1){
//for语句的作用是,将第result后的每一个元素前移一个位置,p[result]被覆盖,即被删除
for(i=result;i<*pnum-1;i++)
p[i]=p[i+1];
(*pnum)--;
printf("成功删除,当前学生总人数是%d人\n",*pnum);
}
}
printf("继续删除请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
//6.修改学生信息
void update(STU *p,int num){
STU stu;
int result,choice,key_code;
loop1:
printf("请输入五位数密码:\n");
scanf("%d",&key_code);
if(key_code == 20230){
if(result != -1){
for(;;){
system("pause");
printf("现在进入修改学生信息的处理\n");
result = searchByNumb(p,num);
if(result >= num)
printf("查无此人\n");
else
{
printf("找到了,该生信息如下: \n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
printf("确定修改请按1,取消修改请按2;");
scanf("%d",&choice);
if(choice==1){
printf("现在进行修改学生信息的填写\n");
printf("学号\t姓名\t数学\t英语\t语文\n");
scanf("%d%s%d%d%d",&stu.numb,stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
stu.ave=(stu.score[0]+stu.score[1]+stu.score[2])/3.0;
p[result]=stu;
printf("成功修改,修改后的信息如下\n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
}
}
printf("继续修改请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
}
else{
printf("密码错误,请重新输入:");
goto loop1;
}
}
//7.排序
void sort(STU *p,int num){
char style='a';
int type=1,i,j,index;
STU temp;
system("cls");
printf("现在进入对当前信息排序的处理\n");
printf("按升序排列请按a,按降序排列请按d;");
getchar();
scanf("%c",&style);
printf("按学号排序请按1,按平均分排序请按2;");
scanf("%d",&type);
if(style=='a'){
if(type==1){
for(i=0;i<num-1;i++){
if(p[index].numb>p[j].numb)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
else if(type==2){
for(i=0;i<num-1;i++){
index=i;
for(j=i+1;j<num;j++)
if(p[index].ave>p[j].ave)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
}
if(style=='d'){
if(type==1){
for(i=0;i<num-1;i++){
if(p[index].numb>p[j].numb)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
else if(type==2){
for(i=0;i<num-1;i++){
index=i;
for(j=i+1;j<num;j++)
if(p[index].ave>p[j].ave)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
}
printf("排序成功\n");
}
//8.优秀人数及不及格人数的计算
void Statistics(STU *p,int num){
STU s[100],f[100];
int i,x = -1,y = -1;
system("cls");
for(i = 0;i<num+1;i++){
if(p[i].sum>=270){
x++;
s[x]=p[i];
}
if(p[i].sum<=180){
y++;
f[y] = p[i];
}
}
printf("\n\n");
printf("\t现在对优秀同学的名单进行公示\n");
printf("\t\t学号\t\t姓名\n");
if(x !=-1)
for(i=0;i<x+1;i++)
printf("\t\t%d\t\t%s\n",s[i].numb,s[i].name);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
printf("\t共有%d位学生成绩判定为优秀\n",x+1);
printf("………………………………………………………………\n\n");
printf("现在对不及格同学的名单进行公示\n");
printf("\t\t学号\t\t姓名\n");
if(y != -1);
for(i =0;i<y+1;i++)
printf("\t\t%d\t\t%s\n",f[i].numb,f[i].name);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
printf("共有%d位学生成绩判定为不及格\n",y+1);
printf("查询成功!\n");
getch();
}
修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct student {
int numb,sum;
char name[10];
int score[3];
double ave;
}STU;
void input(STU* p, int num);
void showAll(STU*, int);
int searchByNumb(STU *,int);
int searchByName(STU *,int);
void search(STU *, int);
void insert(STU *, int *,int);
void del(STU *, int *);
void update(STU *, int);
void sort(STU *, int);
//void save_info(STU *,int);
//void load_info(STU *,int *);
//void backup();
void Statistics(STU *p,int num);
void main() {
int num = 0, choice;
STU stuArray[100];
for (;;) {
system("cls");
printf("&-------------------------------------------------------------------&\n");
printf(" *学生信息管理系统* \n");
printf("---------------------------------------------------------------------\n");
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(" * 11.备份 \n");
printf(" * 0.退出系统 \n");
printf("&-------------------------------------------------------------------&\n");
printf("请选择要实现功能的相应序号 :");
scanf("%d", &choice);
if (choice == 0) break;
switch (choice) {
case 1: printf("输入人数:"); scanf("%d", &num); input(stuArray, num); break;
case 2: showAll(stuArray,num); break;
case 3: search(stuArray, num); break;
case 4: insert(stuArray,&num,100); break;
case 5: del(stuArray, &num); break;
case 6: update(stuArray, num); break;
case 7: sort(stuArray, num); break;
case 8: Statistics(stuArray, num); break;
//case 9: save_info(stuArray, num); break;
//case 10: load_info(stuArray, &num); break;
//case 11: backup(); break;
}
printf("请按任意键继续.......\n");
getch();
}
printf("感谢您的使用,再见!\n");
}
//1.输入学生信息
void input(STU* p, int num) {
int i;
printf("请输入%d名学生信息\n", num);
printf("学号\t姓名\t数学\t英语\t语文\n");
for (i = 0; i < num; i++) {
scanf("%d%s%d%d%d", &p[i].numb, p[i].name,
&p[i].score[0], &p[i].score[1], &p[i].score[2]);
p[i].sum = p[i].score[0] + p[i].score[1] + p[i].score[2]; //修改
p[i].ave = p[i].sum / 3.0; //修改
}
printf("输入完成\n");
}
// 2.显示全部学生信息
void showAll(STU* p, int num) {
int i;
system("cls");
printf("目前共有%d名学生信息\n",num);
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
for (i = 0; i < num; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\t\n", p[i].numb, p[i].name,
p[i].score[0], p[i].score[1], p[i].score[2], p[i].ave);
}
printf("输出完成\n");
}
int searchByNumb(STU *p,int num){
int i,number;
printf("请输入要查询学生的学号:");
scanf("%d",&number);
for(i = 0;i<num;i++)
{
if(p[i].numb==number)
return i;//break; 修改
}
return -1; //修改
}
int searchByName(STU* p, int num){
int i;
char name[10];
printf("请输入要查询学生的姓名:");
scanf("%s", name);
for(i=0;i<num;i++)
if(strcmp(p[i].name,name)==0)
return i;//break; 修改
return -1; //修改
}
//3.查询学生信息
void search(STU *p,int num){
int choice,result=1;
for(;;)
{
system("cls");
printf("现在进入查询学生信息的填写\n");
do{ //修改
printf("按学号查询请按1,按姓名查询请按2:");
scanf("%d",&choice);
}while(choice != 1 && choice != 2); //修改
switch(choice)
{
case 1: result=searchByNumb(p,num);break;
case 2: result=searchByName(p,num);break;
}
if(result == -1) //if(result>=num) 修改
printf("查无此人\n");
else{
printf("找到了,该生信息如下: \n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",p[result].numb,p[result].name,
p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
}
printf("继续查找请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
//4.新增学生信息函数
void insert(STU *p,int *pnum,int maxLen)
{
STU stu;
int choice;
for(;;)
{
if(*pnum > maxLen){ //if(*pnum>200)修改
printf("人数已达上限,无法添加!\n");
break;
}
else{
system("pause");
printf("现在进行新增学生信息填写\n");
printf("学号\t姓名\t数学\t英语\t语文\n");
scanf("%d%s%d%d%d",&stu.numb,stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
//scanf("%d%s%d%d%d",&stu.numb,&stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);修改
stu.sum = stu.score[0]+stu.score[1]+stu.score[2]; //修改
stu.ave= stu.sum/3.0; //修改
p[*pnum]=stu;
(*pnum)++;
printf("成功添加!继续添加请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
}
//5.删除学生信息
void del(STU *p,int *pnum){
int result,i,choice;
for(;;){
system("cls");
printf("现在进入删除学生信息的处理\n");
result=searchByNumb(p,*pnum);
if(result == -1) //if(result>=*pnum) 修改
printf("查无此人\n");
else{
printf("找到了,确定删除请按1,放弃删除请按2;"); //取消 修改
scanf("%d",&choice);
if(choice==1){
//for语句的作用是,将第result后的每一个元素前移一个位置,p[result]被覆盖,即被删除
for(i=result;i<*pnum-1;i++)
p[i]=p[i+1];
(*pnum)--;
printf("成功删除,当前学生总人数是%d人\n",*pnum);
}
}
printf("继续删除请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
}
//6.修改学生信息
void update(STU *p,int num){
STU stu;
int result,choice,key_code;
loop1:
printf("请输入五位数密码:\n");
scanf("%d",&key_code);
if(key_code == 20230){
//if(result != -1){ 修改
for(;;){
system("pause");
printf("现在进入修改学生信息的处理\n");
result = searchByNumb(p,num);
if(result == -1) //if(result >= num) 修改
printf("查无此人\n");
else
{
printf("找到了,该生信息如下: \n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,
p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
printf("确定修改请按1,取消修改请按2;");
scanf("%d",&choice);
if(choice==1){
printf("现在进行修改学生信息的填写\n");
printf("学号\t姓名\t数学\t英语\t语文\n");
scanf("%d%s%d%d%d",&stu.numb,stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
stu.sum = stu.score[0]+stu.score[1]+stu.score[2]; //修改
stu.ave = stu.sum/3.0; //修改
p[result]=stu;
printf("成功修改,修改后的信息如下\n");
printf("学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,
p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);
}
}
printf("继续修改请按1,退出请按0;");
scanf("%d",&choice);
if(choice==0) break;
}
//} 修改
}
else{
printf("密码错误,请重新输入:");
goto loop1;
}
}
//7.排序
void sort(STU *p,int num){
char style='a';
int type=1,i,j,index;
STU temp;
system("cls");
printf("现在进入对当前信息排序的处理\n");
printf("按升序排列请按a,按降序排列请按d;");
getchar();
scanf("%c",&style);
printf("按学号排序请按1,按平均分排序请按2;");
scanf("%d",&type);
if(style=='a'){
if(type==1){
for(i=0;i<num-1;i++){
if(p[index].numb>p[j].numb)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
else if(type==2){
for(i=0;i<num-1;i++){
index=i;
for(j=i+1;j<num;j++)
if(p[index].ave>p[j].ave)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
}
if(style=='d'){
if(type==1){
for(i=0;i<num-1;i++){
if(p[index].numb>p[j].numb)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
else if(type==2){
for(i=0;i<num-1;i++){
index=i;
for(j=i+1;j<num;j++)
if(p[index].ave>p[j].ave)
index=j;
temp=p[i];p[i]=p[index];p[index]=temp;
}
}
}
printf("排序成功\n");
}
//8.优秀人数及不及格人数的计算
void Statistics(STU *p,int num) //修改
{
int i,x = 0,y = 0;
system("cls");
for(i = 0;i < num;i++){
if(p[i].sum >= 270){
if (x == 0){
printf("\n\n");
printf("\t现在对优秀同学的名单进行公示\n");
printf("\t\t学号\t\t姓名\n");
}
printf("\t\t%d\t\t%s\n",p[i].numb,p[i].name);
x++;
}
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t共有%d位学生成绩判定为优秀\n",x);
printf("………………………………………………………………\n");
for (i = 0; i < num; i++){
if(p[i].sum < 180){
if (y == 0){
printf("\n\n");
printf("\t现在对不及格同学的名单进行公示\n");
printf("\t\t学号\t\t姓名\n");
}
printf("\t\t%d\t\t%s\n",p[i].numb,p[i].name);
y++;
}
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t共有%d位学生成绩判定为不及格\n",y);
printf("………………………………………………………………\n");
getch();
}
你在代码中没有定义“优秀人数”和“不及格人数”的具体标准,所以无法正确地计算出结果。加一下这段代码这样改一下试试:
void Statistics(STU* p, int num) {
int i, excellent = 0, failed = 0;
for (i = 0; i < num; i++) {
if (p[i].ave >= 90) {
excellent++;
}
else if (p[i].ave < 60) {
failed++;
}
}
printf("优秀人数:%d\n", excellent);
printf("不及格人数:%d\n", failed);
}
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢