|
|
|
@ -0,0 +1,388 @@
|
|
|
|
|
#include<stdio.h>
|
|
|
|
|
#include<stdlib.h>
|
|
|
|
|
#include<string.h>
|
|
|
|
|
#include<conio.h>
|
|
|
|
|
#include<dos.h>
|
|
|
|
|
#define LEN sizeof(struct student)
|
|
|
|
|
#define FORMAT "\t%s\t%s\t\t%d\n" //宏定义输出格式
|
|
|
|
|
#define DATA peo[i].name,peo[i].num,peo[i].score //宏定义结构体(方便输出)
|
|
|
|
|
|
|
|
|
|
struct student
|
|
|
|
|
{
|
|
|
|
|
char name[100];
|
|
|
|
|
char num[100];
|
|
|
|
|
int score;
|
|
|
|
|
};
|
|
|
|
|
struct student peo[100];
|
|
|
|
|
void addman();
|
|
|
|
|
void queryman();
|
|
|
|
|
void delman();
|
|
|
|
|
void update();
|
|
|
|
|
void outputman();
|
|
|
|
|
void menu();
|
|
|
|
|
|
|
|
|
|
void menu()//菜单模块
|
|
|
|
|
{
|
|
|
|
|
system("cls");
|
|
|
|
|
printf("\n\t\t*********C语言成绩记录簿*********\n");
|
|
|
|
|
printf("\t\t┌-------------------------------┐\n");
|
|
|
|
|
printf("\t\t│ 1.添加学生信息 │\n");
|
|
|
|
|
printf("\t\t│ 2.查询学生信息 │\n");
|
|
|
|
|
printf("\t\t│ 3.删除学生信息 │\n");
|
|
|
|
|
printf("\t\t│ 4.修改学生信息 │\n");
|
|
|
|
|
printf("\t\t│ 5.分段输出学生信息 │\n");
|
|
|
|
|
printf("\t\t│ 0.退出 │\n");
|
|
|
|
|
printf("\t\t└-------------------------------┘\n");
|
|
|
|
|
printf("\t\t请您选择功能(0-5):");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tou() //列表头
|
|
|
|
|
{ system("cls");
|
|
|
|
|
printf("\n");
|
|
|
|
|
printf("**************学生信息列表*********************\n\n");
|
|
|
|
|
printf("\t姓名\t 学号\t C语言成绩\n");
|
|
|
|
|
}
|
|
|
|
|
void wei() //列表尾
|
|
|
|
|
{
|
|
|
|
|
printf("\n**********************************************\n\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main ()
|
|
|
|
|
{
|
|
|
|
|
int n;
|
|
|
|
|
menu();
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
while(n)
|
|
|
|
|
{
|
|
|
|
|
switch(n)
|
|
|
|
|
{
|
|
|
|
|
case 1:
|
|
|
|
|
addman();
|
|
|
|
|
system("pause");
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
queryman();
|
|
|
|
|
system("pause");
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
delman();
|
|
|
|
|
system("pause");
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
update();
|
|
|
|
|
system("pause");
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
outputman();
|
|
|
|
|
system("pause");
|
|
|
|
|
break;
|
|
|
|
|
default:break;
|
|
|
|
|
}
|
|
|
|
|
menu();
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void addman()
|
|
|
|
|
{
|
|
|
|
|
FILE *p1;
|
|
|
|
|
int i,n,count=0; // count为学生人数
|
|
|
|
|
if ((p1=fopen("D:\\课设1\\student.txt","a+"))==NULL) //打开linkman文件
|
|
|
|
|
{
|
|
|
|
|
printf("不能打开此文件");
|
|
|
|
|
exit(0);
|
|
|
|
|
}
|
|
|
|
|
while(!feof(p1)) //feof为检测文件结束符
|
|
|
|
|
{
|
|
|
|
|
if(fread(&peo[count],LEN,1,p1)==1)
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
fclose(p1); //关闭文件
|
|
|
|
|
if(count==0)
|
|
|
|
|
printf("\n\t\t学生信息列表为空!\n\n");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
system("cls"); //清屏
|
|
|
|
|
outputman();
|
|
|
|
|
}
|
|
|
|
|
if ((p1=fopen("D:\\课设1\\student.txt","wb"))==NULL)//以二进制方式打开linkman文件
|
|
|
|
|
{
|
|
|
|
|
printf("\t\t不能打开学生信息列表\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
fwrite(&peo[i],LEN,1,p1);
|
|
|
|
|
|
|
|
|
|
printf("\t\t是否添加学生信息(1 or 0):");
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
while(n)
|
|
|
|
|
{
|
|
|
|
|
printf("\t\t请输入信息:\n");
|
|
|
|
|
printf("\t\t姓名:");//输入姓名
|
|
|
|
|
scanf("\t\t%s",&peo[count].name);
|
|
|
|
|
|
|
|
|
|
for(i=0;i<count;i++)//该学生信息是否已经存在
|
|
|
|
|
{
|
|
|
|
|
if(strcmp(peo[i].name,peo[count].name)==0)
|
|
|
|
|
{
|
|
|
|
|
printf("\t\t该学生信息已存在!\n");
|
|
|
|
|
getch();
|
|
|
|
|
fclose(p1); //关闭文件
|
|
|
|
|
return; //重新输入学生学习下
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("\t\t学号:"); //输入学号
|
|
|
|
|
scanf("\t\t%s",&peo[count].num);
|
|
|
|
|
printf("\t\tC语言成绩:"); //C语言成绩
|
|
|
|
|
scanf("\t\t%d",&peo[count].score);
|
|
|
|
|
fwrite(&peo[count],LEN,1,p1);
|
|
|
|
|
printf("\t\t%s 添加成功!\n",peo[count].name);
|
|
|
|
|
count++; //学生信息数目加一
|
|
|
|
|
n=0;
|
|
|
|
|
}
|
|
|
|
|
fclose(p1);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void queryman()
|
|
|
|
|
{
|
|
|
|
|
FILE *p1;
|
|
|
|
|
int i,n=1,m,count=0,flag=1;
|
|
|
|
|
|
|
|
|
|
if ((p1=fopen("D:\\课设1\\student.txt","rb"))==NULL)//以二进制方式打开student文件
|
|
|
|
|
exit(0);
|
|
|
|
|
while(!feof(p1))//判断是否到达文件尾部
|
|
|
|
|
if(fread(&peo[count],LEN,1,p1)) //将文件中的数据读到结构体中
|
|
|
|
|
count++;
|
|
|
|
|
fclose(p1);
|
|
|
|
|
|
|
|
|
|
if(count==0)
|
|
|
|
|
{
|
|
|
|
|
printf("学生信息列表为空!\n");
|
|
|
|
|
printf("请按任意键继续");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
while(n)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
system("cls");//清屏
|
|
|
|
|
while(flag!=0)
|
|
|
|
|
{
|
|
|
|
|
printf("\n\t\t**********查询方式***********\n");
|
|
|
|
|
printf("\t\t┌-------------------------------┐\n");
|
|
|
|
|
printf("\t\t│ 1.姓名 │\n");
|
|
|
|
|
printf("\t\t│ 2.学号 │\n");
|
|
|
|
|
printf("\t\t│ 0.返回 │\n");
|
|
|
|
|
printf("\t\t└-------------------------------┘\n");
|
|
|
|
|
printf("\n\t\t请选择查询方式:");
|
|
|
|
|
scanf("\t\t%d",&m);//选择查询式
|
|
|
|
|
|
|
|
|
|
if(m==1)
|
|
|
|
|
{
|
|
|
|
|
char name[100];
|
|
|
|
|
printf("\t\t请输入姓名:");
|
|
|
|
|
scanf("%s",name);
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(strcmp(name,peo[i].name)==0)
|
|
|
|
|
{ tou();
|
|
|
|
|
printf(FORMAT,DATA);
|
|
|
|
|
}
|
|
|
|
|
if(count==i)
|
|
|
|
|
printf("\t\t该学生不存在!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(m==2)
|
|
|
|
|
{
|
|
|
|
|
char num1[15];
|
|
|
|
|
printf("请输入学号:");
|
|
|
|
|
scanf("%s",num1);
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(strcmp(num1,peo[i].num)==0)
|
|
|
|
|
{ tou();
|
|
|
|
|
printf(FORMAT,DATA);
|
|
|
|
|
}
|
|
|
|
|
if(count==i)
|
|
|
|
|
printf("该学号学生不存在!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(m==0) flag=0,n=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void update() //修改学生信息函数模块
|
|
|
|
|
{
|
|
|
|
|
FILE *p1;
|
|
|
|
|
int i,m,n;
|
|
|
|
|
int flag=1,count=0,j=1;
|
|
|
|
|
char name[100];
|
|
|
|
|
if ((p1=fopen("D:\\课设1\\student.txt","r+"))==NULL)//以二进制方式打开student文件
|
|
|
|
|
exit(0);
|
|
|
|
|
while(!feof(p1))//判断是否到达文件尾部
|
|
|
|
|
if(fread(&peo[count],LEN,1,p1)==1) //将文件中的数据读到结构体中
|
|
|
|
|
count++;
|
|
|
|
|
fclose(p1); //关闭文件
|
|
|
|
|
if(count==0)
|
|
|
|
|
{
|
|
|
|
|
printf("学生信息列表为空!\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
while(j==1)
|
|
|
|
|
{
|
|
|
|
|
outputman();
|
|
|
|
|
printf("请输入想要修改的学生的名字:");
|
|
|
|
|
scanf("%s",name);
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(strcmp(name,peo[i].name)==0)
|
|
|
|
|
{
|
|
|
|
|
printf("已找到学生信息!\n");
|
|
|
|
|
printf("是否修改?(1 or 0):");
|
|
|
|
|
scanf("%d",&n);
|
|
|
|
|
if(n==0)
|
|
|
|
|
{ j=0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
while(n==1)
|
|
|
|
|
{
|
|
|
|
|
while(flag==1)
|
|
|
|
|
{
|
|
|
|
|
system("cls");//清屏
|
|
|
|
|
printf("\n\t\t************选择修改项************\n");
|
|
|
|
|
printf("\t\t┌-------------------------------┐\n");
|
|
|
|
|
printf("\t\t│ 1.修C语言成绩 │\n");
|
|
|
|
|
printf("\t\t│ 2.修改学号 │\n");
|
|
|
|
|
printf("\t\t│ 0.返回 │\n");
|
|
|
|
|
printf("\t\t└-------------------------------┘\n");
|
|
|
|
|
printf("\n\t\t请选择功能前的数字:");
|
|
|
|
|
scanf("\t\t%d",&m);//选择修改方式
|
|
|
|
|
if(m==1)
|
|
|
|
|
{
|
|
|
|
|
printf("请输入要修改的信息:");
|
|
|
|
|
scanf("%d",&peo[i].score);
|
|
|
|
|
printf("修改成功!\n");
|
|
|
|
|
getch();
|
|
|
|
|
}
|
|
|
|
|
if(m==2)
|
|
|
|
|
{
|
|
|
|
|
printf("请输入要修改的信息:");
|
|
|
|
|
scanf("%s",&peo[i].num);
|
|
|
|
|
printf("修改成功!\n");
|
|
|
|
|
getch();
|
|
|
|
|
}
|
|
|
|
|
if(m==0)
|
|
|
|
|
{
|
|
|
|
|
n=0;//退出修改功能
|
|
|
|
|
}
|
|
|
|
|
printf("退出还是继续修改?(1 or 0):");
|
|
|
|
|
scanf("%d",&flag);
|
|
|
|
|
if(flag==0) n=0,j=0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(i==count)
|
|
|
|
|
printf("\n不存在该学生信息!");
|
|
|
|
|
getch();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if((p1=fopen("D:\\课设1\\student.txt","wb"))==NULL)
|
|
|
|
|
return;
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
fwrite(&peo[i],LEN,1,p1);
|
|
|
|
|
fclose(p1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void outputman()
|
|
|
|
|
{
|
|
|
|
|
FILE *p1;
|
|
|
|
|
int i,count=0;
|
|
|
|
|
system("cls");
|
|
|
|
|
if ((p1=fopen("D:\\课设1\\student.txt","rb"))==NULL)//以二进制方式打开student文件
|
|
|
|
|
exit(0);
|
|
|
|
|
while(!feof(p1))//判断是否到达文件尾部
|
|
|
|
|
if(fread(&peo[count],LEN,1,p1)==1) //将文件中的数据读到结构体中
|
|
|
|
|
count++;
|
|
|
|
|
fclose(p1);
|
|
|
|
|
tou();
|
|
|
|
|
printf("\n低于60分的有:\n");
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(peo[i].score<60)
|
|
|
|
|
printf(FORMAT,DATA);
|
|
|
|
|
}
|
|
|
|
|
printf("\n大于60分小于80分的有:\n");
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(peo[i].score>=60&&peo[i].score<80)
|
|
|
|
|
printf(FORMAT,DATA);
|
|
|
|
|
}
|
|
|
|
|
printf("\n大于80分小于90分的有:\n");
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(peo[i].score>=80&&peo[i].score<90)
|
|
|
|
|
printf(FORMAT,DATA);
|
|
|
|
|
}
|
|
|
|
|
printf("\n大于90分的有:\n");
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(peo[i].score>=90)
|
|
|
|
|
printf(FORMAT,DATA);
|
|
|
|
|
}
|
|
|
|
|
wei();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void delman()
|
|
|
|
|
{
|
|
|
|
|
FILE *p1;
|
|
|
|
|
int i,j,k=1,count=0;
|
|
|
|
|
char name[100];
|
|
|
|
|
if((p1=fopen("D:\\课设1\\student.txt","r+"))==NULL)
|
|
|
|
|
return;
|
|
|
|
|
while(!feof(p1))
|
|
|
|
|
if(fread(&peo[count],LEN,1,p1)==1)
|
|
|
|
|
count++;
|
|
|
|
|
fclose(p1);
|
|
|
|
|
if(count==0)
|
|
|
|
|
{
|
|
|
|
|
printf("学生信息列表为空");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
outputman();
|
|
|
|
|
printf("请输入想要删除的学生的名字:");
|
|
|
|
|
scanf("%s",&name);
|
|
|
|
|
for(i=0;i<count;i++)
|
|
|
|
|
{
|
|
|
|
|
if(strcmp(name,peo[i].name)==0)
|
|
|
|
|
{
|
|
|
|
|
printf("已找到该学生信息!\n是否删除(1 or 0)?");
|
|
|
|
|
scanf("%d",&k);
|
|
|
|
|
if(k==1)
|
|
|
|
|
{
|
|
|
|
|
for(j=i;j<count;j++)
|
|
|
|
|
peo[j]=peo[j+1];
|
|
|
|
|
count--;
|
|
|
|
|
if((p1=fopen("D:\\课设1\\student.txt","wb"))==NULL)
|
|
|
|
|
return;
|
|
|
|
|
for(j=0;j<count;j++)
|
|
|
|
|
fwrite(&peo[j],LEN,1,p1);
|
|
|
|
|
fclose(p1);
|
|
|
|
|
printf("删除成功!");
|
|
|
|
|
return ;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|