1.题目要求
模拟手机通讯录管理系统,实现对手机中的通讯录进行管理.功能要求如下:
(1).查看功能:选择此功能时,列出以下三类选择: ①办公类
②个人类
③商务类
一个结点包括:姓名、电话号码、分类(办公类、个人类、商务类)、。例如:杨**1358******** 商务类 c*****
当录入重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通讯录中超过15条
信息时,存储空间已满,不能再录入新数据,录入的新数据能按递增的顺序自动进行条目编号。
(3).修改功能:选中某个人的姓名时,可对此人的相印数据进行修改。
(4).删除功能:选中某个人的姓名时,可对此人的相印数据进行删除,并自动调整后续条目的编号。
2.需求分析
根据题目要求,手机通讯录文件存放在手机上的指定位置(假设默认位置为D:\),所以应提供文件的输入、输出等操作;在浏览通讯录时要提供显示,查、插入、修改、删除等操作;另外还应该提供键盘式选择菜单实现功能选择。 3.总体设计
根据上面的要求分析,可以将这个系统分成以下模块:菜单选择;查看数据;增加数据;修改数据;删除数据。
4.详细设计.
函数准备部分主要包含库文件,预定义部分和本函数定义并使用的函数声明。
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
#define N 15//根据程序要求,本程序内的通讯录条数最多为15条
char address[100]="";
//结构体声明
typedef struct person//通讯录结构中结点的定义
{
int num;
char name[20];
char tel_number[100];
char type[20];
char email[30];
struct person *next;
}PERSON;
PERSON person[N];//定义N个结构体变量,用于存储文件数据
PERSON *head,*tail;//定义头指针和尾指针
//函数声明部分
PERSON *input();//建立文件,输入原始数据
PERSON *output();//建立文件,实现原始文本覆盖
void browse();//浏览(用包含browse1()和back()实现)
void browse1();//浏览模块子程序
void add();//添加数据
void modify();//修改数据
void del();//删除数据
void menu();//菜单程序
void back();//返回菜单或退出选择程序
PERSON *findnum(int num);//通过序号到数据
PERSON *findname(char name[]);//通过姓名到数据
PERSON *findtel(char tel[]);//通过电话号码到数据
②.主函数
主函数功能一般设计得比较简单,只提供输入、处理和输出的部分函数调用。其中各部分功能模块用菜单方式选择。其流程图如右图所示:
[程序]
//主函数入口
void main()
{
int n,w1;//变量n保存选择菜单数字,w1判断输入的数字是否在对应的数字范围内
printf("\t\t\t********Design by yiwanfu********\n");
Printf("\t\t\t\t------Connect me please send e-mail to ************** !^-^"); //程序设计者声明
printf("This is a program to manage your telephone address book.\n");
printf("And we just can manage %d pieces of message.\n\n",N);
printf("The message's form we necessary just as follows:\n");
printf("1.sequence-number, 2.name, 3.type, 4.telephone-number, 5.email\n");
printf("the type we afford is:\n\t");
printf("1.Office\n\t");
printf("2.Person\n\t");
printf("3.Bussiness\n\n");//函数作用声明
puts("\t\t******************MENU******************\n\n");//菜单选择
puts("\t\t\t\t 1.Input File");
puts("\t\t\t\t 2.Browse Data");
puts("\t\t\t\t 3.Add new Data");
puts("\t\t\t\t 4.modify Data");
puts("\t\t\t\t 5.Delete Data");
puts("\t\t\t\t 6. exit");
puts("\n\n\t\t****************************************\n");
printf("Choice your number(1-6):[ ]\b\b");
scanf("%d",&n);
while(n<1||n>6)
{
system("cls");//清屏
printf("\nThe function you choice is not included in our program,\nif your want new functions please contact us,\nat present, we just afford the function as follows:\n ");
puts("\t\t****************************************\n\n");
puts("\t\t\t\t 1.Input File");
puts("\t\t\t\t 2.Browse Data");
puts("\t\t\t\t 3.Add new Data");
puts("\t\t\t\t 4.modify Data");
puts("\t\t\t\t 5.Delete Data");
puts("\t\t\t\t 6. exit");
puts("\n\n\t\t****************************************\n");
printf("Now please choice the function you wanted with a number between 1 to 6:[ ]\b\b");
w1=1;
getchar();
}
switch(n)
{
case 1:input();break;//从手机通讯录输入数据(默认为本程序所在文件夹下的)
case 2:browse();break;//浏览数据
case 3:add();break;//添加数据
case 4:modify();break;修改数据
case 5:del();break;//删除数据
case 6:exit(0);//退出
default :exit(0);
}
return;
}
//菜单程序
void menu()//函数体内容与主函数下半相同
{
int n;//变量n保存选择菜单数字,w1判断输入的数字是否在对应的数字范围内
system("cls");
puts("\t\t******************MENU******************\n\n");
puts("\t\t\t\t 1.Input File");
puts("\t\t\t\t 2.Browse Data");