C下学生管理系统:从文件中读取30位学生的信息(含邮箱),并实现简单的增、删、查找、统计(邮箱使用人数)。---附程序哦!

来源:互联网 发布:r语言与数据分析实战 编辑:程序博客网 时间:2024/06/07 06:58

学生管理系统是初学者网络编程通常要遇到的问题,本人小菜鸟,一个月前做了这一类题,拿出来和初学者分享一下。。。说的不好,有错误欢迎指正( ^_^ )

先说C下(python下也有,见下一篇,两个并不起来,汗):

首先是界面的建立,这个不用说了吧,便于对这个系统进行管理;其次是从文件中读取信息,打开文件,定义指针读取即可;增、删、查找这些都比较简单,略过。重点讲一下如何统计各邮箱的使用人数:因为学生信息是事先知道的,所以只要把他们的各个邮箱种类存放到数据里面(比如char qq[10]="qq.com"),然后从文件中取出每个学生相应的邮箱信息和每个邮箱类的数组strcmp,如果比较结果为0,那么该类的邮箱使用人数就++,这样,最后只要输出就O了。关键性问题来了,如何找到文件中的对应学生的邮箱呢?我是这样想的:找到‘@’作为一个标志,读取它后面的字符,如果以‘.com’结尾就读到m为止,如果以‘.cn’或者其他的非主流邮箱,自己可以想办法找到标志性结尾,这里只提供一种思路,毕竟自己解决自己的问题是最快乐的,我就不夺人之乐了。


自己写的C程序:

#include  <stdio.h>#include  <stdlib.h>#include  <string.h>#define true 1int Number;struct student  {  char name[20]; char id[10];  char sex[10];char age[10];char tel[12];char mail[40];};    int duqu(struct student st[]);//ovoid xianshi(); //ovoid add(); //ovoid select(); //ovoid chazhao(); //ovoid del(); //ovoid tongji(); void fh();  //ostruct student st[31];  struct student stu;void main() { int choose=0;FILE *fp=NULL;char yesorno;   if((fp=fopen("student.txt","rb"))==NULL)  {  printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n"); scanf("%c",&yesorno);  if(yesorno=='y'||yesorno=='Y')  {   fp=fopen("D:\\student.txt","wb");      fclose(fp);  }  else  exit(0); }  else  {  Number=duqu(st);  }  system("cls");  //清屏while(true)   {   xianshi();  printf("\t\t====>请选择:"); scanf("%d",&choose);  system("cls");  switch(choose)  {  case 0: exit(0);fh();break;   case 1: add();fh();break;  case 2: select();fh();break;  case 3: chazhao();fh();break;  case 4: del();fh();break;  case 5: tongji();fh();break;  default:break;  }  fflush(stdin);  //清空输入缓冲区,一是scanf函数未能读取的回车键,此时也可以用getchar();二是输入与scanf函数不能匹配的格式。getchar();  system("cls");  } }     void fh() { printf("\t===>按Enter键返回主菜单\n");}      void tongji()  { int i;char qq[10]="qq.com";    char sina[10]="sina.com";    char onetwosix[10]="126.com";    char onesixthree[10]="163.com";    char sohu[10]="sohu.com";char bj[10];int q=0,s=0,ots=0,ost=0,sh=0;//.......................................     /*FILE *fp;     fp=fopen("D:\\mail.txt","w"); i=0;                while (i<Number)               { fprintf(fp,"%s\n",st[i].mail); i++;               }         fclose(fp);*///.........................................                 FILE *fp2;         fp2=fopen("D:\\mail.txt","r"); char ch;    while (! feof(fp2)) {                           memset(bj,0,sizeof(bj)); ch=fgetc(fp2); if (ch=='@') { ch=fgetc(fp2); bj[0]=ch; ch=fgetc(fp2); bj[1]=ch; ch=fgetc(fp2); bj[2]=ch; ch=fgetc(fp2); bj[3]=ch; ch=fgetc(fp2); bj[4]=ch; ch=fgetc(fp2); bj[5]=ch; if (ch!='m') { ch=fgetc(fp2); bj[6]=ch; if (ch!='m') {  ch=fgetc(fp2);     bj[7]=ch; } }     printf("%s\n",bj);     } if (strcmp((char *)qq,(char *)bj)==0)//(char *)强制转换。。。。 { q++; } if (strcmp((char *)sina,(char *)bj)==0) { s++; } if (strcmp((char *)onetwosix,(char *)bj)==0) { ots++; } if (strcmp((char *)onesixthree,(char *)bj)==0) { ost++; } if (strcmp((char *)sohu,(char *)bj)==0) { sh++; }      }           printf("qq邮箱使用人数:%d\n",q);                           printf("sina邮箱使用人数:%d\n",s);                           printf("126邮箱使用人数:%d\n",ots);                           printf("163邮箱使用人数:%d\n",ost);                           printf("sohu邮箱使用人数:%d\n",sh);//...................................待续}      void del() {  FILE *fp=NULL; char id[10];int i=0;  int j=0;  printf("请输入要删除的学生学号:"); scanf("%s",id);  for(i=0;i <Number;i++){  if (strcmp(id,st[i].id)==0)  {  for (j=i;j <Number-1;j++)  {  st[j]=st[j+1];st[j+1]=st[30];//把另外一个都变为0。}  Number--;  }  }  fp=fopen("D:\\student.txt","w"); for (i=0;i <Number;i++)  {  fwrite(&st[i],sizeof(struct student),1,fp);}  fclose(fp);  printf("删除成功;\n");}    void chazhao() { char id[10];  int i=0;  printf("请输入要查找学生的学号:");  scanf("%s",id);  system("cls");  printf("\t姓名\t学号\t性别\t年龄\t电话\t邮箱\n");  for(i=0;i<Number;i++)  {  if (strcmp(id,st[i].id)==0)     {printf("\t%s\t%s\t%s\t%s\t%s\t%s\n",st[i].name,st[i].id,st[i].sex,st[i].age,st[i].tel,st[i].mail); } }  }      void select() {  int i=0;  printf("以下是全部学生信息\n");  printf("\t姓名\t学号\t性别\t年龄\t电话           \t邮箱\n");  for(i=0;i < Number;i++)  {  printf("\t%s\t%s\t%s\t%s\t%s   \t%s\n",st[i].name,st[i].id,st[i].sex,st[i].age,st[i].tel,st[i].mail);}  }     void add() {         printf("输入要添加的同学信息\n");         printf("姓名:");        scanf("%s",&stu.name);         printf("学号:");         scanf("%s",&stu.id);         printf("性别:");         scanf("%s",&stu.sex);         printf("年龄:");         scanf("%s",&stu.age);         printf("电话:");         scanf("%s",&stu.tel);         printf("邮箱:");         scanf("%s",&stu.mail);          FILE *fp;         fp=fopen("D:\\student.txt","a");         while(fp != NULL)         {      fprintf(fp,"\n%s\n%s\n%s\n%s\n%s\n%s",stu.name,stu.id,stu.sex,stu.age,stu.tel,stu.mail);      break;         } printf("添加成功\n"); Number++;         fclose (fp);}     int duqu(struct student st[]) {  FILE *fp;  int i=0;  fp=fopen("D:\\student.txt","r"); while(!feof(fp)){fscanf(fp,"%s\n",&st[i].name);fscanf(fp,"%s\n",&st[i].id);fscanf(fp,"%s\n",&st[i].sex);fscanf(fp,"%s\n",&st[i].age);fscanf(fp,"%s\n",&st[i].tel);fscanf(fp,"%s\n",&st[i].mail);i=i+1;}fclose(fp);return i;}    void xianshi() { printf("\t*****************************************************************\n"); printf("\t* *\n");  printf("\t* 学生成绩管理系统 *\n");  printf("\t* *\n");  printf("\t* [1] 增加学生信息          [2] 查看学生信息      *\n");  printf("\t* [3] 查找学生信息          [4] 删除学生信息      *\n");  printf("\t* [5] 统计(邮箱使用人数)  [0] 退出系统          *\n");  printf("\t*****************************************************************\n");}