https://github.com/sunlitao

一. 实验1通讯录管理系统

通讯录中的联系人包含以下信息项:姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)

系统的主要功能包括:

1. 输入联系人的信息,要求:至少输入10个联系人的数据,且注意数据的多样性。

2. 按姓名对联系人信息进行排序,并将排序后信息存放到一个文本文件中。

3. 添加联系人的信息,在已经存在的通讯录文件中添加若干个联系人。要求:添加后仍按联系人的姓名排序,并保存至原文件。

4. 删除联系人的信息,输入一个姓名,若通讯录中有该联系人的信息,则删除该联系人,否则输出提示信息,并提示用户选择是否继续进行删除操作。

5. 修改联系人的信息,输入一个姓名,根据具体需要修改该联系人的某一项信息,将修改后的信息重新保存到通讯录文件中,并提示用户选择是否继续进行修改操作。

6. 按不同条件对通讯录进行查询操作,输出满足条件的联系人的信息。

(1) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)

(2) 按手机号码查询,输入全部号码或号码位段(如输入130133139等);

(3) 按群组分类查询,输入分类名称,输出该群组的全部联系人信息。

7. 输出联系人的信息,按一定格式输出信息,保证信息排列整齐美观。

程序如下:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

typedef struct{

char num[5];

char name[9];

char sex[3];

char phone[13];

char addr[31];

}DataType;

typedef struct node{

DataType data;

struct node * next;

}ListNode;

typedef ListNode * LinkList;

LinkList head;

ListNode *p;

int menu_select();

LinkList CreateList(void);

void InsertNode(LinkList head,ListNode *p);

ListNode * ListFind(LinkList head);

void DelNode(LinkList head);

void PrintList(LinkList head);

int main()

{

for( ; ; ){

switch(menu_select())

{

case 1:

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

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

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

head=CreateList();

break;

case 2:

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

printf("*   通 讯 者 信 息 的 添 加        *\n");

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

printf("编号(4) 姓名(8) 性别 电话(11) 地址(31)\n");

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

p=(ListNode *)malloc(sizeof(ListNode));

scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,

p->data.phone,p->data.addr);

InsertNode(head,p);

break;

case 3:

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

printf("*    通 讯 录 信 息 的 查 询       *\n");

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

p=ListFind(head);

if(p!=NULL){

printf("编号 姓 名 性别 联系电话 地 址\n");

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

printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,

p->data.phone,p->data.addr);

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

}

else

printf("没查到要查询的通讯者!\n");

break;

case 4:

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

printf("*    通 讯 录 信 息 的 删 除       *\n");

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

DelNode(head);

break;

case 5:

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

printf("*    通 讯 录 链 表 的 输 出       *\n");

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

PrintList(head);

break;

case 0:

printf("\t    再   见!  \n");

return 0;

}

}

}

int menu_select()

{

int sn;

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

printf("==============================\n");

printf("     1.通讯录链表的建立\n");

printf("     2.通讯者结点的插入\n");

printf("     3.通讯者结点的查询\n");

printf("     4.通讯者结点的删除\n");

printf("     5.通讯录链表的输出\n");

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

printf("==============================\n");

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

for( ; ; )

{

scanf("%d",&sn);

if(sn<0 || sn>5)

printf("\n\t输出错误,重选0-5: ");

else

break;

}

return sn;

}

LinkList CreateList(void)

{

LinkList head=(ListNode *)malloc(sizeof(ListNode));

ListNode *p,*rear;

int flag=0;

rear=head;

while(flag==0)

{ p=(ListNode *)malloc(sizeof(ListNode));

printf("编号(4) 姓名(8) 性别 电话(11) 地址(31)\n");

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

scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,

p->data.phone,p->data.addr);

rear->next=p;

rear=p;

printf("结束建表吗? (1/0):");

scanf("%d",&flag);

}

rear->next=NULL;

return head;

}

void InsertNode(LinkList  head,ListNode *p)

{

ListNode *p1,*p2;

p1=head;

p2=p1->next;

while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)

{

p1=p2;

p2=p2->next;

}

p1->next=p;

p->next=p2;

}

ListNode * ListFind(LinkList head)

{

ListNode *p;

char num[5];

char name[9];

int xz;

printf("=====================\n");

printf("  1.按编号查询       \n");

printf("  2.按姓名查询       \n");

printf("=====================\n");

printf("     请选择 :      ");

p=head->next;

scanf("%d",&xz);

if(xz==1) {

printf("请输入要查询者的编号:  ");

scanf("%s",num);

while(p && strcmp(p->data.num,num)<0)

p=p->next;

if(p==NULL || strcmp(p->data.num,num)>0)

p=NULL;

}

else

if(xz==2) {

printf("请输入要查询者的姓名: ");

scanf("%s",name);

while(p && strcmp(p->data.name,name)!=0)

p=p->next;

}

return p;

}

void DelNode(LinkList head)

{

int  jx;

ListNode *p,*q;

p=ListFind(head);

if(p==NULL) {

printf("没有查到要删除的通讯者!\n");

return;

}

printf("真的要删除该结点吗?(1/0): ");

scanf("%d",&jx);

if(jx==1)

{

q=head;

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

{q=q->next; }

p=q->next;

q->next=p->next;

free(p);

return;

printf("通讯者已被删除!\n");

}

}

void PrintList(LinkList head)

{

ListNode *p;

p=head->next;

printf("编号 姓 名 性别 联系电话 地 址\n");

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

while(p!=NULL)

{

printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,

p->data.phone,p->data.addr);

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

p=p->next;

}

}

一  通讯表的建立

二  通讯者结点的插入

在次添加一名通讯者信息

三  通讯者节点的查询

①     按姓名查询张三

四 通讯者节点的删除

五   通讯录链表的输出

六  管理系统的退出

总结和心得

在这个程序中,了解到往往拿到一个问题是要先分析总体框架并分为小块进行,注意指针与链表的选用和比较哪种较优,使程序更为简单,效率更高,更加要了解那些函数有着怎样的功能,怎么运用是很重要的,从程序中也知道要学习的东西还有很多很多。

设计过程中出现的问题,当输入相同序号时没有提出重复提示,改进

1.个人项目 Individual Project的更多相关文章

  1. 1415-2个人项目Individual Project

    作业要求: 个人独立完成,实践PSP相关知识. 时 间: 两周. (本来截止4月30日,考虑到刚迁移平台,延缓至5月7日) 实践目标: Github基本源代码控制方法 利用Junit4进行程序模块的测 ...

  2. 个人项目 Individual Project

    通讯录中的联系人包含以下信息项:姓名.手机.办公电话.家庭电话.电子邮箱.所在省市.工作单位.家庭住址,群组分类(亲属.同事.同学.朋友.其他). 系统的主要功能包括: 1. 输入联系人的信息,要求: ...

  3. 个人项目Individual Project:迷宫求解

    源码的github链接:           https://github.com/zhangxue520/test 1.1问题描述: a.问题描述:以一个m * n的长方阵表示迷宫,0和1分别表示迷 ...

  4. 个人项目Individual Project:n皇后问题

     源码的github链接: https://github.com/luhan420/test/tree/master 1.需求分析 在本次的课程设计中,用到的知识点主要有:类.函数.选择结构里的条件语 ...

  5. Note: SE Class's Individual Project

    虽然第一个Project还有点小问题需要修改,但是大体已经差不多了,先把blog记在这里,算是开博第一篇吧! 1.项目预计的用时 本来看到这个题的时候想的并不多,但是看了老师的要求才觉得如此麻烦ORZ ...

  6. Individual Project - Word frequency program-11061171-MaoYu

    BUAA Advanced Software Engineering Project:  Individual Project - Word frequency program Ryan Mao (毛 ...

  7. .NET: 谈谈共享项目 (Shared Project) 的使用

    从 Visual Studio 2015 起,共享项目 (Shared Project) 作为新的一种项目类型被添加到项目模板列表中,它的主要目的是使多个不同类型的项目之间可以共享代码或资源.相比它的 ...

  8. 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标。确保已运行还原,且“netcoreapp2.0”已包含在项目的 TargetFrameworks 中。

    升级 vs201715.6.3之后发布出现 错误 : 资产文件“项目\obj\project.assets.json”没有“.NETCoreApp,Version=v2.0”的目标.确保已运行还原,且 ...

  9. 结对项目 Pair Project

    结对项目 Pair Project 一人编程,一人操作,共同检查. 源码 https://github.com/dpch16303/test/blob/master/%E5%AE%9E%E8%B7%B ...

随机推荐

  1. Java设计模式之二 ----- 工厂模式

    在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...

  2. 【Java学习系列】第4课--Java Web相关

    本文地址 分享提纲: 1.概述 2. Jsp基础 2.1 1.概述 1.1)[来源和先导] 本文主要的java web的教程来源JSP是 菜鸟教程JSP 和 天码营Java Web.     主要的先 ...

  3. 使用 React-Sketchapp 管理你的设计资产

    首发:https://www.yuque.com/jingwhale/blog/do37mc 最近在整理设计规范的过程中,尝试使用了 Airbnb 公司发布的 react-sketchapp 工具.从 ...

  4. (转)Python网络爬虫实战:世纪佳缘爬取近6万条数据

    又是一年双十一了,不知道从什么时候开始,双十一从“光棍节”变成了“双十一购物狂欢节”,最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. 翻着安静到死寂的聊天列表,我忽然惊醒,不行 ...

  5. P1067 多项式输出

    #include <iostream>#include<cstdio>#include<algorithm>using namespace std;int a[10 ...

  6. P1057 传球游戏

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的: nnn 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球 ...

  7. Excel中mod函数的使用方法

    1.mod函数的含义 1 1.mod函数是一个用来求余数函数,返回两数相除的余数.mod函数在Excel中一般不单独使用,经常和其他函数组合起来使用. END 2.mod函数的语法格式 1 2.mod ...

  8. Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

  9. MySQL 基础七 视图

    -- 查看表 SELECT * FROM student; SHOW CREATE TABLE student; -- 创建视图 CREATE VIEW v_student1 AS SELECT *F ...

  10. Luogu P1020 导弹拦截

    传送门 这道题信息量好大啊 1.Dilworth定理 Dilworth定理:对于一个偏序集,最少链划分等于最长反链长度. Dilworth定理的对偶定理:对于一个偏序集,其最少反链划分数等于其最长链的 ...