课程设计之通讯录管理

来源:互联网 发布:大数据培训学什么课程 编辑:程序博客网 时间:2024/04/25 04:47
/*    烟台大学计算机与控制工程学院    文件名称:main.cpp    作者: 边朔    完成日期:2016.12.29    问题描述:个人通讯录管理系统    程序说明:主函数*/


1.主函数

#include "Contacts.h"int main(){struct address_list *head=NULL;char num[10];printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("*=*               程序说明                *=*\n");printf("*=*    请及时保存创建完毕的通讯录内容!    *=*\n");printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");while(1){printf("******************************\n");printf("***     1 创建通讯录      ****\n");printf("***     2 按名字排序      ****\n");printf("***     3 综合操作        ****\n");printf("***     4 保存            ****\n");printf("***     5 打开            ****\n");printf("***     6 删除            ****\n");printf("***     7 退出            ****\n");printf("******************************\n");printf("请输入您选择的操作:");gets(num);switch(*num){case '1':{                system("cls");if(head==NULL){head=creat();                                //创建print(head);}else{    system("cls");head=shifang(head);head=creat();                                //重新创建print(head);}}break;case '2':{    system("cls");head=paixu(head);                               //排序}break;case '3':{    system("cls");head=menu(head);                              //综合操作}break;case '4':{    system("cls");save(head);                                   //文件保存print(head);}break;case '5':{    system("cls");head=load(head);                              //文件输出}break;case '6':{    system("cls");head=delete_txl(head);                           //删除print(head);}break;case '7':    system("cls");head=shifang(head);break;default:    system("cls");printf("操作错误,此项不存在!\n");break;}if(strcmp(num,"7")==0)break;}return 0;}



/*烟台大学计算机与控制工程学院    文件名称:Contacts.h    作者: 边朔    完成日期:2016.12.29    问题描述:个人通讯录管理系统    程序说明:头文件*/


2.头文件

#ifndef CONTACTS_H_INCLUDED#define CONTACTS_H_INCLUDED#include <stdio.h>#include <malloc.h>  //得到指向大小为Size的内存区域的首字节的指针#include <string.h>#include <stdlib.h>  //标准库函数#define NULL 0#define LEN sizeof(struct address_list)  //计算字节struct address_list{char name[30];     //名字char work[30];     //职业char handset[30];  //手机char email[30];    //电子邮件char address[30];  //通讯地址struct address_list *next;};struct address_list *shifang(struct address_list *head); // 释放内存函数声明struct address_list *creat(void);void print(struct address_list *head);struct address_list *insert(struct address_list *head);struct address_list *delete_txl(struct address_list *head);struct address_list *display(struct address_list *head);struct address_list *paixu(struct address_list *head);struct address_list *search(struct address_list *head);struct address_list *shifang(struct address_list *head);void save(struct address_list *head);struct address_list *load(struct address_list *head);struct address_list *menu(struct address_list *head);



/*烟台大学计算机与控制工程学院    文件名称:Contacts.cpp    作者: 边朔    完成日期:2016.12.29    问题描述:个人通讯录管理系统    程序说明:源文件*/


3.源文件

#include "Contacts.h"int n;//创建函数,不带头结点的链表struct address_list *creat(void){struct address_list *head,*p1,*p2;char name[20];n=0;p1=(struct address_list *)malloc(LEN);p2=p1;   //强制内存转换printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");printf("请输入姓名:");gets(name);if(strcmp(name,"0")!=0){strcpy(p1->name,name);printf("请输入职业:");     gets(p1->work);printf("请输入手机:");     gets(p1->handset);printf("请输入电子邮件:"); gets(p1->email);printf("请输入通讯地址:");  gets(p1->address);head=NULL;while(1){n=n+1;   //记录通讯录人数个数if(n==1)head=p1;elsep2->next=p1;p2=p1;printf("请输入姓名:");gets(name);if(strcmp(name,"0")==0){break;}else{p1=(struct address_list *)malloc(LEN);strcpy(p1->name,name);printf("请输入职业:"); gets(p1->work);printf("请输入手机:"); gets(p1->handset);printf("请输入电子邮件:"); gets(p1->email);printf("请输入通讯地址:");  gets(p1->address);}}p2->next=NULL;return head;}elsereturn 0;}//功能描述:输出函数void print(struct address_list *head){struct address_list *p;if(head!=NULL){p=head;printf("本通讯录现在共有%d人:\n",n);printf("---姓名-------职业--------手机-------Email-------通讯地址\n");printf("==================================\n");do{printf("== %s",p->name); printf("       ");printf("%s",p->work); printf("       ");printf("%s",p->handset); printf("       ");printf("%s",p->email); printf("       ");printf("%s",p->address); printf("       \n");p=p->next;}while(p!=NULL);printf("==================================\n");}elseprintf("通讯录为空,无法输出!\n");}//功能描述:增加函数struct address_list *insert(struct address_list *head){struct address_list *p0,*p1,*p2;char name[20];p1=head;printf("请输入增加的内容:\n");printf("请输入姓名:"); gets(name);if(strcmp(name,"0")==0){printf("姓名不能为0,增加失败!\n");return(head);}else{p0=(struct address_list *)malloc(LEN);strcpy(p0->name,name);printf("请输入职业:"); gets(p0->work);printf("请输入手机:"); gets(p0->handset);printf("请输入电子邮件:"); gets(p0->email);printf("请输入通讯地址:");  gets(p0->address);n=n+1;if(head==NULL){head=p0;p0->next=NULL;return head;}else{while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL)){p2=p1;p1=p1->next;}if(strcmp(p0->name,p1->name)<0 || strcmp(p0->name,p1->name)==0){if(head==p1){head=p0;}else{p2->next=p0;}p0->next=p1;}else{p1->next=p0;p0->next=NULL;}return head;}}}//功能描述:删除姓名struct address_list* delete_txl(struct address_list *head){struct address_list *p,*q;char name[30];if(head==NULL){printf("通讯录为空,无法显示!\n");return head;}p=head;printf("请输入需要删除的人的姓名:");gets(name);if(strcmp(head->name,name)==0){head=head->next;free(p);printf("删除操作成功!\n");        n--;return head;}else{q=head,p=head->next;while(p!=NULL){if(strcmp(p->name,name)==0){q->next=p->next;free(p);printf("删除操作成功!\n");                n--;return head;}p=p->next;q=q->next;}}}//显示函数struct address_list *display(struct address_list *head){struct address_list *p1,*p2;char name[30];int m;if(head==NULL){printf("通讯录为空,无法显示!\n");return head;}p1=head;m=0;printf("请输入需要显示人的姓名:");gets(name);while(p1!=NULL){while((strcmp(p1->name,name))!=0 && p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(p1->name,name)==0){m++;printf("%s的通讯内容如下:\n",name);printf("---姓名--------职业--------手机-------Email------通讯地址\n");printf("==================================\n");printf("== %s",p1->name);printf("       ");printf("%s",p1->work);printf("       ");printf("%s",p1->handset);printf("       ");printf("%s",p1->email);printf("       ");printf("%s",p1->address); printf("       \n");printf("==================================\n");}p1=p1->next;}if(m==0){printf("此人未在本通讯录中!\n");}return(head);}//排序函数struct address_list *paixu(struct address_list *head){struct address_list *p1,*p2;int i,j;struct address_list1{char name[30];char work[30];char handset[30];char email[30];char address[30];};struct address_list1 px[200];struct address_list1 temp;if(head==NULL){printf("通讯录为空,无法排序!\n");return(head);}p1=head;for(i=0;i<n,p1!=NULL;i++){strcpy(px[i].name,p1->name);strcpy(px[i].work,p1->work);strcpy(px[i].handset,p1->handset);strcpy(px[i].email,p1->email);strcpy(px[i].address,p1->address);p2=p1;p1=p1->next;}head=shifang(head);for(j=0;j<n-1;j++){for(i=j+1;i<n;i++){if(strcmp(px[i].name,px[j].name)<0){temp=px[i];px[i]=px[j];px[j]=temp;}}}p1=(struct address_list *)malloc(LEN);p2=p1;strcpy(p1->name,px[0].name);strcpy(p1->work,px[0].work);strcpy(p1->handset,px[0].handset);strcpy(p1->email,px[0].email);strcpy(p1->address,px[0].address);head=p1;for(i=1;i<n;i++){p1=(struct address_list *)malloc(LEN);strcpy(p1->name,px[i].name);strcpy(p1->work,px[i].work);strcpy(p1->handset,px[i].handset);strcpy(p1->email,px[i].email);strcpy(p1->address,px[i].address);p2->next=p1;p2=p1;}p2->next=NULL;printf("按姓名排序后为:\n");print(head);return(head);}//姓名查找函数struct address_list *search(struct address_list *head){struct address_list *p1,*p2;int m;char name[30];if(head==NULL){printf("通讯录为空,无法分类查找!\n");return(head);}p1=head;printf("****************************\n");printf("**  请输入需要查找的姓名  **\n");printf("****************************\n");m=0;gets(name);while(p1!=NULL){while(strcmp(p1->name,name)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(p1->name,name)==0){m++;printf("你查找的内容是:\n");printf("+++++++++++++++++++++++++++++++++++\n");printf("++ %s        %s       %s       %s        %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);printf("+++++++++++++++++++++++++++++++++++\n");}p1=p1->next;if(m==0){printf("此人未在本通讯录中!\n");}break;}return(head);}//释放内存函数struct address_list *shifang(struct address_list *head){struct address_list *p1;while(head!=NULL){p1=head;head=head->next;free(p1);}return(head);}//文件写入函数void save(struct address_list *head){FILE *fp;struct address_list *p1;char tong[30];if(head==NULL){printf("通讯录为空,无法存储!\n");return;}printf("请输入保存后的文件名:");gets(tong);fp=fopen(tong),"w");if(fp==NULL){printf("cannot open file\n");return;}p1=head;fprintf(fp,"姓名    职业      手机     Email     通讯地址\n");for(;p1!=NULL;){fprintf(fp,"%s       %s       %s        %s       %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);p1=p1->next;}printf("保存完毕!\n");fclose(fp);}//文件读出函数struct address_list *load(struct address_list *head){FILE *fp;char tong[30];struct address_list *p1,*p2;printf("请输入要输出的文件名:");gets(tong);fp=fopen(tong,"r");if(fp==NULL){printf("此通讯录名不存在,无法输出!\n");return(head);}else{head=shifang(head);}p1=(struct address_list *)malloc(LEN);fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);if(feof(fp)!=0){printf("文件为空,无法打开!\n");return(head);}else{rewind(fp);p2=p1;head=p1;n=0;while(feof(fp)==0){fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);if(feof(fp)!=0)break;p2->next=p1;p2=p1;p1=(struct address_list *)malloc(LEN);n=n+1;}p2->next=NULL;p1=head;head=head->next;n=n-1;free(p1);print(head);printf("打开完毕!\n");return(head);}fclose(fp);}//综合操作函数struct address_list *menu(struct address_list *head){char num[10];while(1){printf("************************\n");printf("*** 1 姓名查找      ****\n");printf("*** 2 单个显示      ****\n");printf("*** 3 增加          ****\n");printf("*** 4 退出          ****\n");printf("************************\n");printf("请输入您选择的操作:");gets(num);switch(*num){case '1':{head=search(head);                          //姓名查找print(head);}break;case '2':{head=display(head);                          //显示}break;case '3':{head=insert(head);                           //增加print(head);}break;case '4':return head;default:printf("操作错误,此项不存在!\n");break;}if(strcmp(num,"6")==0)break;}return head;}


运行结果:











0 0
原创粉丝点击