C语言实现学生籍贯信息记录簿

这篇文章主要为大家详细介绍了C语言实现学生籍贯信息记录簿,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现学生籍贯信息记录簿的具体代码,供大家参考,具体内容如下

一、任务概述(文章仅供参考)

进一步掌握和利用C语言进行课程设计的能力;
进一步理解和运用结构化程序设计的思想和方法;
初步掌握开发一个小型实用系统的基本方法;

二、设计功能

1.创建信息链表并以磁盘文件保存;
2.读取磁盘文件并显示输出所有学生的籍贯信息;
3.按学号或姓名查询其籍贯;
4.按籍贯查询并输出该籍贯的所有学生;
5.能添加、删除和修改学生的籍贯信息

三、功能展示

四、思维导图

五、程序源码

#include "dos.h" #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "math.h" #include "string.h"  /**********************建立链表******************************/ struct hj    { long number;   char name[10],address[50];   struct hj *next; }; /********************文件操作函数******************************/ FILE *fp; void openfile(char xx[20]) {    fp=fopen(xx,"ab+");  if(fp==NULL)     fp=fopen(xx,"wb"); } /**************录入信息函数***********************************/ void hjnew(void)  {  system("cls");  int n=0;  long xnumber;  char xname[10];  char xaddress[50];  struct hj *head;  struct hj *x1,*x2;  head=NULL;  x2=NULL;  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                          ★★★录入信息★★★\n");  printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");  printf("\n                         请输入学号【15字内】:");  scanf("%ld",&xnumber);  if(xnumber==0)   goto haha;  printf("\n                         请输入姓名【10字内】:");  scanf("%s",xname);  printf("\n                         请输入籍贯【25字内】:");  scanf("%s",xaddress);     while(xnumber!=0)  {   n++;   x1=(struct hj *)malloc(sizeof(struct hj));   x1->number=xnumber;    strcpy(x1->name,xname);   strcpy(x1->address,xaddress);   if(n==1)    head=x1;   else    x2->next=x1;      x2=x1;  printf("\n                         请输入学号【15字内】:");  scanf("%ld",&xnumber);  if(xnumber==0)   break;  printf("\n                         请输入姓名【10字内】:");  scanf("%s",xname);  printf("\n                         请输入籍贯【25字内】:");  scanf("%s",xaddress);  }  x2->next=NULL;  x1=head;  while(x1!=NULL)  {   openfile("hj.txt");   char d[5]="山西";   fwrite(x1,sizeof(struct hj),1,fp);   fclose(fp);      if(strstr(x1->address,d)!=NULL)   {     openfile("schj.txt");    fwrite(x1,sizeof(struct hj),1,fp);    fclose(fp);   }   else   {    openfile("qthj.txt");    fwrite(x1,sizeof(struct hj),1,fp);    fclose(fp);   }   x1=x1->next;  }   haha:; } /*****************************查询函数*************************/ void hjxmselect(void) //按学号方式查询函数 { ssmmx:  int n=0;  long hh;  system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                        ★★★查询编辑信息★★★\n");  printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");  printf("                         请您输入学号:");  scanf("%ld",&hh);  if(hh!=0)  {    struct hj *p;   struct hj *q=NULL,*head=NULL;   fp=fopen("hj.txt","rb");     if(fp==NULL)   {    printf("\n没有记录,请输入记录然后再查询!");    getch();    goto jjx;   }   while(!feof(fp))   {    n++;    p=(struct hj *)malloc(sizeof(struct hj));    fread(p,sizeof(struct hj),1,fp);    if(n==1)     head=p;    else     q->next=p;    q=p;   }   q->next=NULL;   p=head;   while(p!=NULL)   {    if(p->number==hh)    {        int a;     printf("\n  结 果 →     学号=%ld   姓名=%s",p->number,p->name);     printf("\n               地址=%s",p->address);     printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询其他数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:"); ssmx:     scanf("%d",&a);     switch(a)     {       void hjedit(struct hj *headd,struct hj *pp);      void hjdelete(struct hj *headdd,struct hj *ss);      case 1: hjedit(head,p);        goto ssmmx;break;      case 2: hjdelete(head,p);        goto ssmmx;break;      case 3: goto ssmmx;      case 4: goto jjx;      case 5:exit(0);      default:printf("\n                        错误的选择,请重新选择:");      goto ssmx;     }      }    else     p=p->next;   }   int iiii=0;   printf("\n                         没有此记录 1.重新查询 2.返回上一页 3.退出程序!");   printf("\n                         请选择:"); qqqq:   scanf("%d",&iiii);   switch(iiii)   {    case 1:  goto ssmmx;    case 2:  goto jjx;    case 3:  exit(0);    default: printf("\n                        错误的选择,请重新选择:");      goto qqqq;   }      goto jjx;  } jjx:; } void hjxhselect(void)//按姓名方式查询函数 { ssmm:  int n=0;  char hh[10];  system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                        ★★★查询编辑信息★★★\n");  printf("\n                        〓提示输入0返回上级菜单〓\n\n\n");  printf("                         请您输入姓名:");  scanf("%s",hh);  if(strcmp(hh,"0")!=0)  {    struct hj *p;   struct hj *q=NULL,*head=NULL;   fp=fopen("hj.txt","rb");   if(fp==NULL)   {    printf("\n没有记录,请输入记录然后再查询!");    getch();    goto jjj;   }   while(!feof(fp))   {    n++;    p=(struct hj *)malloc(sizeof(struct hj));    fread(p,sizeof(struct hj),1,fp);    if(n==1)     head=p;    else     q->next=p;    q=p;   }   q->next=NULL;   p=head;         while(p!=NULL)   {    if(strcmp(p->name,hh)==0)    {        int a;     printf("\n  结 果 →     学号=%ld   姓名=%s  ",p->number,p->name);     printf("\n               地址=%s",p->address);     printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询其他数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:"); ssm:     scanf("%d",&a);     switch(a)     {       void hjedit(struct hj *headd,struct hj *pp);      void hjdelete(struct hj *headdd,struct hj *ss);      case 1: hjedit(head,p);        goto ssmm;break;      case 2: hjdelete(head,p);        goto ssmm;break;      case 3: goto ssmm;      case 4: goto jjj;      case 5:exit(0);      default:printf("\n                        错误的选择,请重新选择:");      goto ssm;     }      }    else     p=p->next;   }   int iii=0;   printf("\n                         没有此记录 1.重新查询 2.返回上一页 3.退出程序!");   printf("\n                         请选择:"); qqq:   scanf("%d",&iii);   switch(iii)   {    case 1:  goto ssmm;    case 2:  goto jjj;    case 3:  exit(0);    default: printf("\n                        错误的选择,请重新选择:");      goto qqq;   }      goto jjj;  } jjj:  ; } void hjjgselect(void)//按籍贯方式查询 { yyy:   int i;     system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                      ★★★籍贯方式查询信息★★★\n\n\n");  printf("\n                         一  显示所有信息\n");  printf("\n                         二  显示山西籍所有信息\n");  printf("\n                         三  显示其它籍所有信息\n");  printf("\n                         四  自定义查询信息\n");  printf("\n                         五  ←返回上级菜单\n");  printf("\n                         六  ↓退出程序\n");  printf("\n\n                          请选择:");  scanf("%d",&i);  switch(i)  { void zdyselect(void);   void allselect(char a[8]);   case 1:allselect("hj.txt");        goto yyy;break;   case 2: allselect("schj.txt");     goto yyy;break;   case 3: allselect("qthj.txt");     goto yyy;break;   case 4: zdyselect();   case 5: break;   case 6: exit(0);  } } void zdyselect(void) {  ssmmz:  int n=0,j=0;  char hh[10];  system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                        ★★★自定义查询信息★★★\n\n\n");  printf("                         请您输入地址关键字:");     scanf("%s",hh);  if(strcmp(hh,"0")!=0)  {    struct hj *p;   struct hj *q=NULL,*head=NULL;   fp=fopen("hj.txt","rb");      if(fp==NULL)   {    printf("\n       没有记录,请输入记录然后再查询!");    getch();    goto jjz;   }   while(!feof(fp))   {    n++;    p=(struct hj *)malloc(sizeof(struct hj));    fread(p,sizeof(struct hj),1,fp);    if(n==1)     head=p;    else     q->next=p;    q=p;   }   q->next=NULL;   p=head;   while(p!=NULL)   {        if(strstr(p->address,hh)!=NULL)    {             int a;     j++;     printf("\n  结 果 →     学号=%ld   姓名=%s  ",p->number,p->name);     printf("\n               地址=%s",p->address);     printf("\n\n  操 作 →    ⑴更改数据  ⑵删除数据  ⑶查询下一条数据  ⑷返回上页  ⑸退出程序\n\n  请您选择操作:"); ssmz:     scanf("%d",&a);     switch(a)     {       void hjedit(struct hj *headd,struct hj *pp);      void hjdelete(struct hj *headdd,struct hj *ss);      case 1: hjedit(head,p);        goto ssmmz;break;      case 2: hjdelete(head,p);        goto ssmmz;break;      case 3: p=p->next;continue;      case 4: goto jjz;      case 5:exit(0);      default:printf("\n                        错误的选择,请重新选择:");      goto ssmz;     }     p=p->next;    }    else     p=p->next;   }   if(j==0)   {    printf("\n\n\n没有匹配的记录 按任意键继续!");    getch();    fclose(fp);    goto ssmmz;   }   else   { int xx;    printf("\n\n查询完毕!    ⑴  继续查询  ⑵  返回上一级菜单  ⑶   退出程序");    printf("\n请选择:");    scanf("%d",&xx);    if(xx==2)     goto jjz;    else if(xx==3)     exit(0);        }   goto ssmmz; jjz:  ;  }   } void allselect(char a[8])//全部查询 {  int n=0;  int k=0;  system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                        ★★★籍贯方式信息★★★\n\n\n");       struct hj *p;  struct hj *q=NULL,*head=NULL;  fp=fopen(a,"rb");  if(fp==NULL)  {   printf("\n对不起,没有记录无法查询!");   goto xxxx;  }  rewind(fp);  while(!feof(fp))  {    n++;    p=(struct hj *)malloc(sizeof(struct hj));    fread(p,sizeof(struct hj),1,fp);    if(n==1)     head=p;    else     q->next=p;    q=p;  }  q->next=NULL;     struct hj *h1,*p2,*q3,*r4,*s5;  h1=p2=(hj *)malloc(sizeof(struct hj));  p2->next=head;    while(p2->next!=NULL)   {    q3=p2->next;    r4=p2;    while(q3->next!=NULL)    {     if(q3->next->numbernext->number)     r4=q3;     q3=q3->next;    }    if(r4!=p2)    {     s5=r4->next;     r4->next=s5->next;     s5->next=p2->next;     p2->next=s5;    }    p2=p2->next;   }   head=h1->next->next;   free(h1);      p=head;  while(p!=NULL&&n>0)  {   n--;   printf("\n学号=%ld  姓名=%s",p->number,p->name);   printf("\n地址=%s",p->address);         p=p->next;  } xxxx:  printf("\n→显示完毕←\n⑴ ↑返回上级菜单   ⑵ ↓退出程序 \n请 选 择 :"); xxx:  scanf("%d",&n);  switch(n)  {   case 1:break;   case 2:exit(0);   default:printf("\n错误的选择,请重新选择:");     goto xxx;  } } void hjselect(void)//查询编辑信息函数 {  cxbegin:  int a;  system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                        ★★★查询编辑信息★★★\n\n\n");  printf("\n                         一    按学号方式查询\n");  printf("\n                         二    按姓名方式查询\n");  printf("\n                         三    按籍贯方式查询\n");  printf("\n                         四    →显示全部信息\n");  printf("\n                         五    ←返回上级菜单\n");  printf("\n                         请 选 择 查 询 方 式:"); cxmm:  scanf("%d",&a);  switch(a)  {    case 1: hjxmselect();goto cxbegin;break;   case 2: hjxhselect();goto cxbegin;break;   case 3: hjjgselect();goto cxbegin;break;   case 4: allselect("hj.txt");goto cxbegin;break;   case 5: break;   default:printf("\n错误的选择,请重新选择:");        goto cxmm;  } } void hjde(void)//删除界面函数 { cxxbegin:  int a;  system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n");  printf("\n                          ★★★删除信息★★★\n\n\n");  printf("\n                         一    按学号方式删除\n");  printf("\n                         二    按姓名方式删除\n");  printf("\n                         三    按籍贯方式删除\n");  printf("\n                         四    →删除全部信息\n");  printf("\n                         五    ←返回上级菜单\n");  printf("\n                         请 选 择 删 除 方 式:"); cxxmm:  scanf("%d",&a);  int i=0;  switch(a)  {    case 1: hjxmselect();goto cxxbegin;break;   case 2: hjxhselect();goto cxxbegin;break;   case 3: zdyselect();goto cxxbegin;break;   case 4:        fp=fopen("hj.txt","wb");      if(fp!=NULL)       i++;      fp=fopen("schj.txt","wb");      if(fp!=NULL)       i++;      fp=fopen("qthj.txt","wb");      if(fp!=NULL)       i++;      if(i==3)      {       printf("\n                         全部数据已经删除!!!!!!敲任意键继续");       getch();      }      goto cxxbegin;break;   case 5: break;   default:printf("\n错误的选择,请重新选择:");        goto cxxmm;  } } //==============删除函数接口=============== void hjdelete(struct hj *headdd,struct hj *ss) {  struct hj *q;  char d[5]="山西";  if(headdd==ss)  {   headdd=headdd->next;   goto gogo;  }  q=headdd;  while(q!=NULL)  {   if(q->next->number==ss->number)   {               break;   }   q=q->next;  }     q->next=ss->next; gogo:  q=headdd;     fp=fopen("hj.txt","wb");  while(q!=NULL)  {      fwrite(q,sizeof(struct hj),1,fp);   q=q->next;  }  fclose(fp);  q=headdd;  fp=fopen("schj.txt","wb");  while(q!=NULL)     {   if(strstr(q->address,d)!=NULL)   {     fwrite(q,sizeof(struct hj),1,fp);   }   q=q->next;  }  fclose(fp);  q=headdd;  fp=fopen("qthj.txt","wb");  while(q!=NULL)     {   if(strstr(q->address,d)==NULL)   {     fwrite(q,sizeof(struct hj),1,fp);   }   q=q->next;  }  fclose(fp); } //===============编辑函数接口============== void hjedit(struct hj *headd,struct hj *pp) {  int n=0;  struct hj *p,*p1,*p2;  char d[5]="江苏";  printf("\n  输 入 →    学号=");  scanf("%ld",&pp->number);  printf("\n              姓名=");  scanf("%s",pp->name);  printf("\n              地址=");  scanf("%s",pp->address);  p=headd;  fp=fopen("hj.txt","wb");  while(p!=NULL)  {      fwrite(p,sizeof(struct hj),1,fp);   p=p->next;  }  fclose(fp);  p1=headd;  fp=fopen("schj.txt","wb");  while(p1!=NULL)     {   if(strstr(p1->address,d)!=NULL)   {     fwrite(p1,sizeof(struct hj),1,fp);          }   p1=p1->next;  }  fclose(fp);  p2=headd;  fp=fopen("qthj.txt","wb");  while(p2!=NULL)     {   if(strstr(p2->address,d)==NULL)   {     fwrite(p2,sizeof(struct hj),1,fp);   }   p2=p2->next;  }  fclose(fp); } /**************************主函数***********************/ int main(int argc, char* argv[]) {    begin:      int t;  system("cls");  printf("\n                ★★★★★欢迎使用户籍管理系统★★★★★\n\n\n\n\n");  printf("                        一 录入学生籍贯信息\n\n");  printf("                        二 查编学生籍贯信息\n\n");  printf("                        三 删除学生籍贯信息\n\n");  printf("                        四 退出程序\n\n");  printf("                        请您选择:"); mm:   scanf("%d",&t);  switch(t)  {    case 1: hjnew();break;   case 2: hjselect();break;   case 3: hjde();break;   case 4:exit(0);   default:printf("\n                        错误的选择,请重新选择:");        goto mm;  }  goto begin;     return 0; } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持0133技术站。

以上就是C语言实现学生籍贯信息记录簿的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言