导航:首页 > 源码编译 > 通讯录的核心算法思想

通讯录的核心算法思想

发布时间:2022-04-26 22:29:44

① 用C语言设计通讯录要用到库函数中的哪些函数

"gotoxy()","moveto()"包含在#include <conio.h>中了.
转载一个程序给你:(ZT)

算法:将当前时间显示到屏幕,当时间发生变化时,清屏,显示新的时间(当有键盘操作时退出程序)。
显示时间格式:小时:分钟:秒

/* DEV C++ Win XP*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

typedef struct
{
int x;
int y;
}Point;

time_t now;
struct tm *pt,t1,t2;

int printpoint(Point p)
{
Point p1;
p1.x=p.x+2; p1.y=p.y+4;
gotoxy(p1.x,p1.y); printf("%c%c",2,2);
gotoxy(p1.x, p1.y+1); printf("%c%c",2,2);
p1.y+=4;
gotoxy(p1.x,p1.y); printf("%c%c",2,2);
gotoxy(p1.x,p1.y+1); printf("%c%c",2,2);
return 0;
}

int print0(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0¦¦i==12)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else
printf("%c%4s%c",2," ",2);
}
return 0;
}

int print1(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
printf("%5s%c"," ",2);
}
return 0;
}

int print2(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0¦¦i==6¦¦i==12)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else if(i>0&&i<6)
printf("%5s%c"," ",2);
else
printf("%c",2);
}
return 0;
}

int print3(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0¦¦i==6¦¦i==12)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else
printf("%5s%c"," ",2);
}
return 0;
}

int print4(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i<6) printf("%c%4s%c",2," ",2);
else if(i==6)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else printf("%5s%c"," ",2);
}
return 0;
}

int print5(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0¦¦i==6¦¦i==12)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else if(i>0&&i<6)
printf("%c",2);
else
printf("%5s%c"," ",2);
}
return 0;
}

int print6(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0¦¦i==6¦¦i==12)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else if(i>0&&i<6)
printf("%c",2);
else
printf("%c%4s%c",2," ",2);
}
return 0;
}

int print7(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0) printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else printf("%5s%c"," ",2);
}
return 0;
}

int print8(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0¦¦i==6¦¦i==12)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);

else printf("%c%4s%c",2," ",2);
}
return 0;
}

int print9(Point p)
{
int i=0;
for(;i<13;i++)
{
gotoxy(p.x+1, p.y+i);
if(i==0¦¦i==6¦¦i==12)
printf("%c%c%c%c%c%c",2,2,2,2,2,2);
else if(i>0&&i<6)
printf("%c%4s%c",2," ",2);

else
printf("%5s%c"," ",2);
}
return 0;
}

int clear(Point p)
{
int i=0;
for(;i<13;i++)
gotoxy(p.x,p.y+i); printf("%16s"," ");
return 0;
}

int printtime(Point p, int n)
{
int a,b;
Point pp;
a=n/10, b=n%10;
pp.x=p.x+8, pp.y=p.y;
switch(a)
{
case 0: print0(p); break;
case 1: print1(p); break;
case 2: print2(p); break;
case 3: print3(p); break;
case 4: print4(p); break;
case 5: print5(p); break;
}
switch(b)
{
case 0: print0(pp); break;
case 1: print1(pp); break;
case 2: print2(pp); break;
case 3: print3(pp); break;
case 4: print4(pp); break;
case 5: print5(pp); break;
case 6: print6(pp); break;
case 7: print7(pp); break;
case 8: print8(pp); break;
case 9: print9(pp); break;
}
return 0;
}

int main()
{
Point phour, pmin, psec,point1,point2;
phour.x=9, pmin.x=32, psec.x=55;
phour.y=pmin.y=psec.y=7;
point1.x=25, point2.x=49;
point1.y=point2.y=7;

clrscr();
textbackground(BLUE);
textcolor(YELLOW);
now=time(0);
pt=localtime(&now);
t1=*pt;
printtime(phour, t1.tm_hour);
printpoint(point1);
printtime(pmin, t1.tm_min);
printpoint(point2);
printtime(psec, t1.tm_sec);
while(1)
{
now=time(0);
pt=localtime(&now);
t2=*pt;
if(t2.tm_sec!=t1.tm_sec)
{
t1=t2;
clrscr();
printtime(phour, t1.tm_hour);
printpoint(point1);
printtime(pmin, t1.tm_min);
printpoint(point2);
printtime(psec, t1.tm_sec);
}
if(bioskey(1)==0) continue;
else exit(0);
}

return 0;
}

参考文献:FROM do熊

② 求一份数据结构课程设计的报告 内容是用c语言编写的通讯录(用数据结构算法来做)。通讯录需要写出思路

你好!

都有什么字段?实现什么功能模块?

③ 设计课题八:简单的同学通讯录程序设计

#include <cstdio>
#include <cstdlib>
#include <cstring>
int count=1;
struct node
{
char num[20];
char name[20];
char sex[20];
char work[50];
char phone[20];
char email[20];
};
node *stu;
int cmp(char *a,char *b)
{
int a1=strlen(a),b1=strlen(b),i;
if(a1>b1)
{
return 0;
}
else if(a1<b1)
{
return 1;
}
else
{
for(i=0;i<a1;i++)
{
if(a[i]>b[i])
{
return 0;
}
else if(a[i]<b[i])
{
return 1;
}
}
}

}
int start()
{
int n;
printf(" *********************WELCOME********************\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");
printf("请输入您的选择:\n");
scanf("%d",&n);
return n;
}
int main()
{
int count1=0,count2=0;
int n,i,j,flag,o;
int k;
FILE *fp;
node r;
char file[20];
char nnum[20];
char nname[20];
char nsex[20];
char nwork[50];
char nphone[20];
char nemail[20];
while(1)
{
n = start();
switch(n)
{
case 1:
printf("(1).添加数据\n");
printf("请输入添加的人的学号,姓名,性别,工作单位,电话号码,E-mail地址:\n");
scanf("%s%s%s%s%s%s",nnum,nname,nsex,nwork,nphone,nemail);
printf("请输入存储的的文件名:\n");
scanf("%s",file);
printf("文件是否存在?(1,表存在 0,表不存在)\n");
scanf("%d",&k);
fp=fopen(file,"a+");
if(fp==NULL)
{
printf("文件创建失败,请重新操作!\n");
break;
}
else
{
if(k==0)
{
if(count==1)
fprintf(fp,"%15s %10s %10s %15s %15s %20s\n","学号","姓名","性别","工作单位","电话号码","E-mail地址");
count++;
}
fprintf(fp,"%15s %10s %10s %15s %15s %20s\n",nnum,nname,nsex,nwork,nphone,nemail);
}
fclose(fp);
system("cls");
break;
case 2:
printf("(2).删除数据\n");
printf("请输入文件名:\n");
scanf("%s",file);
printf("请输入删除人物的名字:\n");
scanf("%s",nname);
fp=fopen(file,"a+");
if(fp==NULL)
{
printf("文件读取失败,请重新操作!\n");
break;
}
else
{
stu=NULL;
for(i=0;!feof(fp);i++) //读取文件
{
if(i==0)
stu=(node *)malloc(sizeof(node));
else
stu=(node *)realloc(stu,sizeof(node)*(i+1));
fscanf(fp,"%s %s %s %s %s %s",stu[i].num,stu[i].name,stu[i].sex,stu[i].work,stu[i].phone,stu[i].email);
}
fclose(fp);
flag=0;
fp=fopen(file,"w+");
for(j=0;j<i-1;j++)
{
if(strcmp(stu[j].name,nname)!=0)
{
fprintf(fp,"%15s %10s %10s %15s %15s %20s\n",stu[j].num,stu[j].name,stu[j].sex,stu[j].work,stu[j].phone,stu[j].email);
}
else
{
flag=1;
}
}
fclose(fp);
system("cls");
if(flag==0)
{
printf("文件名:%s\n",file);
printf("无此人!请重新操作!\n");break;
}
}
break;
case 3:
printf("(3).修改数据\n");
printf("请输入文件名:\n");
scanf("%s",file);
printf("请输入修改人物的信息:\n");
scanf("%s%s%s%s%s%s",nnum,nname,nsex,nwork,nphone,nemail);
fp=fopen(file,"a+");
stu=NULL;
for(i=0;!feof(fp);i++) //读取文件
{
if(i==0)
stu=(node *)malloc(sizeof(node));
else
stu=(node *)realloc(stu,sizeof(node)*(i+1));
fscanf(fp,"%s %s %s %s %s %s",stu[i].num,stu[i].name,stu[i].sex,stu[i].work,stu[i].phone,stu[i].email);
}
fclose(fp);
flag=0;
fp=fopen(file,"w+");
for(j=0;j<i-1;j++)
{
if(strcmp(stu[j].name,nname)!=0)
{
fprintf(fp,"%15s %10s %10s %15s %15s %20s\n",stu[j].num,stu[j].name,stu[j].sex,stu[j].work,stu[j].phone,stu[j].email);
}
else
{
fprintf(fp,"%15s %10s %10s %15s %15s %20s\n",nnum,nname,nsex,nwork,nphone,nemail);
flag=1;
}
}
fclose(fp);
system("cls");
if(flag==0)
{
printf("文件名:%s\n",file);
printf("无此人!请重新操作!\n");break;
}

break;
case 4:
printf("(4).统计(男,女人数,总人数)\n");
printf("请输入文件名:\n");
scanf("%s",file);
fp=fopen(file,"a+");
stu=NULL;
for(i=0;!feof(fp);i++) //读取文件
{
if(i==0)
stu=(node *)malloc(sizeof(node));
else
stu=(node *)realloc(stu,sizeof(node)*(i+1));
fscanf(fp,"%s %s %s %s %s %s",stu[i].num,stu[i].name,stu[i].sex,stu[i].work,stu[i].phone,stu[i].email);
}
fclose(fp);
system("cls");
count1=0,count2=0;
for(j=0;j<i-1;j++)
{
if(strcmp(stu[j].sex,"男")==0)
{
count1++;
}
else if(strcmp(stu[j].sex,"女")==0)
{
count2++;
}
}
printf("文件名:%s\n",file);
printf("男生数:%d\n",count1);
printf("女生数:%d\n",count2);
printf("总人数:%d\n",count1+count2);
break;
case 5:
printf("(5).查询数据\n");
printf("请输入文件名:\n");
scanf("%s",file);
printf("请输入查询人的名字:\n");
scanf("%s",nname);
fp=fopen(file,"a+");
stu=NULL;
for(i=0;!feof(fp);i++) //读取文件
{
if(i==0)
stu=(node *)malloc(sizeof(node));
else
stu=(node *)realloc(stu,sizeof(node)*(i+1));
fscanf(fp,"%s %s %s %s %s %s",stu[i].num,stu[i].name,stu[i].sex,stu[i].work,stu[i].phone,stu[i].email);
}
fclose(fp);
system("cls");
flag=0;
for(j=0;j<i-1;j++)
{
if(strcmp(stu[j].name,nname)==0)
{
printf("文件名:%s\n",file);
printf("%s %s %s %s %s %s\n",stu[j].num,stu[j].name,stu[j].sex,stu[j].work,stu[j].phone,stu[j].email);
flag=1;
break;
}
}
if(flag==0)
{
printf("文件名:%s\n",file);
printf("无此人!请重新操作!\n");break;
}
break;

④ 数据结构与算法中 写抽象数据类型的描述

抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由
具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型
通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数
据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实
现,这样抽象层次更高,更能为其他用户提供良好的使用接口。

⑤ 通讯录拼音搜索模糊匹配的算法问题

我用java写了个简单的,你可以多测试下:

publicstaticvoidmain(String[]args){

String[]name={"wang","hai","bao"};

String[]tests={"whb","WaHB","wangHB","HB","wh","whbo","whba"};

for(Stringstring:tests){
System.out.println(string+":"+match(name,string));
}

}

publicstaticbooleanmatch(String[]source,Stringinput){

if(source==null||source.length==0||input==null||input.length()==0){
returnfalse;
}

Stringtemp;

//统一转小写
input=input.toLowerCase();

for(inti=0;i<source.length;i++){

temp=source[i].toLowerCase();

if(temp==null||temp.length()==0){
returnfalse;
}

//最后一步特殊处理
if(i==source.length-1){
if(temp.startsWith(input)){
returntrue;
}
}

//输入的字符完全匹配到
if(input.startsWith(temp)){
//匹配到后生成新的字符串
input=input.substring(0,input.indexOf(temp));
//System.out.println("temp:"+temp+" 匹配到后input:"+input);
}

//首字母匹配到
elseif(temp.startsWith(input.substring(0,1))){

input=input.substring(1);
//System.out.println("temp:"+temp+" 匹配到后input:"+input);
}else{
returnfalse;
}

//表示匹配结束
if(input.length()==0){
returntrue;
}

}

returnfalse;
}

⑥ 20. 通讯录的制作 数据结构题目 用c或类c语言编写 并写出每句含义 谢啦!!!!

#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE_NAME 10#define SIZE_ID 20#define SIZE_PHONE 20int Record = 0;

typedef struct {
char name[SIZE_NAME];
char id[SIZE_ID];
char phone[SIZE_PHONE];
}pInfo;

typedef struct node{
pInfo people;
struct node *next;
}linkList;int menu();int create(linkList *head);int display(linkList *head);int search(linkList *head, char *info);int modify(linkList *head, char *pid);int add2(linkList *head, char *pid);int delt(linkList *head, char *info);int compare(char *str1, char *str2);int sort_id(linkList *head, int boolean);//1升序 0降序
int sort_name(linkList *head, int boolean);//1升序 0降序int main()
{
linkList head, *p;
char info[SIZE_ID]; int temp, chus, i;
head.next = NULL; while (1) {
switch (menu()) {
case 1:
create(&head); break;
case 2:
display(&head); break;
case 3: printf("请输入需要查询的学号或姓名: ");
scanf("%s", info);
p = &head;
p = p->next; for (i = 0; i < search(&head, info); i++) {
p = p->next;
} printf("搜索到: "); printf(" 联系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 学号 姓名 电话 "); printf("-------------------------------------------------------------------------------- "); printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
search(&head, info); break;
case 4: printf("请输入需要修改的学号: ");
scanf("%s", info);
modify(&head, info); break;
case 5: printf("请输入需要添加的学号: ");
scanf("%s", info);
add2(&head, info); break;
case 6: printf("请输入需要删除的学号或姓名: ");
scanf("%s", info);
delt(&head, info); break;
case 7: printf("请选择排序方式: 1.按学号排序 2.按姓名排序 ");
scanf("%d", &chus);
switch (chus) {
case 1: printf("请输入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_id(&head, temp); break;
case 2: printf("请输入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_name(&head, temp); break;
} break;
case 8: exit(0); break;
default: printf("输错了,再来一次 ");
} system("pause"); system("cls");
} system("pause"); return 0;
}int menu()
{ int chus; printf(" 通讯录 "); printf("请输入(1 -- 8): "); printf(" 1.创建通讯录 "); printf(" 2.显示通讯录 "); printf(" 3.查询通讯录 "); printf(" 4.修改通讯录 "); printf(" 5.添加通讯录 "); printf(" 6.删除通讯录 "); printf(" 7.排序通讯录 "); printf(" 8.退出 ");
scanf("%d", &chus); return chus;
}int create(linkList *head)
{
linkList *s, *p;
p = head; printf("请输入学号 姓名 电话,输入end结束 "); while (1) { s = (linkList*)malloc(sizeof(linkList));
scanf("%s", s->people.id); if (!strcmp(s->people.id,"end")){ return 0;
}
scanf("%s", s->people.name);
scanf("%s", s->people.phone); s->next = p->next;
p->next = s;
p = s;
Record++;
} return 0;
}int display(linkList *head)
{ int i;
linkList *p;
p = head;
p = p->next; printf(" 联系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 学号 姓名 电话 "); printf("-------------------------------------------------------------------------------- "); for (i = 0; i < Record; i++, p = p->next) { printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
} return 0;
}int search(linkList *head, char *info)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < Record; i++, p = p->next) { if ((!strcmp(p->people.id, info)) || (!strcmp(info,p->people.name))){ return i;
}
} return -1;
}int modify(linkList *head, char *pid)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < search(head, pid); i++) {
p = p->next;
} printf("请输入新信息: ");
scanf("%s", p->people.id);
scanf("%s", p->people.name);
scanf("%s", p->people.phone); return 0;
}int add2(linkList *head, char *pid)
{ int i;
linkList *p, *s;
p = head;
p = p->next; s = (linkList*)malloc(sizeof(linkList)); while( p->next!= NULL){
p = p->next;
} printf("请输入需要添加的姓名和电话: ");
strcpy(s->people.id, pid);
scanf("%s", s->people.name);
scanf("%s", s->people.phone); if (search(head, s->people.id) == -1) { s->next = p->next;
p->next = s;
Record++;
} else { printf("学号重复了 ");
} return 0;
}int delt(linkList *head, char *info)
{ int i, n;
linkList *p, *s;
p = head;
n = search(head, info); if (-1 == n) { printf("没有找到 "); return 0;
} for (i = 0; i < n; i++) {
p = p->next;
}
p->next = p->next->next;
Record--; return 0;
}int compare(char *str1, char *str2)
{ int i; for (i = 0; i < strlen(str1); i++) { if (str1[i] < str2[i]) { return 1;
}
} return 0;
}int sort_id(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}int sort_name(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE_NAME 10#define SIZE_ID 20#define SIZE_PHONE 20int Record = 0;

typedef struct {
char name[SIZE_NAME];
char id[SIZE_ID];
char phone[SIZE_PHONE];
}pInfo;

typedef struct node{
pInfo people;
struct node *next;
}linkList;int menu();int create(linkList *head);int display(linkList *head);int search(linkList *head, char *info);int modify(linkList *head, char *pid);int add2(linkList *head, char *pid);int delt(linkList *head, char *info);int compare(char *str1, char *str2);int sort_id(linkList *head, int boolean);//1升序 0降序
int sort_name(linkList *head, int boolean);//1升序 0降序int main()
{
linkList head, *p;
char info[SIZE_ID]; int temp, chus, i;
head.next = NULL; while (1) {
switch (menu()) {
case 1:
create(&head); break;
case 2:
display(&head); break;
case 3: printf("请输入需要查询的学号或姓名: ");
scanf("%s", info);
p = &head;
p = p->next; for (i = 0; i < search(&head, info); i++) {
p = p->next;
} printf("搜索到: "); printf(" 联系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 学号 姓名 电话 "); printf("-------------------------------------------------------------------------------- "); printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
search(&head, info); break;
case 4: printf("请输入需要修改的学号: ");
scanf("%s", info);
modify(&head, info); break;
case 5: printf("请输入需要添加的学号: ");
scanf("%s", info);
add2(&head, info); break;
case 6: printf("请输入需要删除的学号或姓名: ");
scanf("%s", info);
delt(&head, info); break;
case 7: printf("请选择排序方式: 1.按学号排序 2.按姓名排序 ");
scanf("%d", &chus);
switch (chus) {
case 1: printf("请输入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_id(&head, temp); break;
case 2: printf("请输入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_name(&head, temp); break;
} break;
case 8: exit(0); break;
default: printf("输错了,再来一次 ");
} system("pause"); system("cls");
} system("pause"); return 0;
}int menu()
{ int chus; printf(" 通讯录 "); printf("请输入(1 -- 8): "); printf(" 1.创建通讯录 "); printf(" 2.显示通讯录 "); printf(" 3.查询通讯录 "); printf(" 4.修改通讯录 "); printf(" 5.添加通讯录 "); printf(" 6.删除通讯录 "); printf(" 7.排序通讯录 "); printf(" 8.退出 ");
scanf("%d", &chus); return chus;
}int create(linkList *head)
{
linkList *s, *p;
p = head; printf("请输入学号 姓名 电话,输入end结束 "); while (1) { s = (linkList*)malloc(sizeof(linkList));
scanf("%s", s->people.id); if (!strcmp(s->people.id,"end")){ return 0;
}
scanf("%s", s->people.name);
scanf("%s", s->people.phone); s->next = p->next;
p->next = s;
p = s;
Record++;
} return 0;
}int display(linkList *head)
{ int i;
linkList *p;
p = head;
p = p->next; printf(" 联系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 学号 姓名 电话 "); printf("-------------------------------------------------------------------------------- "); for (i = 0; i < Record; i++, p = p->next) { printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
} return 0;
}int search(linkList *head, char *info)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < Record; i++, p = p->next) { if ((!strcmp(p->people.id, info)) || (!strcmp(info,p->people.name))){ return i;
}
} return -1;
}int modify(linkList *head, char *pid)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < search(head, pid); i++) {
p = p->next;
} printf("请输入新信息: ");
scanf("%s", p->people.id);
scanf("%s", p->people.name);
scanf("%s", p->people.phone); return 0;
}int add2(linkList *head, char *pid)
{ int i;
linkList *p, *s;
p = head;
p = p->next; s = (linkList*)malloc(sizeof(linkList)); while( p->next!= NULL){
p = p->next;
} printf("请输入需要添加的姓名和电话: ");
strcpy(s->people.id, pid);
scanf("%s", s->people.name);
scanf("%s", s->people.phone); if (search(head, s->people.id) == -1) { s->next = p->next;
p->next = s;
Record++;
} else { printf("学号重复了 ");
} return 0;
}int delt(linkList *head, char *info)
{ int i, n;
linkList *p, *s;
p = head;
n = search(head, info); if (-1 == n) { printf("没有找到 "); return 0;
} for (i = 0; i < n; i++) {
p = p->next;
}
p->next = p->next->next;
Record--; return 0;
}int compare(char *str1, char *str2)
{ int i; for (i = 0; i < strlen(str1); i++) { if (str1[i] < str2[i]) { return 1;
}
} return 0;
}int sort_id(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}int sort_name(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}


⑦ c语言课程通讯录的设计与实现用到哪些知识点与算法

通讯录的数据需要定义一个结构体来保存,比如这样:
struct TX{
char name[10];
char tel[12];//也可以用长整形 long
...
}
所以会用到结构体数组的输入、显示、查询、修改、插入、删除、(可能包括排序算法)、文件保存和文件读取这些知识点。

⑧ C语言程序设计:通讯录程序设计

#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "stdio.h"
#include "dos.h"
FILE *fp;
int i; //i是全局变量 可代替length
struct address
{ char postnum[10];
char a[40]; //家庭地址
};
struct birthday
{ int year;
int month;
int day;
};
struct ffriend
{ int num; //序号
char name[20];
char sex;
char telephone[13];
struct birthday birthday;
struct address address;

}
friends[50];

void Load()
{
int j;
long k;
fp=fopen("friend.txt","a+"); //打开文件friend.txt
if(fp!=NULL)
{
for(i=1;i<50;i++)

{
j=fgetc(fp);
if(j==EOF) //判断是否到了文件尾
return;
k=i-1;
fseek(fp,k*sizeof(struct ffriend),SEEK_SET);
fread(&friends[i],sizeof(struct ffriend),1,fp); //从文件中读取一条记录
}

}
else
{
fp=fopen("friend.txt","w");
i=1;
}

}
void Show(int j)
{
// friends[j].num=i;
printf("\n\n\t编号-Nnumber: %3d",friends[j].num);
printf("\n\t姓名-Name:%-20s",friends[j].name);
printf("\n\t性别-Sex:%c",friends[j].sex);
printf("\n\t联系电话-Telephone:%-13s",friends[j].telephone);
printf("\n\t出生日期-Birthday:%4d-%2d-%3d",friends[j].birthday.year,friends[j].birthday.month,friends[j].birthday.day);
printf("\n\t邮编-Postnum:%-10s",friends[j].address.postnum);
printf("\n\t通信地址-address:%-40s",friends[j].address.a);
}
void Append(int j)
{
fflush(stdin); //区内清除文件缓冲区,文件以写方式打开时将缓冲容写入文件
//stdin是一个标准FILE*(文件型指针)指向通常是用键盘的输入的输入流
friends[j].num=j;
printf("\n\t\t\t序号-Number:%d",j);
printf("\n\t\t\t姓名-Name:");
scanf("%s",friends[j].name);
fflush(stdin); //为什么没有fflush(stdin); 的效果会自动跳过呢?
printf("\t\t\t性别-Sex(m/w):"); //为什么输入汉字男女也会自动跳过联系电话呢
scanf("%c",&friends[j].sex);
printf("\t\t\t联系电话-telephone:");
scanf("%s",friends[j].telephone);
printf("\t出生日期-birthday");
printf("\n\t\t\t年份-year:");
scanf("%d",&friends[j].birthday.year);
printf("\t\t\t月份-month:");
scanf("%d",&friends[j].birthday.month);
printf("\t\t\t日-day:");
scanf("%d",&friends[j].birthday.day);
printf("\t\t\t邮编-Postnumber:");
scanf("%s",friends[j].address.postnum);
printf("\t\t\t通信地址-Address:");
scanf("%s",friends[j].address.a);
getchar();
}
void Delete()
{
int k;
printf("\n\tDelete 序号-Number:");
scanf("%d",&k);
if(k<=i)
{
for(int j=k;j<i+1;j++) /*插入位置后的元素顺序后移*/
{
strcpy(friends[j].name,friends[j+1].name); /*交换元素内容*/
friends[j].sex=friends[j+1].sex;
strcpy(friends[j].telephone,friends[j+1].telephone);
friends[j].birthday.year=friends[j+1].birthday.year;
friends[j].birthday.month=friends[j+1].birthday.month;
friends[j].birthday.day=friends[j+1].birthday.day;
strcpy(friends[j].address.postnum,friends[j+1].address.postnum);
strcpy(friends[j].address.a,friends[j+1].address.a);

}
i--;
}
else
{
printf("输入的序号太大!");
}
}
void Modify(int j)
{
Append(j);
}
void Save()
{
int j;
fp=fopen("friend.txt","w");
for(j=1;j<=i;j++)
{
fwrite(&friends[j],sizeof(struct ffriend),1,fp);
}
fclose(fp);

}

void main()
{
int j;
char grade;
char searchname[10];
Load();
i--;
do
{
printf("\t\t\t\t简易通讯录\n\n");
printf("功能选择(Function choose)\n");
printf("\1A.读取(Read)\n");
printf("\2B.增添(Append)\n");
printf("\6C.插入(Insert)\n");
printf("\5D.删除(Delete)\n");
printf("\5E.查询(Search)\n");
printf("\6F.修改(Modify)\n");
printf("\2G.保存(Save)\n");
printf("\1H.退出(Quit)\n");
printf("请选择(Choice)\n注:输入A~H的大写字母\n");
scanf("%c",&grade);
switch(grade)
//加个大写和小写 都可以啊
{
case 'A': j=1; //显示功能
while(getchar()!=0x1b&&j<=i) //增添按Esc键退出
{
Show(j++);
printf("\n请按回车键继续!");
}
if(j-1<1)
{
printf("\n\t空文档,无任何记录-Empty Note\n");
printf("\n请按回车键继续!");
getchar();

}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'B': //增加功能
while(i<=50) //增加按ESC键退出的功能
{
i++;
Append(i);
printf("\t是否继续增加?y/n");
//修改 加上else if 其他就跳出或强制打印出出错
char a=getchar();
if(a=='n'||a=='N')
break;
}
if(i==51)
printf("\n\t文档已满,无法增加记录-note full");
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
getchar();
break;
case 'C':
int k;
printf("\n\t输入要插入的位置:");
scanf("%d",&k);
j=i+1;
friends[j].num=j;
for(j;j>k;j--) //插入功能
{
strcpy(friends[j].name,friends[j-1].name); //数据后移
friends[j].sex=friends[j-1].sex;
strcpy(friends[j].telephone,friends[j-1].telephone);
friends[j].birthday.year=friends[j-1].birthday.year;
friends[j].birthday.month=friends[j-1].birthday.month;
friends[j].birthday.day=friends[j-1].birthday.day;
strcpy(friends[j].address.postnum,friends[j-1].address.postnum);
strcpy(friends[j].address.a,friends[j-1].address.a);

}
Append(k);
i++;
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'D': //删除功能 //增添随意删除多条记录的功能
Delete();
if(i<1)
printf("\n没有记录-No records\n");
printf("\n请按回车键继续!");
getchar();
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'E': //查询功能
printf("\n\t请输入要查询记录的相关姓名:"); //增添查询按列号的
scanf("%s",searchname);
for(j=1;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0) //比较字符串
{
Show(j);
break;
}
}
if(i<1)
{
printf("\n 没有您所查询的记录-No records");
printf("\n 请按回车键继续!");
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
getchar();
break;
case 'F': //修改功能 / /增添按序列号查询
printf("\n\t请输入要修改记录的相关姓名:");
gets(searchname);
scanf("%s",searchname);
for(j=1;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0) //比较字符串
{
Modify(j);
// getchar(); //加个输出确定修改吗
}
}
if(i<1) //修改功能
{ printf("\n 没有您所要修改的记录-No records");
printf("\n 请按回车键继续!");
getchar();
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'G':
Save(); //存盘功能
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;

case 'H': //退出功能
char x;
printf("是否保存?yes/no\n");
scanf("%s",&x);
//getchar();
// getchar();
if(x=='y')
{
Save();
exit(0);
}
else
exit(0);

default:
printf("\n\t输入有误,请输入正确的序列号!");
printf("\n请按回车键继续!");
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
}
}while(1);
}

⑨ 用C语言编写一个通讯录,有多难,需要用到什么知识

你得看是在什么平台上运行的。反正都不是很难。就是一个输入,查找输出,也许还有个排序的部分。基本上算法很简单,只是表现的接口有点复杂,不同的平台需要不同的知识。

⑩ 个人通讯录管理系统的数据元素是什么 逻辑机构是什么 存储结构是什么 求回复

数据元素(data element)是计算机科学术语。它是数据的基本单位,数据元素也叫做结点或记录。在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成,例如,一本书的书目信息为一个数据元素,而书目信息的每一项(如书名、作者名等)为一个数据项。数据项是数据的不可分割的最小单位。

系统的逻辑结构是对整个系统从思想的分类,把系统分成若干个逻辑单元,分别实现自己的功能。一般在系统开发时,逻辑结构往往都由架构师完成。系统的逻辑结构对系统的开发起到重要性的决定。

数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。逻辑结构形式地定义为(K,R)(或(D,S)),其中,K是数据元素的有限集,R是K上的关系的有限集。

数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。数据的存储结构是指数据的逻辑结构在计算机中的表示。

(10)通讯录的核心算法思想扩展阅读

顺序存储和链接存储的基本原理

顺序存储和链接存储是数据的两种最基本的存储结构。

在顺序存储中,每个存储空间含有所存元素本身的信息,元素之间的逻辑关系是通过数组下标位置简单计算出来的线性表的顺序存储,若一个元素存储在对应数组中的下标位置为i,则它的前驱元素在对应数组中的下标位置为i-1,它的后继元素在对应数组中的下标位置为i+1。在链式存储结构中,存储结点不仅含有所存元素本身的信息,而且含有元素之间逻辑关系的信息。

数据的链式存储结构可用链接表来表示。

其中data表示值域,用来存储节点的数值部分。Pl,p2,…,Pill(1n≥1)均为指针域,每个指针域为其对应的后继元素或前驱元素所在结点(以后简称为后继结点或前驱结点)的存储位置。通过结点的指针域(又称为链域)可以访问到对应的后继结点或前驱结点,若一个结点中的某个指针域不需要指向其他结点,则令它的值为空(NULL)。

在数据的顺序存储中,由于每个元素的存储位置都可以通过简单计算得到,所以访问元素的时间都相同;而在数据的链接存储中,由于每个元素的存储位置保存在它的前驱或后继结点中,所以只有当访问到其前驱结点或后继结点后才能够按指针访问到,访问任一元素的时间与该元素结点在链式存储结构中的位置有关。

阅读全文

与通讯录的核心算法思想相关的资料

热点内容
喷油螺杆制冷压缩机 浏览:577
python员工信息登记表 浏览:375
高中美术pdf 浏览:158
java实现排列 浏览:511
javavector的用法 浏览:979
osi实现加密的三层 浏览:230
大众宝来原厂中控如何安装app 浏览:911
linux内核根文件系统 浏览:240
3d的命令面板不见了 浏览:524
武汉理工大学服务器ip地址 浏览:146
亚马逊云服务器登录 浏览:522
安卓手机如何进行文件处理 浏览:70
mysql执行系统命令 浏览:928
php支持curlhttps 浏览:142
新预算法责任 浏览:443
服务器如何处理5万人同时在线 浏览:249
哈夫曼编码数据压缩 浏览:424
锁定服务器是什么意思 浏览:383
场景检测算法 浏览:616
解压手机软件触屏 浏览:348