C语言简单通讯录

合集下载

C语言实现手机通讯录的简单功能

C语言实现手机通讯录的简单功能

C语言实现手机通讯录的简单功能/*功能:实现手机通讯录的简单功能 */#include#include/*手机通讯录结构定义*/struct friends_list{char name[10]; /* 姓名 */int age; /* 年龄 */char telephone[13]; /* 联系电话 */};int Count = 0; /* 定义全局变量Count,记录当前联系人总数 */ void new_friend(struct friends_list friends[ ] );void search_friend(struct friends_list friends[ ], char *name);int main(void){int choice;char name[10];struct friends_list friends[50]; /* 包含50个人的通讯录 */do{printf("手机通讯录功能选项:1:新建 2:查询 0:退出\n");printf("请选择功能:");scanf("%d", &choice);switch(choice){case 1:new_friend(friends);break;case 2:printf("请输入要查找的联系人名:");scanf("%s", name);search_friend(friends, name);break;case 0: break;}}while(choice != 0);printf("谢谢使用通讯录功能!\n");return 0;}/*新建联系人*/void new_friend(struct friends_list friends[ ]){struct friends_list f;if(Count == 50){printf("通讯录已满!\n");return;}printf("请输入新联系人的姓名:");scanf("%s", /doc/122170412.html,); printf("请输入新联系人的年龄:");scanf("%d", &f.age);printf("请输入新联系人的联系电话:");scanf("%s", f.telephone);friends[Count] = f;Count++;}/*查询联系人*/void search_friend(struct friends_list friends[ ], char *name) {int i, flag = 0;if(Count == 0){printf("通讯录是空的!\n");return;}for(i = 0; i < Count; i++)if(strcmp(friends[i].name,name) == 0){ /* 找到联系人*/ flag=1;break;}if(flag){printf("姓名: %s\t", friends[i].name);printf("年龄: %d\t", friends[i].age);printf("电话: %s\n", friends[i].telephone);}elseprintf("无此联系人!");}/* 功能:按成绩从高到低输出学生信息 */#includestruct student{int num;char name[20];int score;};struct student stud[10]; /* 定义记录10个学生信息的结构数组*/int main(void){int i, j, index, sum = 0;struct student temp; /* 工作变量 *//* 输入10个学生的记录,并累加成绩 */printf("\nInput the student's number, name and score: \n");for(i = 0; i < 10; i++){printf("No %d: ", i+1); /* 提示输入第i个同学的信息 */scanf("%d%s%d", &stud[i].num, stud[i].name, &stud[i].score);sum = sum + stud[i].score;}/* 按照分数从低到高排序,使用选择排序法 */for(i = 0; i < 9; ++i ){ /* 外部循环 */index =i;for (j = i+1; j <10; j++ ) /* 内部循环 */if (stud[j].score < stud[index].score) /* 比较成绩的大小 */index = j;temp = stud[index]; /* 交换数组元素 */stud[index] = stud[i];stud[i] = temp;}/* 输出成绩 */printf("The average: %d\n", sum/10 );/* 输出平均分 */printf("The student score:\n");for (i = 9; i >= 0; i-- )printf("%d %s %d\n", stud[i].num, stud[i].name, stud[i].score);return 0;}。

C语言通讯录

C语言通讯录

C语言通讯录#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <windows.h>#define N 50struct Telephone{char name[20];char addrass[20];char mail[20];char telephone[20];struct Telephone *next;}student[N];struct Node{char name[20];char addrass[20];char mail[20];char telephone[20];}Node[N];typedef struct Telephone TEL;TEL *head = NULL;void Showmenu(); /*菜单*/void menu2(); /*菜单2*/void menu3(); /*菜单3*/void Add(); /*添加条目*/void Print(); /*输出条目*/void Findname(); /*查找条目(按姓名)*/ void Findtelephone(); /*查找条目(按电话)*/ void Alter(); /*修改条目*/void Del(); /*删除信息(按姓名)*/ void Del1(); /*删除信息(按手机号)*/ void sort(); /*按姓名排序*/void Saveandfree(); /*保存到文件*/void Open(); /*打开文件*/main(){char ch;Open(); /*打开文件*/while(1){Showmenu(); /*显示菜单*/scanf(" %c",&ch);switch(ch){case '1': Add(); /*添加条目*/system("cls");break;case '2': Print(); /*输出条目*/break;case '3':system("cls"); /*查找条目1.按姓名*/menu2();break;case '4': /*输出删除后的结果*/system("cls");menu3();break;case '5': Alter(); /*修改信息*/system("cls");break;case '6': /*sort();*/system("cls");break;case '0': Saveandfree(); /*保存并释放内存*/exit(0); /*退出*/break;default:printf("选择错误!");break;}}}/*菜单*/void Showmenu(){system("color 2b");printf("\n\n\n\n\t***************************通讯录*************************\n");printf("\t- \t1.输入信息-\n");printf("\t- \t2.输出信息-\n");printf("\t- \t3.查找信息-\n");printf("\t- \t4.删除信息-\n");printf("\t- \t5.修改信息-\n");printf("\t- \t6.排序-\n");printf("\t- \t0.保存并退出! -\n");printf("\t**********************************************************\n");printf(" \t请选择:\n");}/*菜单2*/void menu2(){int c1;system("color 3d");printf("\n***************************通讯录*************************\n");printf("- \t1.按姓名查找-\n");printf("- \t2.按手机号查找-\n");printf("**********************************************************\n");printf(" \t请选择:\n");scanf("%d", &c1);switch(c1){case 1: Findname();getch();system("cls");break;case 2: Findtelephone();getch();system("cls");break;default:printf("选择错误!");}}/*菜单3*/void menu3(){int c2;system("color 1b");printf("\n***************************通讯录*************************\n");printf("- \t1.按姓姓名删除-\n");printf("- \t2.按手机号删除-\n");printf("**********************************************************\n");printf(" \t请选择:\n");scanf("%d", &c2);switch(c2){case 1: Del();getch();system("cls");break;case 2: Del1();getch();system("cls");break;default:printf("选择错误!\n");}}/*添加条目*/void Add(){TEL * p1 = NULL,* p2 = NULL;p1 = (TEL *) malloc(sizeof(TEL)); /*申请结点*/printf("请输入姓名:\n"); /*添加信息*/scanf("%s", p1->name);printf("请输入地址:\n");scanf("%s", p1->addrass);printf("请输入邮箱:\n");scanf("%s", p1->mail);printf("请输入手机:\n");scanf("%s", p1->telephone);p1 -> next = NULL; /*保存到链表*/ if (head == NULL){head = (TEL *) malloc(sizeof(TEL)); /*申请空间*/head -> next = p1;}else{for (p2 = head; p2 -> next != NULL; p2 = p2 -> next); /*找到结点尾*/p2->next=p1;}printf("信息已被成功添加!");}/*输出学生信息*/void Print(){TEL *p = NULL;if (head == NULL){printf("此通讯录内无记录,请添加后使用此功能!\n");return;}printf("*************************用户信息************************\n"); /*输出信息*/for (p = head -> next; p != NULL; p=p -> next){printf("姓名:\t%s\n",p->name);printf("地址:\t%s\n",p->addrass);printf("邮箱:\t%s\n",p->mail);printf("手机:\t%s\n",p->telephone);}printf("********************************************************\n");getch();system("cls");}/*查找信息1.按姓名*/void Findname(){TEL *p;int flag;char findname[20];printf("请输入您想查找的姓名:\n");scanf("%s", findname);printf("**************************通讯录***************************\n");flag = 0;for (p = head -> next;p != NULL;p = p -> next){if(strcmp(p -> name, findname) == 0){flag ++;printf("姓名:\t%s\n", p -> name);printf("地址:\t%s\n", p -> addrass);printf("邮箱:\t%s\n", p -> mail);printf("电话:\t%s\n", p -> telephone);}}if (flag == 0){printf("无此记录!");}}/*查找信息2、按电话*/void Findtelephone(){TEL *p;int flag;char findname[20];printf("请输入您想查找的电话:\n");scanf("%s", findname);printf("**************************查找结果***************************\n");flag = 0;for (p = head -> next;p != NULL;p = p -> next){if(strcmp(p -> telephone, findname) == 0){flag ++;printf("姓名:\t%s\n", p -> name);printf("地址:\t%s\n", p -> addrass);printf("邮箱:\t%s\n", p -> mail);printf("电话:\t%s\n", p -> telephone);}}if (flag == 0){printf("无此记录!!");}}/*修改信息*/void Alter(){TEL *p1(TEL *head);{struct Telephone *p1;char flag = 0;char name[20];printf("请输入您想修改的姓名:\n");scanf("%s", name);p1 = head;while (p1 != NULL){if(strcmp(p1 -> name,name) == 0){printf("请输入新的姓名:\n"); /*添加新信息*/scanf("%s", p1 -> name);printf("请输入新的地址:\n");scanf("%s", p1 -> addrass);printf("请输入新的邮箱地址:\n");scanf("%s", p1 -> mail);printf("请输入新的手机号:\n");scanf("%s", p1 -> telephone);flag = 1;}p1 = p1 -> next;}}printf("修改成功!");}/*删除信息*/void Del(){char findname[20]; /*先查找后删除*/ TEL *p = head, *pr = head;printf("请输入您要删除人的姓名:\n");scanf(" %s", findname);if (head == NULL){printf("No node!\n");return;}while ((strcmp(p -> name, findname) != 0) && p -> next != NULL){pr = p;p = p -> next;}if(strcmp(p -> name, findname) == 0){if(p == head)head = p -> next; /*删除头结点*/elsepr -> next = p -> next; /*删除中间或尾结点*/free(p);}elseprintf("没有您想要删除的信息\n");printf("删除成功!");Print();}/*按手机号删除*/void Del1(){char findname[20]; /*先查找后删除*/ TEL *p = head, *pr = head;printf("请输入您要删除人的电话:\n");scanf(" %s", findname);if (head == NULL){printf("No node!\n");return;}while ((strcmp(p -> telephone, findname) != 0) && p -> next != NULL){pr = p;p = p -> next;}if(strcmp(p -> telephone, findname) == 0){if(p == head)head = p -> next; /*删除头结点*/elsepr -> next = p -> next; /*删除中间或尾结点*/free(p);}elseprintf("没有您想要删除的信息\n");printf("删除成功!");Print();}/*保存链表信息到文件并释放内存空间*/void Saveandfree(){TEL *p = NULL;FILE *fp;char *Book = "people.txt";if(head == NULL){printf("\n无记录\n");return;}elsep = head -> next;if((fp = fopen(Book,"w+")) == NULL){printf("\n无法打开文件!\n");return;}while(p != NULL) /*保存信息*/{fprintf(fp, "%s %s %s %s ", p -> name,p -> addrass, p -> mail, p -> telephone);p = p -> next;}printf("保存成功!");fclose(fp);/*释放链表空间*/for(; head -> next != NULL; ){p = head -> next;head -> next = head -> next -> next;free(p);}free(head);}/*文件信息输出到链表*/void Open(){FILE *fp;TEL *p1 = NULL, *p2 = NULL, *temp = NULL;if((fp = fopen("people.txt", "r+")) == NULL){printf("\n*************************通讯录************************\n");return;}head = (TEL *) malloc(sizeof(TEL));head -> next = NULL;temp = p2 = head;while(! feof(fp)) /*循环读取*/{p1 = (TEL *) malloc(sizeof(TEL));temp = p2;p2 -> next = p1;p2 = p1;fscanf(fp, "%s%s%s%s", p1 -> name, p1 -> addrass, p1 -> mail, p1 -> telephone);}temp -> next = NULL;fclose(fp); /*关闭文件*/}/*按姓名排序*//*void sort(){TEL *p1, *p2, *temp;temp = (TEL *)malloc(sizeof(TEL));p1 = head;for (;p1 -> next != NULL; p1 = p1 -> next){p2 = p1 -> next;for (;p2 -> next != NULL; p2 = p2 -> next){if (strcmp(p1 -> name, p2 -> name) > 0){strcpy(p1 -> name, temp -> name);strcpy(p1 -> addrass, temp -> addrass);strcpy(p1 -> mail, temp -> mail);strcpy(p1 -> telephone, temp -> telephone);strcpy(p2 -> name, p1 -> name);strcpy(p2 -> addrass, p1 -> addrass);strcpy(p2 -> mail, p1 -> mail);strcpy(p2 -> telephone, p1 -> telephone);strcpy(temp -> name, p2 -> name);strcpy(temp -> addrass, p2 -> addrass);strcpy(temp -> mail, p2 -> mail);strcpy(temp -> telephone, p2 -> telephone);}if (p2 -> next == NULL && (strcmp(p1 -> name, p2 -> name) > 0)){strcpy(p1 -> name, temp -> name);strcpy(p1 -> addrass, temp -> addrass);strcpy(p1 -> mail, temp -> mail);strcpy(p1 -> telephone, temp -> telephone);strcpy(p2 -> name, p1 -> name);strcpy(p2 -> addrass, p1 -> addrass);strcpy(p2 -> mail, p1 -> mail);strcpy(p2 -> telephone, p1 -> telephone);strcpy(temp -> name, p2 -> name);strcpy(temp -> addrass, p2 -> addrass);strcpy(temp -> mail, p2 -> mail);strcpy(temp -> telephone, p2 -> telephone);}}}printf("\n*************************排序后************************\n");Print();getch();}*/排序未实现。

C语言使用结构体实现简单通讯录

C语言使用结构体实现简单通讯录

C语⾔使⽤结构体实现简单通讯录C语⾔⽤结构体实现⼀个通讯录,通讯录可以⽤来存储1000个⼈的信息,每个⼈的信息包括:姓名、性别、年龄、电话、住址提供⽅法:1. 添加联系⼈信息2. 删除指定联系⼈信息3. 查找指定联系⼈信息4. 修改指定联系⼈信息5. 显⽰所有联系⼈信息6. 清空所有联系⼈代码实现:头⽂件:#ifndef __HEAD_H__ ////防⽌头⽂件被多次调⽤#define __HEAD_H__#include<stdio.h>#include<string.h>#include<stdlib.h>#define PEOPLE_MAX 1000#define NAME_LENTH 20#define SEX_LENTH 5#define AGE_LENTH 10#define TEL_LENTH 15#define ADDR_LENTH 50 //宏定义各个数据所需的⼤⼩,后续引⽤直接可以使⽤名称,或需修改时只⽤修改这⾥就可以了struct People{char name[NAME_LENTH];char sex[SEX_LENTH];int age;char tel[TEL_LENTH ];char addr[ADDR_LENTH];}; //定义⼈的信息结构体(包含各种信息)struct Contact{struct People person[PEOPLE_MAX];int user_count;}; //定义通讯录结构体(包含⼈的信息的结构体和⽤户个数)typedef struct Contact * pContact;int add_contact(pContact pcon); //pContact是⼀个结构体指针类型,pcon是⼀个指向struct Contact的⼀个指针int dele_contact(pContact pcon); //例如:typedef int * int 即 int *p ==> int pint find_contact(pContact pcon);int modify_contact(pContact pcon);int show_contact(pContact pcon);int clear_contact(pContact pcon);void menu(); //函数的声明#endif各种函数实现:#include"head.h"int add_contact(pContact pcon){if(pcon->user_count >= PEOPLE_MAX){printf("contact is full!\n");return -1;}else{printf("input name,please!\n");scanf("%s",pcon->person[pcon->user_count].name);printf("input sex,please!\n");scanf("%s",pcon->person[pcon->user_count].sex);printf("input age,please!\n");scanf("%d",&pcon->person[pcon->user_count].age); //这⾥⽤%d输出intprintf("input tel,please!\n");scanf("%s",pcon->person[pcon->user_count].tel);printf("input addr,please!\n");scanf("%s",pcon->person[pcon->user_count].addr);(pcon->user_count)++;}return 0;} //添加信息的实现int dele_contact(pContact pcon){int ret = find_contact(pcon); //调⽤查找函数并保存其值if(ret != -1){int i = 0;i = ret; //这⾥要⽤另⼀个变量来保存输⼊的姓名for(i = 0;i < pcon->user_count-1;i++){pcon->person[i] = pcon->person[i+1]; //⽤后⼀个覆盖前边的,如果要删除的是最后⼀个不进⾏此步骤}pcon->user_count --; //直接减去最后⼀个即count--}return 0;}int find_contact(pContact pcon){int i = 0;char ret[NAME_LENTH]; //⽤另⼀个数组来保存nameprintf("input name,please!\n");scanf("%s",ret);while(i <= pcon->user_count){if(strcmp(ret,pcon->person[i].name)== 0) //⽐较输⼊的姓名和通讯录中已有的姓名{printf("name\tsex\tage\ttel\taddr\t\n");printf("%s\t",pcon->person[i].name);printf("%s\t",pcon->person[i].sex);printf("%d\t",pcon->person[i].age);printf("%s\t",pcon->person[i].tel);printf("%s\t\n",pcon->person[i].addr);return i;}i++;}printf("sorry,the name you find is not exist!\n");return -1;}int modify_contact(pContact pcon) //修改函数,⾸先找到如要修改的姓名,然后重新输⼊{int ret = find_contact(pcon);if(ret != -1){printf("input name,please!\n");scanf("%s",pcon->person[ret].name);printf("input sex,please!\n");scanf("%s",pcon->person[ret].sex);printf("input age,please!\n");scanf("%d",&(pcon->person[ret].age));printf("input tel,please!\n");scanf("%s",pcon->person[ret].tel);printf("input addr,please!\n");scanf("%s",pcon->person[ret].addr);}else{printf("sorry,the name you find is not exist!\n");}return 0;}int show_contact(pContact pcon){int i = 0;printf("name\tsex\tage\ttel\t\taddr\t\n"); //制表符来制作表头for(i = 0;i < pcon->user_count;i++){printf("%s\t",pcon->person[i].name);printf("%s\t",pcon->person[i].sex);printf("%d\t",pcon->person[i].age);printf("%s\t",pcon->person[i].tel);printf("%s\t\n",pcon->person[i].addr);}printf("\n");return 0;}int clear_contact(pContact pcon){pcon->user_count = 0 ;return 0;} //清除所有⼈,直接让成员个数变为0即可void menu(){printf("-------contact---------\n");printf(" 1.添加联系⼈信息 \n");printf(" 2.删除指定联系⼈信息 \n");printf(" 3.查找指定联系⼈信息 \n");printf(" 4.修改指定联系⼈信息 \n");printf(" 5.显⽰所有联系⼈信息 \n");printf(" 6.清空所有联系⼈ \n");printf(" 0.谢谢使⽤ \n");printf("-------contact---------\n");}主函数:#include"head.h"int main(){int n=1;struct Contact people; //调⽤通讯录结构体er_count = 0; //初始化user_countwhile(n){menu();printf("please input\n");scanf("%d",&n);switch(n){case 1:{add_contact(&people);break;}case 2:{dele_contact(&people);break;}case 3:{find_contact(&people);break;}case 4:{modify_contact(&people);break;}case 5:{show_contact(&people);break;}case 6:{clear_contact(&people);break;}default:{return 0;break;} //switch case语句分⽀选择不同函数实现不同作⽤ }}return 0;}结果实现:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

C语言实现简单通讯录功能

C语言实现简单通讯录功能

C语⾔实现简单通讯录功能本⽂实例为⼤家分享了C语⾔实现简单通讯录功能的具体代码,供⼤家参考,具体内容如下1.存放联系⼈信息2.信息:名字+年龄+性别+电话+住址3.增加联系⼈4.删除联系⼈5.查找联系⼈6.修改联系⼈7.排序test.c源⽂件代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void menu(){printf("#####################################\n");printf("##### 1. add 2. del #####\n");printf("##### 3. search 4. modify #####\n");printf("##### 5. show 6. sort #####\n");printf("##### 0. exit #####\n");printf("#####################################\n");}//创建⼀个枚举类型,分别对应菜单选项enum Option{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT,};int main(){int input = 0;//创建⼀个通讯录struct Contact con;//初始化通讯录InitContact(&con);//最多可以放3个联系⼈信息//空间不够再增容do{menu();//进⼊循环,先打印菜单printf("请选择:>");scanf("%d", &input);//⽤户选择操作switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case SEARCH:SearchContact(&con);break;case MODIFY:ModifyContact(&con);break;case SHOW:ShowContact(&con);break;case SORT:SortContact(&con);break;case EXIT:SaveContact(&con);//销毁通讯录DestroyContact(&con);printf("退出\n");break;default:printf("选择错误\n");break;}} while (input);return 0;}contact.c源⽂件代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"//检测通讯录容量void CheckCapacity(struct Contact* pc){//断⾔assert(pc);if (pc->sz == pc->capacity)//如果有效联系⼈等于最⼤容纳量{//增加容量struct PeoInfo* ptr = realloc(pc->data, (pc->capacity + 2) * sizeof(struct PeoInfo)); if (ptr != NULL)//如果不为空,表⽰增容成功{pc->data = ptr;pc->capacity += 2;printf("增容成功\n");}else{perror("AddContact::realloc");return;}}}//加载有效联系⼈信息void LoadContact(struct Contact* pc){assert(pc);struct PeoInfo tmp = { 0 };//临时空间FILE* pfRead = fopen("contact.txt", "rb");//打开⽂件,读取数据if (NULL == pfRead){perror("open file for reading");return;}//加载数据//每次读取⼀个联系⼈信息,直到frea返回值⼩于1,表⽰读取完毕,循环结束while (fread(&tmp, sizeof(struct PeoInfo), 1, pfRead)){CheckCapacity(pc);pc->data[pc->sz] = tmp;pc->sz++;}//关闭⽂件fclose(pfRead);pfRead = NULL;//置空,防⽌变成野指针}//初始化通讯录void InitContact(struct Contact* pc){assert(pc);pc->sz = 0;pc->capacity = DEFAULT;pc->data = (struct PeoInfo*)malloc(DEFAULT * sizeof(struct PeoInfo));//动态申请空间 if (pc->data == NULL){perror("InitContact::malloc");return;}LoadContact(pc);//加载通讯录的信息}//增加联系⼈void AddContact(struct Contact* pc){assert(pc);CheckCapacity(pc);//检查容量是否为满,是则进⾏增容//输⼊增加指定联系⼈的信息printf("请输⼊名字:>");scanf("%s", pc->data[pc->sz].name);printf("请输⼊年龄:>");scanf("%d", &(pc->data[pc->sz].age));printf("请输⼊性别:>");scanf("%s", pc->data[pc->sz].sex);printf("请输⼊电话:>");scanf("%s", pc->data[pc->sz].tele);printf("请输⼊地址:>");scanf("%s", pc->data[pc->sz].addr);printf("添加成功\n");pc->sz++;//有效联系⼈加1}//销毁通讯录void DestroyContact(struct Contact* pc){assert(pc);free(pc->data);//释放申请的动态内存空间pc->data = NULL;//置为空指针pc->capacity = 0;//容量置0pc->sz = 0;//有效联系⼈置0}//显⽰通讯录信息void ShowContact(const struct Contact* pc){assert(pc);int i = 0;printf("%20s\t%5s\t%10s\t%12s\t%50s\n\n", "name", "age", "sex", "tele", "addr");for (i = 0; i < pc->sz; i++){//打印每⼀个数据printf("%20s\t%5d\t%10s\t%12s\t%50s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].tele,pc->data[i].addr);}}//查找指定联系⼈int FindContactByName(const struct Contact* pc, const char* name){assert(pc && name);int i = 0;for (i = 0; i < pc->sz; i++){if (strcmp(pc->data[i].name, name) == 0){return i;}}//找不到return -1;}//删除指定联系⼈void DelContact(struct Contact* pc){assert(pc);if (pc->sz == 0){printf("通讯录为空,⽆法删除\n");return;}char name[NAME_MAX] = { 0 };printf("请输⼊要删除联系⼈的名字:>");scanf("%s", name);//查找到删除的⼈int pos = FindContactByName(pc, name);if (pos == -1)printf("指定联系⼈不存在\n");else{//删除int i = 0;for (i = pos; i < pc->sz-1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("成功删除\n");}}//查找指定联系⼈void SearchContact(const struct Contact* pc){assert(pc);char name[NAME_MAX] = { 0 };if (pc->sz == 0){printf("通讯录为空,⽆法查找\n");return;}printf("请输⼊要查找的联系⼈名字:>");scanf("%s", name);int pos = FindContactByName(pc, name);if (-1 == pos)printf("查⽆此⼈\n");else{printf("%15s\t%5s\t%8s\t%15s\t%30s\n\n", "name", "age", "sex", "tele", "addr"); printf("%15s\t%5d\t%8s\t%15s\t%30s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tele,pc->data[pos].addr);}}//修改指定联系⼈void ModifyContact(struct Contact* pc){assert(pc);char name[NAME_MAX] = { 0 };if (pc->sz == 0){printf("通讯录为空,⽆法修改\n");return;}printf("请输⼊要修改的联系⼈名字:>");scanf("%s", name);int pos = FindContactByName(pc, name);printf("要修改的⼈不存在\n");else{printf("请输⼊新的名字:>");scanf("%s", pc->data[pos].name);printf("请输⼊新的年龄:>");scanf("%d", &(pc->data[pos].age));printf("请输⼊新的性别:>");scanf("%s", pc->data[pos].sex);printf("请输⼊新的电话:>");scanf("%s", pc->data[pos].tele);printf("请输⼊新的地址:>");scanf("%s", pc->data[pos].addr);}}//按照名字排序->升序int cmp_by_name(const void* e1, const void* e2){return strcmp((((struct PeoInfo*)e1)->name), (((struct PeoInfo*)e2)->name)); }//按照年龄排序->升序int cmp_by_age(const void* e1, const void* e2){return ((struct PeoInfo*)e1)->age - ((struct PeoInfo*)e2)->age;}//排序通讯录void SortContact(struct Contact* pc){assert(pc);int input = 0;if (pc->sz == 0){printf("通讯录为空,⽆法排序\n");return;}printf("按名字排序请输⼊1,年龄排序请输⼊2:>");scanf("%d", &input);if (1 == input){//名字排序qsort(pc->data, pc->sz, sizeof(struct PeoInfo), cmp_by_name);}else{//年龄排序qsort(pc->data, pc->sz, sizeof(struct PeoInfo), cmp_by_age);}}//保存通讯录void SaveContact(struct Contact* pc){assert(pc);int i = 0;FILE* pfWrite = fopen("contact.txt", "wb");把当前程序的有效联系⼈写⼊⽂件 if (NULL == pfWrite)//判断是否为空指针{perror("open file for writting");return;}//写数据for (i = 0; i < pc->sz; i++){fwrite(pc->data+i, sizeof(struct PeoInfo), 1, pfWrite);//进⾏写⼊}fclose(pfWrite);//关闭⽂件pfWrite = NULL;//置为空指针}contact.h头⽂件代码如下:#include <string.h>#include <stdio.h>#include <stdlib.h>#include <assert.h>#define DEFAULT 3#define NAME_MAX 20#define SEX_MAX 10#define TELE_MAX 12#define ADDR_MAX 50#define MAX 1000//描述联系⼈的信息struct PeoInfo{char name[NAME_MAX];int age;char sex[SEX_MAX];char tele[TELE_MAX];char addr[ADDR_MAX];};//通讯录-动态增长版本struct Contact{struct PeoInfo* data;int sz;//通讯录中当前有效元素个数int capacity;//通讯录的当前最⼤容量};//增容void CheckCapacity(struct Contact* pc);//初始化通讯录void InitContact(struct Contact* pc);//销毁通讯录void DestroyContact(struct Contact* pc);//增加联系⼈void AddContact(struct Contact* pc);//显⽰通讯录void ShowContact(const struct Contact* pc); //删除指定联系⼈void DelContact(struct Contact* pc);//查找指定联系⼈void SearchContact(const struct Contact* pc); //修改指定联系⼈void ModifyContact(struct Contact* pc);//排序通讯录void SortContact(struct Contact* pc);//保存通讯录到⽂件void SaveContact(struct Contact* pc);//加载通讯录void LoadContact(struct Contact* pc);程序运⾏:重新运⾏程序并显⽰之前添加的联系⼈会存放在指定⽂件中,再次运⾏程序会加载进去,增容成功是因为默认容纳的联系⼈有3位,要加载4位联系⼈,所以⾃动进⾏增容。

c语言编写的通讯录代码、

c语言编写的通讯录代码、

#include<stdio.h>#include<string.h>struct friends_list{char name[10];int age;char telephone[13];};int Count=0;void new_friend(struct friends_list friends[]);void search_friend(struct friends_list friends[],char*name);void Modify_friend(struct friends_list friends[],char*name);void Delete_friend(struct friends_list friends[],char*name,int n);int main(void){int choice,n;char name[10];struct friends_list friends[50];do{printf("手机通讯录功能选项: 1:新建2:查询3:修改4:删除0:退出\n"); printf("请选择功能:");scanf("%d",&choice);switch(choice){case 1:new_friend(friends);break;case 2:printf("请输入要查找的联系人姓名:");scanf("%s",name);search_friend(friends,name);break;case 3:printf("请输入您要修改的联系人的姓名:");scanf("%s",name);printf("\n");Modify_friend(friends,name);break;case 4:printf("1:单个删除2:全部删除\n\n");printf("请选择您需要的操作:\n");scanf("%d",&n);if(n==1){printf("输入名字\n");scanf("%s",name);Delete_friend(friends,name,n);break;}if(n==2){Delete_friend(friends,name,n);break;}case 0: break;}}while(choice!=0);printf("谢谢使用通讯录功能!\n");return 0;}void new_friend(struct friends_list friends[ ]){struct friends_list f;if(Count==50){printf("通讯录已满!\n");return;}printf("请输入新的联系人的姓名:");scanf("%s",);printf("请输入新联系人的年龄:");scanf("%d",&f.age);printf("请输入新联系人的联系电话:");scanf("%s",f.telephone);friends[Count] = f;Count++;}/*查询联系人*/void search_friend(struct friends_list friends[],char*name){int i,flag=0;if(Count==0){printf("通讯录是空的!\n");return;}/*在书本源代码的基础上,我修改了一下,让程序可以查询多个相同名字的联系人*/ for(i=0;i<Count;i++)if(strcmp(name,friends[i].name)==0){printf("姓名:%s\t",friends[i].name);printf("年龄:%d\t",friends[i].age);printf("电话:%s\n",friends[i].telephone);flag++;}if(flag==0)printf("无此联系人!\n");}/*修改联系人*/void Modify_friend(struct friends_list friends[],char*name){int k,y=0;int t,j=1,g=0;struct friends_list x;if(Count==0){printf("通讯录是空的!\n");return;}/*首先,判断要修改的联系人中有没有相同的名字*/for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0)y++;}/*如果,y等于1,说明只有一个需要修改的联系人*/if(y==1){for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){printf("请重新输入姓名\n");scanf("%s",);printf("请重新输入年龄\n");scanf("%d",&x.age);printf("请重新输入电话号码\n");scanf("%s",x.telephone);friends[k]=x;}}}/*如果,y大于1,说明你选择修改的人中,有多个相同名字的联系人*/ if(y>1){/*用序号来显示所有需要修改的联系人*/printf("此通讯录有%d个名字相同的联系人.\n",y);for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){printf("%d:姓名:%-10s",j,friends[k].name);printf("年龄:%-5d",friends[k].age);printf("电话:%13s\n",friends[k].telephone);j++;}}/*选择需要修改的联系人的序号*/printf("请选择所要修改的联系人序号:\n");scanf("%d",&t);for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){g++;if(g==t){/*如果g等于t,说明在序号中找到了需要修改的人*/ printf("请重新输入姓名\n");scanf("%s",);printf("请重新输入年龄\n");scanf("%d",&x.age);printf("请重新输入电话号码\n");scanf("%s",x.telephone);friends[k]=x;}}}}if(y==0)printf("无此联系人\n");}void Delete_friend(struct friends_list friends[],char*name,int n) {int l,h=0,y=0,i,k;int j=1;int a[50],t,g=0;if(Count==0){printf("通讯录是空的!\n");return;}/*如果,n等于1,说明用户选择单个删除*/if(n==1){/*首先,判断在修改的人当中有没有相同名字的*/for(i=0;i<Count;i++){if(strcmp(name,friends[i].name)==0)y++;}/*如果,y等于1,说明你需要修改的人当中只有一个*/if(y==1){for(l=0;l<Count;l++){if(strcmp(name,friends[l].name)==0){do{friends[l]=friends[l+1];l++;}while(l<Count);h++;Count--;printf("删除成功!\n");}}}/*如果,y>1 说明你要修改的人当中有多个相同的名字*/if(y>1){/*用序号来显示所有需要修改的联系人*/printf("有%d个相同的联系人:\n",y);for(l=0;l<Count;l++){if(strcmp(name,friends[l].name)==0){a[l]=l;printf("%d:姓名:%-10s",j,friends[l].name);printf("年龄:%-5d",friends[l].age);printf("电话:%13s\n",friends[l].telephone);j++;h++;}}/*选择需要修改的联系人序号*/printf("请选择所要删除的联系人序号:\n");scanf("%d",&t);for(k=0;k<Count;k++)if(strcmp(name,friends[k].name)==0){g++;if(g==t){/*如果g等于选择的序号t,就开始删除*/do{friends[k]=friends[k+1];k++;}while(k<Count);}if(g==t){/*这里又使用一个g等于t,表面上看是多余的.其实当在选择的序号超出现有的序号时,起到限制作用*/printf("删除成功!\n");Count--;}}}if(h==0)printf("没有此联系人\n");}/*如果n等于2,说明用户选择了全部删除*/if(n==2){Count=0;/*把Count赋0,也就是清空所有联系人*/printf("已全部删除!\n");} }。

C语言简单通讯录

C语言简单通讯录

C语言简单通讯录#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<windows.h>#define LEN sizeof(struct student)#define TITLE_T "╔═══════════════╗\n"#define NAME "║※姓名: 号码: ║\n"#define GESHI "║※%-15s %-11s ║\n"#define BOTTOM_B "╚═══════════════╝\n"#define NEIRONG stu[i].name,stu[i].numstruct student //定义通讯录结构体{char name[15]; //姓名char num[12]; //号码};struct student stu[50]; //定义结构体数组void in(); //添加联系人void show(); //显示联系人void order(); //按字符排序void del(); //删除联系人void modify(); //修改联系人void menu(); //主菜单void total(); //计算总人数void search(); //查找联系人void main() //主函数{system("title 某某某通讯录"); //设置cmd窗口标题system("mode con cols=85 lines=35");break;case 5:modify();break;case 6:total();break;default:printf("输入编码有误!正在返回...");Sleep(3000);break;}menu(); //执行完功能再次显示菜单界面scanf("%d",&n);}}void menu() //自定义函数实现菜单功能{system("cls");system("date /t");system("time /t");printf("\n\n\n\n\n");printf("\t\t╔══════════某某某通讯录══════════╗\n");printf("\t\t║※0. 退出║\n");printf("\t\t║※ 1. 添加║\n");printf("\t\t║※ 2. 查看║\n");printf("\t\t║※ 3. 查找║\n");printf("\t\t║※ 4. 删除║\n");printf("\t\t║※ 5. 修改║\n");printf("\t\t║※ 6. 联系人总数║\n");printf("\t\t╚══════════════════════════╝\n\n");printf("\t\t请选择(0-6):");}void in() //添加联系人{int i,m=0; //m是记录的条数char ch[2];FILE *fp; //定义文件指针if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;//统计当前记录条数}fclose(fp);if(m==0)printf("当前无记录!\n");else{system("cls");printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}if((fp=fopen("data","wb"))==NULL) //以只写二进制方式打开文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}for(i=0;i<m;i++)fwrite(&stu[i] ,LEN,1,fp); //如果原来有记录,就将记录写入到磁盘文件中printf("是否添加?(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要添加联系人{back: printf("请输入联系人姓名:");scanf("%s",&stu[m].name); //输入姓名for(i=0;i<m;i++)if(strcmp(stu[i].name,stu[m].name)==0){printf("您输入的联系人已存在!\n");goto back;}printf("请输入联系人号码:");scanf("%s",stu[m].num);if(fwrite(&stu[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件{printf("保存'%s'失败!是否继续?(y/n):",stu[m].name);scanf("%s",ch);continue;}else{printf("添加'%s'成功!\n",stu[m].name);m++;}printf("是否继续?(y/n):"); //询问是否继续scanf("%s",ch);}printf("正在返回...");fclose(fp);order();return;}void show() //显示联系人{FILE *fp;int i,m=0;if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;}fclose(fp);if(m>0){printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}elseprintf("当前无记录!");printf("按任意键返回...");getch();}void del() //删除联系人函数{FILE *fp;int i,j,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件,正在返回...\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:");scanf("%s",sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) break;if(i==m){printf("找不到'%s'!正在返回...",sname);return;}printf("已找到'%s',是否删除?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要进行删除{for(j=i;j<m;j++)stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置m--;//记录的总个数减1printf("删除'%s'成功!\n",sname);}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++)//将更改后的记录重新写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存失败!正在返回...\n");Sleep(3000);}fclose(fp);show();}void search() //自定义查找函数{FILE *fp;int i,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}back1: printf("请输入联系人姓名:");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //查找输入的号码是否在记录中{printf("已找到'%s',是否显示?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf(TITLE_T);printf(NAME);printf(GESHI,NEIRONG); //将查找出的结果按指定格式输出printf(BOTTOM_B);}else{printf("正在返回...");Sleep(3000);return;}}if(i==m+1){printf("找不到'%s',是否继续?(y/n):",sname); //未找到要查找的信息scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要继续查找联系人goto back1;printf("正在返回...");Sleep(3000);return;}printf("按任意键返回...\n");getch();}void modify(){ FILE *fp;int i,j,m=0;char sname[15];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:\n");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //检索记录中是否有要修改的信息break;if(i<m){printf("已找到'%s',请修改!\n",sname);printf("请输入联系人姓名:\n");scanf("%s",stu[i].name);//输入名字printf("请输入联系人号码:\n"); //输入号码scanf("%s",stu[i].num);}else{printf("找不到'%s'!正在返回...",sname);Sleep(3000);return;}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++) //将新修改的信息写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存'%s'失败!正在返回...",sname);Sleep(3000);return;}fclose(fp);order();show();}void total() //自定义计算总人数函数{FILE *fp;int m=0;if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;printf("此通讯录总共有%d名联系人!\n",m); //将统计的个数输出fclose(fp);printf("\n按任意键返回...\n");getch(); //输入任意键返回}void order() //自动排序函数{FILE *fp;struct student t; //用于交换信息int i=0,j=0,m=0; //i,j用于循环if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m] ,LEN,1,fp)==1)m++;for(i=0;i<m-1;i++)for(j=i+1;j<m;j++) //双重循环实现联系人比较并交换if((strcmp(stu[i].name,stu[j].name))>0){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data","wb"))==NULL){printf("文件打开失败!正在返回...\n");Sleep(3000);return;}for(i=0;i<m;i++)//将重新排好序的内容重新写入指定的磁盘文件中if(fwrite(&stu[i],LEN,1,fp)!=1){printf("排序失败!正在返回...");Sleep(3000);return;}fclose(fp);}。

通讯录的制作c语言

通讯录的制作c语言

通讯录的制作1. 介绍通讯录是一种管理联系人信息的工具,能够存储和查找联系人的姓名、电话号码、邮箱等信息。

在现代社会中,通讯录已经成为人们日常生活中必备的工具之一。

本文将介绍如何使用C语言编写一个简单的通讯录程序。

2. 功能需求通讯录程序应该具备以下功能: - 添加联系人:用户可以输入联系人的姓名、电话号码和邮箱,将其添加到通讯录中。

- 删除联系人:用户可以根据姓名或电话号码删除已存在的联系人。

- 修改联系人信息:用户可以根据姓名或电话号码修改已存在联系人的信息。

- 查找联系人:用户可以根据姓名或电话号码查找已存在的联系人,并显示其详细信息。

- 显示所有联系人:用户可以显示通讯录中所有联系人的列表。

3. 数据结构设计为了实现上述功能,我们需要设计合适的数据结构来存储联系人信息。

在C语言中,可以使用结构体来表示一个联系人。

typedef struct {char name[50];char phone[20];char email[50];} Contact;以上代码定义了一个名为Contact的结构体,包含了三个字段:姓名、电话号码和邮箱。

每个字段都使用字符数组来表示。

同时,我们需要定义一个数据结构来存储多个联系人,可以使用数组或链表。

在本文中,我们将使用数组来实现通讯录。

#define MAX_CONTACTS 100Contact contacts[MAX_CONTACTS];int numContacts = 0;以上代码定义了一个名为contacts的数组,用于存储所有联系人的信息。

numContacts变量用于记录当前通讯录中联系人的数量。

4. 功能实现4.1 添加联系人添加联系人功能允许用户输入联系人的姓名、电话号码和邮箱,并将其添加到通讯录中。

void addContact() {if (numContacts >= MAX_CONTACTS) {printf("通讯录已满,无法添加更多联系人。

用C语言实现简易通讯录

用C语言实现简易通讯录

⽤C语⾔实现简易通讯录C语⾔实现⼀个通讯录,通讯录可以⽤来存储1000个⼈的信息,每个⼈的信息包括:姓名、性别、年龄、电话、住址**提供⽅法:1. 添加联系⼈信息2. 删除指定联系⼈信息3. 查找指定联系⼈信息4. 修改指定联系⼈信息5. 显⽰所有联系⼈信息6. 清空所有联系⼈7. 以名字排序所有联系⼈**思路分析:⾸先我们可以分三个模块来解决这个问题,第⼀个模块我们需要⼀个头⽂件,这个头⽂件⾥可以包含⼀些相应信息,当实现⽂件和测试⽂件包含⾃⼰定义的头⽂件时便可以获得⼀些相关的信息。

所以头⽂件⾥应该包括⼀个结构体,这个结构体⾥应包含姓名,性别,年龄,电话,住址。

同时还可以定义⼀个结构体,这个结构体⾥包含通讯录,同时通讯录⾥⼈员的计数变量,将通讯录的地址传到别的地⽅便可以实现对它遍历或者其他操作。

第⼆个模块便是我们的测试函数,测试函数便可以实现我们的菜单打印,同时由我们接收不同的值便可以实现不同的操作,就是相应的⽅法的实现,这⾥很明显可以通过⼀个switch语句来进⾏控制。

第三个模块便是我们的⽅法实现的函数,将模块2⾥定义的类型为通讯录的地址传到各个⽅法⾥,这样便可以实现对通讯录的操作。

1.linkman.h(头⽂件)#ifndef __LINKMAN_H__#define __LINKMAN_H__#include<stdio.h>#include<windows.h>#include<string.h>#pragma warning (disable:4996)typedef struct LINKMAN//建⽴结构体,存放联系⼈信息{char name[20];char sex[10];int age;int tel[12];char addr[50];}LINKMAN;typedef struct Statis //把通讯录和⼈员统计放在结构体内{LINKMAN num[1000];int count;}Statis;void inint_linkman(Statis *p);//初始化数组void Add_linkman(Statis *p);// 添加联系⼈信息void Dele_linkman(Statis *p);//删除指定联系⼈信息void Find_linkman(Statis *p);//查找指定联系⼈信息void Revise_linkman(Statis *p);//修改指定联系⼈信息void Display_linkman(Statis *p);//显⽰所有联系⼈信息void Empty_linkman(Statis *p);//清空所有联系⼈void sort_linkman(Statis *p);//以名字排序所有联系⼈#endif2.test.c(测试)#include "linkman.h"Statis sta;void menu()//菜单{printf("***********************************\n");printf("********1.添加联系⼈信息***********\n");printf("********2.删除指定联系⼈信息*******\n");printf("********3.查找指定联系⼈信息*******\n");printf("********4.修改指定联系⼈信息*******\n");printf("********5.显⽰所有联系⼈信息*******\n");printf("********6.清空所有联系⼈***********\n");printf("********7.以名字排序所有联系⼈*****\n");printf("**************按0退出程序**********\n");printf("***********************************\n");}void test(){int i = 0;do{menu();printf("请输⼊你要进⾏的选项:");scanf("%d", &i);switch (i){case 1:Add_linkman(&sta);break;case 2:Dele_linkman(&sta);break;case 3:Find_linkman(&sta);break;case 4:Revise_linkman(&sta);break;case 5:Display_linkman(&sta);break;case 6:Empty_linkman(&sta);break;case 7:sort_linkman(&sta);break;case 0:exit(1);break;default:printf("输⼊错误\n");break;}} while (i);}int main(){inint_linkman(&sta);test();system("pause");return 0;}3.game.c(实现)#include "linkman.h"void inint_linkman(Statis *p){int count = sizeof(p->num);p->count = 0;memset(p->num, 0,count);}int Find(Statis *p, char *pname)//对于⼀个联系⼈是否存在封装⼀个函数,在后⾯的修改、删除、查找可以⽤到{int i = 0;for (i = 0; i < (p->count); i++){if (strcmp(p->num[i].name, pname) == 0) return i;}return -1;}void menu1()//修改联系⼈时所⽤到的菜单{printf("*********************\n");printf("****1.姓名*2.性别****\n");printf("****3.年龄*4.电话****\n");printf("****5.地址*6.返回****\n");printf("*********************\n");}void Add_linkman(Statis *p)//添加联系⼈{printf("请输⼊你要添加的联系⼈姓名:\n"); scanf("%s", p->num[p->count].name);printf("请输⼊你要添加的联系⼈性别:\n"); scanf("%s", p->num[p->count].sex);printf("请输⼊你要添加的联系⼈年龄:\n"); scanf("%d", &(p->num[p->count].age)); printf("请输⼊你要添加的联系⼈电话:\n"); scanf("%s", p->num[p->count].tel);printf("请输⼊你要添加的联系⼈地址:\n"); scanf("%s", p->num[p->count].addr);if ((p->count) > 1000){printf("联系⼈上限\n");}else{printf("添加成功\n");p->count++;}}void Dele_linkman(Statis *p)//删除联系⼈{char name[20] = { 0 };int result = 0;int n = 0;int i = 0;printf("请输⼊要删除⼈的姓名:\n");scanf("%s", name);result = Find(p, name);if (result != -1){printf("你是否要删除该联系⼈?\n");printf("删除请按1,不删除请按0\n");scanf("%d", &n);if (n == 1){for (i = 0; i < (p->count)-1; i++){p->num[i] = p->num[i + 1];}p->count --;printf("删除成功\n");}else{printf("删除失败\n");}}else{printf("你要删除的联系⼈不存在\n");}}void Find_linkman(Statis *p)//查找联系⼈{char name[20] = { 0 };int result = 0;printf("请输⼊要查找联系⼈的姓名:\n");scanf("%s", name);result = Find(p, name);if (result != -1){printf("姓名:%s\n", p->num[result].name);printf("性别:%s\n", p->num[result].sex);printf("年龄:%d\n", p->num[result].age);printf("电话:%s\n", p->num[result].tel);printf("地址:%s\n", p->num[result].addr);}else{printf("你要查找的联系⼈不存在\n");}}void Revise_linkman(Statis *p)//修改联系⼈{char name[20] = {0};int result = 0;printf("请输⼊你要修改联系⼈的姓名:\n");scanf("%s", name);result = Find(p, name);if (result != -1){printf("姓名:%s\n", p->num[result].name);printf("性别:%s\n", p->num[result].sex);printf("年龄:%d\n", p->num[result].age);printf("电话:%s\n", p->num[result].tel);printf("地址:%s\n", p->num[result].addr);int i = 0;do{menu1();printf("输⼊你要修改的选项:\n");scanf("%d", &i);switch (i){case 1:printf("请把姓名修改成:");scanf("%s", p->num[result].name);break;case 2:printf("请把性别修改成:");scanf("%s", p->num[result].sex);break;case 3:printf("请把年龄修改成:");scanf("%d", &(p->num[result].age));break;case 4:printf("请把电话修改成:");scanf("%s", p->num[result].tel);break;case 5:printf("请把地址修改成:");scanf("%s", p->num[result].addr);break;case 0:break;default:printf("输⼊错误");break;}} while (i);}else{printf("你要修改的联系⼈不存在\n");}}void Display_linkman(Statis *p)//打印所有联系⼈信息{int i = 0;printf("输出所有⼈的信息:\n");printf("%10s%7s%6s%8s%10s\n","名字","性别","年龄","电话","住址"); for (i = 0; i <(p->count); i++){printf("%11s", p->num[i].name);printf("%5s", p->num[i].sex);printf("%5d", p->num[i].age);printf("%10s", p->num[i].tel);printf("%12s", p->num[i].addr);printf("\n");}}void Empty_linkman(Statis *p)//清空联系⼈{p->count = 0;}void sort_linkman(Statis *p)//以名字排序所有联系⼈(冒泡){int i = 0;int j = 0;for (i = 0; i < p->count - 1; i++)for (j = 0; j < p->count - 1 - i; j++){if (strcmp(p->num[j].name, p->num[j + 1].name)>0){LINKMAN tmp;tmp = p->num[j];p->num[j] = p->num[j + 1];p->num[j + 1] = tmp;}}}程序运⾏结果部分⽰范:到此为⽌,我们的简易通讯录就实现啦。

c语言学生通讯录设计

c语言学生通讯录设计

下面是一个简单的C语言学生通讯录设计示例:#include <stdio.h>#include <string.h>struct student {char name[20];int age;char gender;char phone[15];};int main() {struct student students[100];int n, i;printf("请输入学生人数:");scanf("%d", &n);for (i = 0; i < n; i++) {printf("请输入第%d个学生的姓名、年龄、性别和电话号码:", i+1);scanf("%s %d %c %s", students[i].name, &students[i].age, &students[i].gender, students[i].phone);}printf("\n学生通讯录\n");printf("姓名\t年龄\t性别\t电话号码\n");for (i = 0; i < n; i++) {printf("%s\t%d\t%c\t%s\n", students[i].name, students[i].age, students[i].gender, students[i].phone);}return 0;}该程序定义了一个名为`student`的结构体,用于存储学生的姓名、年龄、性别和电话号码。

在主函数中,首先通过`scanf`函数从用户输入中读取学生人数`n`,然后使用一个循环来依次读取每个学生的信息,并将它们存储到`students`数组中。

最后,使用另一个循环将所有学生的信息打印出来。

该程序可以根据需要添加其他功能,例如根据姓名或电话号码查询学生信息、添加或删除学生信息等。

通讯录(C语言版)(请下载观看,无乱码)

通讯录(C语言版)(请下载观看,无乱码)

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>typedef struct personnode {char name[8];char tel[16];char add[30];}personnode;FILE *fp; //定义文件型指针变量/*以下创建通讯录,若通讯录不存在,刚提示创建,若存在则不创建*/void creat(){personnode *person;person=(personnode *)malloc(sizeof(personnode));if((fp=fopen("通讯录.dat","r"))==NULL){ //r 只读(打开)printf("通讯录不存在!\n");fp=fopen("通讯录.dat","w"); //w 只写(建立)fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","地址");printf("\n建立通讯录成功!\n");}elseprintf("通讯录已存在,不用建立!\n");fclose(fp);} //creat()void output(){personnode *person;person=(personnode *)malloc(sizeof(personnode));if((fp=fopen("通讯录.dat","r"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}printf("\n**************************************\n");printf("%24s\n","通讯录");while(!feof(fp)){ //如果没到文件末尾,则不停循环输出fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);}fclose(fp);printf("\n**************************************\n");} //output()/*以下为添加模块*/void append(){personnode *person;person=(personnode *)malloc(sizeof(personnode));if((fp=fopen("通讯录.dat","a"))==NULL){ //a 追加printf("\n不能打开通讯录!\n");exit(0);}printf("\n请输入添加的姓名、电话号码及地址\n");scanf("%s%s%s",person->name,person->tel,person->add);fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->add);fclose(fp);printf("\n添加成功!\n");} //append()/*以下为查找模块*/void search(){int k=0,h;char namekey[8],telkey[16];personnode *person;person=(personnode *)malloc(sizeof(personnode));printf("\n*********************************\n");printf("* \t1 -- 按号码查找 \t*\n");printf("* \t2 -- 按姓名查找 \t*\n");printf("*********************************\n");printf("\n请选择操作 (1 ~ 2) :");scanf("%d",&h);fp=fopen("通讯录.dat","r");if(h==1){printf("\n请输入你查找的号码!\n");scanf("%s",telkey);while(!feof(fp)){fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);if(!strcmp(telkey,person->tel)){printf("\n\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);k=1;} //if}}else if(h==2){printf("\n请输入要查找的姓名:");scanf("%s",namekey);while(!feof(fp)){fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);if(!strcmp(namekey,person->name)){printf("\n\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);k=1;} //if} //while*/if(!k)printf("对不起,没有此人记录!\n");fclose(fp);}} //search()/*以下为修改模块*/void modify(){int k=0;long offset;char namekey[8];personnode *person;person=(personnode *)malloc(sizeof(personnode));printf("\n请输入要修改的姓名:");scanf("%s",namekey);if((fp=fopen("通讯录.dat","r+"))==NULL){ // r+ 读写printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)){offset=ftell(fp);fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);if(!strcmp(namekey,person->name)){k=1;break;}}if(k){printf("\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);printf("\n请输入新姓名、电话号码及地址\n");scanf("%s%s%s",person->name,person->tel,person->add);fseek(fp,offset,SEEK_SET); //从该条记录的开始点进行写操作 fprintf(fp,"%-10s%-20s%-50s\n",person->name,person->tel,person->add);printf("\n修改成功!\n");}else printf("\n对不起,没有此人记录!\n");fclose(fp);}/*以下为删除模块*/void delrecord(){int k=0;int sum=1;char m;long offset1;char namekey[8];personnode *person;person=(personnode *)malloc(sizeof(personnode));printf("\n请输入要删除的姓名:");scanf("%s",namekey);if((fp=fopen("通讯录.dat","r+"))==NULL){printf("\n不能打开通讯录!\n");exit(0);}while(!feof(fp)){offset1=ftell(fp); //文件位置指针当前值fscanf(fp,"%s%s%s\n",person->name,person->tel,person->add);sum+=1;if(!strcmp(namekey,person->name)){k=1;break;}} //while()if(k){printf("\n已查到,记录为:\n");printf("%-10s%-20s%-50s\n",person->name,person->tel,person->add);printf("\n确定要删除吗? (Y/N) ");scanf("%s",&m);if(m=='y'||m=='Y'){rewind(fp);fseek(fp,sum*80L,1);fprintf(fp,"%-10s%-20s%-50s\n","","","");printf("\n删除成功!\n");} //if}else printf("\n对不起,没有此人记录!\n");fclose(fp);} //delcord()void main(){int m,flag=1;system("color 2f"); //调用颜色命令,包含在stdlib.h头文件中printf("\n\n******************************************************************** ***********\n\n");printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t┃∩__∩ Random 编写♂┃\n");printf("\t\t┃欢迎使用Random的通讯录┃\n");printf("\t\t┃ QQ:747187822 ┃\n");printf("\t\t┣━━━━━━━━━━┳━━━━━━━━━━┫\n");printf("\t\t┃ 1 -- 添加┃ 2 -- 查找┃\n");printf("\t\t┃┃┃\n");printf("\t\t┃ 3 -- 修改┃ 4 -- 删除┃\n");printf("\t\t┃┃┃\n");printf("\t\t┃ 5 -- 打印┃ 0 -- 退出┃\n");printf("\t\t┗━━━━━━━━━━┻━━━━━━━━━━┛\n");printf("\n********************************************************************** *********\n\n");creat();while(flag){ //用死循环实现printf("\n请选择操作 (0 ~ 5) :");scanf("%d",&m);switch(m){case 1: append();break;case 2: search();break;case 3: modify();break;case 4: delrecord();break;case 5: output();break;case 0: printf("\n\n==========>感谢使用Random的通讯录!<==========\n");exit(0);} //switch()} //while()}/*本程序编写By:Random*/。

通讯录的制作c语言

通讯录的制作c语言

通讯录的制作c语言一、前言通讯录是一个常见的管理工具,它可以帮助我们更好地组织和管理联系人信息。

在日常生活中,我们经常需要制作通讯录来保存联系人信息。

本文将介绍如何使用C语言来制作一个简单的通讯录程序。

二、需求分析在开始编写程序之前,我们需要先确定程序的需求。

通讯录程序需要具备以下功能:1. 添加联系人:输入联系人信息并保存到文件中。

2. 显示所有联系人:从文件中读取所有联系人信息并显示。

3. 查找联系人:根据姓名查找并显示相应的联系人信息。

4. 修改联系人:根据姓名修改相应的联系人信息。

5. 删除联系人:根据姓名删除相应的联系人信息。

三、程序设计1. 文件结构设计为了实现通讯录数据的持久化存储,我们可以将所有联系人信息保存在一个文件中。

文件结构可以设计为以下格式:struct Contact {char name[20]; // 姓名char phone[20]; // 电话号码char email[30]; // 邮箱地址};2. 界面设计为了方便用户操作,我们可以设计一个简单的命令行界面,通过输入数字选择相应功能。

界面可以设计为以下格式:*********************** 通讯录管理系统 ** 1. 添加联系人 ** 2. 显示所有联系人 ** 3. 查找联系人 ** 4. 修改联系人 ** 5. 删除联系人 ** 0. 退出系统 ***********************请选择功能:3. 功能实现根据需求分析,我们需要实现以下功能:1. 添加联系人添加联系人需要输入姓名、电话号码和邮箱地址,并将数据保存到文件中。

可以使用以下代码实现:void addContact() {struct Contact contact;printf("请输入姓名:");scanf("%s", );printf("请输入电话号码:");scanf("%s", contact.phone);printf("请输入邮箱地址:");scanf("%s", contact.email);FILE *fp = fopen("contacts.dat", "ab");fwrite(&contact, sizeof(struct Contact), 1, fp);fclose(fp);printf("添加成功!\n");}2. 显示所有联系人显示所有联系人需要从文件中读取数据并输出到屏幕上。

c语言编写通讯录程序源代码

c语言编写通讯录程序源代码

c语言编写通讯录程序源代码以下是一个简单的 C 语言编写的通讯录程序示例,包含了添加、查找、修改和删除联系人的功能:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100// 联系人结构体struct Contact {char name[50];char number[20];};// 通讯录数组struct Contact contacts[MAX_CONTACTS];// 通讯录大小int size = 0;// 添加联系人void addContact() {if (size >= MAX_CONTACTS) {printf("通讯录已满,无法添加更多联系人。

\n");return;}printf("请输入联系人姓名:");scanf("%s", contacts[size].name);printf("请输入联系人号码:");scanf("%s", contacts[size].number);size++;printf("联系人已添加。

\n");}// 查找联系人void findContact() {char name[50];printf("请输入要查找的联系人姓名:");scanf("%s", name);for (int i = 0; i < size; i++) {if (strcmp(contacts[i].name, name) == 0) {printf("姓名:%s\n", contacts[i].name); printf("号码:%s\n", contacts[i].number); return;}}printf("未找到该联系人。

c语言通讯录设计与实现

c语言通讯录设计与实现

C 语言通讯录设计与实现本文主要介绍了如何使用 C 语言设计并实现一个通讯录程序,包括通讯录的存储、添加、查找、修改和删除等基本操作,同时考虑了数据的持久化存储问题。

下面是本店铺为大家精心编写的4篇《C 语言通讯录设计与实现》,供大家借鉴与参考,希望对大家有所帮助。

《C 语言通讯录设计与实现》篇1引言通讯录是一个常见的应用程序,用于存储和管理联系人的信息,包括姓名、电话号码、电子邮件地址等。

在现代智能手机中,通讯录已经成为了一个不可或缺的应用程序。

在本文中,我们将使用 C 语言来设计和实现一个简单的通讯录程序。

通讯录的设计通讯录程序需要存储联系人的信息,包括姓名和电话号码等。

我们可以使用结构体来存储联系人的信息,如下所示:```struct contact {char name[20];char phone[20];};```通讯录程序需要具有添加、查找、修改和删除联系人信息的功能。

我们可以使用数组来存储联系人的信息,并使用索引来标识每个联系人。

以下是通讯录程序的基本设计:```#define MAX_CONTACTS 100 // 通讯录最大容量struct contact contacts[MAX_CONTACTS]; // 通讯录数组int num_contacts; // 当前通讯录中的联系人数量// 添加联系人信息void add_contact(char *name, char *phone) {if (num_contacts == MAX_CONTACTS) {printf("通讯录已满,无法添加联系人");return;}contacts[num_contacts].name = name;strcpy(contacts[num_contacts].phone, phone);num_contacts++;}// 查找联系人信息void find_contact(char *name) {int i;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) {printf("找到联系人 %s,电话号码为 %s", name, contacts[i].phone);return;}}printf("未找到联系人 %s", name);}// 修改联系人信息void modify_contact(char *name, char *phone) { int i;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) {contacts[i].phone = phone;printf("修改联系人 %s的电话号码为 %s", name, phone);return;}}printf("未找到联系人 %s", name);}// 删除联系人信息void delete_contact(char *name) {int i, j;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) { for (j = i; j < num_contacts - 1; j++) { contacts[j] = contacts[j + 1];}num_contacts--;printf("删除联系人 %s成功", name);return;}}printf("未找到联系人 %s", name);}```通讯录的实现为了实现通讯录程序,我们需要将设计转化为代码。

简单的通讯录(C语言实现)

简单的通讯录(C语言实现)

简单的通讯录(C语⾔实现)通讯录实现的功能1、添加联系⼈2、删除联系⼈3、查找联系⼈4、修改联系⼈5、显⽰联系⼈6、清空通讯录7、按照姓名进⾏排序 8、退出程序该通讯录将联系⼈的信息保存在⽂件中在VS2013中打开⽂件直接创建,创建建的⽂件名字是contact.dat,操作步骤如下:使⽤的⽂件操作函数如下:fopen函数原型为FILE *fopen( const char *fname, const char *mode );打开由fname(⽂件名)指定的⽂件并返回⼀个关联该⽂件的流.如果发⽣错误, fopen()返回NULL. mode(⽅式)是⽤于决定⽂件的⽤途fwrite:函数原型为 size_t fwrite ( const void * buffer, size_t size, size_t count, FILE * stream );从buffer(缓冲区)中, 写count个⼤⼩为size(⼤⼩)的对象到stream(流)指定的流.返回值是已写的对象的数量.fread:函数原型为size_t fread( void *buffer, size_t size, size_t num, FILE *stream );读取[num]个对象(每个对象⼤⼩为size(⼤⼩)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组数据来⾃给出的输⼊流.完整代码:头⽂件:Addersss.h1#define _CRT_SECURE_NO_WARNINGS 12 #ifndef _ADDRESS_LIST_H_3#define _ADDRESS_LIST_H_4 #include<stdio.h>5 #include<string.h>6 #include<stdlib.h>7#define NAME_MAX 128#define TEL_MAX 129#define SEX_MAX 510#define ADDR_MAX 2011#define INIT 412#define SIZE 413enum OP14 {15 EXIT, //退出16 ADD, //添加17 DEL,//删除18 SEARCH, //查找19 REVISE, //修改20 DISPLAY, //打印21 SORT, //排序22 EMPTY //清空23 };24 typedef struct PerInfo25 {26char name[NAME_MAX];//姓名27int age; // 年龄28char sex[SEX_MAX];//性别29char tel[TEL_MAX]; //电话30char address[ADDR_MAX];//地址31 }PerInfo;32 typedef struct Contact33 {34 PerInfo* data;//存储所有联系⼈的信息35int size;36int capacity;37 }Contact, *Pcon;37 }Contact, *Pcon;38void Add(Pcon Con); //添加联系⼈39void Delete(Pcon Con);//删除联系⼈40void Revise(Pcon Con);//修改联系⼈41void Search(Pcon Con);//查找联系⼈42void Display(Pcon Con);//打印联系⼈43void Init(Pcon Con);//初始化通讯录44void Save_Contact(Pcon Con); //存储联系⼈45void Load_Contact(Pcon Con);//加载联系⼈46void Empty(Pcon Con); //清空联系⼈47void Sort(Pcon Con);//对联系⼈进⾏排序48void Free(Pcon Con);//释放空间4950#endif//_ADDRESS_LIST_H_Contact.c1#define _CRT_SECURE_NO_WARNINGS 12 #include"AddressList.h"3void judge_full(Pcon Con) //当实际联系⼈个数和初始化的容量相等时⽤realloc增容4 {5if (Con->capacity == Con->size)6 {7 PerInfo* tmp = (PerInfo*)realloc(Con->data, (Con->capacity + SIZE)*sizeof(PerInfo)); 8if (tmp == NULL)9 {10 printf("out of memery\n");11 exit(EXIT_FAILURE);12 }13else14 {15 Con->data = tmp;16 Con->capacity += SIZE;17 }18 }19 }20int Find(Pcon Con, char* str) //查找联系⼈函数21 {22for (int i = 0; i < Con->size; i++)23 {24if (strcmp(str, Con->data[i].name) == 0)25 {26return i;27 }28 }29return -1;//没有找到返回 -130 }31void Add(Pcon Con) //添加32 {33 judge_full(Con);34 printf("请输⼊联系⼈的姓名年龄性别电话号码,家庭住址\n");35 scanf("%s%d%s%s%s", Con->data[Con->size].name,36 &Con->data[Con->size].age,37 Con->data[Con->size].sex,38 Con->data[Con->size].tel,39 Con->data[Con->size].address);40 Con->size++;41 printf("添加成功\n");42return;43 }44void Delete(Pcon Con)//删除联系⼈45 {46char input[NAME_MAX];47int i = 0;48 printf("请输⼊联系⼈姓名:\n");49 scanf("%s", input);50int ret = Find(Con, input);51if (ret != -1)52 {53for (i = ret; i < Con->size; i++)54 {55 Con->data[i] = Con->data[i + 1]; //将所要删除的元素后⾯的元素都往前移动5657 }58 Con->size--;59 }60else60else61 {62 printf("这个联系⼈不存在!\n");63 }64 }65void Revise(Pcon Con) //修改联系⼈66 {67char input[NAME_MAX];68 printf("请输⼊联系⼈姓名:\n");69 scanf("%s", input);70int ret = Find(Con, input);71if (ret != -1)72 {73 printf("请输⼊修改后联系⼈的姓名,性别,年龄,电话号码,家庭住址\n");74 scanf("%s, %s, %d, %s, %s",75 Con->data[ret].name,76 Con->data[ret].sex,77 Con->data[ret].age,78 Con->data[ret].tel,79 Con->data[ret].address);80 printf("修改完成\n");81 }82else83 {84 printf("该联系⼈不存在\n");85 }86 }87void Search(Pcon Con)88 {89char input[NAME_MAX];90 printf("请输⼊联系⼈姓名:\n");91 scanf("%s", input);92int ret = Find(Con, input);93if (ret != -1)94 {95 printf("%s,%s,%d,%s,%s\n",96 Con->data[ret].name,97 Con->data[ret].sex,98 Con->data[ret].age,99 Con->data[ret].tel,100 Con->data[ret].address);101 }102else103 {104 printf("该联系⼈不存在!\n");105 }106 }107void Display(Pcon Con)108 {109int i = 0;110while (i < Con->size)111 {112 printf("%s,%s,%d,%s,%s\n",113 Con->data[i].name,114 Con->data[i].sex,115 Con->data[i].age,116 Con->data[i].tel,117 Con->data[i].address);118 i++;119 }120 }121void Init(Pcon Con)122 {123 Con->data = (PerInfo*)malloc(SIZE*sizeof(PerInfo)); //开辟空间124if (Con->data == NULL)125 {126 printf("out of memory\n");127 exit(EXIT_FAILURE);128 }129 Con->size = 0;130 Con->capacity = INIT;131 Load_Contact(Con);132 }133void Save_Contact(Pcon Con) //存储联系⼈134 {135 FILE* pfwrite = fopen("contact.dat", "w");136if (pfwrite == NULL)137 {138 perror("open file for write");139 exit(EXIT_FAILURE);140 }141for (int i = 0; i < Con->size; i++)142 {143 fwrite(&(Con->data[i]), sizeof(PerInfo), 1, pfwrite);144 }145 fclose(pfwrite);146 }147void Load_Contact(Pcon Con)//加载联系⼈148 {149 FILE* pfread = fopen("contact.dat", "r");150 PerInfo tmp = { 0 };151if (pfread == NULL)152 {153 perror("open file for read");154 exit(EXIT_FAILURE);155 }156while (fread(&tmp, 1, sizeof(PerInfo), pfread))157 {158 judge_full(Con);159 Con->data[Con->size] = tmp;160 Con->size++;161 }162 }163void Empty(Pcon Con)//清空联系⼈164 {165 Con->size = 0;166return;167 }168void Sort(Pcon Con) //按照联系⼈姓名进⾏排序169 {170int flag = 0;171for (int i = 0; i < Con->size - 1; i++) //需要排n-1趟172 {173int flag = 0;174for (int j = 0; j < Con->size - 1 - i; j++) //每趟进⾏n-1-i次⽐较175 {176if (strcmp(Con->data[j].name, Con->data[j + 1].name)>0) //按照升序进⾏排序177 {178 flag = 1;179 PerInfo tmp = Con->data[j];180 Con->data[j] = Con->data[j + 1];181 Con->data[j + 1] = tmp;182 }183 }184if (flag == 0)185 {186break;187 }188 }189 }190void Free(Pcon Con)191 {192free(Con->data);193 Con->data = NULL;194195 }Test.c1#define _CRT_SECURE_NO_WARNINGS 12 #include"AddressList.h"3void Print()4 {56 printf("**********************************************************\n");7 printf("*********1:添加联系⼈*****2:删除联系⼈********************\n");8 printf("*********3:查找联系⼈***** 4 : 修改联系⼈********************\n");9 printf("*********5:显⽰所有联系⼈***6:排序*************************\n");10 printf("*********7:清空联系⼈********0:退出************************\n");11 printf("**********************************************************\n");12 }13int main()14 {15 Contact pcon;16 Init(&pcon);17int input;18while (1)19 {20 Print();21 printf("选择⼀个操作:");22 scanf("%d", &input);23switch (input)24 {25case EXIT:26 Save_Contact(&pcon);27 Free(&pcon);28 exit(0);29break;30case ADD:31 Add(&pcon);32break;33case DEL:34 Delete(&pcon);35break;36case SEARCH:37 Search(&pcon);38break;39case REVISE:40 Revise(&pcon);41break;42case SORT:43 Sort(&pcon);44break;45case DISPLAY:46 Display(&pcon);47break;48case EMPTY:49 Empty(&pcon);50break;51default:52 printf("选择错误,请重新选择:\n"); 5354 }55 }56 system("pause");57return0;58 }---恢复内容结束---。

C课程设计简单通讯录

C课程设计简单通讯录

C 课程设计简单通讯录一、教学目标本课程旨在让学生掌握简单通讯录的设计与实现。

通过本课程的学习,学生将能够理解通讯录的基本结构,学会使用C语言进行程序设计,实现通讯录的增删改查功能。

1.了解通讯录的基本结构及其在现实生活中的应用。

2.掌握C语言的基本语法和编程技巧。

3.理解程序设计的基本思想,学会模块化编程。

4.能够使用C语言编写简单的程序,实现通讯录的增删改查功能。

5.具备基本的程序调试和优化能力。

情感态度价值观目标:1.培养学生的团队协作精神,学会与他人分享和交流编程经验。

2.激发学生对计算机科学的兴趣,培养学生的创新意识。

二、教学内容本课程的教学内容主要包括以下几个部分:1.通讯录的基本结构及其在现实生活中的应用。

2.C语言的基本语法和编程技巧。

3.程序设计的基本思想和模块化编程。

4.通讯录的增删改查功能的实现。

5.课程引入:介绍通讯录的基本结构及其在现实生活中的应用。

6.C语言基础:学习C语言的基本语法,掌握基本数据类型、运算符、控制语句等。

7.程序设计基本思想:学习程序设计的基本思想,了解函数、模块化编程。

8.通讯录实现:学习如何使用C语言实现通讯录的增删改查功能。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

1.讲授法:用于传授C语言的基本语法和程序设计的基本思想。

2.案例分析法:通过分析实际案例,让学生学会如何设计简单的通讯录程序。

3.实验法:让学生动手实践,实际编写代码,实现通讯录的增删改查功能。

四、教学资源本课程所需教学资源包括:1.教材:《C程序设计》。

2.参考书:《C语言编程实例教程》。

3.多媒体资料:教学PPT、视频教程。

4.实验设备:计算机、编程环境。

教学资源将用于支持教学内容的学习,帮助学生更好地掌握C语言编程技巧,提高实际编程能力。

五、教学评估本课程的教学评估采用多元化的评价方式,以全面、客观、公正地评价学生的学习成果。

评估方式包括:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和实际操作能力。

c简单通讯录课程设计

c简单通讯录课程设计

c 简单通讯录课程设计一、课程目标知识目标:1. 让学生掌握通讯录的基本概念和功能,理解其在日常生活和学习中的应用。

2. 学会使用编程语言(如Python)编写简单的通讯录管理系统,包括增加、删除、查找和修改联系人信息。

3. 了解数据存储和文件操作的基本方法,并能够将通讯录数据保存在本地文件中。

技能目标:1. 培养学生运用编程思维解决问题的能力,学会分析需求、设计程序结构和编写代码。

2. 提高学生的动手实践能力,通过编写通讯录程序,熟练使用编程环境,掌握基本调试技巧。

3. 培养学生团队协作和沟通能力,能够在小组合作中共同完成任务,相互学习和分享经验。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养主动探索、积极进取的学习态度。

2. 培养学生的创新意识,鼓励他们在编写通讯录程序时提出独特的想法和改进措施。

3. 增强学生的信息安全意识,让他们认识到保护个人隐私的重要性,遵循道德规范,合理使用通讯录信息。

本课程针对的是初中年级学生,他们在学习编程方面具有一定的逻辑思维能力和基础知识。

课程性质为实践性较强的信息技术课程,要求学生在学习过程中动手实践,将理论知识与实际应用相结合。

通过本课程的学习,期望学生能够达到上述课程目标,为今后的信息技术学习奠定基础。

二、教学内容1. 通讯录基本概念:介绍通讯录的定义、作用和常见功能,如添加、删除、查找和修改联系人信息。

2. 编程语言基础:回顾Python编程语言的基本语法,如变量、数据类型、条件语句和循环语句。

3. 通讯录管理系统设计:- 需求分析:引导学生分析通讯录的功能需求,明确系统所需实现的基本功能。

- 程序结构设计:介绍如何使用面向对象编程思想设计通讯录管理系统,包括类的定义、属性和方法的创建。

4. 数据存储与文件操作:- 介绍本地文件存储的基本方法,如文本文件和CSV文件的读写操作。

- 指导学生将通讯录数据保存到本地文件中,实现数据的持久化存储。

C语言实现简易通讯录实例

C语言实现简易通讯录实例

C 语⾔实现简易通讯录实例⽬录⼀、问题描述⼆、功能介绍⼆、实现流程1.创建通讯录2.创建源⽂件test.c3.创建源⽂件contact.c4.删除通讯录联系⼈信息 (DelContact 函数实现)5.查找通讯录联系⼈信息( SearchContact 函数实现)6.修改联系⼈信息(ModifyContact 函数实现)总结:⼀、问题描述⽤C 语⾔来写⼀个简易的通讯录⼆、功能介绍通讯录1.通讯录中能够存放1000个⼈的信息每个⼈的信息:名字,年龄,性别,电话,地址2.增加⼈的信息3.删除⼈的信息4.修改指定⼈的信息5.查找指定⼈的信息6.排序⼆、实现流程1.创建通讯录1.创建头⽂件contact.h头⽂件contact.h ⽤来实现类型的定义和函数的声明。

2.定义结构体类型(struct peoInfo )⼀个⼈的信息包含名字,年龄,性别,电话,地址,所以我们要定义⼀个结构体类型才能完整的表述。

写⼀个结构体类型struct peoInfo 存放⼀个⼈的信息代码如下:12345678/类型的定义typedef struct peoInfo{char name[MAX_NAME];//名字char sex[MAX_SEX];//性别int age;//年龄char tele[MAX_TELE];//电话char addr[MAX_ADDR];//地址}peoInfo;typedef (类型重命名),struct peoInfo 重命名为peoInfo 。

3.定义通讯录结构体类型(struct contact)因为要存放1000个这样的⼈的信息,所以我们创建⼀个结构体类型的数组data 。

再创建⼀个变量sz 来表⽰这个数组的下标,data 数组中存第⼀个⼈信息的时候,我们放在下标为sz 的位置,这个时候让我们的sz 等于0,存第⼆个⼈的信息的时候,让我们的sz 等于1,这样后续就⽅便我们通过下标的⽅式找到存⼊的每⼀个⼈的信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<windows.h>#define LEN sizeof(struct student)#define TITLE_T "╔═══════════════╗\n"#define NAME "║※姓名: 号码: ║\n"#define GESHI "║※%-15s %-11s ║\n"#define BOTTOM_B "╚═══════════════╝\n"#define NEIRONG stu[i].name,stu[i].numstruct student //定义通讯录结构体{char name[15]; //姓名char num[12]; //号码};struct student stu[50]; //定义结构体数组void in(); //添加联系人void show(); //显示联系人void order(); //按字符排序void del(); //删除联系人void modify(); //修改联系人void menu(); //主菜单void total(); //计算总人数void search(); //查找联系人void main() //主函数{system("title 某某某通讯录"); //设置cmd窗口标题system("mode con cols=85 lines=35"); //设置cmd窗口大小system("color 8A");int n;menu(); //执行菜单命令scanf("%d",&n); //输入选择功能的编号while(n){switch(n){case 1:in();break;case 2:show();break;case 3:search();break;case 4:del();break;case 5:modify();break;case 6:total();break;default:printf("输入编码有误!正在返回...");Sleep(3000);break;}menu(); //执行完功能再次显示菜单界面scanf("%d",&n);}}void menu() //自定义函数实现菜单功能{system("cls");system("date /t");system("time /t");printf("\n\n\n\n\n");printf("\t\t╔══════════某某某通讯录══════════╗\n");printf("\t\t║※0. 退出║\n");printf("\t\t║※1. 添加║\n");printf("\t\t║※2. 查看║\n");printf("\t\t║※3. 查找║\n");printf("\t\t║※4. 删除║\n");printf("\t\t║※5. 修改║\n");printf("\t\t║※6. 联系人总数║\n");printf("\t\t╚══════════════════════════╝\n\n");printf("\t\t请选择(0-6):");}void in() //添加联系人{int i,m=0; //m是记录的条数char ch[2];FILE *fp; //定义文件指针if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++; //统计当前记录条数}fclose(fp);if(m==0)printf("当前无记录!\n");else{system("cls");printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG); //将信息按指定格式输出printf(BOTTOM_B);}if((fp=fopen("data","wb"))==NULL) //以只写二进制方式打开文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}for(i=0;i<m;i++)fwrite(&stu[i] ,LEN,1,fp); //如果原来有记录,就将记录写入到磁盘文件中printf("是否添加?(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要添加联系人{back:printf("请输入联系人姓名:");scanf("%s",&stu[m].name); //输入姓名for(i=0;i<m;i++)if(strcmp(stu[i].name,stu[m].name)==0){printf("您输入的联系人已存在!\n");goto back;}printf("请输入联系人号码:");scanf("%s",stu[m].num);if(fwrite(&stu[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件{printf("保存'%s'失败!是否继续?(y/n):",stu[m].name);scanf("%s",ch);continue;}else{printf("添加'%s'成功!\n",stu[m].name);m++;}printf("是否继续?(y/n):"); //询问是否继续scanf("%s",ch);}printf("正在返回...");fclose(fp);order();return;}void show() //显示联系人{FILE *fp;int i,m=0;if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;}fclose(fp);if(m>0){printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG); //将信息按指定格式输出printf(BOTTOM_B);}elseprintf("当前无记录!");printf("按任意键返回...");getch();}void del() //删除联系人函数{FILE *fp;int i,j,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件,正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:");scanf("%s",sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0)break;if(i==m){printf("找不到'%s'!正在返回...",sname);Sleep(3000);return;}printf("已找到'%s',是否删除?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要进行删除{for(j=i;j<m;j++)stu[j]=stu[j+1]; //将后一个记录移到前一个记录的位置m--; //记录的总个数减1printf("删除'%s'成功!\n",sname);}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++) //将更改后的记录重新写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存失败!正在返回...\n");Sleep(3000);}fclose(fp);show();}void search() //自定义查找函数{FILE *fp;int i,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}back1: printf("请输入联系人姓名:");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //查找输入的号码是否在记录中{printf("已找到'%s',是否显示?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf(TITLE_T);printf(NAME);printf(GESHI,NEIRONG); //将查找出的结果按指定格式输出printf(BOTTOM_B);}else{printf("正在返回...");Sleep(3000);return;}}if(i==m+1){printf("找不到'%s',是否继续?(y/n):",sname); //未找到要查找的信息scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要继续查找联系人goto back1;printf("正在返回...");Sleep(3000);return;}printf("按任意键返回...\n");getch();}void modify(){FILE *fp;int i,j,m=0;char sname[15];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:\n");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //检索记录中是否有要修改的信息break;if(i<m){printf("已找到'%s',请修改!\n",sname);printf("请输入联系人姓名:\n");scanf("%s",stu[i].name); //输入名字printf("请输入联系人号码:\n"); //输入号码scanf("%s",stu[i].num);}else{printf("找不到'%s'!正在返回...",sname);Sleep(3000);return;}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++) //将新修改的信息写入指定的磁盘文件中{printf("保存'%s'失败!正在返回...",sname);Sleep(3000);return;}fclose(fp);order();show();}void total() //自定义计算总人数函数{FILE *fp;int m=0;if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;printf("此通讯录总共有%d名联系人!\n",m); //将统计的个数输出fclose(fp);printf("\n按任意键返回...\n");getch(); //输入任意键返回}void order() //自动排序函数{FILE *fp;struct student t; //用于交换信息int i=0,j=0,m=0; //i,j用于循环if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp))m++;for(i=0;i<m-1;i++)for(j=i+1;j<m;j++) //双重循环实现联系人比较并交换if((strcmp(stu[i].name,stu[j].name))>0){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data","wb"))==NULL){printf("文件打开失败!正在返回...\n");Sleep(3000);return;}for(i=0;i<m;i++) //将重新排好序的内容重新写入指定的磁盘文件中if(fwrite(&stu[i],LEN,1,fp)!=1){printf("排序失败!正在返回...");Sleep(3000);return;}fclose(fp);}。

相关文档
最新文档