(完整版)用汇编语言实现电话本功能详细代码

合集下载

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位联系⼈,所以⾃动进⾏增容。

(完整word版)通讯录管理系统源代码

(完整word版)通讯录管理系统源代码

源代码:#include "stdio.h"#include ”stdlib。

h"#include "string.h”#include "conio.h”#include "stdlib.h”#define null 0struct record{char name[20];char phone[20];char adress[40];char postcode[10];char e_mail[30];}student[500];struct LinkList{struct record US;struct LinkList *next;}a;struct LinkList *head=null;int num=0;FILE *fp;int menu_select();int adduser();int list();int search();int display();int add();int listbyname();int dele();int save();int exit();void main(){system(”cls”);for(;;){switch(menu_select()){case 0:adduser();break;case 1:list();break;case 2:search();break;case 3:display();break;case 4:add();break;case 5:listbyname();break;case 6:dele();break;case 7:save();break;case 8:exit(0);}}}menu_select(){char s[80];int a;printf("*_* press any key enter menu!*_*\n");getch();system(”cls”);printf(”\t\t********************MENU*********************\n\n");printf("\t\t 0。

通讯录代码

通讯录代码

通讯录代码#include<stdio.h>#include<string.h>int main(){int i=0;while(1){int a,j,e,l,t,x,y;char ming[100][4],hao[100][12],b[4],u[4],g[12];printf("输入1则是录入,输入0则是查找\n");scanf("%d",&a);//选项选择if(a==1){printf("输入姓名\n");scanf("%s",&ming[i]);printf("输入电话号码\n");scanf("%s",&hao[i]);for(t=0;t<i;t++){for(e=0;e<i;e++){if(ming[e][0]>ming[e+1][0])//第一个字母排序{strcpy(u,ming[e]);strcpy(ming[e],ming[e+1]);strcpy(ming[e+1],u);strcpy(g,hao[e]);strcpy(hao[e],hao[e+1]);strcpy(hao[e+1],g);}if(ming[e][0]==ming[e+1][0]){if(ming[e][1]>ming[e+1][1])//第二个字母排序{strcpy(u,ming[e]);strcpy(ming[e],ming[e+1]);strcpy(ming[e+1],u);strcpy(g,hao[e]);strcpy(hao[e],hao[e+1]);strcpy(hao[e+1],g);}if(ming[e][1]==ming[e+1][1]){if(ming[e][2]>ming[e+1][2])//第三个字母排序{strcpy(u,ming[e]);strcpy(ming[e],ming[e+1]);strcpy(ming[e+1],u);strcpy(g,hao[e]);strcpy(hao[e],hao[e+1]);strcpy(hao[e+1],g);}}}}}//字母排序该循环遵循排序第一个字母,遇到相同的排序下一个字母i=i+1;}//电话录入if(a==0){ l=1;x=0;y=0;printf("输入查找姓名\n");scanf("%s",&b);for(j=0;j<i;j++){if(b[0]==ming[j][0]){x=1;if(b[1]==ming[j][1]){y=1;if(b[2]==ming[j][2]){l=0;break;}}else if(y==1){break;}}else if(x==1){break;}}//该循环遵循找到第一个字母,在该字母区间进行下一个字母认证if(l==0){printf("%s\n",hao[j]);}elseprintf("未有此人电话号码\n");}//快速找到电话号码}return 0;}。

汇编实验四:查找电话号码

汇编实验四:查找电话号码

汇编实验四:查找电话号码一、实验目的学习用汇编语言设计与编写子程序二、实验要求(1) 要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;(2) 程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;(3) 凡有新的输入后,程序应按人名对电话号码表重新排序; (4) 程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。

name tel.X X X X X X X X三、实验提示:(1)显示提示符’Input name:’;(2)调用子程序 input_name 接收人名;(3)调用子程序 stor_name 把人名存入电话号码表 tel_tab 中:(4)显示提示符’Input a telephone number:’;(5)调用子程序 inphone 接收电话号码,并把它存入电话号码表tel_tab中; (6)如输入已结束则调用 name_sort 子程序对电话号码表接人名排序; (7)显示提示符’Do you want a telephone number ?(Y/N)’; (8)回答N收退出程序;(9)回答Y则再显示提示符’name ?’;(10)调用子程序 input_name接收人名;(11)调用子程序 name_search 在电话号码表中查找所要的电话号码; (12)调用子程序 printline 按要求格式显示人名及电话号码; (13)重复查号提示符直至用户不要求查号为止。

四、实验程序datarea segmenttel_name label bytemaxnlen db 20namelen db ?namefld db 21 dup(?) ;定义20个字符的用于存放人名的字符串tel_num label bytemaxtlen db 8tellen db ?telfld db 9 dup(?) ;定义8个字符的用于存放电话号码的字符串tel_tab db 50 dup(20 dup(' '), 8 dup(' ')) ;定义可存放50项纪录的电话号码表tel_sav db 28 dup(?), 13, 10, '$'list db 20 dup(' '), 8 dup(' '), 0dh, 0ah, '$' ;定义电话号码表的每个条目string1 db 'Input name:', '$'string2 db 'Input a telphone number:', '$'string3 db 'Do you want a telephone number?(Y/N)', '$'string4 db 'name?', '$'string5 db 'Would you like to input a telephone list?(Y/N)', '$' string6 db 'The Tel_Lab is empty.', '$'string7 db 'There is no list fitting.', '$'string8 db 'name tel. ', '$'string9 db 'Do you want a Tel_Lab?(Y/N)', '$'endadd dw ?swapped db 0tel_count db 0 ;计算电话号码表中的条目数量datarea endsprognam segmentmain proc far ;主程序assume cs: prognam, ds: datarea, es: datareastart:push dssub ax, axpush axmov ax, datareamov ds, axmov es, axcldlea di, tel_tab ;将电话号码表传给目的变址寄存器cho_inp: ;进行选择,是否输入条目mov ah, 09lea dx, string5int 21h ;输出“Would you like to in put a telephone list?(Y/N)” mov ah, 01int 21h ;输入,进行选择mov dl, 4ehcmp al, dlje sort_n ;若输入为N,则跳转至sort_n,进行电话号码表的排序mov dl, 6ehcmp al, dlje sort_n ;若输入为n,则同上mov dl, 59hcmp al, dlje input_n ;若输入为Y,则跳转至input_n,进行电话号码条目的输入mov dl, 79hcmp al, dlje input_n ;若输入为y,则同上mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hjmp cho_inp ;若输入不为Y(y)/N(n),则返回cho_inp,重新进行选择input_n: ;输入人名,并保存mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hmov ah, 09lea dx, string1int 21h ;输出“Input name:”call input_name ;调用子程序input_name接收人名call stor_name ;调用子程序stor_name把人名存入电话号码表tel_tab中input_p: ;输入电话号码,并保存lea dx,string2mov ah, 09int 21h ;输出“Input a telephone number:”call inphone ;调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中jmp cho_inp ;跳转至cho_inp,按提示选择是否继续输入条目sort_n: ;对电话号码表进行排序mov ah, 02mov dx, 0dhint 21hmov dx, 0ahint 21hcall name_sort ;调用子程序name_sort,对电话号码表按人名排序print_lab: ;输出整个电话号码表lea dx, string9mov ah, 09int 21h ;输出“Do you want a tel_lab?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje search_n ;若输入为N,则跳转至search_n,进行电话号码的查找mov dl, 6ehcmp al, dlje search_n ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_p ;若输入为Y,则跳转至goon_p,继续该部分操作mov dl, 79hcmp al, dlje goon_p ;若输入为y,则同上jmp print_lab ;若输入不为Y(y)/N(n),则跳转至print_lab,重新进行选择goon_p: ;继续输出电话号码表的操作call printall ;调用子程序printall,输出整个电话号码表search_n: ;查找电话号码条目lea dx, string3mov ah, 09int 21h ;输出“Do you want a telephone number?(Y/N)”mov ah, 01int 21h ;输入,进行选择mov cl, almov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hmov al, clmov dl, 4ehcmp al, dlje exit ;若输入为N,则跳转至exit,退出程序mov dl, 6ehcmp al, dlje exit ;若输入为n,则同上mov dl, 59hcmp al, dlje goon_s ;若输入为Y,则跳转至goon_s,继续该部分操作mov dl, 79hcmp al, dlje goon_s ;若输入为y,则同上jmp search_n ;若输入不为Y(y)/N(n),则跳转至search_n,重新进行选择goon_s: ;继续查找操作lea dx, string4mov ah, 09int 21h ;输出“name?”mov ah, 02mov dl, 0dhint 21hmov ah, 02mov dl, 0ahint 21hcall input_name ;调用子程序input_name,接收人名call name_search ;调用子程序name_search,对电话号码表按人名进行查找jmp search_n ;跳转至search_n,继续进行查找exit: ;退出程序retmain endpinput_name proc near ;子程序input_name,用于接受人名mov ah, 0ahlea dx, tel_nameint 21h ;输入人名mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, namelenmov cx, 20sub cx, bxnamebrk: ;将人名除外所剩下的字符用空格填满mov namefld[bx], 20hinc bxloop namebrkretinput_name endpstor_name proc near ;子程序stor_name,用于把人名存入电话号码表tel_tab中inc tel_count ;将人名存入电话号码之后,电话号码条目数量增1 cldlea si, namefldmov cx, 10rep movswretstor_name endpinphone proc near ;子程序inphone,用于接受电话号码,并把它存入电话号码表tel_tab中mov ah, 0ahlea dx, tel_numint 21h ;输入电话号码mov ah, 02hmov dl, 0dhint 21hmov dl, 0ahint 21hmov bh, 0mov bl, tellenmov cx, 8sub cx, bxtelbrk: ;将电话号码数字除外,所剩下的字符用空格填满mov telfld[bx], 20hinc bxloop telbrkcldlea si, telfldmov cx, 4rep movswretinphone endpname_sort proc near ;子程序name_sort,用于对电话号码表按人名排序sub di, 56mov endadd, dicmp al, 0je emptystart_sort:mov swapped, 0lea si, tel_tabcmp_n:mov cx, 20mov di, siadd di, 28mov ax, dimov bx, sirepe cmpsbjbe no_exchgcall exchange_name ;调用子程序exchang_name,将两个相邻的条目进行对调jmp no_exchgempty: ;若电话号码表为空mov ah, 09lea dx, string6int 21h ;输出“The tel_lab is empty.”jmp exit_sortno_exchg: ;不进行对调mov si, axcmp si, endaddjbe cmp_ncmp swapped, 0jnz start_sortexit_sort:retname_sort endpexchange_name proc near ;子程序exchange_name,用于将电话号码表中的两个相邻的条目进行对调mov cx, 14lea di, listmov si, bxrep movswmov cx, 14mov di, bxrep movswmov cx, 14lea si, listrep movswmov swapped, 1retexchange_name endpname_search proc near ;子程序name_search,用于按人名在电话号码表中查找所要的电话号码push dimov al, tel_countlea si, tel_tabagain:cmp al, 0je no_listmov cx, 20lea di, namefldmov bx, sirepz cmpsbjb find_nja no_listdec almov ah, 09lea dx, string8int 21h ;输出“name tel. ”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hcall printline ;调用子程序printline,输出所查找到的条目jmp exit_schfind_n:mov si, bxadd si, 28jmp againno_list: ;若不存在该条目mov ah, 09lea dx, string7int 21h ;输出“There is no list fitting.”mov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hexit_sch:pop diretname_search endpprintline proc near ;子程序printline,用于输出所查找到的电话号码条目mov si, bxlea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hretprintline endpprintall proc near ;子程序printall,用于输出整个电话号码表push dimov ah, 09lea dx, string8int 21hmov ah, 02mov dl, 0dhint 21hmov dl, 0ahint 21hmov bl, tel_countcmp bl, 0je empty_lablea si, tel_tabnext:lea di, listmov cx, 14rep movswmov ah, 09lea dx, listint 21hdec bljnz nextjmp exit_pallempty_lab:mov ah, 09lea dx, string6int 21hexit_pall:pop diretprintall endpprognam endsend start五、模块说明主函数main:用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程接收人名函数input_name:输入人名,将此人名保存至缓冲区,并用空格补足保存人名函数stor_name:将人名从缓冲区中取出,保存在电话号码表中的人名区中接收并且保存电话号码函数inphone:输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区中电话号码表排序函数name_sort:运用冒泡法,对电话号码表按人名排序对调条目位置函数exchange:将不符合排序规律的条目的位置进行调整查找电话号码函数name_search:输入人名,在电话号码表中依次比较人名进行查找输出电话号码条目函数printline:查找到条目之后,将条目输出输出电话号码表函数printall:将整个电话号码表的所有条目依次输出六、模块层次图主函数main接收保存接收并且电话号查找电输出电人名人名保存电话码表排话号码话号码函数函数号码函数序函数函数表函数 Input_Stor_ inphone Name_ Name_ printall name name sort search对调条目输出电话位置函数号码条目exchange 函数printline七、调试结果。

通讯录的制作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语⾔实现通讯录的详细代码⽬录(⼀)实现思路1.通讯录功能2.模块化实现各⽅⾯的功能3.代码实现(⼆)源代码A.test.cB.Contact.hC.Contact.c(⼀)实现思路1.通讯录功能添加好友,删除好友,查找好友,修改好友信息,对好友进⾏排序2.模块化实现各⽅⾯的功能a. test.c测试通讯录功能b. Contact.c实现通讯录功能c. Contact.h包含通讯录实现的头⽂件3.代码实现(⼆)源代码A.test.c#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include <string.h>#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("*** 7.Help 8.About0 ***\n");printf("*** 0.Exit ***\n");printf("*******************************\n");}int main(){int input = 0;//创建通讯录InitContact(&con);//使size的初始值,以及好友信息初始化为0; 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:printf("退出通讯录!");break;//通讯录的使⽤以及帮助case Help:HelpContact();break;//关于通讯录case About:AboutContact();break;//选择错误default:printf("选择错误!");break;}} while (input);return 0;}B.Contact.h#define _CRT_SECURE_NO_WARNINGS 1#define Max 1000#define Max_name 20#define Max_sex 5#define Max_tele 12#define Max_addr 30enum OptionDel,Search,Modify,Show,Sort,Help,About};//创建⼀个结构体来存放通讯录中要存放的信息struct PeoInfo{char name[Max_name];int age;char sex[Max_sex];char tele[Max_tele];char addr[Max_addr];};//通讯录类型struct Contact{struct PeoInfo data[Max];//存放⼀个信息,包括好友姓名,年龄,性别,电话,地址 int size;//记录当前已经有的元素个数//存⼊⼀个好友,size加1,表⽰通讯录⼈数增加⼀个};//声明函数//1.对通讯录进⾏初始化void InitContact(struct Contact* ps);//增加好友信息void AddContact(struct Contact* ps);//删除好友void DelContact(struct Contact* ps);//查找指定姓名的好友void SearchContact(struct Contact* ps);//显⽰好友信息void ShowContact(const struct Contact* ps);//修改好友信息void ModifyContact( struct Contact* ps);//按名字⾸字母对通讯录的好友进⾏排序void SortContact( struct Contact* ps);//帮助使⽤通讯录void HelpContact();//关于通讯录void AboutContact();C.Contact.c#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"#include <stdio.h>#include <stdlib.h>#include <string.h>//初始化通讯录void InitContact(struct Contact* ps){memset(ps->data, 0, sizeof(ps->data));ps->size = 0;//设置通讯录最初只有0个元素}void HelpContact(){printf("各按键的使⽤:\n");printf("1.添加好友\n");printf("2.删除好友\n");printf("3.查找好友信息\n");printf("4.修改好友信息\n");printf("5.显⽰好友信息\n");printf("6.对好友进⾏排序\n");printf("7.帮助使⽤通讯录\n");printf("8.关于通讯录\n");printf("谢谢使⽤通讯录!\n");}//关于通讯录void AboutContact(){printf("通讯录⼀般指在⽇常⽣活中⽤笔记录,也在⼿机,电脑,电⼦字典等电⼦产品中拥有这个功能。

通讯录的制作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++源代码

/*第5题电话簿管理*//*本程序是在第5章第5题的基础之上改进而来的。

增加了修改记录的功能、录入时间的显示及存储、智能查询等功能。

汉化了菜单与帮助,并且使用了类与对象重建了系统。

,*/#include<fstream.h>#include<conio.h>#include<iostream.h>#include<iomanip.h>#include<time.h>#include<string.h>#include<stdlib.h>#include"friend_node.h" //此自定义头文件内有类的封装//主函数void main(void){friend_node record;record.welcome();}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//各种所需函数.//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Customer cl;Customer::Customer(){strcpy(Customer::Customer_name,"");}void Customer::log_in(char *password,Customer cust) const//输入密码,{ifstream read_customer("customer.dat");while(!read_customer.eof()){read_customer.read((char*)(&cust),sizeof(cust));if(read_customer.fail()){cout<<"暂时没有建立任何用户,请先注册";cl.Register(&cl);}if(strcmp(password,cust.password)==0){cout<<"密码正确,欢迎进入";break;}else if(strcmp(password,cust.password)!=0){cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~非法入侵,严重警告~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";main();}}read_customer.close();}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~void Customer::Register(Customer *cust)//注册{system("cls"); //执行系统命令:清屏=clscin.get();cout<<"欢迎注册,成为我们的用户"<<endl;cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;cout<<"输入你的名字: ";cin.getline(Customer_name,30);cout<<"输入你的密码(至少六位): ";cin>>password;cin.get();system("cls");cout<<endl<<endl;cout<<"注册完毕"<<endl;cout<<"任意键进入"<<endl;getch();}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void friend_node::enter() //用户登陆系统{int x;cout<<endl<<endl<<endl;cout<<"1 用户等录 ";cout<<"2 用户注册 ";char password[10];cin>>x;switch(x){case 1:system("cls");cout<<endl<<endl;cout<<"请输入密码";cin.get();cin>>password;cin.get();cl.log_in(password,cl);break;case 2:system("cls");cout<<"注册新用户";cout<<"*************";cl.Register(&cl);ofstream write_customer("customer.dat",ios::app);write_customer.write((char*)&cl,sizeof(cl));write_customer.close();break;}}void friend_node::welcome()//欢迎菜单函数{cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;cout << "\t\t\t电话簿管理\n";cout << "\t\t\t修改及完善陈俞荣(0504520222)\n\n";cout << "\t\t\t进入用户登录界面";cin.get(pause);system("cls"); //执行系统命令:cls-清屏enter();//进入用户登录系统int choice;head_ptr = NULL; // 初始化链表头指针。

C语言程序设计编程练习指导-电话通讯录设计

电话通讯录设计一、总体构思1、联系人信息:姓名、电话、……2、系统功能:a)基本功能:显示所有联系人、新增一个联系人、退出系统;b)更多功能:查找某个联系人、修改某个联系人、删除某个联系人c)扩展功能:按姓名排序、……3、基本流程:显示菜单、输入命令、调用功能、循环4、程序基本框架说明:以上用menu()显示菜单,用cmd接受命令,用switch调用相应功能。

另程序中未完全包含必要的头文件如stdlib.h、string.h等,可自行补充完整。

二、最基本的设计:采用简单数组1、定义数组(全局)说明:以上用name存放联系人姓名,用tel存放联系人手机号码,用num存放并跟踪联系人数量。

因程序各处均需用到,故定义为全局类型。

2、基本功能函数:菜单、显示、添加1)显示功能菜单2)显示所有联系人说明:以上因联系人数量由num确定,故可简单使用for循环实现逐个显示。

3)新增一个联系人说明:a)以上仅新增一个联系人,故存放于相关数组的末尾,用num可跟踪位置。

b)当然可考虑实现能重复新增、直至满足一定条件即停止的功能。

阶段总结一:至此可实现通讯录的最基本功能(可输入、可显示),程序典型运行情况如下图所示:存在缺陷:每次运行程序时,均需要重新输入数据。

因此必须考虑数据持久保存问题,以便于后续的扩展功能设计与调试。

3、 实现文件存、取功能1) 在main()中增加对文件存取功能的调用:程序刚开始运行时,若选择‘1’,则无任何数据可显示。

每选择‘2’,则提示输入name 和tel ;随后再选择’1’,则可以显示已输入数据。

说明:以上在程序退出前增加save()函数以将数据写入文件,相应在程序开始时增加load()函数以从文件读入数据。

2)将数据写(存)入文件说明:以上先按照指定路径打开一个文件用以写(w),然后用for循环依次向该文件写入当前num个联系人的name和tel信息,最后关闭文件。

3)从文件读(取)出数据说明:以上先打开一个文件用以读(r),因考虑其可能不存在,故必须判断打开是否出错,然后根据文件是否到达尾部的判断方式实现数据的循环读入。

手机通讯录设计报告附代码

课程名称:C++面向对象程序设计 系 别: 电气信息系专 业: 计算机科学与技术 学 期: 2010 日 期: 2010-7-12~2010-7-16 班 级:计算机08-6学 号: ************ 姓 名: 高恒桂 教师姓名: 徐小平 学 分: 成 绩:目 录课程设计报告装订线一、绪论 (3)二、设计内容 (4)1、选题 (4)2、系统功能 (4)3、应用到的技术 (4)三、设计要求 (4)四、设计环境 (5)1、操作系统 (5)2、开发工具 (5)3、PC机配置 (5)五、系统结构图 (5)六、功能实现 (6)1、系统运行 (6)2、添加联系人 (6)3、修改联系人 (7)4、删除联系人 (8)5、查找联系人 (9)6、查看所有联系人 (10)7、对联系人在文件中的存储位置进行排序 (11)8、系统运行结束 (12)七、遇到的问题和解决的方法 (12)八、设计心得 (13)九、参考文献 (13)十、附件 (14)1、头文件 (14)2、主函数 (14)3、函数实现文件 (15)需求分析在这个信息化的时代,手机已成为继固话之后最为通俗的交流工具。

在这个人与人关系愈加密切的时代,“通讯”成了生活中的必需品。

这就有这么一个系统记录下人与人之间的多样联系方式——手机通讯系统。

通过系统记录下对方的联系方式,既减轻了大脑的负担,又不在受各种条件的约束,做到便捷随身管理相关的联系信息,摆脱了传统电话簿,名片的累赘。

从长远利益来看,可是意义重大的环保之举。

根据市场需求,手机通讯录管理系统所记录的信息一般分为个人、商业、办公三类。

清晰了机主的联系方向。

针对性的分门别类,使系统具有了方便了机主的存储和快速查阅优势功能,大大减少了在电话簿,名片上机械翻阅查找过程的时间。

于此同时又根据手机随身携带的特殊性,在一定程度上比一般的制作文件又其次,因为手机是随身携带的通讯工具,这与记事本相比将在一定程度上保障联系人信息的安全性,相对避免了个人隐私信息外泄从而带来的损失。

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

一、 课程设计目的 运用所学的汇编语言写一个具有电话本功能的程序,达到提高动手能力及解决问题的能力。

二、 设计要求 1、 能够存储50个电话号码,包括人名(20个字符)、电话号码(8个字符)。 2、 系统可以随时接受新的人名和电话号码。 3、 具有随时查询号码的功能。要求输入人名后,在屏幕上显示相应的电话号码。 4、 具有删除号码的功能。要求输入人名后,系统自动删除相应的号码。 5、 运行此系统后,要显示菜单选择的功能。

三、 程序设计思想 每个人的信息包括人名和号码,人名占20个字节,外加一个$字符,电话号码占8个字节,外加一个$字符,所以每个人的信息一共占30个字节。可以开辟一片连续的存储区,包含30*50即1500个字节, 即ZHU DB 1500 DUP(0)。 另外再定义四个需要输入信息的变量,依次为: ZHU1 DB 21,0,21 DUP(0) ;搜索姓名变量 ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量 ZHU3 DB 9,0,9 DUP(0) ;添加号码变量 ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量 添加新的人名和号码时,可以通过10号功能调用,先将人名和号码暂时存放在ZHU2和ZHU3中,然后在逐字节地复制到ZHU 中,记住在人名和号码末尾加上$字符。查询号码时,将输入的要查询的人名存放在ZHU1中,然后再每隔30个字节与ZHU中的人名逐个字符地比较,若完全相等,则将人名下面的号码输出,否则说明要查询的人名不存在。删除时,先输入要删除的人名,同查询相似,按同样的方法在ZHU中寻找相应的数据区,若找到了,则从找到时下面一个人的信息开始,统一向上移动30个字节,若没有找到,则说明要删除的人名的信息不存在。

2

五、程序清单 DATAS SEGMENT OBF1 DB 'Welcome to use this phone book!$' OBF2 DB 'Please choose the function buttom(1/2/3):$' OBF11 DB '1 for inputing$' OBF16 DB '2 for searching$' OBF17 DB '3 for deleting$' OBF18 DB 'Other for exiting$' OBF3 DB 'Please input a new name(within 20 words):$' OBF4 DB 'please input the number(within 8 numbers):$' OBF5 DB 'Continue to input?(y/n)$' OBF6 DB 'Are you sure to end the phone book?(y/n)$' OBF7 DB 'Please input a name you want to search(within 20 words):$' OBF8 DB 'Got it,it is:$' OBF9 DB 'Have not found ,it does not exit!$' OBF10 DB 'Continue to search?(y/n)$' OBF12 DB 'Please input the name you want to delete(within 20 words):$' OBF13 DB 'The name you want to delete does not exit!$' OBF14 DB 'Success to delete!$' OBF15 DB 'Continue to delete?(y/n)$' ZHU1 DB 21,0,21 DUP(0) ;搜索(查询)姓名变量 ZHU2 DB 21,0,21 DUP(0) ;添加姓名变量 ZHU3 DB 9,0,9 DUP(0) ;添加号码变量 ZHU4 DB 21,0,21 DUP(0) ;删除姓名变量 ZHU DB 1500 DUP(0) DATAS ENDS

STACKS SEGMENT DW 32 DUP(0) STACKS ENDS

CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV BP,-30 BEGIN:CALL NEXTLINE MOV DX,OFFSET OBF1 ;显示菜单选择界面 MOV AH,9 INT 21H CALL NEXTLINE ;调用换行函数 MOV DX,OFFSET OBF2 MOV AH,9 3

INT 21H CALL NEXTLINE MOV DX,OFFSET OBF11 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF16 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF17 MOV AH,9 INT 21H CALL NEXTLINE MOV DX,OFFSET OBF18 MOV AH,9 INT 21H CALL NEXTLINE MOV AL,0 MOV AH,1 INT 21H CMP AL,'1' ;选择1,输入信息 JE INPUT CMP AL,'2' ;选择2,查询信息 JE SEARCH CMP AL,'3' ;选择3,删除信息 JE DELETE JMP STOP

INPUT: CALL NEXTLINE ADD BP,30 MOV SI,BP S2:MOV BYTE PTR ZHU[SI],0 ;清除ZHU中最后一个人的信息后面的30 INC SI ; 个字节中非0的单元 CMP [SI],0 JNE S2 MOV SI,BP MOV DX,OFFSET OBF3 MOV AH,9 INT 21H MOV DX,OFFSET ZHU2 ;输入的人名存放在ZH2中 MOV AH,10 INT 21H MOV BX,-1 4

S5:INC BX ;为避免ZHU2中刚输入的信息没有完全覆 CMP BYTE PTR ZHU2[BX+2],0DH ;盖上一次的信息,将出车符(0DH)及其后 JNE S5 ;面的字节归0 S6:MOV BYTE PTR ZHU2[BX+2],0 INC BX CMP BX,20 JNE S6 MOV BYTE PTR ZHU2[BX+2],0DH MOV CX,20 MOV BX,-1 S1:INC BX ;将ZH2复制到ZHU中 MOV DL,BYTE PTR ZHU2[BX+2] MOV BYTE PTR ZHU[SI+BX],DL LOOP S1 MOV BYTE PTR ZHU[SI+20],'$' CALL NEXTLINE MOV DX,OFFSET OBF4 MOV AH,9 INT 21H MOV DX,OFFSET ZHU3 MOV AH,10 INT 21H MOV BX,-1 S7:INC BX ;为避免刚输入的号码没有完全覆盖上一次的号码,将这次输 CMP BYTE PTR ZHU3[BX+2],0DH ; 入的号码的最后一位的回车符(0DH)换成$ JNE S7 MOV BYTE PTR ZHU3[BX+2],'$' ADD SI,21 MOV CX,8 MOV BX,-1 S3:INC BX MOV DL,BYTE PTR ZHU3[BX+2] MOV BYTE PTR ZHU[SI+BX],DL LOOP S3 MOV BYTE PTR ZHU[SI+8],'$' CALL NEXTLINE MOV DX,OFFSET OBF5 MOV AH,9 INT 21H CALL NEXTLINE MOV AH,1 INT 21H CMP AL,'Y' JE INPUT 5

CMP AL,'y' JE INPUT JMP BEGIN

STOP: CALL NEXTLINE MOV DX,OFFSET OBF6 MOV AH,9 INT 21H MOV AL,0 MOV AH,1 INT 21H CMP AL,'Y' JE EXIT CMP AL,'y' JNE BEGIN EXIT:MOV AX,4C00H ;退出电话本程序 INT 21H

SEARCH:CALL NEXTLINE MOV DX,OFFSET OBF7 ;输入你要搜索的名字,存放在ZHU1中 MOV AH,9 INT 21H MOV DX,OFFSET ZHU1 MOV AH,10 INT 21H MOV BX,-1 L5:INC BX ;为避免ZHU1刚输入的信息没有完全覆盖上一次的信息, CMP BYTE PTR ZHU1[BX+2],0DH ;将回车符(0DH)及其后面的字节归0 JNE L5 L6:MOV BYTE PTR ZHU1[BX+2],0 INC BX CMP BX,20 JNE L6 MOV BYTE PTR ZHU1[BX+2],0DH CALL NEXTLINE MOV CX,50 ;在ZHU中搜索与ZHU1相等的字符串 MOV SI,-30 L1:ADD SI,30 MOV BX,-1 L2:INC BX CMP BX,20 JE L3 PUSH AX MOV AL,BYTE PTR ZHU[SI+BX]

相关文档
最新文档