数据结构通讯录管理系统课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(大作业)报告
课程名称:数据结构
设计题目:通讯录信息管理系统
院系:信息技术学院
班级:12级计算机2班
设计者:*******
学号:201211010214
指导教师:SSSSSS
设计时间:2013.12.28—2013.12.31
昆明学院课程设计(大作业)任务书
一、数据结构及算法描述
1.数据类型定义
2.说明主要变量含义
3.说明数据输入的要求和格式----即输入数据的类型、值的范围及输入的形式
4.输出数据的类型、值的范围及输出的形式
5.确定存储结构
6.编写算法并实现
二、程序测试并运行通过
1.测试与分析、记录调试过程及结果
⑴添加通讯录记录
⑵显示通讯录记录
⑵按姓名方式查找
⑷按电话方式查找
⑸插入通讯录记录
⑹按姓名方式排序
⑺删除通讯录记录
⑻按记录保存文件
2.出现的问题、解决的方法、最终运行结果
三、源程序
\#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "stdlib.h"
#define null 0
struct record
{
char name[20];
char phone[20];
char adress[40];
char postcode[10];
char e_mail[30];
}student[500];
struct LinkList
{
struct record US;
struct LinkList *next;
}a;
struct LinkList *head=null;
int num=0;
FILE *fp;
int menu_select();
int adduser();
int list();
int search();
int display();
int add();
int listbyname();
int dele();
int save();
int exit();
void main()
{
system("cls");
for(;;)
{
switch(menu_select())
{
case 0:adduser();break;
case 1:list();break;
case 2:search();break;
case 3:display();break;
case 4:add();break;
case 5:listbyname();break;
case 6:dele();break;
case 7:save();break;
case 8:exit(0);
}
}
}
menu_select()
{
char s[80];
int a;
system("color 2f");
printf("*_* press any key enter menu! *_* \n");
getch();
system("cls");
printf("\t********************MENU***********************\n"); printf("\t* || 0. 添加通讯录记录|| *\n"); printf("\t* || 1. 显示通讯录记录|| *\n"); printf("\t* || 2. 按姓名方式查找|| *\n"); printf("\t* || 3. 按电话方式查找|| *\n"); printf("\t* || 4. 插入通讯录记录|| *\n"); printf("\t* || 5. 按姓名方式排序|| *\n"); printf("\t* || 6. 删除通讯录记录|| *\n"); printf("\t* || 7. 按记录保存文件|| *\n"); printf("\t* || 8. Quit || *\n");
printf("\t***********************************************\n");
do{
printf("\n Enter you choice(0~8):");
scanf("%s",s);
a=atoi(s);
}
while (a<0||a>8);
return a;
}
adduser()
{
printf("\n\t\t**************** 请输入用户信息****************\n"); printf("\n\t\t输入姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch()=='y')
adduser();
return(0);
}
list()
{
int i;
system("cls");
if(num!=0)
{
printf("\n\t\t*************** 以下为通讯录所有信息************"); for (i=0;i<num;i++)
{
printf("\n\t\t姓名:%s",student[i].name);
printf("\n\t\t电话:%s",student[i].phone);
printf("\n\t\t地址:%s",student[i].adress);
printf("\n\t\t邮编:%s",student[i].postcode);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\t\t");
if (i+1<num)
{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************"); }
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");
getch();
return(0);
}
search()
{
int mark=0;
int i;
int a=0;
printf("\n\t\t***************** 按姓名查找*******************"); char name[20];
printf("\n\t\t请输入姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if (strcmp(student[i].name,name)==0)
{
printf("\n\t\t************* 以下是您查找的用户信息***********");
printf("\n\t\t姓名:%s",student[i].name);
printf("\n\t\t电话:%s",student[i].phone);
printf("\n\t\t地址:%s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************");
mark++;
if ((i+1)<num)
{
printf("\n\t\t是否继续查找相同名字的用户信息:(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
else
return(0);
}
else
{
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
}
}
if(mark!=0)
{
printf("\n\t\t没有相同姓名的用户纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
else
{
printf("\n\t\t没有相同姓名的用户纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
}
display()
{
int mark=0;
int i;
int a=0;
printf("\n\t\t****************** 按电话查找******************"); char phone[10];
printf("\n\t\t请输入电话号码:");
scanf("%s",phone);
for(i=0;i<num;i++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\n\t\t************** 以下是您查找的用户信息**********"); printf("\n\t\t姓名:%s",student[i].name);
printf("\n\t\t电话:%s",student[i].phone);
printf("\n\t\t地址:%s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************"); printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return(0);
}
}
if (mark==0)
{
printf("\n\t\t没有改用户的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return(0);
}
return(0);
}
add()
{
int i;
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for (i=0;i<num;i++)
{
if (fwrite(&student[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t写入文件错误!\n");
}
printf("\n\t\t**************** 请输入用户信息****************\n"); printf("\n\t\t输入姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch()=='y')
adduser();
return(0);
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
return(0);
}
void deletebyphone()
{
int i,j;
int deletemark=0;
char phone[20];
printf("\n\t\t请输入要删除用户电话号码:");
scanf("%s",phone);
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].phone,phone)==NULL) {
printf("\n\t\t以下是您要删除的用户纪录:"); printf("\n\t\t姓名:%s",student[i].name); printf("\n\t\t电话:%s",student[i].phone); printf("\n\t\t地址:%s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
for (j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t没有该用户的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
}
}
void deletebyname()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("\n\t\t请输入要删除用户姓名:");
scanf("%s",name);
for (i=a;i<num;i++)
{
if (strcmp(student[i].name,name)==NULL)
{
printf("\n\t\t以下是您要删除的用户纪录:");
findmark++;
printf("\n\t\t________________________________"); printf("\n\t\t姓名:%s",student[i].name);
printf("\n\t\t电话:%s",student[i].phone);
printf("\n\t\t地址:%s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\t________________________________"); printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
for (j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
if((i+1)<num)
{
printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{
printf("\n\t\t没有该用户的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
return;
}
else if (findmark!=0)
{
printf("\n\t\t没有重名信息");
printf("\n\t\t没有该用户的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
return;
}
}
dele()
{
char choic;
printf("\n\t\t1-按电话号码删除2-按姓名删除");
printf("\n\t\t请选择:");
choic=getch();
switch (choic)
{
case '1':deletebyphone();break;
case '2':deletebyname();break;
}
return(0);
}
listbyname()
{
int i,j;
struct record tmp;
for (i=1;i<num;i++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(,student[j].name)<0&&j>=0)); student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否显示?(y/n)");
if (getch()=='y')
list();
return(0);
}
save()
{
int j;
FILE*fp;
fp=fopen("student.txt","w");
if (fp==NULL)
printf("can't open the file.");
if(num!=0)
{
for(j=0;j<num;j++)
{
fwrite(student,sizeof(student),1,fp);
}
}
printf("保存成功!");
fclose(fp);
return(0);
}
四、参考文献。