通讯录管理系统C语言课程设计

通讯录管理系统C语⾔课程设计
这是本⼈之前做的⼀个课设,代码⽐较繁琐(由于当时不想花太多时间以致没有进⾏压缩)⼀些但思路⽐较清晰
⼀、 课程设计的⽬的和要求
⽬的:在已学C语⾔的基础上,编写⼀个具有实际功能的程序,掌握实际应⽤程序开发的基本流程——构思,设计框架,所⽤知识,程序编写,编译测试,程序完成。
要求:编写⼀个通讯录,完成显⽰、添加、查和修改等操作
⼆、设计
本次课程设计的通讯录管理系统,本⼩组共提供了九种基本的功能:
1.  添加联系
2.  查询联系⼈
3.  删除联系⼈
4.  修改联系⼈信息
5.  输出联系⼈列表
6.  排序
7.  写⼊⽂件
8.  读取⽂件
9.  通话记录
现在对每个功能进⾏分析:
添加联系⼈:
我们设定的联系⼈信息是由姓名、⼿机号、QQ、电⼦邮箱组成,故对其依次输⼊,⽽且对于不同的信息对象,我们做出了不同的限定:姓名我们给⾜了空间(按个⼈喜好设定联系⼈姓名),⼿机号我们限定为11位数字字符串,QQ号码限定为10位数字字符串,电⼦邮箱只能有⼀个@号。另外,对于联系⼈信息的每⼀项(这⾥除了姓名),只要输⼊不符,则重新输⼊直到你输⼊的格式正确为⽌。以下以其中某⼀项为例进⾏分析。
以⼿机号码为例:其中的cala函数⽤于计算字符串的长度,这⾥指⼿机号的长度。
查询联系⼈:
⾸先,我们查询的⽅式可能不同:有些⼈想查姓名,⽽有些⼈查⼿机号,有些
⼈则查QQ号码。对于每⼀项,我们输⼊想查的信息项,再通过p=head->next
遍历整个链表,依次进⾏⽐对,⽐对成功便输出此项的相关信息,若失败,则
提⽰“该联系⼈不存在”。
删除联系⼈:
修改联系⼈信息:
和查询⼀样,⾸先遍历到所输⼊的信息项,再进⾏修改。
输出联系⼈列表:
通过head指针直接将链表输出。
排序:
如果想要交换链表中两项的位置,则:
写⼊⽂件:
通过fp=fopen(filename,"a+")打开⽂件,通过fprintf按所输⼊形式往⽂件写⼊信息。
读取⽂件:
通过fp=fopen(filename,"a+")打开⽂件,通过fgets获取⽂件中的信息,并⽤printf
输出。
通话记录:
这⾥我们设计了⼀个模拟通话,⽤⼀个随机数来表⽰,假如随机数的值位于链表中项数之内,则在相应的⽂件中写⼊联系⼈信息,如果位于链表项数之外,则在相应⽂件中写⼊未知联系⼈。
三、编码
提⽰:由于程序的提⽰信息⽐较多,同时,为了使得该程序功能更加全⾯,添加了许多判断,程序⽐较繁琐,代码量也⽐较多。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<time.h>
typedef struct chsystem
{
char name[15];//姓名
char tel[20];//⼿机
char tecent[15];//qq号码
char email[20];//邮箱
}cs;//通讯录结构体
typedef struct pcs
{
cs chat;
pcs* next;
}*ptcs;//通讯录节点
ptcs head=(ptcs)malloc(sizeof(pcs));
int menu_select()//功能选择框
{
system("cls");
printf("\n\t\t**********通讯录管理系统**********\n");
printf("\t\t┌-------------------------------┐\n");
printf("\t\t│        1.添加联系⼈│\n");
printf("\t\t│        2.查询联系⼈│\n");
printf("\t\t│        3.删除联系⼈│\n");
printf("\t\t│        4.修改联系⼈信息│\n");
printf("\t\t│        5.输出联系⼈列表│\n");
printf("\t\t│        6.排序│\n");
printf("\t\t│        7.写⼊⽂件│\n");
printf("\t\t│        8.读取⽂件│\n");
printf("\t\t│        9.通话记录│\n");
printf("\t\t│        0.退出│\n");
printf("\t\t└-------------------------------┘\n");
printf("\t\t请您选择(0-9):");
c=getchar();
}while(c<'0'||c>'9');//检查输⼊是否符合规范
return(c-'0');
}
int cala(char *p)//计算字符串长度
{
int i,n=0;
for(i=0;p[i]!='\0';i++)n++;
return n;
}
int Addpeo()//添加联系⼈
{
int t,n,a;
char flag='y';
ptcs p=head,q;
while(p->next)p=p->next;
while(flag!='n'&&flag!='N')
{
q=(ptcs)malloc(sizeof(pcs));
p->next=q;
p=q;
q->next=NULL;
printf("\n\t\t请输⼊:\n");
printf("\t\t姓名:");//输⼊姓名
scanf("\t\t%s",q->chat.name);
printf("\t\t⼿机号码:");//输⼊⼿机号
scanf("\t\t%s",q-&l);
do
{
n=0;
if(cala(q-&l)!=11)
{
n=1;
printf("\t\t您输⼊的⼿机号码格式不存在,请重新输⼊:");    scanf("\t\t%s",q-&l);
}
else
{
for(t=0;t<11;t++)
{
if(q-&l[t]<'0'||q-&l[t]>'9')
{
n=1;
printf("\t\t您输⼊的⼿机号码格式不合理,请重新输⼊:");      scanf("\t\t%s",q-&l);
}
}while(n);
printf("\t\tQQ号:");//输⼊QQ号
scanf("\t\t%s",q-&);
do
{
n=0;
if(cala(q-&)>10)
{
n=1;
printf("\t\t您输⼊的QQ号码格式不存在,请重新输⼊:");    scanf("\t\t%s",q-&);
}
else
{
for(t=0;t<10;t++)
{
if(q-&[t]<'0'||q-&[t]>'9')
{
n=1;
printf("\t\t您输⼊的QQ号码格式不合理,请重新输⼊:");      scanf("\t\t%s",q-&);
break;
}
}
}
}while(n);
printf("\t\t电⼦邮箱:");//输⼊邮箱
scanf("\t\t%s",q-&ail);
do
{
a=0;
for(t=0;q-&ail[t]!='\0';t++)
{
if(q-&ail[t]=='@')
a++;
}
if(a!=1)
{
printf("\t\t输⼊的邮箱不合理,请重新输⼊:");
scanf("\t\t%s",q-&ail);
}
}while(a!=1);
printf("\n\t\t是否继续添加?(Y/N)");
scanf("\t\t%c",&flag);
}
return 0;
}
int watch_over()//查询联系⼈
{
int m,n;
char flag='y';
ptcs p=head->next;
while(flag!='n'&&flag!='N')
{
printf("\n\t\t*************查询⽅式*************\n");
printf("\t\t┌-------------------------------┐\n");
printf("\t\t│          1.查姓名│\n");
printf("\t\t│          2.查⼿机号│\n");
printf("\t\t│          3.查QQ号码│\n");
printf("\t\t│          4.返回│\n");
scanf("\t\t%d",&m);//选择查询⽅式
do
{
n=0;
if(m!=1&&m!=2&&m!=3&&m!=4)
{
n=1;
printf("\t\t您输⼊的查询⽅式不存在,请重新输⼊:");
scanf("\t\t%d",&m);//选择查询⽅式
}
}while(n);
if(!p)
{
printf("\t\t该通讯录为空!\n");
return 0;
}
if(1==m)
{
char nm[15];
p=head->next;
printf("\t\t请输⼊您要查询的联系⼈:");
scanf("\t\t%s",nm);
while(p!=NULL&&strcmp(p->chat.name,nm)!=0)p=p->next;  if(!p)
{
printf("\t\t您要查询的联系⼈不存在!\n");
printf("\t\t是否继续查询?(Y/N)");
scanf("\t\t%c",&flag);
return 0;
}
printf("\t\t⼿机号码:%s\n",p-&l);
printf("\t\tqq号:%s\n",p-&);
printf("\t\t电⼦邮箱:%s\n",p-&ail);
}
if(2==m)
{
char te[20];
p=head->next;
printf("\t\t请输⼊您要查询的⼿机号码:");
scanf("\t\t%s",te);
while(p!=NULL&&strcmp(p-&l,te)!=0)p=p->next;
if(!p)
{
printf("\t\t您要查询的联系⼈不存在!\n");
printf("\t\t是否继续查询?(Y/N)");
scanf("\t\t%c",&flag);
return 0;
}
printf("\t\t姓名:%s\n",p->chat.name);
printf("\t\tqq号:%s\n",p-&);
printf("\t\t电⼦邮箱:%s\n",p-&ail);
}
if(3==m)
{
char qq[15];
p=head->next;
printf("\t\t请输⼊您要查询的qq号:");
scanf("\t\t%s",qq);
while(p!=NULL&&strcmp(p-&,qq)!=0)p=p->next;  if(!p)
{
printf("\t\t您要查询的联系⼈不存在!\n");
printf("\t\t是否继续查询?(Y/N)");

本文发布于:2024-09-22 12:40:57,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/95540.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:联系   信息   程序   查询   链表   编写
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议