通讯录管理系统课程设计报告
设计课题题目
一、课程设计目的与要求 1.课程设计目的
(1) 综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件
等)来完成一个简单的信息管理程序的设计。
(2) 充分体现和体会函数在程序设计中的必要性和实用性,并反映主函数main()在
程序设计中的实现思路和方法。
2. 课程设计要求
制作一个通讯录系统。
(1)该程序具有查找、添加、修改、删除功能。
(2)通讯录包括:姓名、电话、街道、城市、省、邮编等。
二、总体设计
根据系统的要求,系统总体设计如图1所示。
三、详细设计 1、数据结构设计
#include /*标准输入输出函数库*/ #include /*标准函数库*/ #include /*字符串函数库*/ #define FILENAME "phone.dat"
struct date //定义一个结构体类型数组 { char name[10]; /*姓名*/ char phone[12]; /*电话*/ char email[20];
/*邮箱*/
char QQ[20]; /*QQ*/
} per[10];
int menu() //主菜单选择函数
2.函数说明
(1) 主函数
main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。(2)
四、程序清单
1、头文件
#include /*标准输入输出函数库*/ #include /*标准函数库*/ #include /*字符串函数库*/ #define FILENAME "phone.dat"
2、主函数
void main() //主函数{ int n=0,i; while(1)
{ switch (menu()) { case 1: { printf("\n\t 通讯信息录入\n"); n=Input(per, n);
}
break;
case 2: printf("\n\t\t\t 通讯录记录表\n"); Display(per,n); break; case 3: printf("\n\t保存功能\n"); WritetoText(per,n);
printf("\t");
system("pause"); //操作完成后进行暂停
break;
case 4: printf("\n\t从通讯录中删除记录\n"); n=Delete_a_record(per,n);
printf("\t"); system("pause");
break;
case 5: printf("\n\t修改通讯录中的记录\n");
Change(per,n);
//信息录入
//显示记录 //保存数据
//删除记录
//修改数据
case 6: printf("\n\t添加记录到通讯录\n"); //添加记录 printf("\t"); system("pause"); break;
n=Input(per,n);
break;
case 7: printf("\n\t在通讯录中查找记录\n"); Query_a_record(per,n);
printf("\t");
system("pause"); break;
case 0: printf("\n\t\t谢谢使用,再见!\n"); printf("\n\t\t"); system("pause"); exit(0);
}
五、总程序和分工执行结果
#include /*标准输入输出函数库*/ #include /*标准函数库*/ #include /*字符串函数库*/ #define FILENAME "phone.dat"
struct date //定义一个结构体类型数组 { char name[10]; /*姓名*/ char phone[12]; char email[20];
/*邮箱*/
char QQ[20];
}per[10];
int menu() //主菜单选择函数 { int c; //定义一个整型变量 do{
system("cls"); //清屏 printf("\t*******通讯录*******\n");
printf("\t--------------------\n");
printf("\t 1、通讯信息录入 \n");
//查找记录
//从程序里调用”pause”命令 //结束程序
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 0. 退出 \n"); printf("\t--------------------\n"); printf("\t请您选择(0-7):"); scanf("%d",&c);
}while(c>7&&c
} int Input(struct date per[10],int n)
{ int i=0;
char sign,x[10]; while(sign!='n'&&sign!='N') { printf("\t姓名:"); scanf("%s",per[n+i].name); printf("\t电话号码:"); scanf("%s",per[n+i].phone); printf("\t电子邮箱:"); scanf("%s",per[n+i].email); printf("\tQQ:");
scanf("%s",per[n+i].QQ); gets(x);
printf("\n\t是否继续添加?(Y/N)");
fflush(stdin); scanf("%c",&sign); i++;
}
return(n+i);
}
void writeToFile(struct date per[10],int n) { FILE *fp=NULL; int i=0;
fp=fopen("phone.dat","wb"); if(fp==NULL) { printf("打开文件出错!\n"); exit(0);
}
//清空缓存
}
void Display(struct date per[10],int n) { int i;
printf("----------------------------------------------------------------------\n"); //格式fclose(fp);
fwrite(&per[i],sizeof(per),1,fp); //把字节为1的信息写入文件
/ printf(" 姓名 电话号码 QQ 电子邮箱\n"); printf("----------------------------------------------------------------------\n");
for(i=1;i1&&i%10==0) { printf("\t-----------------------------------\n"); printf("\t"); system("pause");
printf("\t-----------------------------------\n");
}
}
printf("----------------------------------------------------------------------\n"); system("pause");
}
int Delete_a_record(struct date per[10],int n) { char s[20]; int i=0,j;
printf("\t请输入想删除记录中的名字:"); scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i
{printf("\t通讯录中没有此人!\n"); return(n);
}
for(j=i;j
printf("\t\t\t已经成功删除!\n"); return(n-1);
}
void Query_a_record(struct date per[10],int n) { int m;
printf("\t\n请选择查询方式:\n");
printf("\t┌──────┐\n"); printf("\t│1------姓名 │\n"); printf("\t│2------电话 │\n"); printf("\t│3------返回 │\n"); printf("\t└──────┘\n"); printf("请选择:"); scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4) { printf("输入错误,请重新选择:"); scanf("%d",&m);
}
if(m==1) { char s[20]; int i=0;
printf("\t请输入想查询的姓名:"); scanf("\t%s",s);
while(strcmp(per[i].name,s)!=0&&i
}
printf("\t此人QQ: %s\n",per[i].QQ); printf("\t电话号码: %s\n",per[i].phone); printf("\t电子邮箱: %s\n",per[i].email);
} ;
if(m==2)
{ char s[20]; int i=0;
printf("\t请输入想查询的电话:"); scanf("\t%s",s);
while(strcmp(per[i].phone,s)!=0&&i
return;
}
printf("\t此人姓名: %s\n",per[i].name); printf("\t此人QQ: %s\n",per[i].QQ); printf("\t电子邮箱: %s\n",per[i].email);
} ;
}
void Change(struct date per[10],int n) { char s[20]; int i=0;
printf("\t请输入想修改的记录中的名字:"); scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i
{ printf("\t通讯录中没有此人!\n"); return; }
printf("姓名:"); scanf("%s",per[i].name); printf("电话号码:"); scanf("%s",per[i].phone); printf("QQ:"); scanf("%s",per[i].QQ); printf("电子邮箱:"); scanf("%s",per[i].email); printf("\n修改成功!");
}
void WritetoText(struct date per[10],int n) { int i=0; FILE *fp; //定义文件指针 char filename[20]; //定义文件名 printf("\t保存到文件\n"); //输入文件名 if((fp=fopen("phone.dat","w"))==NULL) { printf("\t无法打开文件\n"); system("pause"); return; }
fprintf(fp,"***************************************
通
讯
********************************\n");
fprintf(fp," 姓名 电话号码 QQ 电子邮箱\n"); fprintf(fp,"-----------------------------------------------------------------------------\n"); while(i
{ fprintf(fp,"%-10s\t%-3s\t%-20s\t%-20s\n",per[i].name,per[i].phone,per[i].QQ,per[i].email); 录
}
void main() //主函数 }
fprintf(fp,"-------------------------------------------------------------------------\n");
fprintf(fp,"********************************共有%d条记录***************************\n",n); fclose(fp); //关闭文件 printf("保存成功!\n");
{ int n=0,i; while(1)
{ switch (menu()) { case 1: { printf("\n\t 通讯信息录入\n"); n=Input(per, n);
}
break;
case 2: printf("\n\t\t\t 通讯录记录表\n"); Display(per,n); break; case 3:
printf("\n\t保存功能\n"); WritetoText(per,n);
printf("\t");
system("pause");
break;
case 4: printf("\n\t从通讯录中删除记录\n"); n=Delete_a_record(per,n);
printf("\t"); system("pause");
break;
case 5: printf("\n\t修改通讯录中的记录\n"); Change(per,n);
printf("\t"); system("pause"); break;
case 6:
printf("\n\t添加记录到通讯录\n"); //信息录入
//显示记录 //保存数据
//操作完成后进行暂停 //删除记录
//修改数据
//添加记录
n=Input(per,n);
break;
case 7: printf("\n\t在通讯录中查找记录\n"); Query_a_record(per,n);
//查找记录
printf("\t"); system("pause"); break;
case 0:
printf("\n\t\t谢谢使用,再见!\n"); //结束程序 printf("\n\t\t"); system("pause"); exit(0); }
}
}
图1 通讯录主菜单结果
图2 信息录入
图3 通讯信息显示
图4 通讯信息保存
11
五、调试与测试
所谓程序调试是对程序的查错和排错。对此程序我们进行了以步骤:
人工检查,即静态检查。此过程我们对于写好的程序进行了排查,并且进行了注释。 上机调试。通过上机调试发现的错误为动态检查,这时发现了许多错误和警告,我们根据提示逐一改正。
运行程序。这一步骤我们逐一检查每个菜单是否运行正常与正确,在这个过程中我们出现了许多格式不正确,我们细心的进行修改。
总之,在我们对程序进行了细心的调试和测试之后,我们的程序正常运行了,但是其中还是有很多不足的地方。比如我们的修改成绩这一向就是不完善的,要是程序里出现了不同班但学号相同时这个问题就没有解决,在以后我们会进行改善。
六、结语
心得体会:
通过这一周的课程设计,我对一些专业知识和程序设计有了更深的了解,同时也尝试着, 去应用自己的所掌握的知识。本次高级程序课程设计主要是对本学年学习的C程序知识,同时加上基础知识,设计一些课题。
经过几天的奋战,我感受很深。在设计的过程中不可避免的遇到了很多的问题.尤其是在调试过程中,会因为某些原因出不来结果,也会因为个别错误而导致运行不出来,在这个过程中,遇到问题是不可避免的,但是在遇到困难是我们不退缩。在老师和同学的帮助与指导下,我们顺利的完成了本次课程设计,并调试出结果。
在调试结果出来时,我更是无比的兴奋,无比的自豪。总之,通过这次高级程序课程设计,我对自己的知识有了更好的掌握和应用,在以后的学习和生活中受用终身。在以后的学习中我们更多的要投身于实践中,多动手,多动脑,才能更好的把学习学好。
七、参考文献
[1]袁志祥主编 数据结构(C语言版)例题详解与课程设计指导第二版 中国科技大学出版社
[2]刘甫迎 刘光会 王蓉主编 程序设计教程(第二版) 北京电子工业出版社2008
[3]郭胜主编 程序设计 清华大学出版社 2002
[4]施燕妹 陈培 陈发吉主编 C#语言程序设计教程 中国水利水电出版社 2001
12