#include
#include
#include
char namekey[20],numkey[11],phonekey[20]; //全局变量,输入,查询,修改时要用到// int rshu;
void menu(); //后面主函数中需要调用到的函数,为全局变量//
void add();
void alter();
void delet();
void search();
void help();
void order();
void scan();
struct student //定义一个数组,储存所需录入的信息,整个程序都可以使用//
{
char num[11];
char name[20];
char sex[5];
char address[50];
char phone[20];
char qq[10];
}stu[50];
void menu()
{
int wenjian();
int n;
while(1) //循环使用此函数//
{system("cls"); //每次循环此函数都清屏//
wenjian(); //存入文件//
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^");
printf("\n ★→菜单←★\n");
printf("\n 1.添加学生信息 2.修改学生信息\n");
printf("\n 3.删除学生信息 4.查询学生信息\n");
printf("\n 5.学生信息排序 6.浏览学生信息\n");
printf("\n 7.帮助菜单8.退出系统\n");
printf("\n ★→学生通讯录←★\n");
printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^");
printf("\n");
printf("请选择序号(1~8):[ ]\b\b");
scanf("%d",&n);
if (n>0 && n<9)
{
switch(n)
{
case 1:add();break;
case 2:alter();break;
case 3:delet();break;
case 4:search();break;
case 5:order();break;
case 6:scan();break;
case 7:help();break;
case 8:exit(0);
}
}
else
{
printf("您输入的序号不在范围内:\n");
system("pause"); //暂停,不直接执行后续操作// }
}
}
void main() //主函数,运行菜单函数//
{
menu();
}
void add() //添加函数,添加通讯录中的信息//
{
int i,n,j,k;
char w,m;
printf("请输入所需添加信息条数(请输入数字1~50):"); //输入信息的条数,决定添加多少信息//
scanf("%d",&n);
for(j=0;;j++)
{
if(n<1 || n>50) //判断输入的数是否在存储空间中,不满足,则重新选择//
{
printf("输入错误,请选择:1.重新输入 2.退出输入返回主菜单:");
printf("\n输入您的选择(1 or 2):");
scanf("%d",&k);
if(k==1) add(); //返回添加函数//
if(k==2) menu(); //返回主菜单//
}
else break;
}
for(i=0;i { printf("\n请输入学号:"); scanf("%s",stu[rshu+i].num); printf("请输入姓名:"); scanf("%s",stu[rshu+i].name); printf("请输入性别(m or w):"); scanf("%s",stu[rshu+i].sex); for(j=0;;j++) { if(strcmp(stu[rshu+i].sex,"w")!=0 && strcmp(stu[rshu+i].sex,"m")!=0) { //进行性别录入判断,只能为m或者w,否则重新输入// printf("输入错误,请重新输入:"); printf("\n请输入性别(m or w):"); scanf("%s",stu[rshu+i].sex); } else break; } printf("请输入通讯地址:"); //判断后继续输入// scanf("%s",stu[rshu+i].address); printf("请输入电话:"); scanf("%s",stu[rshu+i].phone); printf("请输入QQ号:"); scanf("%s",stu[rshu+i].qq); } rshu+=n; //总人数增加添加的条数// printf("\n添加成功!\n"); system("pause"); //暂停,不直接执行后续操作// menu(); //返回主菜单// } void alter() //修改通讯录中的信息// { int i,j,k,n; char m,w; if(rshu==0) //当人数为0时,没有数据删除,用户选择是否添加数据// { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } printf("\n请输入要修改学生的姓名:"); scanf("%s",namekey); for(i=0;i if(strcmp(namekey,stu[i].name)==0) //比较字符串// { printf("\n已查询到,记录为:"); printf("\n\n学号,姓名,性别,通讯地址,电话,QQ号:"); printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].phon e,stu[i].qq); break; } if(i==rshu) //当i=rshu时,证明整个通讯录中的学生都查询到了,没有符合的// { printf("\n没有该同学记录,请继续选择操作:\n"); printf("\n请选择:1.重新输入(其它数字键则返回主菜单)"); scanf("%d",&n); if(n==1) alter(); else menu(); } else { system("pause"); system("cls"); printf("\n\n学号,姓名,性别,通讯地址,电话,QQ号:"); printf("\n%s , %s , %s , %s , %s , %s",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].phone, stu[i].qq); printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^"); printf("\n\n请选择要修改的信息且一次操作只能修改一次: "); printf("\n\n 1.学号 2.姓名"); //满足各种需要修改的信息// printf("\n\n 3.通讯地址 4.电话号码"); printf("\n\n 5.QQ号码 6.全部信息"); printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^"); printf("\n请选择(1~6):"); scanf("%d",&k); if(k<1 || k>6) { printf("输入有误,请选择1.重新输入2.退出修改返回主菜单"); printf("\n输入您的选择(1 or 2):"); scanf("%d",&n); if(n==1) alter(); if(n==2) menu(); } if(k==1) //修改学号// { printf("\n请输入新数据:"); printf("\n请输入学号:"); scanf("%s",stu[i].num); } if(k==2) { printf("\n请输入新数据:"); printf("请输入姓名:"); scanf("%s",stu[i].name); if(k==3) //修改通讯地址// { printf("\n请输入新数据:"); printf("请输入通讯地址:"); scanf("%s",stu[i].address); } if(k==4) //修改电话// { printf("\n请输入新数据:"); printf("请输入电话:"); scanf("%s",stu[i].phone); } if(k==5) //修改QQ号// { printf("\n请输入新数据:"); printf("请输入QQ号:"); scanf("%s",stu[i].qq); } if(k==6) //修改全部信息// { printf("\n请输入新数据:"); printf("\n请输入学号:"); scanf("%s",stu[i].num); printf("请输入姓名:"); scanf("%s",stu[i].name); printf("请输入性别(m or w):"); scanf("%s",stu[i].sex); for(j=0;;j++) { if(strcmp(stu[i].sex,"w")!=0 && strcmp(stu[i].sex,"m")!=0) { printf("输入错误,请重新输入:"); printf("\n请输入性别(m or w):"); scanf("%s",stu[i].sex); } else break; } printf("请输入通讯地址:"); scanf("%s",stu[i].address); printf("请输入电话:"); scanf("%s",stu[i].phone); printf("请输入QQ号:"); scanf("%s",stu[i].qq); } printf("修改成功!\n"); printf("是否需要查看修改后的信息?: 是(按1) or 否(按2):"); scanf("%d",&k); if(k==1) { printf("\n 学号,姓名,性别,通讯地址,电话,QQ号:"); printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].phon e,stu[i].qq); printf("\n可返回主菜单\n"); } if(k==2) { printf("\n可返回主菜单\n"); } system("pause"); //暂停,不直接执行后续操作// menu(); } void delet() //删除函数// { int i,k,n; char *s; //定义一个字符指针变量// if(rshu==0) //当人数为0时,没有数据删除,用户选择是否添加数据// { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字键则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } printf("\n请输入要删除学生的姓名:"); scanf("%s",namekey); for(i=0;i if(strcmp(namekey,stu[i].name)==0) //判断输入名字是否在通讯录中有记录,进行字符串比较// { printf("\n已查询到,记录为:"); printf("\n 学号, 姓名, 性别, 通讯地址, 电话, QQ号:"); //显示查询到的 printf("\n %s , %s , %s , %s , %s , %s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].pho ne,stu[i].qq); break; } if(i==rshu) { printf("\n没有该同学记录,请继续选择操作:\n"); printf("\n请选择:1.重新输入(其它数字键则返回主菜单)"); scanf("%d",&n); if(n==1) delet(); else menu(); } else { system("pause"); system("cls"); printf("\n\n学号,姓名,性别,通讯地址,电话,QQ号:"); printf("\n%s , %s , %s , %s , %s , %s",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].phone, stu[i].qq); printf("\n*********************************************************************** ********"); printf("\n\n 请选择需要删除的信息: "); printf("\n\n****************** 1.学号 2.通讯地址**********************"); printf("\n\n****************** 3.电话 4.QQ号**************************"); printf("\n\n**************************** 5.全部信息***********************************"); printf("\n******************************************************************* ************"); printf("\n\n按其它数字键则不删除信息且返回主菜单,请选择:"); scanf("%d",&k); if(k==1) { printf("\n是否删除该学生<学号>信息?:删除(按1) or 不删除(按其它任意数字键):"); scanf("%d",&n); if(n==1) { s=stu[i].num; //将所查询到的姓名所在地址赋给s// *s=0; //s所指的值为0,原值将被删除// printf("已删除!\n"); } else { printf("请选择:1.重新选择(按其它数字键则返回主菜单)\n"); scanf("%d",&n); if(n==1) alter(); else menu(); } } if(k==2) { printf("\n是否删除该学生<通讯地址>信息?:删除(按1) or 不删除(按其它任意数字键):"); scanf("%d",&n); if(n==1) { s=stu[i].address; //将所查询到的通讯地址所在地址赋给s// *s=0; //s所指的值为0,原值将被删除// printf("已删除!\n"); } else { printf("请选择:1.重新选择(按其它数字键则返回主菜单)\n"); scanf("%d",&n); if(n==1) alter(); else menu(); } } if(k==3) { printf("\n是否删除该学生<电话>信息?:删除(按1) or 不删除(按其它任意数字键):"); scanf("%d",&n); if(n==1) { *(stu[i].phone)=0; //将地址所指函数的值赋为,则原值删除// printf("已删除!\n"); } else { printf("请选择:1.重新选择(按其它数字键则返回主菜单)\n"); scanf("%d",&n); if(n==1) alter(); else menu(); } } if(k==4) { printf("\n是否删除该学生 scanf("%d",&n); if(n==1) { *(stu[i].qq)=0; //将地址所指函数的值赋为,则原值删除// printf("已删除!\n"); } else { printf("请选择:1.重新选择(按其它数字键则返回主菜单)\n"); scanf("%d",&n); if(n==1) alter(); else menu(); } } if(k==5) { printf("\n是否删除该学生<全部>信息?:删除(按1) or 不删除(按其它任意数字键):"); scanf("%d",&n); if(n==1) { stu[i]=stu[i+1]; printf("已删除!\n"); } else { printf("请选择:1.重新选择(按其它数字键则返回主菜单)\n"); scanf("%d",&n); if(n==1) alter(); else menu(); } } } if(k==5&&n==1) //当删除全部信息后,人数才减,其它删除操作不改变人数个数// rshu-=1; system("pause"); } void search() //查询函数// { void xm(); void xh(); void dh(); int n; system("cls"); //清屏,把主菜单的目录覆盖掉,只显示查询界面// printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^\n"); printf("\n ★→查询界面←★\n"); printf("\n"); printf(" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n"); printf(" 1.按姓名查询| 2.按学号查询\n"); printf("―――――――――――――――――――|――――――――――――――――――――\n"); printf(" 3.按电话查询| 4.返回主菜单\n"); printf("__________________| ___________________\n"); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^\n"); printf("\n"); while(1) { printf("请选择序号(1~4):[ ]\b\b"); scanf("%d",&n); if (n>0 && n<5) { switch(n) { case 1:xm();break; case 2:xh();break; case 3:dh();break; case 4:menu(); } } else { printf("您输入的序号不在范围内,请输入[1~4]:\n"); } } } void xm() //按姓名查询函数// { int i,n; if(rshu==0) //当人数为0时,没有数据查询,用户选择是否添加数据// { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字键则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } printf("\n请输入要查询的姓名:"); scanf("%s",namekey); for(i=0;i if(strcmp(namekey,stu[i].name)==0) { printf("\n已查询到,记录为:"); printf("\n 姓名,学号,性别,通讯地址,电话,QQ号:"); printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].address,stu[i].phon e,stu[i].qq); system("pause"); break; } if(i==rshu) { printf("没有该同学记录,请继续选择操作:\n"); system("pause"); return; //回到查询界面选择// } } void xh() //按学号查询函数// { int i,n; if(rshu==0) //当人数为0时,没有数据查询,用户选择是否添加数据// { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字键则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } printf("\n请输入要查询的学号:"); scanf("%s",numkey); for(i=0;i if(strcmp(numkey,stu[i].num)==0) { printf("\n已查询到,记录为:"); printf("\n 学号,姓名,性别,通讯地址,电话,QQ号:"); printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].phon e,stu[i].qq); system("pause"); break; } if(i==rshu) { printf("没有该同学记录,请继续选择操作:\n"); system("pause"); return; } } void dh() //按电话查询函数// { int i,n; if(rshu==0) //当人数为0时,没有数据查询,用户选择是否添加数据// { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字键则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } printf("\n请输入要查询的电话:"); scanf("%s",phonekey); for(i=0;i if(strcmp(phonekey,stu[i].phone)==0) { printf("\n已查询到,记录为:"); printf("\n 电话,学号,姓名,性别,通讯地址,QQ号:"); printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].phone,stu[i].num,stu[i].name,stu[i].sex,stu[i].addres s,stu[i].qq); system("pause"); break; } if(i==rshu) { printf("没有该同学记录,请继续选择操作:\n"); system("pause"); return; } } void help() //帮助函数// { system("cls"); printf("\n~~~~~~~~~~~~~~~~~~~##########欢迎使用帮助菜单##########~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\n ** 本系统为学生通讯录系统,管理学生通讯录信息** \n"); printf("\n ** 您可在本系统实现添加、删除、修改、查询、排序等操作** \n"); printf("\n ** 请在选择操作时,注意查看操作提示, 请您注意看清选项** \n"); printf("\n ** 望您按照提示信息准确输入! ** \n"); printf("\n ** 如有不便, 请见谅** \n"); printf("-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||-_-||"); system("pause"); } void order() //排序函数// { int n; void num(); void name(); system("cls"); //清屏,把主菜单的目录覆盖掉,只显示排序界面// printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^"); printf("\n ★→请选择所需选项←★\n"); printf("\n-------------------------------------------------------------------------------"); printf("\n 1.按学号排序"); printf("\n "); printf("\n 2.按姓名排序"); printf("\n "); printf("\n 3.返回主菜单"); printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^"); printf("\n"); while(1) { printf("请选择序号(1~3):[ ]\b\b"); scanf("%d",&n); if (n>0 && n<4) { switch(n) { case 1:num();break; case 2:name();break; case 3:menu(); } } else { printf("您输入的序号不在范围内,请输入[1~3]:\n"); } } } void num() //排序函数中需要调用的一个函数,按学号排序// { int i,j,n; struct student temp; //定义一个新的结构体储存// if(rshu==0) { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字键则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } for(i=0;i { for(j=i+1;j { if(strcmp(stu[i].num,stu[j].num)>0) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } } for(i=0;i printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].phon e,stu[i].qq); system("pause"); } void name() //排序函数中需要调用的一个函数,按姓名排序// { int i,j,n; struct student temp; if(rshu==0) { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字键则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } for(i=0;i { for(j=i+1;j { if(strcmp(stu[i].name,stu[j].name)>0) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } } for(i=0;i printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].address,stu[i].phon e,stu[i].qq); system("pause"); //暂停,不直接执行后续操作// } void scan() //浏览函数// { int i,n; if(rshu==0) { printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字键则返回主菜单):\n"); printf("请选择:"); scanf("%d",&n); if(n==1) add(); else menu(); } printf("\n 学号, 姓名, 性别, 通讯地址, 电话, QQ号"); for(i=0;i printf("\n%s , %s , %s , %s , %s , %s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].address,stu[i].phon e,stu[i].qq); system("pause"); //暂停,不直接执行后续操作// } int wenjian() //文件函数,将输入的信息存入文件中// { FILE *fp; //定义结构指针变量// int i; if((fp=fopen("tongxunlu.txt","wb"))==NULL) //为只写打开一个二进制文件,并测试// { printf("\n文件打开失败\n"); exit(1); } for(i=0;i<50;i++) { fwrite(&stu[i],sizeof(struct student),1,fp); //可写进50个数据// } fclose(fp); //关闭文件// return 0; //返回值// } 中国地质大学本科生课程论文封面 课程名称C语言程序设计 教师姓名 本科生姓名 本科生学号 本科生专业 所在院系 类别: 日期: 课程设计评语 注:1、无评阅人签名成绩无效; 2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效; 3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。 目录 课程设计评语 (2) 目录 (3) 1.课程论文题目 (4) 2.程序设计思路 (4) 3.功能模块图 (5) 4.数据结构设计 (5) 5.算法设计 (5) 6.程序代码 (14) 7.程序运行结果 (14) 8.编程中遇到的困难及解决方法 (27) 9.总结心得及良好建议 (28) 10.致谢 (28) 1.课程论文题目 通讯录管理系统 要求:设计具有数据插入、修改、删除、显示和查询功能的电话簿管理系统。 ⑴数据包括:人名、工作单位、电话号码和E-mail地址。 ⑵可对记录中的姓名和电话号码进行修改。 ⑶可增加或删除记录。 ⑷可显示所有保存的记录。 ⑸可按人名或电话号码进行查询。 2.程序设计思路 根据题目的要求,程序应该采用结构体数组和文件系统实现。应该有动态的存储空间和文件输入、输出等操作功能;在程序中应该包括添加、显示、删除、查询和修改以及保存和退出的功能;另外还应提供键盘式选择菜单实现功能选择。 3.功能模块图 4.数据结构设计 整个程序中用到的数据主要是全局变量MAX 100和字符变量name[10]、addr[20]、phnum[20]、email[20]。 5.算法设计 1.主函数 主函数的设计一般比较的简单,只提供输入,功能处理和输出部分的函数调用。其中个功能模块用菜单方式选择。菜单部分也可以写成函数。 [流程图] 通讯录的设计 一、设计思路: 经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和c语言的基本常识,并可以逐渐自己来实现一些简单的程序任务。此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。以下为我的设计思路:首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应 enter ())、删除(程序中对应delete())、显示通讯录(程序中对应list())、搜索(程序中对应search())、保存(程序中对应save())、装载(程序中对应 load())。 其次,对于存储的数据结构,我则主要选择了一下几个方面的信息:姓名、性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。 二、程序源代码: #include #include 通讯录信息管理系统设计计算机学院计算机科学与技术专业 1.课程设计的目的 学习了C语言程序设计这门课程之后,使我对程序设计有了一定的了解,为了熟练掌握C语言的语法特点、及其数据结构,提高自身编写程序的能力。通过课程设计实现理论知识与实际情况的结合,使所学知识能够在现实社会中起到一定的作用,防止所编写的程序脱离实际,让程序可以更好的发挥作用,以便减轻实际工作中所遇到的繁琐步骤,提高现实工作中的效率。此外通过课程设计提高逻辑思考能力和解决实际问题的能力。程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。 通讯录信息管理系统是生活中不可缺少的部分编写了一个通讯录信息管理系统是十分必要的。 本程序设计具有通讯信息的录入,进行保存、查找、删除等功能,操作界面简洁美观,易于操作。程序用了条件、循环、指针、结构体等知识点,综合了文件的打开和保存编写的。软件运用菜单实现交互式管理,用户轻松的按键既可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足的需要。 通过对通讯录管理系统的设计,进一步理解和掌握C语言这门课程的知识点,能够熟练的调用各种函数,把各种C语句有机的结合起来,提高自己C语言程序设计的能力,为今后解决实际问题打下良好基础。 2.设计方案论证 2.1设计思路 建立一个函数,用来添加、显示、删除、查询、修改、保存通讯录等信息,完成通讯录的功能。主函数可以调用六个子函数,分别完成添加记录、显示记录、删除记录、查询记录、修改记录、保存记录、退出系统等功能。在主函数中可以以1、2、3、4、5、6数字键分别可以执行某个功能模块。 2.2程序设计 2.2.1根据图1定义数据类型建立函数 typedef struct { char Num; //编号 char Name[10]; //姓名 char Tel[15]; //电话号码 char Email[20]; //邮箱 char age[8]; //年龄 char adds[20]; //住址 }Person; 2.2.2主函数及其流程图 定义主函数main()和一系列的功能函数,只有通过这些函数才可实现程序 #include void chazhao_xingming(); /*按姓名查找*/ void chazhao_dianhua(); /*按号码查找*/ void shanchu(); /*删除联系人函数*/ void shanchu_quanbu(); /*全部删除*/ void shanchu_dange(); /*单个删除*/ void xianshi(); /*号码显示*/ //程序主函数模块六 void main() /*主函数main*/ { readfile(); /*读入文件*/ while(1) /* 循环(永远进行)*/ { zhucaidan(); /*调用主菜单函数*/ } } //读取文件函数部分开始模块七 void readfile() { if((fp=fopen("c:\\通讯录.txt","r"))==NULL) /*以只读方式打开判定文件是否为空*/ { printf("\n\t\t\t 通讯录文件不存在"); /*判断结论*/ if ((fp=fopen("同通讯录.txt","w"))==NULL) /*只写方式判断*/ 太原学院计算机工程系 课程设计报告 课程名称:数据结构课程设计 姓名:苏建花 专业班级:计算机工程系网络三班 指导教师:翟婷婷 2015年12 月30日 计算机工程系课程设计报告 课程名称:C语言课程设计 课程设计题目:通讯录管理系统 班级:网络14-3班姓名:苏建花学号: 目录(参考) 1.设计目的与要求…………………………………………X 1.1题目与设计要求……………………………………X 1.2本程序涉及的知识点………………………………X 2.功能设计………………………………………………X 2.1总体设计……………………………………………X 2.2详细设计……………………………………………X 3.程序实现……………………………………………X 3.1程序实现时应考虑的问题…………………………X 3.2 XX模块核心代码…………………………………X 4.测试分析……………………………………………X 4.1 测试结果及分析…………………………………X 4.总结…………………………………………………X 参考文献………………………………………………X 1、设计目的与要求 这次课程设计的目的在于: 1.熟练的掌握C语言课程中所学的理论知识,并对其进行应用; 2.通过综合C语言的基本知识来解决实际问题; 3.加强分析和解决问题的能力; 4.提高实践动手能力,将知识化为实际成果 1.1 题目与设计要求 (1)题目:通讯录 (2)设计要求 a、建立通讯录信息,信息至少包含姓、名、电话号码、住址、分类(如同事、朋友、 同学、家人等)等。 b、该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修改,按姓名、 姓氏方式查找。 c、将通讯录保存在文件中。 d、能够输出通讯录中的信息。 1.2 本程序设计的知识点 (1)采用结构体数组。 struct Person { char a[16]; char s[16]; char d[16]; char f[24]; struct Person *next; }stu; (2)运用函数之间的调用 主函数可以调用子函数,子函数之间可以相互调用,子函数不能调用主函数,主函数可以多次调用一个子函数,也可以一次调用多个子函数。 (3)利用指针变量 struct Person *head; struct Person *p1,*p2 2 、功能设计 添加:添加通讯录记录 修改:修改通讯录记录 删除:删除通讯录记录 查找:查询通讯录记录 显示:显示通讯录记录 统计:统计通讯录数目 2.1需求分析 信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或姓氏进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择。 一、课程设计题目及要求 题目通讯录管理系统 任务:自学C语言中相关知识,设计出通讯录管理系统。要求如下所述: ◆建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子 邮箱等;; ◆能够提供添加、删除和修改通讯录信息的功能; ◆能够提供按姓名或电话等查询; ◆将通讯录保存在文件中; ◆能够按表格方式输出通讯录信息。 二、系统设计方案 (一)总体框架图: 通讯录管理系统:1、录入通讯录信息 2、修改通讯录信息 3、查询通讯录信息 4、浏览通讯录信息 5、增加通讯录信息 6、推出系通讯录统 (二)模块设计 模块一:头文件,变量定义,函数的声明 对系统所使用的变量进行定义,对函数进行声明 模块二:录入通讯录信息 声明函数void readfile(),说明一个文件指针FILE *fp 打开文件"student.txt" 模块三:通讯录信息的查找 声明void seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支 模块四:通讯录信息的修改 声明void modify()为学生信息修改函数,通过switch(item)设定所要修改的项目模块五:通讯录信息按学号排序 声明void sort()将录入通讯录信息系按升序排列,用的是“冒泡排序法”实现排序模块六:加通讯录信息 声明void insert()插入通讯录信息,先通过判断通讯录是否存在,若否则继续输入,若是跳出,重新循环 模块七:通讯录信息 声明void del()实现通讯录信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。 模块八:示学生信息 通过display()函数输出通讯录信息 模块九;存信息 通过fp=fopen("student.txt","w");写入信息 模块十:界面菜单 通过switch(num)调用,以上各函数,实现功能 三、设计详情 1.主函数 主函数设计要求简洁,只提供部分提示语和函数的调用 【程序】 C语言课程设计通讯录 管理系统 文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256) ***科技大学 本科生课程设计说明书 题目:C语言课程设计 ——通讯录管理系统 学生姓名:** 学号:*** 专业:软件工程 班级:1 指导教师:** 内蒙古科技大学课程设计任务书 一、教学要求 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 通讯录管理系统 现有一批通讯录的数椐,要求输入计算机并存放在内存中,然后增加若干个新通讯录的记录,并可输出通讯录清单,实现文件存盘和读入文件进行修改的功能。通讯录的基本信息包括编号,姓名,电话号码,QQ号码,电子邮件,通讯地址。要求设计菜单来调用其各功能模块: 新建文件、打开文件、保存信息到文件 输入记录、输出记录 查询记录(至少具有两种查询方式,例如以姓名查询和以电话号码查 询) 修改、插入和删除记录 三、设计要求及成果 1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目) 2. 写出详细设计说明(至少包括功能实现分析和模块流程图) 3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号) 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告(请严格按照模板进行排版) 四、进度安排 第一天? 选择课程设计题目,分析课题的要求 第二天? 编程 第三天? 编程及调试 第四天? 写课程设计报告 目录: 课程设计任务书..................... 错误!未定义书签。目录:................................... 错误!未定义书签。 一、目的..................................................错误!未定义书签。 二、基本情况..............................................错误!未定义书签。 三、时间安排..............................................错误!未定义书签。 四、设计和调试过程规范化要求..............................错误!未定义书签。 五、设计内容和设计要求....................................错误!未定义书签。 六、考核方式..............................................错误!未定义书签。一通讯录的主要功能: .................... 错误!未定义书签。 一、问题描述: .............................................错误!未定义书签。 二、功能要求: .............................................错误!未定义书签。 三、算法提示: .............................................错误!未定义书签。 四、测试数据: .............................................错误!未定义书签。 二、课题的主要功能模块划分:............. 错误!未定义书签。 三、主要功能的实现....................... 错误!未定义书签。 一、按名字查找显示函数 void search( ) ................错误!未定义书签。 二、快速查找函数:void qseek( ) ...........................错误!未定义书签。 四、程序调试:........................... 错误!未定义书签。 五、总结................................. 错误!未定义书签。 六、源程序............................... 错误!未定义书签。机械工程学院课程设计评分表............... 错误!未定义书签。 c语言课程设计学生通讯录管理系统 文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256) 题目:学生通讯录管理系统任务说明:主要利用c语言的文件操作能力设计开发一个小型的通讯录管理系统,至少具有如下功能:①记录通讯录内的人员的学号、姓名、地址、电话号码。 ②显示所有人员的信息。 ③通过输入姓名查找人员信息。 ④通过输入姓名查找到要删除的人员信息,然后可以进行删除。 ⑤通过输入姓名查找到要修改的人员信息,然后可以进行修改。 ⑥添加人员信息。 系统功能描述: 本程序的功能是为用户提供简单的通讯录进行管理,通过该程序存储联系人信息,提供关键字(只能是英文关键字进行查找)查找功能,可以对数据进行修改、删除、添加等操作。 各按钮的功能如下: 查找记录:以姓名为关键字,查找并显示该记录。若查找不到,则显示“好象没有”; 添加记录:将当前记录按姓名序加入通讯录,然后显示第一条记录; 修改记录:修改当前记录,显示当前记录。姓名为关键字,不允许修改; 删除记录:删除当前记录,然后显示第一条记录; 第一条记录:将当前记录指针移动至首节点,若已为首节点,则不移动; 前一条记录:将当前记录指针向前移动一个节点,若已为首节点,则不移动; 后一条记录:将当前记录指针向后移动一个节点,若已为尾节点,则不移动; 最后一条记录:将当前记录指针移动至尾节点,若已为尾节点,则不移动; 加载:从文件中掉入已保存的通讯录数据; 保存:保存通讯录数据; 退出:退出系统; 设计思路: 根据要求,电话录数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保存记录以进行修改,删除,查找等操作;另外还应提供键盘式选择菜单实现功能选择。 图1 系统功能模块图 软件中使用的结构体和结构体数组,如: struct callmember { char name[20]; char address[20]; char code[20]; char callnumber[20]; C语言课程设计:通讯录管理系统 目录 一、需求分析 (2) 二、概要设计 (2) 三、详细设计 (3) 四、上机操作 (14) 五、实习心得 (19) 六、源程序 (20) 一、需求分析 具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。 (1)数据包括:人名、工作单位、电话号码和E-MAIL地址。(2)可对记录中的姓名和电话号码进行修改。 (3)可增加和删除记录。 (4)可显示所有的保存记录。 (5)可按人名或电话号码进行查询。 [提示] 建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-MAIL地址。 根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。 二、概要设计 根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。 三、详细设计 1、主函数; 主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。 流程图 N 【程序】 int main() ***********\n"); printf("\t\t**********************************************\n"); scanf("%d",&n); for(i=0;i C语言程序设计学生通讯录管理系统 文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256) #define null 0 struct record { char name[20]; char phone[20]; char adress[40]; char postcode[10]; char e_mail[30]; }student[500]; struct LinkList { struct record US; struct LinkList *next; }a; struct LinkList *head=null; int num=0; FILE *fp; int menu_select(); int adduser(); int list(); int search(); int display(); int add(); int listbyname(); int dele(); int save(); int exit(); void main() { system("cls"); for(;;) { switch(menu_select()) { case 0:adduser();break; case 1:list();break; case 2:search();break; case 3:add();break; case 4:dele();break; case 5:save();break; case 6:exit(0); } } } menu_select() { char s[80]; int a; printf("*_* press any key enter menu! *_* \n"); getch(); system("cls"); printf("\t\t********************MENU*********************\n\n"); printf("\t\t 0. 输入记录\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. Quit\n"); printf("\t\t***********************************************\n"); do{ printf("\n Enter you choice(0~11):"); scanf("%s",s); a=atoi(s); } while (a<0||a>11); return a; } adduser() 3.6 实例6 通讯录程序 本实例希望设计一个通讯录程序,要求实现通讯录信息的录入,并具有添加、查询、删除、显示等功能;使用结构体存储通讯录中记录信息;使用链表来实现通讯录信息的添加、删除、查询及显示等操作;通讯录程序可实现文件读写,在通讯录信息录入结束之后,可存入文件中,在下次程序运行时可将通讯录中的记录读取到程序中。通讯录程序可采用基于Win32控制台程序构建或采用基于MFC应用向导.EXE的应用程序,下面对这两种方法进行详细介绍。 3.6.1. 设计目的 1、掌握结构体的基本工作原理和工作方式。 2、熟悉结构体与链表的使用方法。 3、熟悉C语言下数据的输入与输出。 4、掌握C语言下对TXT文件的读写操作。 5、熟悉函数的设计方法及调用方法。 3.6.2. 基本要求 1、本实例要求实现对通讯录信息的查找、添加、删除、显示等功能,每个功能模块均能实现随时从模块中退出,可以通过键盘对功能进行选择,完成一个通讯录管理系统的运行。 2、要使用结构体来实现对通讯录信息的存储。 3、使用链表来实现对通讯录信息的查找、添加、删除、浏览显示。 4、使用文件对记录进行存储,程序运行时还可以从文件中读取记录。 5、系统设计完成后应实现类似下图所示界面。 3.6.3 设计结构及算法分析 在进行程序设计时,选择一种合理的数据存储结构是非常关键的。本实例根据题目要求,采用结构体来存放通讯录中的信息,并采用文件存储通讯录中的信息。 1、存储结构 本实例存储数据时,除了采用最常用的基本类型存储外,采用结构体的方式来存储通讯录中的个人信息,结构体如下所 示: struct stu { char name[20]; /*人名*/ char telephone[20]; /*电话*/ char sex[4]; /*性别*/ char company[20]; /*单位*/ struct stu *next; /*链表节点*/ }; typedef struct stu STU; 2、main()主函数 采用模块化设计,功能放在各模块函数中实现。主函数是程序的入口,在其中采用循环结构,根据用户的键盘输入,依次调用各功能函数。 3、mycreate()函数------创建链表函数 函数根据用户输入的信息,存储到结构体中,并建立链表结构,函数返回链表的头指针。链表建立完成后,可根据链表的头指针来添加后续指针。 4、myadd()函数------添加学生信息记录函数 函数根据用户输入信息,分配内存,将数据存储到结构体中,并建立新的链表节点,链接到已经建立好的链表尾部。 5、mydelete()函数------删除链表节点 #include c语言通讯录源代码打 印 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] #include <> #include <> #include <> #include <> struct person { char name[15]; char sex[2]; int nianling; long int youbian; char addr[50]; char celephone[22]; char homephone[22]; char company[20]; char email[40]; long int QQ; }per[500]; int num=0;2aame); if(strlen(per[num].name)>15) { printf("对不起!您的输入有误!请重新输入"); goto name; } printf("\n请输入性别:\n"); sex: scanf("%s",&per[num].sex); if(strlen(per[num].sex)==0) { printf("对不起!您的输入有误!请重新输入"); goto sex; } printf("\n请输入年龄:"); nianling: scanf("%d",&per[num].nianling); if(per[num].nianling<10||per[num].nianling>1 10) { printf("对不起!您的输入有误!请重新输入"); goto nianling; } printf("\n请输入邮编\n"); youbian: scanf("%d",&per[num].youbian); if(per[num].youbian<10000||per[num].youbia n>999999) { printf("对不起!您的输入有误!请重新输入"); goto youbian; } printf("\n请输入地址\n"); addr: scanf("%s",&per[num].addr); if(strlen(per[num].addr)>50||strlen(per[num].a ddr)<4) { printf("对不起!您的输入有误!请重新输入\n"); goto addr; } printf("\n请输入手机号码:\n"); celephone: scanf("%s",&per[num].celephone); if(strlen(per[num].celephone)!=11) { printf("对不起!您的输入有误!请重新输入\n"); goto celephone; } 航空航天大学金城学院 《C语言程序设计》课程设计报告个人通讯录系统 学号:: 学号:: 日期: 目录 一、需求分析: (3) 二、程序的主要功能: (3) 三、程序运行平台: (3) 四、系统总框架图: (6) 五、程序类的说明: (6) 六、模块分析: (8) 七、比较有特色的函数: (9) 八、存在的不足与编程体会 (10) 九、程序源代码: (10) 一、需求分析 各类存储和通信电子产品都带有通讯录的功能,可以对联系人进行简单的信息管理和存储。 二、程序的主要功能 ?用户信息界面美观、简洁,采用菜单式显示功能选择; ?能够从磁盘文件输入和输出数据; ?能够对联系人信息进行增、删和改的操作; ?能够根据联系人的的拼音顺序从高到低排序; 三、程序运行平台 VC6.0 运行程序“perosnalcontact.exe”,进入登录界面如下 **************************** * * * * * 通讯录文件不存在! * * 通讯录文件已建立! * * * * * **************************** 按任意键进入主菜单 请输入您的数字选择: 一、按下任意键进入主菜单 您好! 欢迎使用通讯录! 1: 添加个人信息 2: 查询个人信息 3: 删除个人信息 4: 修改个人信息 5: 信息排序 6: 输出全部信息 7: 写入文件 8: 读取文件 9: 删除所有 0: 退出 请输入您的数字选择: 选择1进入添加信息模块: 请输入您要添加的联系人的信息: 请输入: 选择2进入查询个人信息模块: 欢迎使用查询菜单 1-按查询 2-按QQ查询 3-返回主菜单 请输入您的选择 选择3进入删除个人信息模块 删除菜单 1-删除单个 2-返回主菜单 请输入您的数字选择: 选择4.进入修改个人信息模块 1-按修改 请输入您的数字选择: 选择5.进入联系人排序模块 排序菜单 1-按排序 2-返回主菜单请输入您的数字选择: 选择6.进入输出信息模块 *************** 以下为通讯录所有信息************ ________________________________ 名字: 13213 性别: 2144444444444 手机: 44444444444 电子:44444444444 QQ:444444444 ________________________________ ************************************************ 请按任意数字键返回主菜单 选择7.进入写入文件模块 C语言编程-通讯录 #include FILE *fp; void Data_load() /*数据载入函数*/ { int j; fp=fopen("friend.txt","r+"); /*打开文件friend.txt*/ if(fp==NULL) /*判断是否存在friend.txt,如果不存在则创建*/ { fp=fopen("friend.txt","w"); i=0; } else { for(i=0;i<50;i++) { j=fgetc(fp); if(j==EOF) /*判断是否到了文件尾*/ return; fseek(fp,i*sizeof(struct friend),0); fread(&friends[i],sizeof(struct friend),1,fp); /*从文件中读取一条记录*/ } } } void Menu_Select() /*显示菜单界面*/ { printf(" \n"); printf(" \n"); printf(" \n"); printf(" Address Book Management System \n"); printf(" \n"); printf(" ======================\n"); printf(" 1.Address book data Entry\n"); /*数据输入*/ printf(" 2.Address Book data Show\n"); /*数据显示*/ printf(" 3.Address Book data Search\n"); /*数据查找*/ printf(" 4.Address Book data Alter\n"); /*数据修改*/ printf(" 5.Address Book data Insert\n"); /*数据插入*/ printf(" 6.Address Book data Delete\n"); 通讯录系统的设计与实现桂林电子科技大学电信三班傅得耕 3.1系统的需求分析 通讯录系统作为一个应用软件将为人民提供一个可以串联人与人之间的信息的一个平台。根据系统界面的提示信息对通讯录进行查询、初始化等操作。 系统功能需求分析描述如下: (1)创建联系人。 (2)显示所有联系人:显示可以进行的操作。 (3)删除联系人。 (4)查询:根据姓名进行查询,并可显示所有关于该人的信息。 (5) :退出。 3.2系统的设计 3.2.1 系统的总体设计 下面从系统的整体流程的功能模块、系统界面及数据结构进行总体设计。 (1)总体思想 本系统主要设计思想是实现通讯录系统信息的创建联系人、删除、查找等主要功能。系统的设计方法是结构化实际方法,系统用C语言进行开发用户可以清晰的了解联系人的情况。 (2)系统模块结构图 根据需求分析结果,通讯录系统可以分为五大模块:创建联系人模块、显示功能模块、查找联系人功能模块、删除联系人模 块以及退出模块。 ㈡查询人物信息 进入此菜单功能模块,输入您要查询的图书的名字。 图书查询模块流程如图: 3.3 创建 删除系统 3.4 源代码 #include 一、实践的目的和要求 加深对C语言课程所学知识的理解,进一步巩固C语言算法规则.学会编制结构清晰.风格良好.数据结构适当的C程序,从而具备解决综合性问题的能力. 二、内容 在熟练掌握C语言的基础知识:数据类型(整型.实型.字符型.指针.数组.结构等); 运算类型(算术运算.逻辑运算.自增自减运算.赋值运算等);程序结构(顺序结构.判断选择结构.循环结构);大程序的功能分解方法(即函数的使用)等.进一步掌握各种函数的应用以及文件的读写操作等. 三、实验任务:通讯录 设计要求:实现菜单设计,使用数据文件保存和修改,应用结构体和指针 功能要求:通讯录信息生成,存储,查询,修改,插入,删除,打印等. 四、设计思路 1.通讯录的主要信息包括:编号,姓名,性别,联系电话.住址,邮编. 2.用结构体数组来存储信息,有Data_Input函数来实现信息的录入,用Data_Show函 数来显示打印信息,用Data_Sreach函数来查找信息,用Data_Insert函数来插入信 息,用Data_Alter 函数来修改信息,用Data_Delete函数来删除信息,用Data_Save 函数来保存信息,用Exit函数来退出通讯录. 3.小组分工,每个人分配几个函数,按情况进行分配任务. 五、程序代码 #includeC语言课程设计---通讯录管理系统
通讯录的制作(数据结构C语言版)
c语言通讯录源代码
C语言程序设计课程设计-通讯录管理系统
个人通讯录管理系统c语言源程序优秀版)
C语言课程设计通讯录实验报告
C语言通讯录管理系统程序代码
C语言课程设计通讯录管理系统
C语言程序设计 通讯录程序
c语言课程设计学生通讯录管理系统精编版
通讯录管理系统 C语言课程设计
C语言程序设计学生通讯录管理系统
C语言通讯录程序课程设计报告书
c语言编写的通讯录代码、
c语言通讯录源代码打印
C语言程序的设计报告_个人通讯录
C语言编程-通讯录
C语言通讯录系统课程设计报告
通讯录C语言程序设计报告书