失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【课程设计-通讯录管理系统】

【课程设计-通讯录管理系统】

时间:2020-07-02 12:39:27

相关推荐

【课程设计-通讯录管理系统】



/***********************************************************

*版权所有(C).Hu Xinyue

*

*文件名称:txl.cpp

*文件标识:无

*内容摘要:该项目的所有函数的实现

*其他说明:无

*当前版本:V1.0

*作者:胡馨月

*完成日期:1229

*

*修改记录1:

*修改日期:1229

*版本号:V1.0

*修改人:Hu Xinyue

*修改内容:

********************************************************************/

#include"txl.h"

/***********************************************************

*功能描述: 主函数,负责项目的调度

*输入参数: 无

*输出参数: 无

*返回值: 无

*其他说明: 无

*************************************************************/

int main() //主函数

{

creat();

huanying();

Save();

return 0;

}

/***********************************************************

*功能描述:新建或者打开已经存在的文件,从中读取内容

*输入参数: 无

*输出参数: 无

*返回值: 无

*其他说明: 无

*************************************************************/

void creat() //创建或读取文件

{

int j;

long k;

fp=fopen("数据文件.txt","r t");

if(fp!=NULL)

{

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

{

j=fgetc(fp);

if(j==EOF)

return;

k=i;

fseek(fp,k*sizeof(struct persons),0);

fread(&persons[i],sizeof(struct persons),1,fp);

s=(linklist)malloc(sizeof(listnode));

s->num=persons[i].num;

strcpy(s->name,persons[i].name);

strcpy(s->e_addr,persons[i].e_addr);

strcpy(s->tel_no,persons[i].tel_no);

s->sim_no=persons[i].sim_no;

strcpy(s->arch,persons[i].arch);

s->cishu=persons[i].cishu;

if(head==NULL) //若为空,则建立新节点

{

head=s;

r=head;

head->next=NULL;

}

else //否则,插入节点

{

r->next=s;

r=s;

r->next=NULL;

}

}

fclose(fp);

}

else //存入文件

{

fp=fopen("数据文件.txt","w");

i=1;

}

}

/***********************************************************

*功能描述: 开始界面,提供选择操作的界面

*输入参数: 选择键

*输出参数: 无

*返回值: 无

*其他说明: 通过选择进入各种功能

*************************************************************/

void huanying() //选择界面

{

system("cls"); //清屏

do

{

xiaotu();

cout<<" 欢迎使用通讯录管理系统 "<<endl;

cout<<endl;

cout<<" +---------------------------------------------------------+"<<endl;

cout<<" + 1.显示分组信息 5.拨号 +"<<endl;

cout<<" + 2.删除信息 6.保存并退出 +"<<endl;

cout<<" + 3.添加信息 7.查找信息 +"<<endl;

cout<<" + 4.编辑信息 8.输出全部信息 +"<<endl;

cout<<" +---------------------------------------------------------+"<<endl;

cout<<endl;

cout<<"请输入您的的选择-----"<<endl;

cin>>ch;

switch(ch) //选择操作

{

case '1':

system("cls");

Show();

break;

case '2':

system("cls");

Delete();

break;

case '3':

system("cls");

Input();

break;

case '4':

system("cls");

Alter();

break;

case '5':

system("cls");

Dial();

break;

case '6':

system("cls");

Save();

fclose(fp);

xiaotu();

exit(0);

break;

case '7':

system("cls");

find();

break;

case '8':

system("cls");

shuchu();

break;

default:

printf("\n\t*********************************\n");

printf("\n\t 请输入 1-8!!! \n");

printf("\n\t**********************************");

break;

}

}

while(1);

}

/***********************************************************

*功能描述: 添加一个人的信息;插入到链表

*输入参数: 联系人信息

*输出参数: 无

*返回值: 无

*其他说明: 会有判断该人是否存在的功能;

若存在则有返回重新输入或者回到主界面的功能.

*************************************************************/

void Input() //添加信息

{

int choic;

s=(linklist)malloc(sizeof(listnode)); //建立头节点

cout<<"----------------------------------------------"<<endl;

printf("\n\n\t 请输入该用户的信息:\n");

cout<<"请输入姓名: ";

cin>>s->name;

cout<<"请输入电话: ";

cin>>s->tel_no;

cout<<"请设置快捷键(0-9): ";

cin>>s->sim_no;

cout<<"请输入地址: ";

cin>>s->e_addr;

cout<<"请输分组名: ";

cin>>s->arch;

s->cishu=0;

cout<<"----------------------------------------------"<<endl;

if(head==NULL)

printf("\n\n");

else

{

p8=head;

while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)

p8=p8->next;

if(p8!=NULL)

{

cout<<"+----------------------------------------------+"<<endl;

cout<<"+------------您添加的用户已存在!---------------+"<<endl;

cout<<endl;

cout<<"+ 重新输入请按1,返回菜单请按 3 +"<<endl;

cout<<endl;

cout<<"+----------------------------------------------+"<<endl;

cin>>choic;

if(choic==1)

Input();

if(choic==3)

huanying();

free(s);

}

}

if(head==NULL)

{

head=s;

head->next=NULL;

}

else

{

r->next=s;

r=s;

r->next=NULL; //尾插法

}

}

/***********************************************************

*功能描述: 查找一个联系人信息的功能

*输入参数: 联系人姓名

*输出参数: 该联系人信息

*返回值: 无

*其他说明: 无

*************************************************************/

void find() //查找功能

{

int choic;

system("cls");

printf("\n\n\t 请输入姓名:");

cin>>name1;

p10=head;

while(p10!=NULL&&strcmp(name1,p10->name)!=0) //判断是否存在

p10=p10->next;

if(p10==NULL)

{

printf("\n\n\t 您选择的用户不存在!");

printf("\n\n\t 请重新输入,请选择是重新输入(1)或者返回主菜单(2)");

cin>>choic;

if(choic==1)

find();

{

}

if(choic==2)

{

system("cls");

huanying();

}

}

else

{

cout<<"----------------------------------------------"<<endl;

cout<<"+ 名 字: "<<p10->name<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 电 话: "<<p10->tel_no<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 快捷键: "<<p10->sim_no<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 分 组: "<<p10->arch<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 拨打次数: "<<p10->cishu<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"**********************************************"<<endl;

cout<<endl;

cout<<"返回界面请按1"<<endl;

cout<<endl;

cout<<"----------------------------------------------"<<endl;

cin>>choic;

if(choic==1)

{

system("cls");

huanying();

}

}

}

/***********************************************************

*功能描述: 编辑一个联系人的信息

*输入参数: 联系人信息

*输出参数: 无

*返回值: 无

*其他说明: 这里运用了input()的功能,同样有input()的判断功能

*************************************************************/

void Alter() //编辑信息

{

int choic;

cout<<"+------------------------------------------+"<<endl;

cout<<endl;

printf("\n\n\t 请输入姓名:");

cin>>name1;

cout<<endl;

cout<<"+-------------------------------------------+"<<endl;

p3=head;

while(p3!=NULL&&strcmp(name1,p3->name)!=0)

p3=p3->next;

if(p3==NULL)

{

cout<<" +----------------------------------------------+"<<endl;

cout<<"+---------您选择的用户不存在!-------------+"<<endl;

cout<<endl;

cout<<"+ 重新输入请按1,返回菜单请按 3 +"<<endl;

cout<<endl;

cout<<"+----------------------------------------------+"<<endl;

cin>>choic;

if(choic==1)

Alter();

if(choic==3)

huanying();

}

else

{

cout<<endl;

printf("\n\n\t 请输入该用户的新信息!");

cout<<"-----------------------------------------"<<endl;

printf("\n\n\t 请输入该用户的信息:\n");

cout<<"请输入姓名:";

cin>>s->name;

cout<<"请输入电话:";

cin>>s->tel_no;

cout<<"请设置快捷键(0-9):";

cin>>s->sim_no;

cout<<"请输入地址:";

cin>>s->e_addr;

cout<<"请输入分组名:";

cin>>s->arch;

s->cishu=0;

cout<<"-------------------------------------------"<<endl;

while(p9!=NULL&&strcmp(name1,p9->name)!=0&&strcmp(tel_no1,p9->tel_no)!=0)

p9=p9->next;

if(p9==NULL)

{

strcpy(p3->name,name1);

strcpy(p3->tel_no,tel_no1);

strcpy(p3->e_addr,e_addr1);

p3->sim_no=sim_no1;

strcpy(p3->arch,arch1);

}

else

{

cout<<"+----------------------------------------------+"<<endl;

cout<<"+------------您添加的用户已存在!---------------+"<<endl;

cout<<endl;

cout<<"+ 返回菜单请按 1 +"<<endl;

cout<<endl;

cout<<"+----------------------------------------------+"<<endl;

cin>>choic;

if(choic==1)

{

system("cls");

huanying();

}

}

}

}

/***********************************************************

*功能描述: 进行对分组的选择功能

*输入参数: 分组名字

*输出参数: 无

*返回值: 分组名字

*其他说明: 无

*************************************************************/

void Show() //选择想要查看的分组

{

p2=head;

int choic;

char ch1[10];

if(p2==NULL) //若为空

{

cout<<"----------------------------------------------"<<endl;

cout<<" 未添加分组 "<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<" 按1返回主菜单 "<<endl;

cout<<"----------------------------------------------"<<endl;

cin>>choic;

if(choic==1)

huanying();

}

else

{

printf(" 请选择查看的分组: \n");

while(p2!=NULL) //通过不断指向下一个节点读取分组信息

{

cout<<"------------分组: "<<p2->arch<<endl;

p2=p2->next;

continue;

}

cout<<" 请输入分组名: "<<endl;

cout<<" "<<endl;

cin>>ch1;

ShowA(ch1);

}

}

/***********************************************************

*功能描述:输出一个分组的全部联系人的信息

*输入参数: 选择键

*输出参数: 无

*返回值: 无

*其他说明: 无

*************************************************************/

void ShowA(char aa[10]) //打印分组联系人信息

{

int choic;

p11=head;

if(p11==NULL)

{

cout<<"----------------------------------------------"<<endl;

cout<<endl;

cout<<"该分组未添加联系人,返回界面请按1,继续选择请按3"<<endl;

cout<<endl;

cout<<"----------------------------------------------"<<endl;

cin>>choic;

if(choic==1)

huanying();

if (choic==3)

Show();

}

else

while(p11!=NULL)

{

if((strcmp(p11->arch,aa))==0)

{

cout<<"----------------------------------------------"<<endl;

cout<<"+ 名 字: "<<p11->name<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 电 话: "<<p11->tel_no<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 快捷键: "<<p11->sim_no<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 分 组: "<<p11->arch<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 拨打次数: "<<p11->cishu<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"**********************************************"<<endl;

}

p11=p11->next;

continue;

}

cout<<endl;

cout<<"返回界面请按1,继续选择请按3"<<endl;

cout<<endl;

cout<<"----------------------------------------------"<<endl;

cin>>choic;

if(choic==1)

{

system("cls");

huanying();

}

if (choic==3)

{

system("cls");

Show();

}

}

/***********************************************************

*功能描述: 删除一个联系人的信息

*输入参数: 联系人姓名

*输出参数: 无

*返回值: 无

*其他说明: 先进行查找是否有该联系人

*************************************************************/

void Delete() //删除通讯人信息

{

printf("\n\n\t 请输入要删除用户的姓名:");

cin>>name1;

p4=head;

if(strcmp(p4->name,name1)==0)

{

p4=p4->next;

head=p4;

}

else

{

while(strcmp(p4->next->name,name1)!=0)

p4=p4->next;

p5=p4->next;

p4->next=p5->next;

free(p5);

}

}

/***********************************************************

*功能描述: 拨号动画的功能;该联系人拨号次数+1

*输入参数: 选择键1、2;(1)输入姓名、(2)输入快捷键

*输出参数: 联系人电话,拨号次数

*返回值: 拨号次数

*其他说明: 动画过程用了时间函数

*************************************************************/

void Dial() //拨号功能

{

int c,choic;

int a;

char b;

cout<<"+----------------------------------------------+"<<endl;

cout<<"+ 拨叫用户请按(1) 使用单键拨号请按(2) +"<<endl; //两种拨号方式

cout<<"+----------------------------------------------+"<<endl;

cin>>a;

p0=head;

if(a==1)

{

cout<<" 请输入拨叫用户的姓名:";

cin>>name1;

while(strcmp(name1,p0->name)!=0&&p0!=NULL)

p0=p0->next;

if(p0==NULL)

{

cout<<"+----------------------------------------------+"<<endl;

cout<<" 您选择的用户不存在!";

cout<<"+----------------------------------------------+"<<endl;

cout<<"+ 重新输入请按(1) 返回主菜单(2) +"<<endl;

cout<<"+----------------------------------------------+"<<endl;

cin>>choic;

if(choic==1)

{

system("cls");

Dial();

}

if(choic==2)

{

system("cls");

huanying();

}

}

else

{

cout<<endl;

cout<<" "<<endl;

cout<<" loding------ "<<endl;

for(int j=0; j<20; j++) //运用时间函数,实现拨号界面

{

Sleep(100);

cout<<"■";

}

cout<<" "<<endl;

cout<<" "<<endl;

Sleep(500);

cout<<endl;

cout<<p0->tel_no<<endl;

p0->cishu=p0->cishu+1;

cout<<"+----------------------------------------------+"<<endl;

cout<<"拨打次数: "<<p0->cishu<<endl;

cout<<"+----------------------------------------------+"<<endl;

cout<<endl;

}

}

else

{

cout<<"请输入单键号码:";

cin>>b;

while(p0!=NULL&&b!=p0->sim_no) //遍历链表比较查询

p0=p0->next;

if(p0==NULL)

{

cout<<" 您输入的单键号码不存在!";

cout<<"+----------------------------------------------+"<<endl;

cout<<"+ 重新输入请按(1) 返回主菜单(2) +"<<endl;

cout<<"+----------------------------------------------+"<<endl;

cin>>choic;

if(choic==1)

{

find();

}

if(choic==2)

{

system("cls");

huanying();

}

}

else

{

cout<<endl;

cout<<" "<<endl;

cout<<" loding------ "<<endl;

for(int j=0; j<20; j++)

{

Sleep(100);

cout<<"■";

}

cout<<" "<<endl;

cout<<" "<<endl;

Sleep(500);

cout<<p0->name<<endl;

cout<<p0->tel_no<<endl;

p0->cishu=p0->cishu+1;

cout<<"+----------------------------------------------+"<<endl;

cout<<"拨打次数: "<<p0->cishu<<endl;

cout<<"+----------------------------------------------+"<<endl;

cout<<endl;

}

}

}

/***********************************************************

*功能描述: 输出全部联系人的信息

*输入参数: 无

*输出参数: 信息

*返回值: 无

*其他说明: 无

*************************************************************/

void shuchu() //输出全部信息

{

int choic;

p10=head;

while(p10!=NULL)

{

cout<<"----------------------------------------------"<<endl;

cout<<"+ 名 字: "<<p10->name<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 电 话: "<<p10->tel_no<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 快捷键: "<<p10->sim_no<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 分 组: "<<p10->arch<<endl;

cout<<"----------------------------------------------"<<endl;

cout<<"+ 拨打次数: "<<p10->cishu<<endl;

cout<<"----------------------------------------------"<<endl;

p10=p10->next; //遍历输出信息

continue;

}

cout<<endl;

cout<<"返回界面请按1,继续选择请按3"<<endl;

cout<<endl;

cout<<"----------------------------------------------"<<endl;

cin>>choic;

if(choic==1)

huanying();

if (choic==3)

Show();

}

/***********************************************************

*功能描述:输出兔子图案

*输入参数: 无

*输出参数: 无

*返回值: 无

*其他说明: 无

*************************************************************/

void xiaotu() //兔子图案

{

cout<<endl;

cout<<" ┏━┓┏━┓"<<endl;

cout<<" ★│┃ ┃│★"<<endl;

cout<<" ┃│┗☆┛│┃"<<endl;

cout<<" ┃┃"<<endl;

cout<<" ┃ ^ ^ ┃"<<endl;

cout<<" ┃ ﹌ □ ﹌ ┃ "<<endl;

cout<<" ┗○━━━○┛"<<endl;

}

/***********************************************************

*功能描述: 将操作完成后的信息存储到文件

*输入参数: 无

*输出参数: 无

*返回值: 无

*其他说明: 方便下次运行时的调用

*************************************************************/

void Save() //存入文件

{

int j;

fp=fopen("数据文件.txt","w");

for(p2=head,j=0; p2!=NULL; j++ ,p2=p2->next)

{

strcpy(persons[j].name,p2->name);

strcpy(persons[j].tel_no,p2->tel_no);

persons[j].sim_no=p2->sim_no;

strcpy(persons[j].e_addr,p2->e_addr);

strcpy(persons[j].arch,p2->arch);

persons[j].cishu=p2->cishu;

fwrite(&persons[j],sizeof(struct persons),1,fp);

}

}

/***********************************************************

*版权所有(C).Hu Xinyue

*

*文件名称:txl.cpp

*文件标识:无

*内容摘要:该项目的所有函数的实现

*其他说明:无

*当前版本:V1.0

*作者:胡馨月

*完成日期:1229

*

*修改记录1:

*修改日期:1229

*版本号:V1.0

*修改人:Hu Xinyue

*修改内容:

********************************************************************/

#include <iostream>

#include<stdlib.h>

#include<windows.h>

#include<stdio.h>

using namespace std;

#define maxlen 100 //最多100个信息

void find(); //查找功能

void huanying(); //选择界面

void creat(); //创建或打开文件

void ShowA(char aa[10]); //显示分组信息

void Show(); //选择分组

void Delete(); //删除功能

void find(); //查找功能

void Save(); //存入文件

void Input(); //添加信息

void xiaotu(); //兔子图案

void shuchu(); //输出全部信息

void Alter(); //编辑信息

void Dial(); //拨号功能

//存放通讯表的结构体数组peisons[maxlen]的定义

struct persons

{

int num;

char name[20]; //姓名

char e_addr[20]; //地址

char tel_no[15]; //电话

char sim_no; //快捷键

char arch[10]; //分组

int cishu; //拨打次数

} persons[maxlen];

//存放通讯表的链表的节点类型 listnode 的定义

typedef struct lnode

{

int num;

char name[20]; //姓名

char e_addr[20]; //地址

char tel_no[15]; //电话

char sim_no; //快捷键

char arch[10]; //分组

int cishu; //拨打次数

struct lnode *next; //储存指向下一个人的指针

} listnode, *linklist;

linklist head=NULL,r=NULL; //初始化链表

listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9,*p10,*p11,*p12; //定义指针

//结构体外信息

int i;

char name1[10],ch;

char tel_no1[15];

char arch1[10];

char sim_no1;

char e_addr1[20];

int cishu_1=0;

FILE *fp; //定义文件指针

如果觉得《【课程设计-通讯录管理系统】》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。