要用c语言设计一个个人通讯录,要求有步骤的截图,急急急,求大神帮帮忙啊

如题所述

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define M 3

FILE *fp;
char fn[50] = {""};

typedef struct message {
char name[20];
char address[50];
char telephone[15];
int postcode;
struct message *next;
} *LinkList,*NODE;

void ReadData(NODE p) {
printf("姓名 : ");
scanf("%s",p->name);
printf("地址 : ");
scanf("%s",p->address);
printf("电话号码 : ");
scanf("%s",p->telephone);
printf("邮政编码 : ");
scanf("%d",&p->postcode);
}

void ShowLine(int n) {
int i;
for(i = 0; i < n; ++i)
printf("*");
printf("\n");
}

void ShowData(NODE p) {
printf("%s ",p->name);
printf("%s ",p->address);
printf("%s ",p->telephone);
printf("%d\n",p->postcode);
}

void ShowAll(LinkList head) {
NODE p;
if(head == NULL) return;
ShowLine(25);
for(p = head->next; p; p = p->next)
ShowData(p);
ShowLine(25);
}

LinkList CreateList(int n) {
NODE head,p;
int i;
head = p = (LinkList)malloc(sizeof(message));
for(i = 0; i < n; ++i) {
p->next = (LinkList)malloc(sizeof(message));
printf("(%d/%d)的信息 : \n",i + 1,n);
ReadData(p->next);
p = p->next;
}
p->next = NULL;
return head;
}

void Addmember(LinkList head) { // 头插法添加,可用于创建新链表
NODE p = (LinkList)malloc(sizeof(message));
ReadData(p);
if(head == NULL) {
head->next = p;
p->next = NULL;
}
else {
p->next = head->next;
head->next = p;
}
}

NODE Search(LinkList head,char name[]) {
NODE p;
if(head == NULL) return NULL;
for(p = head->next; p; p = p->next) {
if(strcmp(p->name,name) == 0)
ShowData(p);
return p;
}
return NULL;
}

void ModifyList(LinkList head) {
NODE p;
char name[20];
printf("被修改人的姓名 : ");
scanf("%s",name);
p = Search(head,name);
if(p == NULL) printf("查无此人。\n");
else {
ShowData(p);
ReadData(p);
}
}

int Erase(LinkList head,char name[]) { // 删除姓名为name的结点
int an;
NODE p,q;
if(head == NULL) return 0;
for(p = head; p->next; p = p->next) {
if(strcmp(p->next->name,name) == 0) {
ShowData(p);
printf("1.删除, 0.不删除 : ");
scanf("%d",&an);
if(an == 1) {
q = p->next;
p->next = q->next;
free(q);
return 1;
}
else return 0;
}
}
return 0;
}

void LoadData(LinkList head) { // 传送文件的内容到内存
NODE p,tmp;
int an;
if(fn[0] == '\0') {
printf("文件名 : ");
scanf("%s",fn);
}
else {
printf("加载文件%s? 1.是,0不是 :",fn);
scanf("%d",&an);
if(an == 1) {
fp = fopen(fn,"rb");
if(fp == NULL) {
printf("打开文件%s失败。\n",fn);
return;
}
}
else {
printf("文件名 : ");
scanf("%s",fn);
fp = fopen(fn,"rb");
if(fp == NULL) {
printf("打开文件%s失败。\n",fn);
return;
}
}
}
if(head == NULL) {
head = p = (NODE)malloc(sizeof(message));
tmp = (NODE)malloc(sizeof(message));
while(fread(tmp,sizeof(message),1,fp) == 1) {
p = (NODE)malloc(sizeof(message));
*p->next = *tmp;
p = p->next;
}
fclose(fp);
p->next = NULL;
free(tmp);
return;
}
printf("1.追加 0.覆盖 : ");
scanf("%d",&an);
if(an == 1) {
for(p = head->next; p->next; p = p->next);
tmp = (NODE)malloc(sizeof(message));
while(fread(tmp,sizeof(message),1,fp) == 1) {
p->next = (NODE)malloc(sizeof(message));
*p->next = *tmp;
p = p->next;
}
fclose(fp);
p->next = NULL;
free(tmp);
return;
}
if(an == 0) {
p = head;
tmp = (NODE)malloc(sizeof(message));
while(p->next) {
if(fread(tmp,sizeof(message),1,fp) == 1) {
*p->next = *tmp;
p = p->next;
}
else break;
}
if(p->next == NULL) {
while(fread(tmp,sizeof(message),1,fp) == 1) {
p->next = (NODE)malloc(sizeof(message));
*p->next = *tmp;
p = p->next;
}
fclose(fp);
p->next = NULL;
free(tmp);
return;
}
free(tmp);
tmp = p->next;
p->next = NULL;
while(tmp->next) {
p = tmp->next;
tmp->next = p->next;
free(p);
}
}
}

void SaveData(LinkList head) { // 保存内存到文件
int an;
char mode[5];
NODE p;
if(fn[0] == 0) {
printf("请输入文件名 : ");
scanf("%s",fn);
fp = fopen(fn,"wb");
if(fp == NULL) {
printf("打开文件%s失败。\n",fn);
return;
}
for(p = head->next; p; p = p->next)
fwrite(p,sizeof(message),1,fp);
fclose(fp);
return;
}
else {
printf("1.覆盖文件%s\n2.追加文件%s\n3.新建\n4.无操作返回\n");
printf("请选择 : ");
scanf("%d",&an);
if(an < 1 || an > 3) return;
if(an == 3) {
printf("请输入文件名 : ");
scanf("%s",fn);
fp = fopen(fn,"wb");
if(fp == NULL) {
printf("打开文件%s失败。\n",fn);
return;
}
for(p = head->next; p; p = p->next)
fwrite(p,sizeof(message),1,fp);
fclose(fp);
return;
}
else {
if(an == 1) strcpy(mode,"wb");
else if(an == 2) strcpy(mode,"ab");
fp = fopen(fn,"wb");
if(fp == NULL) {
printf("打开文件%s失败。\n",fn);
return;
}
for(p = head->next; p; p = p->next)
fwrite(p,sizeof(message),1,fp);
fclose(fp);
return;
}
}
}

void Sort(LinkList head) { // 按姓名增排序
NODE p,q,pt;
if(head == NULL) return;
p = head;
while(p->next) {
q = p->next->next;
while(q->next) {
if(strcmp(p->next->name,q->next->name) > 0) {
pt = p->next;
p->next = q->next;
q->next = q->next->next;
p->next->next = pt;
}
else q = q->next;
}
p = p->next;
}
}

void FreeList(LinkList head) {
NODE p = head,q;
while(p) {
q = p;
p = p->next;
free(q);
}
}

void menu(LinkList head) {
int choice,n;
do {
printf("┌─────────────────────────────────┐\n");
printf("│                                                                  │\n");
printf("│                      欢迎使用通讯录管理软件                      │\n");
printf("│                                                                  │\n");
printf("│                           编写  xoalyg                           │\n");
printf("│                                                                  │\n");
printf("└─────────────────────────────────┙\n");
printf("\n\n\n\n");
printf("\t1、新建\n");
printf("\t2、浏览\n");
printf("\t3、修改\n");
printf("\t4、插入\n");
printf("\t5、排序\n");
printf("\t6、加载\n");
printf("\t7、保存\n");
printf("\t0、退出\n");
printf("\n\t请选择 : ");
scanf("%d",&choice);
switch(choice) {
case 1 : printf("\t人数 : ");
scanf("%d",&n);
head = CreateList(n);
break;
case 2 : ShowAll(head); break;
case 3 : ModifyList(head); break;
case 4 : Addmember(head); break;
case 5 : Sort(head); break;
case 6 : LoadData(head); break;
case 7 : SaveData(head); break;
case 0 : break;
}
}while(choice != 0);
}

int main() {
NODE head = NULL;
menu(head);
FreeList(head);
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-30
个人通讯录怎么意思 我帮你吧

C语言设计个人通讯录管理系统
1、创建学生社团管理系统的欢迎界面,该欢迎界面以图片的方式呈现,系统启动时再屏幕中居中显示。2、再创建用户登录窗口,用户通过文本框输入用户名和密码,单击“登录”按钮后,在窗体中显示登录是否成功;单击“重置”按钮后,清空文本框信息。3、创建“社团成员信息管理”窗体,用户可以对成员信息进行浏览...

求大神用c语言帮忙编个手机通讯录管理!!
include<string.h> \/\/字符串处理 define BUFLEN 80 \/\/缓存区字符不超过80 define LEN 20 \/\/返回去字符不超过20 define N 200 struct record { char code[LEN+1];char name[LEN+1];int age;char sex[3];char time[LEN+1];char add[30];char tel[LEN+1];char mail[30];}st...

用C语言做通讯录
strcpy(t[j-1].units,t[j].units); \/*将后一条记录的单位拷贝到前一条*\/ strcpy(t[j-1].tele,t[j].tele); \/*将后一条记录的电话拷贝到前一条*\/ } n--; \/*记录数减1*\/ } } return n; \/*返回记录数*\/}\/*插入记录函数,参数为结构体数组和记录数*\/int add(ADDRESS t[],int n)\/*插...

设计一个学生通讯录程序(主要是结构体类型),学生信息(如:姓名、家庭地 ...
{printf("\\n\\n\\n\\t\\t\\t 通讯录管理系统\\n\\n");printf("\\t\\t\\t 版本号:1.0\\n\\n");printf("\\n\\n\\n\\n\\n\\t\\t\\t 2011年4月29日\\n\\n");printf("\\t\\t\\t 程序设计第三组\\n");system("pause");} int menu_select(){ char c;logon();do{ system("cls...

请C语言高手帮忙做一下c程序设计题目
题目通讯录1.设计要求:通讯录至少应该有以下数据项:姓名,地址,手机,邮编,E-mail。对通讯录应该包含有以下操作:向通讯录中添加信息,在通讯录中按姓名或手机号查找个人信息,删... 题目 通讯录1. 设计要求:通讯录至少应该有以下数据项:姓名,地址,手机,邮编,E-mail。对通讯录应该包含有以下操作:向通讯录中添加...

c语言程序大神帮忙设计一下?
1、实现文件写入功能,一次写入一个职工信息。2、实现查询功能(包含4种条件查询)。3、实现信息删除和修改并写入文件。根据题意,数据用结构数组存储,且职工编号唯一性,因此单独两个函数计算信息长度和编号。除条件查询函数和读取文件的函数,不会自行free释放内存。如你写代码调用,注意自行写free语句释放...

求C语言大神帮忙编写一个程序,按要求写出来。
void rotate( int (*arrA)[MAX], int (*arrB)[MAX], int m, int n);int main(void){ int arrA[MAX][MAX], arrB[MAX][MAX], i, j, m, n;printf("请输入 m n: ");scanf("%d %d", &m, &n);printf("请输入 %d 行 %d 列矩阵:\\n", m, n);for (i=0; i<m; i...

求大神帮忙用C语言解决一下,不胜感激,单片机
前几天刚做了这个作业,看来题主和我用的是同一个教材(张毅刚-单片机原理与应用设计)程序运行效果(动态图不知道能显示吗):第5章习题 程序:include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code dis_code[] ={ 0xF9, \/\/"1" 0xB0...

大神来帮忙用c语言编个程序啊!
enum data {d1 = 1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12} b = month;switch(b){ case d1:sum = 0;break;case d2:sum = 31;break;case d3:sum = 59;break;case d4:sum = 90;break;case d5:sum = 120;break;case d6:sum = 151;break;case d...

求-c语言程序设计作业。请大家帮帮忙-_-~
}ml[3];\/*使用了3个,可根据需要增删*\/ typedef struct BookList\/*书的结构体*\/ { char num[20];\/*图书编号*\/ char name[20];\/*书名*\/ int price;\/*书的价格*\/ char person[20];\/*借阅人*\/ int yes;\/*判断书是否存在或者已经借出,1存在,0借出*\/ struct BookList *next;}Book;ty...

相似回答