third commit

master
ouyangkai 6 years ago
parent 934df8ef4e
commit ab383e4a48

@ -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 ;
}
}
}
}
Loading…
Cancel
Save