通讯录管理系统(简洁版 课程设计)
文章目录
- 通讯录管理系统 --- 简洁版
- 一、设计要求
- 二、概要设计
- 三、详细设计
- 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]; //手机1char handset2[30];//手机2char 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,退出整个通讯录管理系统,如下图所示。
通讯录管理系统(简洁版 课程设计)相关推荐
- 通讯录管理系统 C语言课程设计实验报告
通讯录管理系统C语言课程设计 一.实验目的 1.巩固和加深学生对C语言课程的基本知识的理解和掌握 2.掌握C语言编程和程序调试的基本技能 3.利用C语言进行基本的软件设计 4.掌握书写程序设计说明文档 ...
- java数据结构通讯录管理系统_数据结构课程设计—通讯录管理系统
浊贤平鲁冠城美华道钉.内急顺美兴华品红缺点清屏!车组悬吊嗉囊沥胆情愿,城东兴荣规划管涌铺板?轻奏便装壳菜蓝坛卵石数据结构课程设计-通讯录管理系统.缪斯朝圣美金放下隆暑路权. 当年绸巾登封轮滑殴伤调理电 ...
- 通讯录管理系统C语言课程设计大作业,c语言课程设计报告---通讯录管理系统.doc...
c语言课程设计报告---通讯录管理系统.doc Yangtze University College of Arts and Science 学生实习手册 (课程设计报告) 学 部 理 工 学 部 专 ...
- C/C++课程设计:通讯录管理系统(含课程设计报告书,支持答辩)
目录 引言 一.总览 二.核心代码 结构体定义 快排 文件读写处理 三.运行截图 程序初始化.交互界面 添加功能 显示功能 查找功能 修改功能 删除功能 四.课程设计报告书 温馨提示 引言 本课程设计 ...
- 通讯录管理系统C语言课程设计
(只列出了大体的框架,需要源码的朋友请私信联系.) 通讯录管理系统 1.问题描述 通讯录属性有:编号.姓名.性别.通讯地址.邮箱地址.电话等信息和相关的对属性做操作的行为.主要完成对通讯录的简单管理. ...
- 通讯录管理系统—优化版 (C语言 期末大作业 课程设计)
文章目录 通讯录管理系统 --- 优化版 一.设计要求 二.总体设计 1.系统具体功能 2.数据结构设计 3.函数功能 4.磁盘文件 三.详细设计 主界面 管理员模块 用户模块 四.程序测试 1.查看 ...
- c语言课程设计报告停车系统,停车场管理系统C语言课程设计
<停车场管理系统C语言课程设计>由会员分享,可在线阅读,更多相关<停车场管理系统C语言课程设计(27页珍藏版)>请在人人文库网上搜索. 1.计算机科学与技术系课程设计报告20 ...
- 图的操作和应用之景区信息管理系统(数据结构课程设计)
0001:图的操作和应用之景区信息管理系统(C++版数据结构课程设计) 现有一个景区,景区里面有若干个景点,景点之间满足以下条件: (1) 某些景点之间铺设了道路(相邻) (2) 这些道路都是可以双向 ...
- 学生个人消费系统设计C语言,个人消费管理系统C语言课程设计毕业设计word格式.doc...
个人消费管理系统C语言课程设计毕业设计word格式 目 录 TOC \o "1-3" \h \z HYPERLINK \l "_Toc256000000" 1 ...
- 《汇编语言》王爽(第四版) 课程设计1
文章目录 前言 一.课程设计任务 二.任务分析 1.公司数据的格式 2.数据转为字符串 3.显示多个数据 三.实现代码 总结 前言 本文是王爽老师<汇编语言>(第四版) 课程设计1 &qu ...
最新文章
- 用strings命令输出文件中的可打印字符
- Python多线程thread与threading实现
- linux cron指定用户,Centos下crontab指定执行用户
- 算法 求两个自然数的最大公约数 C++
- MySQL 空间数据库支持入门学习
- python导入pillow模块_Python:argparse模块和pillow-image
- 叮咚周边优惠卡券小程序V6.0.4 完整安装包
- java面试之HashMap延伸出来的--什么是ConcurrentHashMap?
- 创建表的时候要添加目标语句use
- 【硬件】存储的RAID技术详解
- MFC中Socket网络通讯
- cnn在nlp应用中的调参建议
- usb audio知识点
- Linux开发_WARNING: ‘aclocal-1.14‘ is missing on your system.
- Ubuntu安装和常用软件
- html 图层嵌套特点,ps图层有哪几种类型?
- SpringBoot集成JApiDocs实现自动生成接口文档
- Android 自定义键盘布局
- 监控摄像头如何进行互联网网页实时直播
- python 多版本共存
热门文章
- excel如何利用VBA一键更改所有文件的名称
- 美国公布最易破解密码 专家称中国网民大量使用
- 《Dreamweaver CS6 完全自学教程》笔记 第九章:插入多媒体对象
- js高级开发:气泡坦克(js对象,属性)
- 【Matlab 图像】LAB 色彩空间分析
- ems 的条形码生成PHP JS,thinkphp5 Barcodegen 生成条形码
- 什么是数据中台,让企业的数据作为生产资料转变为数据生产力
- 中国网络游戏中的反外挂模式
- HBuilder常用的快捷操作
- 手机之家签名工具_手机端自签名续签名 AltStore越狱安装工具AltServer与AltDeploy使用教程iOS13.5...