C语言课程设计报告郭菲菲.docx
- 文档编号:29856060
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:28
- 大小:358.37KB
C语言课程设计报告郭菲菲.docx
《C语言课程设计报告郭菲菲.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告郭菲菲.docx(28页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告郭菲菲
浙江传媒学院
课程设计(实训)报告
学院:
电子信息学院专业:
广播电视工程
班级:
10级2班学号:
100701234
姓名:
郭菲菲课题:
通讯录管理
指导教师:
裘姝平报告成绩______________
_
日期:
2011年4月22日
目录
一、课程设计目的……………………………………………3
二、课程设计要求……………………………………………3
三、设计题目分析……………………………………………3
3.1题目简介…………………………………………………3
3.2设计要求…………………………………………………3
四、课程设计内容………………………………………………3
4.1总体设计…………………………………………………3
4.2详细设计…………………………………………………3
4.3调试与测试………………………………………………13
五、设计心得与总结……………………………………………21
六、建议…………………………………………………………22
七、评阅意见……………………………………………………22
参考书目…………………………………………………………22
一、课程设计目的
通过对C语言编程的训练,进一步了解编程在日常工作生活和娱乐生活的应用,提高自身的动手能力和实践能力,养成善思考的好习惯,正直意义上将理论与实践相结合。
二、课程设计要求
自主自立完成编程题目。
多思考、勤发问,善于和同学交换意见,有的放矢的查询自己想要的相关知识。
但是一定要有自己的想法,不得抄袭。
三、设计题目分析
3.1题目简介:
题目十二:
设计一个学生通讯录。
3.2设计要求
要求具有创建,添加,查找,修改,删除的功能。
四、课程设计内容
4.1总体设计:
系统程序设计图
;
4.1详细设计
通讯录源代码:
/*编程建立一通讯簿,存放有姓名、电话号码、电子邮箱地址、住址,然后对通信簿进行多种方式的查找、添加、修改及删除。
*/
#include
#include
#include
structperson/*定义结构体数组*/
{
charname[15];
charnum[20];
charmail[20];
};
charfilename[50];
FILE*fp;
voidcreat();/*新建函数声明*/
voidoutput();/*输出函数(可以输出原有通讯录中的所有内容)*/
voidsearch();/*查找函数*/
voidadd();/*添加函数*/
voidrevise();/*修改函数*/
voiddel();/*删除函数*/
voidmain()
{intj=1;
while(j)/*使得程序可以回到主界面*/
{
charch;
system("color9E");/*调用system(color)函数可以改变控制台的前景色和背景,color后面的9是背景色代号,E是前景色代号.*/
intm,n;
printf("\n
☆☆☆☆☆☆☆☆
★★★★★
☆☆祝你快乐☆☆
★★★★
☆☆☆☆
★★★★
☆☆☆☆
★★★★
☆☆
欢迎进入★★★通讯录系统★★★\n");
printf("\npressEntertocontinue:
\n");
scanf("%c",&ch);
system("cls");/*运行前清屏屏幕上显示的所有字符清除。
。
但是,它不会删除内存中的内容。
它会释放掉指向屏幕显示内容中的数据栈的指针。
这样相当于是将这些内容当做乱码丢弃掉。
*/
system("color3A");/*清屏后换色*/
printf("\n\n\n**********<<创建新的通讯录>>*******请按―――――①");
printf("\n\n\n\n\n*********<<打开原有通讯录>>*********请按―――――②\n");
printf("\n\n\n\n\n**********<<退出系统>>********请按―――――0\n");
scanf("%d",&m);system("cls");
switch(m)/*运用swich--case语句实现选择操作*/
{
case1:
creat();/*调用新建函数,创建一个新的通讯录*/
break;system("cls");
case2:
{
printf("\n\n\n\n请输入通讯录名称:
");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
printf("\n\n\n\n没有这个通讯录\n\n");
}
break;
system("cls");
case0:
exit(0);;/*终止程序的执行,清除和关闭所打开的所有文件。
*/
}
inti=1;
while(i)/*使得任意操作完成后都可以再次回到选择界面重新选择*/
{
system("color4D");
printf("\n想要添加,*********请按①");
printf("\n想要查找,***********请按②");
printf("\n想要修改,***********请按③");
printf("\n想要删除,***********请按④");
printf("\n想要输出,***********请按⑤");
printf("\n想要回到主界面,********请按⑥");
printf("\n想要退出,***********请按0\n");
scanf("%d",&n);
system("color3A");
if(n>=0&&n<=6)
{
switch(n)
{
case1:
system("cls");system("color3C");add();/*调用添加函数*/
break;
case2:
system("cls");system("color6A");search();/*调用查找函数*/
break;
case3:
system("cls");system("color6B");revise();/*调用修改函数*/
break;
case4:
system("cls");system("color5B");del();/*调用删除函数*/
break;
case5:
system("cls");system("colorD2");output();/*调用输出函数*/
break;
case6:
i=0;/*使得程序跳出while语句从而回到主界面*/
break;
case0:
exit(0);
break;
}
printf("\n\n欢迎使用,您还可以再次选择
╭︿︿︿╮
{/-⊙⊙-/}
((oo))
︶︶︶:
");
}
else
printf("\n\n很抱歉,您的操作错误,请再次选择
╭︿︿︿╮
{/-●●-/}
((oo))
︶︶︶:
");
}
}
}
voidcreat()
{system("color5F");
structpersonone;
printf("\n\n\n\n\n\n请输入您要建立的通讯簿名:
");
scanf("%s",filename);system("cls");system("colorD2");
if((fp=fopen(filename,"a+"))==NULL)
{
printf("\n\n\n对不起,不能建立通讯簿!
");
exit(0);
}
fprintf(fp,"%-10s%-20s%-30s%\n","姓名","学号","电子邮箱");/*将输入的信息通过fprintf文件函数输入到新建的文件中*/
printf("\n\n\n\n请输入姓名、学号、电子邮箱(以0结束)\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))/*运用strcmp函数比较输入的姓名和字符0相比较,若相同,则跳出程序,即:
以字符0为结束的标志*/
{scanf("%s%s",one.num,one.mail);
fprintf(fp,"%-10s%-20s%-30s%\n",one.name,one.num,one.mail);
scanf("%s",one.name);
}system("cls");system("color1D");
fclose(fp);/*当创建完毕则关闭文件*/
}
voidoutput()
{structpersonone;/*定义结构体变量*/
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯录!
");
exit(0);
}
printf("\n\n\n\n\n%110s\n","通******讯******簿\n\n\n");
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);/*运用fscanf函数读入磁盘文件*/
printf("%-10s%-20s%-30s%\n",one.name,one.num,one.mail);
}
fclose(fp);
}
voidadd()
{
system("color5D");
structpersonone;
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n\n\n对不起,您不能打开通讯录!
");
exit(0);
}
printf("\n\n请输入添加的姓名、学号、电子邮箱\n");
scanf("%s%s%s",one.name,one.num,one.mail);system("cls");system("color9A");
fprintf(fp,"%-10s%-20s%-30s%\n",one.name,one.num,one.mail);
fclose(fp);
}
voidsearch()
{system("color2A");
intn,k=0;
charnamekey[15],numkey[15],mailkey[30];
structpersonone;
printf("\n\n\n如想按姓名查找,*********请按①");
printf("\n\n如想按学号查找,********请按②");
printf("\n\n如想按电子邮箱查找,*********请按③");
scanf("%d",&n);system("cls");
if(n>=1&&n<=3)
{
switch(n)
{
case1:
{
printf("\n\n请输入您要查找的姓名:
\n");
scanf("%s",namekey);system("cls");
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n\n对比起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(namekey,one.name))
{
printf("\n\n\n◤◤◤◤查找成功◢◢◢◢!
其信息如下:
");
printf("\n\n%-10s%-18s%-30s",one.name,one.num,one.mail);
k=1;
}
}
if(!
k)
{printf("\n\n\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
}
}
break;
case2:
{
printf("\n\n\n请输入您要查找的学号:
");
scanf("%s",numkey);system("cls");
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n\n\n对不起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(numkey,one.num))
{
printf("\n\n\n\n◤◤◤◤查找成功◢◢◢此人信息如下:
");
printf("\n%-10s%-18s%-30s",one.name,one.num,one.mail);
k=1;
}
}
if(!
k)
printf("\n\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
}
break;
case3:
{
printf("\n\n\n请输入您要查找的电子邮件:
");
scanf("%s",mailkey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n\n对不起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(mailkey,one.mail))/*调用strcmp函数进行比较,若查找成功,则函数值为真。
继续执行下面操作*/
{
printf("\n\n\n\n◤◤◤◤◤查找成功◢◢◢◢信息如下:
");
printf("\n%-10s%-18s%-30s",one.name,one.num,one.mail);
k=1;
}
}
if(!
k)/*若查找失败,则表达式为真。
执行下面操作*/
printf("\n\n\n●●●对不起,通讯簿中没有此人的记录。
●●●");
fclose(fp);
}
break;
}
}
elseprintf("\n\n\n●●●●●●请重新输入●●●●●");
fclose(fp);
}
voidrevise()
{system("color2A");
intn,k=0;
longoffset;
charnamekey[15],numkey[15],mailkey[30];
structpersonone;
printf("\n\n\n如想按姓名修改,*********请按①");
printf("\n\n如想按学号修改,********请按②");
printf("\n\n如想按电子邮箱修改,*********请按③");
scanf("%d",&n);system("cls");
if(n>=1&&n<=3)
{
switch(n)
{
case1:
{
printf("\n\n\n◆◆◆请输入您要修改的姓名◆◆◆◆:
");
scanf("%s",namekey);system("cls");
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n\n\n对不起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))/*feof()是文件结束检测函数,如果没有结束,返回值是0,结束了是1由于feof(fp)返回0才是没有结束,所以通常写成while(!
feof(fp)),这样使得没有结束时进行循环.*/
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(namekey,one.name))
{
k=1;
break;
}
}break;
}break;
case2:
{
printf("\n\n\n◆◆◆请输入您要修改的学号◆◆◆◆:
");
scanf("%s",numkey);system("cls");
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n\n\n对不起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(numkey,one.num))
{
k=1;
break;
}
}break;
}break;
case3:
{printf("\n\n\n◆◆◆请输入您要修改的电子邮箱◆◆◆◆:
");
scanf("%s",mailkey);system("cls");
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n\n\n对不起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(mailkey,one.mail))
{
k=1;
break;
}
}break;
}break;
}
if(k)
{printf("\n\n\n★★★★查找成功,您要的信息如下:
");
printf("\n%-10s%-18s%-30s",one.name,one.num,one.mail);
printf("\n\n\n▼▼▼▼请输入新姓名、学号、电子邮件▼▼▼▼:
\n");
scanf("%s%s%s",one.name,one.num,one.mail);system("cls");
fseek(fp,offset,SEEK_SET);/*在指定位置写入块数据:
打开文件方式中有一个比较特别的,如果,某文件中已经有了一部分数据,你需要继续在上面添加数据,但是是在指定位置添加,也就是说,仍然需要通过fseek找到写入位置,然后再fwrite,这时候需要以"rb+"方式打开。
而不能以"a"或者"ab+"方式。
以"a"方式打开,fseek函数不起作用。
*/
printf("%ld",ftell(fp));/*ftell(fp)是返回当前文件指针停留的位置,fprintf是格式输出到流,这里的意思就是将你打开的my.tex.tex写入123456,然后读取6这里的文件指针并保存到这个文件的末尾.也是1234566*/
fprintf(fp,"%-10s%-20s%-30s\n",one.name,one.num,one.mail);
}
else
printf("\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
}
}
voiddel()
{system("color8C");
intm,k=0,n;
longoffset;
charnamekey[15],numkey[15];
structpersonone;
printf("\n\n\n如想按姓名删除,*********请按①");
printf("\n\n如想按学号删除,********请按②");
scanf("%d",&n);system("cls");
if(n>=1&&n<=2)
{
switch(n)
{
case1:
{
printf("\n\n\n◆◆◆请输入您要删除的姓名◆◆◆◆:
");
scanf("%s",namekey);system("cls");
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n\n\n对不起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(namekey,one.name))
{
k=1;
break;
}
}break;
}break;
case2:
{
printf("\n\n\n◆◆◆请输入您要删除的学号◆◆◆◆:
");
scanf("%s",numkey);system("cls");
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n\n\n对不起,不能打开通讯簿!
");
exit(0);
}
while(!
feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.num,one.mail);
if(!
strcmp(numkey,one.num))
{
k=1;
break;
}
}break;
}break;
if(k)
{printf("\n\n\n●●●●查找成功,您要信息如下");
printf("\n%-10s%-20s%-30s",one.name,one.num,one.mail);
printf("\n\n*******确定删除,请按①\n\n\n********不删除,请按②:
");
scanf("%d",&m);system("cls");
if(m)
{
fseek(fp,offset,SEEK_SET);
fprintf(fp,"%-10s%-20s%-30s\n","","","");
}
}
els
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 菲菲