数据结构--学生通讯录管理系统

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

文章目录

  • 一、问题描述
  • 二、系统功能设计
  • 三、各个代码部分
  • 四、整体代码及其运行
  • 五、总结

前言

学生通讯录管理系统--C语言实现


一、问题描述

在现实中,用学号和姓名来记录学生需要花费大量的纸质材料,并且出现容易丢失、查找困难等问题。

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

二、系统功能设计

1、需要设计的功能有: 

  • 1、建立通讯录
  • 2、插入联系人信息
  • 3、删除联系人信息
    • 按序号删除
    • 按学号删除
    • 按姓名删除
  • 4、查找联系人信息
    • 按学号查找
    • 按姓名查找
  • 5、显示联系人信息
  • 6、退出通讯录系统

2、主界面如下: 

数据结构--学生通讯录管理系统

3、主界面代码如下: 

void menu()
{
    printf("------------------------欢迎来到学生通讯录管理系统-------------------------\n");
    printf("                            1.建立通讯录    \n");
    printf("                            2.插入联系人信息\n");
    printf("                            3.删除联系人信息\n");
    printf("                            4.查找联系人信息\n");
    printf("                            5.显示联系人信息\n");
    printf("                            6.退出系统管理  \n");
    printf("---------------------------------------------------------------------------\n");
}

三、各个代码部分

1、建立通讯录

1、主要以顺序存储结构进行存储

#include<stdlib.h>
#include<string.h>
#define MAX 100
typedef struct
{
      char name[9];
      char tel[12];
}Address;
typedef Address ElemType;
typedef struct
{
      ElemType data[MAX];
      int len;
}AddressList;
//顺序存储结构

 2、后初始化顺序表,再进行创建

//顺序表初始化
AddressList * Init()
{
      AddressList * L;
      //为通讯录顺序表分配内存
      L=(AddressList *)malloc(sizeof(AddressList ));
      if(L==NULL)                    //判断内存分配是否成功
      {
            printf("内存分配失败,结束程序\n");
            exit(0);
      }
      else
      {
            L->len=0;                //将顺序表的长度设置为0
            return L;                 //返回顺序表的地址
      }
}

//创建顺序表
void Create(AddressList *L)
{
      ElemType x;              //用于存储顺序表元素
      int i=0,flag;            //用于标志
      flag=1;
      while(flag!=0)             //判断是否输入下一个元素
      {
            printf("请输入姓名:");      //输入元素中的姓名
            scanf("%s",x.name);
            printf("请输入学号:");     //输入元素中的电话
            scanf("%s",x.tel);
            //将输入的元素数据放置在顺序表中对应的位置
            strcpy(L->data[i].name ,x.name );
            strcpy(L->data[i].tel ,x.tel);
            L->len++;            //增加一个元素,顺序表的长度加1
            i++;
            printf("是否继续输入,继续请输入1,结束请输入0,请输入:");
            scanf("%d",&flag);               //输入标志
            getchar();  //去掉输入标志时输入的回车,为下次输入元素做好准备
      }
}

3、效果如下 

数据结构--学生通讯录管理系统

2、插入联系人信息 

//在顺序表的第i个位置插入一个元素
int Insert(AddressList *L)
{
        int i;
        printf("您要插入在第几个:");
        scanf("%d",&i);
        ElemType x;
        ElemType* p = &x;
        printf("联系人的姓名为:");
        scanf("%s",p->name);
        printf("联系人的学号为:");
        scanf("%s",p->tel);
      int j;
      if(i>=1 && i<=L->len+1)
      {
            for(j=L->len -1;j>=i-1;j--)
            {
                strcpy(L->data[j+1].name ,L->data[j].name );
                strcpy(L->data[j+1].tel ,L->data[j].tel );
            }
            strcpy(L->data[i-1].name ,x.name );
            strcpy(L->data[i-1].tel ,x.tel );
            L->len ++;  //插入一个元素,顺序表的长度加1
            printf("插入成功,通讯录信息为:\n");
            Output(L);
            return 1;                //插入成功返回1
      }
      else
      {
            printf("无法插入,插入的位置不合法\n");
            return  0;       //插入失败返回0
      }
}

效果如下: 

 数据结构--学生通讯录管理系统

3、删除联系人信息 

1、按序号删除 

2、按姓名删除

3、按学号删除

//在顺序表的第i个位置删除一个元素
int  Delete(AddressList *L,int i)
{
      int j;
      if(i>=1&&i<=L->len){
            for(j=i ;j<=L->len-1;j++)
            {
                L->data[i-1] = L->data[j];
            }
            L->len--;
            printf("已成功删除第%d个\n",i);
            printf("删除成功后显示为:\n");
            Output(L);
            return 1;               //删除成功返回1
      }
      return -1;
}
void deleteway(AddressList *L1)
{
        int m;
        printf("删除的方式为:1、按顺序,2、按姓名,3、按学号\n");
        scanf("%d",&m);
            if(m==1){
            int x;
            printf("您要删除第几个:");
            scanf("%d",&x);
            Delete(L1,x);
        }
        if(m==2){
            char name[MAX];
            printf("请输入姓名:");
            scanf("%s",name);
            int i = FindByname(L1,name)+1;
            Delete(L1,i);
        }
        if(m==3){
            char tel[MAX];
            printf("请输入学号:");
            scanf("%s",tel);
            int i = FindBytel(L1,tel)+1;
            Delete(L1,i);
        }
}

4、查找联系人信息

1、按姓名查找

2、按学号查找

//查找联系人信息
void SearchContact(AddressList *L)
{
    int x;
    printf("请输入查找的方式:1、按姓名 2、按学号\n");
    scanf("%d",&x);
    if(x==1){
        char name[MAX];
        printf("请输入姓名:");
        scanf("%s",name);
        int i = 0;
        i = FindByname(L,name);
            printf("你要找的人的信息为:");
            printf("姓名:%s 学号:%s\n",L->data[i].name,L->data[i].tel);
    }else if(x==2){
        char tel[MAX];
        printf("请输入学号:");
        scanf("%s",tel);
        int i = 0;
        i = FindBytel(L,tel);
            printf("你要找的人的信息为:");
            printf("姓名:%s 学号:%s\n",L->data[i].name,L->data[i].tel);
    }else{
        printf("输入方式有误!\n");
    }
}
//按姓名查找
int FindByname(AddressList *L,char name[])
{
    int i;
    for(i=0;i<=L->len+1;i++)
    {
        if(strcmp(L->data[i].name,name) == 0)
        {
            return i;
        }
    }
    return -1;
}
//按学号查找
int FindBytel(AddressList *L,char name[])
{
    int i;
    for(i=0;i<L->len;i++)
    {
        if(strcmp(L->data[i].tel,name) == 0)
        {
            return i;
        }
    }
    return -1;
}

5、 显示联系人信息

//显示联系人所有信息
void Output(AddressList *L)

{
      int i;
      for(i=0;i<=L->len -1;i++)
            printf("姓名:%s, 学号:%s\n", L->data[i].name ,L->data[i].tel );

}

四、整体代码及其整体运行 

1、所有代码如下:建议将子函数放在另一个文件里,与主函数区分开。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
typedef struct
{
      char name[9];
      char tel[12];
}Address;
typedef Address ElemType;
typedef struct
{
      ElemType data[MAX];
      int len;
}AddressList;
//初始化顺序表


void menu();//显示要操作的项目

AddressList * Init();//对通讯录进行初始化
void Create(AddressList *L);//创造通讯录各个成员的信息

int Insert(AddressList *L);//对通讯录插入成员的信息

int  Delete(AddressList *L,int i);//按顺序删除成员信息
void deleteway(AddressList *L1);//按照名字或学号删除成员信息

void SearchContact(AddressList *L);//对要查询的成员进行提示操作
int FindByname(AddressList *L,char name[]);//按照名字查找成员信息
int FindBytel(AddressList *L,char name[]);//按照学号查找成员信息

void Output(AddressList *L);//显示通讯录各个成员的信息


int main()
{
    AddressList *L1;
    menu();
    printf("请选择要运行的项目:");
    int a;
    scanf("%d",&a);
        while(a!=6){
            switch(a)
            {
                case 1:
                    L1 = Init();
                    Create(L1);
                    break;
                case 2:
                    Insert(L1);
                    break;
                case 3:
                    deleteway(L1);
                    break;
                case 4:
                    SearchContact(L1);
                    break;
                case 5:
                    Output(L1);
                    break;
                default:
                    printf("输入错误!");
            }
        printf("请选择要运行的项目:");
        scanf("%d",&a);
        }
    printf("您已成功退出系统!");
    return 0;
}



void menu()
{
    printf("------------------------欢迎来到学生通讯录管理系统-------------------------\n");
    printf("                            1.建立通讯录    \n");
    printf("                            2.插入联系人信息\n");
    printf("                            3.删除联系人信息\n");
    printf("                            4.查找联系人信息\n");
    printf("                            5.显示联系人信息\n");
    printf("                            6.退出系统管理  \n");
    printf("---------------------------------------------------------------------------\n");
}


//顺序表初始化
AddressList *Init()
{
      AddressList * L;
      //为通讯录顺序表分配内存
      L=(AddressList *)malloc(sizeof(AddressList ));
      if(L==NULL)                    //判断内存分配是否成功
      {
            printf("内存分配失败,结束程序\n");
            exit(0);
      }
      else
      {
            L->len=0;                //将顺序表的长度设置为0
            return L;                 //返回顺序表的地址
      }
}

//创建顺序表
void Create(AddressList *L)
{
      ElemType x;              //用于存储顺序表元素
      int i=0,flag;            //用于标志
      flag=1;
      while(flag!=0)             //判断是否输入下一个元素
      {
            printf("请输入姓名:");      //输入元素中的姓名
            scanf("%s",x.name);
            printf("请输入学号:");     //输入元素中的电话
            scanf("%s",x.tel);
            //将输入的元素数据放置在顺序表中对应的位置
            strcpy(L->data[i].name ,x.name );
            strcpy(L->data[i].tel ,x.tel);
            L->len++;            //增加一个元素,顺序表的长度加1
            i++;
            printf("是否继续输入,继续请输入1,结束请输入0,请输入:");
            scanf("%d",&flag);               //输入标志
            getchar();  //去掉输入标志时输入的回车,为下次输入元素做好准备
      }
}

//在顺序表的第i个位置插入一个元素
int Insert(AddressList *L)
{
        int i;
        printf("您要插入在第几个:");
        scanf("%d",&i);
        ElemType x;
        ElemType* p = &x;
        printf("联系人的姓名为:");
        scanf("%s",p->name);
        printf("联系人的学号为:");
        scanf("%s",p->tel);
      int j;
      if(i>=1 && i<=L->len+1)
      {
            for(j=L->len -1;j>=i-1;j--)
            {
                strcpy(L->data[j+1].name ,L->data[j].name );
                strcpy(L->data[j+1].tel ,L->data[j].tel );
            }
            strcpy(L->data[i-1].name ,x.name );
            strcpy(L->data[i-1].tel ,x.tel );
            L->len ++;  //插入一个元素,顺序表的长度加1
            printf("插入成功,通讯录信息为:\n");
            Output(L);
            return 1;                //插入成功返回1
      }
      else
      {
            printf("无法插入,插入的位置不合法\n");
            return  0;       //插入失败返回0
      }
}



//在顺序表的第i个位置删除一个元素
int  Delete(AddressList *L,int i)
{
      int j;
      if(i>=1&&i<=L->len){
            for(j=i ;j<=L->len-1;j++)
            {
                L->data[i-1] = L->data[j];
            }
            L->len--;
            printf("已成功删除第%d个\n",i);
            printf("删除成功后显示为:\n");
            Output(L);
            return 1;               //删除成功返回1
      }
      return -1;
}
void deleteway(AddressList *L1)
{
        int m;
        printf("删除的方式为:1、按顺序,2、按姓名,3、按学号\n");
        scanf("%d",&m);
            if(m==1){
            int x;
            printf("您要删除第几个:");
            scanf("%d",&x);
            Delete(L1,x);
        }
        if(m==2){
            char name[MAX];
            printf("请输入姓名:");
            scanf("%s",name);
            int i = FindByname(L1,name)+1;
            Delete(L1,i);
        }
        if(m==3){
            char tel[MAX];
            printf("请输入学号:");
            scanf("%s",tel);
            int i = FindBytel(L1,tel)+1;
            Delete(L1,i);
        }
}


//查找联系人信息
void SearchContact(AddressList *L)
{
    int x;
    printf("请输入查找的方式:1、按姓名 2、按学号\n");
    scanf("%d",&x);
    if(x==1){
        char name[MAX];
        printf("请输入姓名:");
        scanf("%s",name);
        int i = 0;
        i = FindByname(L,name);
            printf("你要找的人的信息为:");
            printf("姓名:%s 学号:%s\n",L->data[i].name,L->data[i].tel);
    }else if(x==2){
        char tel[MAX];
        printf("请输入学号:");
        scanf("%s",tel);
        int i = 0;
        i = FindBytel(L,tel);
            printf("你要找的人的信息为:");
            printf("姓名:%s 学号:%s\n",L->data[i].name,L->data[i].tel);
    }else{
        printf("输入方式有误!\n");
    }
}
//按姓名查找
int FindByname(AddressList *L,char name[])
{
    int i;
    for(i=0;i<=L->len+1;i++)
    {
        if(strcmp(L->data[i].name,name) == 0)
        {
            return i;
        }
    }
    return -1;
}
//按学号查找
int FindBytel(AddressList *L,char name[])
{
    int i;
    for(i=0;i<L->len;i++)
    {
        if(strcmp(L->data[i].tel,name) == 0)
        {
            return i;
        }
    }
    return -1;
}


//显示联系人所有信息
void Output(AddressList *L)

{
      int i;
      for(i=0;i<=L->len -1;i++)
            printf("姓名:%s, 学号:%s\n", L->data[i].name ,L->data[i].tel );

}

2、整体运行结果如下: 

数据结构--学生通讯录管理系统

 五、总结

太多了不会?跟着我的代码敲,熟能生巧,一个一个模块去做,分治法大事化小。看着代码自己打一遍,能运行就是成功。文章来源地址https://www.toymoban.com/news/detail-500073.html

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

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

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

相关文章

  • 数据结构(初阶):顺序表实战通讯录

    数据结构(初阶)第一节:数据结构概论-CSDN博客 数据结构(初阶)第二节:顺序表-CSDN博客         本文将以C语言和顺序表实现通讯录基础管理,实现功能包括增、删、改、查等,在实现相关功能时需要用到在第二节中顺序表的相关内容,需要友友们掌握顺序表的相关

    2024年04月16日
    浏览(31)
  • 【(数据结构)—— 基于单链表实现通讯录】

    (1). 知识要求 C语言基础要求:结构体、动态内存管理、单链表、文件件操作 (2). 功能要求 1)至少能够存储100个人的通讯信息 2)能够保存用户信息:名字、性别、年龄、电话、地址等 3)增加联系人信息 4)删除指定联系人 5)查找制定联系人 6)修改指定联系人 7)显示联系

    2024年02月08日
    浏览(31)
  • 数据结构之使用顺序表写出通讯录

    昨天我们踏入了数据结构的深山,并且和顺序表battle了一番,虽说最后赢了,但同时也留下了一个问题: 如何从顺序表的增删查改加强到通讯录的的增删查改 ,别急,今天就带你一探究竟。 我们昨天实现了顺序表的头删,头插,尾删尾插,选择插入,选择删除,以及初始化

    2024年01月23日
    浏览(52)
  • 学生通讯录管理系统的设计与实现

    1.1 问题的描述 学生通讯录管理系统是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。 1.2 问题分析和任务定义 (1)输入数据建立通讯录; (2)查询通讯录中满足要求的信息; (3)插入新的通讯录信息; (4)删除不需要的通讯

    2024年02月10日
    浏览(39)
  • python数据结构实验设计(单链表):通讯录管理

    目录 摘要 一、课程设计目的及内容 创新功能: 二、算法及设计过程分析 1.总流程 2.主界面 3.文件处理与生成单链表 4.查看所有联系人信息 5.查看人数 6.查找联系人(以姓名或号码为依据) 7.对姓名或号码输入进行模糊查找  8.添加联系人 9.删除联系人  10.合并两个通

    2024年01月16日
    浏览(29)
  • 【(数据结构) —— 顺序表的应用-通讯录的实现】

    C语言基础要求:结构体、动态内存管理、顺序表、文件件操作 (1). 功能要求 1)至少能够存储100个人的通讯信息 2)能够保存用户信息:名字、性别、年龄、电话、地址等 3)增加联系人信息 4)删除指定联系人 5)查找制定联系人 6)修改指定联系人 7)显示联系人信息 (2).重

    2024年02月08日
    浏览(37)
  • Python学生通讯录管理系统案例(文件版)

    目录 1.打印输出学生通讯录管理系统的菜单 2.接收用户从键盘输入的选择序号 3.根据输入的选择序号,判断并执行不同的功能 注意:本例中,要想保存所以学生的通讯信息,需要用到字典。 1.打印输出学生通讯录管理系统的菜单 首先我们先定义一个showMenu()函数,实现打印输

    2024年02月08日
    浏览(35)
  • python实现手机通讯录和学生信息管理系统(4种方法)

    1.手机通讯录: 通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人们可以在通讯录中通过姓名查看相关联系人的联系方式、邮箱、地址等信息,也可以在其中新增联系人,或修改、删除联系人信息。下面是一个常见通讯录的功能菜单,如图

    2024年02月09日
    浏览(63)
  • C++编程案例讲解-基于结构体的控制台通讯录管理系统

    添加联系人 :向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人 :显示通讯录中所有的联系人信息 删除联系人 :按照姓名进行删除指定联系人信息 查找联系人 :按照姓名查看指定联系人信息 修改联系人 :按照姓名重新

    2024年02月05日
    浏览(51)
  • 【C语言课设计划】个人通讯录管理系统(C语言大作业 链表 结构体 运行截图 完整代码)

    hello 大家好呀 这里是布丁学姐~ 今天给大家带来的是《C语言课设计划》的第一篇,个人通讯录管理系统 通讯录是当前社会每个人不可缺少的信息系统,利用C语言和Dve c++制作个人通讯录管理系统,从根本上改变纸质通讯录难以长久保存、容易丢失的弊端,从而提高信息管理和

    2024年02月02日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包