数据结构课程设计—通讯录管理系统
来源:互联网 发布:知乎提问怎么删除 编辑:程序博客网 时间:2024/04/27 13:39
/****************************
*版权所有 (C)2016.ccx
*
*文件名称: ccx.cpp
*文件标识: 无
*内容摘要: 该项目的所有函数的实现
*其他说明: 无
*当前版本: V1.0
*作 者: 郗传秀
*完成日期: 20161225
*
*修改记录: 6
*修改日期: 20161229
*版本号: V1.0
*修改人: 郗传秀
*修改内容:
*版权所有 (C)2016.ccx
*
*文件名称: ccx.cpp
*文件标识: 无
*内容摘要: 该项目的所有函数的实现
*其他说明: 无
*当前版本: V1.0
*作 者: 郗传秀
*完成日期: 20161225
*
*修改记录: 6
*修改日期: 20161229
*版本号: V1.0
*修改人: 郗传秀
*修改内容:
********************************************************************/
#include"ccx.h"void choose();//主菜单void searchmenu();//查询菜单void add();//添加新纪录 添加新用户void searchna();//按条件(姓名)搜索记录void display();//显示全部记录void load();//载入文件内容void save();//写入文件void del();//删除记录void listinsert();//插入结点函数void bianji();//编辑void dial();//拨号/***********************主函数************************************//************************************************************功能描述: 主函数*输入参数: 无*输出参数: 无*返回值: 无*************************************************************/int main() //主函数{load();listinsert();while (1)choose(); //进入主菜单,有非法输入仍停留在主菜单 return 0;}/***********************主函数************************************//***********************load函数*****************************//************************************************************功能描述: 装载导入文件*输入参数: 无*输出参数: 无*返回值: 无*************************************************************/void load()//装载已有文件信息{if((fp=fopen("txl.txt","rb"))==NULL){printf("\n\t\t通讯录文件不存在");if ((fp=fopen("txl.txt","wb"))==NULL){printf("\n\t\t建立失败");exit(0);{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch(); }}elsereturn;exit(0);}//导入文件功能部分fseek(fp,0,2);if (ftell(fp)>0){rewind(fp);for(len=0;!feof(fp)&&fread(&yong[len],sizeof(struct yonghu),1,fp);len++);printf("\n\t\t文件导入成功");printf("\n\t\t按任意键返回主菜单");getch();return;}printf("\n\t\t文件导入成功");printf("\n\t\t通讯录文件中无任何纪录");printf("\n\t\t按任意键返回主菜单");getch();return;}void listinsert()//增加新结点{linklist s,p=l;for(int i=0;i<len;i++){s=(linklist)malloc(sizeof(pnode)); strcpy(s->data.name,yong[i].name); strcpy(s->data.fm,yong[i].fm); strcpy(s->data.addr,yong[i].addr); strcpy(s->data.tel,yong[i].tel); strcpy(s->data.group,yong[i].group); strcpy(s->data.kuaijie,yong[i].kuaijie); s->data.tms=yong[i].tms; if(head==NULL) //若为空,则建立新节点////////////////////////////////////////////////// { head=s; r=head; head->next=NULL; } else //否则,插入节点////////////////////////尾插法 { r->next=s; r=s; r->next=NULL; }///////////////////////////////////}}/*********************主菜单界面********************************//************************************************************功能描述: 提供选择界面*输入参数: 选择键*输出参数: 无*返回值: 无*************************************************************/void choose()//主菜单{char ch;system("cls");printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");printf("\n\t\t***************欢迎进入通讯录系统***************");printf("\n\t\t******************1-新添纪录 ***************");printf("\n\t\t******************2-查找联系人 ***************");printf("\n\t\t******************3-删除联系人 ***************");printf("\n\t\t******************4-保存 ***************"); printf("\n\t\t******************5-退出 ***************"); printf("\n\t\t******************6-编辑 ***************"); printf("\n\t\t******************7-拨号 ***************"); printf("\n\t\t******************7-发送信息 ***************"); printf("\n\t\t************************************************"); printf("\n★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");printf("\n\t\t请选择:");printf("%c ",ch=getch());switch (ch){case '1':add();break;case '2':searchmenu();break;case '3':del();break;case '4':save();break;case '5':exit(0);case '6':bianji();break;case '7':dial();break;default:choose();}}/*********************主菜单界面********************************//************************************************************功能描述: 添加新用户*输入参数: 新用户信息*输出参数: 无*返回值: 无*************************************************************/void add()//添加新纪录{ int x; int a=0,i,findmark;l=(linklist)malloc(sizeof(pnode)); //建立头节点printf("\n\t\t**************** 请输入用户信息 ****************\n");printf("\n\t\t姓名:");scanf("%s",&yong[len].name);printf("\n\t\t性别:");scanf("%s",&yong[len].fm); printf("\n\t\t地址:"); scanf("%s",&yong[len].addr); printf("\n\t\t联系方式:"); scanf("%s",&yong[len].tel); printf("\n\t\t分组:"); scanf("%s",&yong[len].group); printf("\n\t\t快捷键:"); scanf("%s",&yong[len].kuaijie); len++; printf("\n\t\t==============新用户添加成功=============================\n"); printf("\n\t\t=============是否继续添加新用户==========================\n"); printf("\n\t\t======继续添加请选1 返回主界面请选2=============\n"); scanf("%d",&x); if(x==1) { add(); } if(x==2) { choose(); }}/************************************************************功能描述: 查询选择菜单*输入参数: 选择键*输出参数: 无*返回值: 无*************************************************************/void searchmenu()//查询菜单{char ch;system("cls");printf("\n\t\t=================查询菜单 =======================");printf("\n\t\t================1-显示所有记录===================");printf("\n\t\t================2-按姓名查询=====================");printf("\n\t\t================3-返回主菜单=====================");printf("\n\t\t=================================================");printf("\n\t\t请选择:");printf("%c",ch=getch());switch (ch){case '1':display();break;case '2':searchna();break;case '3':choose();break;}}/************************************************************功能描述: 按照输入的用户姓名进行查找*输入参数: 用户姓名*输出参数: 用户所有信息*返回值: 无*************************************************************/void searchna()////查找按姓名{printf("\n\t\t======================按姓名查找 =============================");char name[20];printf("\n\t\t请输入姓名:");scanf("%s",name);printf(" \n\t\t查询到的信息:\n");printf(" %-10s%-10s%-10s%-10s%-10s%-s\n","姓名","地址","联系方式","分组","快捷键","性别");//格式控制输出printf(" -----------------------------------------------------------------------------\n");for (int i=0;i<len;i++){if(strcmp(name,yong[i].name)==0)printf(" %-10s%-10s%-10s%-10s%-10s%-s\n",yong[i].name,yong[i].addr,yong[i].tel,yong[i].group,yong[i].kuaijie,yong[i].fm);if (i+1<len) continue;//重名纪录再检索}printf(" -----------------------------------------------------------------------------\n");printf("\n\t\t按任意键返回查询菜单");getch();searchmenu();}/************************************************************功能描述: 显示此通讯录总所有用户的信息*输入参数: 无*输出参数: 所有用户信息*返回值: 无*************************************************************/void display()//显示所有纪录{int i;system("cls");if(len!=0){printf("\n\t\t=================== 以下为通讯录所有信息=====================\n\n");printf(" %-10s%-10s%-10s%-10s%-10s%-s\n","姓名","地址","联系方式","分组","快捷键","性别");printf(" -----------------------------------------------------------------------------\n");for (i=0;i<len;i++){printf(" %-10s%-10s%-10s%-10s%-10s%-s\n",yong[i].name,yong[i].addr,yong[i].tel,yong[i].group,yong[i].kuaijie,yong[i].fm);if (i+1<len) continue;}printf(" -----------------------------------------------------------------------------\n");}elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回查询菜单:");getch();searchmenu();}/************************************************************功能描述: 查找到要删除的用户,进行删除,进行同名检索*输入参数: 用户姓名*输出参数: 无*返回值: 无*************************************************************/void del() //删除纪录{ int ch;int a=0,i,j,findmark; //findmark为查找结果标志 // int findmark=0,delmark=0; char name[20]; printf("\n\t\t请输入要删除学生姓名:"); scanf("%s",name);for (i=a;i<len;i++){if (findmark=strcmp(yong[i].name,name)==NULL) //找到一条符合条件的记录{//findmark++;printf("\n\t\t以下是您要删除的用户记录:\n");printf(" %-10s%-10s%-10s%-10s%-10s%-s\n","姓名","地址","联系方式","分组","快捷键","性别");printf(" -----------------------------------------------------------------------------\n");printf(" %-10s%-10s%-10s%-10s%-10s%-s\n",yong[i].name,yong[i].addr,yong[i].tel,yong[i].group,yong[i].kuaijie,yong[i].fm);printf(" -----------------------------------------------------------------------------\n");printf("\n\t\t是否删除?(y/n)");if (getch()=='y'){for (j=i;j<len-1;j++)yong[j]=yong[j+1];len--;i--;//delmark++;printf("\n\t\t删除成功");if((i+1)<len){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)\n"); //是否删除同名纪录if (getch()=='y'){a=i;continue; //删除上一条记录之后搜索是否有同名纪录}else { printf("返回主界面"); Sleep(3000); choose(); }}} //endifif((i+1)<len){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)\n"); //不删前一条纪录,删当前纪录if (getch()=='y'){a=i;continue;}else { printf("返回主界面"); Sleep(2000); choose(); }}} //endifelsecontinue;} //endforif(!findmark)//没有找到任何符合条件的记录 输入为注册过的用户时printf("\n\t\t没有符合条件的记录!");printf("\n\t\t继续删除请按1 返回主界面请按2 \n"); //无同名纪录,是否继续删除其他纪录scanf("%d",&ch);if (ch==1)del(); if(ch==2) Sleep(3000); choose();//继续删除其他纪录}/************************************************************功能描述: 将操作完成后的信息存储到文件*输入参数: 无*输出参数: 无*返回值: 无*************************************************************/void save()//写入文件//将文件存起来下次打开可看{int i;if ((fp=fopen("txl.txt","wb"))==NULL){printf("\n\t\t文件打开失败");}for (i=0;i<len;i++){if (fwrite(&yong[i],sizeof(struct yonghu),1,fp)!=1)printf("\n\t\t写入文件错误!\n");}fclose(fp); //关闭文件指针printf("\n\t\t通讯录文件已保存,按任意键继续...");getch();return;}/************************************************************功能描述: 对已存在的用户进行编辑*输入参数: 用户姓名*输出参数: 无*返回值: 无*************************************************************/void bianji()//编辑{ int ch,xuan; pnode *s;int a=0,i,j,findmark; //findmark为查找结果标志 char name[20]; printf("\n\t\t请输入要编辑的用户姓名:"); scanf("%s",name);for (i=a;i<len;i++){if (findmark=strcmp(yong[i].name,name)==NULL) //找到一条符合条件的记录{printf("\n\t\t以下是您要改变的用户记录:\n");printf(" %-10s%-10s%-10s%-10s%-10s%-s\n","姓名","地址","联系方式","分组","快捷键","性别");printf(" -----------------------------------------------------------------------------\n");printf(" %-10s%-10s%-10s%-10s%-10s%-s\n",yong[i].name,yong[i].addr,yong[i].tel,yong[i].group,yong[i].kuaijie,yong[i].fm);printf(" -----------------------------------------------------------------------------\n");printf("\n\t\t是否改变?(y/n)");if (getch()=='y'){ printf("\n\t\t===============================================\n"); printf("\n\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"); printf("\n\t\t请选择要编辑的内容\n"); printf("\n\t\t编辑姓名请选择1 编辑地址请选择2\n"); printf("\n\t\t编辑联系方式请选择3 编辑分组请选择4\n"); printf("\n\t\t编辑快捷键请选择5\n"); printf("\n\t\t请输入要改变的内容\n"); printf("\n\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"); printf("\n\t\t===============================================\n"); scanf("%d",&xuan); if(xuan==1) { printf("请输入新用户名\n"); scanf("%s",&s->data.name); strcpy(yong[i].name,s->data.name); } if(xuan==2) { printf("请输入新用户地址\n"); scanf("%s",&s->data.addr); strcpy(yong[i].addr,s->data.addr); } if(xuan==3) { printf("请输入新联系方式\n"); scanf("%s",&s->data.tel); strcpy(yong[i].tel,s->data.tel); } if(xuan==4) { printf("请输入新用户分组\n"); scanf("%s",&s->data.group); strcpy(yong[i].group,s->data.group); } if(xuan==5) { printf("请输入新用户快捷键\n"); scanf("%s",&s->data.kuaijie); strcpy(yong[i].kuaijie,s->data.kuaijie); }printf("\n\t\t编辑成功");} //endif} //endifelsecontinue;} //endforif(!findmark)//没有找到任何符合条件的记录 输入为注册过的用户时printf("\n\t\t没有其他符合条件的记录!");printf("\n\t\t继续编辑请按1 返回主界面请按2 \n"); //无同名纪录,是否继续删除其他纪录scanf("%d",&ch);if (ch==1)bianji(); if(ch==2) Sleep(3000); choose();//继续删除其他纪录}/************************************************************功能描述: 拨号或者发送信息*输入参数: 选择键,姓名,快捷键*输出参数: tms*返回值: 无*************************************************************/void dial() //拨号功能{ int c,choic;int ch,xuan; int r; pnode *p;pnode *s;int a=0,i,j,findmark; //findmark为查找结果标志 char name[20]; char b[20]; printf(" \n"); printf("+------------------------------------------------+\n"); printf("\n\t\t 请按要求输入您的选择\n"); printf("+ 使用用户姓名联系请按(1) 使用快捷键联系请按(2) +\n"); //两种拨号方式 printf("+----------------------------------------------+\n"); scanf("%d",&r); p=head; if(r==1) { printf(" 请输入联系用户的姓名:\n"); scanf("%s",name);for (i=a;i<len;i++){if (findmark=strcmp(yong[i].name,name)==NULL) //找到一条符合条件的记录{printf("\n\t\t呼叫此用户请按1,发送信息到此用户请按2\n");int v;scanf("%d",&v); if(v==1) { printf("+----------------------------------------------+\n"); printf(" loding------ \n"); for(int j=0; j<20; j++) //运用时间函数,实现拨号界面 { Sleep(100); printf("■■"); } printf(" \n"); printf(" \n"); Sleep(1000); printf("\n\t\t此用户联系方式为:%s\n",yong[i].tel); yong[i].tms=yong[i].tms+1; printf("\n\t\t+----------------------------------------------+\n"); printf("\n\t\t拨打次数: %d",yong[i].tms); printf("\n\t\t+----------------------------------------------+\n"); printf("\n\t\t稍后返回主界面\n"); Sleep(3000); } if(v==2) { printf("\n\t\t\=========\n"); char neirong[200]; printf("\n\t\t请输入要发送的内容\n"); scanf("%s",neirong); printf("\n\t\t发送中......\n"); for(int j=0; j<20; j++) //运用时间函数,实现拨号界面 { Sleep(100); printf("■■"); } printf("\n\t\t发送成功\n"); Sleep(1000); printf("\n\t\t稍后返回主界面\n"); Sleep(3000); }}}if(!findmark) { printf("\n\t\t没有符合条件的记录!"); Sleep(1000); }}else{ printf("\n\t\t请输入要编辑的用户快捷键:"); scanf("%s",&b);for (i=a;i<len;i++){if (findmark=strcmp(yong[i].kuaijie,b)==NULL) //找到一条符合条件的记录{ printf("呼叫此用户请按1,发送信息到此用户请按2"); int v; scanf("%d",&v); if(v==1) { printf("+----------------------------------------------+\n"); printf(" loding------ \n"); for(int j=0; j<20; j++) //运用时间函数,实现拨号界面 { Sleep(100); printf("■■"); } printf(" \n"); printf(" \n"); Sleep(2000); printf("%s\n",yong[i].tel); yong[i].tms=yong[i].tms+1; printf("\n\t\t+----------------------------------------------+\n"); printf("拨打次数: %d",yong[i].tms); printf("\n\t\t+----------------------------------------------+\n"); printf("\n\t\t稍后返回主界面\n"); Sleep(3000); } if(v==2) { printf("\n\t\t\=========\n"); char neirong[200]; printf("\n\t\t请输入要发送的内容\n"); scanf("%s",neirong); printf("\n\t\t发送中......\n"); for(int j=0; j<20; j++) //运用时间函数,实现拨号界面 { Sleep(100); printf("■■"); } printf("\n\t\t发送成功\n"); Sleep(1000); printf("\n\t\t稍后返回主界面\n"); Sleep(3000); }}}if(!findmark) { printf("\n\t\t没有符合条件的记录!"); Sleep(1000); }//没有找到任何符合条件的记录 输入为注册过的用户时 }}/*void dial() //拨号功能{ int c,choic; int a; pnode *p; char name[10]; char b[20]; printf(" \n"); printf("+------------------------------------------------+\n"); printf("\n\t\t 请按要求输入您的选择\n"); printf("+ 使用用户姓名联系请按(1) 使用快捷键联系请按(2) +\n"); //两种拨号方式 printf("+----------------------------------------------+\n"); scanf("%d",&a); p=head; if(a==1) { printf(" 请输入联系用户的姓名:\n"); scanf("%s",name); while(strcmp(name,p->data.name)!=0&&p!=NULL)//进行查找 查找用户名为name的用户 p=p->next; if(p==NULL)//用户不存在 { printf("+----------------------------------------------+\n"); printf(" 您选择的用户不存在!\n"); printf("+----------------------------------------------+\n"); printf("+ 重新输入请按(1) 返回主菜单(2) +\n"); printf("+----------------------------------------------+\n"); scanf("%d",&choic); if(choic==1) { system("cls"); dial(); } if(choic==2) { system("cls"); choose(); } } else//找到此用户 名为name { printf("呼叫此用户请按1,发送信息到此用户请按2"); int v; scanf("%d",&v); if(v==1) { printf("+----------------------------------------------+\n"); printf(" loding------ \n"); for(int j=0; j<20; j++) //运用时间函数,实现拨号界面 { Sleep(100); printf("■■"); } printf(" \n"); printf(" \n"); Sleep(2000); printf("%s\n",&p->data.tel); p->data.tms=p->data.tms+1; printf("+----------------------------------------------+\n"); printf("拨打次数: %d",p->data.tms); printf("+----------------------------------------------+\n"); printf("\n\t\t稍后返回主界面\n"); Sleep(5000); } if(v==2) { printf("\n\t\t\=========\n"); char neirong[200]; printf("\n\t\t请输入要发送的内容\n"); scanf("%s",neirong); printf("\n\t\t发送中......\n"); for(int j=0; j<20; j++) //运用时间函数,实现拨号界面 { Sleep(100); printf("■■"); } printf("\n\t\t发送成功\n"); Sleep(2000); printf("\n\t\t稍后返回主界面\n"); Sleep(5000); } } } else { printf("\n\t\t请输入快捷键号码:\n"); scanf("%s",&b); while(p!=NULL&&strcmp(b,p->data.kuaijie)!=0) //遍历链表比较查询 遍历查询 利用快捷键 p=p->next; if(p==NULL) { printf("\n\t\t 您输入的单键号码不存在!\n"); printf("\n\t\t+----------------------------------------------+\n"); printf("\n\t\t+ 重新输入请按(1) 返回主菜单(2) +\n"); printf("\n\t\t+----------------------------------------------+\n"); scanf("%d",&choic); if(choic==1) { dial(); } if(choic==2) { Sleep(2000); system("cls"); choose(); } } else { printf("呼叫此用户请按1,发送信息到此用户请按2"); int v; scanf("%d",&v); if(v==1) { printf(" \n"); printf(" loding------ \n"); for(int j=0; j<20; j++) { Sleep(100); printf("■■"); } printf(" \n"); printf(" \n"); Sleep(5000); printf("%s\n",p->data.name); printf("%s\n",p->data.tel); p->data.tms=p->data.tms+1; printf("\n\t\t+----------------------------------------------+\n"); printf("拨打次数: %d",p->data.tms); //显示拨打次数 printf("\n\t\t+----------------------------------------------+\n"); printf("\n\t\t稍后回到主界面\n"); Sleep(5000); } if(v==2) { printf("\n\t\t=============\n"); char neirong[200]; printf("\n\t\t请输入要发送的内容\n"); scanf("%s",neirong); printf("\n\t\t发送中......\n"); for(int j=0; j<20; j++) //运用时间函数,实现拨号界面 { Sleep(100); printf("■■"); } printf("\n\t\t发送成功\n"); Sleep(2000); printf("\n\t\t稍后返回主界面\n"); Sleep(5000); } } }}*/
头文件
ccx.h
#ifndef CCX_H_INCLUDED#define CCX_H_INCLUDED#include <stdio.h>#include<iostream>#include <stdlib.h>#include <string.h>#include<windows.h>#include <conio.h>#define maxl 1000struct yonghu{char name[20];//姓名char fm[20];//性别char addr[20];//地址char tel[20];//联系方式char group[20]; //分组char kuaijie[20];//快捷键int tms;//拨打次数}yong[maxl];//1000个记录,可修改struct pnode{yonghu data;struct pnode *next/*, *prior*/;//双循环链表};typedef pnode * linklist;linklist head=NULL,r=NULL; //初始化链表 单链表linklist l;int len=0;//链表长度FILE *fp; //文件指针#endif // CCX_H_INCLUDED运行结果主界面新添记录查询删除编辑拨号/发送信息设计心得:利用了单链表,将每个独立的用户已一个个节点的形式连到一起,在基本的“增删改查”中加入了退出、保存以及拨号和发送信息界面讲头文件与cpp文件链接运行,实现以上功能0 0
- 数据结构课程设计——通讯录管理系统
- 数据结构课程设计—通讯录管理系统
- 数据结构课程设计—通讯录管理系统
- 数据结构课程设计—通讯录管理系统
- 数据结构课程设计—通讯录管理系统
- 数据结构课程设计—通讯录管理系统
- 数据结构课程设计 - 通讯录管理系统
- 数据结构课程设计之通讯录管理系统
- 数据结构实践课程设计【通讯录管理系统】
- 【课程设计-通讯录管理系统】
- 课程设计——通讯录管理系统
- 课程设计——通讯录管理系统
- 数据结构课程设计-通讯录管理系统的设计与实现
- 数据结构课程设计——通讯录系统设计(C语言)
- 数据结构课程设计——图书管理系统
- 数据结构课程设计——停车场管理系统
- 数据结构课程设计—图书管理系统
- 数据结构课程设计—图书管理系统
- spring-boot集成ActiveMQ
- Maven搭建SpringMVC+Mybatis项目详解
- generator 、一个无限迭代器
- osg添加骨骼模型
- DateTime.Now.ToString ("yyyy:MM:dd,hh:mm:ss") 12小时制转成24小时制
- 数据结构课程设计—通讯录管理系统
- AMD芯片的电脑用虚拟机装MACos总失败,求大神指点啊
- css解决ios端按钮和输入框自带圆角的问题
- iOS 开发 设置网络请求允许使用http
- 802.1X协议--交换机知识
- 不用先上传图片在回显,直接回显图片方法
- JS(五)继承
- ios ArcGIS地图截屏 模仿设备 home键加电源键截屏 地图快照
- HelloCharts实现Y轴自定义分区及颜色