C语言课程设计报告_第1页
C语言课程设计报告_第2页
C语言课程设计报告_第3页
C语言课程设计报告_第4页
C语言课程设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、河南理工大学计算机科学与技术学院课程设计报告课程名称:高级语言程序设计设计题目:班级通讯录学牛姓名:杨传华学 号:311009030227专业班级信管1002班指导教师:于金霞2010年09月10日一、设计题目及要求设计题目 : 班级通讯录对象 :信管 1010 级(一)、 技术参数和设计要求 :1.1.该系统主要处理通讯录的相关信息。2.2.通讯录信息主要包括:姓名、班级、手机、家庭电话、电子邮件、通讯 录地址、 邮编等内容。3.3.完成以下的操作:实现通讯录信息的添加、修改、删除和查询。(二)、设计内容与步骤1.1. 分析并建立满足上述要求的数据结构2.2. 算法设计与分析3.3. 程序设

2、计、实现、调试4.4. 课程设计说明书二、算法设计分析因为一个班级里面有很多学生, 而且每个学生又包含很多信息如姓名、 学号、 电 话、邮箱等, 这些信息又分别属于不同的数据类型, 但是每个学生所包含的数 据信息成 分相同,所以要用到构造数据类型:结构体。用到结构体,应为要能实 现查找、修改、删 除等,所以又要用到链表的知识!要实现这些功能,要用到模 块化设计思想,用函数来解 决问题!三、具体函数分析(一)、插入新结点在插入新结点之前,先创建一个只有指针域的头结点, 又指针 p p 扫描全链表, 实现 尾插法,并返回头指针。(二)、删除结点用连个指针p,qp,q扫描全链表,先通过学号找到要删除

3、的结点 q,q,然后将q q结 点从链表 中删除,然后释放此结点!(三)、修改结点内容通过学号找到此学生,通过 switchswitch 语句选择要修改的项目,然后进行修改。(四)、查找并输出通过学号找到此学生,然后分别访问并输出此结点各项内容(五) 、输出通讯录顺序访问链表各个结点,并输出结点信息。(六)、保存为文件现在d d盘里面创建一个读写类型文件“班级通讯录 .txt.txt ”,然后通过文件类型 指针 fpfp访问此文件并写入通讯录信息。(七)、释放结点并结束程序从头结点开始,使头结点不断后移,并将前面的结点释放。四、算法流程图prin tf(n *cprintf(*班级通讯录*pr

4、intf(1:新建通讯录*n);*printf(2:删除通讯录*n);*printf(3:修改通讯录*n);*printf(4:查询通讯录*n);*printf(5:显示全部记录*n);*printf(6:保存为文件*n);* 7?禅访納丰士由头A Lprintf(7:释放链表并结束程序*n );prin tf(*n)程设计五、函数运行情况及部分代码)、主函数框架主函数要用到基本输入输出、switchswitch语句转换操作命令,然后用 循环gotogoto语句实现操作。具体如下:int main()int cz; 操作符 struct stu *head,*q; head=(struct s

5、tu*)malloc(sizeof(struct stu);head- next=NULL;system(color 2e);修改dos窗口前背景色,用两个十六进制数表示start :printf(输入操作符 1-7:);sca nf(%d, &cz);switch(cz)case 1:q=(struct stu *)malloc(sizeof(struct stu); printf(t 输入姓名:);scanf(%s,q-name); printf(t输入学号:);scanf(%d,&q-xh);printf(t 输入班级:);scanf(%d,&q-grade); printf(t手机号:

6、);scanf(%s,q-cel); printf(t家庭电话:);scanf(%s,q-tel); printf(t输入电子邮件:);sca nf(%s,q-mail); prin tf(t通讯录地址:);scanf(%s,&q-add); printf(t输入邮编:);scanf(%s,&q-post);charu(head,q);语言课气rTrT););*、nnn ) ?printf(插入成功川n);break;case 2:/ 删除head=del(head); break;case 3:cha n ge(head);break;case 4:search(head);break;ca

7、se 5:prin tall(head);break;case 6:prin tf(n);baoc(head); break;case 7:sf(head);exit (0);default: printf(输入操作错误,重新);goto start;return 0;其中用到输出* *来美化系统运行页面,然后用system(colorsystem(color 2e);2e); 语句来修改dosdos界面前背景颜色,(二)、插入函数struct stu *charu(struct stu *head,struct stu *q)/插入新结点struct stu *p;for(p=head;p-

8、n ext!=NULL;p=p-n ext);p_n ext=q;q- next=NULL;retur n head;本部分采用尾插法(三)删除结点代码如下:struct stu *del(struct stu *head) 删除结占八、struct stu *p,*q;int a;/要删除学生的学号if(head- next=NULL)printf(八空!*nnn)IVelseprintf(t输入要删除学生学号:);sca n f(%d, &a);for(p=head,q=p-n ext;q-xh!=a&q-n ext!=NULL;)p=p-n ext;q=p-n ext;if(q_xh=a

9、)p_n ext=q _n ext;free(q);printf(”删除成功! !!n);else prin tf( no people have foun d!);retur n head;运行界面通讯录为(四)查找输入要查找学生学号,找到后将其输出,如图不为空时:先通过学号找到该学生,然后用(五)修改学生信息switch语句选择修改项,再用switch和goto语句实现是否 循环,行如图:(六)、保存文件在D:盘中创建一个读写文件,顺序将各节点信息保存进去,代码为struct stu *baoc(struct stu *head) 保存文件FILE *fp;struct stu *p=he

10、ad;if(head- next=NULL)else 班级通讯录.txt,w)=NULL)prin tf(ca nt ope n file!n);exit(0); while(p- next!=NULL) fwrite(p-n ext,sizeof(struct stu),1,fp);p=p-n ext; fclose(fp);printf(保存文件成功!nn);prin tf (* 八空!*、nnn)(七)释放结点退出系统用指针p扫描链表,头指针逐步后移,释放结点 sf(struct stu *head)struct stu *p=head ;printf(释放链表:n ”);while(p

11、!=NULL)head=head-n ext;free(p);p=head;printf(释放链表成功!n);p,代码如下:voidretur n head;六、附录:完整原代码#in clude#in cludevstri n g.h#in clude运行如图空 !printf(*讯录为*nnn);#include struct stuchar name100;/ 姓名 int xh;/ 学号 int grade;/ 年级 char cel15;/ 手 机 char tel50;/ 电话 char mail50;/ 邮件 char add100;/ 地址 char post15;/ 邮编 s

12、truct stu *next;struct stu *charu(struct stu *head,struct stu *q)/ 插入新结点 struct stu *p; for(p=head;p-next!=NULL;p=p-next); p-next=q;q-next=NULL; return head;void search(struct stu *head)/ 查找结点并输出 struct stu *p;int a;/ 要查找学生的学号if(head-next=NULL) elseprintf(t 输入要查询学生学号 :); scanf(%d,&a); for(p=head-nex

13、t;p-next!=NULL;p=p-next)if(p-xh=a)printf( 要查找的学生信息为 :n); printf( 姓名: );puts(p-name);printf(t 学号 : );printf(%d,p-xh); printf(t 年级: );printf(%dn,p-grade); printf(t 手机: );puts(p-cel);printf(t 电话: );puts(p-tel);空!printf(*讯录为*nnn); p=p-n ext;printf(t 邮箱:”);puts(p-mail);printf(t 地址 ”);puts(p-add);printf(t

14、 邮编:);puts(p-post);printf(t 查找成功!): printf(nnn); break;if(p-xh=a)printf(要查找的学生信息为:n);printf(姓名: );puts(p-n ame);prin tf(t年级:);pri ntf(%dn,p-grade);prin tf(t手机:);puts(p-cel);prin tf(t电话:);puts(p-tel);prin tf(t邮箱:);puts(p-mail);printf(t 地址);puts(p-add); printf(t邮编:);puts(p-post); prin tf(t查找成功!): prin

15、 tf(nnn);else printf(no people have foun d!n);struct stu *del(struct stu *head)删除结点struct stu *p,*q; i nt a;/ 要删除学生的学号if(head- next=NULL)elseprintf(t 输入要删除学生学号 :);scanf(%d,&a); for(p=head,q=p-n ext;q-xh!=a&q-n ext!=NULL;) q=p-n ext; if(q-xh=a)空 !printf(H*讯录为*nnn );p-next=q-next;free(q);printf( 删除成功

16、!n);else printf(no people have found!);return head; struct stu *change(struct stu *head)/ 修改结点内容 int b,a,c;struct stu *p;if(head-next=NULL)else printf ( 输入要修改学生学号 :) scanf(%d,&a);for(p=head-next;p!=NULL;p=p-next)if(p-next-xh=a)start: printf( 输入想要修改什么 ?n )printf(ttt1: 修改姓名n);printf(ttt2: 修改学号n);print

17、f(ttt3: 修改年级n);printf(ttt4: 手机n);printf(ttt5: 电话n);printf(ttt6: 邮件n);printf(ttt7: 地址n);printf(ttt8: 邮编n);printf( 请输入你的选择: ); scanf(%d,&b);switch(b)case 1: printf(t 输入新姓名 :);scanf(%s,p-name);break; case 2:printf(t 输入新学号 :);scanf(%d,&p-xh);break;case 3:cri n+f/2空!*nnn)printf(t 输入新的班级 :); scanf(%d,&p-g

18、rade);break; case 4:printf(t 输入新的手机号 :);scanf(%s,p-cel);break; case 5:printf(t 输入新的电话号 :);scanf(%s,p-tel);break; case 6:printf(t 输入新的邮箱 :); scanf(%s,p-mail);break; case 7:printf(t 输入新的地址 :); scanf(%s,p-add);break;case 8:printf (t 输入新的邮编 ;);scanf(%s,p-post);break;default: printf( 输入操作错误,请重新输入 :);prin

19、tf( 修改成功 !n);printf( 是否要修改其他项? 1:是 2: printf( 否 n); 请输入你的选择: ); scanf(%d,&c);switch(c)case 1:goto start;case 2:break;return head;void printall(struct stu *head)/ 输出全部通讯录struct stu *p=head-next; while(1)if(p=NULL)*break;else if(p- next=NULL)prin tf(姓名:);puts(p- name);printf(t 学号:);printf(%dn,p-xh);pr

20、intf(t 年级:);printf(%dn,p-grade);printf(t 手机:);puts(p-cel);printf(t 电话:);puts(p-tel);printf(t 邮箱:);puts(p-mail); prints% 地址:);puts(p-add);prin tf(t 邮编:);puts(p-post);printf(输出成功!n); printf(nnn); break;elseprintf( printf(t 学 号:tf(t 年 级intf(t 手 机intf(t 电 话intf(t 邮 箱:tf(t 地 址intf(t 邮 编: prin tf(n);p=p-n

21、 ext; con ti nue;姓名: );puts(p-n ame););pri ntf(%dn,p-xh););pri ntf(%dn,p-grade););puts(p-cel););puts(p-tel););puts(p-mail););puts(p-add););puts(p-post);printf(输出成功!n);struct stu *baoc(struct stu *head)保存文件FILE *fp; struct stu *p=head; if(head- next=NULL)空!printf( H*讯录为*nnn);else语言课程*nnn);班级通讯录.txt,w

22、)=NULL)printf(cant open file!n); exit(O);while(p- next!=NULL)fwrite(p-n ext,sizeof(struct stu),1,fp); p=p-n ext;fclose(fp); printf(保存文件成功 !nn);retur n head;void sf(struct stu *head)struct stu *p=head ; prin tf(释放链表:n); while(p!=NULL) head=head-n ext; free(p); p=head;printf(释放链表成功!n);int main()int cz;/操作符 struct stu *head,*q;head=(struct stu*)malloc(sizeof(struct stu);head- next=NULL;system(color 2e);修改dos窗口前背景色,用两个十六进制数表示prin tf(n*cprintf( *1:新建通讯录*n);printf( *2:删除通讯录*n);printf( *3:修改通讯录*n);printf

温馨提示

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

评论

0/150

提交评论