##数据结构课程设计-通讯录管理系统
一,前言
自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管理系统,你就不难发现,这次数据结构的课设完全就是那篇直接改过来的,也就存储结构变了一下。
C语言课设在这里-----球队管理系统(C语言版)
废话先不多说,直接上完整代码:
二,直接上代码
#include
#include
#include
#include
typedef int ElemType;
typedef struct person{
char num[10];//编号
char name[10];//姓名
char sex[10];//性别
char phone[10];//电话
}personal;/*={};测试*/
typedef struct node
{
person data;//数据域
struct node * next;//指针域
}ListNode,* LinkList;
LinkList InitList();
LinkList Create(LinkList head);
void List(LinkList head);//显示所有记录
void save(LinkList head);//保存到文件
void Find(LinkList head);//按要求查找
int GetLength(LinkList head);//总记录条数
void Add(LinkList head);//增加新的记录
void Alter(LinkList head);//修改
void Delete(LinkList head); //删除
void Statis_sex(LinkList head);//性别个数
void Quit();//退出选单
void Menu(LinkList head);//选单
//Creat模块已通过读取文件信息实现
LinkList InitList()
{
LinkList head=(LinkList)malloc(sizeof(ListNode));//创立头结点
if(head==NULL)
{
printf("空间分配无效!");
exit(-1);//退出程序
}
head->next=NULL;
return head;
}
LinkList Create(LinkList head)
{
person LM;//接受文件数据
LinkList rear;
rear=head;
FILE *fp= fopen("file.txt","r");
if(fp==NULL)
{
printf("打开文件失败!");
return NULL;
}
while(fscanf(fp,"%s%s%s%s",LM.num,LM.name,LM.sex,LM.phone)!=EOF)//处理到文件尾
{
LinkList s=(LinkList)malloc(sizeof(ListNode));
s->data=LM;
s->next=NULL;
rear->next=s;
rear=s;
}
fclose(fp);
return head;
}
void List(LinkList head) {
LinkList p;
p = head->next;
if (!p) //如果head指针为空说明链表为空
{
printf("\n链表为空!\n\n");
}
else
{
printf("\n通信录:\n\n");
printf("编号姓名性别电话 \n");
while (p) //循环将各个节点值输出
{
printf("%s\t%s\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.phone);//打印
p = p->next;//此句放在打印后面,防止产生野指针
}
Statis_sex(head);
printf("\n返回主菜单\n");
system("pause");//页面停留
Menu(head);
}
}
void save(LinkList head)
{
LinkList rear;
person LM;
rear=head->next;//跳过头节点
FILE *fp;
int i;
if((fp=fopen("file.txt","wb"))==NULL)/*只打开或建立一个二进制文件,只允许写数据*/
{
printf("\n文件不存在!\n");
}
while(rear)//处理到文件尾
{
LM=rear->data;
fprintf(fp,"%s\t%s\t%s\t%s\n",LM.num,LM.name,LM.sex,LM.phone);
rear=rear->next;
}
fclose(fp);
}
void Find(LinkList head)
{
int Loop=0;
char name[10];
printf("请输入要查询联系人的姓名[ ]\b\b\b\b\b\b");
scanf("%s",name);
LinkList rear=head->next;
while(rear)
{
if (strcmp(rear->data.name,name)==0)
{
printf("编号姓名性别电话 \n");
printf("%s\t%s\t%s\t%s\n",rear->data.num,rear->data.name,rear->data.sex,rear->data.phone);
Loop=1;
}
rear=rear->next;
}
if(Loop==1)
{
printf("\n查询联系人成功!返回菜单\n");
system("pause");
Menu(head);
}
else
{
int n;
printf(&