#include<stdio.h>
#include<stdlib.h>
#define N 100
//函数声明
void init();
char welcome();
void InputInfo();
void xiugai();
void view();
void DeLeteInfo();
void paiming(struct student_info student[]);
void ViewAll();
void PaimingView();
void exit();
struct student_info input();
void Sortinfo(struct student_info student[]);
void ViewInfo(struct student_info *sp);
void SaveStruct(struct student_info *sp,int SIZE,int n,char filename[20]);
void LoadStruct(struct student_info *sp,int SIZE,int n,char filename[20]);
void SaveInt(int*p,int size,int n,char filename[20]);
void LoadInt(int*p,int size,int n,char filename[20]);
int NumExist(struct student_info student[],int num);
//定义学生信息结构体
struct student_info
{
int num;
char name[6];
int writetest, classtest ,teatest;
double ave ,zongping;
};
//定义全局结构体数据
struct student_info student[N];
int counter,PM;
//主函数
void main()
{
char select;
init();
while(1)
{
select=welcome();
switch(select)
{
case'1':system("cls"); InputInfo(); break;//选项1:录入学生信息
case'2':system("cls"); view();break;//选项2:添加学生信息
case'3':system("cls"); paiming(student);PM=1;
getchar(); system("cls"); break;//选项3:学生排名
case'4':system("cls"); PaimingView();break;//选项4:查询学生信息
case'5':system("cls"); xiugai();break;//选项5:修改学生信息
case'6':system("cls"); DeLeteInfo();break;//选项6:删除学生信息
case'7':system("cls"); ViewAll();break;//选项7:浏览学生信息
case'0':system("cls"); exit();break;//选项0:退出
}
}
}
//函数初始化
void init()
{
FILE *fp;
fp=fopen("counter.dat","rb");
if(fp!=NULL)
{
fclose(fp);
LoadInt(&counter,sizeof(counter),1,"counter.dat");
}
else
{
fp=fopen("counter.dat","wb");
fclose(fp);
counter=0;
}
if(counter!=0)
LoadStruct(student,sizeof(struct student_info),counter,"student_info.dat");
}
//欢迎函数
char welcome()
{
char select;
while(1)
{
system("cls");
printf("\n\n\n\n\t\t☆☆☆☆☆学生数据处理系统☆☆☆☆☆\n\n");
printf("\n");
printf("\t\t\t●1.录入成绩数据\n");
printf("\t\t\t●2.添加学生数据\n");
printf("\t\t\t●3.综合成绩排名\n");
printf("\t\t\t●4.查询学生成绩\n");
printf("\t\t\t●5.修改学生数据\n");
printf("\t\t\t●6.删除学生数据\n");
printf("\t\t\t●7.浏览学生数据\n");
printf("\t\t\t●0.退出\n\n");
select=getchar();
if(select=='1'||select=='2'||select=='3'||select=='4'||select=='5'
||select=='6'||select=='7'||select=='9')
return select;
system("cls");
continue;
}
}
//录入学生信息
void InputInfo()
{
int i,n;
printf("需要录入多少位学生信息:");
scanf("%d",&n);
system("cls");
for(i=1;i<=n;i++)
{
student[counter]=input();
counter++;
}
PM=0;
Sortinfo(student);
SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
SaveInt(&counter,sizeof(counter),1,"counter.dat");
}
//修改学生信息
void xiugai()
{
int i,num;
char YN,select;
printf("请输入需要修改的学生信息的学号:");
scanf("%d",&num);
getchar();
if((i=NumExist(student,num))==-1)
{
printf("不存在该学号,按返回键返回。。。");
getchar();
system("cls");
return;
}
ViewInfo(&student[i]);
printf("是否要修改?(Y/N):");
scanf("%c",&YN);
getchar();
if(YN!='Y'&& YN !='y')
{
printf("修改取消...");
getchar();
system("cls");
return;
}
system("cls");
printf("1.学号\n");
printf("2.姓名\n");
printf("3.考试平均成绩\n");
printf("4.同学互评分\n");
printf("5.任课老师评分\n");
scanf("%c",&select);
switch(select)
{
case'1':printf("修改学号"); scanf("%d",&student[i].num);break;
case'2':printf("修改姓名"); scanf("%d",&student[i].name);break;
case'3':printf("考试平均成绩"); scanf("%d",&student[i].writetest);break;
case'4':printf("修改同学互评分"); scanf("%d",&student[i].classtest);break;
case'5':printf("修改任课老师评分"); scanf("%d",&student[i].teatest);break;
}
Sortinfo(student);
SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
PM=0;
printf("修改完成。。。");
getchar();
system("cls");
}
//删除学生信息
void DeLeteInfo()
{
int i,j,num;
char YN;
printf("请输入需要删除的学生信息的学号:");
scanf("%d",&num);
getchar();
if((i=NumExist(student,num))==-1)
{
printf("不存在该学号,按返回键返回。。。");
getchar();
system("cls");
return;
}
ViewInfo(&student[i]);
printf("\n确认删除(Y/N):");
scanf("%c",&YN);
getchar();
if(YN!='Y'&& YN !='y')
{
printf("修改取消...");
}
else
{
for(j=i;j<counter-1;j++)
student[j]=student[j+1];
counter--;
PM=0;
SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
SaveInt(&counter,sizeof(counter),counter,"counter.dat");
printf("删除完成。。。");
}
getchar();
system("cls");
}
// 综合测评分排名
void paiming(struct student_info student[])
{
struct student_info *p[N],*temp;
int i,j;
for(i=0;i<counter;i++)
p[i]=&student[i];
for(i=0;i<counter-1;i++)
for(j=i+1;j<counter;j++)
{
if(p[i]->zongping < p[j] ->zongping)
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
for(i=0;i<counter;i++)
p[i]->paiming=i+1;
printf("综合测评分排名完成。。。\n");
}
//浏览所有学生信息
void viewAll()
{
int i;
for(i=0;i<counter;i++)
{
ViewInfo(&student[i]);
printf("\n");
}
getchar();
printf("按回车键返回。。。");
getchar();
system("cls");
}
//查询排名
void paimingView()
{
int i,num;
printf("请输入需要查询的学生的学号:");
scanf("%d",&num);
getchar();
i=NumExist(student,num);
if(i==-1)
{
printf("不存在该学号。。。");
getchar();
return;
}
if(PM==0)
{
printf("请先进行成绩排名。。。");
getchar();
return;
}
printf("%s的综合测评分排名%d\n",student[i].name,student[i].paiming);
printf("按回车键返回。。。");
getchar();
return;
}
//退出
void exit()
{
printf("谢谢使用!\n");
exit(0);
}
// 输入信息函数
struct student_info input()
{
struct student_info stu,*sp;
char YN;
sp=&stu;
while(1)
{
while(1)
{
printf("录入学号:");
scanf("%d",&sp->num);
getchar();
if(NumExist(student,sp->num)!=-1)
{
printf("该学号已存在,请重新输入。。。");
getchar();
system("cls");
continue;
}
break;
}
printf("录入姓名:");
gets(sp->name);
printf("录入考试平均成绩:");
scanf("%d",&sp->writetest);
printf("录入同学互评分:");
scanf("%d",&sp->classtest);
printf("录入任课老师评分:");
scanf("%d",&sp->teatest);
getchar();
sp->zongping=(sp->writetest*0.6+sp->classtest*0.2+sp->teatest*0.2);
printf("录入完毕,确认信息是否正确(Y/N)");
YN=getchar();
getchar();
if(YN=='Y'||YN=='y')
break;
else
{
printf("按回车键重新录入信息。。");
getchar();
system("cls");
continue;
}
}
system("cls");
return stu;
}
//排序函数
void Sortinfo(struct student_info student[])
{
int i,j;
struct student_info temp;
for(i=0;i<counter-1;i++)
for(j=i+1;j<=counter-1;j++)
{
if(student[i].num<student[j].num)
{
temp=student[i];
student[i]=student[j];
student[i]=temp;
}
}
}
//显示学生信息
void ViewInfo(struct student_info *sp)
{
printf("学号\t姓名\n");
printf("%d\t%s\n",sp->num,sp->name);
printf("考试平均成绩\t同学互评分\t任课老师评分\n");
printf("%d\t%d\t%d\n",sp->writetest,sp->classtest,sp->teatest\n);
printf("综合分\n");
printf("%.2f\n",sp->zongping);
if(PM==1)
{
printf("综合测评分排名\n");
printf("%d\n",sp->zongping);
}
}
//信息存盘(结构体)
void SaveStruct(struct student_info *sp,int SIZE,int n,char filename[20])
{
FILE *fp;
fp=fopen(filename,"wb");
fwrite(sp,SIZE,n,fp);
fclose(fp);
}
//读取信息(结构体)
void LoadStruct(struct student_info *sp,int SIZE,int n,char filename[20])
{
FILE *fp;
fp=fopen(filename,"rb");
fread(sp,SIZE,n,fp);
fclose(fp);
}
//信息存盘(整型)
void SaveInt(int*p,int size,int n,char filename[20])
{
FILE *fp;
fp=fopen(filename,"wb");
fwrite(p,size,n,fp);
fclose(fp);
}
//读取信息(整型)
void LoadInt(int*p,int size,int n,char filename[20])
{
FILE *fp;
fp=fopen(filename,"rb");
fread(p,size,n,fp);
fclose(fp);
}
//检索学号
int NumExist(struct student_info student[],int num)
{
int i;
for(i=0;i<counter;i++)
{
if(student[i].num==num)
return i;
}
return -1;
}
//浏览学生信息
void view()
{
int i,num;
printf("请输入需要浏览的学生信息的学号:");
scanf("%d",&num);
getchar();
if((i=NumExist(student,num))==-1)
{
printf("不存在该学号,按回车键返回。。。");
getchar();
system("cls");
return;
}
ViewInfo(&student[i]);
printf("\n按回车键返回。。。");
getchar();
system("cls");
return;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define N 100
//函数声明
void init();
char welcome();
void InputInfo();
void xiugai();
void view();
void DeLeteInfo();
void paiming(struct student_info student[]);
void ViewAll();
void PaimingView();
void exit();
struct student_info input();
void Sortinfo(struct student_info student[]);
void ViewInfo(struct student_info *sp);
void SaveStruct(struct student_info *sp, int SIZE, int n, char filename[20]);
void LoadStruct(struct student_info *sp, int SIZE, int n, char filename[20]);
void SaveInt(int*p, int size, int n, char filename[20]);
void LoadInt(int*p, int size, int n, char filename[20]);
int NumExist(struct student_info student[], int num);
//定义学生信息结构体
struct student_info
{
int num;
char name[6];
int writetest, classtest, teatest, paiming;
double ave, zongping;
};
//定义全局结构体数据
struct student_info student[N];
int counter, PM;
//主函数
void main()
{
char select;
init();
while (1)
{
select = welcome();
switch (select)
{
case'1':system("cls"); InputInfo(); break;//选项1:录入学生信息
case'2':system("cls"); view(); break;//选项2:添加学生信息
case'3':system("cls"); paiming(student); PM = 1;
getchar(); system("cls"); break;//选项3:学生排名
case'4':system("cls"); PaimingView(); break;//选项4:查询学生信息
case'5':system("cls"); xiugai(); break;//选项5:修改学生信息
case'6':system("cls"); DeLeteInfo(); break;//选项6:删除学生信息
case'7':system("cls"); ViewAll(); break;//选项7:浏览学生信息
case'0':system("cls"); exit(); break;//选项0:退出
}
}
}
void ViewAll() {
}
void PaimingView() {
}
//函数初始化
void init()
{
FILE *fp;
fp = fopen("counter.dat", "rb");
if (fp != NULL)
{
fclose(fp);
LoadInt(&counter, sizeof(counter), 1, "counter.dat");
}
else
{
fp = fopen("counter.dat", "wb");
fclose(fp);
counter = 0;
}
if (counter != 0)
LoadStruct(student, sizeof(struct student_info), counter, "student_info.dat");
}
//欢迎函数
char welcome()
{
char select;
while (1)
{
system("cls");
printf("\n\n\n\n\t\t☆☆☆☆☆学生数据处理系统☆☆☆☆☆\n\n");
printf("\n");
printf("\t\t\t●1.录入成绩数据\n");
printf("\t\t\t●2.添加学生数据\n");
printf("\t\t\t●3.综合成绩排名\n");
printf("\t\t\t●4.查询学生成绩\n");
printf("\t\t\t●5.修改学生数据\n");
printf("\t\t\t●6.删除学生数据\n");
printf("\t\t\t●7.浏览学生数据\n");
printf("\t\t\t●0.退出\n\n");
select = getchar();
if (select == '1' || select == '2' || select == '3' || select == '4' || select == '5'
|| select == '6' || select == '7' || select == '9')
return select;
system("cls");
continue;
}
}
//录入学生信息
void InputInfo()
{
int i, n;
printf("需要录入多少位学生信息:");
scanf("%d", &n);
system("cls");
for (i = 1; i <= n; i++)
{
student[counter] = input();
counter++;
}
PM = 0;
Sortinfo(student);
SaveStruct(student, sizeof(struct student_info), counter, "student_info.dat");
SaveInt(&counter, sizeof(counter), 1, "counter.dat");
}
//修改学生信息
void xiugai()
{
int i, num;
char YN, select;
printf("请输入需要修改的学生信息的学号:");
scanf("%d", &num);
getchar();
if ((i = NumExist(student, num)) == -1)
{
printf("不存在该学号,按返回键返回。。。");
getchar();
system("cls");
return;
}
ViewInfo(&student[i]);
printf("是否要修改?(Y/N):");
scanf("%c", &YN);
getchar();
if (YN != 'Y'&& YN != 'y')
{
printf("修改取消...");
getchar();
system("cls");
return;
}
system("cls");
printf("1.学号\n");
printf("2.姓名\n");
printf("3.考试平均成绩\n");
printf("4.同学互评分\n");
printf("5.任课老师评分\n");
scanf("%c", &select);
switch (select)
{
case'1':printf("修改学号"); scanf("%d", &student[i].num); break;
case'2':printf("修改姓名"); scanf("%s", &student[i].name); break;
case'3':printf("考试平均成绩"); scanf("%d", &student[i].writetest); break;
case'4':printf("修改同学互评分"); scanf("%d", &student[i].classtest); break;
case'5':printf("修改任课老师评分"); scanf("%d", &student[i].teatest); break;
}
Sortinfo(student);
SaveStruct(student, sizeof(struct student_info), counter, "student_info.dat");
PM = 0;
printf("修改完成。。。");
getchar();
system("cls");
}
//删除学生信息
void DeLeteInfo()
{
int i, j, num;
char YN;
printf("请输入需要删除的学生信息的学号:");
scanf("%d", &num);
getchar();
if ((i = NumExist(student, num)) == -1)
{
printf("不存在该学号,按返回键返回。。。");
getchar();
system("cls");
return;
}
ViewInfo(&student[i]);
printf("\n确认删除(Y/N):");
scanf("%c", &YN);
getchar();
if (YN != 'Y'&& YN != 'y')
{
printf("修改取消...");
}
else
{
for (j = i; j<counter - 1; j++)
student[j] = student[j + 1];
counter--;
PM = 0;
SaveStruct(student, sizeof(struct student_info), counter, "student_info.dat");
SaveInt(&counter, sizeof(counter), counter, "counter.dat");
printf("删除完成。。。");
}
getchar();
system("cls");
}
// 综合测评分排名
void paiming(struct student_info student[])
{
struct student_info *p[N], *temp;
int i, j;
for (i = 0; i<counter; i++)
p[i] = &student[i];
for (i = 0; i<counter - 1; i++)
for (j = i + 1; j<counter; j++)
{
if (p[i]->zongping < p[j]->zongping)
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
for (i = 0; i<counter; i++)
p[i]->paiming = i + 1;
printf("综合测评分排名完成。。。\n");
}
//浏览所有学生信息
void viewAll()
{
int i;
for (i = 0; i<counter; i++)
{
ViewInfo(&student[i]);
printf("\n");
}
getchar();
printf("按回车键返回。。。");
getchar();
system("cls");
}
//查询排名
void paimingView()
{
int i, num;
printf("请输入需要查询的学生的学号:");
scanf("%d", &num);
getchar();
i = NumExist(student, num);
if (i == -1)
{
printf("不存在该学号。。。");
getchar();
return;
}
if (PM == 0)
{
printf("请先进行成绩排名。。。");
getchar();
return;
}
printf("%s的综合测评分排名%d\n", student[i].name, student[i].paiming);
printf("按回车键返回。。。");
getchar();
return;
}
//退出
void exit()
{
printf("谢谢使用!\n");
exit(0);
}
// 输入信息函数
struct student_info input()
{
struct student_info stu, *sp;
char YN;
sp = &stu;
while (1)
{
while (1)
{
printf("录入学号:");
scanf("%d", &sp->num);
getchar();
if (NumExist(student, sp->num) != -1)
{
printf("该学号已存在,请重新输入。。。");
getchar();
system("cls");
continue;
}
break;
}
printf("录入姓名:");
// gets(sp->name);
printf("录入考试平均成绩:");
scanf("%d", &sp->writetest);
printf("录入同学互评分:");
scanf("%d", &sp->classtest);
printf("录入任课老师评分:");
scanf("%d", &sp->teatest);
getchar();
sp->zongping = (sp->writetest*0.6 + sp->classtest*0.2 + sp->teatest*0.2);
printf("录入完毕,确认信息是否正确(Y/N)");
YN = getchar();
getchar();
if (YN == 'Y' || YN == 'y')
break;
else
{
printf("按回车键重新录入信息。。");
getchar();
system("cls");
continue;
}
}
system("cls");
return stu;
}
//排序函数
void Sortinfo(struct student_info student[])
{
int i, j;
struct student_info temp;
for (i = 0; i<counter - 1; i++)
for (j = i + 1; j <= counter - 1; j++)
{
if (student[i].num<student[j].num)
{
temp = student[i];
student[i] = student[j];
student[i] = temp;
}
}
}
//显示学生信息
void ViewInfo(struct student_info *sp)
{
printf("学号\t姓名\n");
printf("%d\t%s\n", sp->num, sp->name);
printf("考试平均成绩\t同学互评分\t任课老师评分\n");
printf("%d\t%d\t%d\n", sp->writetest, sp->classtest, sp->teatest);
printf("综合分\n");
printf("%.2f\n", sp->zongping);
if (PM == 1)
{
printf("综合测评分排名\n");
printf("%f\n", sp->zongping);
}
}
//信息存盘(结构体)
void SaveStruct(struct student_info *sp, int SIZE, int n, char filename[20])
{
FILE *fp;
fp = fopen(filename, "wb");
fwrite(sp, SIZE, n, fp);
fclose(fp);
}
//读取信息(结构体)
void LoadStruct(struct student_info *sp, int SIZE, int n, char filename[20])
{
FILE *fp;
fp = fopen(filename, "rb");
fread(sp, SIZE, n, fp);
fclose(fp);
}
//信息存盘(整型)
void SaveInt(int*p, int size, int n, char filename[20])
{
FILE *fp;
fp = fopen(filename, "wb");
fwrite(p, size, n, fp);
fclose(fp);
}
//读取信息(整型)
void LoadInt(int*p, int size, int n, char filename[20])
{
FILE *fp;
fp = fopen(filename, "rb");
fread(p, size, n, fp);
fclose(fp);
}
//检索学号
int NumExist(struct student_info student[], int num)
{
int i;
for (i = 0; i<counter; i++)
{
if (student[i].num == num)
return i;
}
return -1;
}
//浏览学生信息
void view()
{
int i, num;
printf("请输入需要浏览的学生信息的学号:");
scanf("%d", &num);
getchar();
if ((i = NumExist(student, num)) == -1)
{
printf("不存在该学号,按回车键返回。。。");
getchar();
system("cls");
return;
}
ViewInfo(&student[i]);
printf("\n按回车键返回。。。");
getchar();
system("cls");
return;
}
编码不易,望采纳哦!