You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
student_status_management_s.../学生成绩记录簿设计(完成版).cpp

389 lines
8.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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 ;
}
}
}
}