计算机同学通讯录信息管理.docx
《计算机同学通讯录信息管理.docx》由会员分享,可在线阅读,更多相关《计算机同学通讯录信息管理.docx(33页珍藏版)》请在冰豆网上搜索。
计算机同学通讯录信息管理
题目:
同学通讯录信息管理
一、课程设计时间
2010~11第2学期第15周,即6月13日~6月17日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
能够对同学的通讯录信息进行数字化管理,人数不少于五人。
通讯信息应保存到文件myfile.dat中。
三、课程设计要求
程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“同学信息录入”、“同学信息修改”“同学信息查询(根据姓名,或编号等)”、“显示全部同学信息”、“退出”5项
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩
六、教师评语
一、需求分析1
二、设计分析3
三、主要界面截图12
四、技术要点16
五、个人总结17
六、参考文献19
七、源程序19
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,
其中每个程序对应一个函数,他们的功能分别是:
同学信息录入,同学信息修改,同学信息查询,显示全部同学信息以及退出保存。
在这些函数中,前两个函数的实现是整个程序的核心,较为复杂。
1.同学信息录入主要实现程序最初运行时学生通讯录的录入以及其后的运行中学生通讯录的追加功能。
2.同学信息修改实现的功能是将错误的同学信息进行修改,加以完善
3.显示学生通讯录主要功能是将学生的全部通讯录信息显示出来
。
4同学信息查询实现的功能是按照学号或姓名对学生的通讯录记录进行查询。
5保存退出实现功能为将通讯录进行保存到文件中,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个学生记录都包含学号、姓名、电话、地址、邮编等,在程序当中,将学生通讯录类型定义为结构体类型,添加以及追加的学生通讯录信息现存入结构体数组中,再在save函数中写入D盘的myfile.dat文件中,其他函数每次对学生通讯录的访问,其数据来源都是结构体数组并可以对学生数据进行永久保存。
二、设计分析
主要有6个功能模块,每个模块对应一个C语言自定义函数。
这些函数原型及其功能简述如下;
录入函数(newrecord),查询函数(searchmenu),修改函数(change)添加函数(addrecord),写入函数(writetofile),以及显示目录的主函数(main)。
程序总体结构流程
1、主函数流程
voidmain()
{
readfromfile();
while
(1)
{
mainmenu();
}
}
主函数流程图
2、主要功能流程
(1、)voidmainmenu()//主菜单
{
charchoic;
system("cls");
printf("\n\t\t********************主菜单********************");
printf("\n\t\t***********1-同学信息录入2-同学信息查询**************");
printf("\n\t\t***********3-同学信息修改4-显示全部同学信息*************");
printf("\n\t\t***********5-保存退出**************************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:
");
choic=getch();
switch(choic)
{
case'1':
newrecord();break;
case'2':
searchmenu();break;
case'3':
change();break;
case'4':
showall();break;
case'5':
writetofile();break;
default:
mainmenu();
}
}
执行主菜单流程图
(2)学生信息录入函数(newrecord)
该函数就是将学生通讯录信息存在结构体中,实现多名学生信息录入,具体程序如下
voidnewrecord()//添加纪录
{
printf("\n\t\t****************请输入学生信息****************\n");
printf("\n\t\t输入学号:
");
scanf("%s",&student[num].id);
printf("\n\t\t输入姓名:
");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:
");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:
");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:
");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:
");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否继续添加?
(Y/N):
");
if(getch()=='y')
newrecord();
return;
}
录入同学信息函数
(3)查询函数(search)
该函数是重要的部分,主要的功能是输入学生的学号或是姓名后在结构体中将会出现想要查找的学生通讯录信息,如果没有有提示,找到后即会显示,然后提示,按任意键返回主菜单,继续查找。
具体流程如下;
voidsearchbyname()//按姓名查询
{
intmark=0;
inti;
inta=0;
printf("\n\t\t*****************按姓名查找*******************");
charname[20];
printf("\n\t\t请输入姓名:
");
scanf("%s",name);
for(i=a;i{
if(strcmp(student[i].name,name)==0)
{
printf("\n\t\t*************以下是您查找的学生信息***********");
printf("\n\t\t学号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t************************************************");
mark++;
if((i+1){
printf("\n\t\t是否继续查找相同名字的学生信息:
(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
else
return;
}
else
{
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
}
if(mark!
=0)
{
printf("\n\t\t没有相同姓名的学生纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
else
{
printf("\n\t\t没有相同姓名的学生纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
voidsearchbyid()//按学号查询
{
intmark=0;
inti;
inta=0;
printf("\n\t\t******************按学号查找******************\n");
charid[10];
printf("\n\t\t请输入学号:
");
scanf("%s",id);
for(i=0;i{
if(strcmp(student[i].id,id)==0)
{
printf("\n\t\t**************以下是您查找的学生信息**********");
printf("\n\t\t学号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:
");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf("\n\t\t没有改学生的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
(4)学生信息修改函数
该函数的作用是将错误的学生通讯信息进行修改然后,将新的姓名、学号、电话号、地址等分别存到结构体里,具体程序如下
voidchange()//按学号修改
{
intmark=0;
inti;
inta=0;
charid[10];
printf("\n\t\t请输入要修改学生学号:
");
scanf("%s",id);
for(i=0;i{
if(strcmp(student[i].id,id)==0)
{
printf("\n\t\t**************以下是您查找的学生信息**********");
printf("\n\t\t学号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t************************************************");
mark++;
printf("\n\t\t****************请输入新的学生信息****************\n");
printf("\n\t\t输入学号:
");
scanf("%s",&student[i].id);
printf("\n\t\t输入姓名:
");
scanf("%s",&student[i].name);
printf("\n\t\t输入电话:
");
scanf("%s",&student[i].phone);
printf("\n\t\t输入地址:
");
scanf("\n\t\t%s",&student[i].adress);
printf("\n\t\t输入e-mail:
");
scanf("%s",&student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t修改成功!
\n\t\t");
printf("\n\t\t按任意键返回主菜单:
");
getch();
return;
}
}
if(mark==0)
{
printf("\n\t\t没有该学生的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
(5)显示全部同学信息(showall)
该函数的主要作用是显示出所有同学的通讯录信息,按任意键逐一显示。
显示结束后可以按任意键返回主菜单,具体流程如下;
voidshowall()//显示所有
{
inti;
system("cls");
if(num!
=0)
{
printf("\n\t\t***************以下为通讯录所有信息************");
for(i=0;i{
printf("\n\t\t学号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\t邮编:
%s",student[i].postcode);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\t\t");
if(i+1{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:
");
getch();
return;
}
(6)退出保存(writetofile)
该函数是通过FILE*fp=fopen()将录入学生信息写入只写文件后退出,操作方便,具体的程序如下:
voidwritetofile()//写入文件
{
inti;
if((fp=fopen("myfile.txt","wb"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for(i=0;i{
if(fwrite(&student[i],sizeof(structrecord),1,fp)!
=1)
{
printf("\n\t\t写入文件错误!
\n");
}
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
}
三、主要界面截图
图1程序主菜单
图二录入同学通讯录信息
图三所有通讯录信息
图四程序初始界面
四、技术要点
本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,同学信息录入、同学信息修改是程序中较为核心的部分,下面分别进行说明。
1、同学信息录入
添加学生通讯录是将学生通讯录信息以结构体数组的形式储存到结构体数组中去。
具体的程序段如下:
voidnewrecord()//添加纪录
{
printf("\n\t\t****************请输入学生信息****************\n");
printf("\n\t\t输入学号:
");
scanf("%s",&student[num].id);
printf("\n\t\t输入姓名:
");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:
");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:
");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:
");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:
");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否继续添加?
(Y/N):
");
if(getch()=='y')
newrecord();
return;
}
2、同学信息修改
该函数通过调用一个自定义函数实现学号修改,具体介绍如下
voidchange()//按学号修改
{
intmark=0;
inti;
inta=0;
charid[10];
printf("\n\t\t请输入要修改学生学号:
");
scanf("%s",id);
for(i=0;i{
if(strcmp(student[i].id,id)==0)
{
printf("\n\t\t**************以下是您查找的学生信息**********");
printf("\n\t\t学号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t************************************************");
mark++;
printf("\n\t\t****************请输入新的学生信息****************\n");
printf("\n\t\t输入学号:
");
scanf("%s",&student[i].id);
printf("\n\t\t输入姓名:
");
scanf("%s",&student[i].name);
printf("\n\t\t输入电话:
");
scanf("%s",&student[i].phone);
printf("\n\t\t输入地址:
");
scanf("\n\t\t%s",&student[i].adress);
printf("\n\t\t输入e-mail:
");
scanf("%s",&student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t修改成功!
\n\t\t");
printf("\n\t\t按任意键返回主菜单:
");
getch();
return;
}
}
if(mark==0)
{
printf("\n\t\t没有该学生的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
(3)结构体的作用
程序开始定义了结构体用来描述编号、姓名、电话号、地址、邮编等以及多个数组。
五、个人总结
通过本次课设学习我不仅对C语言知识有了更多的了解,而且也提高了自学的能力与上机操作的能力。
由于我以前不重视自己动手操作和创新看到题目都不知道从何下手,但通过老师指导和同学的帮助最后完成课设内容。
通过做课设体会到C语言的结构化的严密性及程序模块化,也能更好的使用函数及调用函数问题。
在调试程序中既增长了我的知识又磨练我的意志。
总之,通过这次学习给我带来学习的乐趣,受益非浅!
六、参考文献
(参考的书籍或互联网资源)
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
七、源程序
#include
#include
#include
#include
#include
structrecord
{
charid[10];
charname[20];
charphone[20];
charadress[40];
charpostcode[10];
chare_mail[30];
}student[5];
intnum=0;//外部变量num为文件中的纪录数
FILE*fp;
voidmainmenu();//主菜单
voidn