求一个C语言编写的通讯录程序?急急急

求一个C语言编写的通讯录程序?急急急,第1张

#include<stdio.h>

#define LL sizeof(struct Information)

#include<stdlib.h>

struct Information

{

char name[25]

int number

double Tel_number

struct Information *next

}

int n,t

struct Information *creat()

{

struct Information *head,*p1,*p2

n=0

p1=p2=(struct Information *)malloc(LL)

printf("请输入第 %d 个学生通讯信息:\n",n+1)

printf("姓名\t学号\t电话号码\n")

scanf("%s%d%lf",p1->name,&p1->number,&p1->Tel_number)

getchar()

head=NULL

while(p1->number!=0)

{

n++

if(n==1)head=p1

else

p2->next=p1

p2=p1

p1=(struct Information *)malloc(LL)

scanf("%s%d%lf",p1->name,&p1->number,&p1->Tel_number)

getchar()

}

p2->历丛枣next=NULL

free(p1)

p1=NULL

return head

}

void output(struct Information *p3)

{

printf("\郑岩n你建立的是多少人的通讯录: n=%d\n ",n)

printf("\n输出存入的通信信息:\n")

printf("\n姓名\t学号\t电话号码\n")

while(p3!=NULL)

{

printf("%s\t%d\t%.0lf\n",p3->name,p3->number,p3->Tel_number)

p3=p3->next

}

}

void file(struct Information *p8)

{

FILE *fp

int i

t=n

if((fp=fopen("Infor.dat","wb"))==NULL)

{

printf("此文件无法打开!\n")

exit(0)

}

for(i=0i<ti++)

{

if(fwrite(&p8->name,LL,1,fp)!=1)

if(fwrite(&p8->number,LL,1,fp)!=1)

if(fwrite(&p8->Tel_number,LL,1,fp)!=1)

p8=p8->next

else

printf("此文件写入错误肢拆\n")

}

fclose(fp)

}

void Insert(struct Information *head,struct Information *node,int num1)

{

struct Information *p

if(head==NULL)

{

head=node

node->next=NULL

n++

printf("你插入后总共有结点:n=%d\n",n)

}

p=head

while(p->number!=num1 &&p->next!=NULL)

{

p=p->next

}

if(p->number==num1)

{

node->next=p->next

p->next=node

n++

printf("你插入后总共有结点:n=%d\n",n)

}

else

printf("\nthe num1 is't found!\n")

printf("\n输出插入一个学生的通讯信息后的通讯录:\n")

printf("\n姓名\t学号\t电话号码\n")

p=head

while(p!=NULL)

{

printf("%s\t%d\t%.0lf\n",p->name,p->number,p->Tel_number)

p=p->next

}

}

void Delete(struct Information *head,int num2)

{

struct Information *p5,*p6,*p7

if(head==NULL)

{

printf("\nthis is a null list!\n")

}

p6=head

while(p6->number!=num2 &&p6->next!=NULL)

{

p5=p6

p6=p6->next

}

if(p6->number==num2)

{

if(head==p6)

{

head=head->next

}

else

p5->next=p6->next

n--

printf("你 删除 后总共有结点:n=%d\n",n)

}

else

printf("\nthe %d didn't been found!\n")

printf("\n输出 删除 一个学生的通讯信息后的通讯录:\n")

printf("\n姓名\t学号\t电话号码\n")

free(p6)

p6=NULL

p7=head

while(p7!=NULL)

{

printf("%s\t%d\t%.0lf\n",p7->name,p7->number,p7->Tel_number)

p7=p7->next

}

}

int main()

{

struct Information *p0,*p4

int r,m

p0=creat()

output(p0)

file(p0)

printf("请输入要 插入 信息:\n")

p4=(struct Information *)malloc(LL)

scanf("%s%d%lf",p4->name,&p4->number,&p4->Tel_number)

getchar()

printf("请输入 插在 那个学号:\n")

scanf("%d",&r)

Insert(p0,p4,r)

printf("请输入 删除 那个学号:\n")

scanf("%d",&m)

Delete(p0,m)

return 0

}

#define N 100

#define SIZE 30

#include <stdio.h>

#include <string.h>

#include <conio.h>

struct student{

 char num[SIZE]

char name[SIZE]

 char tel[SIZE]

}

/*函数声明*/

void 空御myprint()/*显示菜单*/

int mycreat(struct student*p,int n)/*输入通讯录*/void mydisplay(struct student*p,int n)/*显示通讯录*/void mysearch(struct student*p,int n)/*查找*/

void mymodify(struct student*p,int n)/*修改通讯录*/int myadd(struct student*p,int n)/*增加通讯录*/int mydelete(struct student*p,int n)/*删除*/void mysort(struct student*p,int n)/*排序*/

void sch_num(struct student*p,int n)/*按学号查找*/void 谈伍sch_name(struct student*p,int n)/*按姓名查找*/

int loadinfo(struct 斗侍岩student*p,int n)/*载入通讯录信息*/int saveinfo(struct student*p,int n)/*保存通讯录信息*/void main(){

/*文件定义*/char choose,yes_no

struct studentrecord[N]/*存放通讯录信息,共100条*/int total=0,flag/*通讯录总数*/

total=loadinfo(record,N)/*从文件读取记录信息,不超过100条*/do{

myprint()/*显示菜单*/

printf("请选择:")do{

choose=getchar()}

while(choose<'0'||choose>'9')switch(choose){

case'1':

total=mycreat(record,total)breakcase'2':

mydisplay(record,total)breakcase'3':

mysearch(record,total)breakcase'4':

mymodify(record,total)breakcase'5':

total=myadd(record,total)breakcase'6':

total=mydelete(record,total)breakcase'7':

mysort(record,total)breakcase'8':

flag=saveinfo(record,total)if(flag==1)

printf("\n保存成功!\n")else

printf("\n保存失败!\n")breakcase'0':

breakdefault:

printf("\n%c为非法选项!\n",choose)}

if(choose=='0')breakprintf("\n要继续选择吗(Y/N)?")do{

yes_no=getchar()}

while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n')}

while(yes_no!='Y'||yes_no!='y')}

void myprint()/*显示菜单信息*/{

printf("\n\n\n\n\n")printf("\n")printf("请输入选项编号(0--7)\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("0---退出\n")printf("\n")

}

int mycreat(struct student*p,int n)/*批量输入学生信息*/{

int i=0int m

printf("添加前的记录,共有<%d>个:\n",n)printf("\n记录号学号姓名电话号码\n")

i=0

while((i<n)&&(strcmp(p->num,"")!=0)){

printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)i++p++}

printf("\n请输入要输入的学生人数(<%d):",N-n)

scanf("%d",&m)i=0

while(i<m){

printf("\n")

printf("请输入第%d个记录:\n",i+1)printf("学号:")do{

gets(p->num)}

while(strcmp(p->num,"")==0)printf("姓名:")gets(p->name)

printf("电话号码:")gets(p->tel)p++i++}

return m+n}

void mydisplay(struct student*p,int n)/*显示学生信息*/{

/*clrscr()*/int i=0

printf("\n记录号学号姓名电话号码\n")while(i<n){

printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)p++i++}}

void mymodify(struct student*p,int n)/*修改学生信息*/{

int i

char nam[10]mydisplay(p,n)

printf("\n请输入要修改记录的姓名:")gets(nam)

for(i=0i<ni++,p++)

if(strcmp(nam,p->name)==0)breakif(i==n)

printf("无此人!\n")else{

printf("请输入正确的学号:")do{

gets(p->num)}

while(strcmp(p->num,"")==0)printf("请输入正确的姓名:")gets(p->name)

printf("请输入正确的电话号码:")gets(p->tel)}

}

void mysearch(struct student*p,int n)/*查找指定学生*/{

char c

mydisplay(p,n)

printf("\n按学号查询(h),还是按姓名查询(m)?")c=getchar()

if(c=='h'||c=='H')

sch_num(p,n)else if(c=='m'||c=='M')

sch_name(p,n)else

printf("\n非法字符!\n")}

void sch_num(struct student*p,int n)/*按学号查询*/{

int i,flag=0char nm[10]

printf("\n请输入要查询记录的学号:")gets(nm)

for(i=0i<ni++)

if(strcmp(nm,p[i].num)==0)

{

printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1

}

if(flag==0)

printf("无此人!\n")}

void sch_name(struct student*p,int n)/*按姓名查询*/{

int i,flag=0char nam[10]

printf("\n请输入要查询记录的姓名:")gets(nam)

for(i=0i<ni++)

if(strcmp(nam,p[i].name)==0){

printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1}

if(flag==0)

printf("无此人!\n")

}

int myadd(struct student*p,int n)/*增加学生信息*/{

int i=0char c

struct studentt,*q

printf("添加前的记录:\n")printf("\n学号姓名电话号码\n")i=0q=p

/*显示原有记录信息*/while(i<n){

printf("%15s%15s%15s\n",q->num,q->name,q->tel)i++q++}do{

printf("请输入新记录的学号:\n")do{

gets(t.num)

}

while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)

printf("请输入新记录的电话号码:")gets(t.tel)

for(i=0i<ni++)

if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){

printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}

/*找到最后,没有重复*/if(i==n){

*(p+i)=t

printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)

printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}

}

while(c=='y'||c=='Y')return n+1}

int mydelete(struct student*p,int n)/*删除学生信息*/{

int i,x

char c,nm[10],nam[10]

printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()

if(c=='h'||c=='H'){

printf("\n请输入要删除记录的学号:")gets(nm)

for(x=0x<nx++)

{

gets(t.num)

}

while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)

printf("请输入新记录的电话号码:")gets(t.tel)

for(i=0i<ni++)

if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){

printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}

/*找到最后,没有重复*/if(i==n){

*(p+i)=t

printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)

printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}

}

while(c=='y'||c=='Y')return n+1}

int mydelete(struct student*p,int n)/*删除学生信息*/{

int i,x

char c,nm[10],nam[10]

printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()

if(c=='h'||c=='H'){

printf("\n请输入要删除记录的学号:")gets(nm)

for(x=0x<nx++)

int j,i,kchar c1,c2

struct studenttemp

printf("\n排序前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("\n按学号排序(h),还是按姓名排序(m)?")c1=getchar()

if(c1=='h'||c1=='H'){

printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()/*升序*/

if(c2=='s'||c2=='S'){

for(i=0i<n-1i++){

k=i

for(j=ij<nj++)

if(strcmp(p[k].num,p[j].num)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp

}

printf("\n排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}

else if(c2=='j'||c2=='J')/*降序*/{

for(i=0i<n-1i++){

k=i

for(j=0j<nj++)

if(strcmp(p[k].num,p[j].num)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp

}

printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}

else printf("\n非法字符\n")}

else if(c1=='m'||c1=='M')/*按姓名排序*/{

printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()

if(c2=='s'||c2=='S'){

for(i=0i<n-1i++){

k=i

for(j=0j<nj++)

if(strcmp(p[k].name,p[j].name)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp}

printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)

}

else if(c2=='j'||c2=='J')/*降序*/{

for(i=0i<n-1i++){

k=i

for(j=ij<nj++)

if(strcmp(p[k].name,p[j].name)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp

}

printf("排序后的记录:\n")printf("\n学号

姓名电话号码\n")

for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}

else printf("\n非法字符!\n")}

else printf("\n非法字符!\n")}

int loadinfo(struct student*p,int n)/*载入通讯录信息*/{

FILE*fpint i,all=0

char filename[30]="tongxunlu.txt"fp=fopen(filename,"r")if(fp==NULL){

printf("\n***不能打开文件%s,或%s文件不存在,创建一个新文件!

",filename,filename)*/

fp=fopen(filename,"w")}

fscanf(fp,"%d\n",&all)

if(all>N)/*读取记录总数*/{

printf("文件记录数太多,不能读取")return 0}

for(i=0i<alli++)/*读取记录信息*/{

fscanf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)}

fclose(fp)/*关闭文件*/return all}

int saveinfo(struct student*p,int n){

FILE*fpint i,all=0

char filename[30]="txl.dat"/*文件可以用记事本打开*/fp=fopen(filename,"w")if(fp==NULL){

printf("\n***不能建立或打开文件%s!***",filename)return 0}

fprintf(fp,"%d\n",n)for(i=0i<ni++)

fprintf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)fclose(fp)return 1}

抄来的

这是我以前写的课程设计,

电子通讯录功能如下:

Function choose

1.Read

2.Append

3.Delete

4.Search

5.Save and exit

6.Quit

说明:上图是电子通讯录的主菜单,利用它,将能够轻松地录入一个朋友的电话号

码,通讯地址和出生日期,而且它还提供了检索和删除功能。在后面还将提供按生

日先后排序的功能,这些都有助于该通讯录的管理。

电子通讯录是采用线性表作为程序的基本结构的。

设计思想:

1。用顺序表设计电子通讯录的结链隐猛构

为了表示较为复杂的数据内容,一般用结构这种数据类型,第一步就是在结构中定

义所需要的各项信息。

一般的通讯录都包括姓名,性别,出生年月,通讯地址和联系电话这几项,而

在这几项中,出生年月又包括年份,月份和日期三项,通讯地址包括邮编和家庭地

址二项,我们把这些联系较为紧密的内容又用单独的结构表示,这样就产生了电子

通讯录的基本结构:

struct addr /*通讯地址结构定义*/

{ char post_num[10]/*邮编*/

char addr[40]/*家庭地址*/

}

struct birth /*出生年月结构定义*/

{ int year/*年份*/

int month/*月份*/

int day/*日期*/

}

struct friend /*电子通讯录结构定义*/

{ int number/*序号*/

char name[20] /*姓名*/

char sex/*性别*/

struct birth birth/*出生年月*/

struct addr addr/*通信地址*/

char telephone[13]/*联系电话*/

}

定义的主结构friend包含了前述的五项携稿内容 name,sex,和telephone分别代表

了姓名,性别和联系电话。为了让结构中的各项组分更加清晰,定义了二个

小结构birth 和addr分别代表出生年月和通讯地址,因此实际上friend包含了

8项内容。

有了结构定义后,我们可以很轻松地构造出电子通讯录的主体:

stryct friend friends[50]

采用一维数组 friends[50],正是用到了顺序表这种最简单的数据结构来表示

问题。

2.增添电子通讯录中的内容

对于电子通讯录这样一张顺序表来说,内容的录入是必不可少的 *** 作。由

于采用的是顺序存储结构。这项工作很简单,只需要在把输入的信息按顺序放

在空的friends数组元素中即可。函数Data_Input完成了信息的录入工作:

void Data_input(int j)

{

friends[j].number=j

printf("\n\n\n\tNo %d record",j)

printf("\n\n\tName:")/*读入姓名*/棚桥

scanf("%s",friends[j].name)

printf("\n\tSex(m/f):")/*读入姓别*/

scanf("%c",&friends[j].sex)

printf("\n\tbirthday:")/*读入出生年月*/

printf("\n\t\tyear:")

scanf("%d",&friends[j].birth.year)

printf("\n\t\tmonth")

scanf("%d",&friends[j].birth.month)

printf("\n\t\tday")

scanf("%d",&friends[j].birth.day)

printf("\n\tPost number:")/*读入邮编*/

scanf("%s",friends[j].addr.post_num)

printf("\n\tAddress:")/*读入家庭地址*/

scanf("%s",friends[j].addr.addr)

printf("\n\ttelephone:")/*读入联系电话*/

scanf("%s",friends[j].telephone)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12335270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存