简述
大二上学期 新开的一门课程叫c语言程序设计,提供了一定的时间练习c语言。刚开始因为大一下没有一定的练习,所以有稍微的难,结课时要做的就是这个联系人管理系统,当时做完特有成就感,现在看实在是太简单了哈哈哈~
完成的
1. 保存在文件中
2. 增删改查
3. 多用户(其实就是能添加多个用户而已)
菜单
1.输入数据
2.查看数据
3.插入数据
4.删除数据
5.查找数据
6.修改数据
7.读入文件
8.退出
代码部分
平台:Microsoft Visual Studio 2010
```c
#include<assert.h>
#include <string.h>
#include<stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct people/*定义元素数据类型*/
{
char name[10]; //姓名
char phone[20];//电话
char gender[15];//性别
struct people *next;//结构体指针
}peo;
peo *head;
//typedef struct _people people;
void save(peo *p2);
void input(peo *p);
peo *inputdata();//数据输入
void insert();//插入数据
peo *print(peo *p);//遍历
void gai(peo *p2);//查找并修改数据
void find(peo *p2);//查找联系人并输出信息
void menu();//菜单
void free();//删除数据
void save(peo *p2)//保存数据
{
FILE *fp;
char file[15];
printf("保存数据:\n");
printf("输入文件名:\n");
scanf("%s",file);
if((fp=fopen("file","w+"))==NULL)//创建文件 w+以纯文本方式读写
{
printf("创建文件失败\n");
}
fprintf(fp,"序号\t姓名\t电话\t\n");// \t 的意思是 横向跳到下一制表符位置(跳格)
while(p2!=NULL)
{
fprintf(fp,"%s\t",p2->name);
fprintf(fp,"%s\t",p2->phone);
fprintf(fp,"%s\t",p2->gender);
p2=p2->next;
}
printf("\n保存成功\n");
fclose(fp);
}
void input(peo *p)//输入相关数据
{
printf("姓名\n");
scanf("%s",&p->name);
printf("电话\n");
scanf("%s",&p->phone);
printf("性别\n");
scanf("%s",&p->gender);
}
void insert()
{
int i;
char name[20];
peo *p,*p2,*p3;
p=head;
p3=(peo *)malloc(sizeof(peo));//要插入的新结点
p3->next=NULL;
printf("插入数据\n");
printf("输入要插入的联系人的资料\n");
input(p3);
while(p->next!=NULL)
{
p2=p;//保留头结点
p=p->next;//找到尾节点
}
p->next=p3;//新的尾节点为p3
printf("插入成功\n");
print(head);
return;
}
peo *inputdata()//数据输入
{
peo *p,*p2;
int i=1;
p=(peo *)malloc(sizeof(peo));//申请空间
if(p!=NULL)
{
head=p;//保存头节点指针
printf("输入数据\n");
printf("在姓名处输入end代表输入结束\n");
while(i)//输入end的情况
{
printf("姓名\n");
scanf("%s",p->name);//p->name==end
if(strcmp(p->name,"end")==0)//比较
{
printf("输入完毕\n");
i=0;//跳出循环
p2->next=NULL;//尾节点
free(p);//把输入的end结点删除
p=p2;//p2成为真正的尾节点
}
else//输入联系人数据
{
printf("电话:");
scanf("%s",p->phone);
printf("性别:");
scanf("%s",p->gender);
printf("*********\n\n");
p2=p;
p=(peo *)malloc(sizeof(peo));
if(p!=NULL)
{
p2->next=p;
}
}
}
}
return p->next;
}
void free()//删除数据
{
peo *p,*p2;
char name[30];
printf("删除数据\n");
printf("请输入要删除的姓名:\n");
scanf("%s",name);
p=head;
if(head==NULL)
{
printf("是空表\n");
return;
}
if(strcmp(name,p->name)==0){//找到p
head=p->next;//head往后移
printf("删除成功\n");
}
while(p!=NULL&&(strcmp(name,p->name)!=0))//p不为空但没找到
{
p2=p;//保留头结点
p=p->next;//往下找
}
if(p==NULL)
{
printf("查无此人\n");
}
if(p->next!=NULL)//p不是表尾
{
p=p->next;//下一个
p2->next=p;//前一个结点的后继现在是原p的后继
printf("删除成功\n");
}
else//p为表尾
{
p2->next=NULL;
printf("删除成功\n");
// return;
}
print(head);
return;
}
void find(peo *p2)
{
char name[20];
int b=0;
printf("查找数据\n");
printf("请输入想查找人的姓名\n");
scanf("%s",name);
while(p2!=NULL)
{
if(strcmp(name,p2->name)==0)
{
printf("你要找到的联系人\n");
printf("姓名:%s\n",p2->name);
printf("电话:%s\n",p2->phone);
printf("性别%s\n",p2->gender);
b=1;
}
p2=p2->next;
}
if(b==0)
{
printf("查无此人\n");
}
}
void gai(peo *p2)//查找并修改数据
{
char name[20];
int b=0,i;
printf("修改的联系人信息\n");
printf("联系人姓名\n");
scanf("%s",name);
while(p2!=NULL)
{
if(strcmp(name,p2->name)==0)
{
printf("原信息\n");
printf("姓名:%s\n",p2->name);
printf("电话:%s\n",p2->phone);
printf("性别:%s\n",p2->gender);
printf("请选择要修改的项;\n");
printf("\t 1.姓名\t 2.电话\t 3.性别\t\n");
printf("您的选择是\n");
scanf("%d",&i);
printf("请输入修改之后的内容\n");
switch(i)
{
case 1:
printf("姓名:\n");
scanf("%s",p2->name);
break;
case 2:
printf("电话\n");
scanf("%s",p2->phone);
break;
case 3:
printf("性别\n");
scanf("%s",p2->gender);
break;
}
printf("修改成功\n");
b=1;
}
p2=p2->next;
}
if(b=0)
{
printf("查无此人\n");
}
}
peo *print(peo *p)
{
printf("显示联系人信息\n");
while(p!=NULL)
{
printf("姓名%s\t\t",p->name);
printf("电话%s\t\t",p->phone);
printf("性别%s\t\t\n",p->gender);
p=p->next;
}
return p;
}
void menu()
{
system("\cls");//清屏
printf("\n");
printf("*这是一个联系人管理程序*\n\n*可以对联系人信息进行管理*\n\n*欢迎使用联系人管理程序*\n\n");
printf(" *通讯录管理* \n");
printf(" 1.输入数据 \n");
printf(" 2.查看数据 \n");
printf(" 3.插入数据 \n");
printf(" 4.删除数据 \n");
printf(" 5.查找数据 \n");
printf(" 6.修改数据 \n");
printf(" 7.读入文件 \n");
printf(" 8.退出 \n");
}
void main()
{
int i;
menu();
for(;;)
{
printf("请输入您的选择\n");
loop:scanf("%d",&i);
if(i<1||i>8)
{
printf("输入错误,请输入1~8\n");
}
switch(i)
{
case 1:
inputdata();
break;
case 2:
print(head);
break;
case 3:
insert();
break;
case 4:
free();
break;
case 5:
find(head);
break;
case 6:
gai(head);
break;
case 7:
save(head);
break;
case 8:
printf("退出,欢迎您再次使用联系人管理系统\n");
return;
}
}
}