/*一、定义结构体类型:
每个同学的信息:学号、姓名、性别、三门课程成绩(可以自由扩充,出生日期、电话、学号等等)
二、功能要求:
运行后,提示输入数字,并运行数字所对应的功能,如:按1,执行“显示所有同学的信息”;按7,执行“删除一个同学”。
1.显示所有同学的信息
2.查找指定同学的信息 (可扩充其他信息的查找)
3.修改指定同学的信息
4.显示有不及格同学的信息 (统计显示其他信息)
5.按指定课程排序输出
6.增加一个新同学
7.删除一个同学
0.退出(还可以根据自己能力扩充功能,如文件存储读/写)
说明:
1、需要用到《结构体》这一章的基础知识(9.1节、9.2节)
2、按键且不需要输入回车,可参考【getchar getch getche的不用功能.cpp】文件*/
#include<stdio.h>
#include<stdilib.h>
#include<math.h>
#include<string.h>//字符串
struct student
{
string name[50],sex[50];
int xuehao[50],gaoshu[50],dawu[50],C[50],phonenumber[50];
double aver;
};
struct student[5]={
{25164852 "zhangsan" "nan" 12658496354 59 96 91},
{10256958 "lisi" "nan" 14557923012 85 80 94},
{95641280 "buwang" "nan" 13027019529 94 90 98},
{12563078 "xiaoyu" "nv" 18526945170 84 95 79},
};
/*void xianshi(struct student stu[100]);
void chazhao(struct student stu[100]);
void xiugai(struct student stu[100]);
void bujige(struct student stu[100]);
void paixu(struct student stu[100]);
void add(struct student stu[100]);
void cdelete(struct student stu[100]);*/
int main()
{
int choice,i,n=0;
printf("********学生信息管理系统********\n");
printf(" 1.显示所有同学的信息\n");
printf(" 2.查找指定同学的信息\n");
printf(" 3.修改指定同学的信息\n");
printf(" 4.显示有不及格同学的信息\n");
printf(" 5.按指定课程排序输出\n");
printf(" 6.增加一个新同学\n");
printf(" 7.删除一个同学\n");
printf(" 0.退出\n");
printf("请输入你想执行的指令数字:"); scanf("%d",&choice);
if(choice>7||choice<0)
{
printf("无法执行此指令,请重新输入\n");
}
if(choice==0)
{
printf("退出成功");
}
switch(choice)
{
case 1:xianshi(stu);break;
case 2:chazhao(stu);break;
case 3:xiugai(stu);break;
case 4:bujige(stu);break;
case 5:paixu(stu);break;
case 6:add(stu);break;
case 7:cdelete(stu);break;
}
return 0;
}
void xianshi(struct student stu[100])
{
int i,n;
for (i=0;i<n;i++)
{
printf("学号\t\t 姓名\t\t 性别\t\t 电话号码\t\t 高数\t\t 大物\t\t C\t\t ");//\t横向调到下一制表符位置
for (i=0;i<n;i++)
{
printf("%d\t",stu[i].xuehao);
printf("%s\t",stu[i].name);//%s输出的是字符串,%c只能输出一个字符
printf("%s\t",stu[i].sex);
printf("%d\t",stu[i].gaoshu);
printf("%d\t",stu[i].dawu);
printf("%d\t",stu[i].C);
printf("%d\t",stu[i].phonenumber);
}
}
}
void chazhao(struct student stu[100]);
{
int i,n,x[10];//x代表学生学号
printf("请输入你想查找的学生的学号:"); scanf("%d",&x);
for (i=0;i<n;i++)
{
if (x=stu[i].xuehao)
{
printf("学号\t\t 姓名\t\t 性别\t\t 电话号码\t\t 高数\t\t 大物\t\t C\t\t ")
printf("%d\t",stu[i].xuehao);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%d\t",stu[i].gaoshu);
printf("%d\t",stu[i].dawu);
printf("%d\t",stu[i].C);
printf("%d\t",stu[i].phonenumber);
}
else
printf("抱歉,该学生信息不存在\n");
}
}
void xiugai(struct student stu[100]);
{
int i,n,x[10];//x代表学生学号
printf("请输入你想修改的学生的学号:"); scanf("%d",&x);
for (i=0;i<n;i++)
{
if (x=stu[i].xuehao)
{
printf("请选择你想修改的学生信息\n");
printf("1.name 2.sex 3.xuehao 4.phonenumber 5.gaoshu 6.dawu 7.C ");
}
scanf(%d",&ch);
if(ch==1)
printf("请输入你想修改后的学生姓名:%s",&stu[i].name);
if(ch==2)
printf("请输入你想修改后的学生性别:%s",&stu[i].sex);
if(ch==3)
printf("请输入你想修改后的学生学号:%d",&stu[i].xuehao);
if(ch==4)
printf("请输入你想修改后的学生电话:%d",&stu[i].phonenumber);
if(ch==5)
printf("请输入你想修改后的学生高数成绩:%d",&stu[i].gaoshu);
if(ch==6)
printf("请输入你想修改后的学生大物成绩:%d",&stu[i].dawu);
if(ch==7)
printf("请输入你想修改后的学生C成绩:%d",&stu[i].C);
else
printf("选择无效 请重新输入\n");break;
}
}
void bujige(struct student stu[100]);
{
int i,n;
for(i=0;i<n;i++)
{
if(stu[i].gaoshu||stu[i].dawu||stu[i].C<60)
{
printf("学号\t\t 姓名\t\t 性别\t\t 电话号码\t\t 高数\t\t 大物\t\t C\t\t ")
printf("%d\t",stu[i].xuehao);
printf("%s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%d\t",stu[i].gaoshu);
printf("%d\t",stu[i].dawu);
printf("%d\t",stu[i].C);
printf("%d\t",stu[i].phonenumber);
}
}
}
void paixu(struct student stu[100])
{
int i,j,choice,flag;
printf("请问您想按按哪科成绩进行排序\n");
printf("1、高数 2、大物 3、C语言 \n"); scanf("%d",&choice);
switch (choice)
{
case 1:for (i=0;i<count;i++)
{
flag=i;
for (j=i+1;j<count;j++)
if (stu[j].gaoshu>stu[flag].gaohhu)
t=stu[j];stu[j]=stu[flag];stu[flag]=t;
};break;
case 2:for (i=0;i<count;i++)
{
flag=i;
for (j=i+1;j<count;j++)
if (stu[j].dawu>stu[flag].dawu)
stu[j]=stu[flag];
};break;
case 3:for (i=0;i<count;i++)
{
flag=i;
for (j=i+1;j<count;j++)
if (stu[j].C>stu[flag].C)
t=stu[j];stu[j]=stu[flag];stu[flag]=t;
};break;
default:printf("无效的选择 请重新输入\n");break;
}
}
void add(struct student stu[100])
{
printf("请输入你想添加的学生信息:");
printf("请输入该生的学号:%d",&stu[i].xuehao);
printf("请输入该生的姓名:%s",&stu[i].name);
printf("请输入该生的性别:%d",&stu[i].sex);
printf("请输入该生的电话:%d",&stu[i].phonenumber);
printf("请输入该生的高数成绩:%d",&stu[i].gaoshu);
printf("请输入该生的大物成绩:%d",&stu[i].dawu);
printf("请输入该生的C成绩:%d",&stu[i].C);
}
void cdelete(struct student stu[100])
{
printf("请输入你想删除的学生的学号:");scanf("%d",xuehao);
if(stu[i].xuehao==xuehao)
{
delete stu[i];
}
}
参考GPT和自己的思路:
首先,代码中的 struct student[5] 是错误的定义方式,应该是 struct student stu[5],表示定义了一个长度为 5 的 student 数组。
其次,代码中的结构体定义也存在问题,应该改为如下形式:
struct student {
int xuehao;
char name[50];
char sex[50];
int gaoshu;
int dawu;
int C;
int phonenumber;
};
其中,姓名和性别应该是字符串类型(char数组),而成绩和电话号码则应该是整型(int)。
最后,代码中的函数定义也存在语法问题,应该把函数名放在参数列表的前面,例如:
void xianshi(struct student stu[100]) {...}
void chazhao(struct student stu[100]) {...}
void xiugai(struct student stu[100]) {...}
void bujige(struct student stu[100]) {...}
void paixu(struct student stu[100]) {...}
void add(struct student stu[100]) {...}
void cdelete(struct student stu[100]) {...}
另外,函数定义后面没有实现,需要完善函数代码。