C语言 通讯录源代码 无链表 无指针

作者&投稿:欧支 (若有异议请与网页底部的电邮联系)
急求通讯录管理系统(有链表的)数据结构c语言版的源代码。要求c++可以测试通过~

这个绝对满足了你的要求了,谢谢采纳`

#include
#include
#include
class List;
class person
{
public:
friend class List;
private:
person() {next=0;}
person *next;
char name[10],tel[15];
};

class List
{
public:

List(){list=0;}
int gncd(); // 功能菜单
int print(); // 输出所有信息
int append(); // 增加一个信息
int revise(); // 根据姓名、电话修改信息
int dele(); // 根据姓名、电话删除信息
int exit(); // 退出
private:
person *end();
person *list;

};
int List::exit()
{
abort();
return 1;
}

int List::gncd()
{
cout<<"************欢迎使用****************************"<<endl;
cout<<"1.输入信息。"<<endl;
cout<<"2.根据姓名、电话修改信息。"<<endl;
cout<<"3.根据姓名、电话删除信息"<<endl;
cout<<"4.输出所有现有成员信息"<<endl;
cout<<"5.退出"<<endl;
cout<<"选择:";
int a;
cin>>a;
switch(a)
{
case(1):this->append();break;
case(2):this->revise();break;
case(3):this->dele();break;
case(4):this->print();break;
case(5):this->exit();break;
}
this->gncd();
return 1;
}

int List::print()
{
if(list==0)
{
cout<<"为空或没输入内容"<<endl;
return 0;
}

person *p=list;
while(p!=NULL)
{
coutname<<endl;
couttel<<endl;
p=p->next;
}
cout<<endl;
return 1;
}


int List::append()
{
person *p=new person;

cout<<"请输入姓名:"<<endl;
cin>>p->name;
cout<<"请输入电话号码:"<<endl;
cin>>p->tel;


char temp;
cout<<"是否继续输入(y/n)";
cin>>temp;
if(temp=='y'||temp=='Y')
this->append();


if(list==0)
list=p;
else
(end())->next=p;
return 1;
}
person *List::end()
{
person *p,*q;
for(q=p=list;p;q=p,p=p->next) ;
return q;
}


int List::revise()
{
person *p=list;
char temp[20];
cout<<"你选择了根据姓名、电话修改信息。"<<endl<<"请输入将要修改的姓名或电话:";
cin>>temp;
int i=0;
while(p!=NULL)
{
if(!strcmp(p->name,temp)||!strcmp(p->tel,temp))
{
i=1;
cout<<"请输入新的姓名:";
cin>>p->name;
cout<<"请输入新的电话号码:";
cin>>p->tel;

}
p=p->next;
}
if(i==1) cout<<"修改成功!"<<endl;
if(i!=1) cout<<"未能找到。"<<endl;
return 1;
}

int List::dele()
{
person *q,*p=list;
char temp[20];
cout<<"你选择了根据姓名、电话删除信息。"<<endl<<"请输入将要删除的姓名或电话:";
cin>>temp;
if(p==NULL)
cout<<"为空或没有输入信息。"<<endl;
if(!strcmp(p->name,temp)||!strcmp(p->tel,temp)) //要删除的结点是第一个时
{
list=p->next;
delete p;
cout<<"删除成功!"<<endl;
}
else
{
while(p!=NULL&&(strcmp(p->name,temp)||strcmp(p->tel,temp)))
{
q=p;
p=p->next;
}
if(p==NULL) return 0;

else if(q==NULL)
cout<<"没能找到。"<<endl;
else
{
q->next=p->next;
delete p;
cout<<"删除成功!"<<endl;
}

}

return 1;
}


void main()
{
List L;
L.gncd();

}

分析:
跟据楼主的意思!我们可以得出,这个程序只要求我们写查询通迅录的内容
而通迅录的内容,可以通过初始化得出!
简而言之:写一个查询函数
呵呵···把问题相通了,我们就开始写算法吧let's go!!!
----------------------------------------------------------------
算法:
1.获得用户的输入 (就是要查询的对象的名字)
2.查询 (在这我用穷举通迅录的方式查询了,^_^&&^_^)
3.输出查询结果

算法就这样被我们征服了!!!呵呵~~好有成就感哇!!
但我们现在还不能开始编码,我得们先想好怎么编,要做到胸有成竹!!!
那我现在来想一下该怎么编码吧!let's go!!!
----------------------------------------------------------------
要保存通迅的信息,那么我们得用一个结构体吧:
struct friends
{
char name[20]; /* 名字不能写得太长哦 */
char province[20]; /* 省份 */
char city[20]; /* 所在城市 */
char nation[20]; /* 民族 */
char sex[2]; /* 性别 M/F */
int age; /* 年龄 */
};

要获得用户输入,要用个 char search_name[20];
查询结果反回一个数,记录对象在通迅录中的位置:int index;
查询中有用要循环,用一个记数器: int i;
----------------------------------------------------------------
OK,该用的变量我们都想好了!算法我们也想好了。还等什么呢,开始编码吧
呵呵~~是不是等这个时候都等得急了~~~~~
-------------------------------------------------------------------
*******************************************************************
******* 程序实现:
*******************************************************************
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* 定义保存通迅录的信息 */
struct friends
{
char name[20]; /* 名字 */
char province[20]; /* 省份 */
char city[20]; /* 所在城市 */
char nation[20]; /* 民族 */
char sex[2]; /* 性别 M/F */
int age; /* 年龄 */
};

void getname (char search_name[]);
int search (struct friends friend_list[], char search_name[]);
void print_result(struct friends friend_list[], int index);

int main (void)
{
int index;
char search_name[20];
struct friends friend_list[4] = {
,
,
,
,
};

(void) getname (search_name); /* 获得用户输入 */
index = search (friend_list, search_name); /* 查询 */
(void) print_result (friend_list,index); /* 打印结果 */

return 0;
}

/****************************************
*** 函数名:getname
*** 功能:获得用户要查询的对象的名字
****************************************/
void getname (char search_name[])
{
printf ("Pleace enter the name of your friends you want to search>>");
scanf ("%s", search_name);
}

/****************************************
*** 函数名:search
*** 功能:查询对象
****************************************/
int search (struct friends friend_list[], char search_name[])
{
int i;

/* 穷举通迅录 */
for (i = 0; i < 4; ++i)
{
if (strcmp(friend_list[i].name, search_name) == 0)
{
return (i);
}
}

if (i == 4)
{
printf ("I am sorry! there is nobody by the name you enter!
");
fflush(stdin);
getchar();
exit (0);
}
}

/****************************************
*** 函数名:print_result
*** 功能:打印结果
****************************************/
void print_result(struct friends friend_list[], int index)
{
printf ("the imformation of %s:
", friend_list[index].name);
printf ("------------------------------------------------
");
printf (" NAME: %-s
", friend_list[index].name);
printf ("PROVINCE: %-s
", friend_list[index].province);
printf (" CITY: %-s
", friend_list[index].city);
printf (" NATION: %-s
", friend_list[index].nation);
printf (" SEX: %-s
", friend_list[index].sex);
printf (" AGE: %-d
", friend_list[index].age);
printf ("-------------------------------------------------
");

fflush(stdin);
getchar();

}


*****************************************************************************
*****************************************************************************
呵呵~~一口气把它写出来了!!!前期写算法是很重要的!!
现在还没结束!!我们要先来测试一下!!
--------------------------------------
Pleace enter the name of your friends you want to search>>lihan
the imformation of lihan:
------------------------------------------------
NAME: lihan
PROVINCE: liaoning
CITY: huluodao
NATION: han
SEX: M
AGE: 19
-------------------------------------------------
--------------------------------------
Pleace enter the name of your friends you want to search>>lbmzwyy
I am sorry! there is nobody by the name you enter!

说明成功了~~~呵呵~~太高兴了~~
--------------------------------------
请记注一点:克制编码的诱惑
无论多么小的问题都要先分析好问题,想好算法,才能开始编码!!!我相信这样做一定对你有好处的!


如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

#include<stdio.h> /*引用库函数*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>typedef struct /*定义结构体数组*/
{
char num[10]; /*学号*/
char name[20]; /*姓名*/
char sushe[20];/*宿舍*/
char tel[20];/*电话*/
char qq[20];/*QQ号码*/
char email[20];/*电子邮箱*/
}Student;
Student stu[80]; /*结构体数组变量*/ int menu_select() /*菜单函数*/
{
char c;
do{
system("cls"); /*运行前清屏*/
printf("\t\t |☆☆☆☆☆☆通讯录信息管理系统☆☆☆☆☆\n"); /*菜单选择*/

printf("\t\t |****************************************|\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 |******** 7. 读取文件 *******************|\n");
printf("\t\t |******** 8. 保存文件 *******************|\n");
printf("\t\t |******** 0. 退出系统 *******************|\n");

printf("\t\t |****************************************|\n");

printf("\t\t |***制作人:QIANG *****|\n");

printf("\t\t |****************************************|\n");

printf("\t\t (*^__^*) 您好,请选择(*^__^*)→→→(0-8):");
c=getchar(); /*读入选择*/
}while(c<'0'||c>'9');
return(c-'0'); /*返回选择*/
}
int Input(Student stud[],int n) /*输入若干条记录*/
{
int i=0,p=0;
char sign,f,x[10]; /*x[10]为清除多余的数据所用*/
while(sign!='n'&&sign!='N') /*判断*/
{
printf("\t\t\t请输入学号:"); /*交互输入*/
scanf("\t\t\t%s",stud[n+i].num);
for(p=0;p=n;p++)
{
if(strcmp(stud[p].num,stud[n+i].num)==0)
{
printf("\t\t\t学号已经存在!\n");
system("pause");
return(n);
}
}
printf("\t\t\t请输入姓名:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\t请输入住址:");
scanf("\t\t\t%s",stud[n+i].sushe);
printf("\t\t\t请输入电话号码:");
scanf("\t\t\t%s",stud[n+i].tel);
printf("\t\t\t请输入QQ:");
scanf("\t\t\t%s",stud[n+i].qq);
printf("\t\t\t请输入电子邮箱:");
scanf("\t\t\t%s",&stud[n+i].email);
gets(x); /*清除多余的输入*/
printf("\t\t\tany more records?(Y/N)");
scanf("\t\t\t%c",&sign); /*输入判断*/
i++;
}
return(n+i);
} void Display(Student stud[],int n) /*显示所有记录*/
{
int i;
printf("--------------------------------------------------------------------------------\n"); /*格式头*/
printf("学号 名字 住址 电话号码 QQ号码 电子邮箱\n");
printf("--------------------------------------------------------------------------------\n");

for(i=1;i<n+1;i++) /*循环输入*/
{
printf("%-16s%-15s%-15s%-15s%-15s%-15s\n",stud[i-1].num,stud[i-1].name,stud[i-1].sushe,stud[i-1].tel,stud[i-1].qq,stud[i-

1].email);
if(i>1&&i%10==0) /*每十个暂停*/
{printf("--------------------------------------------------------------------------------\n"); /*格式*/ <br> printf("\t\t\t"); <br> system("pause"); <br> printf("--------------------------------------------------------------------------------\n"); <br> }
}
printf("\t\t\t");
system("pause");
} void Sort_by_num(Student stud[],int n) /*按学号排序*/
{ int i,j;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{
strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
strcpy(t,stud[j+1].sushe);
strcpy(stud[j+1].sushe,stud[j].sushe);
strcpy(stud[j].sushe,t);
strcpy(t,stud[j+1].tel);
strcpy(stud[j+1].tel,stud[j].tel);
strcpy(stud[j].tel,t);
strcpy(t,stud[j+1].qq);
strcpy(stud[j+1].qq,stud[j].qq);
strcpy(stud[j].qq,t);
strcpy(t,stud[j+1].email);
strcpy(stud[j+1].email,stud[j].email);
strcpy(stud[j].email,t);
}
} void Query_a_record(Student stud[],int n) /*查找并显示一个记录*/
{
char s[20];
int i=0;
printf("\t\t\t请输入要查找的人的名字:"); /*交互式输入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
printf("\t\t\t对不起,查无此人!\n"); /*输入失败信息*/
return;

}
printf("\t\t\t学号:%s\n",stud[i].num); /*输出该学生信息*/
printf("\t\t\t住址:%s\n",stud[i].sushe);
printf("\t\t\t电话号码:%s\n",stud[i].tel);
printf("\t\t\tQQ号码:%s\n",stud[i].qq);
printf("\t\t\t电子邮箱:%s\n",stud[i].email);
}
int Delete_a_record(Student stud[],int n) /*按姓名查找,删除一条记录*/
{
char s[20];
int i=0,j;
printf("\t\t\t请输入要删除的人的名字:"); /*交互式问寻*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
printf("\t\t\t对不起,查无此人!\n"); /*返回失败信息*/
return(n);
}
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].sushe,stud[j+1].sushe);
strcpy(stud[j].tel,stud[j+1].tel);
strcpy(stud[j].qq,stud[j+1].qq);
strcpy(stud[j].name,stud[j+1].name);
strcpy(stud[j].email,stud[j+1].email);

}
printf("\t\t\t删除成功!\n"); /*返回成功信息*/
return(n-1);
}
int AddfromText(Student stud[],int n) /*从文件中读入数据*/
{
int i=0,num;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\t请您输入要读取的文件名:");
scanf("\t\t\t%s",filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
{
printf("\t\t\t打开文件失败!\n"); /*打开失败信息*/
printf("\t\t\t");

system("pause");
return(n);
}
fscanf(fp,"%d",&num); /*读入总记录量*/
while(i<num) /*循环读入数据*/
{
fscanf(fp,"%s%s%s%s%s%s",stud[n+i].num,stud[n+i].name,stud[n+i].sushe,stud[n+i].tel,stud[n+i].qq,stud[n+i].email);
i++;
}
n+=num;
fclose(fp); /*关闭文件*/
printf("\t\t\t读取成功!\n");
printf("\t\t\t");
system("pause");
return(n);
} void WritetoText(Student stud[],int n) /*将所有记录写入文件*/
{
int i=0;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\t保存文件\n"); /*输入文件名*/
printf("\t\t\t请您为文件取个名字:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打开文件*/
{
printf("\t\t\t成功!\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循环写入数据*/
while(i<n)
{
fprintf(fp,"%s %s %s %s %s %s \n",stud[i].num,stud[i].name,stud[i].sushe,stud[i].tel,stud[i].qq,stud[i].email);
i++;
}
fclose(fp); /*关闭文件*/
printf("成功!\n"); /*返回成功信息*/
} int Modify_a_record(Student stud[],int n) /*按姓名查找,修改一条记录*/
{
char s[20];
char newname[20];
char newnum[20];
char newsushe[20];
char newtel[20];
char newqq[20];
char newemail[20];
int i=0;
printf("\t\t\t输入要修改人的名字:"); /*交互式问寻*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
printf("\t\t\t找不到这个信息!\n"); /*返回失败信息*/
return(n+1);
}
printf("请输入新姓名:");
scanf("%s",newname);
strncpy(stud[i].name,newname,sizeof(stud[i].name));
stud[i].name[sizeof(stud[i].name)-1]='\0'; printf("请输入新学号:");
scanf("%s",newnum);
strncpy(stud[i].num,newnum,sizeof(stud[i].num));
stud[i].num[sizeof(stud[i].num)-1]='\0'; printf("请输入新地址:");
scanf("%s",newsushe);
strncpy(stud[i].sushe,newsushe,sizeof(stud[i].sushe));
stud[i].sushe[sizeof(stud[i].sushe)-1]='\0'; printf("请输入新电话号码:");
scanf("%s",newtel);
strncpy(stud[i].tel,newtel,sizeof(stud[i].tel));
stud[i].tel[sizeof(stud[i].tel)-1]='\0'; printf("请输入新qq号码:");
scanf("%s",newname);
strncpy(stud[i].qq,newqq,sizeof(stud[i].qq));
stud[i].qq[sizeof(stud[i].qq)-1]='\0'; printf("请输入新电子邮箱:");
scanf("%s",newemail);
strncpy(stud[i].email,newemail,sizeof(stud[i].email));
stud[i].email[sizeof(stud[i].email)-1]='\0'; printf("\t\t\t修改信息成功咯\n"); /*返回成功信息*/
return (n);
}
void main() /*主函数*/
{
int n=0;
system("color 1A"); //调用dos改背景与前景色
for(;;)
{
switch(menu_select()) /*选择判断*/
{
case 1:
printf("\t\t\t输入信息\n"); /*输入若干条记录*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\t显示信息\n"); /*显示所有记录*/
Display(stu,n);
break;
case 3:
printf("\t\t\t按学号排序\n");
Sort_by_num(stu,n); /*按学号排序*/
printf("\t\t\t排列成功咯!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\t修改学生信息\n");
n=Modify_a_record(stu,n); /*按姓名查找,修改一条记录*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\t删除学生信息\n");
n=Delete_a_record(stu,n); /*按姓名查找,删除一条记录*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\t查找一个信息\n");
Query_a_record(stu,n); /*查找并显示一个记录*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\t打开保存过的文件\n");
n=AddfromText(stu,n); /*新增功能,输出统计信息*/
break;
case 8:
printf("\t\t\t保存数据到文件\n");
WritetoText(stu,n); /*循环写入数据*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\t感谢使用,祝你好运哦!\n"); /*结束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}


富蕴县15869271553: 用C语言搞一个通讯录,要求尽量简单,不要用链表等高级东西. -
出陆喷昔: 你这个是要把数据存在文件中把,修改数据不用链表有点麻烦

富蕴县15869271553: 求用C语言编写手机通讯录系统的程序 -
出陆喷昔: 以前写了一个简单的:#include #include /*与malloc.h差不多*/ #include #include using namespace...

富蕴县15869271553: 用C语言写一个通讯录 -
出陆喷昔: /** main_tongxunlu.c** created on: 2011-6-21* author: zhanglujin*/#include #include #include #include struct record {char name[20]; //姓名char phone[12]; //电话char adress[50]; //地址char postcode[8]; //邮政编码char e_mail[20];...

富蕴县15869271553: 求c语言手机通讯录程序 -
出陆喷昔: #include<stdio.h> struct Class { char *cname; //名字 char *cphon; //电话号码 char *cuphon; //单位电话 char *cmphon; //手机号码 char *cqq; //qq号码 char *cbday; //生日日期 struct Class *node; //其余的自己可以加***** }; typedef struct ...

富蕴县15869271553: 跪求用c语言编写一个通讯录源代码 急!!! -
出陆喷昔: TC情况下运行: //主程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct record { char id[10]; char name[20]; char phone[20]; char adress[40]; char postcode[10]; char e_mail[30]; }student[500]; int num=0;//外部...

富蕴县15869271553: 跪求用C语言顺序结构编写通讯录 -
出陆喷昔: /include #include #include #include <vcl.h

富蕴县15869271553: 求个c语言通讯录代码,要求如下 -
出陆喷昔: #include<iostream>#include<string>#include<cstring> using namespace std; int show(); int add(); int lookup(); int print(); int isFull(int a); int totalnumber; int counter=0; struct ren { int xuhao; char xingming[20]; char haoma[12]; } user[100]; int main() ...

富蕴县15869271553: C语言电话簿程序 -
出陆喷昔: #include#include#include#defineM500structMan//定义结构体{charName[8];//名字charDepart[20];//工作单位charQQ[10];//QQ号码charEmail[30];//邮箱};voidtext();//相当于主函数voidtext1();//菜单输出chartext2();//开始的版权信息...

富蕴县15869271553: 跪求用C语言顺序结构编写通讯录 -
出陆喷昔: //-------------------------------------------------------------------- #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <vcl.h> #pragma hdrstop//--------------------------------------------------------------------#pragma argsusedstruct STUDENT {char sID[9];...

富蕴县15869271553: 求一纯C语言单链表通讯录: -
出陆喷昔: typedef struct record { struct record* next; char* name; char* postalCode; char* phoneNumber; char* fax; char* email; }*Record; struct record head={0}; Record recordLst=&head; Record CreateRecord(char* name,char*postalCode,char*...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网