CC++课程设计学生通讯录.docx
《CC++课程设计学生通讯录.docx》由会员分享,可在线阅读,更多相关《CC++课程设计学生通讯录.docx(32页珍藏版)》请在冰豆网上搜索。
CC++课程设计学生通讯录
合肥工业大学
《C/C++程序设计语言》
课程设计报告
课题名称:
学生通讯录管理程序
院系名称:
班级:
姓名:
学号:
指导老师:
2014年5月
目录
一、设计问题描述与要求1
二、程序分析与设计1
2.1程序的总体设计1
2.2重要算法描述及部分代码3
三、程序运行测试11
学生通讯录管理程序设计报告
一、课程设计问题描述与要求
1.1题目
设计一个学生通讯录管理程序
1.2主要功能要求
1.能建立、修改和增删学生通讯录
2.能够按多种方式进行查询
二、程序分析与设计
2.1程序的总体设计
本程序主要分五个模块即输入新的通讯录名单、通过电话或姓名查找、修改联系人数据、删除记录、输出记录。
功能模块图:
总流程图:
2.2重要算法描述及部分代码
1.用结构体描述联系人信息,结构体是由若干成员组成,各成员可有不同的类型。
本系统联系人信息可用结构体描述为:
*********************************************************************
structTelephone_list//联系人信息
{
charname[50];//姓名
intTelephoneNum;//电话号码
charaddress[50];//地址
intlive;
}tel[99],tel_imp;
*********************************************************************
2.主要模块函数的定义,以实现系统的功能和对数据的操作
//建立新的联系人
此模块的功能是建立新的联系人信息,主要用到函数、for语句、if语句等,相关代码如下:
*********************************************************************
voidimport()
{
inta,b=0,c,d;
while(d!
=0)
{
printf("插入电话信息\n");
printf("请输入联系人名字:
\n");
scanf("%s",tel_imp.name);
for(a=0;a<=99;a++)
{
if(strcmp(tel[a].name,tel_imp.name)==0)
{
printf("姓名重复,是否继续添加,按1继续其他退出\n");
scanf("%d",&b);
break;
}
}
if(b==1)
{
printf("电话号码:
\n");
scanf("%d",&(tel_imp.TelephoneNum));
printf("住址:
\n");
scanf("%s",tel_imp.address);
for(c=0;c<=99;c++)
{
if(tel[c].live!
=1)
{
tel[c]=tel_imp;
tel[c].live=1;
break;
}
}
}
if(a==100)
{
printf("电话号码:
\n");
scanf("%d",&(tel_imp.TelephoneNum));
printf("住址:
\n");
scanf("%s",tel_imp.address);
for(c=0;c<=99;c++)
{
if(tel[c].live!
=1)
{
tel[c]=tel_imp;
tel[c].live=1;
break;
}
}
}
printf("退出输入请按0\n");
scanf("%d",&d);
}
save();
}
*********************************************************************
//查找联系人
此模块的功能是实现通过姓名或者电话号码查找相关联系人信息,主要用到函数、switch语句等,相关代码如下:
*********************************************************************
voidsearch()
{
intsearch_Num,search_select,a,ab,b,c;
charsearch_Name[50];
printf("1按照电话号码查询\n2按照姓名查询。
\n");
scanf("%d",&search_select);
switch(search_select)
{
case1:
printf("请输入号码。
\n");
scanf("%d",&search_Num);
for(ab=0;ab<=99;ab++)
{
if(tel[ab].TelephoneNum==search_Num)
printf("名字是:
%s电话号:
%d住址是:
%s\n",tel[ab].name,tel[ab].TelephoneNum,tel[ab].address);
}
break;
case2:
printf("请输入名字。
\n");
scanf("%s",search_Name);
for(ab=0;ab<=99;ab++)
{
if(strcmp(tel[ab].name,search_Name)==0)
printf("名字是:
%s电话号:
%d住址是:
%s\n",tel[ab].name,tel[ab].TelephoneNum,tel[ab].address);
}
break;
default:
printf("输入错误\n");
break;
}
}
*********************************************************************
//修改联系人数据
此模块的主要功能是实现修改相关联系人信息,主要用到函数、for语句、switch语句等,相关代码如下:
*********************************************************************
voidalter()
{
intalter_TelephoneNum,a;
charalter_Name[50];
charalter_address[50];
printf("1.查找姓名修改。
\n");
printf("2.查找电话修改。
\n");
printf("3.查找地址修改。
\n");
printf("0.返回。
\n");
scanf("%d",&a);
switch(a)
{
case1:
printf("1.输入姓名。
\n");
scanf("%s",alter_Name);
for(a=0;a<=99;a++)
{
if(strcmp(tel[a].name,alter_Name)==0)
{
modify(a);
}
}
break;
case2:
printf("1.输入电话。
\n");
scanf("%s",alter_TelephoneNum);
for(a=0;a<=99;a++)
{
if(tel[a].TelephoneNum=alter_TelephoneNum==0)
{
modify(a);
}
}
break;
case3:
printf("1.输入地址。
\n");
scanf("%s",alter_address);
for(a=0;a<=99;a++)
{
if(strcmp(tel[a].address,alter_address)==0)
{
modify(a);
}
}
break;
default:
printf("返回。
\n");
break;
}
save();
}
*********************************************************************
//删除联系人数据
此模块的功能是删除联系人数据,相关代码如下:
*********************************************************************
voiddel()
{
inta;
chardel_Name[50];
chardecide;
printf("请输入需要删除的电话号码的名字。
\n");
scanf("%s",del_Name);
for(a=0;a<=99;a++)
if(strcmp(tel[a].name,del_Name)==0)
{
printf("现在删除的电话信息是");
printf("名字是:
%s电话号:
%d住址是:
%s\n",tel[a].name,tel[a].TelephoneNum,tel[a].address);
printf("按y键确认删除\n");
scanf("%s",&decide);
if(decide=='y')
{
tel[a].live=0;
save();
}
else
{
printf("操作退出\n");
break;
}
break;
}
*********************************************************************
//输出所有通讯录
此模块的主要功能是输出所有之前建立的联系人信息,相关代码如下:
*********************************************************************
voidshowall()
{
intb=1;
while(b==1)
{
intc;
for(c=0;c<=99;c++)
{
if(tel[c].live==1)printf("名字是:
%s电话号:
%d住址是:
%s\n",tel[c].name,tel[c].TelephoneNum,tel[c].address);
}
printf("按任意键退出\n");
scanf("%s",&b);
}
}
*********************************************************************
3.主程序也就是main()函数的实现,用到大量C语基本语句,如循环语句、switch语句、break语句以及输入、输出等语句。
最主要的是它可以实现对各单独模块函数的调用以实现系统具体的功能,它首先调用系统菜单以供用户选择,然后main()函数将根据用户对菜单的选择继续调用其他函数,main()函数实现到以下代码部分就可以输出主界面菜单了。
*********************************************************************
voidmain()
{
intselect;
load();
while(select!
=0)
{
printf("\t\t******************************************\n\n");
printf("\t\t******************************************\n\n");
printf("\t\t**********学生通讯录管理系统***********\n\n");
printf("\t\t**********功能选项****************\n\n");
printf("\t\t*********1建立新的联系人***************\n\n");
printf("\t\t*********2查找联系人*******************\n\n");
printf("\t\t*********3修改联系人数据***************\n\n");
printf("\t\t*********4删除记录*********************\n\n");
printf("\t\t*********5输出记录*********************\n\n");
printf("\t\t*********0退出此系统*******************\n\n");
printf("\t\t******************************************\n\n");
printf("\t\t******************************************\n\n");
printf("选项(0-5):
[]\b\b");
scanf("%d",&select);
switch(select)
{
case1:
{
import();
break;
}
case2:
{
search();
break;
}
case3:
{
alter();
break;
}
case4:
{
del();
break;
}
case5:
{
showall();
break;
}
default:
printf("输入错误\n");
break;
}
}
}
*********************************************************************
运行后主菜单界面如下:
三、程序运行测试
1、建立新的联系人
2、查找联系人
(1)按照电话号码查找
(2)按照姓名查找
3、修改联系人数据
4、删除记录
5、输出记录
至此,满足基本功能需求的简单的学生同学录管理程序设计和测试完毕,界面和算法上还有待改进,后期我将继续深入学习C/C++方面的知识,以便设计出更完善的程序。
完整源代码:
#include
#include
#include
structTelephone_list
{
charname[50];
intTelephoneNum;
charaddress[50];
intlive;
}
tel[99],tel_imp;
voidsave()
{
intc;
FILE*fp;
fp=fopen("tel.txt","wb+");
for(c=0;c<99;c++)if(tel[c].live==1)
fwrite(&tel[c],sizeof(structTelephone_list),1,fp);
fclose(fp);
}
voidmodify(intf)
{
intmod_select,mod_TelephoneNum;charmod_name[50],mod_address[50];
printf("1.修改姓名。
\n");
printf("2.修改电话。
\n");
printf("3.修改地址。
\n");
printf("0.返回。
\n");
scanf("%d",&mod_select);
switch(mod_select)
{
case1:
printf("输入新名字。
\n");
scanf("%s",tel[f].name);
printf("修改成功\n");
break;
case2:
printf("输入新号码。
\n");
scanf("%d",&tel[f].TelephoneNum);
printf("修改成功\n");
break;
case3:
printf("输入新地址。
\n");
scanf("%s",tel[f].address);
printf("修改成功\n");
break;
default:
printf("返回\n");break;
}
}
voidload()
{
intc;
FILE*fp;
fp=fopen("tel.txt","a+");
for(c=0;c<99;c++)
fread(&tel[c],sizeof(structTelephone_list),1,fp);
fclose(fp);
}
voidimport()
{
inta,b=0,c,d;
while(d!
=0)
{
printf("插入电话信息\n");
printf("请输入电话主人的名字:
\n");
scanf("%s",tel_imp.name);
for(a=0;a<=99;a++)
{
if(strcmp(tel[a].name,tel_imp.name)==0)
{
printf("姓名重复,是否继续添加,按1继续其他退出\n");
scanf("%d",&b);
break;
}
}
if(b==1)
{
printf("电话号码:
\n");
scanf("%d",&(tel_imp.TelephoneNum));
printf("住址:
\n");
scanf("%s",tel_imp.address);
for(c=0;c<=99;c++)
{
if(tel[c].live!
=1)
{
tel[c]=tel_imp;
tel[c].live=1;
break;
}
}
}
if(a==100)
{
printf("电话号码:
\n");
scanf("%d",&(tel_imp.TelephoneNum));
printf("住址:
\n");
scanf("%s",tel_imp.address);
for(c=0;c<=99;c++)
{
if(tel[c].live!
=1)
{
tel[c]=tel_imp;
tel[c].live=1;
break;
}
}
}
printf("退出输入请按0\n");
scanf("%d",&d);
}
save();
}
voidsearch()
{
intsearch_Num,search_select,a,ab,b,c;
charsearch_Name[50];
printf("1按照电话号码查询\n2按照姓名查询。
\n");
scanf("%d",&search_select);
switch(search_select)
{
case1:
printf("请输入号码。
\n");
scanf("%d",&search_Num);
for(ab=0;ab<=99;ab++)
{
if(tel[ab].TelephoneNum==search_Num)
printf("名字是:
%s电话号:
%d住址是:
%s\n",tel[ab].name,tel[ab].TelephoneNum,tel[ab].address);
}
break;
case2:
printf("请输入名字。
\n");
scanf("%s",search_Name);
for(ab=0;ab<=99;ab++)
{
if(strcmp(tel[ab].name,search_Name)==0)
printf("名字是:
%s电话号:
%d住址是:
%s\n",tel[ab].name,tel[ab].TelephoneNum,tel[ab].address);
}
break;
default:
printf("输入错误\n");
break;
}
}
voidalter()
{
intalter_TelephoneNum,a;
charalter_Name[50];
charalter_address[50];
printf("1.查找姓名修改。
\n");
printf("2.查找电话修改。
\n");
printf("3.查找地址修改。
\n");
printf("0.返回。
\n");
scanf("%d",&a);
switch(a)
{
case1:
printf("1.输入姓名。
\n");
scanf("%s",alter_Name);
for(a=0;a<=99;a++)
{
if(strcmp(tel[a].name,alter_Name)==0)
{
modify(a);
}
}
break;
case2:
printf("1.输入电话。
\n");
scanf("%s",alter_TelephoneNum);
for(a=0;a<=99;a++)
{
if(tel[a].TelephoneNum=alter_TelephoneNum==0)
{
modify(a);
}
}
break;
case3:
printf("1.输入地址。
\n");
scanf("%s",alter_address);
for(a=0;a<=99;a++)
{
if(strcmp(tel[a].address,alter_address)==0)
{
modify(a);
}
}
break;
default:
printf("返回。
\n");
break;
}
save();
}
voiddel()
{
inta;
chardel_Name[50];
chardecide;
printf("请输入需要删除的电话号码的名字。
\n");
scanf("%s",del_Name);
for(a=0;a<=99;a++)
if(strcmp(tel[a].name,del_Name)==0)
{
printf("现在删除的电话信息是");
printf("名字是:
%s电话号:
%d住址是:
%s\n",tel[a].name,tel[a].TelephoneNum,tel[a].address);
pr