c语言编程通讯录
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计思路:
主要分为添加信息、删除信息、排序、查找四部分。将各个功能分开用函数实现,主函数只起调用作用。期中删除时需要确定删除内容,要用到查找函数,需要函数间的调用。因需要形成文本文档格式,还需专门用到函数从txt中调取数据,组成链表。需要用到函数的操作基于此链表进行。
二、程序内容:
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "stdlib.h"
int choose();//函数声明
void add();
void get();
void arrange();
struct data*search();
void del();
struct data//学生信息类型,包含学号,姓名,联系方式
{
char num[15];//学号
char name[20];
char phone[15];
int flag;
struct data *next;
}*head;
int k;//全局变量,通讯录总人数。
FILE *fp; //文件指针
void main()//主函数,只起到调用各个函数功能
{
printf(" **系*** \n ");
int a;
a=choose();
if(a==1)
{
add();
}
if(a==2)
{
del();
}
if(a==3)
{
search();
main();
}
if(a==4)
{
arrange();
}
}
int choose()//主页面,选择要执行的功能。
{
int n;
printf("***************通讯录*******************\n");
printf("请输入需要执行的功能对应的序号:\n");
printf("1、添加新同学信息\n");
printf("2、删除某同学信息\n");
printf("3、按关键字查找并输出\n");
printf("4、对已有信息按学号排序\n");
while(1)//直到输入正确为止。
{
scanf("%d",&n);
if(n==1||n==2||n==3||n==4)
{
break;
}
else
{
printf("输入序号不正确,请重新输入。\n ");
}
}
return n;
}
void add()//添加功能
int i;
struct data *stu;
stu=(struct data*)malloc(sizeof(data));
fp=fopen("address book.txt","a+"); //读写/追加方式打开文本文档。
printf("请输入新同学学号\n");
scanf("%15s",stu->num);
printf("请输入新同学姓名\n");
scanf("%20s",stu->name);
printf("请输入新同学联系方式\n");
scanf("%15s",stu->phone);
fprintf(fp,"%-15s\t\t%-20s\t\t%-15s \n",stu->num,stu->name,stu->phone); //存入文件中
fclose(fp);
free(stu);
printf("请选择下一步操作:\n");//后续操作选择
printf("1、继续添加新同学\n");
printf("2、返回主页面\n");
while(1)
{
scanf("%d",&i);
if(i==1)
{
add();
break;
}
else if(i==2)
{
main();
break;
}
else
{
printf("输入序号不正确,请重新输入。\n");
}
}
}
void get() //从TXT中读取数据,组成链表函数。查找排序函数均需调用。
{
struct data *stu,*p1;
int i=0;
k=0; //全局变量初始化
p1=(struct data*)malloc(sizeof(struct data));
head=NULL;
fp=fopen("address book.txt","r+"); //打开文件
if(fopen("address book.txt","r+")==NULL) //若无数据时
{
printf("通讯录暂无学生信息,请选择下一步操作\n");
printf(" 1:现在添加学生信息\n");
printf(" 2:返回选择操作面板\n");
while(1)
{
scanf("%d",&i);
if(i==1)
{
add();
break;
}
else if(i==2)
{
main();
break;
}
else
{
printf("输入序号不正确,请重新输入。\n");
}
}
}
else
{
while(!feof(fp)) //文件位置指针指向末尾时结束
{
stu=(struct data*)malloc(sizeof(struct data));
fscanf(fp,"%15s\t\t%20s\t\t%15s