C语言课程设计报告手机通讯录管理系统.docx
- 文档编号:9087989
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:19
- 大小:34.81KB
C语言课程设计报告手机通讯录管理系统.docx
《C语言课程设计报告手机通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告手机通讯录管理系统.docx(19页珍藏版)》请在冰点文库上搜索。
C语言课程设计报告手机通讯录管理系统
C程序课程设计报告
--手机通讯录管理系统
姓名:
谢骏
学院:
珠宝学院
学号:
649
班级:
141082
一课程设计目的和内容概述
1.目的:
加深对《C语言》课程所学知识的理解,进一步巩固C语言编程方法。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力,加强动手能力。
2.内容:
设计一个简易的手机通讯录管理系统。
该题目要求在熟练掌握C语言的基本知识:
数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。
进一步掌握各种函数的应用,包括时间函数、、绘图函数,以及文件的读写操作等。
其中结构体,函数的调用,算法的设计是尤为重要的。
二题目
手机通讯录管理系统。
[问题描述]
该系统模拟手机通讯录管理系统,实现对手机中的通讯录进行管理
[基本要求]
要能提供以下几种功能:
(1)查看功能:
选择此功能时,列出下列三类选择:
A:
办公类 B:
个人类 C:
商务类
(2)当选中某类时,显示出此类所有数据中的姓名和电话号码
(3)添加数据功能:
能录入新数据,每个结点包括:
姓名,电话号码,分类(可能选项有:
w为办公类p为个人类 b为商务类),电子邮件。
例如:
杨春 商务类
当录入重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通讯录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。
(4)修改功能:
选中某个人的姓名时,可对此人的相应数据进行修改。
(5)删除功能:
选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。
三程序设计
1.总体设计
首先,因为每个个体有多种信息,所以要建立结构体来储存和整合各个信息。
然后利用模块来分别实现程序的各个功能。
各个模块用函数来实现。
在通过通过主函数来判断输入字母,从而调动函数,实现所需功能。
最后将输入的文件保存在文件里,以便重复使用。
2.详细设计
根据功能需要建立显示,添加,查看,删除,修改,保存五个模块。
在模块中通过调用各个函数来实现功能。
详细设计如下:
(1)构建结构体,写入文件
FILE*fp;
inti;
structaddress
{chara[40];um);
printf("\n\t姓名-Name:
%-20s",friends[j].name);
printf("\n\t性别-kind:
%s",friends[j].kind);
printf("\n\t联系电话-Telephone:
%-13ld",friends[j].telephone);
printf("\n\temail-address:
%-40s",friends[j].;
}
voidAppend(intj)
{
system("cls");
friends[j].num=j;
printf("\n\t\t\t序号-Number:
%d",j);
printf("\n\t\t\t姓名-Name:
");
scanf("%s",friends[j].name);
printf("\t\t\t类别-kind:
");
scanf("%s",&friends[j].kind);
printf("\t\t\t联系电话-telephone:
");
scanf("%ld",&friends[j].telephone);
while(friends[j].telephone<0||friends[j].telephone>)
{
printf("电话号码不合法!
请重新输入:
");
scanf("%ld",&friends[j].telephone);
}
printf("\t\t\temail-Address:
");
scanf("%s",friends[j].;
getchar();
}
voidDelete()
{
intk;intj;
system("cls");
printf("\n\tDelete序号-Number:
");
scanf("%d",&k);
if(k<=i)
{
for(j=k;j
{
strcpy(friends[j].name,friends[j+1].name);/*交换元素内容*/
strcpy(friends[j].kind,friends[j+1].kind);
friends[j].telephone=friends[j+1].telephone;
strcpy(friends[j].,friends[j+1].;
}
i--;
}
else
{
printf("输入的序号太大!
");
}
}
voidModify(intj)
{
system("cls");
Append(j);
}
voidSave()
{
inti,j;
system("cls");
printf("\n\n\t\t请耐心等待,信息正在保存!
\n");
printf("\n\n\n\n\t\t\tSaving");
for(i=0;i<20;i++)
{
Sleep(300);
printf(".");
}
printf("\n\n信息已经保存成功!
\n");
fp=fopen("","w");
for(j=1;j<=i;j++)
{
fwrite(&friends[j],sizeof(structffriend),1,fp);
}
fclose(fp);
}
(3)主函数调用各个模块
用switch语句判断输入者要使用的功能,然后调用函数,模块实现功能。
程序如下:
voidmain()
{
intj;chara;charx;
chargrade;
charsearchkind[20];
charsearchname[20];
i--;
system("cls");
do
{
printf("\n\n\t\t\t=========================================\n");
printf("\t\t\t\t手机通讯录\n");
printf("\t\t\t\t功能选择\n");看*\n");
printf("\t\t\tB.增添*\n");
printf("\t\t\tC.删除*\n");
printf("\t\t\tD.查询*\n");
printf("\t\t\tE.修改*\n");
printf("\t\t\tF.保存*\n");
printf("\t\t\t=========================================\n");
printf("\t\t\n请选择(Choice)\n\n\t\t注:
输入a~h或A~H的字母:
");
scanf("%c",&grade);
switch(grade)人类b.商务类w.办公类");
scanf("%s",searchkind);
for(j=0;j<=i;j++)
{
if(strcmp(searchkind,friends[j].kind)==0)
{
Show(j);
}
}getchar();
break;
case'e':
case'E':
printf("\n\t请输入要修改记录的相关姓名:
");
gets(searchname);
scanf("%s",searchname);
for(j=0;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0)
{
Modify(j);
}
}
if(i<1)
{printf("\n没有您所要修改的记录-Norecords");
printf("\n请按回车键继续!
");
getchar();
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case'f':
case'F':
system("cls");
Save();
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
default:
printf("\n\t输入有误,请输入正确的序列号!
");
printf("\n请按回车键继续!
");
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
}
}while
(1);
}
上述三部分实现整个程序的功能。
四程序源代码
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
voidMenu();
FILE*fp;
inti;
structaddress
{chara[40];
};
structffriend
{intnum;
charname[20];
charkind[20];
longtelephone;
structaddressaddress;
}
friends[50];
voidLoad()
{
intj;
longk;
fp=fopen("","a+");
if(fp!
=NULL)
{
for(i=1;i<50;i++)
{
j=fgetc(fp);
if(j==EOF)
return;
k=i-1;
fseek(fp,k*sizeof(structffriend),SEEK_SET);
fread(&friends[i],sizeof(structffriend),1,fp);
}
}
else
{
fp=fopen("","w");
i=1;
}
system("cls");
}
voidShow(intj)
{
system("cls");
printf("\n\n\t编号-Nnumber:
%3d",friends[j].num);
printf("\n\t姓名-Name:
%-20s",friends[j].name);
printf("\n\t性别-kind:
%s",friends[j].kind);
printf("\n\t联系电话-Telephone:
%-13ld",friends[j].telephone);
printf("\n\temail-address:
%-40s",friends[j].;
}
voidAppend(intj)
{
system("cls");
friends[j].num=j;
printf("\n\t\t\t序号-Number:
%d",j);
printf("\n\t\t\t姓名-Name:
");
scanf("%s",friends[j].name);
printf("\t\t\t类别-kind:
");
scanf("%s",&friends[j].kind);
printf("\t\t\t联系电话-telephone:
");
scanf("%ld",&friends[j].telephone);
while(friends[j].telephone<0||friends[j].telephone>)
{
printf("电话号码不合法!
请重新输入:
");
scanf("%ld",&friends[j].telephone);
}
printf("\t\t\temail-Address:
");
scanf("%s",friends[j].;
getchar();
}
voidDelete()
{
intk;intj;
system("cls");
printf("\n\tDelete序号-Number:
");
scanf("%d",&k);
if(k<=i)
{
for(j=k;j
{
strcpy(friends[j].name,friends[j+1].name);
strcpy(friends[j].kind,friends[j+1].kind);
friends[j].telephone=friends[j+1].telephone;
strcpy(friends[j].,friends[j+1].;
}
i--;
}
else
{
printf("输入的序号太大!
");
}
}
voidModify(intj)
{
system("cls");
Append(j);
}
voidSave()
{
inti,j;
system("cls");
printf("\n\n\t\t请耐心等待,信息正在保存!
\n");
printf("\n\n\n\n\t\t\tSaving");
for(i=0;i<20;i++)
{
Sleep(300);
printf(".");
}
printf("\n\n信息已经保存成功!
\n");
fp=fopen("","w");
for(j=1;j<=i;j++)
{
fwrite(&friends[j],sizeof(structffriend),1,fp);
}
fclose(fp);
}
voidmain()
{
intj;chara;charx;
chargrade;
charsearchkind[20];
charsearchname[20];
i--;
system("cls");
do
{
printf("\n\n\t\t\t=========================================\n");
printf("\t\t\t\t手机通讯录\n");
printf("\t\t\t\t功能选择\n");
printf("\t\t\t=========================================\n");
printf("\t\t\tA.查看*\n");
printf("\t\t\tB.增添*\n");
printf("\t\t\tC.删除*\n");
printf("\t\t\tD.查询*\n");
printf("\t\t\tE.修改*\n");
printf("\t\t\tF.保存*\n");
printf("\t\t\t=========================================\n");
printf("\t\t\n请选择(Choice)\n\n\t\t注:
输入a~h或A~H的字母:
");
scanf("%c",&grade);
switch(grade)
{
case'a':
case'A':
j=0;
while(getchar()!
=0x1b&&j<=i)
{
Show(j++);
printf("\n\n请按回车键继续!
");
}
while(getchar()==0x1b||j>i)
{
printf("\n\t空文档,无任何记录-EmptyNote\n");
printf("\n\n请按回车键继续!
");
getchar();
break;
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case'b':
case'B':
while(i<=50)
{
i++;
Append(i);
printf("\t是否继续增加?
(y/n)");
a=getchar();
if(a=='n')
break;
}
if(i==51)
printf("\n\t文档已满,无法增加记录-notefull");
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
getchar();
break;
case'c':
case'C':
Delete();
if(i<1)
printf("\n没有记录-Norecords\n");
printf("\n\n请按回车键继续!
");
getchar();
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case'd':
case'D':
system("cls");
printf("\n\t请输入要查询记录的相关类别:
p.个人类b.商务类w.办公类");ind)==0)
{
Show(j);
}
}getchar();
break;
case'e':
case'E':
printf("\n\t请输入要修改记录的相关姓名:
");
gets(searchname);
scanf("%s",searchname);
for(j=0;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0)
{
Modify(j);
}
}
if(i<1)
{printf("\n没有您所要修改的记录-Norecords");
printf("\n请按回车键继续!
");
getchar();
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case'f':
case'F':
system("cls");
Save();
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
default:
printf("\n\t输入有误,请输入正确的序列号!
");
printf("\n请按回车键继续!
");
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
}
}while
(1);
}
五流程图
六运行截图
1主界面:
2按顺序添加数据:
3按顺序查看:
4查询,输入要查询的类别:
显示该种类的所有信息
5删除(按序号):
6修改,输入要修改的的人名:
输入新的数据
7保存:
七个人心得与总结
这次课程设计是大学以来的第一次课程设计。
也是锻炼我们动手能力的一次很好的机会。
但是,万事开头难。
这次C语言的程序设计,对于我来说是一个挑战。
刚开始几乎不知道该从何下手。
后来通过一些简单题目的编写才有了思路。
在整个程序的编写过程中在很多地方都遇到了困难。
例如,对一些算法的设计有很大漏洞等。
后来通过翻阅很多书籍,以及同学的讨论下,在克服了重重的困难后,终于成功的运行了课程设计所要求的程序。
这次程序设计是在C语言程序的思想下第一次整体完成的程序设计,所以还有很多的不完美的地方,希望老师予以指出和改正。
这次的课程设计虽然一些模块,函数的程序是参照书上和网上完成的。
但大部分还是自己编写和修改的。
所以这次的程序设计让我受到了很大锻炼,也有了很多感悟。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学到的理论知识与实践相结合起来,从理论中得出结论,将结论辅助与理论,才能真正学到知识并写出有用的程序来为他人服务,更为社会服务,所以提高自己的实际动手能力和独立思考的能力是十分重要的。
同时通过这次设计,也让我体验到了编程的的乐趣。
总之,这次的课程设计是一次宝贵的经验,它不仅锻炼了我动手的能力,也锻炼了我克服困难,持之以恒的精神。
既收获了知识,又磨练了意志。
我想这第一次的课程设计必将成为我人生道路上一段美好的回忆。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 手机 通讯录 管理 系统