数据结构课程设计通讯录管理系统(数据结构课程设计,通讯录管理系统)
本文目录
- 数据结构课程设计,通讯录管理系统
- 用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识编写一个通讯录管理系统
- C语言课程设计:通讯录管理系统
- 课程设计,急!!简单的通讯录管理系统!!
- 数据结构双向链表设计学生通讯录管理系统
- 数据结构课程设计题目求解编写一个通讯录管理系统
- C语言程序设计——课程设计——通讯录管理系统
- 通讯录管理系统
- 用C语言编写一个QQ通讯录管理系统设计
数据结构课程设计,通讯录管理系统
#include《stdio.h》
#include《string.h》
#include《stdlib.h》
struct record
{
char name;
char tel;
char position;
char email;
}humen;
int renshu;
void menu()
{
void append();
void del();
void search();
void search1();
void edit();
void display();
while(1)
{
system("cls");
int a;
printf("*******通 讯 录*****\n");
printf("-----1 添加联系人-----\n");
printf("-----2 删除联系人-----\n");
printf("-----3 按姓名查找-----\n");
printf("-----4 按电话查找-----\n");
printf("-----5 修改联系人-----\n");
printf("-----6 显示联系人-----\n");
printf("*****0 退 出*****\n");
printf("请输入(0--6)\n");
scanf("%d",&a);
if(a》=0&&a《=6)
{
switch(a)
{
case 1:system("cls");append();
break;
case 2:system("cls");del();
break;
case 3:system("cls");search();
break;
case 4:system("cls");search1();
break;
case 5:system("cls");edit();
break;
case 6:system("cls");display();
break;
case 0:system("cls");exit(0);
break;
default:
printf("输入错误,请再次选择\n");
break;
}
}
}
}
int main()
{
menu();
system("pause");
return 0;
}
void append()//添加联系人//
{
int i;
printf("请输入要添加的联系人信息\n");
do
{
printf("输**系人的姓名\n");
scanf("%s",humen.name);
printf("\n");
printf("输**系人的电话\n");
scanf("%s",humen.tel);
printf("\n");
printf("输**系人的职务\n");
scanf("%s",humen.position);
printf("\n");
printf("输**系人的邮箱\n");
scanf("%s",humen.email);
printf("\n");
renshu++;
printf("1 继续 0 退出\n");
scanf("%d",&i);
}while(i!=0);
printf("\n");
system("cls");
}
void del()//删除联系人//
{
int i;
char a;
printf("输入要删除的联系人姓名\n");
do
{
scanf("%s",a);
if(strcmp(humen.name,a)==0)
{
for(int j=0;j《renshu;j++)
humen;
}
renshu--;
printf("删除成功\n");
printf("1 继续 0 退出\n");
scanf("%d",&i);
}while(i!=0);
system("cls");
}
void search()//按姓名查找联系人//
{
int H;
char a;
do
{
printf("输入要查找的联系人姓名\n");
scanf("%s",a);
for(int i=0;i《renshu;i++)
{
if(strcmp(humen.name,a)==0)
{
printf("姓名:%s\n电话:%s\n职务:%s\n邮箱:%s\n\n",
humen.email);
}
}
printf("1 继续,0 退出\n");
scanf("%d",&H);
}while(H!=0);printf("\n");
system("cls");
}
void search1()//按电话查找联系人//
{
int H;
char b;
do
{
printf("输入要查找的联系人电话\n");
scanf("%s",&b);
for(int i=0;i《renshu;i++)
{
if(strcmp(humen.tel,b)==0)
{
printf("姓名:%s\n电话:%s\n职务:%s\n邮箱:%s\n\n",
humen.email);
}
}
printf("1 继续,0 退出\n");
scanf("%d",&H);
} while(H!=0);
system("cls");
}
void edit()//修改联系人//
{
int i;
char b;
printf("输入要修改的联系人\n");
do
{
scanf("%s",b);
for(i=0;i《renshu;i++)
if(strcmp(humen.name,b)==0)
{
system("cls");
int j;
printf("选择要修改的内容\n");
printf("1 修改姓名\n");
printf("2 修改电话\n");
printf("3 修改职务\n");
printf("4 修改邮箱\n");
printf("请输入(1--4)\n");
scanf("%d",&j);
if(j》=0&&j《=4)
{
switch(j)
{
case 1:system("cls");
printf("姓名:");
scanf("%s",humen.name);
break;
case 2:system("cls");
printf("电话:");
scanf("%s",humen.tel);
break;
case 3:system("cls");
printf("职务:");
scanf("%s",humen.position);
break;
case 4:system("cls");
printf("邮箱:");
scanf("%s",humen.email);
break;
}
}
}
printf("1 继续 0 退出\n");
scanf("%d",&i);
} while(i!=0);
system("cls");
}
void display()//显示联系人//
{
int i;
for(i=0;i《renshu;i++)
{
printf("姓名:%s\n电话:%s\n职务:%s\n邮箱:%s\n\n",
humen.email);
}
system("pause");
}
用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识编写一个通讯录管理系统
/*
目的:
用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。编写一个通讯录管理系统。
功能:
1) 输入信息——enter();
2) 显示信息———display();
3) 查找以姓名作为关键字———search( );
4) 删除信息———delete();
5) 存盘———save ( );
6) 装入———load( ) ;
时间:
2017年7月20日09:50:14
版本:
1.0
环境:
gcc 7.1
*/
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
#define maxNameLength 12
#define maxAddrLength 16
#define maxPhoneLength 12
#define maxCacheLength 64
///////////////////////////////////////////////////////////////////////////////////////
typedef struct person
{
char name;
char address;
char phone;
struct person *prior, *next;
} singlePerson;
typedef struct addressList
{
singlePerson *head;
int length;
} addressList;
//////////////////////////////////////////////////////////////////////////////////////
void initialization(addressList &record);
int getCommand(void);
void help(void);
void useradd(addressList &record);
void display(c***t addressList &record);
void showSingle(singlePerson *elem);
void userdel(addressList &record);
void search(c***t addressList &record);
void save(c***t addressList &record);
void load(addressList &record);
/////////////////////////////////////////////////////////////////////////////////////
int main(void)
{
int engine = 1;
addressList record;
initialization(record);
while (engine != -1)
{
fflush(stdin);
printf("#");
engine = getCommand();
switch(engine)
{
case 0:
help();
break;
case 1:
useradd(record);
break;
case 2:
display(record);
break;
case 3:
search(record);
break;
case 4:
userdel(record);
break;
case 5:
save(record);
break;
case 6:
load(record);
break;
case -1:
break;
case 100:
break;
case 500:
printf("NO such command\n");
break;
default:
printf("Error\n");
}
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////
void initialization(addressList &record)
{
record.head = NULL;
record.length = 0;
}
int getCommand(void)
{
char *cache = (char *)malloc(maxCacheLength * sizeof(char));
char temp = getchar();
int location = 0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = getchar();
}
*(cache + location) = ’\0’;
strlwr(cache);
if (strcmp(cache, "help") == 0)
{
****(cache);
return 0;
}
else if (strcmp(cache, "useradd") == 0)//添加
{
****(cache);
return 1;
}
else if (strcmp(cache, "display") == 0)//显示
{
****(cache);
return 2;
}
else if (strcmp(cache, "search") == 0)//查找
{
****(cache);
return 3;
}
else if (strcmp(cache, "userdel") == 0)//删除
{
****(cache);
return 4;
}
else if (strcmp(cache, "save") == 0)// 保存
{
****(cache);
return 5;
}
else if (strcmp(cache, "load") == 0)// 读取
{
****(cache);
return 6;
}
else if (strcmp(cache, "exit") == 0)
{
****(cache);
return -1;
}
else if (*cache == ’\0’) //NULL
{
****(cache);
return 100;
}
else
{
****(cache);
return 500;
}//default
}
void useradd(addressList &record)
{
singlePerson *newNode = (singlePerson *)malloc(sizeof(singlePerson));
char temp = getchar();
int location = 0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(newNode-》name + location++) = temp;
temp = getchar();
}
*(newNode-》name + location)=’\0’,location=0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(newNode-》address + location++) = temp;
temp = getchar();
}
*(newNode-》address + location)=’\0’,location=0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(newNode-》phone + location++) = temp;
temp = getchar();
}
*(newNode-》phone + location)=’\0’,location=0;
newNode-》next=record.head,newNode-》prior=NULL;
if(record.head!=NULL)
record.head-》prior=newNode;
record.head=newNode;
record.length++;
}
void userdel(addressList &record)
{
char *cache = (char *)malloc(maxCacheLength * sizeof(char));
singlePerson *elem=record.head;
char temp = getchar();
int location = 0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = getchar();
}
*(cache + location) = ’\0’;
strlwr(cache);
if(strcmp(cache,"all")==0)
{
if(elem==NULL)
printf("there are no contacts in the list\n");
else
{
while(elem-》next!=NULL)
{
elem=elem-》next;
****(elem-》prior);
}
****(elem);
record.head=NULL,record.length=0;
}
}
else
{
while(elem!=NULL)
{
if(strcmp(elem-》name,cache)==0)
break;
elem=elem-》next;
}
if(elem!=NULL)
{
if(elem==record.head)
{
record.head=elem-》next;
}
else
{
if(elem-》next!=NULL)
elem-》next-》prior=elem-》prior;
elem-》prior-》next=elem-》next;
}
****(elem);
}
else
printf("The contact called %s was not found\n",cache);
}
****(cache);
}
void search(c***t addressList &record)
{
char *cache = (char *)malloc(maxCacheLength * sizeof(char));
singlePerson *elem=record.head;
char temp = getchar();
int location = 0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = getchar();
}
*(cache + location) = ’\0’;
strlwr(cache);
while(elem!=NULL)
{
if(strcmp(elem-》name,cache)==0)
break;
elem=elem-》next;
}
if(elem==NULL)
printf("The contact called %s was not found\n",cache);
else
showSingle(elem);
****(cache);
}
void save(c***t addressList &record)
{
FILE *fileWrite;
char *cache = (char *)malloc(maxCacheLength * sizeof(char));
singlePerson *elem=record.head;
char temp = getchar();
int location = 0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = getchar();
}
*(cache + location) = ’\0’;
strlwr(cache);
if((fileWrite=fopen(cache,"wt"))==NULL)
printf("Cant’t create this file\n");
else
{
while(elem!=NULL)
{
fprintf(fileWrite,"%s %s %s\n",elem-》name,elem-》address,elem-》phone);
elem=elem-》next;
}
fclose(fileWrite);
}
****(cache);
}
void load(addressList &record)
{
FILE *fileRead;
char *cache = (char *)malloc(maxCacheLength * sizeof(char));
singlePerson *elem=NULL;
char temp = getchar();
int location = 0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = getchar();
}
*(cache + location) = ’\0’;
strlwr(cache);
if((fileRead=fopen(cache,"rt"))==NULL)
printf("Cant’t open this file\n");
else
{
temp=fgetc(fileRead);
while(feof(fileRead)==0)
{
elem=(singlePerson *)malloc(sizeof(singlePerson));
while (temp == ’ ’ || temp == ’\t’)
temp = fgetc(fileRead);
location=0;
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = fgetc(fileRead);
}
*(cache + location) = ’\0’;
strlwr(cache);
strcpy(elem-》name,cache);
while (temp == ’ ’ || temp == ’\t’)
temp = fgetc(fileRead);
location=0;
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = fgetc(fileRead);
}
*(cache + location) = ’\0’;
strlwr(cache);
strcpy(elem-》address,cache);
while (temp == ’ ’ || temp == ’\t’)
temp = fgetc(fileRead);
location=0;
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = fgetc(fileRead);
}
*(cache + location) = ’\0’;
strlwr(cache);
strcpy(elem-》phone,cache);
elem-》next=record.head,elem-》prior=NULL;
if(record.head!=NULL)
record.head-》prior=elem;
record.head=elem;
record.length++;
temp=fgetc(fileRead);
}
fclose(fileRead);
}
****(cache);
}
void display(c***t addressList &record)
{
char *cache = (char *)malloc(maxCacheLength * sizeof(char));
singlePerson *elem=record.head;
char temp = getchar();
int location = 0;
while (temp == ’ ’ || temp == ’\t’)
temp = getchar();
while (temp != ’ ’&&temp != ’\t’&&temp != ’\n’)
{
*(cache + location++) = temp;
temp = getchar();
}
*(cache + location) = ’\0’;
strlwr(cache);
if(strcmp(cache,"all")==0)
{
if(elem==NULL)
printf("there are no contacts in the list\n");
else
{
while(elem!=NULL)
{
showSingle(elem);
elem=elem-》next;
}
}
}
else
{
while(elem!=NULL)
{
if(strcmp(elem-》name,cache)==0)
break;
elem=elem-》next;
}
if(elem!=NULL)
showSingle(elem);
else
printf("The contact called %s was not found\n",cache);
}
****(cache);
}
void showSingle(singlePerson *elem)
{
printf("name: %-10saddress: %-16sphone: %-12s\n",elem-》name,elem-》address,elem-》phone);
}
void help(void)
{
printf("useradd:\n"
"\t功能:添加一个联系人.\n"
"\t格式:useradd name address phone.\n"
"\t例: useradd xiaoming shanghai 13590909090\n");
printf("display:\n"
"\t功能:显示联系人.\n"
"\t格式:display name 或 display all.\n"
"\t例: display xiaoming\n");
printf("search:\n"
"\t功能:查找联系人.\n"
"\t格式:search name.\n"
"\t例: search xiaoming\n");
printf("userdel:\n"
"\t功能:删除联系人.\n"
"\t格式:useradd name 或 userdel all.\n"
"\t例: userdel xiaoming\n");
printf("save:\n"
"\t功能:保存当前的通讯录.\n"
"\t格式:save path.\n"
"\t例: save d:\backup\addressList.txt\n");
printf("load:\n"
"\t功能:读取通讯录.\n"
"\t格式:load path.\n"
"\t例: load d:\backup\addressList.txt\n");
}
C语言课程设计:通讯录管理系统
/*
* main_tongxunlu.c
*
* Created on: 2011-6-21
* Author: zhanglujin
*/
#include《stdio.h》
#include《stdlib.h》
#include《string.h》
#include《conio.h》
struct record
{
char name; //姓名
char phone; //电话
char adress; //地址
char postcode; //邮政编码
char e_mail; //电子邮件。
}student; //假设最大数为100.
//定义全局变量num,表示已经输入的人数 。
int num; //这里使用数组解决通讯录的问题,实际上使用链表更好。
int menu_select()
{
char s;
int a;/*定义整形变量*/
system("cls");
printf("\t\t***********欢迎进入通讯管理界面********\n\n");
printf("\t\t\t0. 输入记录\n");
printf("\t\t\t1. 显示记录\n");
printf("\t\t\t2. 按姓名查找\n");
printf("\t\t\t3. 按电话号码查找\n");
printf("\t\t\t4. 插入记录 \n");
printf("\t\t\t5. 按姓名排序\n");
printf("\t\t\t6. 删除记录\n");
printf("\t\t\t7. Quit\n");
printf("\t\t***********************************************\n\n");
do{
printf("Enter you choice(0~7):");
scanf("%s",s);
a=atoi(s);
}
while (a《0 || a》7);
return a;
}
int adduser()
{
printf("\t\t\t**************** 请输入用户信息 ****************\n");
printf("\t\t\t输入姓名:\n");
scanf("%s",student.name);
printf("\t\t\t输入电话号码:\n");
scanf("%s",student.phone);
printf("\t\t\t输入地址:\n");
scanf("%s",student.adress);
printf("\t\t\t输入邮编:\n");
scanf("%s",student.postcode);
printf("\t\t\t输入e-mail:\n");
scanf("%s",student.e_mail);
num++;
printf("\t\t\t是否继续添加?(Y/N):\n");
if(getch()==’y’ || getch()==’Y’)
adduser();
return(0);
}
void list()
{
int i;
system("cls");
if(num!=0)
{
printf("\t\t\t*************** 以下为通讯录所有信息************\n");
for (i=0;i《num;i++)
{
printf("\t\t\t姓名:%s\n",student.name);
printf("\t\t\t电话:%s\n",student.phone);
printf("\t\t\t地址:%s\n",student.adress);
printf("\t\t\t邮编:%s\n",student.postcode);
printf("\t\t\te-mail:%s\n",student.e_mail);
if(i+1《num)
{
system("pause");
}
}
printf("\t\t\t************************************************\n");
}
else
printf("\t\t\t通讯录中无任何纪录\n");
printf("\t\t\t按任意键返回主菜单:\n");
getch(); //这里是无回显的输入字符,你输入的字符不会显示在屏幕上。
return;
}
int searchbyname()
{
int mark=0;
int i;
printf("\t\t\t***************** 按姓名查找 *******************\n");
char name;
printf("\t\t\t请输入姓名:\n");
scanf("%s",name);
for(i=0;i《num;i++)
{
if (strcmp(student.name,name)==0)
{
printf("\t\t\t************* 以下是您查找的用户信息 ***********\n");
printf("\t\t\t姓名: %s",student.name);
printf("\t\t\t电话: %s",student.phone);
printf("\t\t\t地址: %s",student.adress);
printf("\t\t\te-mail:%s",student.e_mail);
printf("\t\t\t************************************************\n");
mark++;
if((i+1)《num)
{
printf("\t\t\t是否继续查找相同名字的用户信息:(y/n)\n");
if(getch()==’y’ || getch()==’Y’)
{
continue;
}
else
return(0);
}
else
{
printf("\t\t\t按任意键返回主菜单");
getch();
return(0);
}
}
}
if(mark == 0)
{
printf("\t\t\t没有相同姓名的用户纪录\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return(0);
}
return 0;
}
int searchbyphone()
{
int mark=0;
int i;
printf("\t\t\t****************** 按电话查找 ******************\n");
char phone;
printf("\t\t\t请输入电话号码:\n");
scanf("%s",phone);
for(i=0;i《num;i++)
{
if (strcmp(student.phone,phone)==0)
{
printf("\t\t\t************** 以下是您查找的用户信息 **********\n");
printf("\t\t\t姓名: %s",student.name);
printf("\t\t\t电话: %s",student.phone);
printf("\t\t\t地址: %s",student.adress);
printf("\t\t\te-mail:%s",student.e_mail);
printf("\t\t\t************************************************\n");
printf("\t\t\t按任意键返回主菜单\n");
mark++;
getch();
return(0);
}
}
if (mark==0)
{
printf("\t\t\t没有改用户的信息\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return(0);
}
return(0);
}
void deletebyphone()
{
int i,j;
int deletemark=0;
char phone;
printf("\t\t\t请输入要删除用户电话号码:\n");
scanf("%s",phone);
if(num==0)
{
printf("\t\t\t对不起,文件中无任何纪录\n");
printf("\t\t\t按任意键返回主菜单\n");
getch();
return;
}
for (i=0;i《num;i++)
{
if (strcmp(student.phone,phone)==0)
{
printf("\t\t\t以下是您要删除的用户纪录:\n");
printf("\t\t\t姓名: %s",student.name);
printf("\t\t\t电话: %s",student.phone);
printf("\t\t\t地址: %s",student.adress);
printf("\t\t\te-mail:%s",student.e_mail);
printf("\t\t\t是否删除?(y/n)");
if (getch()==’y’ || getch()==’Y’)
{
for (j=i;j《num-1;j++)
student;
num--;
deletemark++;
printf("\t\t\t删除成功");
printf("\t\t\t是否继续删除?(y/n)");
if (getch()==’y’ || getch()==’Y’)
deletebyphone();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\t\t\t没有该用户的纪录");
printf("\t\t\t是否继续删除?(y/n)");
if(getch()==’y’ || getch()==’Y’)
deletebyphone();
return;
}
return;
}
void deletebyname()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name;
printf("\t\t\t请输入要删除用户姓名:\n");
scanf("%s",name);
for (i=a;i《num;i++)
{
if(strcmp(student.name,name)==0)
{
printf("\t\t\t以下是您要删除的用户纪录:");
findmark++;
printf("\t\t\t________________________________");
printf("\t\t\t姓名: %s",student.name);
printf("\t\t\t电话: %s",student.phone);
printf("\t\t\t地址: %s",student.adress);
printf("\t\t\te-mail:%s",student.e_mail);
printf("\t\t\t________________________________");
printf("\t\t\t是否删除?(y/n)");
if (getch()==’y’ || getch() == ’Y’)
{
for(j=i;j《num-1;j++)
student;
num--;
deletemark++;
printf("\t\t\t删除成功");
if((i+1)《num)
{
printf("\t\t\t是否继续删除相同姓名的用户信息?(y/n)");
if (getch()==’y’)
{
a=i;
continue;
}
}
printf("\t\t\t是否继续删除?(y/n)");
if (getch()==’y’)
deletebyname();
return;
}
if((i+1)《num)
{
printf("\t\t\t是否继续删除相同姓名的用户信息?(y/n)");
if (getch()==’y’ || getch() == ’Y’)
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{
printf("\t\t\t没有该用户的纪录");
printf("\t\t\t是否继续删除?(y/n)");
if(getch()==’y’ || getch() == ’Y’)
deletebyphone();
return;
}
else if (findmark!=0)
{
printf("\t\t\t没有重名信息");
printf("\t\t\t没有该用户的纪录");
printf("\t\t\t是否继续删除?(y/n)");
if(getch()==’y’ || getch() == ’Y’)
deletebyphone();
return;
}
}
int dele()
{
char choic;
printf("\t\t\t1-按电话号码删除 2-按姓名删除");
printf("\t\t\t请选择:");
choic=getch();
switch (choic)
{
case ’1’:deletebyphone();break;
case ’2’:deletebyname();break;
}
return(0);
}
int sortbyname() //按姓名进行排序
{
int i,j;
struct record tmp;
for (i=1;i《num;i++)
{
if(strcmp(student.name)《0)
{
tmp=student;
j=i-1;
do
{
student;
j--;
}while ((strcmp(tmp.name,student.name)《0&&j》=0));
student=tmp;
}
}
printf("\t\t\t排序成功,是否显示?(y/n)");
if (getch()==’y’)
list();
return(0);
}
int main()
{
printf("\t\t************************************************\n");
printf("\t\t********welcome to TONGXUNLU *******************\n");
printf("\t\t###########code by XXXXX ###################\n");
printf("\t\t*************************************************\n");
printf("按任意键进入主菜单\n");
getch();
int selectnum;
while(1)
{
selectnum = menu_select();
switch(selectnum)
{
case 0:
{
adduser();
break;
}
case 1:
{
list();
break;
}
case 2:
{
searchbyname();
break;
}
case 3:
{
searchbyphone();
break;
}
case 4:
{
adduser(); //这里插入,应该能指定位置,不过意义不大,所以和添加记录一样了。
break;
}
case 5:
{
sortbyname();
break;
}
case 6:
{
dele();
break;
}
case 7:
{
printf("BYE BYE!\n");
system("pause");
getchar();
exit(0);
}
}
}
getchar();
return 0;
}
课程设计,急!!简单的通讯录管理系统!!
//chuangyong 头文件模块 chuangyong.h
c***t int MaxLen=200; //最多可存放200个联系人信息
char fName="tel.dat";//磁盘文件:通信录文件名
int Len; //全局变量,通信录中当前联系人总数
//1. 通讯录数据结构设计
typedef struct Telephone
{
char name; //姓名
int group;//群组:1.朋友 2.同事 3.家人 4.其他
char home;//住宅电话
char mobile;//手机
char email;//Email
char add;//地址
char memo;//备注
}Tel;
//指针数组结构,排序时用
typedef struct index
{
int len; //数组长度
Tel *tel; //指针数组,
}Index;
//显示模块 xuanshi.cpp
void List(Tel tel,Index lianxren); //按lianxren中指针数组的排序方式显示所有联系人。
void dayingbiaotou(void); //打印表头
void dayingbiaowei(void);//打印表尾
void PrintOne(Tel r,int i); //仅打印一个联系人r的信息,序号为i
void Print(Tel r); //打印表头及一个联系人的信息
void huanyin();//欢迎界面
int Menu(void); //主菜单,显示第一级菜单:查看通信录(1)、更新通信录(2)、备份通信录(3)、退出(0)。
int Menu2(void); //更新通信录子菜单,显示:新增联系人(21)、联系人(22)、删除联系人(23)、返回主菜单(20)。
//文件处理模块 wenjiancl.cpp
void New(Tel tel,Index *lianxren); //新增联系人。加到数组中第一个空着的位置。之后需要重新排序
void Edit(Tel tel,Index *lianxren); //联系人。需要重新排序
void Delete(Tel tel,Index *lianxren); // 删除联系人。逻辑删除,仅将姓名赋空串。删除后需要重新排序
void Input(Tel *r,Tel tel,int menu); //输入一个联系人的信息,由menu识别:是新增(11)还是修改(13)
int chongcha(char *name,Tel tel,char *orignal);//查重。在新增联或系人前,检查是否有重名的情况。
int Select(); //选择联系人序号,避免出错
int Load(Tel tel,Index *lianxren); //读取。将通信录文件fName读入内存。排序
int Save(Tel tel); //保存。将通信录以fName(全局变量)为名保存到磁盘。此时做物理删除:姓名为空串的联系人表示已删除,不存入通信录文件。
int Copy(void); //备份通信录。复制通信录文件。
void pingypaix(Tel tel,Index *lianxren); //按音序排序。
void xuanzpaixi(Index *p); //对指针数组选择排序
//主文件模块 zhuwenjian.cpp
#include《stdio.h》
#include《stdlib.h》
#include《conio.h》
#include《string.h》
#include "chuangyong.h"
#include "xuanshi.cpp"
#include "wenjiancl.cpp"
int main()
{
huanyin();
int select=0;
Tel tel; //最多存放200个联系人
Index lianxren;//按音序排序的指针数组
Load(tel,&lianxren); //从通信录文件读取信息
//循环显示菜单,供用户选择
do{
if(select《10 || select==20)//选的是主菜单项《10,或由子菜单返回20。接着显示主菜单
select=Menu();
else if(select》20 && select《30)//选的是子菜单2的项,继续显示子菜单2
select=Menu2();
switch(select)
{
case 1://按音序查看通信录
List(tel,lianxren);
printf("\n\n\t按任意键继续... ...");
getch(); //等待用户看清屏幕,conio.h
break;
case 21: //新增联系人
New(tel,&lianxren);
break;
case 22: //联系人
Edit(tel,&lianxren);
break;
case 23: //删除联系人
Delete(tel,&lianxren);
break;
case 20: //返回主菜单
break;
case 3: //备份通信录
system("cls"); //没有子菜单,先清除上一级菜单,stdlib.h
Save(tel); //用户可能更新过,先保存当前tel到通信录文件
Copy();
break;
case 0: //退出程序
break;
}
}while(select!=0);
Save(tel); //退出系统前,将内存数据存入通信录文件
return 0;
}
//xuanshi.cpp 菜单模块。与程序其他模块独立。通过返回的菜单代码与操作对应
// 欢迎部分
void huanyin()
{
char A={"欢迎使用本通讯录 本程序由 飞尧 编写 o(∩_∩)o...!回车进入!"};
int i,j,k;
for(i=0;i《6;i++)
{
printf("\n");
}
puts(" ******************************************************\n");
printf("\t\t");
for(i=0;A!=’\0’;i++)
{
if(i==49)printf("\n\n\t\t\t");
printf("%c",A);
for(j=0;j《10000;j++)
for(k=0;k《2000;k++)
;
}
puts("\n\n\n\t\t\t 07计科C班 王崇尧");
puts("\n ******************************************************\a");
getch();
}
//主菜单,显示第一级菜单:查看通信录(1)、更新通信录(2)、备份通信录(3)、退出(0)。
int Menu(void)
{
int i;
char menu;
do{
system("cls"); //清屏,stdlib.h
for(i=0;i《6;i++)
{
printf("\n");
}
puts("\n **********主菜单*********");
puts(" * *");
puts(" * 1. 查看通信录 *");
puts(" * 2. 更新通信录 *");
puts(" * 3. 备份通信录 *");
puts(" * 0. 退出程序 *");
puts(" * *");
puts(" *************************\n");
printf("\t 请选择:");
menu = getche();
switch( menu )
{
case ’0’:
puts("\n\n\t退出程序!");
menu=menu-’0’;
break; // 跳出循环
case ’1’:
case ’3’:
menu=menu-’0’;
break;
case ’2’:
menu=Menu2();
break;
default:
puts("\n\n\t选择错误!");
menu=’9’;
}
}while(menu==’9’);//要返回菜单代码,’0’、’1’、20,21,22,23、’3’都是有效值
return menu;
}
//更新通信录子菜单,显示:新增联系人(21)、联系人(22)、删除联系人(23)、返回(20)。
int Menu2()
{
char menu;
int i;
do{
system("cls"); //清屏,stdlib.h
for(i=0;i《6;i++)
{
printf("\n");
}
puts("\n ********更新通信录*******");
puts(" * *");
puts(" * 1. 新增联系人 *");
puts(" * 2. 联系人 *");
puts(" * 3. 删除联系人 *");
puts(" * 0. 返回主菜单 *");
puts(" * *");
puts(" *************************\n");
printf("\t 请选择:");
menu = getche(); //输入一个字符,不回显,不需要敲入回车,conio.h
switch( menu )
{
case ’0’:
puts("\n\n\t返回主菜单!");
break;// 跳出循环
case ’1’:
case ’2’:
case ’3’:
break;
default:
puts("\n\n\t选择错误!");
menu=’9’;
}
}while(menu==’9’); //要返回菜单代码,’0’、’1’、’2’、’3’都是有效值
return 20+menu-’0’;
}
//浏览部分
void List(Tel tel,Index lianxren) //按lianxren的排序方式显示所有结点。
{
int i; //i:数组下标
if(Len==0)
{
printf("\n\t没有联系人");
return ;
}
dayingbiaotou();
for(i=0; i《Len; i++) //按音序遍历所有联系人,序号为i+1
PrintOne( *(lianxren.tel), i+1);
dayingbiaowei();
}
void dayingbiaotou(void) //打印表头
{
printf("\n\n\t通信录 * 联系人");
printf("\n\t----------------------------------------------------------------------");
printf("\n\t%-10s%-6s%-10s%-10s", "姓名", "群组", "住宅电话", "手机");
printf("%-10s%-10s%-10s", "Email", "地址", "备注");
printf("\n\t----------------------------------------------------------------------");
}
void dayingbiaowei(void)//打印表尾
{
printf("\n\t----------------------------------------------------------------------\n");
}
void PrintOne(Tel r,int i) //仅打印一个联系人r的信息,序号为i
{
if(i!=0) //联系人前加序号
printf("\n%6d\t%-10s",i,r.name);
else //联系人前不加序号
printf("\n\t%-10s",r.name);
//群组:1.朋友 2.同事 3.家人 4.其他
switch(r.group)
{
case 1:
printf("%-6s","朋友");
break;
case 2:
printf("%-6s","同事");
break;
case 3:
printf("%-6s","家人");
break;
default:
printf("%-6s","其他");
}
printf("%-10s%-10s%-10s", r.home , r.mobile , r.email);
printf("%-10s%-10s",r.add , r.memo );
}
void Print(Tel r) //打印表头及一个联系人的信息
{
dayingbiaotou();
PrintOne(r,0);//只打印一人,不输出序号(第二个参数为0)
dayingbiaowei();
}
//文件处理模块 wenjiancl.cpp
//文件处理部分
int Load(Tel tel,Index *lianxren) //读取。将通信录文件fName读入内存。排序
{
FILE *fin;
int i=0;
fin=fopen(fName,"rb");
if(!fin)
{
printf("\n\t通信录不存在,请先新增联系人!\n\n按任意键继续... ...");
getch();
return 0;
}
while(1)
{
fread(&tel,sizeof(Tel),1,fin);
if(feof(fin))
break;
i++;
}
fclose(fin);
Len=i;//更新通信录总人数
pingypaix(tel,lianxren); //按音序排序
return i;
}
int Save(Tel tel) //保存。将通信录以fName(全局变量)为名保存到磁盘。此时做物理删除:姓名为空串的联系人表示已删除,不存入通信录文件。
{
FILE* fout;
int i,j;//i:tel数组的下标,j:通信录中实际人数计数(不含tel中name为空的元素)
fout=fopen(fName,"wb");
if(!fout)
{
printf("\n\t不能正确保存通信录!按任意键继续... ...");
getch();
return 0;
}
//i为tel数组下标,j为实际人数计数(tel数组中有已逻辑删除的联系人,姓名为空串)
for(i=0,j=0; j《Len; )
{
//找到一个有效的联系人,排出逻辑删除者(姓名为空串)
while( strcmp(tel.name,"") == 0 )
i++;
fwrite(&tel,sizeof(Tel),1,fout);
i++;
j++;
}
fclose(fout);
return j;
}
int Copy(void) //备份通信录。复制通信录文件。
{
FILE *fout,*fin;
Tel *p=(Tel*)malloc(sizeof(Tel)); //存放从通信录读入的临时数据
char name;
fin=fopen(fName,"rb");
if(!fin)
{
printf("\n\t没有联系人!");
return 0;
}
do{
printf("\n\t请输入备份文件名:");
scanf("%s",name);
strcat(name,".bak");
fout=fopen(name,"wb");
if(!fout)
printf("\t无效文件名或路径!\n");
}while(!fout);
while(1)
{
fread(p,sizeof(Tel),1,fin);
if(feof(fin))
break;
fwrite(p,sizeof(Tel),1,fout);
}
printf("\n\t备份成功!");
****(p);
return 1;
}
//基本操作部分
void New(Tel tel,Index *lianxren) //新增联系人。加到数组中第一个空着的位置。之后需要重新排序
{
int t=0; //找到tel中第一个空的位置,存放新输入的联系人
if(Len》=MaxLen)
{
printf("\n\n\t通信录已满!");
return ;
}
//找到tel中第一个空的位置t
while( strcmp(tel.name,"")!=0 )
t++;
Input(&tel,tel,21);//新增联系人(21),输**系人信息
Len++; //联系人增1
pingypaix(tel,lianxren);//重新排序
}
void Edit(Tel tel,Index *lianxren) //联系人。需要重新排序
{
int i;
List(tel,*lianxren);//按音序排序的顺序修改
if(Len==0) return ;
i=Select();
Print( *(lianxren-》tel) ); //显示用户选中的联系人i
Input( lianxren-》tel ,tel,23); //(23)时输**系人信息
pingypaix(tel,lianxren); //重新排序
}
void Delete(Tel tel,Index *lianxren) // 删除联系人。逻辑删除,仅将姓名赋空串。删除后需要重新排序
{
int i;
char select; //用户选择:是否继续输入除姓名以外的信息
List(tel,*lianxren);//按音序排序的顺序删除
if(Len==0) return ;
i=Select();
Print( *(lianxren-》tel) );//显示用户选中的联系人i
printf("\n\t确定要删除此人?(y/n)");
select=getche();
if(select==’Y’ || select==’y’)
{
strcpy(lianxren-》tel-》name,"");//删除联系人信息(逻辑删除):将姓名赋空串,表示无人
Len--; //联系人减1
pingypaix(tel,lianxren);//重新排序
}
}
void Input(Tel *r,Tel tel,int menu) //输入一个联系人的信息,由们menu识别:是新增(11)还是修改(13)
{
int select;
char name;
if(menu==21)//新增,原来没名字
strcpy(orignal,"");
else //,原来有名字
strcpy(orignal,r-》name );
printf("\n\n\t请输**系人姓名:");
do{
scanf("%s", name);
}while(chongcha(name,tel,orignal)); //重名检查。修改时,可以与原来的姓名相同
strcpy(r-》name,name);
printf("\t是否继续输入(y/n)?");
select=getche();
if(select==’y’ || select==’Y’)
{
//群组
printf("\n\t群组(1.朋友 2.同事 3.家人 4.其他),请输入序号:");
scanf("%d",& (r-》group));
while( r-》group《1 ||r-》group》4)
{
printf("\n\t输入错误!请重新输入群组序号(1.朋友 2.同事 3.家人 4.其他):");
scanf("%d",& (r-》group));
}
printf("\t住宅电话:");
scanf("%s",r-》home );
printf("\t手机:");
scanf("%s",r-》mobile );
printf("\tEmail:");
scanf("%s",r-》email );
printf("\t地址:");
scanf("%s",r-》add);
printf("\t备注:");
scanf("%s",r-》memo );
}
else if(menu==21) //新增联系人(menu=21)时,用户未输入,设置缺省值
{
r-》group=4; //缺省群组:其他
strcpy(r-》home , "");
strcpy(r-》mobile , "");
strcpy(r-》email , "");
strcpy(r-》add , "");
strcpy(r-》memo , "");
}
}
int chongcha(char *name,Tel tel,char *original)//查重。在新增或联系人前,检查是否有重名的情况。
{
int i,j; //i:数组下标 j: 除姓名为空串以外的实际人数
int dup=0; //重名标志:1 重名,0没有重名
if(strcmp(name,original)!=0)//name不是原来的名字,
for(i=0,j=0; j《Len; ) //遍历所有联系人
{
//找到一个有效的联系人,排出逻辑删除者(姓名为空串)
while( strcmp(tel.name,"") == 0 )
i++;
if( strcmp(name,tel.name)==0 ) //name不是原来的名字,但与通信录中名字重复
{
dup=1;
printf("\n\t重名!请重新输入:");
break;
}
i++;
j++;
}
return dup;
}
int Select() //选择联系人序号,避免出错
{
int i=0;
int c; //c: scanf()输入的返回值,输入成功,返回1;否则,返回0
printf("\n\t请按序号选择联系人:");
c=scanf("%d",&i);
while(i《1 || i》Len)
{
printf("\n\t输入错误!请按序号选择联系人:");
if(c==0) fflush(stdin); //输入不成功,清空与输入流stdin有关的输入缓冲区的内容,stdio.h
c=scanf("%d",&i);
}
return i-1;
}
//排序部分
void pingypaix(Tel tel,Index *lianxren) //按音序排序。
{
int i,j; //i:数组下标 j: 除姓名为空串以外的实际人数
if( Len==0 )
return ;
//初始化排序指针数组
lianxren-》len=0;
for(i=0,j=0; j《Len; )
{
//找到一个有效的联系人,排出逻辑删除者(姓名为空串)
while( strcmp(tel.name,"") == 0 )
i++;
lianxren-》tel;
j++;
i++;
lianxren-》len++;
}
//选择排序
xuanzpaixi( lianxren );
}
void xuanzpaixi(Index *p) //对指针数组选择排序
{
int i,j,n=p-》len;
int min;
Tel *temp;
if( n==0 ) return ;//没有联系人,不需要排序
//选择排序
for(i=0; i《n-1; i++)
{
//找最小元素
min=i;
for(j=i+1; j《n; j++)
{
if(strcmp( p-》tel-》name )《0)
min=j;
}
//交换 最小元素min,当前无序序列第一个元素i
if(min!=i)
{
temp=p-》tel;
p-》tel;
p-》tel=temp;
}
}//end of for i
}
把以上模块 分别按模块名建立文件 在编译器上调试就可以用了……
数据结构双向链表设计学生通讯录管理系统
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
#include 《conio.h》
void init_dlink(void);
void read_file(void);
void write_file(void);
void insert_item(void);
void search_item(void);
void sort_item(void);
void delete_item(void);
void print_item(void);
void modify_item(void);
void anykey(void);
typedef struct node *link;
struct node {
char stu_id;
char name;
char ***;
char _class;
char major;
char address;
link prev, next;
};
link ptr, head, tail, current;
bool fFlag;
int main(void)
{
char option1, option2;
system("cls");
init_dlink();
read_file();
while(1)
{
system("cls");
printf("**********************************\n");
printf(" 1.insert item\n");
printf(" 2.delete item\n");
printf(" 3.search item\n");
printf(" 4.print item\n");
printf(" 5.modify item\n");
printf(" 6.quit\n");
printf("**********************************\n");
printf(" Please enter your choice (1-5)...");
option1 = getche();
switch(option1)
{
case ’1’:
fFlag = 1;
insert_item();
break;
case ’2’:
delete_item();
break;
case ’3’:
search_item();
break;
case ’4’:
print_item();
break;
case ’5’:
modify_item();
break;
case ’6’:
if (fFlag)
{
printf("\n");
printf("Save changes? (Y or N)");
option2 = getche();
if(option2 == ’Y’)
{
write_file();
exit(0);
}
if(option2 = ’N’)
exit(0);
}
else
{
write_file();
exit(0);
}
}
}
}
void init_dlink(void)
{
ptr = (link)malloc(sizeof *ptr);
strcpy(ptr-》stu_id, "0");
strcpy(ptr-》name, "0");
strcpy(ptr-》***, "0");
strcpy(ptr-》_class, "0");
strcpy(ptr-》major, "0");
strcpy(ptr-》address, "0");
ptr-》 prev = ptr;
ptr-》next = ptr;
head = ptr;
tail = ptr;
}
void read_file(void)
{
FILE *fptr;
if((fptr = fopen("dlist.dat", "r")) == NULL)
{
printf(" Data file not exist!\n");
printf(" Press any key to edit first record...\n");
getch();
insert_item();
}
else
{
ptr = (link)malloc(sizeof *ptr);
while(fscanf(fptr, "%s %s %s %s %s %s", ptr-》stu_id, ptr-》name, ptr-》***, ptr-》_class, ptr-》major, ptr-》address) != EOF)
{
if(strcmp(ptr-》stu_id, " ") != 0)
{
sort_item();
ptr = (link)malloc(sizeof *ptr);
}
else
****(ptr);
}
fclose(fptr);
}
}
void write_file(void)
{
FILE *fptr;
fptr = fopen("dlist.dat", "w");
current = head-》next;
while(current != head)
{
fprintf(fptr, "%s %s %s %s %s %s\n", current-》stu_id, current-》name, current-》***, current-》_class, current-》major, current-》address);
current = current-》next;
}
fclose(fptr);
}
void insert_item(void)
{
system("cls");
ptr = (link)malloc(sizeof *ptr);
printf(" Student ID:");
gets(ptr-》stu_id);
printf(" Name:");
gets(ptr-》name);
printf(" Sex:");
gets(ptr-》***);
printf(" _class:");
gets(ptr-》_class);
printf(" Major:");
gets(ptr-》major);
printf(" Address:");
gets(ptr-》address);
sort_item();
}
void sort_item(void)
{
current = head-》next;
while(current != head)
{
if(strcmp(ptr-》stu_id, current-》stu_id) 《 0)
{
ptr-》next = current;
ptr-》prev = current-》prev;
current-》prev-》next = ptr;
current-》prev = ptr;
break;
}
current = current-》next;
}
if(head-》next == head || current == head)
{
ptr-》next = head;
ptr-》prev = head-》prev;
head-》prev-》next = ptr;
head-》prev = ptr;
tail = ptr;
}
}
void delete_item(void)
{
char del_id;
int count = 0;
link clear;
system("cls");
if(head-》next == head)
printf(" No student record!\n");
else
{
printf(" Delete student ID:");
gets(del_id);
current = head-》next;
while(current-》next != head)
{
if(strcmp(del_id, current-》stu_id)==0)
{
count++;
clear = current;
current-》prev-》next = current-》next;
current-》next-》prev = current-》prev;
current = current-》next;
****(clear);
}
current = current-》next;
}
if(strcmp(del_id, current-》stu_id) == 0)
{
count++;
clear = current;
current-》prev-》next = head;
head-》prev = current-》prev;
tail = current-》prev;
****(clear);
}
if(count 》 0)
printf(" %s student record(s) deleted\n", del_id);
else
printf(" Student %s not found\n", del_id);
}
anykey();
}
void search_item(void)
{
char search_id;
system("cls");
if(head-》next == head)
printf(" No student record\n");
else
{
printf(" Search student ID:");
gets(search_id);
current = head-》next;
while((current != head) && (strcmp(search_id, current-》stu_id)!=0))
current = current-》next;
if (current != head)
{
printf("--------------------------------------\n");
printf(" Student ID: %s\n", current-》stu_id);
printf(" Student name: %s\n", current-》name);
printf(" Student ***: %s\n", current-》***);
printf(" Student _class: %s\n", current-》_class);
printf(" Student major: %s\n", current-》major);
printf(" Student address: %s\n", current-》address);
printf("--------------------------------------\n");
}
else
printf(" Student %s not found\n", search_id);
}
anykey();
}
void modify_item(void)
{
int count = 0;
char modify_id;
system("cls");
if(head-》next == head)
printf(" No student record\n");
else
{
printf(" Modify student ID:");
gets(modify_id);
current = head-》next;
while(current != head)
{
if(strcmp(modify_id, current-》stu_id) == 0)
{
printf("******************************\n");
printf(" Student ID: %s\n", current-》stu_id);
printf(" Student name: %s\n", current-》name);
printf(" Student ***: %s\n", current-》***);
printf(" Student _class: %s\n", current-》_class);
printf(" Student major: %s\n", current-》major);
printf(" Student address: %s\n", current-》address);
printf(" Please enter new _class:");
gets(current-》_class);
printf(" Please enter new major:");
gets(current-》major);
printf(" Please enter new address:");
gets(current-》address);
count++;
}
current = current-》next;
}
if(count 》 0)
printf(" %d student record(s) modified\n", count);
else
printf(" Student %s not found\n", modify_id);
}
anykey();
}
void print_item(void)
{
int count = 0;
system("cls");
if(head-》next == head)
printf(" No student record\n");
else
{
printf(" STU_ID NAME SEX _CLASS MAJOR ADDRESS\n");
printf("-------------------------------------------------------------------------------\n");
current = head-》next;
while(current != head)
{
printf(" %-7s %-12s %-6s %-12s %-12s %-s\n", current-》stu_id, current-》name, current-》***, current-》_class, current-》major, current-》address);
count++;
current = current-》next;
if(count % 20 == 0)
getch();
}
printf("-------------------------------------------------------------------------------\n");
printf(" Total %d record(s) found\n", count);
}
anykey();
}
void anykey(void)
{
printf(" Press any key to continue...");
getch();
}
数据结构课程设计题目求解编写一个通讯录管理系统
#include《stdio.h》
#include《string.h》
#include《stdlib.h》
#include《conio.h》
struct contacks
{ char name;
char street;
char city;
int eip;
char state;
}con;
int k=0;
void enter();
void display();
void lookandchange();
void del();
void save();
void main()
{
int a;
do
{
printf("\n\n ******************************************************************\n");
printf(" *"); printf("\t\twelcome enter the contacks system"); printf("\t*");
printf("\n ******************************************************************\n");
printf(" *"); printf("\t 1.Access information"); printf("\t\t\t\t\t*\n");
printf(" *"); printf("\t 2.display information"); printf("\t\t\t\t*\n");
printf(" *"); printf("\t 3.lookandchange information"); printf("\t\t\t\t*\n");
printf(" *"); printf("\t 4.Delete information"); printf("\t\t\t\t\t*\n");
printf(" *"); printf("\t 5.Save the information"); printf("\t\t\t\t*\n");
printf(" *"); printf("\t 6. exit "); printf("\t\t\t\t\t*\n");
printf(" ******************************************************************\n");
printf(" Enter you choice : ");
scanf("%d",&a);
switch(a)
{
case 1:printf("\n");enter();break;
case 2:printf("\n");display();break;
case 3:printf("\n");lookandchange();break;
case 4:printf("\n");del();break;
case 5:printf("\n");save();break;
case 6:printf("\n");exit(0);break;
default:printf("\nThe choice is between 1 to 6.\n");
}
}while(a!=0);
}
void enter()
{
char ch;
printf("\nenter student information:\n");
do
{ printf("\nname: ");
scanf("%s",con.name);
printf("street: ");
scanf("%s",con.street);
printf("\ncity: ");
scanf("%s",con.city);
printf("\neip: ");
scanf("%d",&con.eip);
printf("\nstate: ");
scanf("%s",con.state);
k++;
printf("\nif want continue input student information(y/n): ");
scanf("%s",ch);
}while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0);
display();
}
void display()
{ int i;
printf(" the information is:\n");
for(i=0;i《k;i++)
{ printf("%10s %20s %10s %6d %10s ",con.state);
printf("\n"); }
}
void lookandchange()
{
int i;
char a;
printf("\nenter you want look name:");
scanf("%s",a);
for(i=0;i《k;i++)
if(strcmp(con.state);
printf("\nenter you want change name:");
scanf("%s",a);
for(i=0;i《k;i++)
{
if(strcmp(con.name,a)==0)
{ printf("\nyou sure want change student name(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nname:"); scanf("%s",con.name);}
printf("\nyou sure want change street(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nstreet"); scanf("%s",con.street);}
printf("\nyou sure want change city(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\ncity"); scanf("%s",con.city);}
printf("\nyou sure want change eip(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\neip"); scanf("%d",&con.eip);}
printf("\nyou sure want change state(y/n): ");
scanf("%s",ch);
if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) { printf("\nstate"); scanf("%s",con.state);}
}
}
display();
}
void del()
{
int i,j;
char c;
printf("\nenter you want delete name :\n");
printf("name:");
scanf("%s",&c);
for(i=0;i《k;i++)
if(strcmp(c,con.name)==0) break;
for(j=i;j《=2;j++)
con;
printf("\t\t\tyou had delete %s\n",c);
k--;
display();
}
void save()
{ FILE *fp; int i;
if((fp=fopen("xinxi.txt","w"))==NULL)
{ printf("cannot write the file.\n");
exit(0);}
for(i=0;strlen(con.name)!=0;i++)
fprintf(fp,"%s %s %s %d %s\n",con.state);
fclose(fp);
}
C语言程序设计——课程设计——通讯录管理系统
/*10.3.2源程序*/
/******头文件(.h)***********/
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*标准库函数*/
#include "string.h"/*字符串函数*/
#include "ctype.h" /*字符操作函数*/
#define M 50 /*定义常数表示记录数*/
typedef struct /*定义数据结构*/
{
char name; /*姓名*/
char units; /*单位*/
char tele; /*电话*/
}ADDRESS;
/******以下是函数原型*******/
int enter(ADDRESS t); /*输入记录*/
void list(ADDRESS t,int n); /*显示记录*/
void search(ADDRESS t,int n); /*按姓名查找显示记录*/
int delete(ADDRESS t,int n); /*删除记录*/
int add(ADDRESS t,int n); /*插入记录*/
void save(ADDRESS t,int n); /*记录保存为文件*/
int load(ADDRESS t); /*从文件中读记录*/
void display(ADDRESS t); /*按序号查找显示记录*/
void sort(ADDRESS t,int n); /*按姓名排序*/
void qseek(ADDRESS t,int n); /*快速查找记录*/
void copy(); /*文件复制*/
void print(ADDRESS temp); /*显示单条记录*/
int find(ADDRESS t,int n,char *s) ; /*查找函数*/
int menu_select(); /*主菜单函数*/
/******主函数开始*******/
main()
{
int i;
ADDRESS adr; /*定义结构体数组*/
int length; /*保存记录长度*/
clrscr(); /*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{
case 0:length=enter(adr);break;/*输入记录*/
case 1:list(adr,length);break; /*显示全部记录*/
case 2:search(adr,length);break; /*查找记录*/
case 3:length=delete(adr,length);break; /*删除记录*/
case 4:length=add(adr,length); break; /*插入记录*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*读文件*/
case 7:display(adr);break; /*按序号显示记录*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找记录*/
case 10:copy();break; /*复制文件*/
case 11:exit(0); /*如返回值为11则程序结束*/
}
}
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
menu_select()
{
char s;
int c;
gotoxy(1,25);/*将光标定为在第25行,第1列*/
printf("press any key enter menu......\n");/*提示压任意键继续*/
getch(); /*读入任意字符*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf(" 0. Enter record\n");
printf(" 1. List the file\n");
printf(" 2. Search record on name\n");
printf(" 3. Delete a record\n");
printf(" 4. add record \n");
printf(" 5. Save the file\n");
printf(" 6. Load the file\n");
printf(" 7. display record on order\n");
printf(" 8. sort to make new file\n");
printf(" 9. Quick seek record\n");
printf(" 10. copy the file to new file\n");
printf(" 11. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0~11):"); /*提示输入选项*/
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整型数*/
}while(c《0||c》11); /*选择项不在0~11之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
int enter(ADDRESS t)
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*输入记录数*/
printf("please input record \n"); /*提示输入记录*/
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i《n;i++)
{
scanf("%s%s%s",t.tele); /*输入记录*/
printf("----------------------------------------------\n");
}
return n; /*返回记录条数*/
}
/*显示记录,参数为记录数组和记录条数*/
void list(ADDRESS t,int n)
{
int i;
clrscr();
printf("\n\n*******************ADDRESS******************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i《n;i++)
printf("%-20s%-30s%-10s\n",t.tele);
if((i+1)%10==0) /*判断输出是否达到10条记录*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*压任意键继续*/
}
printf("************************end*******************\n");
}
/*查找记录*/
void search(ADDRESS t,int n)
{
char s; /*保存待查找姓名字符串*/
int i; /*保存查找到结点的序号*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*输入待查找姓名*/
i=find(t,n,s); /*调用find函数,得到一个整数*/
if(i》n-1) /*如果整数i值大于n-1,说明没找到*/
printf("not found\n");
else
print(t); /*找到,调用显示函数显示记录*/
}
/*显示指定的一条记录*/
void print(ADDRESS temp)
{
clrscr();
printf("\n\n********************************************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);
printf("**********************end***********************\n");
}
/*查找函数,参数为记录数组和记录条数以及姓名s */
int find(ADDRESS t,int n,char *s)
{
int i;
for(i=0;i《n;i++)/*从第一条记录开始,直到最后一条*/
{
if(strcmp(s,t.name)==0) /*记录中的姓名和待比较的姓名是否相等*/
return i; /*相等,则返回该记录的下标号,程序提前结结束*/
}
return i; /*返回i值*/
}
/*删除函数,参数为记录数组和记录条数*/
int delete(ADDRESS t,int n)
{
char s; /*要删除记录的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",s);/*输入姓名*/
i=find(t,n,s); /*调用find函数*/
if(i》n-1) /*如果i》n-1超过了数组的长度*/
printf("no found not deleted\n"); /*显示没找到要删除的记录*/
else
{
print(t); /*调用输出函数显示该条记录信息*/
printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/
scanf("%d",&ch); /*输入一个整数0或1*/
if(ch==1) /*如果确认删除整数为1*/
{
for(j=i+1;j《n;j++) /*删除该记录,实际后续记录前移*/
{
strcpy(t.name); /*将后一条记录的姓名拷贝到前一条*/
strcpy(t.units); /*将后一条记录的单位拷贝到前一条*/
strcpy(t.tele); /*将后一条记录的电话拷贝到前一条*/
}
n--; /*记录数减1*/
}
}
return n; /*返回记录数*/
}
/*插入记录函数,参数为结构体数组和记录数*/
int add(ADDRESS t,int n)/*插入函数,参数为结构体数组和记录数*/
{
ADDRESS temp; /*新插入记录信息*/
int i,j;
char s; /*确定插入在哪个记录之前*/
printf("please input record\n");
printf("************************************************\n");
printf("name unit telephone\n");
printf("--------------------------------------------------\n");
scanf("%s%s%s",temp.name,temp.units,temp.tele); /*输入插入信息*/
printf("------------------------------------------------\n");
printf("please input locate name \n");
scanf("%s",s); /*输入插入位置的姓名*/
i=find(t,n,s); /*调用find,确定插入位置*/
for(j=n-1;j》=i;j--) /*从最后一个结点开始向后移动一条*/
{
strcpy(t.name); /*当前记录的姓名拷贝到后一条*/
strcpy(t.units); /*当前记录的单位拷贝到后一条*/
strcpy(t.tele); /*当前记录的电话拷贝到后一条*/
}
strcpy(t.name,temp.name); /*将新插入记录的姓名拷贝到第i个位置*/
strcpy(t.units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/
strcpy(t.tele,temp.tele); /*将新插入记录的电话拷贝到第i个位置*/
n++; /*记录数加1*/
return n; /*返回记录数*/
}
/*保存函数,参数为结构体数组和记录数*/
void save(ADDRESS t,int n)
{
int i;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/
{
printf("can not open file\n");/*没打开*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*输出提示信息*/
fprintf(fp,"%d",n); /*将记录数写入文件*/
fprintf(fp,"\r\n"); /*将换行符号写入文件*/
for(i=0;i《n;i++)
{
fprintf(fp,"%-20s%-30s%-10s",t.tele);/*格式写入记录*/
fprintf(fp,"\r\n"); /*将换行符号写入文件*/
}
fclose(fp);/*关闭文件*/
printf("****save success***\n"); /*显示保存成功*/
}
/*读入函数,参数为结构体数组*/
int load(ADDRESS t)
{
int i,n;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/
{
printf("can not open file\n"); /*不能打开*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*读入记录数*/
for(i=0;i《n;i++)
fscanf(fp,"%20s%30s%10s",t.tele); /*按格式读入记录*/
fclose(fp); /*关闭文件*/
printf("You have success read data from file!!!\n"); /*显示保存成功*/
return n; /*返回记录数*/
}
/*按序号显示记录函数*/
void display(ADDRESS t)
{
int id,n;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/
{
printf("can not open file\n"); /*不能打开文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*显示信息*/
scanf("%d",&id); /*输入序号*/
fscanf(fp,"%d",&n); /*从文件读入记录数*/
if(id》=0&&id《n) /*判断序号是否在记录范围内*/
{
fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/
print(t); /*调用输出函数显示该记录*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序号不合理显示信息*/
fclose(fp); /*关闭文件*/
}
/*排序函数,参数为结构体数组和记录数*/
void sort(ADDRESS t,int n)
{
int i,j,flag;
ADDRESS temp; /*临时变量做交换数据用*/
for(i=0;i《n;i++)
{
flag=0; /*设标志判断是否发生过交换*/
for(j=0;j《n-1;j++)
if((strcmp(t.name))》0) /*比较大小*/
{
flag=1;
strcpy(temp.name,t.name); /*交换记录*/
strcpy(temp.units,t.units);
strcpy(temp.tele,t.tele);
strcpy(t.name);
strcpy(t.units);
strcpy(t.tele);
strcpy(t.name,temp.name);
strcpy(t.units,temp.units);
strcpy(t.tele,temp.tele);
}
if(flag==0)break; /*如果标志为0,说明没有发生过交换循环结束*/
}
printf("sort sucess!!!\n"); /*显示排序成功*/
}
/*快速查找,参数为结构体数组和记录数*/
void qseek(ADDRESS t,int n)
{
char s;
int l,r,m;
printf("\nPlease sort before qseek!\n"); /*提示确认在查找之前,记录是否已排序*/
printf("please enter name for qseek\n"); /*提示输入*/
scanf("%s",s); /*输入待查找的姓名*/
l=0;r=n-1; /*设置左边界与右边界的初值*/
while(l《=r) /*当左边界《=右边界时*/
{
m=(l+r)/2; /*计算中间位置*/
if(strcmp(t.name,s)==0) /*与中间结点姓名字段做比较判是否相等*/
{
print(t); /*如果相等,则调用print函数显示记录信息*/
return ; /*返回*/
}
if(strcmp(t.name,s)《0) /*如果中间结点小*/
l=m+1; /*修改左边界*/
else
r=m-1; /*否则,中间结点大,修改右边界*/
}
if(l》r) /*如果左边界大于右边界时*/
printf("not found\n"); /*显示没找到*/
}
/*复制文件*/
void copy()
{
char outfile; /*目标文件名*/
int i,n;
ADDRESS temp; /*定义临时变量*/
FILE *sfp,*tfp; /*定义指向文件的指针*/
clrscr();/*清屏*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打开记录文件*/
{
printf("can not open file\n"); /*显示不能打开文件信息*/
exit(1); /*退出*/
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*输入目标文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/
{
printf("can not open file\n"); /*显示不能打开文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*读出文件记录数*/
fprintf(tfp,"%d",n);/*写入目标文件数*/
fprintf(tfp,"\r\n"); /*写入换行符*/
for(i=0;i《n;i++)
{
fscanf(sfp,"%20s%30s%10s\n",temp.units,
temp.tele); /*读入记录*/
fprintf(tfp,"%-20s%-30s%-10s\n",temp.name,
temp.tele); /*写入记录*/
fprintf(tfp,"\r\n"); /*写入换行符*/
}
fclose(sfp); /*关闭源文件*/
fclose(tfp); /*关闭目标文件*/
printf("you have success copy file!!!\n"); /*显示复制成功*/
}
通讯录管理系统
我这里有一个,你看看吧,满意的给分哦(在visual c++6.0上运行)
#include《stdlib.h》
#include《string.h》 /*使用字符串函数*/
#include《conio.h》 /*使用通过控制台进行数据输入和数据输出的函数*/
#include《stdio.h》
#include《dos.h》 /*使用DOS函数*/
int i; /*定义一个全局变量i*/
struct addr /*定义通讯地址结构体*/
{ char post_num; /*邮编*/
char addr; /*家庭地址*/
};
struct birth /*定义出生年月结构体*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct record1 /*定义电子通讯录结构体*/
{ int number; /*序号*/
char name; /*姓名*/
char ***; /*性别*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/
char telephone; /*联系电话*/
}records;
FILE *fp; /*定义指向file类型结构体的指针变量*/
void Data_Load() /*定义载入数据函数*/
{ int j;
long k;
fp=fopen("record.txt","r+t"); /*打开文件record.txt,进行读写*/
if(fp!=NULL) /*如果文件不为空*/
{ for(i=1;i《50;i++)
{ j=fgetc(fp); /*从"records.txt"文件读入整型数字*/
if(j==EOF) /*判断是否到了文件尾*/
return; /*如果到了结尾,返回*/
k=i-1;
fseek(fp,k*sizeof(struct record1),SEEK_SET); /*将位置指针移到record1结构体所含字节
的第k倍个字节处*/
fread(&records,sizeof(struct record1),1,fp); /*读取一条记录*/
}
}
else
{ fp=fopen("record.txt","w"); /*打开文件record.txt,只写*/
i=1;
}
}
void Data_Show(int j) /*定义显示数据函数*/
{
printf("\n\n\tNo:%3d\n",records.number); /*序号*/
printf("\n\tname:%2s\n",records.name); /*姓名*/
printf("\n\tbirthday (y/m/d):%4d%2d%2d", records.birth.month,
records.birth.day); /*打印第j个成员的出生年月日*/
printf("\n\tpost code:%-10s",records.addr.post_num); /*邮编*/
printf("\n\taddress:%-40s",records.addr.addr); /*家庭地址*/
printf("\n\tphone%-13s",records.telephone); /*联系电话*/
}
void Data_Input(int j) /*定义添加数据函数*/
{
fflush(stdin); /*清空输入缓冲区*/
records.number=j;
printf("\n\n\n\tinputNo %d ",j);
printf("\n\tname:"); /*输入姓名*/
scanf("%s",records.name);
fflush(stdin); /*清空输入缓冲区*/
printf("\t***(m/f):"); /*输入性别*/
scanf("%c",&records.***);
printf("\t---birthday---"); /*输入出生年月*/
printf("\n\tyear:");
scanf("%d",&records.birth.year);
printf("\tmonth:");
scanf("%d",&records.birth.month);
printf("\tday:");
scanf("%d",&records.birth.day);
printf("\tpost code:"); /*输入邮编*/
scanf("%s",records.addr.post_num);
printf("\taddress:"); /*输入家庭地址*/
scanf("%s",records.addr.addr);
printf("\tphone:"); /*输**系电话*/
scanf("%s",records.telephone);
}
void Data_Save() /*定义保存函数*/
{
int j;
fp=fopen("record.txt","w"); /*打开文件record.txt,只写*/
for(j=1;j《=i;j++)
{ fwrite(&records,sizeof(struct record1),1,fp); /*将结构体变量records的确定个数字节输
入到record.txt文件中,个数为结构体friend1所含字节数*/
}
}
void main() /*主函数*/
{
int j,k;
char ch;
char search_name; /*定义字符串变量*/
Data_Load(); /*声明载入数据函数*/
i--;
do
{ printf("********************************* MENU ***************************************\n");
printf("------------------------! WELLCOME TO THE SYSTEM !------------------------------");
printf("\n*\tSelect Function: *");
printf("*\t1.Add New *");
printf("*\t2.View the data *");
printf("*\t3.Delete *");
printf("*\t4.Search *");
printf("*\t5.Insert *");
printf("*\t6.Save and quit *");
printf("*\t7.Quit *");
printf("\n******************************** MENU ****************************************\n");
printf("\tPlease choose the option you need:");
ch=getche(); /*输入字符*/
switch(ch)
{
case ’1’:
{ int p;
printf("\n\tPlease input the number of people you want to add:");
scanf("%d",&p);/*增加记录*/
printf("\tPlease press ENTER again");
while(getch()!=0x1b&&i《p)
{ i++;
Data_Input(i);
printf("Please press Enter again to continue\n");
}
if(i==p)printf("\n\tThe data is full\n");
} /*记录完后显示通讯录已满*/
break;
case ’2’: j=1; /*打印所有记录*/
while(getch()!=0x1b&&j《=i) Data_Show(j++); /*声明打印数据函数*/
if(j》i) printf("\n\tThe system is end\n"); /*显示记录末尾*/
break;
case ’3’: /*删除通讯录中的记录*/
if(i《1)
{ printf("\n\tno record\n"); /*显示无记录*/
break;
}
printf("\n\tplease input the number you want to delect:");
scanf("%d",&k);
printf("\tsucceed!\n");
for(j=k;j《i;j++) /*将删除位置后的元素顺序前移,即后一数据复制到前一位置,循环操作*/
{ strcpy(records.name);
records.***;
records.birth.year;
records.birth.month;
records.birth.day;
strcpy(records.addr.post_num);
strcpy(records.addr.addr);
strcpy(records.telephone);
}
i--; /*元素总数减1*/
break;
case ’4’: /*通讯录搜索功能*/
printf("\n\tPlease input the name:"); /*输入名字*/
scanf("%s", search_name); /*获得名字到指针型字符串变量*/
for(j=1;j《=i;j++)
{
if(strcmp(search_name,records.name)==0) /*比较字符串,即查看是否与记录中名字
相同*/
{ Data_Show(j);
printf("\n"); /*搜索成功,打印记录结束循环*/
break;
}
}
if(j》i) /*搜索失败*/
printf("\n\tNo Record "); /*显示无此记录*/
break;
case ’5’:
printf("\n\tInsert No:"); /*录入插入位置*/
scanf("%d",&k);
for(j=k+1;j《i;j++) /*将插入位置后的元素顺序后移,即将其复制到后一位置,循环操作*/
{ strcpy(records.name);
records.***;
records.birth.year;
records.birth.month;
records.birth.day;
strcpy(records.addr.post_num);
strcpy(records.addr.addr);
strcpy(records.telephone);
}
Data_Input(k); /*声明增加数据函数*/
i++;/*将记录数目加一*/
break;
case ’6’: Data_Save();
printf("\n"); /*声明保存函数*/
exit(0); break; /*保存后退出*/
case ’7’: printf("\n\tsave or not?:(y/n)");
ch=getch(); /*获得输入字符*/
if(ch==’y’) Data_Save();
fclose(fp); /*关闭record.txt文件*/
exit(0); /*退出程序*/
default: printf("Please choose1-4\n"); /*输入的如果不是数字1-4,让其重新输入*/
}
}
while(1); /*每次都从第一个功能开始,循环操作*/
}
请采纳答案,支持我一下。
用C语言编写一个QQ通讯录管理系统设计
课程设计课程设计名称:数据结构课程设计专业班级:计科××××学生姓名:×××学号:××××××指导教师:课程设计时间:计算机应用技术专业课程设计任务书学生姓名×××专业班级计科××学号××××题目××××××××××课题性质A课题来源D指导教师同组姓名无主要内容学习掌握并熟练运用C语言进行程序设计;针对具体应用问题,选择、设计和实现合适的抽象数据类型;进行简单的需求分析,给出设计方案。任务要求综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用软件奠定基础,达到软件工程的综合性基础训练的目的。完成需求分析报告,报告中对关键部分给出图表说明。要求格式规范,工作量饱满。参考文献《数据结构(C语言版)》严蔚敏清华大学出版社《C语言程序设计》(第三版)谭浩强清华大学出版社审查意见指导教师签字:教研室主任签字:年月日1需求分析手机通讯录系统,以联系人为节点建立伪队列(有头尾指针、且可从表中间进行操作),要实现一下基本功能。增加联系人删除联系人修改联系人清空通讯录查找联系人按分组显示联系人显示全部联系人退出系统2概要设计(1)程序总体框架如图1所示:图1程序框架图(2)序中各函数程简单说明见如表1函数说明所示:返回值函数名参数表函数说明提供客户intmainvoid主函数是voidinitAddressBookLinkQueue&Q初始化通讯录否boolenAddressBookLinkQueue&Q增加联系人是boolupdateLinkQueue&Q修改联系人是booldelPersonLinkQueue&Q删除联系人是boolfindByNameLinkQueue&Q查找联系人是boolfindByGroupLinkQueue&Q按组显示是voiddisAllLinkQueue&Q显示全部联系人是boolclearAddressBookLinkQueue&Q清空通讯录是表1函数说明(2)对程序中的各个函数功能的描述① 主函数main:系统开始、结束界面的显示、各个功能函数的调用、转换以及参数的传递、定义通讯头结点并传递给各个功能函数② 初始化通讯录函数initAddressBook:初始化主函数传入的头结点,即初始化通讯录,此系统采用伪队列,有头、尾指针,可从中间进行删除操作③ 增加联系人函数enAddressBook增加联系人到通讯录的尾部,返回增加是否成功。④ 修改联系人函数按照用户提供的联系人姓名修改联系人所有信息,返回修改是否成功。⑤ 删除联系人按照用户指定的联系人姓名删除相应联系人信息,返回删除是否成功。⑥ 查找联系人按照用户提供的联系人姓名查找第一个合法姓名对应的信息,查找成功则显示信息,失败则提示无此联系人,返回是否查找到。⑦ 按组显示函数按照用户提供的分组名称,查找组中联系人,若存在则全部输出,若不存在则提示无此分组,返回是否超找到合法联系人。⑧ 显示全部联系人函数显示当前通讯录中所有联系人的信息,若为空通讯录,则显示无联系人。⑨ 清空通讯录删除所有联系人信息,返回是否成功!⑩ 通讯录人数函数判断通讯录当前联系人数量,返回之,此函数主要是为清空通讯录函数所调用,故不提供给用户。计3运行环境1)软件环境操作系统:Windows72)硬件环境处理器:IntelPentium166MX或更高内存:32MB以上硬盘空间:1GB以上显卡:SVGA显示适配4开发工具和编程语言MicrosoftvisualC++C语言5详细设//主函数intmain(){LinkQueueQ;initAddressBook(Q);intflag=0;while(flag!=8){printf("※※※※※主※※※※※菜※※※※※单※※※※※\n");printf("※1、增加联系人2、删除联系人※\n");printf("※3、修改联系人4、清空通讯录※\n");printf("※5、查找联系人6、按组显示※\n");printf("※7、显示全部联系人8、退出※\n");printf("※※※※※※※※※※※※※※※※※※※※※※※\n");printf("请输入编号(1-8):\n");scanf("%d",&flag);if(flag8){printf("输入错误请重新输入!\n");continue;}else{switch(flag){case1:if(enAddressBook(Q))printf("增加联系人成功!\n");elseprintf("增加联系人失败!\n");break;case2:if(delPerson(Q))printf("删除联系人成功!\n");elseprintf("联系人删除失败!\n");break;case3:if(update(Q))printf("修改联系人成功!\n");elseprintf("修改联系人失败!\n");break;case4:if(clearAddressBook(Q))printf("通讯录已清空!\n");elseprintf("通讯录清空失败!\n");break;case5:findByName(Q);break;case6:findByGroup(Q);break;case7:disAll(Q);break;case8:system("cls");break;}}}printf("※※※※※感谢您使用本系统!※※※※※※\n");return0;}//初始化通讯录voidinitAddressBook(LinkQueue&Q){Q.front=Q.rear=(QNode*)malloc(sizeof(QNode));if(!Q.front)exit(1);elseQ.front-》next=NULL;}//清空通讯录boolclearAddressBook(LinkQueue&Q){system("cls");while(addressBookLength(Q)!=0){QNode*p;p=Q.front-》next;Q.front-》next=p-》next;if(p==Q.rear)Q.rear=Q.front;****(p);}returntrue;}//通讯录当前人数intaddressBookLength(LinkQueue&Q){inti=0;QNode*p;p=Q.front;if(Q.front==Q.rear)i=0;else{while(p!=Q.rear){p=p-》next;i++;}}returni;}//删除联系人booldelPerson(LinkQueue&Q){char_nameKennethA.ReekC和指针,人民邮电出版社心得体会通过这次数据结构实践作业,我更深刻的体会到了C语言的语句简洁性、紧凑性,与数据结构思想对于一个程序编码顺利进行的重要性。语言是程序的骨肉,而数据结构和算法即使程序的灵魂,要想成功的编写程序必须选好合适的数据结构,比如这次课程设计中,最开始我准备用普通的线性表进行设计,后来发现那样很不方便,后来改为用“伪队列”之后就方便了许多。另外,我觉得比较重要的一点是在编复杂程序时要有宏观思想,想从整体把握设计好各个板块的调用关系,最好先做出一个流程图,再按照这个总体设想进一步具体、细化!这样才不会在需要调用其它函数时手忙脚乱!此外,进行如上所述的操作前提都是以扎实的语言基础做为前提的,在最开始的代码阶段,我曾被指针很深的困扰,后来对此一节找了些资料进行“补课”,自己也进行的深入的理解,后来才逐渐顺利起来!信息科学与工程学院课程设计成绩评价表课程名称:数据结构课程设计设计题目:×××××专业:计科班级:×××姓名:×××学号:××××××序号评审项目分数满分标准说明1内容思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论严谨,设计有应用价值。任务饱满,做了大量的工作。2创新内容新颖,题目能反映新技术,对前人工作有改进或突破,或有独特见解3完整性、实用性整体构思合理,理论依据充分,设计完整,实用性强4数据准确、可靠数据准确,公式推导正确5规范性设计格式、绘图、图纸、实验数据、标准的运用等符合有关标准和规定6纪律性能很好的遵守各项纪律,设计过程认真;7答辩准备工作充分,回答问题有理论依据,基本概念清楚。主要问题回答简明准确。在规定的时间内作完报告。总分综合意见指导教师年月日
更多文章:
60进制计算器(用多个74LS161芯片构成的计算器是什么计算器)
2026年3月30日 12:20
pywin32为什么很少教程(如何在Windows操作系统下安装Python和Networkx)
2026年3月30日 12:00
malloc函数的用法 java(malloc()到底如何申请内存空间)
2026年3月30日 11:40
springcloud各组件详解(18.SpringCloud有哪些组件)
2026年3月30日 10:40
数据结构课程设计通讯录管理系统(数据结构课程设计,通讯录管理系统)
2026年3月30日 10:20
ajax实时刷新页面(AJAX如何做到点击发送能刷新整个页面)
2026年3月30日 10:00
c语言贪吃蛇游戏代码程序能运行(跪求贪吃蛇C语言程序,要确保可以运行的,在300行左右,谢谢大神,)
2026年3月30日 09:40




