#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <windows.h>//界面
struct student
{
int grade;
char num[20];
char name[10];
int score1;
int score2;
int sum;
double average;
};
void liulan(char *stud);
void aver(char *stud);
void luru(char *stud);
void tianjia(char *stud);
void xiugai(char *stud);
void chazhao(char *stud);
void shanchu(char *stud);
void caidan();
void xuehao(char *stud);
void banji(char *stud);
void bujige(char *stud);
void getch();
void printf1();
int main()
{
int k;
system(“color 0E”);//改变颜色
while(1)
{
system(“cls”);//清屏
printf("--------------------------------------------------------------------------------\n");
printf(" * 歡迎使用學生信息系統! * \n");
printf(" ^ - ^ \n");
printf("--------------------------------------------------------------------------------\n");
printf(" * 该 系 统 操 作 项 如 下 * \n");
printf("\n | 1:浏览学生记录 | \n");
printf(" | 2:录入学生记录 |(注意:此项将覆盖原来的数据!) \n");
printf(" | 3:添加学生记录 | \n");
printf(" | 4:修改学生记录 | \n");
printf(" | 5:查找学生记录 | \n");
printf(" | 6:删除学生记录 | \n");
printf(" | 0:退出系统 | \n");
printf(" 请选择:[ ]\b\b");
scanf("%d",&k);
switch(k)
{
case 0:exit(0);
case 1:liulan(“stud.txt”);system(“pause”);break;
case 2:luru(“stud.txt”);system(“pause”);break;
case 3:tianjia(“stud.txt”);system(“pause”);break;
case 4:xiugai(“stud.txt”);system(“pause”);break;
case 5:chazhao(“stud.txt”);system(“pause”);break;
case 6:shanchu(“stud.txt”);system(“pause”);break;
default:printf(“选择无效,请重新选择!\n”);system(“pause”);
}
}
return 0;
}
void printf1()
{
printf("============================================================================\n");
printf(“班号 学号 姓名 数据结构 C语言 总分 平均分\n”);
}
void liulan(char *stud)
{
FILE *fp;
struct student stu;
int t=0;
float result;
float average;
if((fp=fopen(stud,“rb”))=NULL)
{
printf(“文件打不开\n”);
exit(0);
}
printf(“系统中的学生记录如下:\n”);
printf("\n");
while (fread(&stu,sizeof(struct student),1,fp)1)
{
result=(float)(stu.score1+stu.score2);
average = result /2;
printf(“班号:%d\n”,stu.grade);
printf(“学号:%s\n”,stu.num);
printf(“姓名:%s\n”,stu.name);
printf(“数据结构:%d\n”,stu.score1);
printf(“C语言:%d\n”,stu.score2);
printf(“总分:%d\n”,(int)result);
printf(“平均分:%d\n”,(int)average);
printf("\n");
t=t+1;
}
printf(“文件中共有%d条记录\n”,t);
fclose(fp);
}
void luru(char *stud)
{
FILE *fp;
struct student stu;
int t=0;
if((fp=fopen(stud,“wb”))=NULL)
{
printf(“文件打不开\n”);
exit(0);
}
printf("=\n");
printf(“请输入学生信息(注意:当输入的班级为0时代表输入结束):\n”);
printf("===\n");
printf(“班级 学号 姓名 数据结构 C语言 \n”);
scanf("%d",&stu.grade);
while(stu.grade!=0)
{
scanf("%s %s %d %d\n",&stu.num,&stu.name,&stu.score1,&stu.score2);
fwrite(&stu,sizeof(struct student),1,fp);
t=t+1;
scanf("%d",&stu.grade);
getchar();
}
printf(“共录入了%d条记录\n”,t);
fclose(fp);
}
void tianjia(char *stud)
{
FILE *fp;
struct student stu,stu1;
int m=0;
int n;
char c[10];
if((fp=fopen(stud,“rb+”))==NULL)
{
printf(“文件打不开\n”);
exit(0);
}
printf(“请输入班号:”); scanf("%d",&stu.grade);
n=stu.grade;
sprintf(c, “%d”, n);
m=strlen©;
if(m6)
{
printf(“请输入学号:”); scanf("%s",&stu.num);
while(fread(&stu1,sizeof(struct student),1,fp)==1)
{
if(strcmp(stu1.num,stu.num)==0)
{
printf(“学号重复,请重新添加!”);
printf(“请输入学号:”); scanf("%s",&stu.num);
}
}
printf(“请输入姓名:”); scanf("%s",&stu.name);
printf(“请输入数据结构成绩:”); scanf("%d",&stu.score1);
while(stu.score1>100||stu.score1<0)
{
printf(“输入的成绩有误,请重新输入!”);
printf(“请输入数据结构成绩:”); scanf("%d",&stu.score1);
}
printf(“请输入C语言成绩:”); scanf("%d",&stu.score2);
while(stu.score2>100||stu.score2<0)
{
printf(“输入的成绩有误,请重新输入!”);
printf(“请输入C语言成绩:”); scanf("%d",&stu.score2);
}
fwrite(&stu,sizeof(struct student),1,fp);
fclose(fp);
printf("\n添加成功!");
}
else
{
printf(“班号错误,请重新输入!”);
tianjia(stud);
}
}
void xiugai(char *stud)
{
int n=0;
FILE *fp;
struct student stu;
char stunum[20];
int t=0;
if((fp=fopen(stud,“rb+”)=NULL)
{
printf(“文件打不开\n”);
exit(0);
}
printf(“请输入要修改的学生学号\n”);
scanf("%15s",&stunum);
while(fread(&stu,sizeof(struct student),1,fp)1)
{
n=n+1;
if(strcmp(stu.num,stunum) =0)
{
printf(“已查找到该记录,该学生信息记录如下:\n”);
printf("\n");
printf(“班号 学号 姓名 数据结构 C语言 \n”);
printf("%d%15s%10s%7d%7d\n",stu.grade,stu.num,stu.name,stu.score1,stu.score2);
printf("\n");
printf(“请输入新的学生信息(注意:输入后请按0结束 )\n”);
printf("====================================================================\n");
printf(“班级 学号 姓名 数据结构 C语言 \n”);
scanf(" %d %s %s %d %d %dd",&stu.grade,&stu.num,&stu.name,&stu.score1,&stu.score2);
fseek(fp,(n-1)*sizeof(struct student),SEEK_SET);
if(fwrite(&stu,sizeof(struct student),1,fp)!=1);
t=1;
printf(“修改成功!\n”);
break;
}
}
if(t0)
printf(“没有找到对应记录,请重新输入!\n”);
fclose(fp);
}
void chazhao(char *stud)
{
caidan();
}
void caidan()
{
int k;
{
system(“cls”);
printf("--------------------------------------------------------------------------------\n");
printf(" * 歡迎使用學生信息系統! * \n");
printf(" ^ - ^ \n");
printf("--------------------------------------------------------------------------------\n");
printf(" * 该 系 统 操 作 项 如 下 * \n");
printf("\n || 1:按学号查找 || \n");
printf(" || 2:按班级查找 || \n");
printf(" || 3:查找不及格 || \n");
printf(" || 0:返回菜单 || \n");
printf(" 请选择:[ ]\b\b");
scanf("%d",&k);
}
switch(k)
{
case 0:main();
case 1:xuehao(“stud.txt”);system(“pause”);break;
case 2:banji(“stud.txt”);system(“pause”);break;
case 3:bujige(“stud.txt”);system(“pause”);break;
default:printf(“选择无效,请重新选择!\n”);system(“pause”);
}
caidan();
}
void xuehao(char *stud)
{
FILE *fp;
struct student stu;
char stunum[20];
int t=0;
float result;
float average ;
if((fp=fopen(stud,“rb”))==NULL)
{
printf(“文件打不开\n”);
exit(0);
}
printf(“请输入要查找的学生学号\n”);
scanf("%s",&stunum);
printf(“查找结果如下:\n”);
while(fread(&stu,sizeof(struct student),1,fp)==1)
{
if(strcmp(stu.num,stunum)==0)
{
result=(float)(stu.score1+stu.score2);
average = result /2;
printf1();
printf("%d%15s%10s%7d%7d%7d%7d\n",stu.grade,stu.num,stu.name,stu.score1,stu.score2,(int)result,(int)average);
t=1;
}
}
if(t0)
printf(“没有找到对应记录\n”);
getch();
caidan();
}
void banji(char *stud)
{
FILE *fp;
struct student stu;
int stugrade;
int t=0;
float result;
float average ;
if((fp=fopen(stud,“rb”))==NULL)
{
printf(“文件打不开\n”);
exit(0);
}
printf(“请输入要查找的班级\n”);
scanf("%d",&stugrade);
printf(“查找结果如下:\n”);
while(fread(&stu,sizeof(struct student),1,fp)==1)
{
if(stu.grade ==stugrade)
{
result=(float)(stu.score1+stu.score2);
average = result /2;
printf1();
printf("%d%15s%10s%7d%7d%7d%7d\n",stu.grade,stu.num,stu.name,stu.score1,stu.score2,(int)result,(int)average);
t=1;
}
}
if(t0)
printf(“没有找到对应记录\n”);
getch();
caidan();
}
void bujige(char *stud)
{
FILE *fp;
struct student stu;
float result;
float average ;
int t=0;
if((fp=fopen(stud,“rb”))==NULL)
{
printf(“文件打不开\n”);
exit(0);
}
while(fread(&stu,sizeof(struct student),1,fp)==1)
{
while((stu.score1<60&&stu.score1>0)||(stu.score2<60&&stu.score2>0))
{
result=(float)(stu.score1+stu.score2);
average = result /2;
printf1();
printf("%d%15s%10s%7d%7d%7d%7d\n",stu.grade,stu.num,stu.name,stu.score1,stu.score2,(int)result,(int)average);
t=t+1;
break;
}
}
if(t0)
printf(“没有找到对应记录\n”);
getch();
caidan();
}
void shanchu(char *stud)
{
FILE *fp;
struct student stu[100];
char stunum[10];
int t=0;
int i,j,flag=0;
if((fp=fopen(stud,“rb”))==NULL)
{
printf(“文件打不开!\n”);
exit(0);
}
while(fread(&stu[t],sizeof(struct student),1,fp)==1)
t++;
printf(“请输入要删除的学生的学号\n”);
scanf("%s",&stunum);
while(strcmp(stunum,“0”)!=0)
{
for(i=0;i<t;i++)
if(strcmp(stu[i].num,stunum)==0)
{
flag=1;
break;
}
if(flag0)
{
printf(“没有找到对应的记录,请重新输入要删除的学生的学号\n”);
scanf("%s",&stunum);
}
else
{
for(j=i;j<t-1;j++)
stu[j]=stu[j+1];
break;
}
}
fclose(fp);
if((fp=fopen(stud,“wb”))==NULL)
{
printf(“文件打不开!\n”);
exit(0);
}
for(i=0;i<t-1;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
printf(“删除成功!\n”);
fclose(fp);
}
/*
system(“color 1D”);
颜色属性由两个十六进制数字指定 – 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
*/