设为首页 加入收藏

TOP

菜鸟修炼C语言小设计之――通讯录(一)
2014-11-23 23:55:09 来源: 作者: 【 】 浏览:7
Tags:菜鸟 修炼 语言 设计 通讯录

这次的设计用到C语言的单向链表实现。

包括的C语言重点知识有

1.typedef的使用

2.自定义宏的使用

3.单向链表的实现和操作

1.1 设计题目

本课程设计的目的是学习建立链表,使用链表存储结构信息,增加链表结点及删除链表结点等基本操作。实际设计时,可增加数据信息及检索等功能。

1.2 设计要求

1.2.1功能设计要求

本设计要求实现如下功能:

(1)本设计将重点放在整体设计上,信息只选成员代号和电话。

(2)如果已经有记录,只能在其后追加。

(3)显示整个记录的内容(含新追加的新记录)。

(4)使代号可由6位字符和数字的混合编码组成,如:A201,34011D等。

(5)使电话号码可由18位字符和数字组成,如(86)-551-34443535,1396786678等。

(6)可以删除全部记录,可以随时增加新记录。

(7)可以使用菜单实现增加、删除和显示等功能的选择。

(8)使用宏定义动态申请存储空间。

1.2.2总体设计

本设计对模块设计的要求如下:

(1)要求使用多文件方式实现链表设计。

(2)要求将它们分成3个模块编制。一个模块负责输入;一个模块负责显示记录的内容;一个模块含有主程序,主程序负责菜单选择和命令处理。

2.设计代码

2.1main.c

#include  

#include "record.h"

int menu_select(void);

void hand_menu(int cmd, ADDR *list_head);

int main(int argc, char *argv[])

{

int cmd = 0;

ADDR *list_head;

ASK(list_head);

list_head->next = NULL;

while(1){

cmd = menu_select();

if(cmd == '0')

return 0;

hand_menu(cmd, list_head);

}

}

int menu_select(void)

{

int select;

printf(" <------通信薄-------->\n");

printf("1:添加联系人 2:删除联系人\n");

printf("3:显示所有联系人 0:退出\n");

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

select = getch();

while(select < '0'|| select>'3') {

printf("输入错误,请重新输入:\n");

select = getch();

}

return select;

}

void hand_menu(int cmd, ADDR *list_head)

{

switch(cmd){

case '1':

add_person(list_head);

break;

case '2':

list_head = del_person(list_head);

break;

case '3':

dis_person(list_head);

break;

default:

break;

}

}

2.2 record.h

#ifndef _RECORD_H_ 

#define _RECORD_H_

typedef struct{

char name[8];

char tel[20];

}DATA;

typedef struct node{

DATA data;

struct node *next;

}ADDR;

#define ASK(p) do{\

p = (ADDR *)malloc(sizeof(ADDR));\

if(p==NULL){printf("malloc memory failed!");exit(-1);}\

}while(0)

#endif

2.3 opre.c

#include  

#include "record.h"

void add_person(ADDR *node)

{

ADDR *new_p;

ASK(new_p);

new_p->next = NULL;

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

scanf("%s", new_p->data.name);

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

scanf("%s", new_p->data.tel);

while(node->next)

nodenode=node->next;

node->next = new_p;

}

void del_person(ADDR *node)

{

char name[8];

ADDR *pre = NULL;

printf("请输入要删除的名字:");

scanf("%s", name);

while(node){

if(!strcmp(node->data.name, name)){

pre->next = node->next;

free(node);

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

return;

}

pre = node;

nodenode = node->next;

}

printf("没有找到该名字!\n");

}

void dis_person(ADDR *node)

{

if(!node)

return ;

nodenode = node->next;

dis_person(node);

if(node)

printf("姓名:%s号码:%s\n", node->data.name, node->data.tel);

}



摘自 K-Style的技术宅
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇菜鸟修炼C语言小设计之――工资统.. 下一篇sqrt函数分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: