文章目录
- 通讯录管理系统 — 简洁版
-
- 一、设计要求
- 二、概要设计
- 三、详细设计
-
-
- 1.登录系统
- 2.通讯录管理系统
- 3.查找操作模块
- 4.修改信息模块
-
- 四、改进与增加模块说明
-
-
- 1.排序模块
- 2.菜单选项中,用户输入数字进行选择,输入非法字符将报错
- 3.优化了输出信息的界面
- 4.增加了登录、创建账户
-
- 五、程序测试
-
-
- 1.测试系统能否正确显示登录选项
- 2.测试系统能否创建用户
- 3.测试程序能否使用已创建的用户进入系统
- 4.测试系统能否正确录入联系人信息
- 5.测试系统能否正确显示联系人信息
- 6.测试系统能否正确查找联系人信息(以姓名查找为例)
- 7.测试系统能否正确排序
- 8.测试系统能否正确修改通讯录信息(以修改电话为例)
- 9.测试系统能否删除联系人信息
- 10.测试程序能否退出
-
通讯录管理系统 — 简洁版
一、设计要求
程序设计格式要求如下:
(1)要求使用多文方式实现设计。
(2)要求在各个文件内实现结构化设计。
(3)每个模块作为一个单独的C文件。
(4)系统的各个功能用函数调用的形式实现。
(5)宏和数据结构等放在头文件中,并使用条件编译。
(6)界面友好(良好的人机互交),程序要有注释。
完成一个学生成绩管理系统,具体要求如下:
1. 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等
2. 能够提供添加、删除和修改通讯录信息的功能
3. 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询
4. 将通讯录保存在文件中
5. 能够按表格方式输出通讯录信息
6. 退出程序
二、概要设计
1.数据结构设计
定义一个结构体类型address_list ,结构体中包含姓名、学号、编号、手机号、邮箱和地址,以及指向下一人信息的指针,共7个结构体成员。
struct address_list
{
char name[30]; //名字
char age[30]; //生日
int number; //编号
char handset1[30]; //手机1
char handset2[30];//手机2
char email[30]; //电子邮件
char address[30]; //通讯地址
struct address_list *next;
};
2.函数功能说明、调用关系
根据功能模块划分,通讯录管理系统所需的函数以及各函数的功能说明,如下表所示。
函数名 | 功能说明 |
---|---|
void print() | 创建函数,创建不带头节点的链表 |
void add() | 输出函数,表格方式输出通讯录信息 |
void delet() | 增加函数,新增通讯录信息 |
void order() | 删除函数,删除多余人的信息 |
void search() | 显示函数,单个地表格化地显示所需的信息 |
void renew() | 排序函数,按照姓名大小将通讯录信息排序 |
void out() | 查找函数,按指定方式查找所需信息 |
void set() | 创建用户函数,用于创建新的用户 |
void enter() | 进入系统函数,用于进入管理系统 |
void person() | 系统界面函数,管理系统的菜单界面 |
3.磁盘文件 | |
这里只有一个文件,就是保存我们用户名和密码的文件(jilu.txt);需要说明的是,这个通讯录系统没有管理员和用户之分,但它的特色功能是可以自己注册用户名和密码。 这里的jilu.txt文件就是用来保存我们的用户名和密码的;另外,这并不代表我们程序只有这一个文件,只是需要我们知道的有这一个文件,因为其他的文件在我们创建用户时程序就已经自动生成了对应的文件。 |
三、详细设计
1.登录系统
系统的执行从登录系统的菜单开始,允许用户输入1~3之间的数值来选择要进行的操作要进行的操作。
其处理过程如下:
- 若用户输入1,则进行用户登录操作,用户需输入正确的账号密码,才可以进入通讯录管理系统;
- 若用户输入2,则进行创建用户操作,用户可以创建新的账号密码,不同 的账号通讯录内的联系人不同,由不同的用户设定;
- 若用户输入3,则退出登录系统;
- 若输入其他数字、字符或字符串,则系统会给出出错的提示信息,重新 进行选择。
登录系统的处理流程,如下图所示。
2.通讯录管理系统
当用户从登录界面输入正确的账号和密码后,会进入到个人的通讯录管理系统,系统允许用户输入1~7之间的不同数字进行相应的操作。
其处理过程如下:
- 用户输入1,则会显示出该通讯录内现有联系人的信息;
- 若用户输入2,则会进行增加联系人的操作;可输入增加联系人的信息,包括姓名、出生日期、电话1、电话2、email、地址,其中输入电话时,系统会检测电话是否为有效的11位阿拉伯数字,并且如果联系人的无电话2,可不进行输入,进行下一项输入。
- 若用户输入3,则会进行查找联系人的操作,其中查找操作内包含精确查找 和模糊查找,分别可以输入手机号和姓名进行精确查找或模糊查找;
- 若用户输入4,则系统会按通讯录内联系人的姓名长短,由短到长进行排序,并输出排序后的通讯录内容;
- 若用户输入5,则进行修改信息操作,其中修改可以对手机号和地址进行修改;
- 若用户输入6,则进行删除信息的操作,输入需要删除人的姓名,该联系人的信息将会被清空;
- 若用户输入7,则退出整个系统;
- 若输入其他数字、字符或字符串,则系统会给出出错的提示信息,重新进行 选择;
通讯录管理系统的处理流程,如下图所示。
3.查找操作模块
模块功能:用户在管理系统界面中输入3时,进入查找信息模块,进入子菜单后,进行多种详细操作。
其处理过程如下:
- 用户选择查找操作后时,会进入到下一个子菜单,再次进行选择,选择精确查找或者模糊查找;
- 用户选择精确查找后,会再次进入选择,电话1、电话2、或者姓名查找;
- 用户选择模糊查找后,会再次进入选择,电话1、电话2、或者姓名查找;
- 查找后,用户可选择退出,返回到初始菜单界面,进行其他所需操作;
查找操作模块的处理流程,如下图所示。
4.修改信息模块
用户输入5,会进入修改信息操作菜单,该菜单允许用户输入1~4之间的数值进行相应的操作。
其处理过程如下:
- 若用户输入1,则可以修改手机号1,进入后按照提示输入修改联系人的姓名,再输入修改后的手机号1,即可完成修改操作;
- 若用户输入2,则可以修改手机号2,进入后按照提示输入修改联系人的姓名,再输入修改后的手机号2,即可完成修改操作;
- 若用户输入3,则可以修改地址,进入后按照提示输入修改联系人的姓名,再输入修改后的地址,即可完成修改操作;
- 如用户输入4,则返回上一级界面;
- 若输入其他数字、字符或字符串,则系统会给出出错的提示信息,重新进行选择;
修改信息模块的处理流程,如下图所示。
四、改进与增加模块说明
1.排序模块
排序模块可以对通讯录内的信息,按照联系人姓名的首字母顺序排序后储存并输出;在联系人数量较多的时候,可以对通讯录进行排序后输出,查看通讯录内的信息,这样更容易查找到用户希望查找的联系人的信息,代码如下。
void order()
{
FILE *fp;
int z,i,j;
struct stu
{
char name[30];
char age[30];
int number;
char handset1[30];
char handset2[30];
char email[30];
char address[30];
};
struct address_list *p,*last;
struct stu temp,s[200];
p=(struct address_list *)malloc(sizeof(struct address_list));
last=p;
fp=fopen(pp,"r");//打开
if(fp==NULL)
{
printf("can not open!\n");
return ;
}
i=0;
while(fread(p,LEN,1,fp))
{
strcpy(s[i].name,p->name);
strcpy(s[i].age,p->age);
s[i].number=p->number;
strcpy(s[i].handset1,p->handset1);
strcpy(s[i].handset2,p->handset2);
strcpy(s[i].email,p->email);
strcpy(s[i].address,p->address);
i++;
}
z=i;
for(i=0;i<z-1;i++)
{
for(j=i+1;j<z;j++)
{
if(‘s[i].name’>’s[j].name’)>0)
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
fclose(fp); //关闭
fp=fopen(pp,"w"); //打开
for(i=0;i<z;i++)
{
strcpy(p->name,s[i].name);
strcpy(p->age,s[i].age);
p->number=s[i].number;
strcpy(p->handset1,s[i].handset1);
strcpy(p->handset2,s[i].handset2);
strcpy(p->email,s[i].email);
strcpy(p->address,s[i].address);
fwrite(p,LEN,1,fp);
}
fclose(fp);
printf("=*=*=*=*=*=*=*=*=\n");
printf(" 排序后信息如下:\n");
printf("=*=*=*=*=*=*=*=*=\n");
print();
}
2.菜单选项中,用户输入数字进行选择,输入非法字符将报错
例如,查询菜单下,有3个等待用户选择的子菜单项,代码如下。
void search()
{
...//源代码较长,在此省略部分代码
...
...
printf(" ┌──────────┐\n");
printf(" │1 精确查找│\n");
printf(" │2 模糊查找│\n");
printf(" │3 退出 │\n");
printf(" └──────────┘");
printf("\n");
printf("=*=*=*=*=*=*=*=*=\n");
printf(" 请输入您的操作:\n");
printf("=*=*=*=*=*=*=*=*=\n");
printf("\n");
gets(str);
printf("\n");
if(strlen(str)>1)
{
printf("=*=*=*=*=*=\n");
printf("操作错误!\n");
printf("=*=*=*=*=*=\n");
printf("\n");
continue;
}
switch(*str)
{
case ‘1’: ....;break;
case ‘2’: ....;break;
case ‘3’: ....;break;
default :printf(“操作错误!\n”);break;
}
...
...
...//源代码较长,在此省略部分代码
}
3.优化了输出信息的界面
输出信息按照表格的方式输出,使输出界面看起来更清晰明了,用户体验更加舒畅,代码如下。
void print()
{
FILE *fp;
int n=0;
struct address_list *p,*head,*last;
p=(struct address_list *)malloc(LEN);
{
head=p;
last=p;
}
fp=fopen(pp,"r");
if(fp==NULL)
{
fp=fopen(pp,"w");
printf("通讯录不存在!已重新创建一个通讯录!\n");
//return ;
}
while(fread(p,LEN,1,fp))
{
n++;
p->number=n;
if(n==1)
{
printf("================================================================================================\n");
printf("|姓名 |生日 |编号 |手机号1 |手机号2 |邮箱 |地址 |\n");
}
printf("------------------------------------------------------------------------------------------------\n");
printf("|%-12s|%-13s|%-6d|%-14s|%-14s|%-19s|%-10s|\n",p->name,p->age,p->number,p->handset1,p->handset2,p->email,p->address);
}
if(n!=0)
printf("================================================================================================\n");
}
...//源代码较长,在此省略部分代码
...
...
fclose(fp);
}
4.增加了登录、创建账户
系统采用了账号密码登录的方式,增强了系统在不同情况下通用性,方便多人添加的通讯录,并且使用了创建用户的方式来为不同的用户创建通讯录,创建用户的账号密码与通讯录文件都将保存到文件中,代码如下。
void est() //创建用户
{
FILE *fp,*Fp;
int flag=1;
struct person *p;
char Number[30],Key[30];
p=(struct person *)malloc(sizeof(struct person));
fp=fopen("jilu.txt","r");
if(fp==NULL)
{
printf("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf(" 用户目录文件不存在,已重新创建.\n");
printf("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf("\n");
printf("=*=*=*=*=*=*=*=*=\n");
printf(" 请重新创建用户\n");
printf("=*=*=*=*=*=*=*=*=\n");
printf("\n");
fp=fopen("jilu.txt","w");
fclose(fp);
return ;
}
printf("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf(" 请设置新建用户名:(请输入英文字符)\n");
printf("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf("\n");
gets(Number);
printf("\n");
printf("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf(" 请设置用户密码:(仅限英文与数字)\n");
printf("=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf("\n");
gets(Key);
printf("\n");
...//源代码较长,在此省略部分代码
...
...
}
}
五、程序测试
1.测试系统能否正确显示登录选项
执行程序后,得到的界面如下图所示,该图显示有本系统的登录选项。
2.测试系统能否创建用户
输入如下数据:
用户名:mye 密码:12345
按照给定账号密码输入后,系统提示创建成功。如下图所示。
3.测试程序能否使用已创建的用户进入系统
按照已经给定的账号密码,进入到账号登陆界面,输入账号和密码,如下图所示,系统提示成功进入通讯录管理系统。
4.测试系统能否正确录入联系人信息
测试数据
姓名:zhangsan
生日:1998-01-01
手机号1:12345654321
手机号2:12345676543
email:123@163.com
地址:安阳
按照所给联系人信息录入到通讯录,如下图所示。
5.测试系统能否正确显示联系人信息
在主菜单界面输入数字1,进行显示操作,显示结果如下图所示。
6.测试系统能否正确查找联系人信息(以姓名查找为例)
在主菜单界面输入数字3,进入查找界面,依次测试精确查找和模糊查找,结果分别如下图所示。
7.测试系统能否正确排序
在主菜单界面输入数字4,进入排序界面,排序后输出如下图所示。
8.测试系统能否正确修改通讯录信息(以修改电话为例)
在主菜单中输入数字5,进入修改信息界面,选择修改电话1,将zhangsan的电话1修改为18637621756,结果如下图所示。
9.测试系统能否删除联系人信息
在主菜单界面输入数字6,进入删除操作,删除lisi的信息,界面如下图所示。
10.测试程序能否退出
在主菜单中输入7,退出整个通讯录管理系统,如下图所示。
今天的文章通讯录管理系统详细设计_数据结构课程设计通讯录分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/58834.html