C语言程序设计报告个人通讯录.docx
《C语言程序设计报告个人通讯录.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告个人通讯录.docx(37页珍藏版)》请在冰豆网上搜索。
C语言程序设计报告个人通讯录
南京航空航天大学金城学院
《C语言程序设计》课程设计报告
个人通讯录系统
学号:
姓名:
学号:
姓名:
日期:
一、需求分析:
………………………………………………………3
二、程序的主要功能:
……………………………………………….3
三、程序运行平台:
………………………………………………….3
四、系统总框架图:
………………………………………………….6
五、程序类的说明:
……………………………………………….6
六、模块分析:
……………………………………………………….8
七、比较有特色的函数:
…………………………………………….9
八、存在的不足与编程体会…………………………………………10
九、程序源代码:
…………………………………………………….10
一、需求分析
各类存储和通信电子产品都带有通讯录的功能,可以对联系人进行简单的信息管理和存储。
二、程序的主要功能
Ø用户信息界面美观、简洁,采用菜单式显示功能选择;
Ø能够从磁盘文件输入和输出数据;
Ø能够对联系人信息进行增、删和改的操作;
Ø能够根据联系人的姓名的拼音顺序从高到低排序;
三、程序运行平台
VC6.0
运行程序“perosnalcontact.exe”,进入登录界面如下
****************************
**
**
*通讯录文件不存在!
*
*通讯录文件已建立!
*
**
**
****************************
按任意键进入主菜单
请输入您的数字选择:
一、按下任意键进入主菜单
您好!
欢迎使用通讯录!
1:
添加个人信息
2:
查询个人信息
3:
删除个人信息
4:
修改个人信息
5:
信息排序
6:
输出全部信息
7:
写入文件
8:
读取文件
9:
删除所有
0:
退出
请输入您的数字选择:
选择1进入添加信息模块:
请输入您要添加的联系人的信息:
请输入姓名:
选择2进入查询个人信息模块:
欢迎使用查询菜单
1-按姓名查询
2-按QQ查询
3-返回主菜单
请输入您的选择
选择3进入删除个人信息模块
删除菜单
1-删除单个
2-返回主菜单
请输入您的数字选择:
选择4.进入修改个人信息模块
1-按姓名修改
请输入您的数字选择:
选择5.进入联系人排序模块
排序菜单
1-按姓名排序
2-返回主菜单请输入您的数字选择:
选择6.进入输出信息模块
***************以下为通讯录所有信息************
________________________________
名字:
13213
性别:
2144444444444
手机号码:
44444444444
电子邮件:
44444444444
QQ号码:
444444444
________________________________
************************************************
请按任意数字键返回主菜单
选择7.进入写入文件模块
通讯录文件已保存
请按任意数字键返回主菜单
选择8.进入读取信息模块
****************************
**
**
*文件导入成功!
*
**
**
****************************
按1显示所有信息,按2回主菜单!
请输入您的数字选择:
选择9.删除所有信息
四、系统总框架图
五、程序类的说明
structperson
{
charname[15];
charsex[2];
charcelephone[22];
charemail[40];
longintQQ;
}per[500];//定义一个per数据,有500个元素。
六、模块分析
1.添加模块
系统将提示用户输入新添加的联系人信息,添加在数据中。
2.查询模块
根据用户输入的姓名或者QQ号,然后运用strcmp函数对数组中的元素进行对比,然后输入匹配的信息。
3.删除模块
首先由用户输入姓名,运用strcmp函数查找,显示匹配的信息,由用户输入1或2进行判断是否删除。
删除之后将num的值-1。
定义int型的findmark,和mark用来判断是否有同名信息,由用户判断时候继续删除同名的联系人。
4.个人信息修改模块
首先由用户输入姓名,查询到匹配的信息,显示出来,由用户判断是否删除,运行xiugaixinxi(a)函数。
5.排序模块
用strcmp函数判断数据中第一个元素和它的后一个元素是否相同,不相同则把数据两个元素进行交换。
6.写文件模块
程序结束时将所有联系人的信息写入到“per.bin”文件中。
7.显示所有信息
用for循环将从0到num的所有信息全部打印在屏幕上。
8.读文件模块
程序开始时从“per.bin”读取所有联系人信息。
9.删除所有信息模块
由用户输入航班号和订票数目,系统判断能满足用户需求则输出“订票成功”信息。
先尝试读取文件信息,若读取失败,则输出信息已删除,否则将0赋给num,显示信息已删除。
七、比较有特色的函数
voidnewrecord()//*添加纪录*//
{
inta;
system("cls");
system("color2a");
loop:
printf("\n\n\n\n\t\t请输入您要添加的联系人的信息:
\n");
printf("\n请输入姓名:
\n");
name:
scanf("%s",&per[num].name);
if(strlen(per[num].name)>15)
{
printf("\n对不起!
您的输入有误!
请重新输入");
gotoname;
}
八、存在的不足与对策、编程体会
添加个人信息的方式过于麻烦,可以使用链表来代替数据,方便临时添加信息。
九、参考文献
XX文库
十、程序源代码
//制作一个个人通讯录,用来保存联系人的电话,性别,姓名,QQ号,Eamil地址。
//组成部分:
1.显示界面2.信息写入磁盘,从磁盘中读取信息3.对联系人信息进行删改4.根据联系人的姓名进行排序
#include
#include
#include
#include
structperson
{
charname[15];
charsex[2];
charcelephone[22];
charemail[40];
longintQQ;
}per[500];//定义一个per数据,有500个元素。
intnum=0;//*外部变量num为文件中的纪录数*//
FILE*fp;
voidmainmenu();//*主菜单*//
voidnewrecord();//新添纪录*//
voidxiugaimenu();//*修改菜单*//
voidxiugaibyname();//*按姓名修改*//
voidsearchmenu();//*查询菜单*//
voidsearchbyname();//*按姓名查询*//
voidsearchbyQQ();//*按QQ号查询*//
voiddeletemenu();//*删除菜单*//
voiddeleteall();//*删除所有信息*//
voiddeleteone();//*删除单个*//
voidshowall();//*输出全部信息*//
voidreadfromfile();//*读取文件*//
voidwritetofile();//*写入文件*///
voiddeletebyname();//*按姓名删除*/
voidlistbyname();//*按姓名排序*//
voidlistmenu();//*排序菜单*//
voiddeleteall();//*删除所有信息*//
voidmain()//*主函数*//
{
system("cls");//清空屏幕
readfromfile();//读取文件
while
(1)
{
mainmenu();//主菜单
}
}
voidmainmenu()//*主菜单函数*//
{
inta;
system("cls");
system("color2a");//更改背景板为绿色
printf("\n\t您好!
欢迎使用通讯录!
\n");
printf("1:
添加个人信息\n");
printf("2:
查询个人信息\n");
printf("3:
删除个人信息\n");
printf("4:
修改个人信息\n");
printf("5:
信息排序\n");
printf("6:
输出全部信息\n");
printf("7:
写入文件\n");
printf("8:
读取文件\n");
printf("9:
删除所有\n");
printf("0:
退出\n");
printf("\n请输入您的数字选择:
\n");
loop1:
scanf("%d",&a);
switch(a)
{
case1:
newrecord();break;
case2:
searchmenu();break;
case3:
deletemenu();break;
case4:
xiugaimenu();break;
case5:
listmenu();break;
case6:
showall();break;
case7:
writetofile();break;
case8:
readfromfile();break;
case9:
deleteall();break;
case0:
exit(0);
default:
printf("\n对不起!
您的输入有误!
请重新输入:
\n");gotoloop1;
}
}
voidnewrecord()//*添加纪录*//
{
inta;
system("cls");
system("color2a");
loop:
printf("\n\n\n\n\t\t请输入您要添加的联系人的信息:
\n");
printf("\n请输入姓名:
\n");
name:
scanf("%s",&per[num].name);
if(strlen(per[num].name)>15)
{
printf("\n对不起!
您的输入有误!
请重新输入");
gotoname;
}
printf("\n请输入性别:
\n");
sex:
scanf("%s",&per[num].sex);
if(strlen(per[num].sex)==0)
{
printf("\n对不起!
您的输入有误!
请重新输入\n");
gotosex;
}
printf("\n请输入手机号码:
\n");
celephone:
scanf("%s",&per[num].celephone);
if(strlen(per[num].celephone)!
=11)
{
printf("\n对不起!
您的输入有误!
请重新输入\n");
gotocelephone;
}
printf("\n输入电子邮箱:
");
email:
scanf("%s",&per[num].email);
if(strlen(per[num].email)>30||strlen(per[num].email)<4)
{
printf("\n对不起!
您的输入有误!
请重新输入\n");
gotoemail;
}
printf("\n输入QQ号码:
\n");
QQ:
scanf("%ld",&per[num].QQ);
if(per[num].QQ>1600000000||per[num].QQ<10000000)
{
printf("\n对不起!
您的输入有误!
请重新输入\n");
gotoQQ;
}
num++;
printf("\n是否继续添加?
\n");
printf("\n请按1和2(1代表继续;2代表不继续)\n");
printf("\n请输入您的选择\n");
scanf("%d",&a);
if(a==1)
{
gotoloop;
}
else
{
return;
}
}
voidsearchmenu()//*查询菜单*//
{
inta;
system("cls");
system("color2a");
printf("\n\t\t欢迎使用查询菜单");
printf("\n\t\t1-按姓名查询");
printf("\n\t\t2-按QQ查询");
printf("\n\t\t3-返回主菜单");
printf("\n\t\t");
printf("\n请输入您的选择\n");
scanf("%d",&a);
switch(a)
{
case1:
searchbyname();break;
case2:
searchbyQQ();break;
case3:
mainmenu();break;
}
}
voidsearchbyQQ()//*按QQ查询*//
{
intmark=0;
inti,j;
longintQQ;
printf("\n\t\t按QQ号码查找\n");
printf("\n请输入QQ号码:
");
scanf("%ld",&QQ);
for(i=0;i{
if(per[i].QQ==QQ)
{
printf("\n\t\t以下是您查找的联系人的信息");
printf("\n\t\t________________________________");
printf("\n\t\t名字:
%s",per[i].name);
printf("\n\t\t性别:
%s",per[i].sex);
printf("\n\t\t手机号码:
%s",per[i].celephone);
printf("\n\t\t电子邮件:
%s",per[i].email);
printf("\n\t\tQQ号码:
%ld",per[i].QQ);
printf("\n\t\t________________________________");
printf("\n\t\t请按任意数字键返回主菜单");
mark++;
scanf("%d",&j);
return;
}
}
if(mark==0)
{
printf("\n\t\t对不起!
没有该联系人的信息!
");
printf("\n\t\t请按任意数字键返回主菜单");
scanf("%d",&j);
return;
}
}
voidsearchbyname()//*按姓名查询*//
{
intmark=0;
inti,j,findmark=0;
inta=0;
charname[15];
printf("\n按姓名查找");
printf("\n请输入姓名:
");
scanf("%s",name);
for(i=a;i{
if(strcmp(per[i].name,name)==0)
{
findmark++;
printf("\n\t\t以下是您查找的联系人的信息");
printf("\n\t\t________________________________");
printf("\n\t\t名字:
%s",per[i].name);
printf("\n\t\t性别:
%s",per[i].sex);
printf("\n\t\t手机号码:
%s",per[i].celephone);
printf("\n\t\t电子邮件:
%s",per[i].email);
printf("\n\t\tQQ号码:
%ld",per[i].QQ);
printf("\n\t\t________________________________");
if((i+1){
printf("\n是否继续查找相同名字的联系人的信息?
(1代表继续;2代表不继续)\n");
scanf("%d",&j);
if(j==1)
{
a=i;
mark++;
continue;
}
else
break;
}
else
{
printf("\n请按任意数字键返回主菜单");
scanf("%d",&j);
return;
}
}
}
if(mark!
=0)
{
printf("\n对不起!
没有相同名字的该联系人的信息!
!
");
printf("\n请按任意数字键返回主菜单");
scanf("%d",&j);
return;
}
elseif(findmark==0)
{
printf("\n对不起!
没有该联系人的信息!
");
printf("\n请按任意数字键返回主菜单");
scanf("%d",&j);
return;
}
}
voiddeletebycelephone()//*按手机号码删除*//
{
inti,j,h,m;
intdeletemark=0;
charcelephone[11];
printf("\n\t\t请输入要删除的联系人的手机号码:
");
scanf("%s",celephone);
for(i=0;i{
if(strcmp(per[i].celephone,celephone)==0)
{
deletemark++;
printf("\n\t\t以下是您要删除的联系人的纪录:
");
printf("\n\t\t________________________________");
printf("\n\t\t名字:
%s",per[i].name);
printf("\n\t\t性别:
%s",per[i].sex);
printf("\n\t\t手机号码:
%s",per[i].celephone);
printf("\n\t\t电子邮件:
%s",per[i].email);
printf("\n\t\tQQ号码:
%ld",per[i].QQ);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除?
(1代表删除;2代表不删除)\n");
printf("\n请输入您的数字选择:
\n");
scanf("%d",&h);
if(h==1)
{
for(j=i;jper[j]=per[j+1];
num--;
printf("\n\t\t删除成功");
printf("\n是否继续删除?
(1代表继续;2代表不继续)\n");
printf("\n请输入您的数字选择:
\n");
scanf("%d",&h);
if(h==1)
deletebycelephone();
}
}
}
if(deletemark==0)
{
printf("\n\t\t对不起!
没有该联系人的纪录!
");
printf("\n\t\t是否继续删除?
(1代表继续;2代表不继续)\n");
printf("\n请输入您的数字选择:
\n");
scanf("%d",&m);
if(m==1)
deletebycelephone();
}
}
voiddeletemenu()//*删除菜单*//
{
inti,j;
system("cls");
system("color3b");
if(num==0)
{
printf("\n\t\t对不起!
文件中无任何纪录!
");
printf("\n\t\t请先添加个人信息!
");
printf("\n\t\t请按任意数字键返回主菜单");
scanf("%d",&j);
return;
}
else
{
printf("\n\t\t删除菜单");
printf("\n\t\t1-删除单个");
printf("\n\t\t2-返回主菜单");
printf("\n\t\t");
printf("\n\t\t请输入您的数字选择:
");
loop4:
scanf("%d",&i);
switch(i)
{
case1:
deleteone();break;
case2:
mainmenu();break;
default:
printf("\n对不起!
您的输入有误!
请重新输入:
\n");gotoloop4;
}
}
}
voiddeleteone()//*删除单个*//
{
inti;
printf("\n\t\t1-按手机号码删除2-按姓名删除");
printf("\n\t\t请输入您的选择:
");
loop5