//录入学生成绩和基本信息;
//新增、删除、修改一名学生信息;
//查询学生信息;
//可以实现新增、删除、修改学生信息;
//按成绩排序 ;
//系统以菜单形式工作。
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int sum;//作为全局变量,学生的总数,sum<=50。
#define Max 50
#define printf1 printf("\t------------------------------------\n");
#define printf2 printf("\t学号,\t姓名,\t性别,\t班级,\t成绩\n\n");
#define printf3 printf("\t%d,\t%s,\t%s,\t%s,\t%d\n",students[i].no,students[i].name,students[i].sex,students[i].Class,students[i].score);
void clearscreen();//清空屏幕
int sort_message();//学生信息按成绩排序
int output_message();//输出学生所有信息
int save_message(int sum);//保存信息
int new_message();//新添
int read_message();//浏览信息
int search_by_no();//按学号查找
int delete_message();//删除
int del_by_no();//按学号删除
int del_by_name();//按学号删除
int renew_by_no();//学号查找修改
int renew_message();//修改
int search_message();//查找
int renew_by_name();//姓名查找修改
int score; //成绩
int search_by_name();//按姓名查找
void clearscreen()
{//构建学生结构体
getchar();
system("cls");
}int no; //学号
struct Student
{ char name[20]; //姓名
}students[Max];
char sex[10]; //性别
char Class[20]; //班级 printf("\t 2.删除学生信息 \n");
//主程序
int main()
{
read_message();
int num;
do clearscreen();
{
printf("\t-------学生信息管理系统主菜单-------\n\n");
printf("\t 1.新增学生信息 \n");
printf("\t------------------------------------\n");
printf("\t 3.修改学生信息 \n");
printf("\t 4.查找学生信息 \n");
printf("\t 5.按成绩排序 \n");
printf("\t 0.退出 \n\n");
printf("\n\n选择(0-4):"); case 3: renew_message();save_message(sum);break;
scanf("%d",&num);
switch(num)
case 1: new_message();save_message(sum);break;
{
case 2: delete_message();save_message(sum);break;
case 4: search_message();break;
break;
case 5: sort_message();output_message();break;
case 0:
{ printf("\n以上学生信息文件已保存-(文件名:student.txt)!\n");
getchar();
return 0; printf("\n\n暂时还没有存储信息,按回车键返回主菜单!\n");
} }
}while(num!=0);
return 0;
}//-------------------------------------------------------------------------------------------------------
int read_message()
{FILE *fp; if((fp=fopen("student.txt","r"))==NULL)
int i=0; { }
return 0; }
while(feof(fp)!=1)//值为1时,fp所指向的文件就结束
{
fread(&students[i],sizeof(struct Student),1,fp);
if(students[i].no==0)
{ {
break;
} printf("\n\n文件中原有学生的信息:\n\n");
sum++;
} do
printf1;
printf2;
for(i=0;i<sum;i++)
{
{
if(students[i].no!=0)
printf("\n\n按回车键返回主菜单!");
printf3;
}} //-------------------------------------------------------------------------------------------------------
int new_message()
{ int i=sum,s=Max,k=0;
scanf("%s",students[i].sex);
{
clearscreen();
printf("\n\n录入学生信息(最多%d个),学号输入0则退出。",s);
printf("\n\n这是第%d个学生:\n\n",i+1);
scanf("%d",&students[i].no);
printf("学号:");
if(students[i].no==0) break;
printf("性别:");
printf("姓名:");
scanf("%s",students[i].name);
printf("班级:"); if((fp=fopen("student.txt","w"))==NULL)
scanf("%s",students[i].Class);
printf("成绩:");
scanf("%d",&students[i].score);
i++;
k++;
}while(i<Max);
sum=k+sum; printf("\n\n按回车键返回主菜单!");
clearscreen();
printf("\n\n新增的%d个学生信息录入完毕!",k);
return i;} printf("读文件错误!\n");
int save_message(int sum)
{FILE *fp;int i; }
{ return 0; printf("\t----------学生信息删除界面----------\n\n");
for(i=0;i<sum;i++)
{
if(fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
printf("写文件错误!\n");
}fclose(fp);//-------------------------------------------------------------------------------------------------------
int delete_message()
{int num;do clearscreen();
{ }
printf("\t 1.按学号删除 \n");
printf("\t 2.按姓名删除 \n");
printf("\n\n请选择(0-2):");
printf("\t 0.返回系统主菜单 \n");
scanf("%d",&num); switch(num){ case 0: break;
case 1: del_by_no();save_message(sum);break;
case 2: del_by_name();save_message(sum);break;
printf("删除成功!\n");
}while(num!=0);
return 1;
} int i,j;
int del_by_no()
{ int k=0;
int del_no;
do{ printf("\n\n请输入要删除学生的学号:(输入0结束删除)\n\n");
clearscreen();
if(del_no==0) break;
scanf("%d",&del_no);
if(students[i].no==del_no)
for(i=0;i<sum;i++)
{{ students[j]=students[j+1];
for(j=i;j<sum;j++)
{} if(strcmp(students[i].name,del_name)==0)
{
k++;
}
} if(k==sum)
{
clearscreen();
printf("\n输入错误或者学号为%d的学生不存在!\n\n",del_no);
}
}while(i<Max);
return 0;}{
int del_by_name()int i,j; printf("请输入要删除学生的姓名:(输入#结束删除)\n");
char del_name[20];
do{int k=0; scanf("%s",del_name);
clearscreen(); for(j=i;j<sum;j++)
if(strcmp(del_name,"#")==0) break;
for(i=0;i<sum;i++){{ int num;
{
students[j]=students[j+1];
}
sum--;
printf("删除成功!\n");
clearscreen();
}else {
{
k++;
}} if(k==sum)
printf("\n输入错误或者姓名为%s的学生不存在!\n\n",del_name);
clearscreen();
} return 0;
}while(i<Max);}//-------------------------------------------------------------------------------------------------------
int renew_message()
{do case 2: renew_by_name();save_message(sum);break;
{
clearscreen();
printf("\t----------学生信息修改界面----------\n\n");
printf("\t 1.按学号修改 \n");
printf("\t 2.按姓名修改 \n");
printf("\n\n请选择(0-2):");
printf("\t 0.返回系统主菜单 \n");
scanf("%d",&num); switch(num){ printf("\n\n\t--------选择要修改的学生信息--------\n\n");
case 1: renew_by_no();save_message(sum);break;
case 0: break;
}while(num!=0);
}
return 1;
} int i,num;
int renew_by_no()
{int renew_no; clearscreen();
do
{
int j=0;
printf("\n请输入要修改的学生学号:(输入0结束修改)\n");
scanf("%d",&renew_no);
if(renew_no==0) break; do
for (i=0;i<sum;i++)
{ if (students[i].no==renew_no)
{{ printf("\t 1.学号\t4.班级 \n");
clearscreen();
case 3: printf("\n请输入你想要修改后的学生性别:");scanf("%s",students[i].sex);save_message(sum);break;
printf("\t 2.姓名\t5.成绩 \n");
printf("\t 3.性别\t0.完成修改 \n\n");
switch(num)
printf("\n请选择(0-5):");
scanf("%d",&num); case 1: printf("\n请输入你想要修改后的学生学号:");scanf("%d",&students[i].no);save_message(sum);break;
int renew_by_name()
case 4: printf("\n请输入你想要修改后的学生班级:");scanf("%s",students[i].Class);save_message(sum);break;
case 5: printf("\n请输入你想要修改后的学生成绩:");scanf("%d",&students[i].score);save_message(sum);break;
case 0: break;
} clearscreen();
}while(num!=0); }
printf("\n修改成功!"); printf("输入错误或者学号为%d的学生不存在!",renew_no);
else
{ j++;
}} {
if(j==sum) }while(i<Max);
clearscreen();} printf("\t 3.性别\t0.完成修改 \n\n");
{
int i,num;
char renew_name[20];
do
{
clearscreen();
int j=0;
printf("\n请输入要修改的学生姓名:(输入#结束修改)\n");
scanf("%s",renew_name);
for (i=0;i<sum;i++)
if(strcmp(renew_name,"#")==0) break;
{ {
if(strcmp(students[i].name,renew_name)==0)
{doclearscreen(); printf("\t 1.学号\t4.班级 \n");
printf("\n\n\t--------选择要修改的学生信息--------\n\n");
printf("\t 2.姓名\t5.成绩 \n"); case 5: printf("\n请输入你想要修改后的学生成绩:");scanf("%d",&students[i].score);save_message(sum);break;
printf("\n请选择(0-5):");
scanf("%d",&num);
case 1: printf("\n请输入你想要修改后的学生学号:");scanf("%d",&students[i].no);save_message(sum);break;
switch(num)
{ case 2: printf("\n请输入你想要修改后的学生姓名:");scanf("%s",students[i].name);save_message(sum);break;
case 3: printf("\n请输入你想要修改后的学生性别:");scanf("%s",students[i].sex);save_message(sum);break;
printf("\t 1.按学号查询 \n");
case 4: printf("\n请输入你想要修改后的学生班级:");scanf("%s",students[i].Class);save_message(sum);break;
case 0: break; }
}while(num!=0);
clearscreen();
printf("\n修改成功!");
}
else
{ j++;
}} printf("输入错误或者姓名为%d的学生不存在!",renew_name);
if(j==sum)
{} }while(i<Max);
return 0;//-------------------------------------------------------------------------------------------------------
}
int search_message()
{int num=0;do printf("\t----------学生信息查询界面----------\n\n");
if(strcmp(students[i].name,search_name)==0&&students[i].no!=0)
printf("\t 2.按姓名查询 \n");
printf("\t 0.返回系统主菜单 \n");
scanf("%d",&num);
printf("\n\n请选择(0-2):");
switch(num) case 1: search_by_no();break;
}while(num!=0);
case 0: break; } scanf("%s",search_name);
return 1;
}int search_by_name()
{int i, j=0; clearscreen();
char search_name[20]; printf("\n\n\t --%d的信息-- \n",students[i].no);
printf("\n\n\t --%s的信息-- \n",students[i].name);
printf1;
printf2; if(j==sum)
else
{ }
j++; }{
printf("\n\n姓名为%s的学生不存在!",search_name);
getchar(); return 0;} if(search_no==students[i].no&&students[i].no!=0)
clearscreen();
printf("\n请输入要查学生的学号:");
scanf("%d",&search_no); {
for(i=0;i<sum;i++) { k=j;
printf1;
printf2;
}
printf3;
else }
{
j++;
} printf("\n\n学号为%d的学生不存在!",search_no);
if(j==sum)
{ } return 0;
getchar();}//-------------------------------------------------------------------------------------------------------
int sort_message()
{int i,j,k; for(i=0;i<sum-1;i++)
struct Student t; { for(j=i+1;j<sum;j++)
k=i; {}
if(students[k].score>students[j].score)
{ } t=students[i];
students[i]=students[k];
students[k]=t;
int output_message()
}
}{
return 0;} printf("\t-------按成绩排序的学生信息表-------\n");
int i;
do{ clearscreen();
printf("\t------------共 %d 个学生------------\n\n",sum);
printf1;
printf2; for(i=0;i<sum;i++)
{if(students[i].no!=0) return 0;
}while(i<sum);
}