程序实践报告_第1页
程序实践报告_第2页
程序实践报告_第3页
程序实践报告_第4页
程序实践报告_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信录管理实践报告一 概述1. 程序实践题目:通信录管理系统2. 程序实践目的:通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识,加深对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力 。3. 程序实践具体要求:l 自由组队,每题不超过3人,每组不超过3人,1人任组长。每组选择一个题目, 每组独立完成。l 软件运行时播放同步的动画音乐,通过登录口令后进入系统。 l 组长带领成员共同完成设计任务,要求每人都应独立设计若干个模块,每人设计的有效源代码应在200行以上。同时读懂其他组员完成的内容。 l 进一步掌握C的数据类型、基本结构、结构体、文件、链表、结构化、模块化设计等知识点。 l 从书上或网上查阅相关资料,自学具体课题中涉及的新知识。l 采用结构化、模块化程序设计方法,设计一个功能完善的系统 ,要有功能菜单。l 选择式:屏幕上显示功能菜单的功能项,根据菜单上提供的数字或字母按相应的键去执行相应的子程序,执行后返回功能菜单。二软件需求分析:通过对已有软件的分析,我们组发现“通讯录”并像想象中那么简单,在一些好的通讯录范例中,它可以包括针对一些企业而附加的特殊功能,并且可以与这些功能紧密地联系在一起构成功能更加强大的通讯录。而作为通讯录最基本就是对联系人信息的处理:其中要包括1. 界面登陆开始时的密码验证以及相配套的修改密码;2.创建联系人文件;3.对联新人文件进行处理(其中包括添加,删除,查询,输出所有联系人信息);4.为保护文件不被破坏还要进行数据备份。软件的约束条件:适用于所有系统。三总体设计 :考虑到通信录应用在不同方面,会有一些功能上的差异,我们组选取了通讯录最基本的功能,作为我们组通讯录的主要功能。考虑到不同功能之间的联系和差异,我们组先把所有功能分成了两大类:联系人管理和系统设置。我们组采用由粗到细、层层细化的设计方法 ,使各个功能间的关系清晰紧密,进而更好的实现软件功能的可用性、可靠性。为了更好地实现功能的调用,我们组添加了一个退出功能。该软件主要运用了:结构体和链表两大数据结构;通过链表和数据结构实现了联系人信息文件存储,联系人的排序、添加、删除和查找。基本结构体如下: : struct infor char name10; char sex6;long tele;long post;long QQ;long tex;char add20;long birth;struct infor * next; ;联系人信息结构体以下便是我组通信录的总体模块结构图:登录系统联系人管理添加联系人查找联系人删除联系人创建新联系人文件(用于分组)设置密码数据备份退出系统退出功能输出所有联系人信息返回上一界面退出功能退出功能退出功能退出功能创建新文件删除相应联系人输出被查找联系人信息录入联系人信息返回上一界面返回上一界面返回上一界面返回上一界面密码设置该软件主要功能有: 1.联系人管理(用于显示文件所有联系人)2.添加联系人3.查找联系人4.创建联系人文件(用于分组)5.删除联系人6.设置密码7.数据备份8.退出系统其中:4,创建联系人文件(用于分组)5,删除联系人6,设置密码7,数据备份功能由我负责。在设计创建联系人功能时,我解决了联系人信息排序的问题;在设计密码设置功能时,我解决文件查找和文件名如何设置的问题。四详细设计 1.创建联系人文件功能数据结构:链表,结构体运行结果如下:此功能算法流程图如下: 开始“cont“=e100=n,0=i输入文件名能否打开文件 NO 退出系统 YES输入联系人信息=bi n=n+1,i=i+1输出:“停止:stop;继续:cont“输入:eNO e=stop YES 0=iNO ipi+1= NOYESbj=pj=j+1NOp!=&bi YESbi =a,bj=bi, a=bj将bi存入文件1i=i+11输出文件已保存结束2.数据备份功能数据结构:结构体运行结果如下:此功能算法流程图如下: 开始输入需备份和备份文件名以读方式打开需备份文件以写方式打开备份文件能否打开文件NO退出系统 YES文件是否为空 YES NO从需备份文件读出一人信息=a将a赋给备份文件文件已备份结束3.修改密码功能数据结构:字符数组运行结果如下:此功能算法流程图如下:开始以只写方式打开存放密码文件 输出“请输入新密码”输入新密码=a输出“请再次输入以确认”再次输入=bNOa=bYES 输出“重新设置:1;退出:0” 输入:为:1 输入为 1 其他 输入为0 为:0输出返回上一界面 结束4.删除联系人功能数据结构:链表,结构体运行结果如下:此功能算法流程图如下:开始输入所需处理文件名以只读方式打开该文件文件是否能打开NO YES0=iYES文件是否为空 NO读出一人信息赋给 aii=i+1将结构体赋给一链表输出删除 人姓名NO通过链表查找是否存在该人输出“删除联 系人不存在” 以只写方式再次打开文件并存入链表 输出联系人已删除结束五程序调试与测试 1.在我的模块完成过程中,记忆最深的就是在创建联系人文件时出现的错误,因为存了几个人的信息,只有一个人的信息被完整存放 ,自己找了一下午也没发现原因。后来经过与书上用到的选择排序法比较 ,才发现原来自己在这部分,少了一个变量互换步骤 ,才顺利完成此功能。2.第二个问题是,在修改密码时,如果稍长,无法正常完成密码验证,总还是输对了还显示密码错误。经过与老师交流,将变量先赋初值在验证就成功了。六总结与体会 该软件基本上实现了作为通讯录的本功能,与其他同学程序相比,我组的特点是:带有“退出功能“这项功能函数,实现了各个功能间的方便转换,还带有密码重新设置功能。缺点是没能列出所有存放联系人信息的文件名,只一点带来了些不便。而在设计过程中最大的困难就是不会使用文件,后来经过复习,实践问老师就解决了。心得体会:要完成一件事就要有勇气去了解与他相关的全部,这样才会实现目标。 编程让我做事时更加积极,更加愿意付出,虽然累但很充实。以后遇到问题我会变得等价积极。七结束语经过几周的编程终于有了自己的成果,在这期间,问了老师不少次问题,真的很感谢老师耐心的帮助。老师的耐心也极大地鼓舞了我编程的信心,也引起了我对编程更大的兴趣。与老师相互讨论,真的很感动,第一次那么近的接触老师。8 程序源代码# include# include # include # include # define LEN sizeof(struct infor)# define N 10# define CCH nstruct infor /*定义结构体*/char name10;char sex6;long tele;long post;long QQ;long tex;char add20;long birth;struct infor * next;int n=0;/*输出标题功能子函数*/void printf3()printf( n); printf( n); printf( n);void printf4() printf( =n);printf( * 1.联系人管理 *n); printf( * 2.添加联系人 *n); printf( * 3.查找联系人 *n); printf( * 4.修改密码(限用:数字或字母且小于10个) *n); printf( * 5.数据备份 *n); printf( * 6.创建新联系人文件(用于分组) *n);printf( * 7.删除联系人 *n);printf( * 0.退出管理系统 0 enter *n);printf( =n);printf( 请 选 择 0 7:n );/*/void quit1() /*退出系统*/system(cls);printf3();printf(nnn n);printf( / / / / / / n);printf( ( (oo) ) ( (oo) ) ( (oo) ) n);printf( n);printf(nnnnnn 谢谢您的使用n *I*love*you*n);void error() /*输入的功能不存在报告*/ system(cls);printf3();printf(您所需要的功能不存!已返回上一界面n);/*联系人管理功能子函数*/ void manage() void print1();int c; printf(nnn);printf( *n);printf( *_ *n);printf( * _) 输出所有联系人信息: 8 *n);printf( * _) *n);printf( * _) *n);printf( *_) *n);printf( *n);printf( *_ *n);printf( * _) 返回上一界面:0 *n);printf( * _) *n);printf( * _) *n);printf( *_) *n);printf( *n);scanf(%d,&c);switch (c)case 0:break;case 8:print1();break;default:error();/*添加联系人功能子函数*/void increase() void scan();int c;printf(nnnn);printf( _ * *n);printf( * _) 录入联系人信息: 9 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);printf( _ * *n);printf( * _) 返回上一界面:0 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);scanf(%d,&c);switch(c)case 0:break;case 9:scan();break;default :error();/*添加联系人功能子函数*/void scan()FILE * fp;char filename10=0;struct infor people300;struct infor a;struct infor * p=&people0,* p1=&a;struct infor *head,*p2,*p3;char ch=n;char chh300;int n=0,i,j=0,t,k=0,w; system(cls);printf3();printf(请输入所查找文件名n);scanf(%s,filename); if(fp=fopen(filename,r)=NULL)printf(不能打开文件n);exit(0);if(!feof(fp) /*文件是否为空判断*/for(i=0;i+)fread(&peoplei,sizeof(struct infor),1,fp); chhi=fgetc(fp); n=n+1; if(chhi=EOF)break;fclose(fp);head=p2=&people0;p3=&people1;for(t=0,i=0;inext=p3;p2=&peoplet;p3=&peoplet+1;peoplen-1.next=NULL;printf(请输入联系人信息n);printf(姓名(相同姓名请加以区分) 性别(f女/m男) 电话 邮编 QQ 传真 地址 生日n);scanf(%s%s%d%d%d%d%s%d,&p1-name,&p1-sex,&p1-tele,&p1-post,&p1-QQ,&p1-tex,&p1-add,&p1-birth);p2=p3=head=&people0;while(strcmp(p1-name,p2-name)0&(p2-next!=NULL)p3=p2;p2=p2-next;if(strcmp(p1-name,p2-name)next=p2;else p3-next=p1;p1-next=p2; elsep2-next=p1;p1-next=NULL;n=n+1;if(fp=fopen(filename,w)=NULL)printf(不能打开文件n);exit(0);p2=head;while(knext ;k=k+1;fclose(fp);printf(文件%s已保存n,filename);printf(此文件所存联系人数为:%dn,k);else printf(此文件为空文件,请重新创建联系人文件n);printf(nnn);printf(返回请输入:0n);scanf(%d,&w);/*查找联系人功能子函数*/void search() void print2(); int c;printf(nnnn);printf( _ * *n);printf( * _) 查找联系人: 10 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);printf( _ * *n);printf( * _) 返回上一界面:0 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);scanf(%d,&c);switch(c)case 0:break;case 10:print2();break;default:error();/*数据备份功能子函数*/void copy() FILE * in,*out;int t;char infile10,outfile10;system(cls);printf3();printf( 请输入需备份文件名n);scanf(%s,infile);printf(请输入备份文件名n);scanf(%s,outfile);if(in=fopen(infile,r)=NULL)printf(不能打开文件n);exit(0);if(out=fopen(outfile,w)=NULL)printf(不能打开文件n);exit(0);while(!feof(in) fputc(fgetc(in),out);fclose(in);fclose(out);printf(nnn);printf(返回请输入:0n);scanf(%d,&t); /*输出所有联系人功能子函数*/ void print1() FILE * fp;char filename10;struct infor people300,a;struct infor * p=&people0,*p1=&a;struct infor *head,*p2,*p3;char ch300=n;int n=0,i,j=0,t,w; system(cls);printf3();printf(请输入所查找文件名n);scanf(%s,filename); if(fp=fopen(filename,r)=NULL)printf(不能打开文件n);exit(0);if(fgetc(fp)!=EOF) /*文件是否为空判断*/rewind(fp);for(i=0;i+)fread(&peoplei,sizeof(struct infor),1,fp); chi=fgetc(fp); n=n+1; if(chi=EOF)break;head=p2=&people0;p3=&people1;for(t=1,i=0;inext=p3;p2=&peoplet;p3=&peoplet+1;peoplen-1.next=NULL;if(head!=NULL)doprintf(姓名 性别(f女/m男) 电话 邮编 QQ 传真 地址 生日n);printf(%-10s%-6s%d %d %d %d %-20s %dn,p-name,p-sex,p-tele,p-post,p-QQ,p-tex,p-add,p-birth);p=p-next;while(p!=NULL);fclose(fp);else printf(您所查找的文件不存在n);printf(nnn);printf(返回请输入:0n);scanf(%d,&w);/*输出所查找联系人信息功能子函数*/void print2() FILE * fp;char e10=0,filename10=0;struct infor people300;struct infor * p=&people0;char ch300;int n=0,i,j,t;system(cls);printf3();printf(请输入所查找文件名n);scanf(%s,filename); if(fp=fopen(filename,r)=NULL)printf(不能打开文件n);exit(0);for(i=0;i+)fread(&peoplei,sizeof(struct infor),1,fp); chi=fgetc(fp); n=n+1; if(chi=EOF)break;printf(请输入所查找联系人姓名n);scanf(%s,e);for(j=0;jname,e)!=0;j+)p=&peoplej+1;if(strcmp(p-name,e)=0)printf(姓名 性别(f女/m男) 电话 邮编 QQ 传真 地址 生日n);printf(%-10s%-6s%d %d %d %d %-20s %dn,p-name,p-sex,p-tele,p-post,p-QQ,p-tex,p-add,p-birth);fclose(fp);printf(nnn);printf(返回请输入:0n);scanf(%d,&t);/*/void change() /*修改密码功能子函数*/void new1();int c;printf(nnnn);printf( _ * *n);printf( * _) 修改密码: 11 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);printf( _ * *n);printf( * _) 返回上一界面:0 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);scanf(%d,&c);switch(c)case 0:break;case 11:new1();break;default:error();/* 创建新联系人文件功能子函数*/void fcreat() FILE *fp;struct infor * p1,* p2,* head,* p;struct infor b300,a;int i,j,n=0,w=0;int t;char ch=n;char e10,filename10=0;system(cls);printf3();p1=p2=head=(struct infor *)malloc(LEN);printf(请输入文件名n);scanf(%s,filename);if(fp=fopen(filename,w)=NULL)printf(不能打开文件n);exit(0);printf(请输入联系人信息n);printf(姓名(相同姓名请加以区分) 性别(f女/m男) 电话 邮编 QQ 传真 地址 生日n);head=NULL;for(i=0;strcmp(e ,stop);i+)scanf(%s%s%d%d%d%d%s%d,&,&bi.sex,&bi.tele,&bi.post,&bi.QQ,&bi.tex,&bi.add,&bi.birth);printf(输入“stop”结束输入,输入“cont”继续添加n);n=n+1;scanf(%s,e);if(strcmp(e ,stop)printf(姓名(相同姓名请加以区分) 性别(f女/m男) 电话 邮编 QQ 传真 地址 生日n);for(i=0;in;i+)p=&bi;for(j=i+1;j0)p=&bj;if(p!=&bi)strcpy(,);strcpy(a.sex,bi.sex);a.tele=bi.tele;a.post=bi.post;a.QQ=bi.QQ;a.tex=bi.tex;strcpy(a.add,bi.add);a.birth=bi.birth;/*/strcpy(,p-name);strcpy(bi.sex,p-sex);bi.tele=p-tele;bi.post=p-post;bi.QQ=p-QQ;bi.tex=p-tex;strcpy(bi.add,p-add);bi.birth=p-birth;/*/strcpy(p-name,);strcpy(p-sex,a.sex);p-tele=a.tele;p-post=a.post;p-QQ=a.QQ; p-tex=a.tex;strcpy(p-add,a.add);p-birth=a.birth;/*/fwrite(&bi,sizeof(bi),1,fp);if(i!=n-1)fputc(ch,fp);w=w+1;printf(文件已保存n);printf(此文件所存联系人数为:%dn,w);fclose(fp);printf(nnn);printf(返回请输入:0n);scanf(%d,&t);/*创建新联系人文件功能子函数*/void creat() int c;printf(nnnn);printf( _ * *n);printf( * _) 创建新联系人文件:12 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);printf( _ * *n);printf( * _) 返回上一界面:0 *n);printf( * _) * *n);printf( * _) *n);printf( *_) *n);scanf(%d,&c);switch(c)case 0:break;case 12:fcreat();break;default:error();/*修改密码功能子函数*/void new1() void new2();FILE * fp;char

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论