C++程序设计:通信录的设计与实现.doc_第1页
C++程序设计:通信录的设计与实现.doc_第2页
C++程序设计:通信录的设计与实现.doc_第3页
C++程序设计:通信录的设计与实现.doc_第4页
C++程序设计:通信录的设计与实现.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

通信录的设计与实现1、问题描述:通过该系统实现对有N个同学的通信信息进行录入、显示、修改、删除等操作的管理。2、功能要求:1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:姓名、性别、单位、手机号、e-mail。2)本系统显示这样的菜单:通信录1基本信息录入2基本信息显示3基本信息删除4基本信息查询A、按姓名查询B、按单位查询5 退出系统请选择系统功能项:3)执行一个具体的功能之后,程序将重新显示菜单。3、算法提示:1)数据结构:结构体类型数组2)数据库结构:该系统的基本数据库如下:姓名性别单位手机号e-mailcharchar charcharchar4、测试数据:学生人数N=10 对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。 课题五:工资管理系统的设计与实现1、问题描述:通过该系统实现对有N个职工的工资信息进行录入、显示、修改、删除等操作的管理。2、功能要求:1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:工号、姓名、各项工资、应发工资、实发工资等。2)本系统显示这样的菜单:工资管理系统1基本信息录入2基本信息修改3基本信息删除4工资查询A、按姓名查询B、按单位查询C、按工号查询5 退出系统请选择系统功能项:3)执行一个具体的功能之后,程序将重新显示菜单。3、算法提示:1)数据结构:结构体类型数组2)数据库结构:该系统的基本数据库如下:工号姓名性别各项工资基本工资应发工资实发工资charchar charintintintchar4、测试数据:职工人数N=10 对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。 课题六:图书供阅管理系统的设计与实现1、问题描述:通过该系统实现对有图书馆图书的借阅情况进行录入、显示、修改、删除、查询等操作的管理。2、功能要求:1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、借阅时间、还书时间、所借书名、书号等信息。2)本系统显示这样的菜单:图书借阅管理系统1基本信息录入2基本信息显示3基本信息删除4基本信息查询A、按姓名查询B、按学号查询5 退出系统请选择系统功能项:3)执行一个具体的功能之后,程序将重新显示菜单。3、算法提示:1)数据结构:结构体类型数组2)数据库结构:该系统的基本数据库如下:学号姓名书号书名借书日期还书日期单价charchar charcharcharcharfloat4、测试数据:学生人数N=10 对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。 目 录一、需求分析 1二、总体设计 1三、详细设计 3四、程序调试分析 10五、总结 11 六、源程序代码 11 一、 需求分析 (1) 程序的功能。该系统主要功能是实现对通讯录信息进行插入、显示、删除、查询等,并可将文件保存在文件中,以达到对各个人的联系信息进行随时的添加、查询和删除的操作管理。它的数据结构为结构体类型数组。 (2) 输入输出的要求运行程序进入主菜单页面后,要根据提示进行操作,采用键盘操作来实现各功能间的跳转。在输入时,只能输入字符和数字。(3) 通过该系统实现对有N个同学的通信信息进行录入、显示、查询、删除等操作的管理。本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:姓名、性别、单位、手机号、e-mail。本系统显示这样的菜单:通信录1基本信息录入2基本信息显示3基本信息删除4基本信息查询A、按姓名查询B、按单位查询5 退出系统请选择系统功能项:执行一个具体的功能之后,程序将重新显示菜单。数据库结构:该系统的基本数据库如下:姓名性别单位手机号e-mailcharchar charcharchar 二、 总体设计 (1)数据结构: 由于通讯录中究竟包含多少人预先无法知道,所以程序中采用队列式单链表存储通讯数据,链表中节点数据类型为: typedef struct node char name20; /*姓名*/ char sex2; /*性别*/ char units20; /*单位*/ char tele12; /*手机号*/ char email40; /*电子邮箱*/ struct node *next; /*下一个节点指针*/ add_list; 链表的头指针为全局变量head。 用于保存通讯记录的文件名在程序运行时由用户输入,文件为二进制文件,文件中保存是数据类型为struct person。 (2)算法: 在main()函数中,首先从键盘输入通讯录文件名,然后调用load()函数从该文件中读出数据,生成通讯录单链表。由于生成的是队列式单链表,为了连入新节点方便定义全局指针变量tail,该变量指向通讯录链表的尾节点。如果文件不存在,则生成一个空的通讯录链表,load函数返回值为通讯录链表的头指针值。 其次,显示菜单并提示用户选择相应的菜单项。此项功能由程序中menu_select函数完成。菜单中有5个菜单项,分别为:插入新的记录、保存记录、显示记录、查询记录、删除记录和退出。menu_select函数返回值为菜单项对应的字符取值,如选择插入新的通讯记录则返回“1”。 录入新的通讯记录、查找记录、删除记录、显示文件等功能分别定义相应的函数。Insert函数执行的功能是:在通讯录链表的尾部连入一条新的通信记录。将函数的参数定义为add_list * *类型,调用时实参应写成&head。在函数中,*head表示链表的头指针。 Save函数是将通讯录链表中的内容保存到指定文件中。 Delete函数执行的功能是:按照姓名删除通讯记录,并已经考虑到可能存在同名同姓的情况。Delete函数中也可能存在删除链表第一个指针的情况,所以和insert函数类似的是,它的形参同样定义成add_list类型。Delete函数返回值为int类型,返回0表示删除操作失败,如用户输入的要删除的人的姓名不存在。返回1表示成功完成删除操作。 Search函数可完成查询操作。又分为按姓名查询和按单位查询。 三、 详细设计 (1)功能模块图 (2)insert函数流程图 (3)save 函数流程图 (4)display 函数流程图 (5)delete 函数流程图(6)search 函数流程图开 始 菜 单 6.退出4删除5查询3显示2保存1录入a.姓名b.单位结 束 (1)功能模块图开始输入姓名 输入单位输入手机号输入性别输入email显 示 主 菜 单(3)insert函数流程图开 始显示 主菜单打开文件不能打开文件保 存 (3)save函数流程图开 始显示 主菜单输入“3键”显 示 所 有 记 录 (4)display函数流程图 开 始显 示 主 菜 单选择删除键”4”N输入要删除人姓名 Flag=0 Flag=1查无此人确认是否删除?Y删除成功 (5)delete函数流程图开 始显示主菜单输入“5”请选择查询方式a.按姓名查询b.按单位查询请输入姓名请输入单位Flag=1Flag=1显示结果显示结果Flag=0查 无 此 人 (6)search函数流程图四、 程序调试分析(1) 程序调试是一个很重要的过程,一个程序若存在错误那么它将不能运行,所以在运行程序前,需修改其错误。首先要规范变量的命名,规范的命名有助于自己和他人对本程序的管理和维护。其次,要注意各种符号的配对。如,(),等。而且还要形成良好的书写习惯。在实际中,良好的书写习惯会帮助我们克服一些实际出错位置和报错位置差别比较大的错误。并且,其中的一些小错误很容易就能看出来,比如:变量没有声明,类型不对应,函数参数传递错误等。而有一些错误是从信息中看不出来的,语法的错误不太难纠正,但是算法的错误就不好纠正了。这就要求我们用调试工具来一步步找出错误。只有不断的调试和分析,才能够使程序更加合理和可行。在修改完程序后,可开始进行程序的测试。(2) 运行程序,出现”qing shu ru wen jian ming chen:”输入文件名后出现主菜单,选择“1”到“6”。(3) 输入1:进入通讯录录入窗口,根据提示依次输入姓名、性别、单位、手机号和电子邮箱,按回车键进入主菜单。再键入1键,继续录入第二条记录.直至录入了十条记录为止。(4) 输入2:可将记录保存到指定文件中。(5) 输入3:进入显示窗口,会显示出所有录入的数据,按回车键可回到主菜单窗口。(6) 按“4”键亦可以删除记录。输入“4”:进入删除窗口,输入所要删除的联系人的名字。若有此人,再确认是否删除。输入“y”或“Y”,确认删除。若无此人,则显示“cha wu ci ren ”。(7) 按“5”键可通过姓名、单位查询通讯录记录。进入主菜单页面后,输入“5”,出现“qing xuan ze cha xun fang shi ”“a.tong guo xing ming cha xun ”“b.tong guo dan wei cha xun”“qing xuan ze”,选择a,b,分别查询。(8) 按”6”键可退出程序.五、 总结 刚开始知道有C语言课程设计的时候,心想这是一个好事呃,可以帮我们巩固以前学的内容。可是拿到程序设计题以后,并不是我原想的那样,而且还根本不知道从何开始,脑袋里一片空白。随后就是上网啊,跑图书馆啊,一个劲的看书,找资料。可是那些书上的东西并没有帮到我多少,反而使我更感到无从下手。可是我并不放弃,终于在图书馆找到了一个与通讯录相近的程序。于是定下心来“研究“这个程序。刚开始就被几百多行的代码给吓着了,但没办法,只好坚持看下去。里面有好多东西都是查过书后才知道的。最后通过查书大概的把程序看懂了。这样就开始着手编写自己的通讯录程序了。毕竟是第一次写C语言程序,尽管看懂了类似的程序,可是到自己写的时候还是觉得不能下手,还一直要翻书借鉴这个程序里的内容。 不过最后,我还是努力完成了这个设计,虽然有不少内容可能还存有问题,但毕竟是第一次嘛,可是我还是收获了不少。 程序刚写完的时候,第一次运行时发现了好几个错误,后来程序大的改动了好几次才能像现在一样正常的运行。当然还得感谢有些好心的同学帮我指出和修改了一些错误。通过这次课程设计,我发现自己对于C语言的认识还有很多不足之处.过这次C语言课程设计,我进一步掌握了某些知识,像数据类型,分支控制,函数的定义与调用等等,学会了用C语言编写一些简单的程序,譬如程序的局部测试,调试方法。 六、 源程序代码#include #include #include int menu_select();typedef struct node char name 20; char sex2; char units20; char tele12 ; char email20; struct node *next;add_list;struct person char name20; char sex2; char units20; char tele12; char email20;FILE *fp;add_list *tail,*head;/*从文件中读出数据生成通讯录链表,若文件不存在,生成空链表*/add_list *load(char filename) add_list *new,*head; struct person t; head=(add_list * )malloc(sizeof(add_list); tail=head=NULL; if(fp=fopen(filename,rb)=NULL) return head; else if(!feof(fp) if(fread(&t,sizeof(struct person),1,fp)=1) new=(add_list * )malloc(sizeof(add_list);/*连入链表第一个节点*/ strcpy(new-name,); strcpy(new-sex,t.sex); strcpy(new-units,t.units); strcpy(new-tele,t.tele); strcpy(new-email,t.email); head=tail=new; new-next=NULL;/*连入链表其余节点*/ while(!feof(fp) if(fread(&t,sizeof(struct person),1,fp)=1) new=(add_list *)malloc(sizeof(add_list); strcpy(new-name,); strcpy(new-sex,t.sex); strcpy(new-units,t.units); strcpy(new-tele,t.tele); strcpy(new-email,t.email); tail-next=new; new-next=NULL; tail=new; fclose(fp); return head;/*插入一条记录*/void insert (add_list *head) add_list*new; new=(add_list*)malloc(sizeof(add_list); printf(n qing shu ru xing ming:);getchar();gets(new-name); printf(n qing shu ru xing bie:);gets(new-sex); printf(n qing shu ru dan wei:);gets(new-units); printf(n qing shu ru shou ji hao:);scanf(%s,new-tele); printf(n qing shu ru email:);scanf(%s,new-email); if(*head=NULL) *head=new; new-next=NULL;tail=new; else tail-next=new; new-next=NULL;tail=new; /*保存记录*/void save(add_list *head,char filename) add_list *p; struct person t; if(fp=fopen(filename,wb)=NULL) printf(error:can not open file %sn,filename); exit(1); else p=head; while(p!=NULL) strcpy(,p-name); strcpy(t.sex,p-sex); strcpy(t.units,p-units); strcpy(t.tele,p-tele); strcpy(t.email,p-email); fwrite(&t,sizeof(struct person),1,fp); p=p-next; fclose(fp);/*显示记录*/void display(add_list *head) add_list *p; p=head; while(p!=NULL) printf(xing ming:%stxing bie:%stdan wei:%sn,p-name,p-sex,p-units); printf(shou ji hao:%stemail:%sn,p-tele,p-email); p=p-next; /*删除记录*/int delete(add_list *head) add_list *p,*q,*t; char name20,c; int flag=0; printf(qing shu ru yao shan chu ren xing ming:); getchar(); gets(name); q=p=*head; while(p!=NULL) if(strcmp (name,p-name)=0) printf(xing ming:%stxin bie:%stdan wei:%sn,p-name,p-sex,p-units); printf(shou ji hao:%stemail:%sn,p-tele,p-email); printf(zhen de yao shan chu ma ?(Y:shi,N:fou)n); c=getchar();getchar(); if(c=y|c=Y) if(p=*head) *head=p-next; else q-next=p-next; t=p; p=p-next; free(t); flag=1; else q=p; p=p-next; else q=p; p=p-next; return flag;/*查询记录*/int search(add_list *head) add_list *p; char name20,units20,c; int flag=0; printf(qing xuan zhe cha xun fang shi:n); printf(a:tong guo xue hao cha xun n); printf(b:tong guo dan wei cha xunn); printf(qing xuan zhe:n); scanf(%c,c); switch(c) case1:printf(qing shu ru yao cha xun ren de xing mingn); getchar(); gets(name); p=head; while(p!=NULL) if(strcmp(name,p-name)=0) printf(xing ming:%stxing bie:%stdan wei:%sn,p-name,p-sex,p-units); printf(shou ji hao:%stemail:%sn,p-tele,p-email); flag=1; p=p-next; case2:printf(qing shu ru yao cha xun ren de dan wein); getchar(); gets(units); p=head; while(p!=NULL) if(strcmp(units,p-units)=0) printf(xing ming:%stxing bie:%stdan wei:%sn,p-name,p-sex,p-units); printf(shou ji hao:%stem

温馨提示

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

评论

0/150

提交评论