在校完成项目—————学生信息自动筛选程序

一、实验题目:模仿EXCEL中的自动筛选,设计学生信息的自动筛选程序。
二、实验要求
1)自定义班级学生信息结构体,结构体的数据项超过5个(包含5个)。
2)输入班级的全部数据。
3)对每个数据项根据数据项的值进行筛选。
4)实现模糊筛选,例如可将姓名中包含“张”或姓“张”的学生列出。
5)输出筛选的结果。
6)可以进行自定义的筛选。
7)班级的全部数据能够以文件方式保存。
8)筛选之后的数据可以根据需要以文件方式保存。
9)提示语言清晰明确,界面美观适用。
三、 个人感受:人生就像打电话,不是你先挂,就是我先挂,这道题目一到手,我发现我应该挂了吧,模糊算法,啥是模糊算法呢?就是那个算法很模糊呗!在博览群网群书群人后才知道不过就是字符串匹配,不过具体的代码确实不容易呀,代码貌似很多很多,不过细心的你会发现,其实很多都是一样的重复代码,i'm lovin' it。
四、代码
#include <stdio.h>
#include <stdlib.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node 
{char no[10];
 char name[20];
 int age;
 int score;
 int n;
}stu[100];                  
int total=0;                
void add()
{char c;                                  
  do
    {printf("/n/n/t/t/t输入学生的学号:");
     scanf("%s",stu[total].no);
     printf("/t/t/t输入学生的姓名:");
     scanf("%s",stu[total].name);
     printf("/t/t/t输入学生的年龄:");
     scanf("%d",&stu[total].age);
     printf("/t/t/t输入成绩:");
     scanf("%d",&stu[total].score);
     system("cls");
     stu[total].n=0;
     total++;
  printf("/t/t/t是否继续输入?(按y继续,其他退出)");
c=getch();
     printf("/n");
    }while(c=='y'||c=='Y');
 printf("/t/t/t成功输入数据.../n");             
}
void save_filt()
{int i;
 FILE *fp;
 if((fp=fopen("filter.txt","r"))==NULL)
{printf("cannot open file");
 exit(0);
}
 for(i=0;i<total;i++)
 {fread(&stu[i],sizeof(struct node),1,fp);
  if(stu[i].n==0)
  printf("%s/t %s/t %d/t %d/n",stu[i].no,stu[i].name,stu[i].age,stu[i].score);
 }
 fclose(fp);
}
int show()                  
{int i,flag;
 FILE *fp;
 printf("/t/t/t是否以文件方式保存0.否 1.是:");
 scanf("%d",&flag);
 if(flag)
{if((fp=fopen("filter.txt","w"))==NULL)
{printf("cannot open file");}
for(i=0;i<total;i++)
if(fwrite(&stu[i],sizeof(struct node),1,fp)!=1)
 printf("file write error/n");
 fclose(fp);
printf("/t/t/t已经以文件形式保存...");  
printf("学号/t姓名/t年龄/t总分/n");
for(i=0;i<=total;i++)
if(stu[i].n==1)
{printf("%s/t %s/t %d/t %d/n",stu[i].no,stu[i].name,stu[i].age,stu[i].score);
stu[i].n=0; }
return 1;        
}
 else
{printf("学号/t姓名/t年龄/t总分/n");
for(i=0;i<=total;i++)
if(stu[i].n==1)
{printf("%s/t %s/t %d/t %d/n",stu[i].no,stu[i].name,stu[i].age,stu[i].score);
stu[i].n=0;
}
return 0;
}
}
void filt_age()
{int i,j,t;                            
 printf("/t/t/t请输入要筛选的年龄:/n");
 scanf("%d",&j);
 for(i=0;i<total;i++)
if(stu[i].age==j)
stu[i].n=1;
t=show();
if(t)
  save_filt();
}
void filt_name()
{int i,t;                    
 char name[20];            
 printf("/t/t/t请输入要筛选的名字:/n");
 scanf("%s",name);
 for(i=0;i<total;i++)
if(strcmp(stu[i].name,name)==0)
  stu[i].n=1;
  t=show();
  if(t)
  save_filt();
}
void filt_no()
{int i,t;                      
 char no[10];                
 printf("/t/t/t请输入要筛选的学号:");
 scanf("%s",no);
for(i=0;i<total;i++)
if(!strcmp(stu[i].no,no))
stu[i].n=1;
t=show();
if(t)
 save_filt();
}
void filt_grade()
{int i,t,score;                        
 printf("/t/t/t请输入要筛选的成绩:/n");
 scanf("%d",&score);
 for(i=0;i<total;i++)
if(stu[i].score==score)
stu[i].n=1;
t=show();
if(t)
 save_filt();
}
void filter()
{int i;
 system("cls");
 do
  {printf("/n/n/n/t/t***************common filter****************/n/n");
   printf("/t/t/t1   filter the numeber/n");
   printf("/t/t/t2   filter the name/n");
   printf("/t/t/t3   filter the age/n");
   printf("/t/t/t4   filter the grade/n");       
   printf("/t/t/t0   exit the filter/n");
   printf("/t/t********************************************/n");
   printf("/t/t/tplease input a num:");
   scanf("%d",&i);
   switch(i)
    {case 1:filt_no();break;
case 2:filt_name();break;
case 3:filt_age();break;
case 4:filt_grade();break;
}
   }while(i!=0);
}
void blur_filt()
{   int i;
char name[20];
printf("请输入要筛选的姓名:/n");
scanf("%s",name);
    for(i=0;i<=total;i++)        
     {if(strstr(stu[i].name,name)!=NULL)
      stu[i].n=1;
     } 
     show();
}
void filt_age2()
{int i,j,flag;
 struct node t;
 printf("/t/t/tplease select 0.down 1.up:");
 scanf("%d",&flag);
 if(flag)
{for(i=0;i<total;i++)
  for(j=i+1;j<total;j++)
if(stu[i].age>stu[j].age)
{t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
 else
{for(i=0;i<total;i++)
  for(j=i+1;j<total;j++)
if(stu[i].age<stu[j].age)
{t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
 printf("学号/t姓名/t年龄/t总分/n");
 for(i=0;i<total;i++)
 printf("%s/t%s/t%d/t%d/n",stu[i].no,stu[i].name,stu[i].age,stu[i].score);
}
void filt_name2()
{int i,j,flag;
 struct node t;
 printf("/t/t/tplease select 0.down 1.up:");
 scanf("%d",&flag);
if(flag)
{for(i=0;i<total;i++)
 for(j=i+1;j<total;j++)
if(strcmp(stu[i].name,stu[j].name)>0)
  {t=stu[i];stu[i]=stu[j];stu[j]=t;}
}
else
{for(i=0;i<total;i++)
  for(j=i+1;j<total;j++)
if(strcmp(stu[i].name,stu[j].name)<0)
  {t=stu[i];stu[i]=stu[j];stu[j]=t;}
}
 printf("学号/t姓名/t年龄/t总分/n");
 for(i=0;i<total;i++)
 printf("%s/t%s/t%d/t%d/n",stu[i].no,stu[i].name,stu[i].age,stu[i].score);
}
void filt_no2()
{
int i,j,flag;
struct node t;
    printf("/t/t/tplease select 0.down 1.up:");
scanf("%d",&flag);
if(flag)
{for(i=0;i<total;i++)
  for(j=i+1;j<total;j++)
if(strcmp(stu[i].no,stu[j].no)>0)
{t=stu[i];stu[i]=stu[j];stu[j]=t;}
}
else
{for(i=0;i<total;i++)
   for(j=i+1;j<total;j++)
if(strcmp(stu[i].no,stu[j].no)<0)
{t=stu[i];stu[i]=stu[j];stu[j]=t;}
}
printf("学号/t姓名/t年龄/t总分/n");
for(i=0;i<total;i++)
printf("%s/t%s/t%d/t%d/n",stu[i].no,stu[i].name,stu[i].age,stu[i].score);
}
void filt_grade2()
{int i,j,flag;
 struct node t;
 printf("/t/t/tplease select 0.down 1.up:");
 scanf("%d",&flag);
 if(flag)
{for(i=0;i<total;i++)
 for(j=i+1;j<total;j++)
  if(stu[i].score>stu[j].score)
  {t=stu[i];stu[i]=stu[j];stu[j]=t;}
    }
else
{for(i=0;i<total;i++)
for(j=i+1;j<total;j++)
if(stu[i].score<stu[j].score)
{t=stu[i];stu[i]=stu[j];stu[j]=t;}
}
printf("学号/t姓名/t年龄/t总分/n");
for(i=0;i<total;i++)
printf("%s/t %s/t %d/t %d/n",stu[i].no,stu[i].name,stu[i].age,stu[i].score);
}
void filter2()
{int i;
 system("cls");
 do
   {printf("/n/n/n/t/t***************define filter****************/n/n");
printf("/t/t/t1   filter num define/n");
printf("/t/t/t2   filter name define/n");
printf("/t/t/t3   filter age define/n");
printf("/t/t/t4   filter grade define/n");
printf("/t/t/t0   exit filter define/n");
printf("/t/t********************************************/n");
printf("/t/t/tplease input a num:");
scanf("%d",&i);
switch(i)
{case 1:filt_no2();break;
 case 2:filt_name2();break;
 case 3:filt_age2();break;
 case 4:filt_grade2();break;
}
}while(i!=0);
}
void save()
{int i; FILE *fp;
 for(i=0;i<total;i++)
 if((fp=fopen("filename.txt","w"))==NULL)
{printf("cannot open file");
exit(0);
}
 for(i=0;i<total;i++)
if(fwrite(&stu[i],sizeof(struct node),1,fp)!=1)
printf("file write error/n");
fclose(fp);
return;
}
 main()
{int i;
 system("cls");
 do
   {printf("/n/n/t/t*********************************************/n");
   printf("/t/t/t    the class  filter system/n");
   printf("/t/t*********************************************/n/n");
   printf("/t/t/t   1     add/n");
printf("/t/t/t   2     common filter/n");
printf("/t/t/t   3     blur filter/n");
printf("/t/t/t   4     define filter/n");
printf("/t/t/t   5     save the info/n");
printf("/t/t/t   6     exit/n");
printf("/t/t*********************************************/n");
printf("/t/t/tplease input a num:");
scanf("%d",&i);
switch(i)
{case 1:add();break;
case 2:filter();break;
case 3:blur_filt();break;
case 4:filter2();break;
case 5:save();break;
}
   }while(i!=6);
   return 1;
}
五、部分截图
结构化程序设计鈥斺斺斺斺斞畔⒆远秆〕绦

结构化程序设计鈥斺斺斺斺斞畔⒆远秆〕绦

结构化程序设计鈥斺斺斺斺斞畔⒆远秆〕绦

结构化程序设计鈥斺斺斺斺斞畔⒆远秆〕绦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值