《程序设计基础》课程
设计
设计题目:通讯录的管理系统
班级:
姓名:
学号:
1 学习要点
结构化程序设计的方法:首先将复杂问题分解成若干个相对独立的较为简单的小问题,根据情况还可以将小问题分解为更小的问题,然后逐一加以解决,将每个独立的小问题编写成函数,最后通过对各函数的调用求出复杂问题的解。
2 设计要求
本课程设计题目相对来说难度较大,综合性较强,计划安排
60个上机课时,在本学期第三、四、五周完成。前6个题目根据学号顺序依次安排,第7、8两题难度更大,可以选做,同样情况下,可以适当加分。
要求:根据系统功能描述首先进行系统总体设计,画出系统功能模块图,然后对各个功能模块进行详细设计,确定模块间的调用关系,最后进行程序代码设计。课程设计结束时,要提交一份《程序设计
说明书
房屋状态说明书下载罗氏说明书下载焊机说明书下载罗氏说明书下载GGD说明书下载
》,根据《程序设计说明书》的质量和程序调试运行效果,加上辅导出勤情况,综合评定课程设计成绩。3.设计题目
通讯录管理系统
通讯录中的联系人包含以下信息项:姓名、手机、办公电话、家庭电话、电子邮箱、所在省市、工作单位、家庭住址,群组分类(亲属、同事、同学、朋友、其他)。
系统的主要功能包括:
1. 输入联系人的信息,要求:至少输入10个联系人的数据,且注意数据的多样性。
2. 按姓名对联系人信息进行排序,并将排序后信息存放到一个文本文件中。
3. 添加联系人的信息,在已经存在的通讯录文件中添加若干个联系人。要求:添加后仍按联系人的姓名排序,并保存至原文件。
4. 删除联系人的信息,输入一个姓名,若通讯录中有该联系人的信息,则删除该联系人,否则输出提示信息,并提示用户选择是否继续进行删除操作。
5. 修改联系人的信息,输入一个姓名,根据具体需要修改该联系人的某一项信息,将修改后的信息重新保存到通讯录文件中,并提示用户选择是否继续进行修改操作。
6. 按不同条件对通讯录进行查询操作,输出满足条件的联系人的信息。
(1) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓);
(2) 按手机号码查询,输入全部号码或号码位段(如输入130、133、139等);
(3) 按群组分类查询,输入分类名称,输出该群组的全部联系人信息。
7. 输出联系人的信息,按一定格式输出信息,保证信息排列整齐美观。
4.程序:
#include
#include
#include
#define LEN sizeof(struct people)
struct people
char nam[20];
char mobilephone[20];
char officephone[20];
char homephone[20];
char email[20];
char province[20];
char workunit[20];
char familyaddress[20];
char classes[20];
struct people * next;
};
int n;
struct people *creat(void);
struct people *assign(struct people *head); void add();
void del();
void modify();
void search();
void shuchu();
void main()
{struct people *p=NULL;
while(1)
{printf("\n **********通讯录管理系统**********\n");
printf("\n** 创建,请按1 **");
printf("\n** 追加,请按2 **");
printf("\n** 删除,请按3 **");
printf("\n** 修改,请按4 **");
printf("\n** 查询,请按5 **");
printf("\n** 输出,请按6 **");
printf("\n** 退出,请按0 **\n");
scanf("%d",&m);
if(m>=0&&m<=6)
{ switch(m)
{ case 1:p=creat();
break;
case 2: add();
break;
case 3: del();
break;
case 4: modify();
break;
case 5: search();
break;
case 6: shuchu();
break;
case 0: exit(0);
}
printf("操作完成,再次输入\n"); }
else
printf("操作错误,再次选择\n"); }
}//主函
struct people *creat(void)
{FILE *fp;
int a=1;
struct people *p1,*p2,*head;
p1=p2=head=(struct people*)malloc(LEN); n=0;
while(a)
{p1=(struct people*)malloc(LEN);
printf("输入姓名");
scanf("%s",p1->nam);
printf("输入手机号");
scanf("%s",p1->mobilephone);
printf("输入办公室电话号");
scanf("%s",p1->officephone);
printf("输入家庭号码");
scanf("%s",p1->homephone);
printf("输入邮件号");
scanf("%s",p1->email);
printf("输入省市");
scanf("%s",p1->province);
printf("输入工作单位");
scanf("%s",p1->workunit);
printf("输入住址");
scanf("%s",p1->familyaddress);
printf("输入类别");
scanf("%s",p1->classes);
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
printf("是否输继续入信息,'是按1'or'否按0':\n"); scanf("%d",&a);
p1=(struct people*)malloc(LEN);
}
p2->next=NULL;
head=assign(head);
fp=fopen("peo.txt","w");
p1=head;
while(p1!=NULL)
{
fwrite(p1,LEN,1,fp);
p1=p1->next;
}
free(p1);
fclose(fp);
return(head);
}//建立连
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
、文件,排序
struct people *assign(struct people *head)
{struct people *first; //排列后有序链的表头指针
struct people *tail; //排列后有序链的表尾指针
struct people *p_min; //保留键值更小的节点的前驱节点的指针
struct people *min; //存储最小节点
struct people *p; //当前比较的节点
first = NULL;
while(head!=NULL)
{
for(p=head,min=head;p->next!=NULL; p=p->next) {if(strcmp(p->next->nam,min->nam)<0)
{min=p->next;
p_min=p;
}
}
if(min==head)
head=head->next;
else
p_min->next=min->next;//中间和尾部节点删除if(first==NULL)
{first=min;
tail=min;
}
else
{
tail->next=min;
tail=min;
}
}
tail->next=NULL;
head=first;
return(head);
}//排序
void add()
{ FILE *fp;
struct people *head,*p1,*p2;
p1=(struct people*)malloc(LEN);
if((fp=fopen("peo.txt","a"))==NULL) {printf("无法打开文件");
exit(0);
}
printf("输入姓名");
scanf("%s",p1->nam);
printf("输入手机号");
scanf("%s",p1->mobilephone);
printf("输入办公室电话号");
scanf("%s",p1->officephone);
printf("输入家庭号码");
scanf("%s",p1->homephone);
printf("输入邮件号");
scanf("%s",p1->email);
printf("输入省市");
scanf("%s",p1->province);
printf("输入工作单位");
scanf("%s",p1->workunit);
printf("输入住址");
scanf("%s",p1->familyaddress);
printf("输入类别");
scanf("%s",p1->classes);
fwrite(p1,LEN,1,fp);
rewind(fp);
p1=(struct people*)malloc(LEN);
if((fp=fopen("peo.txt","r"))==NULL) {printf("无法打开文件");
exit(0);
}
fread(p1,LEN,1,fp);
p2=p1;
head=p1;
while(!feof(fp))
{p1=(struct people*)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
head=assign(head);
p2=p1=(struct people*)malloc(LEN);
if((fp=fopen("stu.txt","w"))==NULL)
{printf("无法打开文件");
exit(0);
}
while(head!=NULL)
{fwrite(head,LEN,1,fp);
head=head->next;
}
free(p1);
fclose(fp);
}//添加
void del()
{ FILE *fp;
int i=1;
struct people *head,*p1,*p2;
while(i)
{p1=(struct people*)malloc(LEN);
if((fp=fopen("peo.txt","r+"))==NULL) {printf("无法打开文件");
exit(0);
}
fread(p1,LEN,1,fp);
p2=p1;
head=p1;
while(!feof(fp))
{p1=(struct people*)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
rewind(fp);
p1=(struct people*)malloc(LEN);
printf("请输入要删除的姓名");
scanf("%s",p1->nam);
if(strcmp(p1->nam,head->nam)==0)
head=head->next;
else
{ p2=head;
while(p2->next!=NULL&&(p2->next->nam!=p1->nam))
p2=p2->next;
if(p2->next!=NULL)
{ if(p2->next->next==NULL)
p2->next=NULL;
else
p2->next=p2->next->next;
}
else
printf("要删除的人不存在");
}
if((fp=fopen("peo.txt","w"))==NULL)
{printf("无法打开文件");
exit(0);
}
rewind(fp);
while(head!=NULL)
{fwrite(head,LEN,1,fp);
head=head->next;
}
fclose(fp);
free(p1);
printf("\n已删除\n继续删除请输入1,否则输入0");
scanf("%d",&i);
}
}//删除
void modify()
{FILE *fp;
int m,i=1,k;
struct people *p1,*p2,*p;
p1=(struct people*)malloc(LEN);
while(i)
{ k=0;
printf("请输入要修改的人的姓名");
scanf("%s",p1->nam);
if((fp=fopen("peo.txt","r+"))==NULL)
{printf("无法打开文件");
exit(0);
}
while(!feof(fp))
{p2=(struct people*)malloc(LEN);
fread(p2,LEN,1,fp);
if(strcmp(p1->nam,p2->nam)==0)
{k=1;
break;
}
}
if(k)
{while(m!=7)
{ printf("\n 已找到该人,\n 修改姓名请输入1\n");
printf("\n 修改手机请输入2\n");
printf("\n 修改办公电话请输入3\n");
printf("\n 修改家庭电话请输入4\n");
printf("\n 修改电子邮箱请输入5\n");
printf("\n 修改所在省市请输入6\n");
printf("\n 修改工作单位请输入7\n");
printf("\n 修改家庭住
址请输入8\n");
printf("\n 修改群组请输入9\n");
printf("\n 修改完成请输入10\n");
scanf("%d",&m);
if(m>=1&&m<=10)
{ switch(m)
{ case 1:{printf("输入新姓名");
scanf("%s",p2->nam);
fseek(fp,-LEN,1);
fwrite(p2,LEN,1,fp);
}
break;
case 2: {printf("输入新手机");
scanf("%s",p2->mobilephone);
fwrite(p2,LEN,1,fp);
}
break;
case 3: {printf("输入新办公电话");
scanf("%s",p2->officephone);
}
break;
case 4: {printf("输入新家庭电话");
scanf("%s",p2->homephone);
}
break;
case 5: {printf("输入新电子邮箱");
scanf("%s",p2->email);
}
break;
case 6: {printf("输入新所在省市");
scanf("%s",p2->province);
}
break;
case 7: {printf("输入新工作单位");
scanf("%s",p2->workunit);
}
break;
case 8: {printf("输入新家庭住址");
scanf("%s",p2->familyaddress);
}
break;
case 9: {printf("输入新群组");
scanf("%s",p2->classes);
}
break;
case 10: { fseek(fp,-LEN,1);
fwrite(p2,LEN,1,fp);
}
break;
}
printf("操作完成,请继续选择\n");break;
}
else
printf("操作错误,再次选择\n");
}
printf("继续修改请输入1,否则输入0");
scanf("%d",&i);
}
else
{printf("未找到请重新选择");
i=0;
}
fclose(fp);
}
free(p1);
free(p2);
}//修改
void search()
{FILE *fp;
int m=0,k=0,l1,l2,i,j;
char *s1,*s2,temp[15];
struct people *p1,*p2,*head;
//p1=(struct people*)malloc(LEN);
//p2=(struct people*)malloc(LEN);
while(m!=6)
{ p1=(struct people*)malloc(LEN);
p2=(struct people*)malloc(LEN);
printf("\n 按群组查询请输入1\n");
printf("\n 按精确姓名查询请输入2\n");
printf("\n 按模糊姓名查询请输入3\n");
printf("\n 按全部号码查询请输入4\n");
printf("\n 按号码位段查询请输入5\n");
printf("\n 查询结束请输入6\n");
scanf("%d",&m);
if(m>=1&&m<=6)
switch(m)
{ case 1:
{ k=0;
printf("请输入要查询的群组\n");
scanf("%s",p1->classes);
if((fp=fopen("peo.txt","r+"))==NULL)
{printf("无法打开文件");
exit(0);
} while(!feof(fp))
{ fread(p2,LEN,1,fp);
if(strcmp(p1->classes,p2->classes)==0)
{
printf("人名为%s\n",p2->nam);
printf("手机为%s\n",p2->mobilephone);
printf("办公电话为%s\n",p2->officephone);
printf("家庭电话为%s\n",p2->homephone);
printf("邮箱为%s\n",p2->email);
printf("省市为%s\n",p2->province);
printf("工作单位为%s\n",p2->workunit);
printf("家庭地址为%s\n",p2->familyaddress);
printf("群组为%s\n",p2->classes);
k++;
}
} if(k==0)printf("不存在该群组");
fclose(fp);
}
break;
case 2: {k=0; printf("请输入要查询的精确姓名\n");
scanf("%s",p1->nam);
if((fp=fopen("peo.txt","r+"))==NULL)
{printf("无法打开文件");
exit(0);
}
while(!feof(fp))
{fread(p2,LEN,1,fp);
if(strcmp(p1->nam,p2->nam)==0)
{k=1;
break;
}
}
if(k)
{ printf("人名为%s\n",p2->nam);
printf("手机为%s\n",p2->mobilephone); printf("办公电话为%s\n",p2->officephone); printf("家庭电话为%s\n",p2->homephone); printf("邮箱为%s\n",p2->email);
printf("省市为%s\n",p2->province);
printf("工作单位为%s\n",p2->workunit);
printf("家庭地址为%s\n",p2->familyaddress);
printf("群组为%s\n",p2->classes);
}
else
printf("不存在该姓名");
fclose(fp);
}
break;
case 3: {printf("请输入要查询的姓氏\n");
scanf("%s",p1->nam);
if((fp=fopen("peo.txt","r+"))==NULL)
{printf("无法打开文件"); exit(0);
}
while(!feof(fp))
{fread(p2,LEN,1,fp);
s2=p2->nam;
s1=p1->nam;
l1=strlen(s1);
l2=strlen(s2);
i=l2-l1+1;
while(i)
{for(j=0;jnam); printf("手机为%s\n",p2->mobilephone); printf("办公电话为%s\n",p2->officephone); printf("家庭电话为%s\n",p2->homephone); printf("邮箱为%s\n",p2->email);
printf("省市为%s\n",p2->province);
printf("工作单位为%s\n",p2->workunit);
printf("家庭地址为%s\n",p2->familyaddress);
printf("群组为%s\n",p2->classes);
break;
}
}
fclose(fp);
}
break;
case 4: {k=0; printf("请输入要查询的精确号码\n");
scanf("%s",p1->mobilephone);
if((fp=fopen("peo.txt","r+"))==NULL)
{printf("无法打开文件");
exit(0);
}
while(!feof(fp))
{fread(p2,LEN,1,fp);
if(p1->mobilephone==p2->mobilephone) {k=1;
break;
}
}
if(k)
{ printf("人名为%s\n",p2->nam);
printf("手机为%s\n",p2->mobilephone); printf("办公电话为%s\n",p2->officephone); printf("家庭电话为%s\n",p2->homephone); printf("邮箱为%s\n",p2->email);
printf("省市为%s\n",p2->province);
printf("工作单位为%s\n",p2->workunit); printf("家庭地址为%s\n",p2->familyaddress); printf("群组为%s\n",p2->classes);
}
else
printf("不存在该号码");
fclose(fp);
}
break;
case 5: {printf("请输入要查询的号码位段\n");
scanf("%s",p1->mobilephone);
if((fp=fopen("peo.txt","r+"))==NULL)
{printf("无法打开文件");
exit(0);
}
while(!feof(fp))
{fread(p2,LEN,1,fp); s2=p2->mobilephone; s1=p1->mobilephone; l1=strlen(s1);
l2=strlen(s2);
i=l2-l1+1;
while(i)
{for(j=0;jnam);
printf("手机为%s\n",p2->mobilephone); printf("办公电话为%s\n",p2->officephone); printf("家庭电话为%s\n",p2->homephone); printf("邮箱为%s\n",p2->email);
printf("省市为%s\n",p2->province);
printf("工作单位为%s\n",p2->workunit); printf("家庭地址为%s\n",p2->familyaddress); printf("群组为%s\n",p2->classes);
break;
}
}
fclose(fp);
}
break;
case 6: ;
break;
}
free(p1);
free(p2);
}
}
}//查询
void shuchu()
{
FILE *fp;
if((fp=fopen("peo.txt","r"))==NULL)
{printf("无法打开文件");
exit(0);
}
struct people *p;
p=(struct people*)malloc(LEN);
fread(p,LEN,1,fp);
while(!feof(fp))
{
printf("人名为%s\n",p->nam);
printf("手机为%s\n",p->mobilephone);
printf("办公电话为%s\n",p->officephone);
printf("家庭电话为%s\n",p->homephone);
printf("邮箱为%s\n",p->email);
printf("省市为%s\n",p->province);
printf("工作单位为%s\n",p->workunit);
printf("家庭地址为%s\n",p->familyaddress);
printf("群组为%s\n",p->classes);
printf("********************************************* *************************************");
fread(p,LEN,1,fp);
}
}