数据结构课程设计

您所在的位置:网站首页 吕梁烟草投诉电话号码查询系统 数据结构课程设计

数据结构课程设计

2024-07-11 00:16| 来源: 网络整理| 查看: 265

1、项目实现的主要功能

1、通过文件导入和手动输入两种方式录入个人的基本信息(姓名、电话、QQ、微信)

2、可通过输入姓名或者电话号码来查询录入的人的基本信息

3、也可通过该系统修改和删除信息

2、操作界面演示

1、菜单界面

 2、读取文件(这里需要先创建一个txt文件)

 3、手动添加信息

 4、查询个人信息

 5、修改信息

 6、删除信息

3、代码介绍

1、利用结构体定义结点

typedef struct { char name[20]; //姓名 char number[20]; //电话号码 char wechat[20]; //微信号 char QQ[20]; //QQ号 }information; //初始化要录入的个人信息的所有内容 typedef struct node { information data; struct node *next; }Elem,*Link;

2、手动输入信息和文件读取信息

在文件读取中需要自己先创建一个txt文件,并根据自己创建的文件修改代码中的文件路径

int Init(Link elem[13],Link elem2[13],int t) { Link j,k,L,m; int i,p,q,r,a,b,c,d,e; for(i=0;inext=NULL; printf("请输入第%d个人的姓名:",i+1); scanf("%s",&L->data.name); printf("请输入第%d个人的电话号码:",i+1); scanf("%s",&L->data.number); printf("请输入第%d个人的微信号:",i+1); scanf("%s",&L->data.wechat); printf("请输入第%d个人的QQ号:",i+1); scanf("%s",&L->data.QQ); p=strlen(L->data.name); //用名字存储 q=L->data.name[p-1]; r=q%13; //将初始化录入的人的姓名的最后一个字的ASCII码值对13求余,得到的结果存入相应的位置 if(elem[r]->next==NULL) { elem[r]->next=L; L->next=NULL; } else { for(j=elem[r];j->next!=NULL;j=j->next); j->next=L; L->next=NULL; } //将用名字存储的方式得到的结点存入相应的位置 a=strlen(L->data.number); //用电话号码存储 d=L->data.number[a-1]; e=L->data.number[a-2]; //d,e分别获取电话号码的最后一位和倒数第二位 b=d+10*e; c=b%13; //通过计算他们的ASCII码值对13求余的结果存到相应的位置 m=(Link)malloc(sizeof(Elem)); m->next=NULL; m=L; if(elem2[c]->next==NULL) { elem2[c]->next=m; m->next=NULL; } else { for(k=elem2[c];k->next!=NULL;k=k->next); k->next=m; m->next=NULL; } } //将结点存入相应的位置 printf("------------------信息录入完成!-----------------\n"); printf("\n"); return OK; } int Init2(Link elem[13],Link elem2[13]) //文件读写初始化 { Link j,k,L,m; char st[20]; FILE *fp; int i,p,q,r,a,b,c,d,e,t; if((fp=fopen("d:\\test.txt","r"))==NULL) { printf("打开失败!\n"); getchar(); exit(0); } for(i=1;inext=NULL; fgets(st,20,fp); t=strlen(st); st[t-1]='\0'; memcpy(L->data.name,st,20); fgets(st,20,fp); t=strlen(st); st[t-1]='\0'; memcpy(L->data.number,st,20); fgets(st,20,fp); t=strlen(st); st[t-1]='\0'; memcpy(L->data.wechat,st,20); fgets(st,20,fp); t=strlen(st); st[t-1]='\0'; memcpy(L->data.QQ,st,20); p=strlen(L->data.name); //用名字存储 q=L->data.name[p-1]; r=q%13; //将初始化录入的人的姓名的最后一个字的ASCII码值对13求余,得到的结果存入相应的位置 if(elem[r]->next==NULL) { elem[r]->next=L; L->next=NULL; } else { for(j=elem[r];j->next!=NULL;j=j->next); j->next=L; L->next=NULL; } //将用名字存储的方式得到的结点存入相应的位置 a=strlen(L->data.number); //用电话号码存储 d=L->data.number[a-1]; e=L->data.number[a-2]; //d,e分别获取电话号码的最后一位和倒数第二位 b=d+10*e; c=b%13; //通过计算他们的ASCII码值对13求余的结果存到相应的位置 m=(Link)malloc(sizeof(Elem)); m->next=NULL; m=L; if(elem2[c]->next==NULL) { elem2[c]->next=m; m->next=NULL; } else { for(k=elem2[c];k->next!=NULL;k=k->next); k->next=m; m->next=NULL; } } //将结点存入相应的位置 return OK; }

3、两种查询方式

int searchname(Link elem[13],char name[20]) //用名字查找 { int a,b,c; Link d; a=strlen(name); b=name[a-1]; c=b%13; //采用和存储相同的方法查找名字 if(strcmp(elem[c]->next->data.name,name)==0) //判断指针指向的名字与输入的名字是否相同,相同则返回0 { printf("------------------以下为查找的人的所有信息--------------------\n"); printf("姓名:%s\n",elem[c]->next->data.name); printf("电话号码:%s\n",elem[c]->next->data.number); printf("微信:%s\n",elem[c]->next->data.wechat); printf("QQ:%s\n",elem[c]->next->data.QQ); } //输出所有的个人信息 else { for(d=elem[c];d->next!=NULL;d=d->next) //如果第一个结点不是,则需要通过移动到下一个结点的方式直至找到对应的信息 { if(strcmp(d->next->data.name,name)==0) { printf("------------------以下为查找的人的所有信息---------------------\n"); printf("姓名:%s\n",d->next->data.name); printf("电话号码:%s\n",d->next->data.number); printf("微信:%s\n",d->next->data.wechat); printf("QQ:%s\n",d->next->data.QQ); break; } } if(d->next==NULL) printf("不存在要找的元素!\n"); //如果遍历到最后仍然没有相同的,则说明不存在要查找的元素 } return OK; } //用电话号码查找 int searchnumber(Link elem2[13],char number[20]) { int a,b,c; Link d; a=strlen(number); b=number[a-1]+10*number[a-2]; c=b%13; //采用和存储号码相同的方式查找信息 if(strcmp(elem2[c]->next->data.number,number)==0)//判断指针指向的电话号码和输入的电话号码的值是否相同 { printf("------------------以下为查找的人的所有信息--------------------\n"); printf("姓名:%s\n",elem2[c]->next->data.name); printf("电话号码:%s\n",elem2[c]->next->data.number); printf("微信:%s\n",elem2[c]->next->data.wechat); printf("QQ:%s\n",elem2[c]->next->data.QQ); } else { for(d=elem2[c];d->next!=NULL;d=d->next) //依次遍历存储结构中的每一个结点 { if(d->next->data.number==number) { printf("以下为查找的人的所有信息\n"); printf("姓名:%s\n",d->next->data.name); printf("电话号码:%s\n",d->next->data.number); printf("微信:%s\n",d->next->data.wechat); printf("QQ:%s\n",d->next->data.QQ); break; } } if(d->next==NULL) printf("不存在要找的元素\n"); //表明查找失败,不存在相应的信息 } return OK; }

4、修改信息

int change(char number1[20],char number2[20],Link elem2[13]) { int a,b,c,f,g; Link e; a=strlen(number1); f=number1[a-1]; g=number1[a-2]; b=f+10*g; c=b%13; //修改信息之前要找到对应的要修改的信息的位置 if(strcmp(elem2[c]->next->data.number,number1)==0) { memcpy(elem2[c]->next->data.number,number2,strlen(number2)); printf("修改成功!\n"); } else { for(e=elem2[c];e->next!=NULL;e=e->next) { if(strcmp(e->data.number,number1)==0) { memcpy(e->data.number,number2,strlen(number2)); printf("修改成功!\n"); break; } } //找到对应的电话号码并对其进行修改 printf("不存在要修改的电话号码!\n"); } printf("更改后的号码查询只能通过名字查找!\n"); //表明查找失败不存在要修改的电话号码 printf("\n"); return OK; }

5、删除信息

int numberdelete(char number[20],Link elem2[13]) { int a,b,c,e,f; Link d,g; a=strlen(number); e=number[a-1]; f=number[a-2]; b=e+10*f; c=b%13; //要删除,也同样要先通过存储的方式查找到对应的电话号码 for(d=elem2[c];d->next!=NULL;d=d->next) { if(strcmp(d->next->data.number,number)==0) { g=elem2[c] while(g->next!=d->next) g=g->next; if(g->next->next==NULL) { g->next=NULL; free(d->next); printf("删除成功!\n"); break; } else { g->next=g->next->next; free(d->next); printf("删除成功!\n"); break; } //查找到对应的号码对其进行删除 } } printf("删除完的只能通过电话号码查找有效\n"); printf("\n"); return OK; }

6、主函数

void main() //主函数 { int j=0,selection,b,i,t; char z[4]="yes"; Link elem[13],elem2[13]; for(i=0;inext=NULL; elem2[i]->next=NULL; } //定义两个数组用来存储姓名和电话 char name[20],number[20],number1[20],number2[20],number3[20]; while(j==0) { printf("----------------------------------------\n"); printf("| 电话号码查询系统 |\n"); printf("|--------------------------------------|\n"); printf("| |\n"); printf("| 1.从文件导入信息 |\n"); printf("| |\n"); printf("| 2.添加信息 |\n"); printf("| |\n"); printf("| 3.查询 |\n"); printf("| |\n"); printf("| 4,修改信息 |\n"); printf("| |\n"); printf("| 5.删除电话 |\n"); printf("| |\n"); printf("| 6.退出系统 |\n"); printf("| |\n"); printf("----------------------------------------\n"); printf("请选择操作:"); scanf("%d",&selection); switch(selection) { case 2: { printf("请输入要导入的人的个数:"); scanf("%d",&t); Init(elem,elem2,t); //调用导入信息的函数 } break; case 1: { Init2(elem,elem2); printf("--------------文件导入完成!---------------\n"); printf("\n"); //调用导入信息的函数 } break; case 3: { printf("-----------------------------------\n"); printf(" 1.姓名查询 2.电话查询 \n"); printf("-----------------------------------\n"); //提供了两种方法查询信息 printf("请选择查询方式:"); scanf("%d",&b); if(b==1) { printf("请输入要查找的人的名字:"); scanf("%s",name); printf("\n"); searchname(elem,name); //调用查找姓名的函数 } else { printf("请输入要查找的电话号码:"); scanf("%s",number); searchnumber(elem2,number); //调用查找电话号码的函数 } } break; case 4: { printf("请输入要修改的电话号码:"); scanf("%s",number1); printf("请输入修改后的电话号码:"); scanf("%s",number2); change(number1,number2,elem2); //调用修改电话号码的函数 } break; case 5: { printf("请输入要删除的电话号码:"); scanf("%s",number3); //判断是否要执行删除操作 printf("请确认是否删除(yes/no):"); scanf("%s",z); //判断字符数组中的元素与输入的是否一致 if(strcmp(z,"yes")==0) { //执行删除操作 numberdelete(number3,elem2); } else if(strcmp(z,"no")==0) { printf("已取消删除操作!\n"); } else { printf("输入错误!\n"); } //调用删除电话号码的函数 } break; case 6: { j=1; printf("欢迎使用!\n"); //令j等于1,让switch语句结束,也让整个程序结束 } break; } } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3