数据结构课程设计-简易手机通讯录管理系统

  • 格式:doc
  • 大小:1.27 MB
  • 文档页数:21

一、课题名称

简易手机通讯录管理系统(线性表、查找、排序)

二、主要内容

简易手机通讯录管理系统的设计主要是实现对手机通讯录的管理和相关操作。基本功能如下:

(1)联系人信息录入、添加功能:包括手机号(此处用短号,5位,不能重复)、姓名、家庭住址的录入和添加。

(2)联系人信息查询功能:能①按手机号进行查询。②按联系人姓名进行查询。

(3)排序:①能按手机号升序进行排序;②能按姓名进行升序排序,姓名相同时按手机号从小到大进行排序

(4)联系人信息的修改、删除功能:①按手机号进行联系人信息的修改和删除。

②按姓名进行联系人信息的修改和删除,多个姓名时,再指定具体的号码。

(5)统计功能:统计自己的联系人有多少个。

三、课题设计的基本思想,原理和算法描述

(1)本次课程设计题目为简易手机通讯录管理系统,主要运用到线性表中顺序表的相关知识,以及顺序查找的思想和冒泡排序算法。

(2)界面设计

//菜单函数

int menu()

{

int c;

printf("\n\n\t☆☆☆☆☆☆☆手机通讯录信息管理系统☆☆☆☆☆☆☆☆\n\n");

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

printf(" 1.添加联系人信息\n");

printf(" 2.查询联系人信息\n");

printf(" 3.对联系人信息进行排序\n");

printf(" 4.修改联系人信息\n");

printf(" 5.删除联系人信息\n");

printf(" 6.统计联系人个数\n");

printf(" 0.退出信息管理系统\n");

printf("**********************************************************************\n\n"); printf("★请输入您的选择(0-6):");

while(1)

{

scanf("%d",&c);

if(c<0||c>6)

printf("\n▲输入错误!请重新选择:");

else

break;

}

return c;

}

//主函数

void main()

{

SqList * L;

InitList(L);

system("color 3f");

while(1)

{

switch(menu())

{

case 1:system("cls");printf("\n\t\t\t信息的增加\n");ListAdd(L);break;

case 2:system("cls");printf("\n\t\t\t信息的查询\n");Search(L);break;

case 3:system("cls");printf("\n\t\t\t对信息进行排序\n");Paixu(L);break;

case 4:system("cls");printf("\n\t\t\t信息的修改\n");ListModify(L);break;

case 5:system("cls");printf("\n\t\t\t信息的删除\n");Delete(L);break;

case 6:system("cls");printf("\n\t\t\t统计联系人个数\n");ListLength(L);break;

case 0:printf("再见!\n");return;

default:printf("\n▲输入错误!请重新选择:");break;

}

}

}

(3)功能模块的实现

初始化顺序表

void InitList(SqList *&L) {

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

增加信息函数。

定义变量a起标记作用,用于判断输入信息是否与已有信息重复

void ListAdd(SqList *&L) //增加函数

{

int a=0;//标记

printf("1.号码(五位数字!):");scanf("%s",L->data[L->length].num);

printf("2.姓名:");scanf("%s",L->data[L->length].name);

printf("3.性别:");scanf("%s",L->data[L->length].sex);

printf("4.家庭住址:");scanf("%s",L->data[L->length].add);

for(int i=0;ilength;i++)//判断是否重号

{

if(strcmp(L->data[i].num,L->data[L->length].num)==0)

{

printf("该号码已经存在\n");

a=1;break;

}

}

if(a==0)

L->length++;

}

查找符合条件的信息的下标并返回到需要调用的函数体中

int FindNum(SqList *&L)

{

printf("★输入需要进行操作的号码:");

char num[10];

scanf("%s",num);

int i=0;

while(ilength&&strcmp(L->data[i].num,num)!=0)i++;

if(i>=L->length)

{

printf("不存在该联系人!\n");

}

return i; }

④查询信息函数

分两种情况:按号码查找与按姓名查找。由于号码唯一所以可以直接调用之前的查找下标函数。按姓名查找时则需要考虑到重名的情况,所以用一个for循环将所有符合条件的信息全部输出。

void Search(SqList *&L)

{

if(L->length==0)

{

printf("通讯录此时为空,无法进行查找!\n");

}

else

{

int m,i;

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

printf("\t\t1.按联系人号码进行查询\n");

printf("\t\t2.按联系人姓名进行查询\n");

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

int a;

printf("★请输入您的选择(1 or 2):");

scanf("%d",&a);

switch(a)

{

case 1:

m=FindNum(L);

if(mlength)

{

printf("您查询的信息如下\n");

printf("号码 姓名 性别 家庭住址\n");

printf("%s %s %s %s\n",L->data[m].num,L->data[m].name,L->data [m].sex,L->data[m].add);

}

break;

case 2:

printf("★输入需要进行操作的姓名:"); char name[20];

scanf("%s",name);

for( i=0;ilength;i++)

{

if(strcmp(L->data[i].name,name)==0)

{

printf("号码 姓名 性别 家庭住址\n");

printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data [i].sex,L->data[i].add);

}

else

{

printf("不存在该联系人\n");

}

}

break;

default:

printf("输入错误!");

break;

}

}

}

⑤修改函数

按号码修改时先调用之前查找下标的函数,找到符合条件的信息后直接输入信息将原有信息覆盖。按姓名修改时当只有一个信息符合条件时与按号码修改算法一样,当出现重名情况时提示用户选择相应的号码再调用按号码修改的算法。每一次修改都进行一次判断,判断修改后的信息是否与表中已有信息重复。

void ListModify(SqList *&L)

{

if(L->length==0)

{

printf("通讯录此时为空,无法进行信息的修改!\n");

}

else

{

int m,n;

int b=0;

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

printf("\t\t1.按联系人号码进行修改\n");

printf("\t\t2.按联系人姓名进行修改\n");

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

int a;

printf("★请输入您的选择(1 or 2):");

scanf("%d",&a);

switch(a)

{

case 1:

m=FindNum(L);

if(mlength)

{

Telphone p;

printf("号码 姓名 性别 家庭住址\n");

printf("%s %s %s %s\n",L->data[m].num,L->data[m].name,L->data [m].sex,L->data[m].add);

printf("输入修改后的联系人信息:\n");

printf("号码 姓名 性别 家庭住址\n");

scanf("%s %s %s %s",p.num , ,p.sex,p.add);

for(int j=0;jlength;j++)//判断是否重号

{

if(strcmp(L->data[j].num,p.num)==0)

{

printf("修改失败!(该号码已经存在)\n");

printf("重新输入修改后的联系人信息:\n");