#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct stu_type{
char num[15];
char name[10];
int age;
int c;
int math;
int en;
int sum;
float ave;
};
struct stu_type stu[100];
int stu_num=0;
void add();//添加
int display(char str[]);//显示
void modify();//修改
void del();//删除
void find();//查找
void compute();//计算
void sort();//排序
void save_txt();//保存文件
void load_txt();//加载文件
void save_bin();//
void load_bin();//
void main()
{
while(1)
{
int choice;
printf("\n 欢迎使用学生信息管理系统\n");
printf("-----------------------------------------\n");
printf(“1.添加学生信息 2.显示学生信息\n”);
printf(“3.修改学生信息 4.删除学生信息\n”);
printf(“5.查找学生信息 6.统计不及格人数、最高分和平均分\n”);
printf(“7.按总分排序 8.保存至文件(文本方式)\n”);
printf(“9.从文件读入 10.保存至文件(二进制方式)\n”);
printf(“11.从文件读入(二进制方式)12.退出程序\n”);
printf("-----------------------------------------\n");
printf(“请选择功能模块,输入数字1-12”);
while(1)
{
scanf("%d",&choice);
if(choice>=1 && choice<=12)
break;
else
printf("输入数字不正确,请重输入1-12:");
}
switch(choice)
{
case 1: add(); break;
case 2: display(""); break;
case 3: modify(); break;
case 4: del(); break;
case 5: find(); break;
case 6: compute(); break;
case 7: sort(); break;
case 8: save_txt(); break;
case 9: load_txt(); break;
case 10:save_bin(); break;
case 11:load_bin(); break;
case 12:exit(0);
}
}
}
void add()//添加
{
int i=stu_num;//学号
printf(“说明:依次输入学生信息,当输入的学号为0时表示输入结束\n”);
while(1)
{
printf(“请输入第%d个学生的信息\n”,i+1);
printf(“请输入学号:”);
scanf("%s",stu[i].num);
if(strcmp(stu[i].num,“0”) == 0)//学号是否为0 ,是0就返回0
break;
printf(“请输入姓名:”);
scanf("%s",stu[i].name);
printf(“请输入年龄:”);
scanf("%d",&stu[i].age);
printf(“请输入c语言成绩:”);
scanf("%d",&stu[i].c);
printf(“请输入数学成绩:”);
scanf("%d",&stu[i].math);
printf(“请输入英语成绩:”);
scanf("%d",&stu[i].en);
stu[i].sum = stu[i].c + stu[i].math + stu[i].en;//计算总分
stu[i].ave = (float)stu[i].sum/3;//计算平均分
i++;
}
stu_num = i;
printf(“总共已输入%d个学生的信息\n”,stu_num);
}
void compute()//计算
{
int i, n=0, max=0, sum=0;
for(i=0; i<stu_num; i++)
{
if(stu[i].c<60)//c语言成绩小于60继续循环直到成绩大于60
n++;
if(max<stu[i].c)//如果c语言成绩大于最大值,那么这个成绩就是最高分
max=stu[i].c;
sum = sum + stu[i].c;
}
printf(" C语言统计结果如下:\n");
printf(“不及格人数\t最高分\t平均分\n”);
printf(" %d \t %d \t%5.2f\n",n,max,(float)sum/stu_num);
}
void del()//删除
{
char str[15], m;
int i, j;
printf(“请输入要删除学生的学号:”);
scanf("%s",str);
i = display(str);//显示输出学号
if(i!=-1)
{
printf(“确认要删除该学生的信息吗?(y/n)”);
m = getche();//输入后立即从控制台取字符
if(m==‘y’ || m==‘Y’)
{
stu_num–;
for(j=i; j<stu_num; j++)//输出的学号小于总学号个数一直循环直到等于总学号个数
stu[j] = stu[j+1];
printf("\n记录删除成功!\n");
}
}
}
int display(char str[])//显示
{
int i, k=-1;
if(strlen(str) == 0)//遇到0结束
{
if(stu_num>0)
{
printf(“学生学号\t姓名\t年龄\tC语言\t数学\t英语\t总分\t平均分\n”);
for(i=0; i<stu_num; i++)
printf("%-16s%s\t%d\t%d\t%d\t%d\t%d\t%5.1f\n",stu[i].num,stu[i].name,
stu[i].age, stu[i].c, stu[i].math, stu[i].en, stu[i].sum, stu[i].ave);
}
else
printf(“学生信息为空!”);
}
else
{
for(i=0; i<stu_num; i++)
{
if(strcmp(str,stu[i].num) == 0)//stu[i]中num这个成员与字符串str是否相等,如果相等就执行
{
printf(“学生学号\t姓名\t年龄\tC语言\t数学\t英语\t总分\t平均分\n”);
printf("%-16s%s\t%d\t%d\t%d\t%d\t%d\t%5.1f\n",stu[i].num,stu[i].name,
stu[i].age, stu[i].c, stu[i].math, stu[i].en, stu[i].sum, stu[i].ave);
k = i;
}
}
if(k==-1)
printf(“没有找到符合条件的学生\n”);
}
return k;
}
void find()//查找
{
char str[15];
printf(“请输入要查找的学生学号:”);
scanf("%s",str);
display(str);
}
void load_bin()//加载到文件里
{
FILE * fp;
char fname[20];
int i=0, flag;
printf(“请输入文件名(如:stu.dat):”);
scanf("%s",fname);
if((fp=fopen(fname,“rb”))==NULL)
{
printf(“不能打开文件,文件读取失败!\n”);
return;
}
while(1)
{
flag = fread(&stu[i], sizeof(struct stu_type), 1, fp);
if(flag == 0)
break;
i++;
}
stu_num = i;
printf("从文件中成功读取%d条记录!\n",i);
fclose(fp);
}
void load_txt()
{
FILE * fp;
char fname[20];
int i=0, flag;
printf(“请输入文件名(如:stu.txt):”);
scanf("%s",fname);
if((fp=fopen(fname,“r”))==NULL)
{
printf(“不能打开文件,文件读取失败!\n”);
return;
}
while(1)
{
flag=fscanf(fp, “%s %s %d %d %d %d %d %f”,stu[i].num,
stu[i].name, &stu[i].age, &stu[i].c, &stu[i].math, &stu[i].en,
&stu[i].sum, &stu[i].ave);
if(flag == EOF)
break;
i++;
}
stu_num = i;
printf("从文件中成功读取%d条记录!\n",i);
fclose(fp);
}
void modify()
{
char str[15], m;
int i;
printf(“请输入要修改的学生学号:”);
scanf("%s",str);
i = display(str);
if(i!=-1)
{
printf("\n确认修改该学生的信息吗?(y/n)\n");
m = getche();
if(m==‘y’ || m==‘Y’)
{
printf("\n请重新输入该学生的信息\n");
printf("\n请输入学号:");
scanf("%s",stu[i].num);
printf(“请输入姓名:”);
scanf("%s",stu[i].name);
printf(“请输入年龄:”);
scanf("%d",&stu[i].age);
printf(“请输入C语言成绩:”);
scanf("%d",&stu[i].c);
printf(“请输入数学成绩:”);
scanf("%d",&stu[i].math);
printf(“请输入英语成绩:”);
scanf("%d",&stu[i].en);
stu[i].sum = stu[i].c + stu[i].math + stu[i].en;
stu[i].ave = (float)stu[i].sum/3;
}
}
}
void save_txt()
{
FILE * fp;
char fname[20];
int i;
printf(“请输入文件名(如:stu.txt):”);
scanf("%s",fname);
if((fp=fopen(fname,“w”))==NULL)
{
printf(“不能打开文件,文件保存失败!\n”);
return;
}
for(i=0; i<stu_num; i++)
fprintf(fp, “%s %s %d %d %d %d %d %5.2f\n”,stu[i].num, stu[i].name,
stu[i].age, stu[i].c, stu[i].math, stu[i].en, stu[i].sum, stu[i].ave);
printf(“文件保存成功!\n”);
fclose(fp);
}
void sort()
{
int i,j;
struct stu_type temp;
for(i=1; i<=stu_num; i++)
for(j=0; j<stu_num; j++)
if(stu[j].sum<stu[j+1].sum)
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
printf(“排序结果如下:\n”);
printf(“名次\t学生学号\t姓名\t年龄\tC语言\t数学\t英语\t总分\t平均分\n”);
for(i=0; i<stu_num; i++)
printf("%d\t%-16s%s\t%d\t%d\t%d\t%d\t%d\t%5.1f\n",i+1,stu[i].num,
stu[i].name, stu[i].age, stu[i].c, stu[i].math, stu[i].en,
stu[i].sum, stu[i].ave);
}
void save_bin()
{
FILE * fp;
char fname[20];
printf(“请输入文件名(如:stu.dat):”);
scanf("%s",fname);
if((fp=fopen(fname,“wb”))==NULL)
{
printf(“不能打开文件,文件保存失败!\n”);
return;
}
fwrite(stu,sizeof(struct stu_type), stu_num,fp);
printf("文件保存成功!\n");
fclose(fp);
}