C语言课程设计通讯录管理系统.docx
《C语言课程设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计通讯录管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
![C语言课程设计通讯录管理系统.docx](https://file1.bdocx.com/fileroot1/2023-3/29/c7f6544b-dc24-4539-9ecc-285d6475170e/c7f6544b-dc24-4539-9ecc-285d6475170e1.gif)
C语言课程设计通讯录管理系统
1.课程设计的目的
C语言程序设计课程设计是计算机科学与技术(信息安全、电子商务)专业一门重要的专业技术基础课程,也是一门核心课程。
本课程设计的目的是为了配合C语言程序设计课程的开设,使学生能够较熟练地掌握C语言的基本内容及程序设计的基本方法与编程技巧,并能够培养学生应用计算机解决和处理实际问题的思维方法与基本能力,为进一步学习和应用计算机的专业知识打下基础。
2.设计方案论证
2.1设计思路:
【设计思路】
根据要求,电话簿数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保存记录以进行修改,删除,查找等操作;另外还应提供键盘式选择菜单实现功能选择。
【总体设计】
图1系统功能模块图
2.2程序设计
根据所构想的功能及模块设计出与之相对算法并建立函数来实现系统运行[1]
1首先调用函数menu();,该函数主要是利用输出函数printf进行输出
2然后用scanf函数获取输入数据。
每次输入结束后,系统输出询问是否继续添加的信息,然后执行switch语句,如果返回值是“y”,则继续执行addnewcard()函数添加用户,否则返回主菜单。
3进入保存功能后,系统会调用voidWritetoText(Personper[],intn)函数
并且提示通讯录管理者关于保存的信息进行记录自动保存。
从而便于我们直接查询。
图2.主函数流程图
2.3.源程序
#defineN50
#include
#include
structpeople
{charname[20];charcompany[50];charnum[15];charmail[20];}peop[N];
voidprintf_face()
{printf("\n\t姓名\t单位\t电话号码\t邮箱\n");}
voidprintf_one(inti)
{printf("\t%s\t%s\t%s\t%s\n",peop[i].name,peop[i].company,peop[i].num,peop[i].mail);}
voidprintf_n(intn)
{intj;
for(j=0;j{if((j!
=0)&&(j%10==0)){printf("\n\nPressanykeytocontinue...:
");getchar();puts("\n\n");}
printf_one(j);
}getchar();
}
intload()
{FILE*fp;
inti;
if((fp=fopen("file","rb"))==NULL)
{printf("\nCannotopenfile\n");
exit(0);
}
for(i=0;!
feof(fp);i++)
fread(&peop[i],sizeof(structpeople),1,fp);
fclose(fp);
return(i-1);
}
intmodify_data(inti,intn)
{intc,w1;voidinput(inti);voidmenu();
do
{puts("\n修改选项=>\n\n1).姓名2).单位3).电话号码4).邮箱5).所有数据6).取消并返回");
printf("请选择?
:
[]\b\b");
scanf("%d",&c);
if(c>6||c<1){puts("\nChooseerror!
Pleaseagain!
");getchar();}
}while(c>6||c<1);
do
{switch(c)
{case1:
printf("name:
");scanf("%s",peop[i].name);break;
case2:
printf("company:
");scanf("%s",peop[i].company);break;
case3:
printf("number:
");scanf("%s",peop[i].num);break;
case4:
printf("e-mail:
");scanf("%s",peop[i].mail);break;
case5:
input(i);break;
case6:
menu();
}
puts("\nNow:
\n");
printf_face();printf_one(i);
printf("\n确定?
\n\n\t1).是2).不,重新修改3).返回不保存[]\b\b");
scanf("%d",&w1);
}while(w1==2);
return(w1);
}
voidinput(inti)
{printf_face();printf("\t");
scanf("%s\t%s\t%s\t%s",peop[i].name,peop[i].company,peop[i].num,peop[i].mail);}
voidsave(intn)
{FILE*fp;inti;
if((fp=fopen("file","wb"))==NULL)
{printf("\nCannotopenfile\n");
exit(0);
}
for(i=0;iif(peop[i].name[0]!
='\0')
if(fwrite(&peop[i],sizeof(structpeople),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
voidprintf_back()
{
intw;voidbrowse();voidmenu();
printf("\n\n\t^_^.Successful.^_^\n\n");
printf("Whatdoyouwanttodo?
\n\n\t1).浏览所有\t2).返回:
[]\b\b");
scanf("%d",&w);
if(w==1)browse();
elsemenu();
}
voidmain()
{
voidmenu();
menu();
}
voidmenu()
{
intn,w1;
voidenter();voidadd();voidmodify();voidbrowse();voiddeleter();voidsearch();
do
{
puts("\t************************菜单************************");
puts("\t\t*******************1.新建联系人*******************");
puts("\t\t*******************2.添加联系人*******************");
puts("\t\t*******************3.修改*******************");
puts("\t\t*******************4.删除*******************");
puts("\t\t*******************5.浏览*******************");
puts("\t\t*******************6.查找*******************");
puts("\t\t*******************7.退出*******************");
puts("\n\n\t********************通讯录*********************");
printf("请选择服务种类(1-7):
[]\b\b");
scanf("%d",&n);
if(n<1||n>7)
{w1=1;getchar();}
elsew1=0;
}while(w1==1);
switch(n)
{
case1:
enter();break;
case2:
add();break;
case3:
modify();break;
case4:
deleter();break;
case5:
browse();break;
case6:
search();break;
case7:
exit(0);
}
}
voidenter()
{inti,n;
printf("Howmanypeople(0-%d)?
:
",N-1);
scanf("%d",&n);
printf("请输入数据:
\n");
for(i=0;i{printf("\n输入第%d个记录.\n",i+1);
input(i);
}
if(i!
=0)save(n);
printf_back();
}
voidadd()
{inti,n,k,t;
n=load();
printf("Howmanypeopledoyouwanttoadd(0-%d)?
:
",N-n-1);
scanf("%d",&t);k=n+t;
for(i=n;i{printf("\n输入第%d个记录.\n",i-n+1);input(i);}
save(k);printf_back();
}
voidmodify()
{structpeoples;inti,n,k,w0=1,w1,w2=0;
n=load();
do
{k=-1;printf_face();printf_n(n);
do
{printf("\n\nEnternamethatyouwanttomodify!
\nName:
");
scanf("%s",s.name);
for(i=0;iif(strcmp(s.name,peop[i].name)==0){k=i;s=peop[i];}
if(k==-1)printf("\n\n没有记录请重新输入!
");
}while(k==-1);
printf_face();printf_one(k);
w1=modify_data(k,n);
if(w1==1){printf("\n\t^_^.Successful^_^.\n\n是否继续?
\n\n\t1).是2).保存返回\t[]\b\b");
scanf("%d",&w0);w2=1;}
else
{w0=0;if(w2==0)peop[k]=s;}
if((w0!
=1)&&(w2==1))save(n);
}while(w0==1);menu();
}
voidbrowse()
{intn;
n=load();
printf_face();printf_n(n);
printf("\t共有%d记录.\n",n);
printf("\nPressanykeytoback...");
getchar();
menu();
}
voidsearch()
{intw0,k,i,n,w1,w2;structpeoples;n=load();
do
{printf("请选择查找类别:
1).姓名2).电话号码[]\b\b");
scanf("%d",&w1);if(w1<1||w1>2){printf("输入错误!
请重新输入!
\n");w2=1;}
}while(w2==1);
if(w1==1)
{do
{k=-1;
do
{printf("\n\nEnternamethattouwanttosearch!
\nName:
");
scanf("%s",s.name);
for(i=0;iif(strcmp(s.name,peop[i].name)==0){k=i;s=peop[i];}
if(k==-1)printf("\n\n没有记录请重新输入!
");
}while(k==-1);
printf_face();printf_one(k);
printf("\nWhatdoyouwanttodo?
\n\t1).继续2).返回菜单[]\b\b");
scanf("%d",&w0);
}while(w0==1);
menu();
}
else
{do
{k=-1;
do
{printf("\n\nEnternumberthattouwanttosearch!
\nNum:
");
scanf("%s",s.num);
for(i=0;iif(strcmp(s.num,peop[i].num)==0){k=i;s=peop[i];}
if(k==-1)printf("\n\n没有记录请重新输入!
");
}while(k==-1);
printf_face();printf_one(k);
printf("\nWhatdoyouwanttodo?
\n\t1).继续2).返回菜单[]\b\b");
scanf("%d",&w0);
}while(w0==1);
menu();
}
}
voiddeleter()
{structpeoples;inti,n,k,w0,w1;
n=load();
do
{k=-1;printf_face();printf_n(n);
do
{printf("\n\nEnternamethatyouwanttodelete!
\nName:
");
scanf("%s",s.name);
for(i=0;iif(strcmp(s.name,peop[i].name)==0){k=i;s=peop[i];}
if(k==-1)printf("\n\n没有记录请重新输入!
");
}while(k==-1);
printf_face();printf_one(k);
printf("\n确定?
\n\t1).是2).返回[]\b\b");
scanf("%d",&w0);
if(w0==1){peop[k].name[0]='\0';save(n);}elsebreak;
printf("\n\t^_^.Successful^_^.\n");
printf("Whatdoyouwanttodo?
\n\t1).继续2).返回[]\b\b");
scanf("%d",&w1);
}while(w1==1);
menu()
3.设计结果与分析
在VC++6.0环境中输入源程序,在没有提示错误的情况下编译,可以正常运行系统,实现网吧管理.如图3所示界面
①执行文件时,会看到如图3所示界面
图3程序主界面
②输入1显示添加通讯录界面。
图4.添加通讯录界面图
这一函数实现了对字符串赋值的功能[1]。
系统提示通讯录使用者输入相应信息,
。
输入2显示显示通讯录界面。
图5.显示通讯录界面图
这一函数实现了对字符串赋值的功能[2]。
系统提示通讯录使用者输入相应信息,然后用scanf函数获取输入数据。
,然后执行switch语句,如果返回值是“y”,则继续执行函数显示,否则返回主菜单。
.
④在主菜单输入3显示删除通讯录界面。
图6.选择删除通讯录记录显示图
在主菜单界面输入数字“3”,执行deletecard()函数删除用户。
当通讯录执行者输入要删除学生的姓名,系统会搜索数据库并将搜索结果输出。
然后征求确认。
每次删除成功后系统会询问是否继续删除,然后执行相应操作。
⑤在主菜单输入4显示查询通讯录界面。
图7.查询通讯录记录界面图
这一函数提示通讯录管理人员可以有姓名、电话、地址三种输入方式,调用scanf函数获取输入信息,然后执行if语句,则会显示查询用户信息信息;此外在此操作过程中选择1、2、3、分别可以按照姓名、电话号码、家庭住址进行快速查询。
⑥在主菜单输入6显示保存通讯录界面。
图9.保存通讯录记录界面图
进入保存功能后,系统会调用voidWritetoText(Personper[],intn)函数并且提示通讯录管理者关于保存的信息进行记录自动保存。
从而便于我们直接查询。
4.设计体会
通过为期一周的课程设计,我们对《C语言》这门课程有了更深一步的了解。
它是计算机程序设计的重要理论技术基础,在我们信息与计算科学专业的学习中占据着十分重要的地位。
同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。
因为我们学习知识就是为了实践。
而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
运用《C语言》中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。
通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
5.参考文献
1、《C语言课程设计案例精编》郭翠英著中国水利水电出版社
2、《C语言程序设计教程习题解答与实验指导》王敬华林萍张维著清华大学出版社
3、《C程序设计题解与上机指导》潭浩强著清华大学出版社