博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
菜鸟修炼C语言小设计之——通讯录(二)
阅读量:6072 次
发布时间:2019-06-20

本文共 3233 字,大约阅读时间需要 10 分钟。

通讯录在通讯录(一)的基础上作了一些完善,添加了保存联系人的功能。

主要涉及的C语言重要知识点有:

文件流的操作

代码:

main.c

#include 
#include "record.h"int menu_select(void);void hand_menu(int cmd, int *flag);int main(int argc, char *argv[]){ int cmd = 0; int flag = 1; while(1){ cmd = menu_select(); if(cmd == '0') return 0; hand_menu(cmd, &flag); }}int menu_select(void){ int select; printf(" <------通信薄-------->\n"); printf("1:添加联系人 2:删除联系人\n"); printf("3:显示所有联系人 4:保存\n"); printf("0:退出\n"); printf("请输入:\n"); select = getch(); while(select < '0'|| select>'4') { printf("输入错误,请重新输入:\n"); select = getch(); } return select;}void hand_menu(int cmd, int *flag){ static ADDR *list_head = NULL; if(1 == *flag){ list_head = init_person(list_head); *flag = 0; } switch(cmd){ case '1': list_head = add_person(list_head); break; case '2': list_head = del_person(list_head); break; case '3': dis_person(list_head); break; case '4': save_person(list_head); break; default: break; }}

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
opre.c

#include 
#include "record.h"#define FILE_NAME "phonebook.dat"ADDR* add_person(ADDR *list_head){ ADDR *head = list_head; ADDR *node = list_head; ADDR *new_p; ASK(new_p); new_p->next = NULL; printf("请输入姓名:"); scanf("%s", new_p->data.name); printf("请输入电话号码:"); scanf("%s", new_p->data.tel); if(!node){ head = new_p; return head; } while(node->next) node=node->next; node->next = new_p; return head;}ADDR *del_person(ADDR *list_head){ ADDR *node = list_head; ADDR *head = list_head; char name[8]; ADDR *pre = node; printf("请输入要删除的名字:"); scanf("%s", name); if(!strcmp(head->data.name, name)){ pre = head; head = head->next; free(pre); return head; } while(node){ if(!strcmp(node->data.name, name)){ pre->next = node->next; free(node); printf("成功删除!\n"); return; } pre = node; node = node->next; } printf("没有找到该名字!\n"); return head;}void dis_person(ADDR *list_head){ ADDR *node = list_head; if(!node) return; printf("姓名 号码\n"); while(node){ printf("%s %s\n", node->data.name, node->data.tel); node = node->next; } }void save_person(ADDR *list_head){ FILE *pf; ADDR *node = list_head; pf = fopen(FILE_NAME, "w+"); while(node){ fprintf(pf, "%s %s\n", node->data.name, node->data.tel); node = node->next; } fclose(pf); printf("保存成功!\n");}ADDR *init_person(ADDR *list_head){ ADDR *node = list_head; ADDR *head = list_head; ADDR *new_node; FILE *pf; char name[8]; char tel[20]; ASK(new_node); pf = fopen(FILE_NAME, "r"); if(!fscanf(pf, "%s%s", new_node->data.name, new_node->data.tel)){ free(new_node); return head; } rewind(pf); while(fscanf(pf, "%s%s", name, tel) == 2){ ASK(new_node); new_node->next = NULL; strcpy(new_node->data.name, name); strcpy(new_node->data.tel, tel); if(!head) node = head = new_node; else{ while(node->next) node = node->next; node->next = new_node; } } return head;}
 
 
 

转载于:https://www.cnblogs.com/key000/archive/2011/11/05/4084761.html

你可能感兴趣的文章
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Linux 安装oracle内核参数
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
android实用测试方法之Monkey与MonkeyRunner
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
枸杞子也能控制脂肪肝
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
检验函数运行时间
查看>>
【BZOJ2019】nim
查看>>
Oracle临时表空间满了的解决办法
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>