C语言课程设计-电话簿管理系统

文章描述了一个电话本管理系统的详细设计和实现,包括添加、查看、查找、修改和删除用户信息的功能,使用了结构体和链表数据结构。系统允许用户输入联系人信息,并进行查找、修改和删除操作,同时支持分页显示信息和排序。
  • 需求分析:

1.设计题目:电话本管理系统

2.系统功能需求分析:

电话簿管理系统的主体是针对用户的一系列操作,一般来说,主要功能有添加用户,查看用户信息,查找用户信息以及对用户信息的修改等等。

  1. 定义结构体类型
  1. 定义用户信息的结构体类型
  2. 定义用户的双向链表的特点
  1. 添加用户信息

编写程序接受从键盘输入用户数据,用格式化数据写入函数fprinft直接把用户信息储存到指定文件中

  1. 查看用户信息

用格式化读出fscanf直接从指定文件中读出用户信息即可

  1. 查找用户信息

用格式化读出函数fscanf逐步从指定文件中读出数据,用待查找用户信息与读出的数据逐步作对比,直到找到指定用户位置,然后把该用户信息输出出来

  1. 用户的排序
  2. 首先先从指定文件中读出数据,然后用对字符数组的排序的方法进行用户的排序
  3. 用户信息的修改
  4. 先创建用户链表的结点
  5. 其次从指定文件中读出用户数据,把用户数据写入用户双向链表中再次就是输入待修改用户的信息,用对链表的一一般处理方法找到待修改信息的用户的位置,然后用新的用户信息取代之
  6. 7.删除用户信息
  7. 首先输入待删除的用户的信息
  8. 其次查找并确认待删除用户信息的在用户信息双向链表中的位置然后把该用户信息的结点从用户双向链表中删除

最后保存删除该用户之后的其他用户的信息,即把链表重新连接成-新的链表

8.头文件

包含用到的头文件:

定义符号常量:

定义结构体等数据结构:

9.主函数

包含库文件:

包含基本操作函数的源文件:

定义主菜单

概要设计:

  • 详细设计:
  1. 输入模块。 

此模块主要完成将数据存入数组中的工作。记录既可以从以文本格式存储的数据文件中读入,也可以从键盘逐个输入。记录由与联系人有关的基本信息字段构成。

(2)查询模块。

此模块主要完成在数组中查找满足相关条件的记录。用户可以按照联系人姓名或联系人电话号码在数组中进行查找。

(3)更新模块。

此模块主要实现对记录的修改、删除、插入和排序。在进行更新操作之后,需要将修改的数据存入源数据文件。

(4)输出模块。 

实现对记录的存盘,并以表格形式将记录信息打印在屏幕上。

  1. 添加新用户
  2. 函数原型: void luru()
  3. 功能:通过格式化数据读写函数,把用户信息写入到指定文件中
  4. 参数: void
  5. 返回值: void
  6. 查看用户信息函数原型: void
  7. 功能:通过从文件中读田用户数据,三把用户数据输出到参数: void
  8. 返回值: void
  9. (3)查找用户信息
  10. 函数原型: void chaxun ()
  11. 功能:通过字符串操作函数确认待查找用户在用户数组中的位置,然后输出其各项信息
  12. 参数: void
  13. 返回值: void
  14. (4)用户的排序

函数原型: void paixu ()

功能:通过对字符串数组的操作对用户进行排序

参数: void

返回值: void

(5)用户信息的修改

函数原型: void xiugai ()

功能:通过建立用户信息双向链表,用字符串处理函数查找用户位置,然后对其信息进行修改

参数: void

返回值: void

(6)删除用户信息

函数原型: void shanchu ( )

功能:通过查找用户在双向链表中的位置,删除指定用户信息

参数: void

返回值: void

  • 测试结果

 

程序代码

#include<stdio.h>

#include <string.h>

#include<stdlib.h>

int n=0;

struct person

{char name[20];

char WP[20];

char PN[20];

char MPN[20];

char FZ[20];

char EM[20];

char QQ[20];

};



void fun1 (struct person b[100],int B[100])

{int i=0;

int H;

do

{printf("请输入第%d个联系人的信息\n",i+1);

printf("请输入姓名:");

scanf("%s",b[B[i]].name); printf("\n");

printf("请输入工作地址:");

scanf("%s",b[B[i]].WP); printf("\n");

printf("请输入固定电话号码:");

scanf("%s",b[B[i]].PN); printf("\n");

printf("请输入移动电话号码:");

scanf("%s",b[B[i]].MPN); printf("\n");

printf("请输入与本人关系:");

scanf("%s",b[B[i]].FZ); printf("\n");

printf("请输入邮箱:");

scanf("%s",b[B[i]].EM); printf("\n");

printf("请输入QQ号码:");

scanf("%s",b[B[i]].QQ); printf("\n");

i++;n++;

printf("1继续输入;0退出\n");

scanf("%d",&H);

}while(H!=0);

printf("\n");

}



void fun2 (struct person F[100],int h[100])

{int i=0,t,k,p,m;

t=n/10;

printf("所有联系人的信息如下:\n");

if(t==0)

{for(i=0;i<n;i++)

printf("姓名:%s\t单位:%s\t固定电话:%s\t移动电话:%s\t分类:%s\t邮箱:%s\tQQ:%s\n",F[h[i]].name,F[h[i]].WP,F[h[i]].PN,F[h[i]].MPN,F[h[i]].FZ,F[h[i]].EM,F[h[i]].QQ);}

else

{for(k=0;k<t;k++)

{for(i=0;i<10;i++)

printf("姓名:%s\t单位:%s\t固定电话:%s\t移动电话:%s\t分类:%s\t邮箱:%s\tQQ:%s\n",F[h[10*k+i]].name,F[h[10*k+i]].WP,F[h[10*k+i]].PN,F[h[10*k+i]].MPN,F[h[10*k+i]].FZ,F[h[10*k+i]].EM,F[h[10*k+i]].QQ);

printf("输入'1'显示下一页\n");

scanf("%d",&p);

if(p==1)

system("cls");}

m=10*t;

for(i=0;m<n;m++)

printf("姓名:%s\t单位:%s\t固定电话:%s\t移动电话:%s\t分类:%s\t邮箱:%s\tQQ:%s\n",F[h[m]].name,F[h[m]].WP,F[h[m]].PN,F[h[m]].MPN,F[h[m]].FZ,F[h[m]].EM,F[h[m]].QQ);}

}



void fun3(struct person d[100],int e[100])

{char x[20],p[2];

int D,i;

do{int m=0;

printf("请输入要查找的信息:\n");

scanf("%s",&x);

for(i=0;i<n;i++)

if(!strcmp(d[e[i]].name,x)||!strcmp(d[e[i]].WP,x)||!strcmp(d[e[i]].PN,x)||!strcmp(d[e[i]].MPN,x)||!strcmp(d[e[i]].FZ,x)

   ||!strcmp(d[e[i]].EM,x)||!strcmp(d[e[i]].QQ,x))

{D=e[i];

printf("要查询的联系人信息如下:\n");

printf("姓名:%s\t单位:%s\t固定电话:%s\t移动电话:%s\t分类:%s\t邮箱:%s\tQQ:%s\n",d[D].name,d[D].WP,d[D].PN,d[D].MPN,d[D].FZ,d[D].EM,d[D].QQ);}

printf("输入Y或y继续查询,输入N或n退出\n");

scanf("%s",&p);

}while(!strcmp(p,"Y")||!strcmp(p,"y"));

}



void fun4(struct person c[100],int k[100])

{char d[20]; char p[2];

int t[10],j,i,x;

do{printf("请输入要删除的联系人信息:\n");

scanf("%s",&d);

for(i=0;i<n;i++)

if(!strcmp(d,c[k[i]].name)||!strcmp(d,c[k[i]].WP)||!strcmp(d,c[k[i]].PN)||!strcmp(d,c[k[i]].MPN)||!strcmp(d,c[k[i]].FZ)||!strcmp(d,c[k[i]].EM)||!strcmp(d,c[k[i]].QQ))

j=k[i];

for(x=j;x<n;x++)

k[x]=x+1;

n--;

printf("输入Y或y继续,输入N或n退出\n");

scanf("%s",&p);

}while(!strcmp(p,"Y")||!strcmp(p,"y"));

}



void fun5(struct person b[100],int B[100])

{int H;

do

{printf("请输入添加联系人的信息\n");

printf("请输入姓名:");

scanf("%s",b[B[n]].name); printf("\n");

printf("请输入工作地址:");

scanf("%s",b[B[n]].WP); printf("\n");

printf("请输入固定电话号码:");

scanf("%s",b[B[n]].PN); printf("\n");

printf("请输入移动电话号码:");

scanf("%s",b[B[n]].MPN); printf("\n");

printf("请输入与本人关系:");

scanf("%s",b[B[n]].FZ); printf("\n");

printf("请输入邮箱:");

scanf("%s",b[B[n]].EM); printf("\n");

printf("请输入QQ号码:");

scanf("%s",b[B[n]].QQ); printf("\n");

n++;

printf("1继续添加;0退出\n");

scanf("%d",&H);

}while(H!=0);

printf("\n");

}



void fun6(struct person T[100],int r[100])

{char p[2],d[20];

int i,t;

do

{printf("请输入要修改联系人信息:\n");

scanf("%s",&d);

for(i=0;i<n;i++)

if(!strcmp(d,T[r[i]].name)||!strcmp(d,T[r[i]].WP)||!strcmp(d,T[r[i]].PN)||!strcmp(d,T[r[i]].MPN)||!strcmp(d,T[r[i]].FZ)||!strcmp(d,T[r[i]].EM)||!strcmp(d,T[r[i]].QQ))

{t=r[i];

printf("请输入改后联系人的信息\n");

printf("请输入姓名:");

scanf("%s",T[t].name); printf("\n");

printf("请输入工作地址:");

scanf("%s",T[t].WP); printf("\n");

printf("请输入固定电话号码:");

scanf("%s",T[t].PN); printf("\n");

printf("请输入移动电话号码:");

scanf("%s",T[t].MPN); printf("\n");

printf("请输入与本人关系:");

scanf("%s",T[t].FZ); printf("\n");

printf("请输入邮箱:");

scanf("%s",T[t].EM); printf("\n");

printf("请输入QQ号码:");

scanf("%s",T[t].QQ); printf("\n");

}

printf("输入Y或y继续,输入N或n退出\n");

scanf("%s",&p);

}while(!strcmp(p,"Y")||!strcmp(p,"y"));

}



void main()

{struct person a[100];

int A[100],i,X;

for(i=0;i<100;i++)

A[i]=i;

do

{printf("*************************菜单************************\n");

printf("           请选择要进行的操作\n");

printf("           1 : 输入联系人信息\n");

printf("           2 :分屏显示所有联系人信息\n");

printf("           3 : 查找联系人信息\n");

printf("           4 : 删除联系人信息\n");

printf("           5 : 增加联系人信息\n");

printf("           6 : 修改联系人信息\n");



printf("           0 :退出\n");

scanf("%d",&X);

switch(X)

 {case 1: fun1(a,A);break;

    case 2: fun2(a,A);break;

     case 3: fun3(a,A);break;

  case 4: fun4(a,A);break;

     case 5: fun5(a,A);break;

     case 6: fun6(a,A);break;



 }

}while(X!=0);

}

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MTXi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值