题目:同学通讯录信息管理一、课程设计时间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、主函数流程void main(){readfromfile();while (1){mainmenu();}}主函数流程图2、主要功能流程(1、)void mainmenu()//主菜单{char choic;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)该函数就是将学生通讯录信息存在结构体中,实现多名学生信息录入,具体程序如下void newrecord()//添加纪录{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)该函数是重要的部分,主要的功能是输入学生的学号或是姓名后在结构体中将会出现想要查找的学生通讯录信息,如果没有有提示,找到后即会显示,然后提示,按任意键返回主菜单,继续查找。
具体流程如下;void searchbyname()//按姓名查询{int mark=0;int i;int a=0;printf("\n\t\t***************** 按姓名查找*******************");char name[20];printf("\n\t\t请输入姓名:");scanf("%s",name);for(i=a;i<num;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)<num){printf("\n\t\t是否继续查找相同名字的学生信息:(y/n)");if (getch()=='y'){a=i;continue;}elsereturn;}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;}}void searchbyid()//按学号查询{int mark=0;int i;int a=0;printf("\n\t\t****************** 按学号查找******************\n");char id[10];printf("\n\t\t请输入学号:");scanf("%s",id);for(i=0;i<num;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)学生信息修改函数该函数的作用是将错误的学生通讯信息进行修改然后,将新的姓名、学号、电话号、地址等分别存到结构体里,具体程序如下void change()//按学号修改{int mark=0;int i;int a=0;char id[10];printf("\n\t\t请输入要修改学生学号:");scanf("%s",id);for(i=0;i<num;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)该函数的主要作用是显示出所有同学的通讯录信息,按任意键逐一显示。