学生通讯录管理系统的设计与实现

这篇具有很好参考价值的文章主要介绍了学生通讯录管理系统的设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 学生通讯录管理系统的设计与实现

1.1 问题的描述

学生通讯录管理系统是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。

1.2 问题分析和任务定义

(1)输入数据建立通讯录;

(2)查询通讯录中满足要求的信息;

(3)插入新的通讯录信息;

(4)删除不需要的通讯录信息;

(5)查看所有的通讯录信息。

1.3 数据类型和系统设计

1)存储结构设计

采用链表来存储“学生通讯信息”,其中链表结点有4个分量构成:通讯录成员学号、姓名、电话号码、指向下一个成员的指针。

2)系统功能设计

本系统设置了5个子功能菜单,5个子功能的设计描述如下:

① 建立通讯录系统。可以一次输入多个成员通讯录的信息,建立通讯录。该功能有由creatIncreLink() 函数实现。

② 插入通讯录记录。每次可以插入一个成员通讯录的信息,如果要连续插入多个成员通讯录信息必须多次选择该功能。该功能由insertYouXu() 函数实现。

③ 查询通讯录记录。可以按两种方式查询所需要的通讯录成员记录,一是按学号查询,而是按姓名查询。分别由searchNum() 和searchName() 函数实现。

④ 删除通讯记录。可以对通讯录中不再需要的信息进行删除。有三种删除方式,按序号进行删除,按学号进行删除和按姓名进行删除。分别由deleteElem() ,delNum() 和delName() 三个函数实现。

⑤ 显示通讯录记录。可以查看通讯录中所有通讯录成员记录。该功能由printList() 函数实现。

3)系统主界面的设计

为了实现学生通讯管理系统各功能的管理,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图1所示。

学生通讯录管理系统的设计与实现

 文章来源地址https://www.toymoban.com/news/detail-494750.html

1 “学生通讯录管理系统”主菜单

1.4 编码实现

(1)链表结点类型的定义

typedef struct LNode

{ int number;

 double telenum;

 char name[20];

 struct LNode *next;

}LNode,*LinkList;

(2)建立链表的函数,主要用来建立通讯录。

LinkList creatIncreLink() //创建一个存放通讯录成员的非递减有序表,返回头结点地址

{ LinkList L=(LinkList)malloc(LEN);  //头结点

 L->next=NULL;

 LinkList p;

 int num=1;

 int number;

 double telenum;

 char name[20];

 printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n");

 printf("请输入学号 %d:",num);

 scanf("%d",&number);

 printf("请输入姓名 %d: ",num);

 char temp=getchar();

 gets(name);

 printf("请输入电话号码 %d:",num);

 scanf("%lf",&telenum);

 while (number>=0)

 {

  p=(LinkList)malloc(LEN); //新结点

  p->number=number;

  p->telenum=telenum;

  strcpy(p->name,name);

  insertYouXu(L,p);       //有序的插入新结点

  num++;

  printf("请输入学号 %d:",num);

     scanf("%d",&number);

     printf("请输入姓名 %d: ",num);

  temp=getchar();

     gets(name);

  printf("请输入电话号码 %d:",num);

     scanf("%lf",&telenum);

 } return(L);

}

(3)插入通讯记录

void insertYouXu(LinkList L,LinkList Elem)

{              //插入一个元素,使原有序表仍为有序

      LinkList p=L->next;

      while(p!=NULL && Elem->number>=p->number)

      {

             if(p->number==Elem->number)

             {                   printf("重复输入!!\n");return;

             }

             p=p->next;

      }         //确定Elem插入的位置

      if(p==NULL)

      {

             p=prior(L,p); Elem->next=NULL;p->next=Elem;

      }

      else       //若为空表,插到头结点之后

      {            p=prior(L,p); Elem->next=p->next; p->next=Elem;

      }

}

(4)按学号查询通讯录记录

int searchNum(LinkList L,int n)

{    // 按学号查找通讯者

 int flag=0;

 LinkList p=L->next;

 seat=1;

 if(L->next==NULL) printf("该链表中没有元素,查找失败\n");

 else  {

  while(p !=NULL)

  {

   if(p->number<=n)

    if(p->number==n)

      {       flag=1;

       printf("要查找的是第%d位通讯者:\n",seat);

       printf("                        学号: %d   姓名: %s   电话号码.:%.0f\n",p->number,p->name,p->telenum);

    }

   p=p->next;seat++;//!!!!

  }

 }

 return flag;

}

(5)按姓名查询通讯录记录

int searchName(LinkList L,char n[])

{    // 按姓名查找通讯者

 int flag=0;

 LinkList p=L->next;

 seat=1;

 if(L->next==NULL||L==NULL)

 printf("该通讯录中没有元素,查找失败\n");

 else  {

  while(p !=NULL)

  {

   if(!strcmp(p->name,n))

   {

    flag=1;

    printf("要查找的是第%d位通讯者:\n",seat);

    printf("                        Number: %d   Name: %s   TeleNo.:%.0f\n",p->number,p->name,p->telenum);

   }

   p=p->next;seat++;//!!!!!

  }

 } return flag;

}

(6)按序号进行删除,删除通讯录第i个元素

void deleteElem(LinkList L,int i)       //从通讯录中删除第i个元素

{

LinkList p=L;

 int j=0;

 while (p->next&&j<i-1)

 {

  p = p->next;j++;

 }

if(!(p->next))

{printf("第%d个元素删除失败\n",i);return ;}

  //判断i是否合法,i既不能大于元素的个数,也不能小于等于0

LinkList q = p->next;

p->next = q->next;

free(q); //释放删除的结点

}

(7)按学号删除通讯者

int delNum(LinkList L,int n)

{    // 按学号删除通讯者

 int flag=0;

 LinkList p=L->next;

 seat=1;

 if(L->next==NULL)

 printf("该链表中没有元素,删除失败\n");

 else  {

  while(p !=NULL)

  {

   if(p->number<=n)

   {

    if(p->number==n)

      {       flag=1;

       printf("%d ",p->number);

       p=p->next;

       deleteElem(L,seat);

    }

   }

   else {p=p->next;seat++;}

  }

  printf("被删除\n");

 }

 return flag;

}

(8)按姓名删除通讯者

int delName(LinkList L,char n[])

{    // 按姓名删除通讯者 

 int flag=0;

 LinkList p=L->next;

 seat=1;

 if(L->next==NULL)

 printf("该链表中没有元素,查找失败\n");

 else {

  while(p !=NULL)

  {

   if(!strcmp(p->name,n))

   {

    flag=1;

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

    p=p->next;

    deleteElem(L,seat);

   }

   else {p=p->next;seat++;}

  }

  if(flag)printf("被删除\n");

 } return flag;

}

(9)显示通讯录

void printList(LinkList L)

{    // 打印头结点地址为L的通讯录

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

 printf("               学号       姓名     电话号码\n");

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

 LinkList p=L;

 int n=1;

 if(L==NULL||L->next==NULL) printf("该通讯录中没有元素\n");

 else

  while(p->next !=NULL)

  {

   printf("          %2d   %-9d",n,p->next->number);

   printf("    %-5s  %.0f\n",p->next->name,p->next->telenum);

   p=p->next;

   n++;

  }

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

 return ;

}

(10)主菜单,main函数

void main(){

 system("color 1f");  

 LinkList L=NULL;

 printf("\n           ***************** ^@^欢迎使用通讯录系统***********\n");

 printf("           *               1 通讯录的建立                   *\n");      

 printf("           *               2 插入通讯记录                   *\n");

 printf("           *               3 查询通讯记录                   *\n");

 printf("           *               4 删除通讯记录                   *\n");

 printf("           *               5 显示通讯录信息                 *\n");

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

 printf("           **************** ^@^欢迎使用通讯录系统************\n");

 int flag=0;

 int menu;

 printf("请选择0-5:");

 scanf("%d",&menu);

 while(menu!=0)

 {

 switch(menu) {

  case 1:       {

    L=creatIncreLink();

    printf("建立通讯录:");

    printList(L);

    flag=1;

    break;

        }

  case 2:       {          if(flag==1)

               {int number,telenum;

           char name[20];

           printf("请输入通讯者的学号和姓名:\n");

           printf("请输入学号: ");

           scanf("%d",&number);

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

           char temp=getchar();

           gets(name);

           printf("请输入电话号码: ");

           scanf("%d",&telenum);

           LinkList p=(LinkList)malloc(LEN); //新结点

           p->number=number;

           strcpy(p->name,name);

           p->telenum=telenum;

           insertYouXu(L,p);       //有序的插入新结点

           printf("插入后:");

           printList(L);

               }

          else printf("\nERROR: 通讯录还没有建立,请先建立通讯录\n");

   break;

        }

  case 3:{    int way,n;

          char na[20];

          int s;

          if(L!=NULL)

               {

if(flag) {

                             printf("选择查找方式:\n");

                  printf("               1.按学号   2.按姓名");

                  scanf("%d",&way);

                  if(way==1)

                             {

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

                      scanf("%d",&n);

                      s=searchNum(L,n);

                      if(s==0) printf("无此通讯者,查找失败!\n");

                             }

                             else if(way==2)

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

                                    char temp=getchar();

                                    gets(na);

                                    s=searchName(L,na);

                                    if(s==0) printf("无此通讯者,查找失败!\n");

                             }

                             else printf("通讯录中无记录!\n");

                      }

                      break;

               }

               else printf("通讯录中无记录!\n");break;

        }

  case 4:{

               int way;

               printf("选择删除方式:1.按序号  2. 按学号  3.按姓名 \n");

               scanf("%d",&way);

               if(way==1)

               {

                      int n;

                      printf("请输入通讯录序号: ");

                      scanf("%d",&n);

                      printf("删除后:\n");

                      deleteElem(L,n);

                      printList(L);

               }

               else if(way==2)

               {

                      int n,f;

                      printf("请输入学号: ");

                      scanf("%d",&n);

                      f=delNum(L,n);

                      if(f!=0)

                      {

                             printf("删除后:\n");

                             printList(L);

                      }

                      else printf("无该学号,删除失败!\n");

               }

               else if(way==3)

               {

                      char na[20];

                      int f;

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

                      char temp=getchar();

                      gets(na);

                      f=delName(L,na);

                      if(f!=0)

                      {

                             printf("删除后:\n");

                             printList(L);

                      }

                      else printf("无该学号,删除失败!\n");

               }

               else printf("ERROR!!\n");

               break;

        }

  case 5: {

               printf("当前通讯录内容如下:\n");

               printList(L);

               break;

        }

  case 0: exit(0);

  default:  printf("\n没有此功能,重新输入\n");

 }

 printf("选择功能:");

 scanf("%d",&menu);

}

}

1.5 测试结果

1.建立通讯录

学生通讯录管理系统的设计与实现

 

2.插入通讯记录

学生通讯录管理系统的设计与实现

 

3.查询通讯记录

学生通讯录管理系统的设计与实现

 

4.删除通讯记录

学生通讯录管理系统的设计与实现

 

5.显示通讯录信息

学生通讯录管理系统的设计与实现

 

6.退出管理系统

 学生通讯录管理系统的设计与实现

 

到了这里,关于学生通讯录管理系统的设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++课程设计,题目:通讯录管理系统

              1、题目。            2、设计分析。            3、分模块分析。            4、代码实现。 一、题目。 通讯录管理系统 手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为10

    2024年02月11日
    浏览(26)
  • C语言课程设计_通讯录管理系统

    以本班同学的具体数据为背景,设计一个本班同学通讯录。 1)  通讯录编辑(添加、删除)。 2)  按不同的项进行查找。 3)  对已存在的通讯录按不同的项排序。 4)  将通讯录写入文件 5)从文件读入通讯录 备注:通讯录至少应该有以下数据项: 姓名,地址,电话,邮编,

    2024年02月06日
    浏览(30)
  • C语言课程设计|通讯录管理系统(含完整代码)

    目录 菜单功能 录入联系人信息功能 查看系统中全部信息功能 查看单个信息功能 删除全部信息功能 删除单个信息功能 修改信息功能 完整代码 在长达一个多月的学习过程中,终于将C语言学完,因此专门写一个C语言课程设计来检验这一个多月的学习成果,由于写的比较急,

    2024年02月01日
    浏览(26)
  • Python大学计算机程序设计-通讯录管理系统

    摘   要 通讯录是每一款手机必备的一个应用,它拥有的功能非常简单,大致有添加联系人,修改联系人信息,删除联系人,查找联系人等功能,本次课程设计我使用python和python中丰富的第三方库。在通讯录的设计中,我主要采用了python的tkinter模块和os模块,实现了代码的可

    2024年02月08日
    浏览(35)
  • C语言期末课程设计—【通讯录管理系统】让课程设计不再是痛苦

    目录 摘要 第一章 绪论 1.1项目意义 1.2通讯录功能 第二章 详细设计与实现  2.1 Contact程序运行流程图 2.2 AddContact(增加)函数流程图 2.3 DelContact(删除)函数流程图 2.4 SearchConact(查找)函数流程图 2.5 ModifyContact(修改)函数流程图 2.6 SortContact(排序)函数流程图 第三章

    2024年02月09日
    浏览(26)
  • 通讯录管理系统

    作者:狮子也疯狂 专栏:《项目集锦》 坚持做好每一步,幸运之神自然会驾凌在你的身上 该项目是用于日常生活中记录联系人信息的一款智能小工具。实现了对联系人的姓名、年龄、性别、电话号码、住址的添加及修改、查找、删除、排序等功能。该项目是以 Windows 控制台

    2024年02月05日
    浏览(34)
  • 通讯录管理系统 C++

    目录 一、前言 二、设计要求  三、概要设计 3.1 主界面设计 3.1.1 设计图 3.1.2设计代码 3.2 存储结构设计 3.3 系统功能设计 3.3.1 系统流程图​编辑 3.3.2 系统子程序及功能介绍  四、详细设计 4.1 头文件 4.2 数据定义 4.3 系统主要子程序详细设计 4.3.1 主函数 4.3.2 添加联系人 4.3

    2024年02月09日
    浏览(50)
  • 通讯录管理系统C++代码

    目录 通讯录管理系统(课程设计) 一、系统中需要实现的功能 二、创建项目 三、实现功能 1、菜单功能  2.添加联系人功能  3.显示联系人功能 4.删除联系人  5 .查找联系人功能  6.修改联系人功能  7.清空联系人功能  8.退出功能 对于通讯录管理系统而言,不需要太复杂的

    2024年02月09日
    浏览(31)
  • 简单通讯录管理系统(Java)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档     任务 : 在之前的练习任务中,我们已经实现了通讯录的增删改查等基本功能,主要实现一个通讯录的菜单管理功能。 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现通讯录菜单管

    2024年02月09日
    浏览(43)
  • 【C语言】优化通讯录管理系统

    大家好,我是苏貝,本篇博客带大家优化上一篇的通讯录,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 在上一篇博文 实现通讯录管理系统 的最后,我们了解了那段代码的问题:通讯录的大小是固定的100个元素,如果想要存放1000个人的信息,那么空间就

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包