问题描述

采用顺序表,设计一个 QQ群名片信息管理系统,主要包含:QQ号码、昵称、性别、年龄、生日等属性。完成基本功能如下:

(1)初始化群名片;

(2)添加某一个QQ群中10名成员的名片信息;

(3)删除某位成员信息;

(4)根据QQ号码或昵称查找某位成员的信息;

(5)显示群成员信息。

扩展功能:

1.统计当前QQ群中共有多少联系人

2.销毁群名片

代码

#include

#include

#include

#define MaxSize 10 //最大人数

/* 成员信息 */

typedef struct Member

{

int Number;

char ID[20];

char Sex[4];

int Age;

char Birthday[20];

}Mem;

typedef struct SeqList *PtrToSeqList;

struct SeqList

{

Mem Data[MaxSize];

int count; //当前人数

};

typedef PtrToSeqList List;

void PrintMenu(); //打印菜单

List InitList(); //初始化表

int IsFuLL(List L); //是否为满

void AddMember(List L); //添加成员

int IsEmpty(List L); //是否为空

List DeleteMember(List L, int Q); //通过qq号删除成员

void FindMember(List L); //通过qq号或昵称查找成员

void PrintList(List L); //打印表

int main()

{

List L;

int choice, d, flag;

choice = 1;

flag = 0;

L = (List)malloc(sizeof(struct SeqList));

L->count = 0;

PrintMenu();

while(choice) //choice == 0 时退出系统

{

printf("请选择:");

scanf("%d", &choice);

if(flag == 1)

printf("名片已被销毁请先初始化名片!\n");

else

{

switch(choice)

{

case 1: //录入群成员信息

AddMember(L);

break;

case 2: //删除群成员信息

printf("请输入要删除成员的QQ:");

scanf("%d", &d);

L = DeleteMember(L, d);

break;

case 3: //查找成员信息

FindMember(L);

break;

case 4: //显示群成员信息

PrintList(L);

break;

case 5: //显示当前成员数

printf("当前有%d个成员\n", L->count);

break;

case 6: //清空名片

L = InitList();

break;

case 7: //销毁名片

free(L);

flag = 1;

printf("名片已被销毁!\n");

break;

}

}

if(choice == 8) //初始化名片

{

flag = 0;

L = InitList();

}

else if(choice == 9) //回到主菜单

PrintMenu();

else if(choice < 0 || choice > 9)

printf("非法输入!\n");

}

printf("谢谢使用!");

return 0;

}

void PrintMenu()

{

printf(" QQ群名片信息管理系统\n");

printf(" ________________________________\n\n");

printf(" 1 录入群成员信息\n");

printf(" ________________________________\n\n");

printf(" 2 删除群成员信息\n");

printf(" ________________________________\n\n");

printf(" 3 查找成员信息\n");

printf(" ________________________________\n\n");

printf(" 4 显示群成员信息\n");

printf(" ________________________________\n\n");

printf(" 5 显示当前成员数\n");

printf(" ________________________________\n\n");

printf(" 6 清空名片\n");

printf(" ________________________________\n\n");

printf(" 7 销毁名片\n");

printf(" ________________________________\n\n");

printf(" 8 初始化名片\n");

printf(" ________________________________\n\n");

printf(" 9 回到主菜单\n");

printf(" ________________________________\n\n");

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

printf(" ________________________________\n\n");

}

List InitList()

{

List L;

L = (List)malloc(sizeof(struct SeqList));

L->count = 0;

printf("已初始化名片!\n");

return L;

}

int IsFull(List L)

{

return (L->count == MaxSize);

}

void AddMember(List L)

{

if(IsFull(L))

{

printf("成员已满!\n");

return;

}

printf("QQ号:");

scanf("%d", &L->Data[L->count].Number);

printf("昵称:");

scanf("%s", L->Data[L->count].ID);

printf("性别:");

scanf("%s", L->Data[L->count].Sex);

printf("年龄:");

scanf("%d", &L->Data[L->count].Age);

printf("生日:");

scanf("%s", L->Data[L->count].Birthday);

L->count++;

}

int IsEmpty(List L)

{

return (L->count == 0);

}

List DeleteMember(List L, int Q)

{

int i, j, tmp;

tmp = L->count;

if(IsEmpty(L))

printf("无成员!\n");

for(i = 0; i < L->count; i++)

{

if(L->Data[i].Number == Q)

{

for(j = i; j < L->count; j++)

L->Data[j] = L->Data[j + 1];

L->count--;

}

}

if(tmp == L->count)

printf("该成员未在群内!\n");

return L;

}

void FindMember(List L)

{

int i, fqq, choice, flag;

char fid[20];

if(IsEmpty(L))

{

printf("无成员!\n");

return ;

}

flag = 0; //查找标志

printf("查找\n1、qq:\t2、昵称:\n");

scanf("%d", &choice);

switch(choice)

{

case 1:

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

scanf("%d", &fqq);

for(i = 0; i < L->count; i++)

{

if(fqq == L->Data[i].Number)

{

printf("以下为您要找的成员:");

printf("\nQQ号:%d", L->Data[i].Number);

printf("\n昵称:%s", L->Data[i].ID);

printf("\n性别:%s", L->Data[i].Sex);

printf("\n年龄:%d", L->Data[i].Age);

printf("\n生日:%s\n", L->Data[i].Birthday);

flag = 1;

}

}

break;

case 2:

printf("请输入昵称:");

scanf("%s", fid);

for(i = 0; i < L->count; i++)

{

if(!strcmp(fid, L->Data[i].ID)) //strcmp(str1, str2) 当 “str1 == str2” 时返回0

{

printf("以下为您要找的成员:");

printf("\nQQ号:%d", L->Data[i].Number);

printf("\n昵称:%s", L->Data[i].ID);

printf("\n性别:%s", L->Data[i].Sex);

printf("\n年龄:%d", L->Data[i].Age);

printf("\n生日:%s\n", L->Data[i].Birthday);

flag = 1;

}

}

break;

}

if(flag == 0)

printf("未找到改成员!\n");

}

void PrintList(List L)

{

int i;

if(IsEmpty(L))

{

printf("无成员!\n");

return ;

}

for(i = 0; i < L->count; i++)

{

printf("\n第%d个成员的信息:", i + 1);

printf("\nQQ号:%d", L->Data[i].Number);

printf("\n昵称:%s", L->Data[i].ID);

printf("\n性别:%s", L->Data[i].Sex);

printf("\n年龄:%d", L->Data[i].Age);

printf("\n生日:%s\n", L->Data[i].Birthday);

}

}

C语言编程QQ管理系统,顺序表- QQ群名片信息管理系统设计(C语言实现)相关推荐

  1. C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...

    c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...

  2. 考试报名管理系统C语言顺序表,学生信息管理系统(顺序表)实验

    <学生信息管理系统(顺序表)实验>由会员分享,可在线阅读,更多相关<学生信息管理系统(顺序表)实验(29页珍藏版)>请在人人文库网上搜索. 1.精品文档数 据 结 构 课 程 ...

  3. c语言乘法口诀表的流程图_例18:C语言编程实现九九乘法表

    例18:C语言编程实现九九乘法表,样式要求长方形.右三角形.左三角形. 解题思路:这个问题的算法很简单,就是两个for循环的嵌套,三角形的样式就是多了一些空格. 长方形源代码演示: #include& ...

  4. C语言实现了一个顺序表(附完整源码)

    C语言实现了一个顺序表 顺序表 顺序表的概念 顺序表的存储结构 C语言实现了顺序表完整源码 顺序表 顺序表的概念 顺序表是线性表的顺序存储结构,加按顺序存储方式构造的线性表的存储结构. 说明:对于n个 ...

  5. 顺序表的c语言结构体描述,顺序表的基本方法实现C语言版

    顺序表--------------线性表的第一个儿子 这个儿子的结构体定义: typedef int ElemType;//取别名 typedef struct link{ ElemType * he ...

  6. (C语言)已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。

    (C语言)已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列. 输入样例: 5 2 4 9 10 11 6 1 2 4 6 7 8 输 ...

  7. c语言 商品管理系统 顺序表的应用

    商品管理系统 需求描述 运行结果 代码 需求描述 使用线性表编写程序,实现一在线商城对商品进行管理,商城客户可以查询商品信息,商城的商家可以添加.删除.查询.修改自己发布的商品信息. 要求: 商品用户 ...

  8. c语言编程文件中删除数据结构,C语言数据结构实战(一)顺序表的插入与删除

    今天学习了思成老师的数据结构实战教程 写了一个顺序表 插入和删除的操作 把源码共享给大家 一共包括list.c stu.h main.c list.h   .h文件是头文件 需要引入 具体的功能我都已 ...

  9. 数据结构--学生成绩管理系统(顺序表)

    一. 实验目的: 1.通过此次课程设计学生成绩管理系统的题目,掌握链表等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解: 2. 将所学数据结构方面的知识与具体 ...

  10. C语言用数组(顺序表)实现大小固定的队列的方法

    顺序队列,即采用顺序表模拟实现的队列结构. 我们知道,队列具有以下两个特点: 1.数据从队列的一端进,另一端出: 2.数据的入队和出队遵循"先进先出"的原则: 因此,只要使用顺序表 ...

最新文章

  1. LINUX环境下资源下载中文目录及中文文件名称问题
  2. 《基于压缩传感的匹配追踪重建算法研究》读书笔记
  3. 抽象工厂和工厂设计模式之间有什么区别?
  4. 若依 v4.6.1 后台 排除log4j
  5. Castle ActiveRecord学习实践(1):快速入门指南
  6. 单应性矩阵和仿射变换_单应矩阵 基本矩阵 本质矩阵的区别与联系
  7. VTK:功能袋图用法实战
  8. iOS之深入解析CocoaPods的GitLab CI与组件自动化构建与发布
  9. [BZOJ 4916]神犇和蒟蒻
  10. 如何识别一个人是web前端程序员
  11. 如何运行vue项目 ?(详解,建议收藏) ❤️
  12. cas client 更新ticket_有人知道 cas单点登录系统是怎么样取得proxyticket的?
  13. 高斯计工作原理和高斯计使用方法图解
  14. mysql hint 驱动_MySQL HINT:Straight_JOIN
  15. 蜂巢的艺术与技术价值 - PostgreSQL PostGIS's hex-grid
  16. 分数加减乘除混合运算带答案_100道题,分数加减法混合运算,要答案
  17. 2022 计算机视觉顶会论文----目标检测
  18. 【C# 教程系列第 29 篇】求1-100之内所有的质数(素数)
  19. 点击键盘的return键收回键盘
  20. 机器学习基础——生成模型和判别模型

热门文章

  1. 用cmd 查看本机的IP地址
  2. ffmpeg编码:xavc 42210bit+mxf
  3. mysql完整的建表语句
  4. 油猴脚本对web项目的影响
  5. 《金字塔原理》学习笔记 | 第4篇—演示的逻辑
  6. linux 存储映射lun 给_Linux挂载iscsi存储
  7. MPC5744P-时钟模块
  8. idea json转对象(Java实体类)
  9. php-5.6.2-Win32-VC11-x64.zip+ apache2.4.10 +php_xdebug-2.2.5-5.6-vc11-x86_64.dll+mysql5.6安装配置
  10. c 转时间戳php,php日期转时间戳,指定日期转换成时间戳 筋斗云网络