学生通讯录管理系统设计数据结构.docx
- 文档编号:15466488
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:19
- 大小:158.55KB
学生通讯录管理系统设计数据结构.docx
《学生通讯录管理系统设计数据结构.docx》由会员分享,可在线阅读,更多相关《学生通讯录管理系统设计数据结构.docx(19页珍藏版)》请在冰点文库上搜索。
学生通讯录管理系统设计数据结构
课程设计报告
(本科)
课程:
高级语言程序设计
学号:
1310411023
姓名:
吴志友
班级:
2013级计算机科学与技术
教师:
冯凤
时间:
2014年1月
计算机科学与技术系
设计名称:
学生通讯录管理系统设计
设计内容、目的与要求:
设计内容:
设计并实现学生通讯录管理系统
目的与要求:
设计学生通讯录管理系统,实现如下功能:
1、能建立、修改和增删学生通讯录;
2、能够按照多种方式进行查询;
3、通讯录数据类型定义为结构体类型;
4、采取文件存取数据。
计划与进度安排:
12月20日至12月22日:
研究题目的要求及所给条件,综合分析实验应该达到的目标,探讨实验需要使用的方法和解决此问题的实际情况,图书馆查阅相关资料、上网搜集资料,综合比较;
12月23日至12月25日:
设计解题的方法和具体步骤,并进行分布思考,利用调用函数,将程序模块化,在进行各个模块的设计和制作方案,绘制实验的流程图,再将各个模块综合,将调用函数运用于主函数中,绘制主函数的流程图,综合运用所有的调用函数;
12月26日至12月28日:
查阅书籍,将之前的方案的知识熟悉并记录一些需要运用的知识点;
12月29日至12月31日:
依据之前绘制的流程图,将划分的各个调用函数编写出实验的程序,再将所编的调用函数置于主函数中,进行综合;
1月1日至1月2日:
先将编写的调用函数置于主函数中,进行单独的调试和运行,再将源程序输入编译系统,进行调试;
1月3日至1月5日:
完善程序,填写课程设计报告和修改实验报告和完善,准备验收。
设计过程、步骤:
1.使用typedefstruct定义结构体类型,结构体中包括学生编号、学生姓名、学生电话号码、学生邮箱、学生年龄和学生的住址;其程序段为:
typedefstruct
{
charscore;
charname[10];
charnum[15];
charemail[20];
charage[8];
charadds[20];
}Person;
2.首先使用调用函数,使用了菜单选项函数menu_select(),进行编译界面菜单,在编译中使用了system(“cls”)命令,进行清屏工作,再利用了各种输出命令;
3.运用调用函数Input(),输入学生的基本信息,例如:
编号、姓名、年龄等信息,利用数组逐一进行输入,以回车键为输入结束;最后可以选择是否继续添加通讯录成员;
4显示记录,调用Display()函数,在调用函数中使用了for语句,在for语句中又嵌入了if语句,用于输出一个具有良好的界面;
5、调用一个删除记录的函数Delete_a_record(),利用数组,使用while循环语句,在循环语句中嵌套if选择语句,调用strcmp函数比较字符串的大小,再在函数中使用for循环,调用strcpy函数,若存在此人则将它从它以后的每一道付给前一个达到目的;
6、调用查询函数Query_a_record(),使用if语句来进行选择查询通讯录的方式,按1以姓名查询,按2以号码查询,按3以地址查询,再在if语句中嵌套if语句进行当输入错误时输出“通讯录中没有此人”的提示语;
7、调用修改函数Change(),在函数中使用while循环语句,在循环中嵌套使用if语句,用于当修改的人不在通讯录中时,输出“通讯录中没有此人!
”的提示语句;
8、调用函数WritetoText(),用于保存通讯录中的数据,在函数中运用了文件进行保存,并定义了一个指向文件型数据的指针变量FILE*fp,利用文件进行存储,当保存成功后输出“保存到文件”和“请输入所保存的文件名”,再在后面使用if函数及while函数进行操作,之后使用fclose(fp)关闭文件,之后输出提示字样“保存成功”;
9、最后用主函数将各个调用函数综合起来,在主函数中使用switch语句,利用选择的case进行选择相应的数目,然后执行相应的操作,当输入的数字为0时,退出,此时输出“谢谢使用,再见!
”,使用system(“pause”)语句进行清屏并提示“请按任意键退出”,是界面友好,易于操作。
结果与分析:
1、学生通讯录管理系统的界面:
2、学生通讯录管理系统的添加记录:
3、学生通讯录管理系统显示记录:
4、学生通讯录管理系统删除记录:
5、学生通讯录管理系统查询记录:
6、学生通讯录管理系统修改记录:
7、学生通讯录管理系统保存记录:
8、学生通讯录管理系统退出程序:
9学生通讯录管理系统以文件的形式保存:
分析:
此学生通讯录管理系统界面友好,清楚可见,易于操作.可以根据学生通讯录管理系统的字幕提示进行实验操作,可以进行通讯录的添加、通讯录的显示、通讯录的删除、通讯录的查询和通讯录的保存。
设计体会与建议:
吴志友:
往事如观流水,来者如昂高山!
转眼间学习C语言也有半年了。
这次的程序实设计实验是对自己进入大学以来学习C语言结果的一次大检验。
自己动手,自己发现和解决问题。
发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。
相信在以后的学习能够解决好它们。
但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。
当我选择通讯录这个题目时,一开始觉得有很大的难度,感觉自己可能无法完成,但是在慢慢琢磨之后,觉得这个或许自己可以完成,于是改变了思路。
当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。
另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。
虽然这个程序不是我自己亲自编写的,但是在此次课程设计中,我知道了许多平时不注意的事项,全面对C语言进行了整合和复习,受益颇深。
还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序。
总体来说,这次C语言课程设计还是比较顺利的,虽然最终程序还存在一些不足,但能在有限的时间里完完整整的完成任务我还是比较高兴的。
附录:
#include
#include
#include
typedefstruct
{
charscore;/*编号*/
charname[10];/*姓名*/
charnum[15];/*号码*/
charemail[20];/*邮箱*/
charage[8];/*年龄*/
charadds[20];/*住址*/
}Person;
Personpe[80];
intmenu_select()
{
charc;
do{
system("cls");
printf("\t\t*****通讯录*****\n");
printf("\t\t┌───────┐\n");
printf("\t\t│1.添加记录│\n");
printf("\t\t│2.显示记录│\n");
printf("\t\t│3.删除记录│\n");
printf("\t\t│4.查询记录│\n");
printf("\t\t│5.修改记录│\n");
printf("\t\t│6.保存记录│\n");
printf("\t\t│0.退出程序│\n");
printf("\t\t└───────┘\n");
printf("\t\t请您选择(0-6):
");
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
intInput(Personper[],intn)
{
inti=0;
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t编号:
");
scanf("\t%d",&per[n+i].score);
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
printf("\t年龄:
");
scanf("\t%s",per[n+i].age);
printf("\t电话号码:
");
scanf("\t%s",per[n+i].num);
printf("\t通讯住址:
");
scanf("\t%s",per[n+i].adds);
printf("\t电子邮箱:
");
scanf("\t%s",per[n+i].email);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
voidDisplay(Personper[],intn)
{
inti;
printf("----------------------------------------------------------------------\n");/*格式*/
printf("编号姓名年龄电话号码通讯地址电子邮箱\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i { printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email); if(i>1&&i%10==0) { printf("\t-----------------------------------\n"); printf("\t"); system("pause"); printf("\t-----------------------------------\n"); } } printf("----------------------------------------------------------------------\n"); system("pause"); } intDelete_a_record(Personper[],intn) { chars[20]; inti=0,j; printf("\t请输入想删除记录中的名字: "); scanf("%s",s); while(strcmp(per[i].name,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return(n); } for(j=i;j { strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); strcpy(per[j].email,per[j+1].email); per[j].score=per[j+1].score; } printf("\t\t\t已经成功删除! \n"); return(n-1); } voidQuery_a_record(Personper[],intn) { intm; printf("\t\n请选择查询方式: \n"); printf("\t┌──────┐\n"); printf("\t│1------姓名│\n"); printf("\t│2------电话│\n"); printf("\t│3------地址│\n"); printf("\t│4------返回│\n"); printf("\t└──────┘\n"); printf("请选择: "); scanf("%d",&m); while(m! =1&&m! =2&&m! =3&&m! =4) { printf("输入错误,请重新选择: "); scanf("%d",&m); } if(m==1) { chars[20]; inti=0; printf("\t请输入想查询的姓名: "); scanf("\t%s",s); while(strcmp(per[i].name,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t此人编号: %d\n",per[i].score); printf("\t此人年龄: %s\n",per[i].age); printf("\t电话号码: %s\n",per[i].num); printf("\t通讯地址: %s\n",per[i].adds); printf("\t电子邮箱: %s\n",per[i].email); }; if(m==2) { chars[20]; inti=0; printf("\t请输入想查询的电话: "); scanf("\t%s",s); while(strcmp(per[i].num,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t此人编号: %d\n",per[i].score); printf("\t此人姓名: %s\n",per[i].name); printf("\t此人年龄: %s\n",per[i].age); printf("\t通讯地址: %s\n",per[i].adds); printf("\t电子邮箱: %s\n",per[i].email); }; if(m==3) { chars[20]; inti=0; printf("\t请输入想查询的地址: "); scanf("\t%s",s); while(strcmp(per[i].adds,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t此人编号: %d\n",per[i].score); printf("\t此人姓名: %s\n",per[i].name); printf("\t此人年龄: %s\n",per[i].age); printf("\t电话号码: %s\n",per[i].num); printf("\t电子邮箱: %s\n",per[i].email); }; } voidChange(Personper[],intn) { chars[20]; inti=0; printf("\t请输入想修改的记录中的名字: "); scanf("%s",s); while(strcmp(per[i].name,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t编号: "); scanf("\t%d",&per[i].score); printf("\t姓名: "); scanf("\t%s",per[i].name); printf("\t年龄: "); scanf("\t%s",per[i].age); printf("\t电话号码: "); scanf("\t%s",per[i].num); printf("\t通讯住址: "); scanf("\t%s",per[i].adds); printf("\t电子邮箱: "); scanf("\t%s",per[i].email); printf("\t修改成功! "); } voidWritetoText(Personper[],intn) { inti=0; FILE*fp;/*定义文件指针*/ charfilename[20];/*定义文件名*/ printf("\t保存到文件\n");/*输入文件名*/ printf("\t请输入所保存的文件名: "); scanf("\t%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\t无法打开文件\n"); system("pause"); return; } fprintf(fp,"******************************************通讯录******************************************\n"); fprintf(fp,"编号姓名年龄电话号码通讯地址电子邮箱\n"); fprintf(fp,"------------------------------------------------------------------------------------------\n"); while(i { fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email); i++; } fprintf(fp,"------------------------------------------------------------------------------------------\n"); fprintf(fp,"***************************************共有%d条记录****************************************\n",n); fclose(fp);/*关闭文件*/ printf("保存成功! \n"); } voidmain()/*主函数*/ { intn=0; for(;;) { switch(menu_select()) { case1: printf("\n\t添加记录到通讯录\n");/*添加记录*/ n=Input(pe,n); break; case2: printf("\n\t\t\t通讯录记录表\n");/*显示记录*/ Display(pe,n); break; case3: printf("\n\t从通讯录中删除记录\n"); n=Delete_a_record(pe,n);/*删除记录*/ printf("\t"); system("pause"); break; case4: printf("\n\t在通讯录中查找记录\n"); Query_a_record(pe,n);/*查找记录*/ printf("\t"); system("pause"); break; case5: printf("\n\t修改通讯录中的记录\n"); Change(pe,n);/*修改数据*/ printf("\t"); system("pause"); break; case6: printf("\n\t保存功能\n"); WritetoText(pe,n);/*保存数据*/ printf("\t"); system("pause"); break; case0: printf("\n\t\t谢谢使用,再见! \n");/*结束程序*/ printf("\n\t\t"); system("pause"); exit(0); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 通讯录 管理 系统 设计 数据结构