学生通讯录管理系统的注释
这是一道学生通讯录管理系统的c程序,我实在不懂改,有些改的地方是别人帮我改的,能帮我在‘// '后面加上注释么,在这里先谢谢好心人了,如果,你懂改,就先写序号,然后写文字。#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NULL 0
#define LEN sizeof(LNode)//1
int seat;//2
typedef struct LNode//3
{
int number;
double telenum;
char name[20];
struct LNode *next;
}LNode,*LinkList;
void printList(LinkList L)//4(显示通讯录)
{
printf("\n ---------------------------------------\n");
printf(" 学号 姓名 电话号码\n");
printf(" ----------------------------------------\n");
LinkList p=L;
int n=1;
if(L==NULL||L->next==NULL)
printf("该通讯录中没有元素\n");
else
while(p->next !=NULL)//5
{
printf(" %2d %-9d",n,p->next->number);
printf(" %-5s %.0f\n",p->next->name,p->next->telenum);
p=p->next;//
n++;//6
}
printf(" ----------------------------------------\n");
return ;
}
LinkList prior(LinkList L,LinkList p)//7(返回列表前一个列表求节点前一个节点的地址。)
{
if(L->next==NULL)
return(L);//8
LinkList p_prior=L;
while(p_prior->next != p)//9
{
p_prior=p_prior->next;
}
return (p_prior);//10
}
void insert(LinkList L,LinkList Elem) //11(实现插入功能)
{
LinkList p=L->next;
while(p!=NULL && Elem->number>=p->number)//
{
if(p->number==Elem->number)
{
printf("重复输入!!\n");return;
}
p=p->next;
}
if(p==NULL) //12
{
p=prior(L,p);
Elem->next=NULL;
p->next=Elem;
}
else // 13
{
p=prior(L,p);
Elem->next=p->next;
p->next=Elem;
}
}
LinkList creatLink() //14(创建通讯录)
{
LinkList L=(LinkList)malloc(LEN); //15 //
L->next=NULL;
LinkList p;
int num=1;
int number;
double telenum;
char name[20];
printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n");
printf("请输入学号 %d:",num);
scanf("%d",&number);
printf("请输入姓名 %d: ",num);
char temp=getchar();
gets(name);
printf("请输入电话号码 %d:",num);
scanf("%lf",&telenum);
while (number>=0)//16
{
p=(LinkList)malloc(LEN);
p->number=number;
p->telenum=telenum;
strcpy(p->name,name);
insert(L,p);
num++;
printf("请输入学号 %d:",num);
scanf("%d",&number);
printf("请输入姓名 %d: ",num);
temp=getchar();
gets(name);
printf("请输入电话号码 %d:",num);
scanf("%lf",&telenum);
}
return(L);//
}
void deleteElement(LinkList L,int i) // 17 (删除通讯录中的某一个表示)
{
LinkList p=L;
int j=0;
while (p->next!=NULL&&j<i-1)//18
{
p = p->next;
j++;
}
if(p->next==NULL) //19
{
printf("第%d个元素删除失败\n",i);
return ;
}
LinkList q = p->next;
p->next = q->next;//20
free(q); //21
}
int searchNum(LinkList L,int n)//22(查找通讯录中的某一个按学号查找)
{
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL)
printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(p->number<=n)//23
if(p->number==n)
{
flag=1;
printf("要查找的是第%d位通讯者:\n",seat);
printf(" 学号: %d 姓名: %s 电话号码.:%.0f\n",p->number,p->name,p->telenum);
}
p=p->next;
seat++;//
}
}
return flag;//24
}
int searchName(LinkList L,char n[])//25
{
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL||L==NULL)
printf("该通讯录中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(!strcmp(p->name,n))//26
{
flag=1;
printf("要查找的是第%d位通讯者:\n",seat);
printf(" Number: %d Name: %s TeleNo.:%.0f\n",p->number,p->name,p->telenum);
}
p=p->next;
seat++;
}
}
return flag;//27
}
int delNum(LinkList L,int n)//28
{
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL)
printf("该链表中没有元素,删除失败\n");
else
{
while(p !=NULL)
{
if(p->number<=n)
{
if(p->number==n)
{
flag=1;
printf("%d ",p->number);
p=p->next;
deleteElement(L,seat);
break;//29
}
else
{
p=p->next;
seat++;
}
}
else
break;
}
if(flag)
printf("被删除\n");//30
}
return flag;
}
int delName(LinkList L,char n[])//31
{
int flag=0;
LinkList p=L->next;
seat=1;
if(L->next==NULL)
printf("该链表中没有元素,查找失败\n");
else
{
while(p !=NULL)
{
if(!strcmp(p->name,n))
{
flag=1;
printf("%s ",p->name);
p=p->next;
deleteElement(L,seat);
break;//32
}
else
{
p=p->next;
seat++;
}//
}
if(flag)
printf("被删除\n");
}
return flag;
}
void main()
{
system("color 1f");
LinkList L=NULL;//33
printf("\n ***************** ^@^欢迎使用通讯录系统***********\n");
printf(" * 1 通讯录的建立 *\n");
printf(" * 2 插入通讯记录 *\n");
printf(" * 3 查询通讯记录 *\n");
printf(" * 4 删除通讯记录 *\n");
printf(" * 5 显示通讯录信息 *\n");
printf(" * 0 退出管理系统 *\n");
printf(" **************** ^@^欢迎使用通讯录系统************\n");
int flag=0;
int menu;
printf("请选择0-5:");
scanf("%d",&menu);//34
while(menu!=0)//35
{
switch(menu)
{
case 1://36
{
L=creatLink();//37
printf("建立通讯录:");
printList(L);//38
flag=1;//39
break;
}
case 2://
{
if(flag==1)//40
{
int number,telenum;
char name[20];
printf("请输入通讯者的学号和姓名:\n");
printf("请输入学号: ");
scanf("%d",&number);
printf("请输入姓名: ");
char temp=getchar();
gets(name);
printf("请输入电话号码: ");
scanf("%d",&telenum);
LinkList p=(LinkList)malloc(LEN);
p->number=number;
strcpy(p->name,name);
p->telenum=telenum;
insert(L,p); // 41
printf("插入后:");
printList(L);
}
else
printf("\nERROR: 通讯录还没有建立,请先建立通讯录\n");
break;
}
case 3://
{
int way,n;
char na[20];
int s;
if(L!=NULL)//42
{
if(flag)
{
printf("选择查找方式:\n");
printf(" 1.按学号 2.按姓名\n");
scanf("%d",&way);
if(way==1)//43
{
printf("\n请输入学号:");
scanf("%d",&n);
s=searchNum(L,n);//44
if(s==0)
printf("无此通讯者,查找失败!\n");
}
else
if(way==2)//45
{
printf("\n请输入姓名:");
char temp=getchar();
gets(na);
s=searchName(L,na);//46
if(s==0)
printf("无此通讯者,查找失败!\n");
}
else
printf("通讯录中无记录!\n");
}
break;
}
else
printf("通讯录中无记录!\n");
break;
}
case 4://
{
int way;
printf("选择删除方式:1.按序号 2. 按学号 3.按姓名 \n");
scanf("%d",&way);
if(way==1)//47
{
int n;
printf("\n请输入通讯录序号: ");
scanf("%d",&n);
printf("删除后:\n");
deleteElement(L,n);//48
printList(L);
}
else
if(way==2)//49
{
int n,f;
printf("\n请输入学号: ");
scanf("%d",&n);
f=delNum(L,n);//50
if(f!=0)
{
printf("删除后:\n");
printList(L);
}
else
printf("无该学号,删除失败!\n");
}
else
if(way==3)//51
{
char na[20];
int f;
printf("\n请输入姓名:");
char temp=getchar();
gets(na);
f=delName(L,na);//52
if(f!=0)
{
printf("删除后:\n");
printList(L);
}
else
printf("无该学号,删除失败!\n");
}
else
printf("ERROR!!\n");
break;
}
case 5://
{
printf("当前通讯录内容如下:\n");
printList(L);//53
break;
}
case 0: exit(0);//
default: printf("\n没有此功能,重新输入\n");
}
printf("\n ***************** ^@^欢迎使用通讯录系统***********\n");
printf(" * 1 通讯录的建立 *\n");
printf(" * 2 插入通讯记录 *\n");
printf(" * 3 查询通讯记录 *\n");
printf(" * 4 删除通讯记录 *\n");
printf(" * 5 显示通讯录信息 *\n");
printf(" * 0 退出管理系统 *\n");
printf(" **************** ^@^欢迎使用通讯录系统************\n");
printf("选择功能:");
scanf("%d",&menu);
}
}