c语言程序设计__学生通讯录信息管理系统 - 副本

时间:2024.4.2

西 安 邮 电 学 院

高级语言课程设计

实验报告

    别:电  信  系

专业班级:科技0701班

    号:

班内序号:07

    名:

指导老师:黄 茹

实验课题:学生通讯信息管理系统

实验时间:20##.6.10~20##.6.20

20##617

一、实验目的

1.      熟悉C语言的编译,链接和运行过程;

2.      掌握C语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值,掌握不同的类型数据之间的赋值规律,赋值使用方法;

3.      掌握if语句及switch语句的运用方法及嵌套应用方法;

4.      掌握实现循环结构的三种语句while、 do-while.、for 的使用;

5.      掌握C语言函数的定义,声名及调用方法和调用过程;

6.      掌握C语言主函数和被调用函数之间的参数传递方式,学会函数的嵌套调用和递归调用的过程和方法;

7.      掌握数组的定义,赋值引用及输入输出方法,并正确用字符数组储存字符串,学会字符串的使用;

8.      掌握结构体类型变量的定义和使用;

9.      掌握指针变量和指向指针的指针变量的定义及使用,进一步了解指向结构体数组的指针变量的概念及使用方法;

10.  掌握链表的概念及链表的操作,并理解链表与数组的不同点及优缺点;

11.  掌握文件和文件指针的定义及文件建立,打开,关闭,读写等的操作方法

12.  能够采用模块化思想调试程序;

.实验内容

1.      编写程序并进行调试运行;

2.      输入学生通讯信息并保存于文件,每个学生包含信息如:序号,姓名,省份,电话,生日,邮编,大学,班级,QQ号信息;

3.      对已存入的学生信息进行更新操作,包括添加一个学生信息、删除某个学生信息和修改某个学生信息;

4.      通过输入姓名,学号的方式查询学生信息;

5.      可以通过省份,生日来统计通讯信息;

6.      最后输出学生信息,供需要时打印。

一、       需求分析

1.      该程序可用于对学生的通讯方式基本信息的存储、更新、查询、输出等操作,以实现对学生通讯录信息的管理,便于同学之间的联系交往;

2.      其中更新功能包括:添加信息,删除信息,修改信息,可根据需要添加一个或多个学生信息,也可针对个别学生信息进行适当的删除或修改,以便随时更新学生通讯信息。

3.      程序中设计的查询功能可根据需要从若干数据中查询某个学生信息,并且可根据两种不同的方法查询:按姓名查询和按电话查询,以满足不同的需要;

4.  可以通过输出的方式查看整个通讯录;

5.  可以通过排序的方式查看同学生日的先后。

四、概要设计

1、方案设计

对系统进行分析,给出结构图

 分析:系统要实现许多功能,因此遵循结构化程序设计思想来进行本系统的设计:—,自顶向下逐步细化,将系统设计任务分解出许多子功能模块来计;

结构图如下: 

c语言程序设计__学生通讯录信息管理系统 - 副本 

2 . 模块功能说明

对各个模块进行功能的描述

(1).输入模块:

录入需要管理的通讯信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。

(2).添加模块:

可添加一个或多个学生的通讯信息,并将所添加的信息保存,方便查找。

(3).删除模块:

可对失去联系的学生通讯信息做删除处理。

(4).修改模块:

可对通讯信息发生改变的学生信息进行修改。

(5).查询模块:

可对已建立的学生通讯信息进行查询,并且可根据需要选择按姓名查询或按电话查询。

(6).保存模块:

用于对通讯信息进行保存。

(7).输出模块:

将所有学生通讯信息或想要查询的学生信息显示于屏幕,用于打印学生通讯信息或查找某些学生通讯信息。

(8).退出系统:

选择该项,自动退出该系统。

五、详细设计及运行结果

流程图, 函数之间相互调用的图示 ,程序设计及编码, 运行结果。

c语言程序设计__学生通讯录信息管理系统 - 副本

c语言程序设计__学生通讯录信息管理系统 - 副本

c语言程序设计__学生通讯录信息管理系统 - 副本

六.调试情况及运行结果

1.对自己设计进行评价,指出合理和不足之处,提出改进的方案

此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在同学们的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。可着毕竟是第一次独立完成这样的大程序,结果还不是太理想。

由于时间很短,在选题报告中设想到的好多功能都没有实现。已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。如:再录入数据时,没有设计数据输入出错的提示。

2.在设计过程中的感受

 本次C 语言的实习课让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。

本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。并且,通过一种题材两中方式的学习,我掌握了更多的知识,也认识到对比学习的重要性。

七.参考文献

 

八。附录:

1.      链表方式:

 #include

#include

#define N sizeof(struct stud)

#include

#include

#include

 /*日期结构体类型*/

 struct date                              

 {int y;

  int m;

  int d;

 }bir;

 /*学生信息结构体类型*/

 struct stud

 {

  int           num;          /*序号*/

  char          name[20];     /*姓名*/

  char          tel[40];      /*电话*/

  char          addr[40];     /*省份*/

  char          yb[20];       /*邮编*/

  char          daxue[50];    /*大学*/

  struct date   bir;          /*生日*/

  struct stud   *next;

 };

 char a;

 struct stud *h;

 FILE *fp;

/*建立链表*/

struct stud *creat()

{ int i,k;

  struct stud *p1,*p2,*head;

  printf("\n请输入学生数:\n");

  scanf("%d",&k);

  head=NULL;

  head=p1=p2=(struct stud *)malloc(N);      /*head,p1,p2指向首结点*/

  for(i=0;i

  {p1=(struct stud *)malloc(N);             /*p1指向新申请的结点*/

   printf("\n请输入序号:");

   scanf("%d",&p1->num);

   printf("\n请输入姓名:");

   scanf("%s",p1->name);

   printf("\n请输入电话:");

   scanf("%s",p1->tel);

   printf("\n请输入籍贯:");

   scanf("%s",p1->addr);

   printf("\n请输入邮编:");

   scanf("%s",p1->yb);

   printf("\n请输入大学:");

   scanf("%s",p1->daxue);

   printf("\n请输入出生日期:(年-月-日)");

   scanf("%d-%d-%d",&p1->bir.y,&p1->bir.m,&p1->bir.d);

   p2->next=p1;                             /*将新结点链接到表尾*/

   p2=p1;                                   /*p2指向新的表尾*/

  }

  p2->next=NULL;                            

  head=head->next;                          /*头指针后移*/

  save_message(head);                       /*立即保存*/

  return head;

}

/*输入模块*/

input_message()

{clrscr();

 printf("\n\n**********输入学生信息**********\n");

 printf("-----------------------------------\n");

 h=creat();

 bioskey(0);

 printf("输入完毕,按任意键返回主菜单!");

 bioskey(0);

}

/*输出模块*/

output_message(struct stud *p)

{clrscr();

 if(p==NULL)

  printf("暂无信息!请回主菜单录入信息!\n");

 else

  {printf("\n\n=======================通讯录信息表======================\n\n");

   printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");

   while(p!=NULL)

   {printf("-----------------------------------------------------------------------\n");

    printf("%s %s %s %d-%d-%d   %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);

    printf("-----------------------------------------------------------------------\n");

    printf("\n");

    p=p->next;

    }

   }

  printf("\n");

  printf("按任意键返回主菜单!\n\n");

  bioskey(0);

}

/*保存学生信息*/

save_message(struct stud *h)

{FILE *fp;

 struct stud *f;

 f=h;                                           /*保证指针位置*/

 if((fp=fopen("zhuyan.txt","wb"))==NULL)

 {printf("不能打开文件!\n");

  return;

 }

 while(h!=NULL)

 {if(fwrite(h,sizeof(struct stud),1,fp)!=1)     /*向文件写入数据*/

  {printf("文件写入错误!");

   return;

  }

  h=h->next;

 }

 h=f;                                           /*保证指针位置*/

 printf("已存盘,按任意键回上层菜单:\n");

 getch();

 fclose(fp);

 return;

}

/*读取信息*/

read_message()

{FILE *fp;

 if((fp=fopen("zhuyan.txt","rb"))==NULL)

 {printf("\n\n****暂时还没有该生信息,请按任意键返回上一级菜单.\n");

  return;

 }

 do

 {if(fread(h,sizeof(struct stud),1,fp)!=1) 

    {if(feof(fp))

      printf("已到文件末尾.\n");                   /*已到文件末尾.*/

     else printf("文件读取错误!\n");               /*文件读取错误.*/

      return;

    }

    h=h->next;

 }while(h!=NULL);

 fclose(fp);

 getch();

 bioskey(0);

}

/*添加学生信息*/

add_message(struct stud *w)

 {struct stud *p,*q;

  p=(struct stud*)malloc(N);              /*p指向新申请的结点*/

  clrscr();

  printf("\n请输入学生序号:");

  scanf("%d",&p->num);

  printf("\n请输入学生姓名:");

  scanf("%s",p->name);

  printf("\n请输入学生电话:");

  scanf("%s",p->tel);

  printf("\n请输入学生籍贯:");

  scanf("%s",p->addr);

  printf("\n请输入学生邮编:");

  scanf("%s",p->yb);

  printf("\n请输入学生大学:");

  scanf("%s",p->daxue);

  printf("\n请输入学生出生日期:");

  scanf("%d-%d-%d",&p->bir.y,&p->bir.m,&p->bir.d);

  p->next=NULL;

  if(w==NULL)

   {w=p;                                  /*头指针为空,p作为新头指针*/

    return 1;                             /*正确插入返回1*/

   }

  q=w;                                    /*从头指针开始*/

  if((q->num)>(p->num))                   /*找到插入位置在首结点之前*/

   {p->next=w;                            /*将首结点链接在新结点之后*/

    w=p;                                  /*p作为新的头指针*/

    return 1;

   }

  while((q->next)!=NULL && (q->next->num)<(p->num))

  q=q->next;                              /*继续查找插入位置*/

  if(q->next==NULL)                       /*插入位置在尾结点之后*/

   {q->next=p;                            /*新结点链接到尾结点之后*/

    return 1;

   }

  else if((q->next->num)==(p->num))       /*找到重号*/

   {free(p);                              /*释放新结点的存储空间*/

    return 0;                             /*不插入返回0*/

   }

  p->next=q->next;                        /*后续结点链接到新结点之后*/

  q->next=p;                              /*新结点链接到前驱结点之后*/

  return 1;

}

/*删除模块*/

del_message(struct stud *w)

{char name[20];

 struct stud *p,*q;

 if(w==NULL)

 return 0;                      /**w就是头指针,空表不能删除返回0*/

 clrscr();

 printf("请输入要删除的学生姓名:\n");

 scanf("%s",name);

 q=w;

 if(strcmp(q->name,name)==0)    /*找到要删除的是第一个结点*/

  {w=q->next;                  /*修改头指针*/

   free(q);                     /*释放存储空间*/

   return 1;                    /*正确删除返回1*/

  }

 p=q->next;

 while(p!=NULL)

  {if(strcmp(p->name,name)==0)  /*找到要删除的结点*/

    {q->next=p->next;           /*后续结点连接到前驱结点之后*/

     free(p);                   /*释放存储空间*/

     return 1;

    }

   q=p;                         /*推移指针继续查找*/

   p=p->next;

  }

 return 0;                      /*未找到要删除的结点返回0*/

}

/*修改模块*/

revise_message(struct stud *g)                 

 {int choice;

  char name[20],n,m;

  do

   {clrscr();

    printf("\n        **********学生学籍信息***********      \n");

    printf(" 输入要修改的学生姓名:\n");

    scanf("%s",name);

    while(g!=NULL)

    { while(strcmp(g->name,name)!=0)

      g=g->next;

      if(g==NULL)

      {printf("\n                  该学生不存在!");

       bioskey(0);

      }

      else

      {do

        {printf("\n                  您要修改哪一项?\n");

         printf("\n                     1序号\n");

         printf("\n                     2姓名\n");

         printf("\n                     3籍贯\n");

         printf("\n                     4电话\n");

         printf("\n                     5大学\n");

         printf("\n                     6出生日期\n");

         scanf("%d",&choice);

         switch(choice)

          {case 1:printf("\n   请输入修改后的序号:");

                  scanf("%d",&g->num);break;

           case 2:printf("\n   请输入修改后的姓名:");

                  scanf("%s",g->name);break;

           case 3:printf("\n   请输入修改后的籍贯:");

                  scanf("%s",g->addr); break;

           case 4:printf("\n   请输入修改后的电话:");

                  scanf("%s",g->tel); break;

           case 5:printf("\n   请输入修改后的大学:");

                  scanf("%s",g->daxue); break;

           case 6:printf("\n   请输入修改后的出生日期:");

                  scanf("%d-%d-%d",&g->bir.y,&g->bir.m,&g->bir.d);break;

          }

         printf("\n是否继续修改此人信息?y/n\n") ;

         getchar();

         m=getchar();

        }while(m=='y');

         printf("\n\n=======================通讯录信息表======================\n\n");

         printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");

         printf("-----------------------------------------------------------------------\n");

         printf("%s %s %s %d-%d-%d   %s %s\n",g->name,g->addr,g->tel,g->bir.y,g->bir.m,g->bir.d,g->yb,g->daxue);

         printf("-----------------------------------------------------------------------\n");

         printf("\n");

         getch();

       }

      break;

    }

    printf("\n要继续吗?(y/n)\n");

    getchar();

    n=getchar();

   }while(n=='y');

  printf("\n           按任意键返回主菜单!");

  bioskey(0);

}

   /*更新模块*/

  renew_message()

  {int choice=100;

   while(choice!=0)

    {printf("\n************更新同学信息*************\n\n");

     printf("             1.添加同学信息\n\n");

     printf("             2.删除同学信息\n\n");

     printf("             3.修改同学信息\n\n");

     printf("             0.返回修改菜单\n\n");

     printf("             请选择(0—3):\n");

     printf("******************************************\n\n");

     scanf("%d",&choice);

     switch(choice)

     {case 1:add_message(h);break;

          case 2:del_message(h);break;

          case 3:revise_message(h);break;

          case 0:break;

      default:printf("输入有误!\n");

         }

    }

   }

/*按姓名查询*/

inquire_name( struct stud *p)

{ char name[20];

  struct stud *f;

  f=p;

  clrscr();

  printf("\n\n     请输入要查找的姓名:");

  scanf("%s",&name);

  if(p==NULL)

  {printf("\n您要查找的学生暂时不存在,请按任意键返回\n");

   bioskey(0);

  }

  else if (strcmp(p->name,name)!=0||p->name==NULL)

   p=p->next;

  clrscr();

  printf("\n\n该生有关信息为:\n\n\n\n");

  printf("\n\n=======================通讯录信息表======================\n\n");

  printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");

  printf("-----------------------------------------------------------------------\n");

  printf("%s %s %s %d-%d-%d   %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);

  printf("-----------------------------------------------------------------------\n");

  printf("\n");

  p=f;

  getch();

}

/*按学号查询*/

inquire_tel(struct stud *p)

{char tel[20];

 struct stud *f;

 f=p;

 clrscr();

 printf("\n     请输入要查找的电话:");

 scanf("%s",&tel);

 if(p==NULL)

  {printf("\n您要查找的学生暂时不存在,请按任意键返回\n");

   bioskey(0);

  }

 else if(strcmp(p->tel,tel)!=0||p->tel==NULL)

   p=p->next;

  clrscr();

  printf("\n\n该生有关信息为:\n\n\n\n");

  printf("\n\n=======================通讯录信息表======================\n\n");

  printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");

  printf("-----------------------------------------------------------------------\n");

  printf("%s %s %s %d-%d-%d   %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);

  printf("-----------------------------------------------------------------------\n");

  printf("\n");

  p=f;

  getch();

}

 /*查询模块*/

  inquire_message()

 {int choice=100;

  while(choice!=0)

    {printf("\n***********************查询同学通讯信息**********************\n");

     printf("                       1.按同学姓名查询:\n");

     printf("                       2.按同学电话查询:\n");

     printf("                       0.返回主菜单:\n");

     printf("                        请选择(0—2):\n");

     scanf("%d",&choice);

     switch(choice)

      {case 1:inquire_name(h);break;

       case 2:inquire_tel(h);break;

       case 0:break;

       default:printf("无此类查询方式!\n");

      }

    }

  }

/*省份统计*/

  count_ad(struct stud *p)

 {int count=0;

  char count_ad[20];

  printf("\n                              输入要统计的省份名称:\n");  

  scanf("%s",count_ad);

  if(p=NULL)

   {printf("\n                  该学生不存在!");

    bioskey(0);

   }

  else

   {printf("                              在该省份的同学:\n");

    printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");

    printf("-----------------------------------------------------------------------\n");

    p=h;                             /*p指向头指针!*/

    while(p!=NULL)

    { if(strcmp(p->addr,count_ad)==0)

      {printf("%s %s %s %d-%d-%d   %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);

       p=p->next;

       count++;

       }

      }

    }

  printf("在这个省份的同学共有%d个",count);

 }

  

  

  /*生日统计*/

  count_birthday(struct stud *p)

  {int count=0;

   int  count_birthday_month;

   printf("                                 请输入要统计的月份:\n");

   scanf("%d",&count_birthday_month);

   if(p=NULL)

   {printf("\n                  该学生不存在!");

    bioskey(0);

   }

   else

   {printf("  在这个月过生日的同学:记得祝贺他们生日快乐!\n");

    printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n");  

    printf("-----------------------------------------------------------------------\n");

    p=h;

    while(p!=NULL)

    { if(p->bir.m==count_birthday_month)

      {printf("%s %s %s %d-%d-%d   %s %s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue);

       p=p->next;

       count++;

       }

      }

    }

   printf("在这个月过生日的同学有%d个",count);

  }

  

  /*统计模块*/

  count_message()

  {int choice=100;

   while(choice!=0)

    {printf("\n\n*************************统计同学通讯信息*******************\n");

     printf("                              1.按省份统计信息;\n");

     printf("                              2.按生日统计信息;\n");

     printf("                              0.返回主菜单;\n");

     printf("                           请选择(0--2):\n");

     scanf("%d",&choice);

     switch(choice)

      {case 1:count_ad(h);break;

       case 2:count_birthday(h);break;

       case 0:break;

       default:printf("输入有误!\n");

      }

    }

  }

/*主程序*/

main()

{ int b;

  printf("输入任意键进入。\n\n");

  bioskey(0);

  do

  {clrscr();

   printf("\n\n\n                 ***************欢迎进入*************  \n\n");

   printf("               ********** 学生通讯录管理系统 **********\n\n");

   printf("               **            1输入学生信息           **\n\n"); 

   printf("               **            2输出学生信息           **\n\n");

   printf("               **            3更新学生信息           **\n\n");

   printf("               **            4查询学生信息           **\n\n");

   printf("               **            5统计学生信息           **\n\n");  

   printf("               **            6保存信息               **\n\n");

   printf("               **            7读取信息               **\n\n");

   printf("               **            0退出系统               **\n\n");

   printf("               **             请选择(0~7) :          **\n\n");

   scanf("%d",&b);

   switch(b)

    {case 1: input_message();   break;

     case 2: output_message(h); break;

     case 3: renew_message();   break;

     case 4: inquire_message(); break;

     case 5: count_message();   break;

     case 6: save_message(h);   break;

     case 7: read_message();    break;

     case 0:                    break;

    }

    }while(b!=0);

}

2.数组方式:

#include

#include

#define MAX 200

#define N 9

 int sum;

 /*日期结构体类型*/

 struct b_type

 {int year;    /*年*/

  int month;   /*月*/

  int day;     /*日*/

 };

 /*通讯录结构体类型*/

 struct s_type

 { int num;                    /*序号*/

   char          name[20];     /*姓名*/

   char          address[20];  /*省份*/

   char          tel[40];      /*电话*/

   struct b_type birthday;     /*生日*/

   char          yb[20];       /*邮编*/

   char          daxue[50];    /*大学*/

   char          banji[40];    /*班级*/

   char          qq[40];       /*QQ号*/

 }s[MAX];

 /*保存模块*/

  save_message(int sum)

 {FILE *fp;

  int i;

  fp=fopen("e:\\zhuyanmessage.txt","at+");

  if(fp==NULL)

    {printf("\n打开文件e:\\zhuyanmessage.txt错误!\n"); 

     getch();

     exit(1);

    }

  for(i=0;i

  if(fwrite(&s[i],sizeof(struct s_type),1,fp)!=1)

    printf("写文件错误!");

  fclose(fp);

 }

 /*输入模块*/

  input_message()

 {int i=0,n=MAX;

  char m;

  printf("\n\n     录入学生通讯信息(最多%d个)\n\n",n);

   do

   {printf("请输入第%d个同学的序号:\n",i+1);

    scanf("%d",&s[i].num);

    printf("请输入第%d个同学的姓名(不可含空格!):\n",i+1);

    scanf("%s",s[i].name);

    printf("请输入第%d个同学的省份:\n",i+1);

    scanf("%s",s[i].address);

    printf("请输入第%d个同学的电话:\n",i+1);

    scanf("%s",s[i].tel);

    printf("请输入第%d个同学的生日:\n",i+1);

    scanf("%d-%d-%d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day);

    printf("请输入第%d个同学的邮编:\n",i+1);

    scanf("%s",s[i].yb);

    printf("请输入第%d个同学的大学:\n",i+1);

    scanf("%s",s[i].daxue);

    printf("请输入第%d个同学的班级:\n",i+1);

    scanf("%s",s[i].banji);

    printf("请输入第%d个同学的QQ号:\n",i+1);

    scanf("%s",s[i].qq);

    printf("\n----%d个同学的信息输入完毕!----\n",i+1);

    printf("是否继续?y/n");

    getchar();

    scanf("%c",&m);

    i++;

    }while(m=='y');

   printf("\n----%d个同学的信息输入完毕!----\n",i);

   sum=i;

   printf("\n按回车键返回主菜单!");

   getchar();

 }

 /*读取模块*/

  read_message()

 {FILE *fp;

  int i=0;

  if((fp=fopen("e:\\zhuyanmessage.txt","rt"))==NULL)

    {printf("\n\n****暂时还没有同学的信息,按任意键选择基本信息的输入!*******\n");

     return(i);

    }

  while(feof(fp)!=1)

  {fread(&s[i],sizeof(struct s_type),1,fp);

   if(s[i].num==0) break;

   else i++;

         }

   fclose(fp);

   return(i);

  }

  

  /*输出模块*/

  output_message( )

  {int i=0;

   printf("\n\n=======================通讯录信息表======================\n\n");

   printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");

   do

   {printf("-----------------------------------------------------------------------\n");

    printf("%s %s %s %d-%d-%d   %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

         s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

    printf("-----------------------------------------------------------------------\n");

    i++;      

   }while(s[i].num!=0);

   getch();  

   printf("按回车键回到主菜单!\n");

   getchar();

  } 

  /*添加模块*/

  add_message()

  {int i=sum; 

   char m;

    do

    {printf("请输入一位要添加同学的通讯信息:\n");

     printf("请输入新同学的序号:\n");

     scanf("%d",&s[i].num); 

     printf("请输入新同学的姓名(不可含空格!):\n");

     scanf("%s",s[i].name);

     printf("请输入新同学的省份:\n");

     scanf("%s",s[i].address);

     printf("请输入新同学的电话号码:\n");

     scanf("%s",s[i].tel);

     printf("请输入新同学的生日:\n");

     scanf("%d-%d-%d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day);

     printf("请输入新同学的邮政编码:\n");

     scanf("%s",s[i].yb);

     printf("请输入新同学的大学:\n");

     scanf("%s",s[i].daxue);

     printf("请输入新同学的班级名称:\n");

     scanf("%s",s[i].banji);

     printf("请输入新同学的QQ号码:\n");

     scanf("%s",s[i].qq);

     printf("要继续吗?(y/n)");

     getchar();

     m=getchar();

     i++;

   }while(m=='y');

   sum=i;

   printf("\n按回车键继续\n");

   getchar();

  }

  /*删除模块*/ 

  del_message()

  {int i,j=0,k;

   char del_name[20],m;

    do

    {printf("请输入要删除信息的同学的姓名(不可含空格!):\n");

     scanf("%s",del_name);

      for(i=0;i

       {if(strcmp(s[i].name,del_name)==0)

         {for(k=i;k

             s[k]=s[k+1];

           sum--;

           printf("您已经删除成功!\n");

          }

         else j++;

         if(j==sum) printf("\n该学生不存在!\n");

       }

     

   

     printf("\n要继续吗?(y/n)\n");

     getchar();

     m=getchar();

    }while(m=='y');

   printf("\n按回车键返回!\n");

   getchar();

  }

 /*修改模块*/

  revise_message()

 { int i,choice,j=0;

   char revise_name[20],m,n;

    do

    {printf("请输入您要修改信息的同学的姓名(不可含空格!):\n");

     scanf("%s",revise_name); 

     for(i=0;i

      if(strcmp(s[i].name,revise_name)==0)

        {printf("您要修改的同学的信息如下:\n");

         printf("姓名=省份==电话==生日(年-月-日)==邮编======大学======班级=====QQ号码\n");

         printf("---------------------------------------------------------------------\n");

         printf("%s %s   %s   %d-%d-%d  %s %s  %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                   s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

         printf("---------------------------------------------------------------------\n");

          do

          {printf("                                                     请选择您要修改哪一项?\n");

           printf("                                                        1.姓名:\n");

           printf("                                                        2.省份:\n");

           printf("                                                        3.电话:\n");

           printf("                                                        4.生日(年-月-日):\n");    

           printf("                                                        5.邮政编码:\n");

           printf("                                                        6.大学:\n");

           printf("                                                        7.班级:\n");

           printf("                                                        8.QQ号码:\n");

           printf("                                                        0.返回主菜单");

           printf("                                                        请选择(0--8):\n");  

           scanf("%d",&choice);

           switch(choice)

            {case 1:printf("请输入修改后的姓名(不可含空格!):\n");

                    scanf("%s",s[i].name);break;

              case 2:printf("请输入修改后的省份:\n");

                     scanf("%s",s[i].address);break;

              case 3:printf("请输入修改后的电话号码:\n");

                     scanf("%s",s[i].tel);break;

              case 4:printf("请输入修改后的生日(年-月-日):\n");

                     scanf("%d-%d-%d",&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day);break;

              case 5:printf("请输入修改后的邮政编码:\n");

                     scanf("%s",s[i].yb);break;

              case 6:printf("请输入修改后的大学:\n");

                     scanf("%s",s[i].daxue);break;

              case 7:printf("请输入修改后的班级名称:\n");

                     scanf("%s",s[i].banji);break;

              case 8:printf("请输入修改后的QQ号码:\n");

                     scanf("%s",s[i].qq);break;

              case 0:break;

             default:printf("输入有误!\n"); 

             }

            printf("是否继续修改此人信息?y/n\n");

            getchar();

            n=getchar();

           }while(n=='y');

        printf("此人信息修改后如下:");

        printf("\n\n=======================通讯录信息表======================\n\n");

        printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");

        printf("-----------------------------------------------------------------------\n");

        printf("%s %s %s %d-%d-%d   %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                         s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

       printf("-----------------------------------------------------------------------\n");

        break;

       }

      else j++;

     if(j==sum) printf("\n该学生的信息不存在!\n");

     printf("\n要继续吗?(y/n)\n");

     getchar();

     m=getchar();

   }while(m=='y');

  printf("\n按回车键返回!\n");

  getchar();

 }

      

      

   /*更新模块*/

  renew_message()

  {int choice=100;

   while(choice!=0)

    {printf("\n************更新同学信息*************\n\n");

     printf("             1.添加同学信息\n\n");

     printf("             2.删除同学信息\n\n");

     printf("             3.修改同学信息\n\n");

     printf("             0.返回修改菜单\n\n");

     printf("             请选择(0—3):\n");

     printf("******************************************\n\n");

     scanf("%d",&choice);

     switch(choice)

        {case 1:add_message();break;

          case 2:del_message();break;

          case 3:revise_message();break;

          case 0:break;

         default:printf("输入有误!\n");

         }

    }

   }

  /*姓名查询*/

  inquire_name()

 {int i,j=0;

  char inquire_name[20];

  printf("\n         请输入要查询信息的同学的姓名:\n");

  scanf("%s",inquire_name);

  for(i=0;i

     if(strcmp(s[i].name,inquire_name)==0)

       {printf("\n************************该同学的信息为:*********************\n");    

       printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");

       

       printf("-----------------------------------------------------------------------\n");

        printf("%s %s %s %d-%d-%d   %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

        printf("-----------------------------------------------------------------------\n");  

      

       }

      else   j++;

  if(j==sum)    printf("\n                           该同学的信息不存在!\n");

 }

  /*电话号码查询*/

  inquire_tel()

 {int i,j=0;

  char inquire_tel[40];

  printf("                                       请输入要查询的电话号码:\n");

  scanf("%s",inquire_tel);

  for(i=0;i

     if(strcmp(s[i].tel,inquire_tel)==0)

       {printf("\n************************该同学的信息为:*********************\n");    

       printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");

         

        printf("-----------------------------------------------------------------------\n");

        printf("%s %s %s %d-%d-%d   %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                 s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

        printf("-----------------------------------------------------------------------\n");  

       break;

       }

     else   j++;

  if(j==sum)     printf("\n                           该同学的信息不存在!\n");

 }

  /*查询模块*/

  inquire_message()

 {int choice=100;

  while(choice!=0)

    {printf("\n***********************查询同学通讯信息**********************\n");

     printf("                       1.按同学姓名查询:\n");

     printf("                       2.按同学电话查询:\n");

     printf("                       0.返回主菜单:\n");

     printf("                        请选择(0—2):\n");

     scanf("%d",&choice);

     switch(choice)

      {case 1:inquire_name();break;

       case 2:inquire_tel();break;

       case 0:break;

       default:printf("无此类查询方式!\n");

      }

    }

  }

  /*省份统计*/

  count_ad()

 {int i,j=0,count=0;

  char count_ad[20];

  printf("\n                              输入要统计的省份名称:\n");  

  scanf("%s",count_ad);

  printf("                              在该省份的同学:\n");

  printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");

  for(i=0;i

    if(strcmp(s[i].address,count_ad)==0)

      {printf("-----------------------------------------------------------------------\n");

       printf("%s %s %s %d-%d-%d   %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                        s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

       printf("-----------------------------------------------------------------------\n");count++;

      }

    else   j++;

  if(j==sum)         printf("\n                           该省份的信息不存在!\n");

  printf("在这个省份的同学共有%d个",count);

 }

  

  /*班级统计*/

  count_bj()

  {int i,j=0,count=0;

   char count_bj[40];

   printf("                                 请输入要统计的班级的名称:\n");

   scanf("%s",count_bj);

   printf("                              在这个专业的同学:\n");

   printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学======班级=====QQ号码\n");  

   for(i=0;i

     if(strcmp(s[i].banji,count_bj)==0)

       {printf("-----------------------------------------------------------------------\n");

        printf("%s %s %s %d-%d-%d   %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                        s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

        printf("-----------------------------------------------------------------------\n");count++;

       }

     else   j++;

   if(j==sum)         printf("\n                           该班级的信息不存在!\n");

   printf("在这个班级的同学有%d个!",count);

  }

  

  /*生日统计*/

  count_birthday()

  {int i,j=0,count=0;

   int  count_birthday_month;

   printf("                                 请输入要统计的月份:\n");

   scanf("%d",&count_birthday_month);

   printf("  在这个月过生日的同学:记得祝贺他们生日快乐!\n");

   printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学====专业=====QQ号码\n");  

   for(i=0;i

     if(s[i].birthday.month==count_birthday_month)

       {printf("-----------------------------------------------------------------------\n");

        printf("%s %s %s %d-%d-%d   %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                        s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

        printf("-----------------------------------------------------------------------\n");count++;

       }

     else   j++;

   if(j==sum)         printf("\n                           该月份的信息不存在!\n");

   printf("在这个月过生日的同学有%d个",count);

  }

  

  /*统计模块*/

  count_message()

  {int choice=100;

   while(choice!=0)

    {printf("\n\n*************************统计同学通讯信息*******************\n");

     printf("                              1.按省份统计信息;\n");

     printf("                              2.按班级统计信息;\n");

     printf("                              3.按生日统计信息;\n");

     printf("                              0.返回主菜单;\n");

     printf("                           请选择(0--3):\n");

     scanf("%d",&choice);

     switch(choice)

      {case 1:count_ad();break;

       case 2:count_bj();break;

       case 3:count_birthday();break;

       case 0:break;

       default:printf("输入有误!\n");

      }

    }

  }

  /*排序模块*/

  sort_message()

  {int i,j;

   struct s_type year1,month1,day1;

   for(i=0;i

      for(j=i+1;j

       {if(s[i].birthday.year>s[j].birthday.year)

          { year1=s[i];

             s[i]=s[j];

             s[j]=year1;

          }

         if(s[i].birthday.year==s[j].birthday.year)

         if(s[i].birthday.month>s[j].birthday.month)

           {month1=s[i];

            s[i]=s[j];

            s[j]=month1;

           }

         if(s[i].birthday.year==s[j].birthday.year)

         if(s[i].birthday.month==s[j].birthday.month)

         if(s[i].birthday.day>s[j].birthday.day)

           {day1=s[i];

            s[i]=s[j];

           s[j]=day1;

          }

        }

    getchar();

    printf("年龄从大到小的顺序为:\n");

    printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学=====班级=====QQ号码\n");

    for(i=0;i

      {printf("-----------------------------------------------------------------------\n");

       printf("%s %s %s %d-%d-%d  %s %s %s %s\n",s[i].name,s[i].address,s[i].tel,s[i].birthday.year,

                      s[i].birthday.month,s[i].birthday.day,s[i].yb,s[i].daxue,s[i].banji,s[i].qq);

       printf("-----------------------------------------------------------------------\n");

      }

    getchar();

   }

   

  /*主程序*/

  main()

  {int choice;

   sum=read_message();

   bioskey(0);

   do

    {printf("\n\n\n                 ***************欢迎进入*************  \n\n");

     printf("               ********** 学生通讯录管理系统 **********\n\n");

     printf("               **            1输入学生信息           **\n\n"); 

     printf("               **            2输出学生信息           **\n\n");

     printf("               **            3更新学生信息           **\n\n");

     printf("               **            4查询学生信息           **\n\n");

     printf("               **            5统计学生信息           **\n\n");  

     printf("               **            6学生排行信息           **\n\n");

     printf("               **            0退出系统               **\n\n");

     printf("               **             请选择(0~6) :          **\n\n");

     scanf("%d",&choice);

      switch(choice)

      {case 1: input_message();   break;

       case 2: output_message();  break;

       case 3: renew_message();   break;

       case 4: inquire_message(); break;

       case 5: count_message();   break;

       case 6: sort_message();    break;

       case 0:                    break;

      }

    }while(choice!=0);

   save_message(sum);

   printf("以上同学的信息已经保存!\n");

  }

更多相关推荐:
C语言学生成绩管理系统课程设计报告

C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1能按学期按班级完成对学生成绩的录入修改2能按班级统计学生的成绩求学生的总分及平均...

C语言程序设计学生成绩管理系统实验报告

移通学院C语言程序设计报告书设计名称学生成绩管理系统专业指导老师班级姓名学号座号时间一实验目的1在编辑应用程序过程中逐步加深对C语言编程的理解2加强实践的能力动手能力同时进一步对所学的知识进行巩固3培养初步编程...

C语言实验报告--学生成绩管理系统 中南大学

XX大学CSUC语言程序设计实践报告学生姓名剽悍的小白兔指导教师TZ学院信息科学与工程学院专业班级电气信息类XXXX班完成时间20XX年X月题目学生成绩管理系统一设计目的通过课程设计使学生综合使用所学过的C语言...

C语言课程设计报告 --学生成绩管理系统

内蒙古科技大学课程设计论文内蒙古科技大学本科生课程设计论文题目学生成绩管理系统学生姓名胡书培学号1067111106专业计算机科学与技术班级10级计算机1班指导教师周李涌20xx年12月30日1内蒙古科技大学课...

c语言程序设计报告 学生成绩管理系统

学生成绩管理系统课程设计报告书学生成绩管理系统单位分院班级学号姓名指导老师完成日期20xx年7月14日1学生成绩管理系统内容摘要摘要本次课程设计的课题是学生成绩管理系统本文介绍课程设计课题的选题意义说明了本系统...

C语言编程实验:学生成绩管理系统

计算机编程课程设计题目学生成绩管理系统班级姓名学号指导教师完成时间一设计目的进一步加深巩固学生所学专业课程C语言的基本理论知识理论联系实际进一步培养学生综合分析问题和解决问题的能力掌握运用C语言独立地编写调试应...

C语言课程设计报告学生成绩管理系统

数据结构课程设计报告学号0820xx106姓名付振华日期20xx年7月9日一课程设计题目学生成绩管理二需求分析给出n个学生的m门考试的成绩表每个学生的信息由学号姓名性别以及各科成绩组成对学生的考试成绩进行有关统...

C语言课程设计报告 学生成绩管理系统

C语言课程设计报告题目学生成绩管理系统学院计算机与信息工程学院专业信息管理与信息系统班级09级1班学号094631105姓名阿布都许克尔尔肯指导老师达新民成绩20xx年5月18日C语言程序设计课程设计报告一课程...

C语言 学生成绩管理系统实验报告

HUNANUNIVERSITY程序设计训练报告题目学生姓名学生学号专业班级指导老师1湖南大学程序设计训练报告目录一程序功能简介3二本人完成的主要工作3三设计方案31设计分析32模块的功能及程序分析43核心算法流...

c语言课程设计报告+学生成绩信息管理系统+源代码

实验报告一、问题陈述及其需求分析(一)问题陈述学生信息管理系统是对学生信息的基本管理,其中包括以下及模块:(1)增加一个学生的信息(需输入要增加学生的所有信息);(2)统计本班学生总人数及男女生人数。(3)分别…

c语言课程设计报告学生成绩管理系统

C语言课程设计报告题目:学生成绩管理系统设计者:专业班级:计算机应用技术101班学号:指导教师:20##年12月23日学生成绩管理系统课程设计报告目录一.系统软件环境(3)二.课程设计目的(3)三.内容与要求(…

C语言课程设计报告学生成绩管理系统

C语言课程设计报告学生成绩管理系统学院计算机学院专业软件工程4班年级20xx级姓名学号教师20xx年2月27日广东工业大学计算机学院制一设计题目学生成绩管理系统二课程设计目的了解软件工程中的一些系统分析模块分析...

c语言程序设计学生成绩管理系统实验报告(34篇)