概括:
用结构体和数组,实现通讯录功能。目前完成六个基础功能:添加、查看、删除、查找、修改、排序。
若有好的建议或意见,欢迎留言!
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 15 #define M 100 void showscreen(); void addlinkman(); void showlinkman(); void deletelinkman(); void searchlinkman(); void changelinkman(); void sortlinkman(); static int i_len = 0; struct Demo { //int id; char name[N]; char sex[N]; char address[N]; char phonenum[N]; }linkman[M]; int main() { system("clear"); showscreen(); return 0; } //选择菜单 void showscreen() { int num_select; printf("* * * * * * * * * * * *\n"); printf("* * * 功能列表 * * *\n"); printf("* * * 1.添加 * * *\n"); printf("* * * 2.查看 * * *\n"); printf("* * * 3.删除 * * *\n"); printf("* * * 4.查找 * * *\n"); printf("* * * 5.修改 * * *\n"); printf("* * * 6.排序 * * *\n"); printf("* * * 7.退出 * * *\n"); printf("* * * * * * * * * * * *\n"); printf("\n"); printf("序号选择功能: "); scanf("%d", &num_select); switch (num_select) { case 1: { addlinkman(); break; } case 2: { showlinkman(); break; } case 3: { deletelinkman(); break; } case 4: { searchlinkman(); break; } case 5: { changelinkman(); break; } case 6: { sortlinkman(); break; } case 7: { printf("退出系统!\n"); exit(0); break; } default: { printf("输入有误!请重新选择\n"); showscreen(); } } } //添加功能 void addlinkman() { char new_linkman[N]; int i; int continue_1=1; char continue_choice; printf("\n"); printf("输入姓名:"); scanf("%s", new_linkman); for (i = 0; i < i_len; i++) //加个判断 是否重复 { if((strcmp(new_linkman, linkman[i].name)) == 0) { printf("已有该联系人!\n"); printf("\n"); goto end_add; } } strcpy(linkman[i_len].name, new_linkman); strcpy(new_linkman,""); printf("输入性别:"); scanf("%s", new_linkman); strcpy(linkman[i_len].sex, new_linkman); strcpy(new_linkman,""); printf("输入地址:"); scanf("%s", new_linkman); strcpy(linkman[i_len].address, new_linkman); strcpy(new_linkman,""); printf("输入号码:"); scanf("%s", new_linkman); strcpy(linkman[i_len].phonenum, new_linkman); strcpy(new_linkman,""); printf("\n"); printf("添加成功!\n"); i_len++; while(continue_1) { printf("是否继续添加<y/n>:"); getchar(); scanf("%c", &continue_choice); if(continue_choice == 'y') { continue_1 = continue_1 - 1; addlinkman(); } else if(continue_choice == 'n') { continue_1 = continue_1 - 1; printf("\n"); system("clear"); goto end_add; } else { printf("输入有误!重新输入\n"); continue; } } end_add:showscreen(); /*for(i = 0; i < i_len; i++) //给每个结构体赋予序号 { linkman[i].id= i+1; }*/ } //查看功能 void showlinkman() { int i; system("clear"); if(i_len == 0) { printf("通讯录暂时为空,请添加!\n"); printf("\n"); goto end_show; } printf("联系人信息如下:\n"); for(i = 0; i < i_len; i++) { if(*linkman[i].name == 0 || *linkman[i].phonenum == 0) { continue; } printf("\n"); printf(" 姓名: %s\n", linkman[i].name); printf(" 性别: %s\n", linkman[i].sex); printf(" 地址: %s\n", linkman[i].address); printf(" 号码: %s\n", linkman[i].phonenum); printf("\n"); } end_show:showscreen(); } //删除功能 void deletelinkman() { int i; int continue_1=1; char continue_choice; char *tmp_data; tmp_data = malloc (sizeof(char) * N); system("clear"); if(i_len == 0) { printf("通讯录为空,请先添加!\n"); printf("\n"); goto end_delete; } return_start:printf("\n"); printf("输入要删除的姓名或者号码: "); //判断是否存在 然后删除 getchar(); scanf("%s", tmp_data); for(i = 0; i < i_len; i++) { if(strcmp(linkman[i].name,tmp_data) != 0 || strcmp(linkman[i].phonenum,tmp_data) != 0 ) { printf("联系人不存在,请重新输入:\n"); printf("\n"); goto return_start; } } printf("\n"); printf("是否确认删除!!<y/n>"); getchar(); scanf("%c", &continue_choice); if(continue_choice == 'y') { for(i = 0; i < i_len; i++) { if(!strcmp(linkman[i].name, tmp_data) || !strcmp(linkman[i].phonenum, tmp_data)) { memset(linkman[i].name,0,sizeof(linkman[i].name)/sizeof(linkman[i].name[0])); memset(linkman[i].sex,0,sizeof(linkman[i].sex)/sizeof(linkman[i].sex[0])); memset(linkman[i].address,0,sizeof(linkman[i].address)/sizeof(linkman[i].address[0])); memset(linkman[i].phonenum,0,sizeof(linkman[i].phonenum)/sizeof(linkman[i].phonenum[0])); printf("删除成功!\n"); i_len--; printf("\n"); } } } else if(continue_choice == 'n') { system("clear"); goto end_delete; } end_delete:showscreen(); } //查找功能 void searchlinkman() { char *search_cnd; search_cnd = malloc (sizeof(char) * N); int i, count=0; system("clear"); if(i_len == 0) { printf("通讯录为空,请先添加!\n"); printf("\n"); goto end_search; } printf("输入查找的姓名或号码:"); getchar(); scanf("%s",search_cnd); printf("\n"); printf("查找的信息:\n"); for(i = 0; i < i_len; i++) { if(!strncmp(linkman[i].name, search_cnd,N) || !strncmp(linkman[i].phonenum, search_cnd,N)) { printf(" 姓名: %s\n", linkman[i].name); printf(" 性别: %s\n", linkman[i].sex); printf(" 地址: %s\n", linkman[i].address); printf(" 号码: %s\n", linkman[i].phonenum); printf("\n"); count++; } } if(count == 0) { printf("未找到相关信息!\n"); printf("\n"); } end_search:showscreen(); } //修改功能 void changelinkman() { char *changename; char *changesex; char *changeaddress; char *changephonenum; char *change_information; char continue_choice; changename = malloc(sizeof(char) * 15); changesex = malloc(sizeof(char) * 15); changeaddress = malloc(sizeof(char) * 15); changephonenum = malloc(sizeof(char) * 15); system("clear"); if(i_len == 0) { printf("通讯录为空,请先添加!\n"); printf("\n"); goto end_change; } printf("输入要修改姓名或号码!:"); scanf("%s", change_information) ; int i; for(i = 0; i < i_len; i++) { if(!strcmp(linkman[i].name,change_information)|| !strcmp(linkman[i].phonenum,change_information)) { printf("原来的信息:\n"); printf("姓名:%s\n",linkman[i].name); printf("性别:%s\n",linkman[i].sex); printf("地址:%s\n",linkman[i].address); printf("手机号码:%s\n",linkman[i].phonenum); printf("请确定是否修改(y/n): "); getchar(); scanf("%c", &continue_choice); if(continue_choice == 'y') { printf("\n"); printf("请输入要修改的姓名:"); scanf("%s", changename); strcpy(linkman[i].name,changename); printf("请输入要修改的性别:"); scanf("%s",changesex); strcpy(linkman[i].sex,changesex); printf("请输入要修改的地址:"); scanf("%s",changeaddress); strcpy(linkman[i].address,changeaddress); printf("请输入要修改的号码:"); scanf("%s",changephonenum); strcpy(linkman[i].phonenum,changephonenum); } if(continue_choice == 'n') { goto end_change; } } } system("clear"); end_change:showscreen(); } //排序功能 void sortlinkman() { int i; int j; char *tmp_name; char *tmp_sex; char *tmp_address; char *tmp_phonenum; tmp_name = (char *) malloc (sizeof(char) * N); tmp_sex = (char *) malloc (sizeof(char) * N); tmp_address = (char *) malloc (sizeof(char) * N); tmp_phonenum = (char *) malloc (sizeof(char) * N); system("clear"); for(i = 0; i < i_len - 1; i++) { for(j = 0; j < i_len - i - 1; j++) { if(strcmp(linkman[j].name,linkman[j+1].name)>0) { strcpy(tmp_name,linkman[j+1].name); strcpy(linkman[j+1].name,linkman[j].name); strcpy(linkman[j].name,tmp_name); strcpy(tmp_sex,linkman[j+1].sex); strcpy(linkman[j+1].sex,linkman[j].sex); strcpy(linkman[j].sex,tmp_sex); strcpy(tmp_address,linkman[j+1].address); strcpy(linkman[j+1].address,linkman[j].address); strcpy(linkman[j].address,tmp_address); strcpy(tmp_phonenum,linkman[j+1].phonenum); strcpy(linkman[j+1].phonenum,linkman[j].phonenum); strcpy(linkman[j].phonenum,tmp_phonenum); } } } printf("排序结束.\n"); showscreen(); }