C语言课程设计通讯录
实验报告
Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998
太原学院计算机工程系
课程设计报告
课程名称:数据结构课程设计
姓名:苏建花
学号
专业班级:计算机工程系网络三班
指导教师:翟婷婷
2015年12 月30日
计算机工程系课程设计报告
课程名称:C语言课程设计
课程设计题目:通讯录管理系统
班级:网络14-3班姓名:苏建花学号:
目录(参考)
1.设计目的与要求…………………………………………X
1.1题目与设计要求……………………………………X
1.2本程序涉及的知识点………………………………X
2.功能设计………………………………………………X
总体设计……………………………………………X
详细设计……………………………………………X
3.程序实现……………………………………………X
程序实现时应考虑的问题…………………………X
XX模块核心代码…………………………………X
4.测试分析……………………………………………X
测试结果及分析…………………………………X
4.总结…………………………………………………X
参考文献………………………………………………X
1、设计目的与要求
这次课程设计的目的在于:
1.熟练的掌握C语言课程中所学的理论知识,并对其进行应用;
2.通过综合C语言的基本知识来解决实际问题;
3.加强分析和解决问题的能力;
4.提高实践动手能力,将知识化为实际成果
题目与设计要求
(1)题目:通讯录
(2)设计要求
a、建立通讯录信息,信息至少包含姓、名、电话号码、住址、分类(如同
事、朋友、同学、家人等)等。
b、该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修
改,按姓名、姓氏方式查找。
c、将通讯录保存在文件中。
d、能够输出通讯录中的信息。
本程序设计的知识点
(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、3
、查找通讯录(假设:
、统计通讯录
(假设w=1)流程图如下:
33、1123
4.完成类中各个成员函数的定义;
5.在程序中应该考虑主函数与子函数之间的调用情况,数组的使用。
6.完成系统的应用模块;
7功能调试;
8.完成系统总结报告以及系统使用说明书。
注:各函数之间的调用关系,如下图所示:
3、2源代码及说明
(见附加)
4、 测试分析
测试结果及分析(以下列操作为例)
进入系统后,系统会出现如下图:
显示输入账号和密码:
输入账号和密码后会进入主菜单页码:
在主菜单中输入1后,选择要操作的文件,选择同学,输入要添加的个数,输入姓 名 电话号码 地址,结果如下图:
main 函数 Tianjia() tongji() chazhao() shanchu() xianshi() xiugai() Menu()
调用
在主菜单中输入2后,输入要修改人的姓名。系统找到后会提示输入新的姓名电话号码地址,结果如下图:
在主菜单中输入3后,选择要操作的文件,选择查找的方式,。结果如下图
在主菜单中输入4后,输入要操作的文件,然后输入要删除的人的姓名,结果如下图:
在主菜单中输入5后,选择要操作的文件,会显示出此文件中所有的信息,结果如下图:
在主菜单中输入6后,输入要操作的文件,系统会统计出此文件中的总数,结果如下图
在主菜单中输入7后,“会显示谢谢您的使用,请按任意键退出”。
在运行的过程中曾出现,每执行完一个操作返回主菜单後就无法再继续执行接下来的操作,后来我从网上搜了一下,当执行system("cls");时会清除屏幕,然后我就在多次的修改中将程序中多余的system("cls");语句删除后,程序终于可以正常运行。而且编译时会出现如下信息,但好在不影响程序的正常运行。
5、总结
这个课题是设计一个通讯录系统,该通讯系统能够较好的管理好我们的通讯录记录,具有添加、修改、查找、删除、显示和统计的功能,但是该系统依旧有漏洞,此程序必须按照系统提示的操作来执行,而且还有部分的功能缺陷,例如用户无法自行修改用户名和密码,必须使用系统分配的数据登陆系统。功能也不是很齐全,没有排序功能,没有加密功能,还需要进一步的更新,才能达到更好地效果。
从刚开始的不只如何下手到最后看到自己的程序按自己的想法运行,心里时不时的有一种喜悦我在编写过程中,逐步的了解了程序模块化设计的思想含义。在整个程序设计的过程中语法的错误还是比较容易检查的,但是对于那些逻辑思维的问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行的境况,尽管有很多不足之处,但我在整个系统程序设计的过程中,我可以感受到自己对C语言有了一定的掌握,对整体的把握度也提高了很多。
此外编程是一项高精度需求的工作,所以我们要有规范化,标准化的代码编写习惯。良好的编写习惯,不但有助于代码的纠错,也有助于各功能负责人员之间的协同合作。
我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大的避免重复性的工作。另外我们要重视程序的算法,在程序中,算法是灵魂,我们要努力学习各种先进的算法,提高自己的编程能力。
而在这个过程中,我更深的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,同时学会了一些调试一个较长程序的基本方法,提高了书写程序设计开发文档的能力(书写课程设计报告)。
参考文献
1、谭浩强着.C程序设计(第四版).北京:清华大学出版社,2010
2、谭浩强着.C程序设计(第四版)学习辅
导.北京:清华大学出版社,2010
3、编写组编.常用C语言用法速查手册.北
京:龙门书局,1995
4、[2]刘振安.C语言程序设计[M].机械工
业出版社,2007
附加:
#include<>
#include<>
#include<>
#include<>
#include<>
#define LEN sizeof(struct Person)
void tianjia(); ..\n");getchar();break;
default:printf("\t\t 您的输入有误,请重新输入,并以Enter结束\n");menu();
}
}
}
///////////////////////////////////////////////////////////////////// ////////////1添加
void tianjia()
{
int w=0;
int i=0,n;
struct Person *head;//定义指针变量
struct Person *p1,*p2;
printf("\t\t请输入要操作的通讯录文件 1 同学 2 家人 3 同事 4
朋友:\n\t\t\t");
while(w==0)
{scanf("%d",&w);
if(w==1) //建立同学文件
{
if((fp=fopen("","a"))==NULL)
{ fp=fopen("","w+");
printf("\t\t\t同学文件已建立");
}
else printf("\t\t\t\t同学文件已存在\n");
}
else if(w==2) //建立家人文件
{ if((fp=fopen("","a"))==NULL) { fp=fopen("","w+");
printf("\t\t\t家人文件已建立");
}
else printf("\t\t\t\t家人文件已存在\n");
}
else if(w==3) //建立同事文件
{
if((fp=fopen("","a"))==NULL)
{ fp=fopen("","w+");
printf("\t\t\t同事文件已建立");
}
else printf("\t\t\t\t同事文件已存在\n");
}
else if(w==4) //建立朋友文件
{
if((fp=fopen("","a"))==NULL) { fp=fopen("","w+");
printf("\t\t\t朋友文件已建立");
}
else printf("\t\t\t\t朋友文件已存在\n");
}
else {printf("\t\t\t您的输入有误,请重新输入");w=0;}
}
printf("\t\t\t\t请输入添加的个数\n\t\t\t");
scanf("%d",&n);
p2=malloc(LEN);
while(i {p1=malloc(LEN); if(i==0) head=p1; else p2->next=p1; printf("\t\t\t请输入以下信息,并以Enter结束\n"); printf("\t\t\t姓名电话号码地址\n\t\t\t"); scanf("%s%s%s%s",p1->a,p1->s,p1->d,p1->f); p2=p1; i++; } p2->next=NULL; while(head!=NULL) { fprintf(fp,"%-16s%-16s%-16s%-24s\n",head->a,head->s,head- >d,head->f); head=head->next; } fclose(fp); menu(); } ///////////////////////////////////////////////////////////////////// /////////2修改 void xiugai() { int i=0,w=0; long offset; char a[16],s[16],d[16],f[24]; struct Person *p; printf("\t\t请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t"); while(w==0) {scanf("%d",&w); if(w==1) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t同学文件已建立\n"); } else printf("\t\t\t同学文件已存在\n") } else if(w==2) {if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t家人文件已建立\n"); } else printf("\t\t家人文件已存在\n"); } else if(w==3) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t同事文件已建立\n"); } else printf("\t\t\t同事文件已存在\n"); } else if(w==4) { fp=fopen("","r+"); if((fp=fopen("","r+"))==NULL) { fp=fopen("","w+"); printf("\t\t朋友文件已建立\n"); } else printf("朋友文件已存在"); } else { printf("\t\t\t输入错误,请重新输入\n"); w=0; } } printf("\t\t请输入要修改人的姓名:\n\t\t\t"); scanf("%s%s",a,s); p=malloc(LEN); while(!feof(fp)) { offset=ftell(fp); fscanf(fp,"%s%s%s%s\n",p->a,p->s,p->d,p->f); if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)) { printf("\t\t\t已找到记录:\n%-16s%-16s%-16s%-16s\n",p->a,p->s,p->d,p->f); i=1; break; } } if(i==1) { printf("\t\t\t请输入新的姓名号码地 址:\n\t\t\t"); scanf("%s%s%s%s",a,s,d,f); fseek(fp,offset,0); fprintf(fp,"%-16s%-16s%-16s%-24s\n",a,s,d,f); printf("\t\t\t恭喜,已修改成功!\n"); } else printf("\t\t\t无此相关信息\n")fclose(fp); menu(); } ///////////////////////////////////////////////////////////////////// ///////////3查找 void chazhao() { char a[16],s[16],d[16 ],f[24],m[16],n[16]; int w=0,e=0; printf("\t\t请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t"); while(w==0) { scanf("%d",&w); if(w==1) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t同学文件已建立\n"); } else printf("\t\t\t同学文件已存在\n"); } else if(w==2) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t家人文件已建立\n"); } else printf("\t\t\t家人文件已存在\n"); } else if(w==3) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t同事文件已建立\n"); } else printf("\t\t\t同事文件已存在\n"); } else if(w==4) { fp=fopen("","r+"); if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请先添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t朋友文件已建立\n"); } else printf("\t\t\t朋友文件已存在\n"); } else {printf("\t\t\t输入错误,请重新输入\n");w=0; } } printf("\t\t请输入查找方式 1:按姓氏查找 2:按姓名查找\n\t\t\t"); while(e==0) {scanf("%d",&e); if(e==1) //按姓氏查找 { printf("\t\t\t请输入姓氏:\n"); scanf("%s",m); printf("\t\t\t查找结果如下:\n姓\t\t名\t\t电话\t\t地址\n\n"); while(feof(fp)==0) { fscanf(fp,"%s%s%s%s\n",a,s,d,f); if(strcmp(a,m)==0) printf("%-16s%-16s%-16s%-24s\n",a,s,d,f; } } else if(e==2) //按姓名查找 {printf("\t\t\t请输入姓\t名:\n"); scanf("%s%s",m,n); printf("\t\t\t查找结果如下:\n姓\t\t名\t\t电话\t\t地址\n\n"); while(feof(fp)==0) { fscanf(fp,"%s%s%s%s\n",a,s,d,f); if(strcmp(a,m)==0&&strcmp(s,n)==0) printf("%-16s%-16s%-16s%-24s\n",a,s,d,f); } } else {printf("你想干嘛,重新输入吧!1按姓氏查找 2按姓名查找");e=0;} } fclose(fp); menu(); } ///////////////////////////////////////////////////////////////////// ///////4删除 void shanchu() { int i=0,w=0; long offset; char a[16],s[16],d[16],f[24]; struct Person *p; printf("\t\t请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t"); while(w==0) { scanf("%d",&w); if(w==1) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t同学文件已建立\n"); } else printf("\t\t\t同学文件已存在\n"); } else if(w==2) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t家人文件已建立\n"); } else printf("\t\t\t家人文件已存在\n"); } else if(w==3) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t同事文件已建立\n"); } else printf("\t\t\t同事文件已存在\n"); } else if(w==4) { fp=fopen("","r+"); if((fp=fopen("","r+"))==NULL) { printf("\t\t\t请添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t\t朋友文件已建立\n"); } else printf("\t\t\t朋友文件已存在\n"); } else{ printf("\t\t\t您的输入有误,请重新输入"); w=0; } } printf("\t\t\t请输入要修改人的姓名:\n\t\t\t"); scanf("%s%s",a,s); p=malloc(LEN); while(!feof(fp)) { offset=ftell(fp); fscanf(fp,"%s%s%s%s\n",p->a,p->s,p->d,p->f); if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)) { printf("\t\t\t已找到记录:\n%-16s%-16s%-16s%-16s\n",p->a,p- >s,p->d,p->f); i=1; break; } } if(i==1) //找到信息,确认删除 { fseek(fp,offset,0); fprintf(fp,"%-16s%-16s%-16s%-24s\n","","","",""); printf("\t\t\t恭喜,已删除成功!\n"); } else printf("\t\t\t好像没有此记录\n"); fclose(fp); menu(); } ///////////////////////////////////////////////////////////////////// ///////5显示 void xianshi() { char a[20],s[20],d[20],f[20]; //足够大 int w=0; printf("请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t"); while(w==0) {scanf("%d",&w); if(w==1) { if((fp=fopen("","r+"))==NULL) { fp=fopen("","w+"); printf("\t\t请先添加信息\n"); printf("\t\t\t请先添加数据\n"); menu(); } else printf("\t\t\t同学文件已存在\n"); } else if(w==2) { if((fp=fopen("","r"))==NULL) { fp=fopen("","w+"); printf("\t\t\t请添加数据\n"); menu(); } else printf("\t\t\t家人文件已存在\n"); } else if(w==3) { if((fp=fopen("","r+"))==NULL) { fp=fopen("","w+"); printf("\t\t\t请添加数据\n"); menu(); } else printf("\t\t\t同事文件已存在\n"); } else if(w==4) { fp=fopen("","r+"); if((fp=fopen("","r+"))==NULL) { fp=fopen("","w+"); printf("\t\t\t请添加数据\n"); menu(); } else printf("\t\t\t朋友文件已存在\n"); } else {printf("\t\t\t您的输入有误,请重新输入");w=0;} } while(feof(fp)==0) { fscanf(fp,"%s%s%s%s\n",a,s,d,f); printf("%-16s%-16s%-16s%-24s\n",a,s,d,f); } fclose(fp); menu();//返回主菜单继续接下来的操作 } ///////////////////////////////////////////////////////////////////// //////////6统计 void tongji() { int w=0,i=0; char a[20],s[20],d[20],f[20]; printf("请输入要操作的通讯录文件 1同学 2家人 3同事 4朋 友:\n\t\t\t"); while(w==0) {scanf("%d",&w); if(w==1) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t总数是0个,请先添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t同学文件已建立\n"); } else printf("\t\t\t同学文件已存在\n"); } else if(w==2) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t总数是0个,请先添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\t家人文件已建立\n"); } else printf("\t\t\t家人文件已存在\n"); } else if(w==3) { if((fp=fopen("","r+"))==NULL) { printf("\t\t\t总数是0个,请先添加数据\n"); menu(); fp=fopen("","w+"); printf("\t\同事文件已建立\n"); } else printf("\t\t\t同事文件已存在\n"); } else if(w==4) { fp=fopen("","r+"); if((fp=fopen("","r+"))==NULL) { printf("\t\t\t总数是0个,请先添加数据\n"); menu(); fp=fopen("","w+"); printf(",朋友文件已建立"); } else printf("朋友文件已存在"); } else {printf("\t\t\t输入错误,请重新输入");w=0;} } while(feof(fp)==0) { fscanf(fp,"%s%s%d%s",a,s,&d,f); i++; } printf("\n\t\t\t总数是%d个\n",--i); fclose(fp); menu(); } ///////////////////////////////////////////////////////////////////// /////////主函数 #include<> int main() //定义主函数 { //主函数体开始 char a[20],b[20],c[20]="admin",d[20]="asd1244"; //设置密码 printf("\n\n\n\n\n\n\n\n"); //欢迎界面 system("COLOR 27"); //定义页面颜色 printf("\t*****Welcome to use the address book management system*****\n"); printf("\n"); printf("\t*****************欢迎使用通讯录管理系统 ********************\n"); printf("\n"); printf("\n\n\n\t\t\t\t经常联系,问问彼此,最近你过得好吗\n"); printf("\n"); printf("\t\t\t\t愿亲情、爱情、友情永不凋零!\n"); printf("\n\n\n\n\n\n\\n\t\t\t\t litter Copyright rights reserved\n\n\n"); Sleep(3000); ("cls"); printf("\n\n\n\\n\n\n\n\n\n\n\n\n\t\t(Please enter your user name)请输入用户名:\n\n\n\n\n\n\t\t\t\t"); scanf("%s",a); printf("\n\n\n\n\t(Please input your password)请输入密 码:\n\t\t\t\t"); scanf("%s",b); if((strcmp(a,c)==0)&&(strcmp(b,d)==0)) //为什么改为a[20]就不行呢 { printf("\n\n\n(The user name and password are correct, welcome to use)用户名和密码正确,欢迎使用\n"); Sleep(1000); system("cls"); } else {printf("(Password mistake, please press any key to exit)密码错误,请按任意键退出\n"); exit(0); } system("COLOR 37"); menu(); }