求一个通讯录管理系统 C语言编写的

最好有点注释。

第1个回答  2009-11-05
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
#include <mem.h>
#include <dos.h>

void pause();

typedef struct STUDENT
{
char name[20]; //姓名
char number[20]; //号码
char addr [20]; //地址
struct STUDENT *next; //指向下个数据
struct STUDENT *last; //指向上个
}STUDENT;

static STUDENT *first=NULL; //链表头
static STUDENT *end=NULL;

STUDENT *Malloc(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
memset(p->name,'\0',20);
memset(p->number,'\0',20);
memset(p->addr,'\0',20);

p->next=NULL;
p->last=NULL;
return p;

}

void Insert(STUDENT *t) //链表插入
{

STUDENT *p;
if (first==NULL)
first=t;
else
{ p=first;
while (p->next)
p=p->next;
p->next=t;
t->last=p;
end=t;
}
}

void loaddatabase() //加载数据
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("打开文件出错\n");
pause();
return;
}

p=Malloc();
//first=p;

while(fscanf(fp,"%s%s%s",
p->name,p->number,p->addr)>0)
{
Insert(p);
p=Malloc();

}

fclose(fp);
printf("\t\t 欢迎使用通讯录管理系统 \n\n");
printf("\n\n\n\n\n\n\n\t\t\t\t数据加载成功\n\n\n\n\n\n\n\t\t\t\t");
system("pause");
system("cls");
}

void savedata() //保存数据
{
FILE *fp;
STUDENT *p;

if (first==NULL )
{
printf("没有记录\n");
pause();
//return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("打开文件出错\n");
pause();
return;
}
p=first;
while(p)
{
fprintf(fp,"%s %s %s\n",p->name,p->number,p->addr);
p=p->next;
}
fclose(fp);
printf("数据保存成功\n");
}

void add() //添加记录
{
STUDENT *p;
STUDENT *newstudent=Malloc();
printf("请输入姓名:");
scanf("%s",newstudent->name);
printf("请输入号码:");
scanf("%s",newstudent->number);
printf("请输入地址:");
scanf("%s",newstudent->addr);
Insert(newstudent);

}

void pause()
{
system("pause");
system("cls");
}

void printall() //打印全部记录
{
STUDENT *p;
p=first;
printf("\n");
printf("姓名\t\t号码\t地址\n");
while (p)
{
printf("%s\t%s\t\t%s\n",p->name,p->number,p->addr);
p=p->next;
}
printf("\n");
}

void findbyname() //按姓名查询
{ int i=0;
STUDENT *p;
char buf[20];
p=first;
printf("请输入姓名:");
scanf("%s",buf);
while (p)
{
if (strcmp(p->name,buf)==0)
{ printf("%s\t %s\t %s\n",
p->name,p->number,p->addr);
i++;
break;
}
p=p->next;
}
if (i==0)
printf("sorry,没找到改记录\n");
}

void findbynumber() //按号码查询
{
int i=0;
STUDENT *p;
char buf[20];
p=first;
printf("请输入号码:");
scanf("%s",buf);
while (p)
{
if (strcmp(p->number,buf)==0)
{ printf("%s\t %s\t %s\n",
p->name,p->number,p->addr);
i++;
}
p=p->next;
}
if (i==0)
printf("sorry,没找到改记录\n");
}

void findbyaddr() //按地址查询
{ int i=0;
STUDENT *p;
char buf[20];
p=first;
printf("请输入地址:");
scanf("%s",buf);
while (p)
{
if (strcmp(p->addr,buf)==0)
{ printf("%s\t %s\t %s\n",
p->name,p->number,p->addr);
i++;
}
p=p->next;
}
if (i==0)
printf("sorry,没找到改记录\n");
}

int collect(){ //统计人数
int totalnum=0;
STUDENT *p;
p=first;
while (p)
{
totalnum++;
p=p->next;
}
printf("人数:%d \n",totalnum);

}

int delbyname() //通过姓名删除
{ int i=0;
STUDENT *p,*pnext,*pbuf,*plast;
char buf[20];
p=first;
printf("请输入需删除人员的姓名:");
scanf("%s",buf);

while (p)
{
if (strcmp(p->name,buf)==0)
{
i++;
if (first==p)
{
pbuf=first;
if (first->next==NULL) end=NULL;

first=first->next;
if (first) first->last=NULL;
free(pbuf);
printf("删除成功\n");
return 0;
}
plast->next=p->next;
if (p->next=NULL) end=p->last;
free(p);
printf("删除成功\n");
}
plast=p;
p=p->next;
}
if (i==0)
printf("sorry,没找到该记录\n");
}

int delbynumber() //通过号码删除
{ int i=0;
STUDENT *p,*pnext,*pbuf,*plast;
char buf[20];
p=first;
printf("请输入需删除人员的号码:");
scanf("%s",buf);

while (p)
{
if (strcmp(p->number,buf)==0)
{
i++;
if (first==p)
{
pbuf=first;
if (first->next==NULL) end=NULL;
first=first->next;
//first->last=NULL;
if (first) first->last=NULL;
free(pbuf);
printf("删除成功\n");
return 0;
}
plast->next=p->next;
if (p->next=NULL) end=p->last;
free(p);
printf("删除成功\n");
}
plast=p;
p=p->next;
}
if (i==0)
printf("sorry,没找到该记录\n");
}

void changebynumber() //通过号码修改
{
int i=0;
STUDENT *p;
char buf[20];
p=first;
printf("请输入需修改人员的号码:");
scanf("%s",buf);
while (p)
{
if (strcmp(p->number,buf)==0)
{
printf("请输入姓名:");
scanf("%s",p->name);
printf("请输入号码:");
scanf("%s",p->number);
printf("请输入地址:");
scanf("%f",p->addr);
printf("修改成功");
i++;
return;
}
p=p->next;
}
if (i==0)
printf("sorry,没找到改记录\n");
}

void changebyname() //通过姓名修改
{
int i=0;
STUDENT *p;
char buf[20];
p=first;
printf("请输入需修改人员的姓名:");
scanf("%s",buf);
while (p)
{
if (strcmp(p->name,buf)==0)
{
printf("请输入姓名:");
scanf("%s",p->name);
printf("请输入号码:");
scanf("%s",p->number);
printf("请输入地址:");
scanf("%s",p->addr);
printf("修改成功\n");
i++;
return;
}
p=p->next;
}
if (i==0)
printf("sorry,没找到改记录\n");
}

void exit_free()
{
STUDENT *p,*p1;
p=first;
while (p)
{
p1=p;
free(p1);
p=p->next;
}

}

void ver()
{
system("cls");
printf("\n");
printf("\t\t\t 通讯录管理 v1.0");
printf("\n\n\n\n\n\n");
printf("\t\t\t\t作者 风中的纸屑\n\n\n");

}

int menu(void)
{
int choose;
//system("cls");

printf(" \n\n");
printf(" 1: 显示所有人员的信息 |");
printf(" 2: 按姓名查询 |\n");
printf(" 3: 按号码查询 |");
printf("\t 4: 按地址查询 |\n");
printf(" 5: 通过姓名删除 | ");
printf(" 6:按号码删除 |\n");
printf(" 7: 按号码修改信息 |");
printf(" 8: 按姓名修改信息 |\n");
printf(" 9: 添加 |");
printf(" \t\t 10:统计 |\n");
printf(" 11:保存所有信息 |");
printf(" 12:清屏 |\n");
printf(" 13: 版本 |");
printf("\t\t 14: 退出 |\n");
printf("\t \n");
printf(" ");
printf("\t 请输入对应数字:");
scanf("%d",&choose);/*取得用户的选择*/

switch(choose)
{
case 1:
system("cls");
printall();
printf("\n");
collect();
break;
case 2:
findbyname();
break;
case 3:
findbynumber();/*根据用户输入的学号显示该学生的信息*/
break;
case 4:
findbyaddr();
break;
case 5:
printall();
delbyname();
break;
case 6:
printall();
delbynumber();
break;
case 7:
printall();
changebynumber();/*根据用户输入的学号修改学生成绩*/
break;
case 8:
printall();
changebyname();/*保存数据*/
break;
case 9:
add();
break;
case 10:
collect();
break;
case 11:
savedata();
break;
case 12:
system("cls");
break;
case 13:
system("cls");
ver();
break;
case 14:
exit_free();
exit(1);
default: system("cls"); break;
}
}

int main()
{

loaddatabase();
while (1)
menu();
}

这是以前写的学生成绩管理改的,打印排版有点简单,你可以修改一下,不然输入的数据长度不同,可能无法对齐,DEV或者CodeBlocks下通过本回答被提问者采纳

求一个通讯录管理系统 C语言编写的
printf("\\n"); printf("\\t\\t\\t 通讯录管理 v1.0"); printf("\\n\\n\\n\\n\\n\\n"); printf("\\t\\t\\t\\t作者 风中的纸屑\\n\\n\\n"); }int menu(void){ int choose;\/\/system("cls");printf(" \\n\\n");printf(" 1: 显示所有人员的信息 |");printf(" 2: 按姓名查询 |\\n");printf(" 3:...

求用C语言编写一个 通讯录管理系统 。设计要求如下
设计和实现一个“通信录管理系统”,实现对个人通信录进行管理,并满足以下要求:1.系统以菜单方式工作;2.使用链表对通信录信息进行管理和维护;3.使用二进制文件在磁盘上保存通信录... 设计和实现一个“通信录管理系统”,实现对个人通信录进行管理,并满足以下要求:1.系统以菜单方式工作;2.使用链表对通信录信息进行管...

用C语言或C++做个通讯录管理系统
\/\/简单的学生通讯录管理系统#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>struct record{char name[20]; \/\/姓名char phone[12]; \/\/电话char adress[50]; \/\/地址char postcode[8]; \/\/邮政编码char e_mail[20]; \/\/电子邮件。}student[100]; \/\/假设最大数为100...

急求C语言通信录管理系统(包括录入,查找,删除,修改,保存等功能)_百度...
printf("打开一个通迅录,请输入0\\n");printf("保存当前通迅录,请输入s\\n");printf("关闭当前通迅录,请输入c\\n");printf("增加一条记录,请输入a\\n");printf("游览当前通迅录,请输入v\\n");printf("编辑一条记录,请输入e\\n");printf("删除一条记录,请输入d\\n");printf("查找...

求大神用c语言帮忙编个手机通讯录管理!!
include<string.h> \/\/字符串处理 define BUFLEN 80 \/\/缓存区字符不超过80 define LEN 20 \/\/返回去字符不超过20 define N 200 struct record { char code[LEN+1];char name[LEN+1];int age;char sex[3];char time[LEN+1];char add[30];char tel[LEN+1];char mail[30];}...

我现在需要一个通讯录的c语言源代码,大家可以帮帮我吗???
1、设一个通信录由以下几项数据信息构成:数据项 类型 姓名 字符串 地址 字符串 邮政编码 字符串 电话号码 字符串 2. 实现功能:1.存取、2.显示、3.删除记录、4.查询记录等功能。2、要求:界面友好,易于操作 \/ include<stdio.h> include<string.h> include<stdlib.h> struct ...

C语言设计个人通讯录管理系统
1、创建学生社团管理系统的欢迎界面,该欢迎界面以图片的方式呈现,系统启动时再屏幕中居中显示。2、再创建用户登录窗口,用户通过文本框输入用户名和密码,单击“登录”按钮后,在窗体中显示登录是否成功;单击“重置”按钮后,清空文本框信息。3、创建“社团成员信息管理”窗体,用户可以对成员信息进行浏览...

C语言程序设计,通讯录管理系统
\/*【用C语言编写具有数据插入、修改、删除、显示和查询功能的电话薄管理程序】1、数据包括:人名、工作单位、电话号码和E-mail地址。2、可对记录中的姓名和电话号码进行修改。3、可增加或删除记录。4、可显示所有保存的记录。5、可按人名或电话号码进行查询。另:采用结构体数组和文件系统实现。结构体...

C语言,编写一个简单的通讯录管理系统??
实现一个通讯录管理系统;通讯录管理系统可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人 1...

用C语言. 编写一个“通讯录管理系统”程序
用C语言.编写一个“通讯录管理系统”程序,通讯录信息包括姓名、工作单位、电话号码、QQ号码、等信息。通讯录信息用磁盘文件保存,要求程序包括如下功能。1.可以输入追加联系人记录。... 用C语言.编写一个“通讯录管理系统”程序,通讯录信息包括姓名、工作单位、电话号码、QQ号码、等信息。通讯录信息用磁盘文件保存,...

相似回答