- /*
- 烟台大学计算机学院
- 文件名称:goushuai.cpp
- 作者:张俊杰
- 完成日期:2017年12月22日
- 问题描述:通讯录系统
-
- */
main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "zccc.h"
int main()
{
Link *L;
system("color 7e");
static char name[100];
static char num[100];
Initlist(L);//初始化单链表
while(1)
{
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf(" ★ ☆\n");
printf(" ☆ 通讯录 ★\n");
printf(" ★ 1.录入信息 ☆\n");
printf(" ☆ 2.查询信息 ★\n");
printf(" ★ 3.信息排序 ☆\n");
printf(" ★ 4.浏览信息 ☆\n");
printf(" ☆ 5.修改信息 ★\n");
printf(" ★ 6.删除信息 ☆\n");
printf(" ☆ 7.查看用户数 ★\n");
printf(" ☆ 0.退出系统 ★\n");
printf(" ★ ☆\n");
printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
printf("请输入:");
int s;
scanf("%d",&s);
switch(s)
{
case 1:
{
int m;
Creatlist(L);
do{
system("cls");
printf("继续输入请按1,返回上层请按2:");
getchar();
scanf("%d",&m);
if(m==1)
Creatlist(L);
}while(m!=2);
break;
}
case 2:
{
system("cls");
int n;
printf("1、按姓名查找\n");
printf("2、按编号查找\n");
scanf("%d",&n);
if(n==1)
{
printf("请输入要查找人的姓名: \n");
scanf("%s",name);
SearchName(L,name);
}
if(n==2)
{
printf("请输入要查找的编号: \n");
scanf("%s",num);
SearchNum(L,num);
}
break;
}
case 3:
{
printf("排序已完成\n");
printf("排序结果如下:\n");
SortNum(L);
Display(L);
break;
}
case 4:
{
system("cls");
Display(L);
break;
}
case 5:
{
system("cls");
printf("请输入需要修改信息的个人编号: \n");
getchar();
scanf("%s",num);
Alter(L,num);
break;
}
case 6:
{
char g;
system("cls");
printf("请输入所要删除的学生的编号: \n");
getchar();
scanf("%s",num);
printf("是否确定删除该同学:(Y/N)");
scanf("%s",&g);
if(g=='Y')
{
Del(L, num);
}
else
{
printf("输入错误,请重新输入Y/N");
}
break;
}
case 7:
{
Print(L);
break;
}
case 0:
{
printf("谢谢使用 \n");
break;
default:
break;
}
}
}
return 0;
}
zccc.h
#ifndef ZCCC_H_INCLUDED
#define ZCCC_H_INCLUDED
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct telebook
{
char num[30];/*编号*/
char name[30];/*姓名*/
char addr[30];/*地址*/
char telenum[30];/*手机号*/
}tele;
typedef struct LNode
{
tele data;
struct LNode* next;
}Link;
void Initlist(Link *&L);//初始化单链表
void Creatlist(Link *&L);//头插法生成单链表
void SearchNum(Link *L,char num[30]);//编号查询
void Del(Link *&L,char num[30]);//按编号删除
void SearchName(Link *L,char name[30]);//姓名查询
void Alter(Link *L,char num[30]);//更改信息
void Display(Link *&L);//显示信息
void SortNum(Link *L);//编号排序
void Print(Link *L); //显示通讯录人数
#endif // ZCCC_H_INCLUDED
zzzc.cpp
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include "zccc.h"
void Initlist(Link *&L)//初始化线性表
{
L=(Link *)malloc(sizeof(Link)); //分配内存空间
L->next=NULL;
}
void Print(Link *L) //显示通讯录人数功能
{
int num=0;
Link *p;
p=L;
while(p)
{
p=p->next;
num++;
}
printf("\n该通讯录共有信息数:%d\n",num-1);
}
void Creatlist(Link *&L)//头插法生成单链表
{
Link *r;
r=(Link *)malloc(sizeof(Link));
printf("请录入个人信息\n");
printf("编号: \n");
scanf("%s",r->data.num);
printf("姓名: \n");
scanf("%s",r->data.name);
printf("地址: \n");
scanf("%s",r->data.addr);
printf("手机号: \n");
scanf("%s",r->data.telenum);
r->next=L->next;
L->next=r;
}
void Alter(Link *L,char num[30])//修改个人信息
{
Link *p;
p=L;
int s;
while(p)
{
if(strcmp(p->data.num,num)==0)
{
printf("请输入你要修改的信息:1.修改编号 2.修改姓名 3.修改地址 4.修改手机号\n");
printf("请选择:");
scanf("%d",&s);
switch(s)
{
case 1:
{
printf("请输入编号: ",p->data.num);
scanf("%s",p->data.num);
printf("信息修改成功\n");
break;
}
case 2:
{
printf("请输入姓名: ",p->data.name);
scanf("%s",p->data.name);
printf("信息修改成功\n");
break;
}
case 3:
{
printf("请输入地址: ",p->data.addr);
scanf("%s",p->data.addr);
printf("信息修改成功\n");
break;
}
case 4:
{
printf("请输入手机号: ",p->data.telenum);
scanf("%s",p->data.telenum);
printf("该学生的信息修改成功\n");
break;
}
}
}
p=p->next;
}
}
void Del(Link *&L, char num[100])//按编号进行删除
{
Link *p,*q;
p=L;
q=L->next;
char flag=0;
while(q)
{
if(strcmp(q->data.num,num)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("对不起,该编号不存在 \n");
}
printf("删除成功\n");
}
void Display(Link *&L)//显示信息
{
Link *p;
p=L->next;
char flat=0;
while(p)
{
printf("编号\t姓名\t地址\t手机号\n");
for(p=L->next;p;p=p->next)
{
printf("%s\t%s\t%s\t%s\n",p->data.num,p->data.name,p->data.addr,p->data.telenum);
flat=1;
}
}
if(!flat)
{
printf("无法显示信息 \n");
}
}
void SearchName(Link *L,char name[100])//学号查询
{
Link *p;
p=L;
char flat=0;
while(p)
{
if(p!=NULL)
{
if(strcmp(p->data.name,name)==0)
{
printf("学号: %s\n",p->data.num);
printf("姓名: %s\n",p->data.name);
printf("地址: %s\n",p->data.addr);
printf("手机号: %s\n",p->data.telenum);
flat=1;
}
}
p=p->next;
}
if(!flat)
{
printf("对不起输入姓名错误或该信息已被删除,请重新输入进行查询 \n");
}
}
void SearchNum(Link *L,char num[100])//学号查询
{
Link *p;
p=L;
char flat=0;
while(p)
{
if(p!=NULL)
{
if(strcmp(p->data.num,num)==0)
{
printf("编号: %s\n",p->data.num);
printf("姓名: %s\n",p->data.name);
printf("地址: %s\n",p->data.addr);
printf("手机号: %s\n",p->data.telenum);
flat=1;
}
}
p=p->next;
}
if(!flat)
{
printf("对不起输入编号错误或该信息已被删除,请重新输入进行查询 \n");
}
}
void SortNum(Link *L)//按编号排序
{
Link *p,*q;
tele temp;
for(p=L->next;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(strcmp(p->data.num,q->data.num)>0)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
}