#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define SIZE 100
struct STUDENT
{
long studentid;
char name[10];
int age;
char sex;
float math;
float english;
float programc;
float sumgrade;
float avegrade;
}stu[SIZE];
void head();//界面
void student_input(int n);//信息输入
void save(int n);//信息保存
void load(int n);//信息读取
void deldata(int n);//删除信息
void adddata(int n);//追加信息
void alterdata(int n);//修改信息
void finddata(int n);//按学号查找信息
void statdata(int n);//统计各分数段人数
void rankdata(int n);//排序
void clearflush()//清理缓冲区数据
{
char ch=getchar();
while(ch!='\n')
{
ch=getchar();
}
}
main()//调控
{
aa:int num1;
do{
int n;
char s;
head();//界面
int num;
printf("\n");
printf("*请选择 (1~9)*:");
scanf("%d",&num);
while(num<1||num>9)
{
printf("\n");
printf("错误!请选择所需功能 (1~9):");
scanf("%d",&num);
clearflush();
}
if(num==1)
{
printf("\n");
printf("*注意:若已有学生信息数据,使用录入功能将覆盖已有信息*\n");
printf("\n");
printf("您需要输入多少个学生的信息?(请键入一个数字,输入-1即可回到上一界面):");
fflush(stdin);
scanf("%d",&n);
clearflush();
printf("\n");
if(n==-1) goto aa;
printf("*********************学生基本信息录入和保存**********************\n"
"\n");
student_input(n);
printf("*是否保存此次数据?* (y/n): ");//输入完成后是否保存的判断
char s;
scanf(" %s",&s);
clearflush();
if(s=='y'||s=='Y') save(n);
if(s=='n'||s=='N') return 0;
}
if(num==2)
{
printf("\n");
printf("*********************读取学生信息**********************\n"
"\n");
load(SIZE);
}
if(num==3)
{
printf("\n");
printf("*********************删除学生信息**********************\n"
"\n");
deldata(SIZE);
}
if(num==4)
{
printf("\n");
printf("*********************追加学生信息**********************\n"
"\n");
adddata(SIZE);
}
if(num==5)
{
printf("\n");
printf("*********************修改学生信息**********************\n"
"\n");
alterdata(SIZE);
}
if(num==6)
{
printf("\n");
printf("*********************统计学生成绩**********************\n"
"\n");
statdata(SIZE);
}
if(num==7)
{
printf("\n");
printf("******************按学号查找学生信息******************\n"
"\n");
finddata(SIZE);
}
if(num==8)
{
printf("\n");
printf("****************按照分数输出学生信息****************\n"
"\n");
rankdata(SIZE);
}
if(num==9)
{
printf("\n");
printf("*退出系统*");
break;
}
printf("\n");
printf("*任务结束:请选择:1.回到主界面\n"
" 2.结束进程 :");
scanf("%d",&num1);
clearflush();
printf("\n");
if(num1==2) break;
while(num1!=1&&num1!=2)
{
printf("\n");
printf("错误!请重新选择正确的功能!:1.回到主界面\n");
printf(" 2.结束进程 :");
scanf("%d",&num1);
clearflush();
printf("\n");
}
}while(num1==1);
}
void head()//界面
{
printf("*********************学生信息管理系统**********************\n"
"* 1.学生基本信息录入和保存 *\n"
"* 2.读取学生信息 *\n"
"* 3.删除学生信息 *\n"
"* 4.追加学生信息 *\n"
"* 5.修改学生信息 *\n"
"* 6.统计各分段人数并输出学生信息清单 *\n"
"* 7.按学号查找学生信息 *\n"
"* 8.按照平均分输出学生信息清单 *\n"
"* 9.退出系统 *\n"
" *v0.1.0*\n");
}
void student_input(int n)//信息输入
{
int *p,i;
p=(int *)malloc(n*sizeof(STUDENT));
if(p==NULL)
{
printf("no enough memory! 没有申请到足够内存!\n");
exit (0);
}
else {
for(i=0;i<n;i++)
{
printf("*请输入第%d个学生信息:* 进度:%d/%d\n",i+1,i+1,n);
printf("学号 (100~200):");
scanf(" %ld",&stu[i].studentid);
clearflush();
while(stu[i].studentid<100||stu[i].studentid>200)
{
printf("错误!请检查输入的学号是否在100~200,并再次输入该生学号:");
scanf(" %ld",&stu[i].studentid);
clearflush();
}
printf("姓名:");
scanf(" %s",&stu[i].name);
clearflush();
printf("年龄 (15~50):");
scanf(" %d",&stu[i].age);
clearflush();
while(stu[i].age<15||stu[i].age>50)
{
printf("错误!请检查输入的年龄是否在15~50,并再次输入该生年龄:");
scanf("%d",&stu[i].age);
clearflush();
}
printf("性别 (m/f):");
scanf(" %s",&stu[i].sex);
clearflush();
while(stu[i].sex!='m'&&stu[i].sex!='f')
{
printf("错误!请再输入一次该生性别:(m/f):");
scanf("%s",&stu[i].sex);
clearflush();
}
printf("该生高数成绩 (0~100 精确到小数点后一位):");
scanf("%f",&stu[i].math);
clearflush();
while(stu[i].math<0||stu[i].math>100)
{
printf("错误!请检查输入的成绩是否在0~100,并再次输入该科成绩:");
scanf("%f",&stu[i].math);
clearflush();
}
printf("该生大英成绩 (0~100 精确到小数点后一位):");
scanf("%f",&stu[i].english);
clearflush();
while(stu[i].english<0||stu[i].english>100)
{
printf("错误!请检查输入的成绩是否在0~100,并再次输入该科成绩:");
scanf("%f",&stu[i].english);
clearflush();
}
printf("该生C语言成绩 (0~100 精确到小数点后一位):");
scanf("%f",&stu[i].programc);
clearflush();
while(stu[i].programc<0||stu[i].programc>100)
{
printf("错误!请检查输入的成绩是否在0~100,并再次输入该科成绩:");
scanf("%f",&stu[i].programc);
clearflush();
}
printf("\n");
stu[i].sumgrade=stu[i].math+stu[i].english+stu[i].programc;
stu[i].avegrade=(stu[i].sumgrade)/3;
printf("**第%d个学生信息:**\n",i+1);
printf("- 学号 姓名 年龄 性别 高数 大英 C语言 总分 平均成绩 -\n");
printf(" %ld %s %d %c %0.2f %0.2f %0.2f %0.2f %0.2f",
stu[i].studentid,stu[i].name,stu[i].age,stu[i].sex,stu[i].math,stu[i].english,stu[i].programc,stu[i].sumgrade,stu[i].avegrade);
printf("\n"
"\n");
}
printf("完成此次录入!");
printf("\n"
"\n");
}
}
void save(int n) //保存数据
{
FILE *fp;
int j;
fp=fopen("stu_data.txt","w");
if(fp==NULL)
{
printf("error!错误!不能打开文件!\n");
exit(0);
}
else {
printf("successful!成功打开文件!\n");
for(j=0;j<n;j++)
{
fprintf(fp,"%10ld%8s%4d%5c",stu[j].studentid,
stu[j].name,
stu[j].age,
stu[j].sex);
fprintf(fp,"%6.2f%6.2f%6.2f%6.2f%8.2f\n",stu[j].math,
stu[j].english,
stu[j].programc,
stu[j].avegrade,
stu[j].sumgrade);
}
}
fclose(fp);
}
void load(int n)//读取数据
{
FILE *fp;
int i,j;
fp=fopen("stu_data.txt","r");
if(fp==NULL)
{
printf("error!错误!不能打开文件!\n");
exit(0);
}
else
{
for(j=0;j<n;j++)
{
fscanf(fp,"%10ld",&stu[j].studentid);
fscanf(fp,"%8s",&stu[j].name);
fscanf(fp,"%4d",&stu[j].age);
fscanf(fp," %c",&stu[j].sex);
fscanf(fp,"%6f",&stu[j].math);
fscanf(fp,"%6f",&stu[j].english);
fscanf(fp,"%6f",&stu[j].programc);
fscanf(fp,"%6f",&stu[j].avegrade);
fscanf(fp,"%8f",&stu[j].sumgrade);
}
fclose(fp);
printf(
"学号 姓名 年龄 性别 高数 大英 c语言 平均成绩 总成绩\n");
for(i=0;stu[i].studentid!=0.0;i++)
{
printf("%ld %s %d %c %0.2f %0.2f %0.2f %0.2f %0.2f\n",stu[i].studentid,stu[i].name,stu[i].age,stu[i].sex
,st