求助求助求助
程序代码:#include<stdio.h>
#include<conio.h>
typedef struct student {
char id[8]; /*学号*/
char name[8]; /*姓名*/
char sex[2]; /*性别*/
int yuwen ; /*语文成绩*/
int shuxue; /*数学成绩*/
int yingyu; /*英语成绩 */
float sum; /*个人总成绩*/
float ave; /*个人平均成绩*/
};
/*声明数组及学生数量*/
struct student s[30];
int num=0;
void choose(); /*选择菜单*/
void creat(); /* 创建学生的资料 */
void add(); /*追加学生的资料*/
void search(); /*查询学生的成绩*/
void alter(); /*修改学生的资料*/
void del(); /*删除学生的资料*/
void statistics(); /*统计学生的成绩*/
void sort(); /*对学生资料进行排序*/
void print(); /* 输出显示学生的资料 */
void student_information();
int SearchByName(char name[]) ;
void WriteInfo();
void ReadInfo() ;
void main(){
int x;
printf("欢迎登陆学生管理系统\n");
printf("\n\n\n\n欢迎使用学生管理系统!\n");
ReadInfo();
while(1)
{
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("请输入您要选择的功能(1-9):\n");
scanf("%d",&x);
getchar();
switch(x)
{
case 1:
printf("选中了1.创建学生的资料\n");
creat(); break;
case 2:
printf("选中了2.追加学生的资料\n");
add();break;
case 3:
printf("选中了3.修改学生的资料\n");
alter(); break;
case 4:
printf("选中了4.查询学生的成绩\n");
search();break;
case 5:
printf("选中了5.删除学生的资料\n");
del();break;
case 6:
printf("选中了6.统计学生的成绩\n");
statistics();break;
case 7:
printf("选中了7.对学生平均成绩进行排序\n");
sort();break;
case 8:
printf("选中了8.输出显示学生的资料\n");
print();break;
case 9:
printf("退出\n");
exit(0);
break;
}
WriteInfo();
}
}
void creat() /* 创建学生的资料 */
{
while(1)
{
printf("请输入学号:\n");
scanf("%d",&s[num].id);
getchar();
printf("请输入姓名:\n");
scanf("%s",s[num].name);
getchar();
printf("请输入性别:\n");
scanf("%s",s[num].sex);
getchar();
printf("请输入数学成绩:\n");
scanf("%d",&s[num].shuxue);
getchar();
printf("请输入语文成绩:\n");
scanf("%d",&s[num].yuwen);
getchar();
printf("请输入英语成绩:\n");
scanf("%d",&s[num].yingyu);
getchar();
num++;
printf("是否继续输入学生信息(y/n):\n");
if(getchar()=='n')
{
break;
}
}
}
void add()/*追加学生的资料*/
{
while(1)
{
char Name[20];
int i=0;
printf("请输入要追加学生信息的姓名:\n");
scanf("%s",&Name);
getchar();
i=SearchByName(Name);
if(i==-1)
{
printf("该学生不存在!\n");
}
else
{
printf("您要追加的学生信息为:\n");
student_information(i);
printf("请输入您要追加的学生信息为:\n");
printf("请输入学号:\n");
scanf("%d",&s[i].id);
getchar();
printf("请输入姓名:\n");
scanf("%s",s[i].name);
getchar();
printf("请输入性别:\n");
scanf("%s",s[i].sex);
getchar();
printf("请输入数学成绩:\n");
scanf("%d",&s[i].shuxue);
getchar();
printf("请输入语文成绩:\n");
scanf("%d",&s[i].yuwen);
getchar();
printf("请输入英语成绩:\n");
scanf("%d",&s[i].yingyu);
getchar();
}
printf("是否继续追加学生信息(y/n):\n");
if(getchar()=='n')
{
break;
}
}
}
void search() /*查询学生的成绩*/
{
while(1)
{
char Name[20];
int i=0;
printf("请输入您要查询的学生姓名:\n");
scanf("%s",&Name);
getchar();
i=SearchByName(Name);
if(i==-1)
{
printf("该学生不存在!\n");
}
else
{
printf("您要查询的信息为:\n");
student_information(i);
}
printf("是否继续查询?(y/n):\n");
if(getchar()=='n')
{
break;
}
}
}
void alter() /*修改学生的资料*/
{
while(1)
{
char Name[20];
int i;
printf("请输入您要查询的学生姓名:\n");
scanf("%s",&Name);
getchar();
i=SearchByName(Name);
if(i==-1)
{
printf("该学生不存在!\n");
}
else
{
printf("请输入您要修改的信息:\n");
printf("请输入学号:\n");
scanf("%s",&s[i].id);
getchar();
printf("请输入姓名:\n");
scanf("%s",s[i].name);
getchar();
printf("请输入性别:\n");
scanf("%s",s[i].sex);
getchar();
printf("请输入数学成绩:\n");
scanf("%d",&s[i].shuxue);
getchar();
printf("请输入语文成绩:\n");
scanf("%d",&s[i].yuwen);
getchar();
printf("请输入英语成绩:\n");
scanf("%d",&s[i].yingyu);
getchar();
}
printf("是否继续修改学生信息(y/n):\n");
if(getchar()=='n')
{
break;
}
}
}
void del() /*删除学生的资料*/
{
int j;
while(1)
{
char Name[20];
int i=0;
printf("请输入您要删除的学生姓名:\n");
scanf("%s",&Name);
getchar();
i=SearchByName(Name);
if(i==-1)
{
printf("该学生不存在!\n");
}
else
{
printf("您要删除的信息为:\n");
student_information(i);
}
printf("是否确认删除?(y/n):\n");
if(getchar()=='y')
{
for(j=i;j<sizeof(s)-1;j++)
s[i]=s[i+1];
}
else{
printf("是否继续删除?(y/n)\n");
if(getchar()=='n')
{
break;
}
}
}
}
void student_information()
{
printf("学号:%d\n", s[num].id);
printf("姓名:%s\n", s[num].name);
printf("性别:%s\n", s[num].sex);
printf("高数成绩:%d\n",s[num].shuxue);
printf("英语成绩:%d\n", s[num].yingyu);
printf("语文成绩:%d\n", s[num].yuwen);
printf("平均成绩:%f\n", s[num].ave);
}
void statistics() /*统计学生的成绩*/
{
int i;
for (i = 0; i<sizeof(s); i++)
{
s[i].ave = (float)(s[i].shuxue+s[i].yingyu+s[i].yuwen)/ 4;
printf("输出第%d个同学的平均成绩:%f\n", i+1, s[i].ave);
}
}
void sort() /*对学生资料进行排序*/
{
int i,j;
struct student tmp={0};
for (i=0;i<sizeof(s);i++)
{
for (j=0;j<sizeof(s);j++)
{
if (s[j].ave<s[j+1].ave)
{
tmp=s[j]; s[j]=s[j+1]; s[j+1]=tmp; }
}
}
}
void print() /* 输出显示学生的资料 */
{
int i;
for (i = 0; i < sizeof(s); i++) {
printf("学号:%d\n", s[i].id);
printf("姓名:%s\n", s[i].name);
printf("性别:%s\n", s[i].sex);
printf("数学成绩:%d\n", s[i].shuxue);
printf("英语成绩:%d\n",s[i].yingyu);
printf("语文成绩:%d\n", s[i].yuwen);
printf("平均成绩:%f\n", s[i].ave);
}
}
int SearchByName(char Name[])
{
int i;
for (i=0;i<sizeof(s);i++)
{
if (strcmp(s[i].name,Name)==0)
{
return i;
}
}
return -1;
}
/*将学生信息从文件读出*/
void ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fread(&i,sizeof(int),1,fp)!=1)
{
i=-1;
}
else
{
for(i=0;i<sizeof(s);i++)
{
fread(&s[i],sizeof(struct student),1,fp);
}
}
fclose(fp);
}
/*将学生信息写入文件*/
void WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("写入文件错误!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&s[i],sizeof(struct student),1,fp)!=1)
{
printf("写入文件错误!\n");
}
}
fclose(fp);
}
好像查询功能有问题,
然后也创建的学生信息没有保存。
还有 如果想输多少存多少个该怎么定义数组,我用8查看所有学生的信息是输出30个成员信息。。。如果只创建一个怎么样才能只显示一个?








